diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..3729ff0c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/.github/images/dashboard/alarm-edit.png b/.github/images/dashboard/alarm-edit.png new file mode 100644 index 00000000..72e5295f Binary files /dev/null and b/.github/images/dashboard/alarm-edit.png differ diff --git a/.github/images/dashboard/alarms.png b/.github/images/dashboard/alarms.png new file mode 100644 index 00000000..0aa06848 Binary files /dev/null and b/.github/images/dashboard/alarms.png differ diff --git a/.github/images/dashboard/config-edit.png b/.github/images/dashboard/config-edit.png new file mode 100644 index 00000000..1f5251d1 Binary files /dev/null and b/.github/images/dashboard/config-edit.png differ diff --git a/.github/images/dashboard/configs.png b/.github/images/dashboard/configs.png new file mode 100644 index 00000000..4fedd165 Binary files /dev/null and b/.github/images/dashboard/configs.png differ diff --git a/.github/images/dashboard/dashboard.png b/.github/images/dashboard/dashboard.png new file mode 100644 index 00000000..6748f4c4 Binary files /dev/null and b/.github/images/dashboard/dashboard.png differ diff --git a/.github/images/dashboard/discord-edit.png b/.github/images/dashboard/discord-edit.png new file mode 100644 index 00000000..84741354 Binary files /dev/null and b/.github/images/dashboard/discord-edit.png differ diff --git a/.github/images/dashboard/discords.png b/.github/images/dashboard/discords.png new file mode 100644 index 00000000..9eb080f5 Binary files /dev/null and b/.github/images/dashboard/discords.png differ diff --git a/.github/images/dashboard/embed-edit.png b/.github/images/dashboard/embed-edit.png new file mode 100644 index 00000000..5a3ddb16 Binary files /dev/null and b/.github/images/dashboard/embed-edit.png differ diff --git a/.github/images/dashboard/embed-new.png b/.github/images/dashboard/embed-new.png new file mode 100644 index 00000000..ca1e92d4 Binary files /dev/null and b/.github/images/dashboard/embed-new.png differ diff --git a/.github/images/dashboard/embeds.png b/.github/images/dashboard/embeds.png new file mode 100644 index 00000000..c8023ddf Binary files /dev/null and b/.github/images/dashboard/embeds.png differ diff --git a/.github/images/dashboard/filter-edit.png b/.github/images/dashboard/filter-edit.png new file mode 100644 index 00000000..6955d806 Binary files /dev/null and b/.github/images/dashboard/filter-edit.png differ diff --git a/.github/images/dashboard/filters.png b/.github/images/dashboard/filters.png new file mode 100644 index 00000000..0abef7f2 Binary files /dev/null and b/.github/images/dashboard/filters.png differ diff --git a/.github/images/dashboard/geofence-edit.png b/.github/images/dashboard/geofence-edit.png new file mode 100644 index 00000000..ce9a69a4 Binary files /dev/null and b/.github/images/dashboard/geofence-edit.png differ diff --git a/.github/images/dashboard/geofence-export.png b/.github/images/dashboard/geofence-export.png new file mode 100644 index 00000000..eaa31641 Binary files /dev/null and b/.github/images/dashboard/geofence-export.png differ diff --git a/.github/images/dashboard/geofences.png b/.github/images/dashboard/geofences.png new file mode 100644 index 00000000..43ee0d0b Binary files /dev/null and b/.github/images/dashboard/geofences.png differ diff --git a/.github/images/dashboard/role-edit.png b/.github/images/dashboard/role-edit.png new file mode 100644 index 00000000..848ed145 Binary files /dev/null and b/.github/images/dashboard/role-edit.png differ diff --git a/.github/images/dashboard/roles.png b/.github/images/dashboard/roles.png new file mode 100644 index 00000000..737cc866 Binary files /dev/null and b/.github/images/dashboard/roles.png differ diff --git a/.github/images/eggs.png b/.github/images/eggs.png new file mode 100644 index 00000000..a23d255c Binary files /dev/null and b/.github/images/eggs.png differ diff --git a/.github/images/gyms.png b/.github/images/gyms.png new file mode 100644 index 00000000..dff26b50 Binary files /dev/null and b/.github/images/gyms.png differ diff --git a/.github/images/invasions.png b/.github/images/invasions.png new file mode 100644 index 00000000..e476a7ba Binary files /dev/null and b/.github/images/invasions.png differ diff --git a/.github/images/lure.png b/.github/images/lure.png new file mode 100644 index 00000000..6830dead Binary files /dev/null and b/.github/images/lure.png differ diff --git a/.github/images/lure_glacial.png b/.github/images/lure_glacial.png new file mode 100644 index 00000000..eec44888 Binary files /dev/null and b/.github/images/lure_glacial.png differ diff --git a/.github/images/lure_magnetic.png b/.github/images/lure_magnetic.png new file mode 100644 index 00000000..2a642181 Binary files /dev/null and b/.github/images/lure_magnetic.png differ diff --git a/.github/images/lure_mossy.png b/.github/images/lure_mossy.png new file mode 100644 index 00000000..ca6238db Binary files /dev/null and b/.github/images/lure_mossy.png differ diff --git a/.github/images/lure_rainy.png b/.github/images/lure_rainy.png new file mode 100644 index 00000000..cbb46055 Binary files /dev/null and b/.github/images/lure_rainy.png differ diff --git a/.github/images/pkmn.png b/.github/images/pkmn.png new file mode 100644 index 00000000..ab99f798 Binary files /dev/null and b/.github/images/pkmn.png differ diff --git a/.github/images/pvp.png b/.github/images/pvp.png new file mode 100644 index 00000000..8c316d70 Binary files /dev/null and b/.github/images/pvp.png differ diff --git a/.github/images/quests.png b/.github/images/quests.png new file mode 100644 index 00000000..153ad556 Binary files /dev/null and b/.github/images/quests.png differ diff --git a/.github/images/raids.png b/.github/images/raids.png new file mode 100644 index 00000000..a1c4184f Binary files /dev/null and b/.github/images/raids.png differ diff --git a/images/weather.png b/.github/images/weather.png similarity index 100% rename from images/weather.png rename to .github/images/weather.png diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnet.yml similarity index 74% rename from .github/workflows/dotnetcore.yml rename to .github/workflows/dotnet.yml index 04cd80f7..4e4cfb27 100644 --- a/.github/workflows/dotnetcore.yml +++ b/.github/workflows/dotnet.yml @@ -1,4 +1,4 @@ -name: .NET Core +name: .NET 5.0 on: push: @@ -6,15 +6,15 @@ on: jobs: build: - name: Test on .NET Core ${{ matrix.dotnet }} and ${{ matrix.os }} + name: Test on .NET ${{ matrix.dotnet }} and ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: - dotnet: [ '2.1.803' ] + dotnet: [ '5.0.404' ] os: [ubuntu-latest, windows-latest, macOS-latest] steps: - uses: actions/checkout@v2 - - name: Setup .NET Core + - name: Setup .NET 5.0 uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ matrix.dotnet }} diff --git a/.gitignore b/.gitignore index 72d2ddbd..fb537182 100644 --- a/.gitignore +++ b/.gitignore @@ -1,333 +1,335 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Cc]onfig.json - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ -**/Properties/launchSettings.json - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -.leu \ No newline at end of file +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Cc]onfig.json + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +.leu + +.DS_Store \ No newline at end of file diff --git a/README.md b/README.md index f809e3f7..f46d2754 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,13 @@ -[![Build](https://github.com/versx/WhMgr/workflows/.NET%20Core/badge.svg)](https://github.com/versx/WhMgr/actions) +[![Build](https://github.com/versx/WhMgr/workflows/.NET/badge.svg)](https://github.com/versx/WhMgr/actions) [![Documentation Status](https://readthedocs.org/projects/whmgr/badge/?version=latest)](https://whmgr.rtfd.io) [![GitHub Release](https://img.shields.io/github/release/versx/WhMgr.svg)](https://github.com/versx/WhMgr/releases/) [![GitHub Contributors](https://img.shields.io/github/contributors/versx/WhMgr.svg)](https://github.com/versx/WhMgr/graphs/contributors/) [![Discord](https://img.shields.io/discord/552003258000998401.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/zZ9h9Xa) + # Webhook Manager -### PokeAlarm, PoracleJS, WDR, Novabot, etc alternative. +**PokeAlarm, PoracleJS, WDR, Novabot, etc alternative.** + Works with the following backends: - [RealDeviceMap](https://github.com/123FLO321/RealDeviceMap) - [Chuck](https://github.com/WatWowMap/Chuck) @@ -13,80 +15,88 @@ Works with the following backends: ## Description -Sends Discord notifications based on pre-defined filters for Pokemon, raids, raid eggs, field research quests, Team Rocket invasions, gym team changes, and weather. Also supports Discord user's subscribing to Pokemon, raid, quest, Team Rocket invasion, and Pokestop lure notifications via direct messages. +Developed in C#, runs on .NET 5.0 ASP.NET CoreCLR utilizing EntityFramework Core. Cross platform compatibility with Windows, macOS, and Linux operating systems. +Sends Discord notifications based on pre-defined filters for Pokemon, raids, raid eggs, field research quests, Team Rocket invasions, Pokestop lures, gym team changes, and weather changes. It also supports Discord users subscribing to Pokemon, PvP, raid, quest, gym, Team Rocket invasion, and Pokestop lure notifications via direct messages. -## Features +### Features - Supports multiple Discord servers. -- Discord channel alarm reports for Pokemon, raids, eggs, quests, lures, invasions, gym team changes, and weather. -- Per user custom Discord notifications for Pokemon, raids, quests, invasions, and lures. -- User interface to configure Discord notifications with ease (as well as Discord commands). [WhMgr-UI](https://github.com/versx/WhMgr-UI) -- Subscription notifications based on pre-defined distance. -- Customizable alert messages with dynamic text replacement. +- Discord channel alarm reports for Pokemon, raids, eggs, quests, lures, invasions, gym team changes, and weather changes. +- Built-in Admin Dashboard to configure and manage configuration files. +- Webhook and subscription queue system, all outgoing messages are queued and fired off in groups for efficiency. +- If an outgoing message is rate limited, it is backlogged and awaited the rate limit time then requeued. +- Per user custom Discord notifications for Pokemon, raids, quests, invasions, lures, and gyms. +- User interface to configure custom Discord subscription notifications with ease. [WhMgr-UI](https://github.com/versx/WhMgr-UI) +- Subscription notifications based on pre-defined distance and geofence areas. +- Customizable alert messages with dynamic text replacement/substitution. - Support for multiple cities/areas using geofences per server. -- Daily shiny stats reporting. -- Automatic quest message purge at midnight. -- Support for Donors/Supporters only notifications. -- Direct messages of Pokemon notifications based on city roles assigned. -- Pokemon and Raid subscription notifications based on specific forms. -- Custom prefix support as well as mentionable user support for commands. +- Daily shiny and IV stats reporting. +- Automatic quest message purge at midnight based on timezone. +- Support for Subscriber only custom notifications. +- Pokemon, PvP, and Raid subscription notifications based on specific forms or costumes. +- Custom prefix support as well as mentionable bot user string for commands. - Raid subscription notifications for specific gyms. - Twilio text message alerts for ultra rare Pokemon. - Custom image support for Discord alarm reports. - Custom icon style selection for Discord user notifications. - External emoji server support. -- Custom static map format support. -- Support for language translation. +- Custom static map format support, including pokestop and gym marker placements. +- Support for language translation per instance (per server planned). - Multi threaded, low processing consumption. -- [I.C.O.N.S.](https://github.com/Mygod/pokemon-icon-postprocessor) standard image support. +- [UIcons](https://github.com/uicons/uicons) standard image support. - Lots more... -## [Documentation](https://whmgr.rtfd.io/) +## [Documentation](https://whmgr.rtfd.io/en/v5-rewrite/) -### [Getting Started Guide](https://whmgr.readthedocs.io/en/latest/user-guide/getting-started) +### [Getting Started Guide](https://whmgr.readthedocs.io/en/v5-rewrite/install/getting-started)
## Previews *All examples are completely customizable using Dynamic Text Replacement/Substitution* -Discord Pokemon Notifications: -![Pokemon Notifications](images/pkmn.png "Pokemon Notifications") -Discord Pokemon PVP Notifications: -![Pokemon Notifications](images/pvp.png "Pokemon PVP Notifications") +__Pokemon Notifications__ +![Pokemon Notifications](.github/images/pkmn.png "Pokemon Notifications") + +__Pokemon PVP Notifications__ +![Pokemon Notifications](.github/images/pvp.png "Pokemon PVP Notifications") + +__Raid Boss Notifications__ +![Raid Boss Notifications](.github/images/raids.png "Raid Boss Notifications") -Discord Raid Notifications: -![Raid Notifications](images/raids.png "Raid Notifications") +__Raid Egg Notifications__ +![Egg Notifications](.github/images/eggs.png "Egg Notifications") -Discord Raid Egg Notifications: -![Egg Notifications](images/eggs.png "Egg Notifications") +__Quest Notifications__ +![Quest Notifications](.github/images/quests.png "Quest Notifications") -Discord Quest Notifications: -![Quest Notifications](images/quests.png "Quest Notifications") +__Lure Notifications__ +![Lure Notifications](.github/images/lure.png "Lure Notifications") -Discord Lure Notifications: -![Lure Notifications](images/lure.png "Lure Notifications") +__Lure (Glacial) Notifications__ +![Lure (Glacial) Notifications](.github/images/lure_glacial.png "Lure (Glacial) Notifications") -Discord Lure (Glacial) Notifications: -![Lure (Glacial) Notifications](images/lure_glacial.png "Lure (Glacial) Notifications") +__Lure (Mossy) Notifications__ +![Lure (Mossy) Notifications](.github/images/lure_mossy.png "Lure (Mossy) Notifications") -Discord Lure (Mossy) Notifications: -![Lure (Mossy) Notifications](images/lure_mossy.png "Lure (Mossy) Notifications") +__Lure (Magnetic) Notifications__ +![Lure (Magnetic) Notifications](.github/images/lure_magnetic.png "Lure (Magnetic) Notifications") -Discord Lure (Magnetic) Notifications: -![Lure (Magnetic) Notifications](images/lure_magnetic.png "Lure (Magnetic) Notifications") +__Lure (Rainy) Notifications__ +![Lure (Rainy) Notifications](.github/images/lure_rainy.png "Lure (Rainy) Notifications") -Discord Gym Team Takeover Notifications: -![Gym Team Takeover Notifications](images/gyms.png "Gym Team Takeover Notifications") +__Gym Team Takeover Notifications__ +![Gym Team Takeover Notifications](.github/images/gyms.png "Gym Team Takeover Notifications") -Discord Team Rocket Invasion Notifications: -![Team Rocket Invasion Notifications](images/invasions.png "Team Rocket Invasion Notifications") +__Team Rocket Invasion Notifications__ +![Team Rocket Invasion Notifications](.github/images/invasions.png "Team Rocket Invasion Notifications") -Discord Weather Notifications: -![Weather Notifications](images/weather.png "Weather Notifications") +__Weather Notifications__ +![Weather Notifications](.github/images/weather.png "Weather Notifications") ## Credits [versx](https://github.com/versx) - Developer [PokeAlarm](https://github.com/PokeAlarm/PokeAlarm) - Dynamic Text Substitution idea [WDR](https://github.com/PartTimeJS/WDR) - masterfile.json file +[Contributors](https://github.com/versx/WhMgr/contributors) diff --git a/WhMgr.sln b/WhMgr.sln index 5bfe50b0..68306a78 100644 --- a/WhMgr.sln +++ b/WhMgr.sln @@ -1,31 +1,31 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30114.105 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WhMgr", "src\WhMgr.csproj", "{82454CE5-D056-468E-93AA-C951567989A2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WhMgr.Test", "test\WhMgr.Test.csproj", "{2E9E0AE2-101B-40AA-85F3-A144C057BE60}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {82454CE5-D056-468E-93AA-C951567989A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {82454CE5-D056-468E-93AA-C951567989A2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {82454CE5-D056-468E-93AA-C951567989A2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {82454CE5-D056-468E-93AA-C951567989A2}.Release|Any CPU.Build.0 = Release|Any CPU - {2E9E0AE2-101B-40AA-85F3-A144C057BE60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E9E0AE2-101B-40AA-85F3-A144C057BE60}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E9E0AE2-101B-40AA-85F3-A144C057BE60}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E9E0AE2-101B-40AA-85F3-A144C057BE60}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {8DB5EDA2-DFED-471B-A84C-133865C086D4} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.32112.339 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WhMgr", "src\WhMgr.csproj", "{6B59CEAE-3BFA-4E31-B86E-0AA276C4796A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WhMgr.Test", "test\WhMgr.Test.csproj", "{2BBAB7C9-3F59-4E88-9477-481C6466C4F5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6B59CEAE-3BFA-4E31-B86E-0AA276C4796A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B59CEAE-3BFA-4E31-B86E-0AA276C4796A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B59CEAE-3BFA-4E31-B86E-0AA276C4796A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B59CEAE-3BFA-4E31-B86E-0AA276C4796A}.Release|Any CPU.Build.0 = Release|Any CPU + {2BBAB7C9-3F59-4E88-9477-481C6466C4F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2BBAB7C9-3F59-4E88-9477-481C6466C4F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2BBAB7C9-3F59-4E88-9477-481C6466C4F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2BBAB7C9-3F59-4E88-9477-481C6466C4F5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {B6D16BB5-6A62-4232-B680-96B3364EA1B0} + EndGlobalSection +EndGlobal diff --git a/config.example.json b/config.example.json deleted file mode 100644 index db889a3f..00000000 --- a/config.example.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "host": "*", - "port": 8008, - "locale": "en", - "shortUrlApiUrl": null, - "stripeApiKey": "", - "maxPokemonId": 721, - "servers": { - "000000000000000001": "discord1.example.json", - "000000000000000002": "discord2.example.json" - }, - "database": { - "main": { - "host": "127.0.0.1", - "port": 3306, - "username": "root", - "password": "password", - "database": "brockdb" - }, - "scanner": { - "host": "127.0.0.1", - "port": 3306, - "username": "root", - "password": "password", - "database": "rdmdb" - }, - "nests": { - "host": "127.0.0.1", - "port": 3306, - "username": "root", - "password": "password", - "database": "manualdb" - } - }, - "eventPokemonIds": [], - "eventMinimumIV": "90", - "urls": { - "staticMap": "http://tiles.example.com:8080", - "scannerMap": "http://map.example.com/@/{0}/{1}/15" - }, - "iconStyles": { - "Default": "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/ICONS/ICONS/", - "Shuffle": "https://raw.githubusercontent.com/nileplumb/PkmnShuffleMap/master/ICONS_STANDARD/" - }, - "staticMaps": { - "pokemon": "pokemon.example", - "raids": "raids.example", - "gyms": "gyms.example", - "quests": "quests.example", - "invasions": "invasions.example", - "lures": "lures.example", - "weather": "weather.example", - "nests": "nests.example" - }, - "twilio": { - "enabled": false, - "accountSid": "", - "authToken": "", - "from": "", - "userIds": [], - "roleIds": [], - "pokemonIds": [201, 480, 481, 482, 443, 444, 445, 633, 634, 635, 610, 611, 612], - "minIV": 100 - }, - "gmapsKey": "", - "nominatim": "", - "nominatimSchema": "{DisplayName}", - "despawnTimeMinimumMinutes": 5, - "reloadSubscriptionChangesMinutes": 1, - "checkForDuplicates": true, - "debug": false, - "logLevel": "Trace" -} diff --git a/docs/commands/subscriptions.md b/docs/commands/subscriptions.md index 0809de79..47ba820a 100644 --- a/docs/commands/subscriptions.md +++ b/docs/commands/subscriptions.md @@ -11,6 +11,7 @@ Parameters in `[]` are optional parameters and default values will be used if no **expire** / **expires** - Check stripe API when Donor/Supporter subscription expires. **set-number** - Set a phone number to receive text message alerts for ultra rare Pokemon. + **set-distance** - Set minimum distance to Pokemon, raids, quests, invasions and gyms need to be within. (Measured in meters) Usage: `set-distance ,` @@ -244,6 +245,7 @@ Examples: **import** - Import saved subscriptions file. **export** - Export subscriptions config file. + ### Icon Style diff --git a/docs/user-guide/alarms.md b/docs/config/alarms.md similarity index 74% rename from docs/user-guide/alarms.md rename to docs/config/alarms.md index b73333a6..eac67706 100644 --- a/docs/user-guide/alarms.md +++ b/docs/config/alarms.md @@ -6,23 +6,25 @@ There is no limit to the amount of alarms you can add under the `alarms` propert **Notes:** - Place your active alarms in your `alarms` folder -- Discord webhook permissions are based on the EVERYONE role permission, if you plan to use an external emoji server you *MUST* ensure the everyone role has the "use external emojis" permission on the destination channel. Even if you have the channel locked to a donor type role, the everyone role still needs this permission enabled. Remember setting everyone role to allow external emoji's at server level but an explicit deny on a channel will prevent them from showing +- Discord webhook permissions are based on the EVERYONE role permission, if you plan to use an external emoji server you *MUST* ensure the everyone role has the "use external emojis" permission on the destination channel. Even if you have the channel locked to a donor type role, the everyone role still needs this permission enabled. Remember setting everyone role to allow external emoji's at server level but an explicit deny on a channel will prevent them from showing. ## Example -```js +```json { - // Enable or disable Pokemon alarms globally + // Enable or disable Pokemon filters globally "enablePokemon": true, - // Enable or disable Raid alarms globally + // Enable or disable Raid filters globally "enableRaids": true, - // Enable or disable Quest alarms globally + // Enable or disable Quest filters globally "enableQuests": true, - // Enable or disable Pokestop alarms globally + // Enable or disable Pokestop filters globally "enablePokestops": true, - // Enable or disable Gym alarms globally + // Enable or disable Invasion filters globally + "enableInvasions": true, + // Enable or disable Gym filters globally "enableGyms": true, - // Enable or disable Weather alarms globally + // Enable or disable Weather filters globally "enableWeather": true, // List of alarms "alarms": @@ -30,12 +32,12 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name":"City1-Rare", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters":"all.json", // Mentionable string that supports DTS (!@ for user, @& for role) - "description":" <@&1123454> L ", + "description": " <@&12331131> {{iv}} L{{lvl}} {{geofence}}", // Either the geofence file path (`geojson` or `ini` format) or the geofence name "geofences": ["geofence1.txt", "city1"], // Discord webhook url address @@ -44,8 +46,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // 100% IV alarm for City1 "name":"City1-100iv", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters":"100iv.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -56,8 +58,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name":"City1-Raids", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters":"raids.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -68,8 +70,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name":"City1-LegendaryRaids", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters":"legendary_raids.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -80,8 +82,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name":"City1-ExRaids", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters":"ex_raids.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -92,8 +94,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name": "City1-Quests", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters": "quests.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -104,8 +106,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name": "City1-Lures", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters": "lures.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -116,8 +118,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name": "City1-Invasions", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters": "invasions.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -128,8 +130,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name": "City1-Gyms", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters": "gyms.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -140,8 +142,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name":"City2-Rare", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters":"all.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -152,8 +154,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name":"City2-100iv", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters":"100iv.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -164,8 +166,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name":"City2-Raids", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters":"raids.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -176,8 +178,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name":"City2-LegendaryRaids", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters":"legendary_raids.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -188,8 +190,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name":"City2-ExRaids", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters":"ex_raids.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -200,8 +202,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name": "City2-Quests", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters": "quests.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -212,8 +214,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name": "City2-Lures", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters": "lures.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -224,8 +226,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name": "City2-Invasions", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters": "invasions.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -236,8 +238,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name": "City2-Gyms", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters": "gyms.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name @@ -248,8 +250,8 @@ There is no limit to the amount of alarms you can add under the `alarms` propert { // Alarm name "name":"Absol-Quests", - // Alerts file location (used to structure how the message will look) - "alerts": "default.json", + // Embeds file location (used to structure how the message will look) + "embeds": "default.json", // Alarm filters "filters":"quests_absol.json", // Either the geofence file path (`geojson` or `ini` format) or the geofence name diff --git a/docs/config/config.md b/docs/config/config.md new file mode 100644 index 00000000..9d7cf30c --- /dev/null +++ b/docs/config/config.md @@ -0,0 +1,691 @@ +# Configuration + +At a minimum you'll want to make sure you have your webhook listening port set as well as one Discord server added to the `servers` property. + +## Full Config Example +```json +{ + // Http listening interface for raw webhook data, use "*" to listen on all interfaces. + "host": "*", + // Http listener port for raw webhook data. + "port": 8008, + // Locale language translation + "locale": "en", + // Telemetry reporting + "sentry": true, + // yourls.org API + "shortUrlApi": { + // Determines whether the Short URL API is used or not + "enabled": false, + // ShortURL API (i.e. `https://domain.com/yourls-api.php`) + "apiUrl": "https://domain.com/u/api.php", + // ShortURL passwordless authentication signature + "signature": "" + }, + "stripeApi": { + "apiKey": "" + }, + // List of Discord servers to connect and post webhook messages to. + "servers": { + // Discord server #1 guild ID (replace `000000000000000123` with + // actual guild id of server) + "000000000000000123": "discord1.example.json", + // 2nd Discord server section (if applicable) + "000000000000000456": "discord2.example.json" + }, + // Database configuration + "database": { + // Database to store notification subscriptions. + "main": { + // Database hostname or IP address. + "host": "127.0.0.1", + // Database connection port. + "port": 3306, + // Database user account name. + "username": "root", + // Database user account password. + "password": "password", + // Brock database name. + "database": "brockdb" + }, + "scanner": { + // Database hostname or IP address. + "host": "127.0.0.1", + // Database connection port. + "port": 3306, + // Database user account name. + "username": "root", + // Database user account password. + "password": "password", + // RDM database name. + "database": "rdmdb" + }, + "nests": { + // Database hostname or IP address. + "host": "127.0.0.1", + // Database connection port. + "port": 3306, + // Database user account name. + "username": "root", + // Database user account password. + "password": "password", + // PMSF manual nests database name. + "database": "manualdb" + } + }, + "eventPokemon": { + // Determines if filtering event Pokemon is enabled or not. + "enabled": false, + // List of Pokemon IDs to treat as event and restrict postings and subscriptions to 90% IV or higher. (Filled in automatically with `event set` command) + "pokemonIds": [], + // Minimum IV value for an event Pokemon to have to meet in order to post via Discord channel alarm or direct message subscription. + "eventMinimumIV": 90, + // Event Pokemon filtering type + "type": "Include", + // Ignore event Pokemon if missing IV stats + "ignoreMissingStats": true + }, + // URL config + "urls": { + // Scanner map url DTS option for embeds as `scanmaps_url`. + // {0} and {1} are placeholders to construct the url with latitude + // and longitude coordinates + "scannerMap": "http://map.example.com/@/{0}/{1}/15" + }, + // Available icon styles + "iconStyles": { + // Default icon style + "Default": { + // Base icon type object to apply to all other icon types + "Base": { + // Icon type display name + "name": "Default", + // Icon type url path + "path": "https://raw.githubusercontent.com/WatWowMap/wwm-uicons/main/" + }, + // Pokemon icon type object to modify + "Pokemon": { + // Icon type display name + "name": "Default_Pokemon", + // Icon type url path + "path": "https://raw.githubusercontent.com/nileplumb/PkmnShuffleMap/master/UICONS/pokemon/" + } + /* + "Raid", + "Egg", + "Gym", + "Pokestop", + "Reward", + "Invasion", + "Type", + "Nest", + "Team", + "Weather", + "Misc", + */ + }, + // Pokemon Home Icons + "Home": { + // Base icon type object to apply to all other icon types + "Base": { + // Icon type display name + "name": "Home", + // Icon type url path + "path": "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/master/UICONS_OS/" + } + }, + // Pokemon Shuffle Icons + "Shuffle": { + // Base icon type object to apply to all other icon types + "Base": { + // Icon type display name + "name": "Shuffle", + // Icon type url path + "path": "https://raw.githubusercontent.com/nileplumb/PkmnShuffleMap/master/UICONS/" + } + }, + // Pokemon Go Application Icons + "Pokemon Go": { + // Base icon type object to apply to all other icon types + "Base": { + // Icon type display name + "name": "Pokemon Go", + // Icon type url path + "path": "https://raw.githubusercontent.com/whitewillem/PogoAssets/main/uicons/" + } + }, + // PMSF Icons + "PMSF": { + // Base icon type object to apply to all other icon types + "Base": { + // Icon type display name + "name": "PMSF", + // Icon type url path + "path": "https://raw.githubusercontent.com/pmsf/PMSF/develop/static/sprites/" + } + } + }, + // Custom static map template files for each alarm type + "staticMaps": { + // Base url for static map service + "url": "http://tiles.example.com:8080", + // StaticMap or MultiStaticMap + "type": "StaticMap", + // Include nearby gyms with static map image + "includeGyms": false, + // Include nearby pokestops with static map image + "includePokestops": false, + // Including Gyms and Pokestops on the StaticMap only works if `pregenerate` is set to `true` + "pregenerate": true + }, + // Get text message alerts with Twilio.com + "twilio": { + // Determines if text message alerts are enabled + "enabled": false, + // Twilio account SID (Get via Twilio dashboard) + "accountSid": "", + // Twilio account auth token (Get via Twilio dashboard) + "authToken": "", + // Twilio phone number that will be sending the text message alert + "from": "", + // List of Discord user ids that can receive text message alerts + "userIds": [], + // List of Discord roles that can receive text message alerts + "roleIds": [], + // List of acceptable Pokemon to receive text message alerts for + "pokemonIds": [201, 480, 481, 482, 443, 444, 445, 633, 634, 635, 610, 611, 612], + // Minimum acceptable IV value for Pokemon if not ultra rare (Unown, Lake Trio) + "minIV": 100 + }, + "reverseGeocoding": { + // Reverse geocoding provider + "provider": "osm", // osm/gmaps + // Cache reverse geocoding responses to disk to reduce request count + "cacheToDisk": true, + // Google Maps reverse geocoding + "gmaps": { + // Google maps key for reverse geocoding + "key": "", + // Google maps template schema for embeds + "schema": "{{Results.[0].FormattedAddress}}" + }, + // OpenStreetMaps Nominatim reverse geocoding + "nominatim": { + // OSM Nominatim endpoint + "endpoint": "", + // OSM Nominatim template schema for embeds + "schema": "{{Address.Road}} {{Address.State}} {{Address.Postcode}} {{Address.Country}}" + } + }, + // Minimum despawn time in minutes a Pokemon must have in order to send the alarm (default: 5 minutes) + "despawnTimeMinimumMinutes": 5, + // Reload subscriptions every minute to sync with WhMgr-UI changes + "reloadSubscriptionChangesMinutes": 1, + // Check for duplicate webhooks + "checkForDuplicates": true, + // Log webhook payloads to a file for debugging (do not enable unless you're having issues receiving data + "debug": false, + /* + * Only show logs with higher or equal priority levels: + * Trace: 0 + * Debug: 1 + * Info: 2 + * Warning: 3 + * Error: 4 + * Critical: 5 + * None: 6 + */ + "logLevel": 0, + // Acceptable and interested PVP leagues to parse. + "pvpLeagues": { + // League name key to match webhook key for PVP ranks. + "little": { + // League minimum acceptable CP + "minCP": 450, + // League maximum acceptable CP + "maxCP": 500, + // League minimum rank to meet + "minRank": 1, + // League maximum rank to meet + "maxRank": 100 + }, + "great": { + "minCP": 1400, + "maxCP": 1500, + "minRank": 1, + "maxRank": 100 + }, + "ultra": { + "minCP": 2400, + "maxCP": 2500, + "minRank": 1, + "maxRank": 100 + } + } +} +``` + +## Top Level +```json +{ + // Http listening interface for raw webhook data, use "*" to listen on all interfaces. + "host": "*", + // Http listener port for raw webhook data. + "port": 8008, + // Locale language translation + "locale": "en", + // Minimum despawn time in minutes a Pokemon must have in order to send the alarm (default: 5 minutes) + "despawnTimeMinimumMinutes": 5, + // Reload subscriptions every minute to sync with WhMgr-UI changes + "reloadSubscriptionChangesMinutes": 1, + // Check for duplicate webhooks + "checkForDuplicates": true, + // Log webhook payloads to a file for debugging (do not enable unless you're having issues receiving data) + "debug": false, + /* + * Only show logs with higher or equal priority levels: + * Trace: 0 + * Debug: 1 + * Info: 2 + * Warning: 3 + * Error: 4 + * Critical: 5 + * None: 6 + */ + "logLevel": 0 "logLevel": 0, + // Acceptable and interested PVP leagues to parse. + "pvpLeagues": { + // League name key to match webhook key for PVP ranks. + "little": { + // League minimum acceptable CP + "minCP": 450, + // League maximum acceptable CP + "maxCP": 500, + // League minimum rank to meet + "minRank": 1, + // League maximum rank to meet + "maxRank": 100 + }, + "great": { + "minCP": 1400, + "maxCP": 1500, + "minRank": 1, + "maxRank": 100 + }, + "ultra": { + "minCP": 2400, + "maxCP": 2500, + "minRank": 1, + "maxRank": 100 + } + } +} +``` + +## Discord Servers +```json +{ + // List of Discord servers to connect and post webhook messages to. + "servers": { + // Discord server #1 guild ID (replace `000000000000000123` with + // actual guild id of server) + "000000000000000123": "discord1.example.json", + // 2nd Discord server section (if applicable) + "000000000000000456": "discord2.example.json" + } +} +``` + +## Short Url API +```json +{ + // yourls.org API + "shortUrlApi": { + // Determines whether the Short URL API is used or not + "enabled": false, + // ShortURL API (i.e. `https://domain.com/yourls-api.php`) + "apiUrl": "https://domain.com/u/api.php", + // ShortURL passwordless authentication signature + "signature": "" + } +} +``` + +## Stripe API +```json +{ + "stripeApi": { + // Stripe API key (Stripe production API key, i.e. rk_3824802934 + "apiKey": "", + } +} +``` + +## Database Schemas +```json +{ + // Database configuration + "database": { + // Database to store notification subscriptions. + "main": { + // Database hostname or IP address. + "host": "127.0.0.1", + // Database connection port. + "port": 3306, + // Database user account name. + "username": "root", + // Database user account password. + "password": "password", + // Brock database name. + "database": "brockdb" + }, + "scanner": { + // Database hostname or IP address. + "host": "127.0.0.1", + // Database connection port. + "port": 3306, + // Database user account name. + "username": "root", + // Database user account password. + "password": "password", + // RDM database name. + "database": "rdmdb" + }, + "nests": { + // Database hostname or IP address. + "host": "127.0.0.1", + // Database connection port. + "port": 3306, + // Database user account name. + "username": "root", + // Database user account password. + "password": "password", + // PMSF manual nests database name. + "database": "manualdb" + } + } +} +``` + +## URLs +```json +{ + // URL config + "urls": { + // Scanner map url DTS option for embeds as `scanmaps_url`. + // {0} and {1} are placeholders to construct the url with latitude + // and longitude coordinates + "scannerMap": "https://map.example.com/@/{0}/{1}/15" + } +} +``` + +## Twilio Text Message Notifications +```json +{ + // Get text message alerts with Twilio.com + "twilio": { + // Determines if text message alerts are enabled + "enabled": false, + // Twilio account SID (Get via Twilio dashboard) + "accountSid": "", + // Twilio account auth token (Get via Twilio dashboard) + "authToken": "", + // Twilio phone number that will be sending the text message alert + "from": "", + // List of Discord user ids that can receive text message alerts + "userIds": [], + // List of Discord roles that can receive text message alerts + "roleIds": [], + // List of acceptable Pokemon to receive text message alerts for + "pokemonIds": [201, 480, 481, 482, 443, 444, 445, 633, 634, 635, 610, 611, 612], + // Minimum acceptable IV value for Pokemon if not ultra rare (Unown, Lake Trio) + "minIV": 100 + } +} +``` + +## Icon Styles +```json +{ + // Available icon styles + "iconStyles": { + // Default icon style + "Default": { + // Base icon type object to apply to all other icon types + "Base": { + // Icon type display name + "name": "Default", + // Icon type url path + "path": "https://raw.githubusercontent.com/WatWowMap/wwm-uicons/main/" + }, + // Pokemon icon type object to modify + "Pokemon": { + // Icon type display name + "name": "Default_Pokemon", + // Icon type url path + "path": "https://raw.githubusercontent.com/nileplumb/PkmnShuffleMap/master/UICONS/pokemon/" + } + /* + "Raid", + "Egg", + "Gym", + "Pokestop", + "Reward", + "Invasion", + "Type", + "Nest", + "Team", + "Weather", + "Misc", + */ + }, + // Pokemon Home Icons + "Home": { + // Base icon type object to apply to all other icon types + "Base": { + // Icon type display name + "name": "Home", + // Icon type url path + "path": "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/master/UICONS_OS/" + } + }, + // Pokemon Shuffle Icons + "Shuffle": { + // Base icon type object to apply to all other icon types + "Base": { + // Icon type display name + "name": "Shuffle", + // Icon type url path + "path": "https://raw.githubusercontent.com/nileplumb/PkmnShuffleMap/master/ICONS_STANDARD/" + } + }, + // Pokemon Go Application Icons + "Pokemon Go": { + // Base icon type object to apply to all other icon types + "Base": { + // Icon type display name + "name": "Pokemon Go", + // Icon type url path + "path": "https://raw.githubusercontent.com/whitewillem/PogoAssets/resized/icons_large-uicons" + } + }, + // PokeDave Pokemon Shuffle Icons + "PokeDave Shuffle": { + // Base icon type object to apply to all other icon types + "Base": { + // Icon type display name + "name": "PokeDave Shuffle", + // Icon type url path + "path": "https://raw.githubusercontent.com/jepke/pokedave_shuffle_icons_-PMSF-/master/UICONS/" + } + }, + // PMSF Icons + "PMSF": { + // Base icon type object to apply to all other icon types + "Base": { + // Icon type display name + "name": "PMSF", + // Icon type url path + "path": "https://raw.githubusercontent.com/pmsf/PMSF/develop/static/sprites/" + } + } + }, +} +``` + +## Static Map Templates +```json +{ + // Custom static map template files for each alarm type + "staticMaps": { + // Static map template for Pokemon + "pokemon": { + // Static map url template for pokemon + "url": "http://tiles.example.com/staticmap/{{template_name}}?lat={{lat}}&lon={{lon}}&url2={{url2}}", + // Static map template file name without extension + "template": "pokemon.example", + // Include nearby gyms in static map image + "includeGyms": false, + // Include nearby pokestops in static map image + "includePokestops": false + }, + // Static map template for Raids and Eggs + "raids": { + // Static map url template for raids + "url": "http://tiles.example.com/staticmap/{{template_name}}?lat={{lat}}&lon={{lon}}&url2={{url2}}&team_id={{team_id}}", + // Static map template file name without extension + "template": "raids.example", + // Include nearby gyms in static map image + "includeGyms": false, + // Include nearby pokestops in static map image + "includePokestops": false + }, + // Static map template for Gym team control changes + "gyms": { + // Static map url template for gyms + "url": "http://tiles.example.com/staticmap/{{template_name}}?lat={{lat}}&lon={{lon}}&url2={{url2}}&team_id={{team_id}}", + // Static map template file name without extension + "template": "gyms.example", + // Include nearby gyms in static map image + "includeGyms": false, + // Include nearby pokestops in static map image + "includePokestops": false + }, + // Static map template for field research quests + "quests": { + // Static map url template for quests + "url": "http://tiles.example.com/staticmap/{{template_name}}?lat={{lat}}&lon={{lon}}&url2={{url2}}", + // Static map template file name without extension + "template": "quests.example", + // Include nearby gyms in static map image + "includeGyms": false, + // Include nearby pokestops in static map image + "includePokestops": false + }, + // Static map template for Team Rocket invasions + "invasions": { + // Static map url template for invasions + "url": "http://tiles.example.com/staticmap/{{template_name}}?lat={{lat}}&lon={{lon}}&url2={{url2}}", + // Static map template file name without extension + "template": "invasions.example", + // Include nearby gyms in static map image + "includeGyms": false, + // Include nearby pokestops in static map image + "includePokestops": false + }, + // Static map template for Pokestop lures + "lures": { + // Static map url template for lures + "url": "http://tiles.example.com/staticmap/{{template_name}}?lat={{lat}}&lon={{lon}}&url2={{url2}}", + // Static map template file name without extension + "template": "lures.example", + // Include nearby gyms in static map image + "includeGyms": false, + // Include nearby pokestops in static map image + "includePokestops": false + }, + // Static map template for weather changes + "weather": { + // Static map url template for weather + "url": "http://tiles.example.com/staticmap/{{template_name}}?lat={{lat}}&lon={{lon}}&url2={{url2}}&polygon={{polygon}}", + // Static map template file name without extension + "template": "weather.example", + // Include nearby gyms in static map image + "includeGyms": false, + // Include nearby pokestops in static map image + "includePokestops": false + }, + // Static map template for nest postings + "nests": { + // Static map url template for nests + "url": "http://tiles.example.com/staticmap/{{template_name}}?lat={{lat}}&lon={{lon}}&url2={{url2}}&polygon={{polygon}}", + // Static map template file name without extension + "template": "nests.example", + // Include nearby gyms in static map image + "includeGyms": false, + // Include nearby pokestops in static map image + "includePokestops": false + } + } +} +``` + +## Reverse Geocoding +```json +{ + // Reverse lookup of geocoordinates to physical address + "reverseGeocoding": { + // Reverse geocoding provider + "provider": "osm", // osm/gmaps + // Cache reverse geocoding responses to disk to reduce request count + "cacheToDisk": true, + // Google Maps reverse geocoding + "gmaps": { + // Google maps key for reverse geocoding + "key": "", + // Google maps template schema for embeds + "schema": "{{Results.[0].FormattedAddress}}" + }, + // OpenStreetMaps Nominatim reverse geocoding + "nominatim": { + // OSM Nominatim endpoint + "endpoint": "", + // OSM Nominatim template schema for embeds + "schema": "{{Address.Road}} {{Address.State}} {{Address.Postcode}} {{Address.Country}}" + } + } +} +``` + +## PVP Leagues +```json +{ + // Acceptable and interested PVP leagues to parse. + "pvpLeagues": { + // League name key to match webhook key for PVP ranks. + "little": { + // League minimum acceptable CP + "minCP": 450, + // League maximum acceptable CP + "maxCP": 500, + // League minimum rank to meet + "minRank": 1, + // League maximum rank to meet + "maxRank": 100 + }, + "great": { + "minCP": 1400, + "maxCP": 1500, + "minRank": 1, + "maxRank": 100 + }, + "ultra": { + "minCP": 2400, + "maxCP": 2500, + "minRank": 1, + "maxRank": 100 + } + } +} +``` \ No newline at end of file diff --git a/docs/config/discords.md b/docs/config/discords.md new file mode 100644 index 00000000..eb9c1b1b --- /dev/null +++ b/docs/config/discords.md @@ -0,0 +1,137 @@ +# Discord Server Configs +Copy your Discord specific configs to the `bin/discords` folder and reference them in the main config under the servers section. + +```json +{ + // Discord bot general config options + "bot": { + // Bot command prefix, leave blank to use @mention + "commandPrefix": ".", + // Discord guild ID. + "guildId": 000000000000000000, + // Discord Emoji server ID. (Can be same as `guildId`) + "emojiGuildId": 000000000000000001, + // Discord bot token with user. + "token": "", + // Channel ID(s) bot commands can be executed in. (currently not implemented) + "channelIds": [], + // Custom Discord status per server, leave blank or null to use current version. + "status": null + }, + // Discord server owner ID. + "ownerId": 000000000000000000, + // Donor/Supporter role ID(s) config. + "donorRoleIds": { + // Discord server role id and subscription permissions + "000000000000000000": ["pokemon", "pvp", "raids", "quests", "invasions", "lures", "gyms"], + // User has access to nothing + "000000000000000001": [], + // Users with role will only have access to Pokestops and Gyms + "000000000000000002": ["quests", "gyms"] + }, + // Discord free role name, if set allows non-donors/supporters to use the .feedme commands to assign city roles (optional, good for free promotional periods) + "freeRoleName": "", + // Moderator role IDs + "moderatorRoleIds": [ + 000000000000000001, + 000000000000000002 + ], + // Discord alarms config file name to use + "alarms": "alarms.json", + // Discord server related geofences + "geofences": [ + "City1.txt", + "City2.json" + ], + // Subscriptions config + "subscriptions": { + // Determines whether subscriptions are enabled for the Discord server or not. + "enabled": false, + // Maximum notifications per minutes per subscriber before rate limited. + "maxNotificationsPerMinute": 10, + // Maximum Pokemon subscriptions in total + "maxPokemonSubscriptions": 0, + // Maximum PvP subscriptions in total + "maxPvPSubscriptions": 0, + // Maximum Raid subscriptions in total + "maxRaidSubscriptions": 0, + // Maximum Quest subscriptions in total + "maxQuestSubscriptions": 0, + // Maximum Invasion subscriptions in total + "maxInvasionSubscriptions": 0, + // Maximum Lure subscriptions in total + "maxLureSubscriptions": 0, + // Maximum Gym subscriptions in total + "maxGymSubscriptions": 0, + // Webhook Manager UI home page url + "url": "http://127.0.0.1:8009", + // Subscriptions DM embeds file. + "embedsFile": "default.json" + }, + // Discord geofence roles config + "geofenceRoles": { + // Determines whether assignable/unassignable geofence roles for donors of the server are enabled + "enabled": false, + // Determines whether access removed automatically removes assigned geofence roles (highly recommended) + "autoRemove": true, + // Assigning geofence city roles requires donor/supporter role + "requiresDonorRole": true + }, + // Automatic quest alarms purge from Discord channels based on timezones at midnight + "questsPurge": { + // Enables quest alarm messages purge from Discord channels + "enabled": false, + // Channels based on timezone + "channels": { + // Denver Timezone + "America/Denver": [ + // Channel 1... + 000000000000000000, + // Channel 2... + 000000000000000001 + ], + // New York timezone + "America/New_York": [ + // Channel 1... + 000000000000000000, + // Channel 2... + 000000000000000001 + ] + } + }, + // Nest postings config + "nests": { + // Determines whether nest posting is enabled. + "enabled": false, + // Channel id to post nest postings to. + "channelId": 0, + // Minimum amount per hour to post nest posting. + "minimumPerHour": 2 + }, + // Daily stats config + "dailyStats": { + // Shiny stats config + "shiny": { + // Determines whether to post shiny stats or not + "enabled": false, + // Clear messages before posting + "clearMessages": false, + // Channel ID for posting shiny stats + "channelId": 0 + }, + // IV stats config + "iv": { + // Determines whether to post IV stats or not + "enabled": false, + // Clear messages before posting + "clearMessages": false, + // Channel ID for posting IV stats + "channelId": 0 + } + }, + // Icon style for postings from Discord server. + "iconStyle": "Default", + // Discord client log level, only change if debugging an issue with Discord (default: 4 aka Error) + "logLevel": 4 +} +``` \ No newline at end of file diff --git a/docs/config/embeds.md b/docs/config/embeds.md new file mode 100644 index 00000000..e8b0105b --- /dev/null +++ b/docs/config/embeds.md @@ -0,0 +1,269 @@ +# Embeds +Embeds depict how Discord embed messages are formatted. Customization is endless. + +`` - Replacement placeholders. +`<#condition>` - Conditional replacements. + +**Replacement Placeholders** +Placeholders are used to build a template (similar to [mustache](https://mustache.github.io/)) which are replaced with real values from incoming webhooks and used to send outgoing Discord messages. + +**Conditional replacements** +Enable the ability to only show something if the conditional value evaluates to `true`. A prime example would be if the Pokemon is near a Pokestop, to include the Pokestop name and image. Below is an example of it: +``` +{{#if near_pokestop}}**Near Pokestop:** [{{pokestop_name}}]({{pokestop_url}}){{br}}{{/if}} +``` + +`{{pokestop_name}}` - Replaced by the name of the nearby Pokestop. +`{{pokestop_url}}` - Replaced by the image url of the nearby Pokestop. +`{{br}}` - Replaced with a new line break to preserve readability and formatting. + +For a list of available dynamic text substitution/replacement options check out the [DTS](../dts/index.md) pages. + +
+ +## Embed Message Structures +```json +{ + "pokemon": { + // Embed avatar icon url + "avatarUrl": "{{pkmn_img_url}}", + // Embed content text, each array item is treated as a new line break + "content": [ + "{{pkmn_name}} {{form}}{{gender}} {{iv}} ({{atk_iv}}/{{def_iv}}/{{sta_iv}}) L{{lvl}}", + "**Despawn:** {{despawn_time}} ({{time_left}} left){{despawn_time_verified}}", + "**Details:** CP: {{cp}} IV: {{iv}} LV: {{lvl}}", + "**Size:** {{size}} | {{types_emoji}}{{#if has_weather}} | {{weather_emoji}}{{#if is_weather_boosted}} (Boosted){{/if}}{{/if}}", + "**Moveset:** {{moveset}}", + "{{#if near_pokestop}}**Near Pokestop:** [{{pokestop_name}}]({{pokestop_url}})", + "{{/if}}{{#if is_ditto}}**Catch Pokemon:** {{original_pkmn_name}}", + "{{/if}}{{#if has_capture_rates}}{{capture_1_emoji}} {{capture_1}}% {{capture_2_emoji}} {{capture_2}}% {{capture_3_emoji}} {{capture_3}}%", + "{{/if}}{{#if is_event}}Go Fest Spawn", + "{{/if}}{{#if has_pvp}}", + "{{#each pvp}}**{{@key}}**", + "{{#each this}}", + "#{{rank}} {{getPokemonName pokemonId}} {{getFormName formId}} {{cp}}CP @ L{{level}} {{formatPercentage percentage}}%", + "{{/each}}{{/each}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + // Embed icon image url + "iconUrl": "{{pkmn_img_url}}", + // Embed title text + "title": "{{geofence}}", + // Embed title url + "url": "{{gmaps_url}}", + // Embed author username + "username": "{{form}} {{pkmn_name}}{{gender}}", + // Embed bottom image url + "imageUrl": "{{tilemaps_url}}", + // Embed footer + "footer": { + // Embed footer text + "text": "{{guild_name}} {{date_time}}", + // Embed footer icon url + "iconUrl": "{{guild_img_url}}" + } + }, + "pokemonMissingStats": { + "avatarUrl": "{{pkmn_img_url}}", + "content": [ + "{{pkmn_name}} {{form}}{{gender}}", + "**Despawn:** {{despawn_time}} ({{time_left}} left){{despawn_time_verified}}", + "**Types:** {{types_emoji}}", + "{{#if near_pokestop}}**Near Pokestop:** [{{pokestop_name}}]({{pokestop_url}})", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pkmn_img_url}}", + "title": "{{geofence}}", + "url": "{{gmaps_url}}", + "username": "{{form}} {{pkmn_name}}{{gender}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "gyms": { + "avatarUrl": "{{gym_url}}", + "content": [ + "{{#if team_changed}}Gym changed from {{old_gym_team_emoji}} {{old_gym_team}} to {{gym_team_emoji}} {{gym_team}}", + "{{/if}}{{#if in_battle}}Gym is under attack!", + "{{/if}}**Slots Available:** {{slots_available}}", + "{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}{{#if is_ex}}{{ex_gym_emoji}} Gym!", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{gym_url}}", + "title": "{{geofence}}: {{gym_name}}", + "url": "{{gmaps_url}}", + "username": "{{gym_name}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "raids": { + "avatarUrl": "{{pkmn_img_url}}", + "content": [ + "{{evolution}} {{form}} {{pkmn_name}}{{gender}} {{costume}} Raid Ends: {{end_time}} ({{end_time_left}} left)", + "**Perfect CP:** {{perfect_cp}} / :white_sun_rain_cloud: {{perfect_cp_boosted}}", + "**Worst CP:** {{worst_cp}} / :white_sun_rain_cloud: {{worst_cp_boosted}}", + "**Types:** {{types_emoji}} | **Level:** {{lvl}} | **Team:** {{team_emoji}}", + "**Moveset:** {{moveset}}", + "**Weaknesses:** {{weaknesses_emoji}}", + "{{#if is_ex}}{{ex_emoji}} Gym!", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pkmn_img_url}}", + "title": "{{geofence}}: {{gym_name}}", + "url": "{{gmaps_url}}", + "username": "{{form}} {{pkmn_name}}{{gender}} {{costume}} Raid", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "eggs": { + "avatarUrl": "{{pkmn_img_url}}", + "content": [ + "Hatches: {{start_time}} ({{start_time_left}})", + "**Ends:** {{end_time}} ({{end_time_left}} left)", + "**Team:** {{team_emoji}}", + "{{#if is_ex}}{{ex_emoji}} Gym!", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pkmn_img_url}}", + "title": "{{geofence}}: {{gym_name}}", + "url": "{{gmaps_url}}", + "username": "Level {{lvl}} Egg", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "pokestops": { + "avatarUrl": "{{pokestop_url}}", + "content": [ + "{{#if has_lure}}**Lure Expires** {{lure_expire_time}} ({{lure_expire_time_left}} left)", + "**Lure Type:** {{lure_type}}", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pokestop_url}}", + "title": "{{geofence}}: {{pokestop_name}}", + "url": "{{gmaps_url}}", + "username": "{{pokestop_name}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "quests": { + "avatarUrl": "{{quest_reward_img_url}}", + "content": [ + "**Quest:** {{quest_task}}", + "{{#if has_quest_conditions}}**Condition(s):** {{quest_conditions}}", + "{{/if}}**Reward:** {{quest_reward}}", + "{{#if is_ar}}**AR Quest Required!**", + "{{/if}}", + "**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pokestop_url}}", + "title": "{{geofence}}: {{pokestop_name}}", + "url": "{{gmaps_url}}", + "username": "{{quest_task}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "lures": { + "avatarUrl": "{{lure_img_url}}", + "content": [ + "{{#if has_lure}}**Lure Expires** {{lure_expire_time}} ({{lure_expire_time_left}} left)", + "**Lure Type:** {{lure_type}}", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pokestop_url}}", + "title": "{{geofence}}: {{pokestop_name}}", + "url": "{{gmaps_url}}", + "username": "{{pokestop_name}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "invasions": { + "avatarUrl": "{{invasion_img_url}}", + "content": [ + "{{#if has_invasion}}**Expires:** {{invasion_expire_time}} ({{invasion_expire_time_left}} left)", + "**Type:** {{grunt_type_emoji}} | **Gender:** {{grunt_gender}}", + "**Encounter Reward Chance:**", + "{{#each invasion_encounters}}", + "{{chance}} - {{pokemon}}", + "{{/each}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pokestop_url}}", + "title": "{{geofence}}: {{pokestop_name}}", + "url": "{{gmaps_url}}", + "username": "{{pokestop_name}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "nests": { + "avatarUrl": "{{pkmn_img_url}}", + "content": [ + "**Pokemon:** {{pkmn_name}}", + "**Average Spawns:** {{avg_spawns}}/h | **Types:** {{types_emojis}}", + "**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pkmn_img_url}}", + "title": "{{geofence}}: {{nest_name}}", + "url": "{{gmaps_url}}", + "username": "", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "weather": { + "avatarUrl": "{{weather_img_url}}", + "content": [ + "**Weather Condition:** {{weather_emoji}} {{weather_condition}}", + "**Weather Cell ID:** #{{id}}" + ], + "iconUrl": "{{weather_img_url}}", + "title": "{{geofence}}", + "url": "{{gmaps_url}}", + "username": "Weather", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + } +} +``` \ No newline at end of file diff --git a/docs/config/filters.md b/docs/config/filters.md new file mode 100644 index 00000000..177b3794 --- /dev/null +++ b/docs/config/filters.md @@ -0,0 +1,232 @@ +# Filters +Filters allow you to narrow down what is reported. All filters are optional and can be omitted. Plenty of examples in the repository under the [`examples/Filters`](https://github.com/versx/WhMgr/tree/master/examples/filters) directory for all different needs. + +## Filter Converters +- WDR [Filter Converter](https://github.com/versx/WdrFilterConverter) + +## Available Filter Options +```json +{ + "pokemon": + { + "enabled": true, // Filter is enabled + "pokemon": [280,337,374], // List of Pokemon for the filter or empty for all + "forms": ["Alola", "Galar"], + "costumes": ["Detective","Holiday"], // List of costumes for the filter or empty for all + "min_iv": 0, // Minimum IV of Pokemon to send + "max_iv": 100, // Maximum IV of Pokemon to send + "min_cp": 0, // Minimum CP of Pokemon + "max_cp": 999999, // Maximum CP of Pokemon + "min_lvl": 0, // Minimum level of Pokemon + "max_lvl": 35, // Maximum level of Pokemon + "gender": "m", // Only send male (m,f,*) + "size": "Big", // Tiny, Small, Normal, Large, Big + // Add or remove any PVP league filtering keys + // depending on the interested ranks. + "pvp": { + // Little league rank filtering + "little": { + // Minimum rank of #1 for PVP rank stats + "min_rank": 1, + // Maximum rank of #5 for PVP rank stats + "max_rank": 5, + // Minimum CP value of 400 for PVP rank stats + "min_cp": 400, + // Maximum CP value of 500 for PVP rank stats + "max_cp": 500, + // Minimum PVP product stat + "min_percent": 90, + // Maximum PVP product stat + "max_percent": 100, + // Gender filtering requirement (*, m, or f) + "gender": "*" + }, + // Great league rank filtering + "great": { + "min_rank": 1, + "max_rank": 5, + "min_cp": 1400, + "max_cp": 1500, + "gender": "m" + }, + // Ultra league rank filtering + "ultra": { + "min_rank": 1, + "max_rank": 25, + "min_cp": 2400, + "max_cp": 2500, + "gender": "f" + } + }, + "type": "Include", // Include or Exclude the `pokemon` list + "is_event": false, // Only send Pokemon checked with event accounts (GoFest, etc) + "ignore_missing": true // Ignore Pokemon missing stats + }, + "eggs": + { + "enabled": true, // Filter is enabled + "min_lvl": 1, // Minimum egg level to send + "max_lvl": 8, // Maximum egg level to send + "only_ex": false, // Only send ex-eligible raids. + "team": "All", // All, Valor, Mystic, Instinct, Neutral + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + } + }, + "raids": + { + "enabled": true, // Filter is enabled + "pokemon": [], // Raid bosses to include or none for all. + "forms": ["Alola","Galar"], // List of forms for the filter or empty for all + "costumes": ["Detective","Holiday"], // List of costumes for the filter or empty for all + "min_lvl": 1, // Minimum raid level to send + "max_lvl": 8, // Maximum raid level to send + "type": "Include", // Include or Exclude the `pokemon` list + "only_ex": false, // Only send ex-eligible raids. + "team": "All", // All, Valor, Mystic, Instinct, Nuetral + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + }, + "ignore_missing": true // Ignore raids missing stats + }, + "quests": + { + "enabled": true, // Filter is enabled + "rewards": ["spinda", "nincada"], // Quest reward string (Chansey, stardust, candy, etc.) + "is_shiny": false, // Only shiny encounter quests. + "type": "Include" // Include or Exclude the `rewards` list + }, + "pokestops": + { + "enabled": true, // Filter is enabled + "lured": true, // Only send lured pokestops + "lure_types": ["Normal", "Glacial", "Mossy", "Magnetic"], // Only send lures in type list + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + } + }, + "invasions": { + "enabled": true, // Filter is enabled + // Determines which invasion types to send + "invasionTypes": { + "CharacterUnset": false, + "CharacterBlanche": true, + "CharacterCandela": true, + "CharacterSpark": true, + "CharacterGruntMale": true, + "CharacterGruntFemale": true, + "CharacterBugGruntFemale": true, + "CharacterBugGruntMale": true, + "CharacterDarknessGruntFemale": true, + "CharacterDarknessGruntMale": true, + "CharacterDarkGruntFemale": true, + "CharacterDarkGruntMale": true, + "CharacterDragonGruntFemale": true, + "CharacterDragonGruntMale": true, + "CharacterFairyGruntFemale": true, + "CharacterFairyGruntMale": true, + "CharacterFightingGruntFemale": true, + "CharacterFightingGruntMale": true, + "CharacterFireGruntFemale": true, + "CharacterFireGruntMale": true, + "CharacterFlyingGruntFemale": true, + "CharacterFlyingGruntMale": true, + "CharacterGrassGruntFemale": true, + "CharacterGrassGruntMale": true, + "CharacterGroundGruntFemale": true, + "CharacterGroundGruntMale": true, + "CharacterIceGruntFemale": true, + "CharacterIceGruntMale": true, + "CharacterMetalGruntFemale": true, + "CharacterMetalGruntMale": true, + "CharacterNormalGruntFemale": true, + "CharacterNormalGruntMale": true, + "CharacterPoisonGruntFemale": true, + "CharacterPoisonGruntMale": true, + "CharacterPsychicGruntFemale": true, + "CharacterPsychicGruntMale": true, + "CharacterRockGruntFemale": true, + "CharacterRockGruntMale": true, + "CharacterWaterGruntFemale": true, + "CharacterWaterGruntMale": true, + "CharacterPlayerTeamLeader": true, + "CharacterExecutiveCliff": true, + "CharacterExecutiveArlo": true, + "CharacterExecutiveSierra": true, + "CharacterGiovanni": true, + "CharacterDecoyGruntMale": true, + "CharacterDecoyGruntFemale": true, + "CharacterGhostGruntFemale": true, + "CharacterGhostGruntMale": true, + "CharacterElectricGruntFemale": true, + "CharacterElectricGruntMale": true, + "CharacterBalloonGruntFemale": true, + "CharacterBalloonGruntMale": true, + "CharacterGruntbFemale": true, + "CharacterGruntbMale": true, + "CharacterBugBalloonGruntFemale": true, + "CharacterBugBalloonGruntMale": true, + "CharacterDarkBalloonGruntFemale": true, + "CharacterDarkBalloonGruntMale": true, + "CharacterDragonBalloonGruntFemale": true, + "CharacterDragonBalloonGruntMale": true, + "CharacterFairyBalloonGruntFemale": true, + "CharacterFairyBalloonGruntMale": true, + "CharacterFightingBalloonGruntFemale": true, + "CharacterFightingBalloonGruntMale": true, + "CharacterFireBalloonGruntFemale": true, + "CharacterFireBalloonGruntMale": true, + "CharacterFlyingBalloonGruntFemale": true, + "CharacterFlyingBalloonGruntMale": true, + "CharacterGrassBalloonGruntFemale": true, + "CharacterGrassBalloonGruntMale": true, + "CharacterGroundBalloonGruntFemale": true, + "CharacterGroundBalloonGruntMale": true, + "CharacterIceBalloonGruntFemale": true, + "CharacterIceBalloonGruntMale": true, + "CharacterMetalBalloonGruntFemale": true, + "CharacterMetalBalloonGruntMale": true, + "CharacterNormalBalloonGruntFemale": true, + "CharacterNormalBalloonGruntMale": true, + "CharacterPoisonBalloonGruntFemale": true, + "CharacterPoisonBalloonGruntMale": true, + "CharacterPsychicBalloonGruntFemale": true, + "CharacterPsychicBalloonGruntMale": true, + "CharacterRockBalloonGruntFemale": true, + "CharacterRockBalloonGruntMale": true, + "CharacterWaterBalloonGruntFemale": true, + "CharacterWaterBalloonGruntMale": true, + "CharacterGhostBalloonGruntFemale": true, + "CharacterGhostBalloonGruntMale": true, + "CharacterElectricBalloonGruntFemale": true, + "CharacterElectricBalloonGruntMale": true + } + }, + "gyms": + { + "enabled": true, // Filter is enabled + "under_attack": true, // Only gyms that are under attack + "team": "All", // Team change to notify about (i.e. Neutral/Mystic/Valor/Instinct/All) + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + } + }, + "weather": + { + "enabled": true, // Filter is enabled + "types": ["Clear", "Rainy", "PartlyCloudy", "Overcast", "Windy", "Snow", "Fog"] // Only send weather types that are in the list + } +} +``` diff --git a/docs/user-guide/geofences.md b/docs/config/geofences.md similarity index 82% rename from docs/user-guide/geofences.md rename to docs/config/geofences.md index 120c167b..f287062b 100644 --- a/docs/user-guide/geofences.md +++ b/docs/config/geofences.md @@ -1,89 +1,98 @@ -# Geofences - -Geofences define area borders and perimeters for a city or multiple cities. Each alarm can take multiple geofence files or names, as well as a combination of both. - -**Geofences must be placed in the `bin/geofences` folder.** -*Note:* Supports INI geofence file format as well as GeoJSON geofence file format: - -## Examples - -## __INI Format__ -```ini -[City1] -34.00,-117.00 -34.01,-117.01 -34.02,-117.02 -34.03,-117.03 -[City2] -33.00,-118.00 -33.01,-118.01 -33.02,-118.02 -33.03,-118.03 -``` -## __GeoJSON Format__ -```json -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "id": 12143584, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -117.185508, - 34.05361 - ], - [ - -117.185397, - 34.05366 - ], - [ - -117.185326, - 34.053564 - ], - [ - -117.184819, - 34.053828 - ], - [ - -117.184457, - 34.054009 - ], - [ - -117.18409, - 34.05353 - ], - [ - -117.184027, - 34.053448 - ], - [ - -117.184991, - 34.052942 - ], - [ - -117.185508, - 34.05361 - ] - ] - ] - }, - "properties": { - "name": "Unknown Areaname", - "stroke": "#352BFF", - "stroke-width": 2.0, - "stroke-opacity": 1.0, - "fill": "#0651FF", - "fill-opacity": 0.5, - "priority": 2, - } - } - ] -} -``` - - -Optional: [**GeoJSON to individual INI format geofence files converter**](https://gist.github.com/versx/a0915c6bd95a080b6ff60cd539d4feb6) \ No newline at end of file +# Geofences + +Geofences define area borders and perimeters for a city or multiple cities. Each alarm can take multiple geofence files or names, as well as a combination of both. + +**Geofences must be placed in the `bin/geofences` folder.** +*Note:* Supports INI geofence file format as well as GeoJSON geofence file format: + +## Examples + +### __INI Format__ +```ini +[City1] +34.00,-117.00 +34.01,-117.01 +34.02,-117.02 +34.03,-117.03 +[City2] +33.00,-118.00 +33.01,-118.01 +33.02,-118.02 +33.03,-118.03 +``` +### __GeoJSON Format__ +```json +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "id": 12143584, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.185508, + 34.05361 + ], + [ + -117.185397, + 34.05366 + ], + [ + -117.185326, + 34.053564 + ], + [ + -117.184819, + 34.053828 + ], + [ + -117.184457, + 34.054009 + ], + [ + -117.18409, + 34.05353 + ], + [ + -117.184027, + 34.053448 + ], + [ + -117.184991, + 34.052942 + ], + [ + -117.185508, + 34.05361 + ] + ] + ] + }, + "properties": { + "enabled": true, + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5, + "priority": 2 + } + } + ] +} +``` + +## __Converter Scripts__ + +GeoJSON to individual INI format geofence files converter: +https://gist.github.com/versx/a0915c6bd95a080b6ff60cd539d4feb6 + +Combine all GeoJSON files to one single file: +https://github.com/WatWowMap/MapJS/blob/master/src/geofenceToGeoJSON.js + +Poracle GeoJSON format to GeoJSON: +https://github.com/WatWowMap/MapJS/blob/master/src/poracleToGeoJSON.js \ No newline at end of file diff --git a/docs/user-guide/dts/gyms.md b/docs/dts/gyms.md similarity index 79% rename from docs/user-guide/dts/gyms.md rename to docs/dts/gyms.md index afda2e2b..12196c51 100644 --- a/docs/user-guide/dts/gyms.md +++ b/docs/dts/gyms.md @@ -1,35 +1,42 @@ -# Dynamic Text Replacement - -Use any of the following in your alerts file to structure how notifications will look for Gyms. - -### Gyms - -| Place Holder | Description | Example -|---|---|---| -| gym_id | Gym ID | 032840982304982034.16 -| gym_name | Name of Gym | The Amazing Gym -| gym_url | Image url of Gym | https://google.com/imgs/gym.png -| gym_team | Current team that has gym control | Valor -| gym_team_emoji | Emoji icon of current team that has gym control | <:09833:valor> -| old_gym_team | Previous gym team that had gym control | Mystic -| old_gym_team_emoji | Emoji icon of previous gym team that has gym control | <:324987:mystic> -| team_changed | Returns if team's gym control changed | true -| in_battle | Returns if there's a current battle at the gym taking place | false -| under_attack | Returns if there's a current battle at the gym taking place | false -| is_ex | Returns if the gym is an ex raid eligible location | true -| ex_emoji | Ex emoji icon | <:809809:ex> -| slots_available | Number of available gym slots | 3 -| geofence | Geofence name raid boss is in | City1 -| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St -| lat | Latitude coordinate of Pokemon location | 5.980921321 -| lng | Longitude coordinate of Pokemon location | 3.109283009 -| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 -| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 -| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png -| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 -| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 -| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes -| guild_name | Name of Guild | Test Guild -| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png -| date_time | Current date and time | 12/12/2020 12:12:12 PM +# Dynamic Text Replacement + +Use any of the following in your embeds file to structure how notifications will look for Gyms. + +### Gyms + +| Place Holder | Description | Example +|---|---|---| +| gym_id | Gym ID | 032840982304982034.16 +| gym_name | Name of Gym | The Amazing Gym +| gym_url | Image url of Gym | https://google.com/imgs/gym.png +| gym_team | Current team that has gym control | Valor +| gym_team_emoji | Emoji icon of current team that has gym control | <:09833:valor> +| old_gym_team | Previous gym team that had gym control | Mystic +| old_gym_team_emoji | Emoji icon of previous gym team that has gym control | <:324987:mystic> +| team_changed | Returns if team's gym control changed | true +| in_battle | Returns if there's a current battle at the gym taking place | false +| under_attack | Returns if there's a current battle at the gym taking place | false +| is_ex | Returns if the gym is an ex raid eligible location | true +| ex_emoji | Ex emoji icon | <:809809:ex> +| slots_available | Number of available gym slots | 3 +| sponsor_id | Some ID value I have no idea about | 33333 +| partner_id | Some ID value I have no idea about | 44444 +| power_up_level | Gym power level | 1 +| power_up_points | Gym's total power level points | 100 +| power_up_end_time | Gym's power up end time | 10:15:09 PM +| power_up_end_time_24h | Gym's power up end time (24-hour format) | 13:28:30 +| power_up_end_time_left | Gym's power up time left until expires | 14m, 10s +| geofence | Geofence name raid boss is in | City1 +| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St +| lat | Latitude coordinate of Pokemon location | 5.980921321 +| lng | Longitude coordinate of Pokemon location | 3.109283009 +| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 +| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 +| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png +| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 +| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 +| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes +| guild_name | Name of Guild | Test Guild +| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png +| date_time | Current date and time | 12/12/2020 12:12:12 PM | br | Newline break | `\r\n` \ No newline at end of file diff --git a/docs/dts/index.md b/docs/dts/index.md new file mode 100644 index 00000000..eb03f535 --- /dev/null +++ b/docs/dts/index.md @@ -0,0 +1,8 @@ +# Dynamic Text Substitution/Replacement Types +- [Pokemon](./pokemon.md) +- [Raid & Eggs](./raids.md) +- [Quests](./quests.md) +- [Pokestops](./pokestops.md) +- [Gyms](./gyms.md) +- [Nests](./nests.md) +- [Weather](./weather.md) \ No newline at end of file diff --git a/docs/user-guide/dts/pokestops.md b/docs/dts/invasions.md similarity index 72% rename from docs/user-guide/dts/pokestops.md rename to docs/dts/invasions.md index 9438fad6..f5387266 100644 --- a/docs/user-guide/dts/pokestops.md +++ b/docs/dts/invasions.md @@ -1,40 +1,38 @@ -# Dynamic Text Replacement - -Use any of the following in your alerts file to structure how notifications will look for Raids and Eggs. - -### Pokestops (Lures and Team Rocket invasions) - -| Place Holder | Description | Example -|---|---|---| -| has_lure | Returns if Pokestop has active lure module deployed | true -| lure_type | Pokestop lure module type | Glacial -| lure_expire_time | Time lure module will expire | 07:33:19 PM -| lure_expire_time_24h | Time lure module will expire (24-hour format) | 19:33:19 -| lure_expire_time_left | Time left until lure module expires | 13m, 2s -| has_invasion | Returns if Pokestop has active Team Rocket invasion | false -| grunt_type | Grunt type | Water -| grunt_type_emoji | Emoji icon of grunt type | <:938294:types_water> -| grunt_gender | Grunt gender | Male -| invasion_expire_time | Time the invasion expires | 02:17:11 PM -| invasion_expire_time_24h | Time the invasion expires (24-hour format) | 14:17:11 -| invasion_expire_time_left | Time left until invasion expires | 12m, 56s -| invasion_encounters | Possible invasions reward encounters | 80% Bulbasaur -| geofence | Geofence name raid boss is in | City1 -| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St -| lat | Latitude coordinate of Pokemon location | 5.980921321 -| lng | Longitude coordinate of Pokemon location | 3.109283009 -| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 -| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 -| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png -| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 -| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 -| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes -| pokestop_id | Pokestop ID | 9382498723849792348798234.16 -| pokestop_name | Name of Pokestop | The Amazing Pokestop -| pokestop_url | Image url of Gym | https://google.com/imgs/gym.png -| lure_img_url | Image url of lure icon | https://google.com/imgs/lure_501.png -| invasion_img_url | Image url of grunt type icon | https://google.com/imgs/grunt_50.png -| guild_name | Name of Guild | Test Guild -| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png -| date_time | Current date and time | 12/12/2020 12:12:12 PM +# Dynamic Text Replacement + +Use any of the following in your embeds file to structure how notifications will look for Team Rocket Invasions. + +### Team Rocket Invasions + +| Place Holder | Description | Example +|---|---|---| +| grunt_type | Grunt type | Water +| grunt_type_emoji | Emoji icon of grunt type | <:938294:types_water> +| grunt_gender | Grunt gender | Male +| grunt_gender_id | Grunt gender id | 2 +| display_type | Incident type i.e. Grunt, Leader, etc | InvasionGrunt +| display_type_id | Incident type id | 2 +| style | Incident style | PokestopNormal, PokestopRocketInvasion +| style_id | Incident style id | 0 +| invasion_expire_time | Time the invasion expires | 02:17:11 PM +| invasion_expire_time_24h | Time the invasion expires (24-hour format) | 14:17:11 +| invasion_expire_time_left | Time left until invasion expires | 12m, 56s +| invasion_encounters | Possible invasions reward encounters | 80% Bulbasaur +| geofence | Geofence name raid boss is in | City1 +| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St +| lat | Latitude coordinate of Pokemon location | 5.980921321 +| lng | Longitude coordinate of Pokemon location | 3.109283009 +| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 +| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 +| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png +| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 +| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 +| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes +| pokestop_id | Pokestop ID | 9382498723849792348798234.16 +| pokestop_name | Name of Pokestop | The Amazing Pokestop +| pokestop_url | Image url of Gym | https://google.com/imgs/gym.png +| invasion_img_url | Image url of grunt type icon | https://google.com/imgs/grunt_50.png +| guild_name | Name of Guild | Test Guild +| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png +| date_time | Current date and time | 12/12/2020 12:12:12 PM | br | Newline break | `\r\n` \ No newline at end of file diff --git a/docs/user-guide/dts/nests.md b/docs/dts/nests.md similarity index 94% rename from docs/user-guide/dts/nests.md rename to docs/dts/nests.md index 0859a4d8..dd0d5e8d 100644 --- a/docs/user-guide/dts/nests.md +++ b/docs/dts/nests.md @@ -1,32 +1,32 @@ -# Dynamic Text Replacement - -Use any of the following in your alerts file to structure how notifications will look for nests. - -### Nests - -| Place Holder | Description | Example -|---|---|---| -| pkmn_id | Pokedex ID | 1 -| pkmn_id_3 | Pokedex ID (always 3 digits) | 001 -| pkmn_name | Pokemon name | Bulbasaur -| pkmn_img_url | Pokemon image url | http://example.com/your-specified-pokemon-url -| avg_spawns | Average amount of spawns in the nests | 34 -| nest_name | Nest/Park name | Best Park Ever -| type_1 | Pokemon type | Dark -| type_2 | Pokemon type | Water -| type_1_emoji | Pokemon type emoji | <:00000:types_water> -| type_2_emoji | Pokemon type emoji | <:00000:types_rock> -| types | Both types (if 2nd exists) | Dark/Fire -| types_emoji | Type Discord emoji | <:00000:types_fire> <00001:types_dark> -| geofence | Geofence name nest/park is in | City1 -| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St -| lat | Latitude coordinate of Pokemon location | 5.980921321 -| lng | Longitude coordinate of S2Cell weather location | 3.109283009 -| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 -| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 -| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png -| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 -| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 -| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes -| date_time | Current date and time | 12/12/2020 12:12:12 PM +# Dynamic Text Replacement + +Use any of the following in your embeds file to structure how notifications will look for nests. + +### Nests + +| Place Holder | Description | Example +|---|---|---| +| pkmn_id | Pokedex ID | 1 +| pkmn_id_3 | Pokedex ID (always 3 digits) | 001 +| pkmn_name | Pokemon name | Bulbasaur +| pkmn_img_url | Pokemon image url | http://example.com/your-specified-pokemon-url +| avg_spawns | Average amount of spawns in the nests | 34 +| nest_name | Nest/Park name | Best Park Ever +| type_1 | Pokemon type | Dark +| type_2 | Pokemon type | Water +| type_1_emoji | Pokemon type emoji | <:00000:types_water> +| type_2_emoji | Pokemon type emoji | <:00000:types_rock> +| types | Both types (if 2nd exists) | Dark/Fire +| types_emoji | Type Discord emoji | <:00000:types_fire> <00001:types_dark> +| geofence | Geofence name nest/park is in | City1 +| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St +| lat | Latitude coordinate of Pokemon location | 5.980921321 +| lng | Longitude coordinate of S2Cell weather location | 3.109283009 +| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 +| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 +| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png +| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 +| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 +| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes +| date_time | Current date and time | 12/12/2020 12:12:12 PM | br | Newline break | `\r\n` \ No newline at end of file diff --git a/docs/user-guide/dts/pokemon.md b/docs/dts/pokemon.md similarity index 92% rename from docs/user-guide/dts/pokemon.md rename to docs/dts/pokemon.md index eab34b04..a05cbc6c 100644 --- a/docs/user-guide/dts/pokemon.md +++ b/docs/dts/pokemon.md @@ -1,79 +1,77 @@ -# Dynamic Text Replacement - -Use any of the following in your alerts file to structure how notifications will look for Pokemon. - -### Pokemon - -| Place Holder | Description | Example -|---|---|---| -| pkmn_id | Pokedex ID | 1 -| pkmn_id_3 | Pokedex ID (always 3 digits) | 001 -| pkmn_name | Pokemon name | Bulbasaur -| pkmn_img_url | Pokemon image url | http://example.com/your-specified-pokemon-url -| form | Pokemon form name | Alolan -| form_id | Form ID | 65 -| form_id_3 | Form ID (always 3 digits) | 065 -| costume | Costume name | Witch Hat -| costume_id | Costume ID | 835 -| costume_id_3 | Costume ID (always 3 digits) | 835 -| cp | Combat Power value | 1525 -| lvl | Pokemon level | 25 -| gender | Pokemon gender | Gender icon -| gender_emoji | Pokemon gender emoji | <:00000:gender_male> -| size | Pokemon size | Big -| move_1 | Fast move name | Quick Attack -| move_2 | Charge move name | Thunder -| moveset | Fast & Charge move names | Quick Attack/Thunder -| type_1 | Pokemon type | Dark -| type_2 | Pokemon type | Water -| type_1_emoji | Pokemon type emoji | <:00000:types_water> -| type_2_emoji | Pokemon type emoji | <:00000:types_rock> -| types | Both types (if 2nd exists) | Dark/Fire -| types_emoji | Type Discord emoji | <:00000:types_fire> <00001:types_dark> -| atk_iv | Attack IV stat | 15 -| def_iv | Defense IV stat | 7 -| sta_iv | Stamina IV stat | 13 -| iv | IV stat (including percent sign) | 100% -| iv_rnd | Rounded IV stat | 96% -| is_great | Great League stats (bool) | true -| is_ultra | Ultra League stats (bool) | false -| is_pvp | Has either Great or Ultra league stats | true -| great_league_emoji | Great League emoji icon | <000000:league_great> -| ultra_league_emoji | Ultra League emoji icon | <000000:league_ultra> -| pvp_stats | PvP stat ranking strings | -| height | Pokemon height | 0.79 -| weight | Pokemon weight | 116 -| is_ditto | Checks if Ditto | true -| original_pkmn_id | Pokedex ID of Ditto disguise | 13 -| original_pkmn_id_3 | Pokedex ID of Ditto disguise (always 3 digits) | 013 -| original_pkmn_name | Pokemon name of Ditto diguise | Weedle -| is_weather_boosted | Returns if Pokemon is weather boosted | true -| has_weather | Returns if Pokemon data has weather | false -| weather | Weather in-game name | PartlyCloudy -| weather_emoji | Weather in-game emoji | Weather -| username | Account username of account that found Pokemon | Frank0324 -| spawnpoint_id | Spawnpoint ID Pokemon near | 3920849203840983204980 -| encounter_id | Encounter ID of Pokemon | 392874987239487924 -| despawn_time | Pokemon despawn time | 07:33:01 PM -| despawn_time_24h | Pokemon despawn time (24-hour format) | 19:33:01 -| despawn_time_verified | Indicates if time is confirmed or not | `~` for not verified -| is_despawn_time_verified | Returns if despawn time is verified | true -| time_left | Minutes and seconds of time left until despawn | 29m, 30s -| geofence | Geofence name Pokemon is in | City1 -| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St -| lat | Latitude coordinate of Pokemon location | 5.980921321 -| lng | Longitude coordinate of Pokemon location | 3.109283009 -| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 -| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 -| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png -| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 -| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 -| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes -| near_pokestop | Returns if Pokemon is near a Pokestop | true -| pokestop_id | Nearby Pokestop ID | 9382498723849792348798234.16 -| pokestop_name | Name of nearby Pokestop | The Amazing Pokestop -| pokestop_url | Image url of nearby Pokestop | https://google.com/imgs/gym.png -| guild_name | Name of Guild | Test Guild -| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png -| date_time | Current date and time | 12/12/2020 12:12:12 PM +# Dynamic Text Replacement + +Use any of the following in your embeds file to structure how notifications will look for Pokemon. + +### Pokemon + +| Place Holder | Description | Example +|---|---|---| +| pkmn_id | Pokedex ID | 1 +| pkmn_id_3 | Pokedex ID (always 3 digits) | 001 +| pkmn_name | Pokemon name | Bulbasaur +| pkmn_img_url | Pokemon image url | http://example.com/your-specified-pokemon-url +| form | Pokemon form name | Alolan +| form_id | Form ID | 65 +| form_id_3 | Form ID (always 3 digits) | 065 +| costume | Costume name | Witch Hat +| costume_id | Costume ID | 835 +| costume_id_3 | Costume ID (always 3 digits) | 835 +| cp | Combat Power value | 1525 +| lvl | Pokemon level | 25 +| gender | Pokemon gender | Gender icon +| gender_emoji | Pokemon gender emoji | <:00000:gender_male> +| size | Pokemon size | Big +| move_1 | Fast move name | Quick Attack +| move_2 | Charge move name | Thunder +| moveset | Fast & Charge move names | Quick Attack/Thunder +| type_1 | Pokemon type | Dark +| type_2 | Pokemon type | Water +| types | Both Pokemon types (if 2nd exists) | Dark/Fire +| types_emoji | Type Discord emoji | <:00000:types_fire> <00001:types_dark> +| atk_iv | Attack IV stat | 15 +| def_iv | Defense IV stat | 7 +| sta_iv | Stamina IV stat | 13 +| iv | IV stat (including percent sign) | 100% +| iv_rnd | Rounded IV stat | 96% +| is_great | Great League stats (bool) | true +| is_ultra | Ultra League stats (bool) | false +| is_pvp | Has either Great or Ultra league stats | true +| great_league_emoji | Great League emoji icon | <000000:league_great> +| ultra_league_emoji | Ultra League emoji icon | <000000:league_ultra> +| pvp_stats | PvP stat ranking strings | +| height | Pokemon height | 0.79 +| weight | Pokemon weight | 116 +| is_ditto | Checks if Ditto | true +| original_pkmn_id | Pokedex ID of Ditto disguise | 13 +| original_pkmn_id_3 | Pokedex ID of Ditto disguise (always 3 digits) | 013 +| original_pkmn_name | Pokemon name of Ditto diguise | Weedle +| is_weather_boosted | Returns if Pokemon is weather boosted | true +| has_weather | Returns if Pokemon data has weather | false +| weather | Weather in-game name | PartlyCloudy +| weather_emoji | Weather in-game emoji | Weather +| username | Account username of account that found Pokemon | Frank0324 +| spawnpoint_id | Spawnpoint ID Pokemon near | 3920849203840983204980 +| encounter_id | Encounter ID of Pokemon | 392874987239487924 +| despawn_time | Pokemon despawn time | 07:33:01 PM +| despawn_time_24h | Pokemon despawn time (24-hour format) | 19:33:01 +| despawn_time_verified | Indicates if time is confirmed or not | `~` for not verified +| is_despawn_time_verified | Returns if despawn time is verified | true +| time_left | Minutes and seconds of time left until despawn | 29m, 30s +| geofence | Geofence name Pokemon is in | City1 +| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St +| lat | Latitude coordinate of Pokemon location | 5.980921321 +| lng | Longitude coordinate of Pokemon location | 3.109283009 +| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 +| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 +| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png +| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 +| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 +| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes +| near_pokestop | Returns if Pokemon is near a Pokestop | true +| pokestop_id | Nearby Pokestop ID | 9382498723849792348798234.16 +| pokestop_name | Name of nearby Pokestop | The Amazing Pokestop +| pokestop_url | Image url of nearby Pokestop | https://google.com/imgs/gym.png +| guild_name | Name of Guild | Test Guild +| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png +| date_time | Current date and time | 12/12/2020 12:12:12 PM | br | Newline break | `\r\n` \ No newline at end of file diff --git a/docs/dts/pokestops.md b/docs/dts/pokestops.md new file mode 100644 index 00000000..8d70d5f7 --- /dev/null +++ b/docs/dts/pokestops.md @@ -0,0 +1,36 @@ +# Dynamic Text Replacement + +Use any of the following in your embeds file to structure how notifications will look for Pokestop Lures. + +### Pokestops (Lures) + +| Place Holder | Description | Example +|---|---|---| +| has_lure | Returns if Pokestop has active lure module deployed | true +| lure_type | Pokestop lure module type | Glacial +| lure_expire_time | Time lure module will expire | 07:33:19 PM +| lure_expire_time_24h | Time lure module will expire (24-hour format) | 19:33:19 +| lure_expire_time_left | Time left until lure module expires | 13m, 2s +| power_up_level | Pokestop power level | 1 +| power_up_points | Pokestop's total power level points | 100 +| power_up_end_time | Pokestop's power up end time | 10:15:09 PM +| power_up_end_time_24h | Pokestop's power up end time (24-hour format) | 13:28:30 +| power_up_end_time_left | Pokestop's power up time left until expires | 14m, 10s +| geofence | Geofence name raid boss is in | City1 +| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St +| lat | Latitude coordinate of Pokemon location | 5.980921321 +| lng | Longitude coordinate of Pokemon location | 3.109283009 +| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 +| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 +| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png +| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 +| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 +| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes +| pokestop_id | Pokestop ID | 9382498723849792348798234.16 +| pokestop_name | Name of Pokestop | The Amazing Pokestop +| pokestop_url | Image url of Gym | https://google.com/imgs/gym.png +| lure_img_url | Image url of lure icon | https://google.com/imgs/lure_501.png +| guild_name | Name of Guild | Test Guild +| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png +| date_time | Current date and time | 12/12/2020 12:12:12 PM +| br | Newline break | `\r\n` \ No newline at end of file diff --git a/docs/user-guide/dts/quests.md b/docs/dts/quests.md similarity index 93% rename from docs/user-guide/dts/quests.md rename to docs/dts/quests.md index 6fca5387..31e16445 100644 --- a/docs/user-guide/dts/quests.md +++ b/docs/dts/quests.md @@ -1,32 +1,35 @@ -# Dynamic Text Replacement - -Use any of the following in your alerts file to structure how notifications will look for field research quests. - -### Field Research Quests - -| Place Holder | Description | Example -|---|---|---| -| quest_task | Quest task message | Catch 5 Pokemon -| quest_conditions | Quest task conditions | Dark -| quest_reward | Quest task reward | Chansey -| quest_reward_img_url | Quest reward image url | http://map.example.com/images/quest.png -| has_quest_conditions | Returns if the quest has conditions | true -| is_ditto | Checks if Ditto | true -| is_shiny | Checks if reward is shiny | false -| geofence | Geofence name raid boss is in | City1 -| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St -| lat | Latitude coordinate of Pokemon location | 5.980921321 -| lng | Longitude coordinate of Pokemon location | 3.109283009 -| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 -| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 -| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png -| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 -| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 -| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes -| pokestop_id | Pokestop ID | 9382498723849792348798234.16 -| pokestop_name | Name of Pokestop | The Amazing Pokestop -| pokestop_url | Image url of Gym | https://google.com/imgs/gym.png -| guild_name | Name of Guild | Test Guild -| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png -| date_time | Current date and time | 12/12/2020 12:12:12 PM +# Dynamic Text Replacement + +Use any of the following in your embeds file to structure how notifications will look for field research quests. + +### Field Research Quests + +| Place Holder | Description | Example +|---|---|---| +| quest_task | Quest task message | Catch 5 Pokemon +| quest_conditions | Quest task conditions | Dark +| quest_reward | Quest task reward | Chansey +| quest_reward_img_url | Quest reward image url | http://map.example.com/images/quest.png +| has_quest_conditions | Returns if the quest has conditions | true +| title | | +| is_ditto | Checks if Ditto | true +| is_shiny | Checks if reward is shiny | false +| is_ar | | true +| with_ar | | false +| geofence | Geofence name raid boss is in | City1 +| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St +| lat | Latitude coordinate of Pokemon location | 5.980921321 +| lng | Longitude coordinate of Pokemon location | 3.109283009 +| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 +| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 +| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png +| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 +| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 +| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes +| pokestop_id | Pokestop ID | 9382498723849792348798234.16 +| pokestop_name | Name of Pokestop | The Amazing Pokestop +| pokestop_url | Image url of Gym | https://google.com/imgs/gym.png +| guild_name | Name of Guild | Test Guild +| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png +| date_time | Current date and time | 12/12/2020 12:12:12 PM | br | Newline break | `\r\n` \ No newline at end of file diff --git a/docs/user-guide/dts/raids.md b/docs/dts/raids.md similarity index 83% rename from docs/user-guide/dts/raids.md rename to docs/dts/raids.md index 169d79e7..7e594287 100644 --- a/docs/user-guide/dts/raids.md +++ b/docs/dts/raids.md @@ -1,65 +1,70 @@ -# Dynamic Text Replacement - -Use any of the following in your alerts file to structure how notifications will look for Raids and Eggs. - -### Raids & Eggs - -| Place Holder | Description | Example -|---|---|---| -| pkmn_id | Raid boss pokedex ID | 1 -| pkmn_id_3 | Raid boss pokedex ID (always 3 digits) | 001 -| pkmn_name | Raid boss pokemon name | Bulbasaur -| pkmn_img_url | Raid boss pokemon image url | http://example.com/your-specified-pokemon-url -| form | Pokemon form name | Alolan -| form_id | Form ID | 65 -| form_id_3 | Form ID (always 3 digits) | 065 -| costume | Pokemon costume name | Holiday -| costume_id | Costume ID | 10 -| costume_id_3 | Costume ID (always 3 digits) | 010 -| is_egg | Returns if raid is egg and not hatched | false -| is_ex | Returns if raid is ex pass eligible | true -| ex_emoji | Ex emoji icon | Ex -| team | Team name that has gym control | Valor -| team_emoji | Emoji of team that has gym control | <:valor:930824> -| cp | Raid boss combat power value | 36150 -| lvl | Raid boss level | 5 -| gender | Pokemon gender | Gender icon -| move_1 | Fast move name | Quick Attack -| move_2 | Charge move name | Thunder -| moveset | Fast & Charge move names | Quick Attack/Thunder -| type_1 | Pokemon type | Dark -| type_2 | Pokemon type | Water -| type_1_emoji | Pokemon type emoji | <:00000:types_water> -| type_2_emoji | Pokemon type emoji | <:00000:types_rock> -| types | Both types (if 2nd exists) | Dark/Fire -| types_emoji | Type Discord emoji | <:00000:types_fire> <00001:types_dark> -| weaknesses | Raid boss weaknesses | Rock, Ground, Dark -| weaknesses_emoji | Emoji(s) of raid boss weaknesses | Rock Ground Dark -| perfect_cp | Perfect IV CP | 1831 -| perfect_cp_boosted | Perfect IV CP if Weather boosted | 2351 -| worst_cp | Worst IV CP | 1530 -| worst_cp_boosted | Worst IV CP if Weather boosted | 1339 -| start_time | Raid start time | 08:32:00 AM -| start_time_24h | Raid start time (24-hour format) | 08:32:00 -| start_time_left | Time left until raid starts | 43m, 33s -| end_time | Raid end time | 09:15:10 AM -| end_time_24h | Raid end time (24-hour format) | 09:15:10 -| end_time_left | Time left until raid ends | 45, 11s -| time_left | Minutes and seconds of time left until despawn | 29m, 30s -| geofence | Geofence name raid boss is in | City1 -| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St -| lat | Latitude coordinate of Pokemon location | 5.980921321 -| lng | Longitude coordinate of Pokemon location | 3.109283009 -| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 -| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 -| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png -| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 -| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 -| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes -| gym_id | Gym ID | 9382498723849792348798234.16 -| gym_name | Name of Gym | The Amazing Gym -| gym_url | Image url of Gym | https://google.com/imgs/gym.png -| guild_name | Name of Guild | Test Guild -| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png -| date_time | Current date and time | 12/12/2020 12:12:12 PM +# Dynamic Text Replacement + +Use any of the following in your embeds file to structure how notifications will look for Raids and Eggs. + +### Raids & Eggs + +| Place Holder | Description | Example +|---|---|---| +| pkmn_id | Raid boss pokedex ID | 1 +| pkmn_id_3 | Raid boss pokedex ID (always 3 digits) | 001 +| pkmn_name | Raid boss pokemon name | Bulbasaur +| pkmn_img_url | Raid boss pokemon image url | http://example.com/your-specified-pokemon-url +| form | Pokemon form name | Alolan +| form_id | Form ID | 65 +| form_id_3 | Form ID (always 3 digits) | 065 +| costume | Pokemon costume name | Holiday +| costume_id | Costume ID | 10 +| costume_id_3 | Costume ID (always 3 digits) | 010 +| is_egg | Returns if raid is egg and not hatched | false +| is_ex | Returns if raid is ex pass eligible | true +| ex_emoji | Ex emoji icon | Ex +| team | Team name that has gym control | Valor +| team_emoji | Emoji of team that has gym control | <:valor:930824> +| cp | Raid boss combat power value | 36150 +| lvl | Raid boss level | 5 +| gender | Pokemon gender | Gender icon +| move_1 | Fast move name | Quick Attack +| move_2 | Charge move name | Thunder +| moveset | Fast & Charge move names | Quick Attack/Thunder +| type_1 | Pokemon type | Dark +| type_2 | Pokemon type | Water +| types | Both Pokemon types (if 2nd exists) | Dark/Fire +| types_emoji | Type Discord emoji | <:00000:types_fire> <00001:types_dark> +| weaknesses | Raid boss weaknesses | Rock, Ground, Dark +| weaknesses_emoji | Emoji(s) of raid boss weaknesses | Rock Ground Dark +| perfect_cp | Perfect IV CP | 1831 +| perfect_cp_boosted | Perfect IV CP if Weather boosted | 2351 +| worst_cp | Worst IV CP | 1530 +| worst_cp_boosted | Worst IV CP if Weather boosted | 1339 +| start_time | Raid start time | 08:32:00 AM +| start_time_24h | Raid start time (24-hour format) | 08:32:00 +| start_time_left | Time left until raid starts | 43m, 33s +| end_time | Raid end time | 09:15:10 AM +| end_time_24h | Raid end time (24-hour format) | 09:15:10 +| end_time_left | Time left until raid ends | 45m, 11s +| time_left | Minutes and seconds of time left until despawn | 29m, 30s +| sponsor_id | Some ID value I have no idea about | 33333 +| partner_id | Some ID value I have no idea about | 44444 +| power_up_level | Gym power level | 1 +| power_up_points | Gym's total power level points | 100 +| power_up_end_time | Gym's power up end time | 10:15:09 PM +| power_up_end_time_24h | Gym's power up end time (24-hour format) | 13:28:30 +| power_up_end_time_left | Gym's power up time left until expires | 14m, 10s +| geofence | Geofence name raid boss is in | City1 +| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St +| lat | Latitude coordinate of Pokemon location | 5.980921321 +| lng | Longitude coordinate of Pokemon location | 3.109283009 +| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 +| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 +| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png +| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 +| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 +| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes +| gym_id | Gym ID | 9382498723849792348798234.16 +| gym_name | Name of Gym | The Amazing Gym +| gym_url | Image url of Gym | https://google.com/imgs/gym.png +| guild_name | Name of Guild | Test Guild +| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png +| date_time | Current date and time | 12/12/2020 12:12:12 PM | br | Newline break | `\r\n` \ No newline at end of file diff --git a/docs/user-guide/dts/weather.md b/docs/dts/weather.md similarity index 94% rename from docs/user-guide/dts/weather.md rename to docs/dts/weather.md index 614c9bbe..f6bb9e03 100644 --- a/docs/user-guide/dts/weather.md +++ b/docs/dts/weather.md @@ -1,36 +1,36 @@ -# Dynamic Text Replacement - -Use any of the following in your alerts file to structure how notifications will look for field research quests. - -### S2Cell Weather - -| Place Holder | Description | Example -|---|---|---| -| id | S2Cell weather id | -9938028402 -| weather_condition | In-game gameplay condition | Cloudy -| has_weather | Returns if there is weather set | true -| weather | In-game gameplay condition | Cloudy -| weather_img_url | Weather type image url | http://google.com/imgs/weather_1.png -| wind_direction | Wind blowing direction | true -| wind_level | Wind level | 285 -| rain_level | Raid level | 285 -| cloud_level | Cloud level | 285 -| fog_level | Fog level | 285 -| snow_level | Snow level | 285 -| warn_weather | Warning weather | true -| special_effect_level | Special effect level | 2 -| severity | Weather severity | None/Moderate/Extreme -| geofence | Geofence name weather cell is in | City1 -| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St -| lat | Latitude coordinate of S2Cell weather location | 5.980921321 -| lng | Longitude coordinate of S2Cell weather location | 3.109283009 -| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 -| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 -| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png -| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 -| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 -| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes -| guild_name | Name of Guild | Test Guild -| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png -| date_time | Current date and time | 12/12/2020 12:12:12 PM +# Dynamic Text Replacement + +Use any of the following in your embeds file to structure how notifications will look for field research quests. + +### S2Cell Weather + +| Place Holder | Description | Example +|---|---|---| +| id | S2Cell weather id | -9938028402 +| weather_condition | In-game gameplay condition | Cloudy +| has_weather | Returns if there is weather set | true +| weather | In-game gameplay condition | Cloudy +| weather_img_url | Weather type image url | http://google.com/imgs/weather_1.png +| wind_direction | Wind blowing direction | true +| wind_level | Wind level | 285 +| rain_level | Raid level | 285 +| cloud_level | Cloud level | 285 +| fog_level | Fog level | 285 +| snow_level | Snow level | 285 +| warn_weather | Warning weather | true +| special_effect_level | Special effect level | 2 +| severity | Weather severity | None/Moderate/Extreme +| geofence | Geofence name weather cell is in | City1 +| address | Google Maps or OSM Nominatim address from geocoordinates | 123 Fake St +| lat | Latitude coordinate of S2Cell weather location | 5.980921321 +| lng | Longitude coordinate of S2Cell weather location | 3.109283009 +| lat_5 | Latitude coordinate shortend to 5th precision | 5.98092 +| lng_5 | Longitude coordinate shortend to 5th precision | 3.10928 +| tilemaps_url | Static tile map url | http://tiles.example.com/static/pokemon-1.png +| gmaps_url | Google maps location url | https://maps.google.com/maps?q=5.980921321,3.109283009 +| applemaps_url | Apple maps location url | https://maps.apple.com/maps?daddr=5.980921321,3.109283009 +| wazemaps_url | Waze maps location url | https://www.waze.com/ul?ll=5.980921321,3.109283009&navigate=yes +| guild_name | Name of Guild | Test Guild +| guild_img_url | Icon image url of Guild | https://discordapp.com/image1.png +| date_time | Current date and time | 12/12/2020 12:12:12 PM | br | Newline break | `\r\n` \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 90767dfe..a3adcc6d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,65 +1,133 @@ +[![Build](https://github.com/versx/WhMgr/workflows/.NET/badge.svg)](https://github.com/versx/WhMgr/actions) +[![Documentation Status](https://readthedocs.org/projects/whmgr/badge/?version=latest)](https://whmgr.rtfd.io) +[![GitHub Release](https://img.shields.io/github/release/versx/WhMgr.svg)](https://github.com/versx/WhMgr/releases/) +[![GitHub Contributors](https://img.shields.io/github/contributors/versx/WhMgr.svg)](https://github.com/versx/WhMgr/graphs/contributors/) +[![Discord](https://img.shields.io/discord/552003258000998401.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/zZ9h9Xa) + # Welcome to Webhook Manager -Works with the following backends: +**PokeAlarm, PoracleJS, WDR, Novabot, etc alternative.** +Works with the following backends: - [RealDeviceMap](https://github.com/123FLO321/RealDeviceMap) - [Chuck](https://github.com/WatWowMap/Chuck) - [ChuckDeviceController](https://github.com/versx/ChuckDeviceController) -Made in C#, runs on .NET Core CLR. Cross platform compatibility, can run on Windows, macOS, and Linux operating systems. -Sends Discord notifications based on pre-defined filters for Pokemon, raids, raid eggs, field research quests, Team Rocket invasions, gym team changes, and weather. Also supports Discord user's subscribing to Pokemon, raid, quest, Team Rocket invasion, and Pokestop lure notifications via direct messages. +### Description +Developed in C#, runs on .NET 5.0 ASP.NET CoreCLR utilizing EntityFramework Core. Cross platform compatibility with Windows, macOS, and Linux operating systems. + +Sends Discord notifications based on pre-defined filters for Pokemon, raids, raid eggs, field research quests, Team Rocket invasions, Pokestop lures, gym team changes, and weather changes. It also supports Discord users subscribing to Pokemon, PvP, raid, quest, gym, Team Rocket invasion, and Pokestop lure notifications via direct messages. -## Features +### Features - Supports multiple Discord servers. -- Discord channel alarm reports for Pokemon, raids, eggs, quests, lures, invasions, gym team changes, and weather. -- Per user custom Discord notifications for Pokemon, raids, quests, invasions, and lures. -- User interface to configure Discord notifications with ease (as well as Discord commands). [WhMgr-UI](https://github.com/versx/WhMgr-UI) -- Subscription notifications based on pre-defined distance. -- Customizable alert messages with dynamic text replacement. +- Discord channel alarm reports for Pokemon, raids, eggs, quests, lures, invasions, gym team changes, and weather changes. +- Built-in Admin Dashboard to configure and manage configuration files. +- Webhook and subscription queue system, all outgoing messages are queued and fired off in groups for efficiency. +- If an outgoing message is rate limited, it is backlogged and awaited the rate limit time then requeued. +- Per user custom Discord notifications for Pokemon, raids, quests, invasions, lures, and gyms. +- User interface to configure custom Discord subscription notifications with ease. [WhMgr-UI](https://github.com/versx/WhMgr-UI) +- Subscription notifications based on pre-defined distance and geofence areas. +- Customizable alert messages with dynamic text replacement/substitution. - Support for multiple cities/areas using geofences per server. -- Daily shiny stats reporting. -- Automatic quest message purge at midnight. -- Support for Donors/Supporters only notifications. -- Direct messages of Pokemon notifications based on city roles assigned. -- Pokemon and Raid subscription notifications based on specific forms. -- Custom prefix support as well as mentionable user support for commands. +- Daily shiny and IV stats reporting. +- Automatic quest message purge at midnight based on timezone. +- Support for Subscriber only custom notifications. +- Pokemon, PvP, and Raid subscription notifications based on specific forms or costumes. +- Custom prefix support as well as mentionable bot user string for commands. - Raid subscription notifications for specific gyms. - Twilio text message alerts for ultra rare Pokemon. - Custom image support for Discord alarm reports. - Custom icon style selection for Discord user notifications. - External emoji server support. -- Custom static map format support. -- Support for language translation. +- Custom static map format support, including pokestop and gym marker placements. +- Support for language translation per instance (per server planned). - Multi threaded, low processing consumption. -- [I.C.O.N.S.](https://github.com/Mygod/pokemon-icon-postprocessor) standard image support. +- [UIcons](https://github.com/uicons/uicons) standard image support. - Lots more... -## Direct Message Notification Filters -- Pokemon ID -- Pokemon Form -- Pokemon IV -- Pokemon Level -- List of Pokemon Attack/Defense/Stamina values -- Pokemon Gender -- Raid Boss -- City -- Gym Name -- Quest Reward -- Invasion Grunt Type -- Pokestop Lure Type -- Distance (meters) - -## Frameworks and Libraries -- .NET Core v2.1.803 -- DSharpPlus v3.2.3 -- DSharpPlus.CommandsNext v3.2.3 -- DSharpPlus.Interactivity v3.2.3 -- Microsoft.Win32.SystemEvents v4.7.0 -- Newtonsoft.Json v12.0.3 -- ServiceStack.OrmLite.MySql v5.8.0 -- Stripe.net v37.14.0 -- Twilio v5.44.0 - - -**[Click here](user-guide/config) to get started!** \ No newline at end of file +### Subscription Notification Filters + +- Pokemon + o Pokemon IDs + o Pokemon Forms + - Pokemon Minimum CP + o Pokemon Minimum IV Percentage + o Pokemon Minimum Level + o Pokemon Maximum Level + o List of Pokemon Attack/Defense/Stamina values + o Pokemon Gender + o Pokemon Size + o Custom Location Distance (meters) + o City + +- Player vs Player (PvP) + o Pokemon IDs + o Pokemon Forms + o PvP League + o Pokemon Gender + o Minimum Rank + o Minimum Stat Product Percentage + o Custom Location Distance (meters) + o City + +- Raids + o Raid Boss IDs + o Raid Boss Forms + o Is EX Eligible + o Custom Location Distance (meters) + o City + +- Gyms + o Gym Name + o Raid Boss IDs + o Minimum Raid Level + o Maximum Raid Level + o Is EX Eligible + o Custom Location Distance (meters) + +- Quests + o Pokestop Name + o Quest Reward Name + o Custom Location Distance (meters) + o City + +- Invasions + o Pokestop Name + o Invasion Grunt Type IDs + o Invasion Reward Pokemon IDs + o Custom Location Distance (meters) + o City + +- Lures + o Pokestop Name + o Pokestop Lure Type IDs + o Custom Location Distance (meters) + o City + +### Frameworks and Libraries +- .NET v5.0.404 +- CommandLineParser v2.8.0 +- DSharpPlus v4.1.0 +- DSharpPlus.CommandsNext v4.1.0 +- DSharpPlus.Interactivity v4.1.0 +- GeoTimeZone v4.1.0 +- Handlebars.Net v2.0.10 +- Handlebars.Net.Helpers v2.2.1 +- Microsoft.EntityFrameworkCore v5.0.13 +- Microsoft.EntityFrameworkCore.Design v5.0.13 +- Microsoft.NET.Test.Sdk v17.0 +- Microsoft.VisualStudio.Azure.Containers.Tools.Targets v1.14.0 +- NetTopologySuite v2.4.0 +- NetTopologySuite.Features v2.1.0 +- NetTopologySuite.IO.GeoJSON v2.0.4 +- NUnit v3.13.2 +- NUnit3TestAdapter v4.2.1 +- POGOProtos.Core v2.55.7 +- Pomelo.EntityFrameworkCore.MySql v5.0.3 +- Swashbuckle.AspNetCore v6.2.3 +- System.Runtime.Caching v6.0 +- TimeZoneConverter v5.0 + + +**[Click here](install/getting-started.md) to get started!** \ No newline at end of file diff --git a/docs/install/docker.md b/docs/install/docker.md new file mode 100644 index 00000000..c558c95f --- /dev/null +++ b/docs/install/docker.md @@ -0,0 +1 @@ +# Docker Installation diff --git a/docs/install/getting-started.md b/docs/install/getting-started.md new file mode 100644 index 00000000..b81adf38 --- /dev/null +++ b/docs/install/getting-started.md @@ -0,0 +1,67 @@ +# Getting Started + +### __Installation__ +- [Prerequisites](./prerequisites.md) +- [Install via Docker](./docker.md) + +### __Configuration__ +1. Edit `bin/configs/config.json` either open in Notepad/++ or `vi bin/configs/config.json`. [Config Instructions](../config/config.md) + + - [Create bot token](https://github.com/reactiflux/discord-irc/wiki/Creating-a-discord-bot-&-getting-a-token) + - Input your bot token and config options. + - Fill out the rest of the config options. + +1. Edit `bin/alarms/alarms.json` either open in Notepad/++ or `vi bin/alarms/alarms.json`. + +1. Fill out the alarms file. [Alarm Instructions](../config/alarms.md) + +1. Create directory `bin/geofences` if it doesn't already exist. + +1. Create/copy geofence files to `geofences` folder. [Geofence Instructions](../config/geofences.md) + +1. Add `dotnet` to your environment path if it isn't already (optional): +```sh +export PATH=~/.dotnet/:$PATH +``` + +### __Running__ +To run via command line arguments [click here](../other/commandline.md). + +1. Build executable from root folder: +``` +dotnet build +``` +2. Start Webhook Manager: +``` +dotnet WhMgr.dll +dotnet WhMgr.dll --config test.json --name test +``` +3. User Interface for members to create subscriptions from a website. [WhMgr UI](https://github.com/versx/WhMgr-UI) +4. Optional reverse location lookup with OpenStreetMaps Nominatim or Google Maps, instructions [here](../other/geocoding.md) + +
+ +### __Admin Dashboard__ +Webhook Manager comes with a built-in Admin dashboard to configure and manage all config, discord, filter, geofence, etc files. +Visit the dashboard at https://127.0.0.1:8008/dashboard +
+ +### __Discord Permissions__ +Discord recently enabled a new feature that requires you to enable the Privileged Gateway Intents options in the [Discord Developers Portal](https://discord.com/developers/applications) to access Discord member lists. + +The bot requires the following Discord permissions: + +- Read Messages +- Send Messages +- Manage Messages (Prune quest channels) +- Manage Roles (If cities are enabled) +- Manage Emojis +- Embed Links +- Attach Files (`export` command) +- Use External Emojis + + +### __Notes__ +- If `dotnet` is not in your path, you'll need to use `~/.dotnet/dotnet` instead of just `dotnet` for commands. +- If you ran the original install command as `root`, `dotnet` will be located at `/root/.dotnet/dotnet` and you'll need to either use that for build commands or replace the `~/.dotnet/dotnet` path with it when adding to your path. +- Upon starting, database tables will be automatically created if `subscriptions.enabled` is set to `true`. Emoji icons are also created in the specified `EmojiGuildId` upon connecting to Discord. diff --git a/docs/install/migrate-v4-to-v5.md b/docs/install/migrate-v4-to-v5.md new file mode 100644 index 00000000..76a0a229 --- /dev/null +++ b/docs/install/migrate-v4-to-v5.md @@ -0,0 +1,17 @@ +# Migrating v4 to v5 + +- Copy folders from existing v4 instances `bin` folder to v5 `bin` folder. +- Move config files to `bin/configs` folder. +- Rename `bin/alerts` to `bin/embeds` +- Update existing configs with new format. +- Update existing Discord server configs with new format. +- Run the following to fix renaming of properties for filters and alarms. +``` +sed -i 's/alerts/embeds/g' alarms/*.json +sed -i 's/onlyEx/only_ex/g' filters/*.json +sed -i 's/ignoreMissing/ignore_missing/g' filters/*.json +sed -i 's/isShiny/is_shiny/g' filters/*.json +``` +- Run the `migrate-v4-to-v5.sql` database migration script on your v4 database. + +TODO: Expand on more (config migration, filter migration, etc) \ No newline at end of file diff --git a/docs/install/prerequisites.md b/docs/install/prerequisites.md new file mode 100644 index 00000000..1be45ddc --- /dev/null +++ b/docs/install/prerequisites.md @@ -0,0 +1,33 @@ +# Prerequisites +- Git +- .NET 5 SDK + + +#### __Git__ +Install [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) + +#### __.NET 5 SDK__ +``` +# Download install script +wget https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.sh + +# Make installer executable +chmod +x dotnet-install.sh + +# Install .NET 5.0 SDK +./dotnet-install.sh --version 5.0.404 +``` + +
+ +### __Automated Install Scripts__ +Run the following to install .NET 5 software development kit (SDK), clone respository, and copy default example embeds, filters, geofences, config and alarm files. + +__Linux/macOS__ +``` +wget https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/scripts/install.sh && chmod +x install.sh && ./install.sh && rm install.sh +``` +__Windows__ +``` +bitsadmin /transfer dotnet-install-job /download /priority FOREGROUND https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/scripts/install.bat install.bat | start install.bat +``` \ No newline at end of file diff --git a/docs/updating.md b/docs/install/updating.md similarity index 59% rename from docs/updating.md rename to docs/install/updating.md index daeb62af..91b2b26b 100644 --- a/docs/updating.md +++ b/docs/install/updating.md @@ -1,26 +1,20 @@ -# Updating -The update scripts will pull latest repository changes, build latest WhMgr.dll, and copy latest locale translation and master files. -If you'd like to copy any of the latest example files (alerts, filters, templates, geofences) you can provide a parameter when running the script to include them. - -**All update commands will do at least the following:** -- Pull latest repository changes -- Build latest WhMgr binary/executable -- Copy latest locale translation files to build folder -- Copy masterfile.json and cpMultipliers.json files to build folder - -
- -## Update (Normal) -``` -update.sh -``` - -## Update (Copy example filter and alert files) -``` -update.sh examples -``` - -## Update (Copy geofences from root folder) -``` -update.sh geofences +# Updating +The update scripts will pull latest repository changes, build latest WhMgr.dll, and copy latest locale translation and master files. +If you'd like to copy any of the latest example files (embeds, filters, templates, geofences) you can provide a parameter when running the script to include them. + +**All update commands will do at least the following:** +- Pull latest repository changes +- Build latest WhMgr binary/executable +- Copy masterfile.json and cpMultipliers.json files to build folder + +
+ +### Update (Normal) +``` +./scripts/update.sh +``` + +### Update (Copy example filter and embed files) +``` +./scripts/update.sh examples ``` \ No newline at end of file diff --git a/docs/other/commandline.md b/docs/other/commandline.md index ca14ad78..9b0b02cc 100644 --- a/docs/other/commandline.md +++ b/docs/other/commandline.md @@ -2,8 +2,8 @@ Instead of cloning multiple times in order to run multiple instances you can simply just start it and pass in the specific config to load with. -`name` - Used to prefix the log file name for the instance -`config` - Specify a config to load for the instance +`name` - Used to prefix the log file name for the instance. (optional) +`config` - Specify a config to load for the instance. Example: `dotnet WhMgr.dll --name Test --config test.json` \ No newline at end of file diff --git a/docs/other/dashboard.md b/docs/other/dashboard.md new file mode 100644 index 00000000..9d9ef2e1 --- /dev/null +++ b/docs/other/dashboard.md @@ -0,0 +1,80 @@ +# Admin Dashboard + +Used to configure and manage all configuration files needed to run Webhook Manager. + +Access the dashboard by visiting http://127.0.0.1:8008/dashboard + +## Installation + +From the root of the project folder run the following commands: + +- Copy the Admin Dashboard folder to the `bin` folder +```cp -R src/ClientApp bin/``` +- Change directories to Admin Dashboard folder +```cd bin/ClientApp``` +- Install packages and dependencies +```npm install``` +- Build the Admin Dashboard +```npm build``` +- Copy the example config file +```cp src/config.example.json src/config.json``` +- Edit the config file +```nano src/config.json``` +- Change directories back to the `bin` folder +```cd ..``` +- Run Webhook Manager +```dotnet WhMgr.dll``` (or restart via pm2) + + +## Screenshots + +### Dashboard +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/dashboard.png "Dashboard") + +### Configs +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/configs.png "Configs") + +### Edit Config +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/config-edit.png "Edit Config") + +### Discords +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/discords.png "Discords") + +### Edit Discord +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/discord-edit.png "Edit Discord") + +### Alarms +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/alarms.png "Configs") + +### Edit Alarm +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/alarm-edit.png "Edit Alarm") + +### Filters +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/filters.png "Filters") + +### Edit Filter +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/filter-edit.png "Edit Filter") + +### Embeds +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/embeds.png "Embeds") + +### New Embed +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/embed-new.png "New Embed") + +### Edit Embed +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/embed-edit.png "Edit Embed") + +### Geofences +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/geofences.png "Geofences") + +### Edit Geofence +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/geofence-edit.png "Edit Geofence") + +### Export Geofence +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/geofence-export.png "Export Geofence") + +### Discord Roles +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/roles.png "Discord Roles") + +### Edit Discord Role +![Dashboard](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/dashboard/role-edit.png "Edit Discord Role") \ No newline at end of file diff --git a/docs/other/defaults.md b/docs/other/defaults.md new file mode 100644 index 00000000..7395282d --- /dev/null +++ b/docs/other/defaults.md @@ -0,0 +1,175 @@ +# Default Options + +Located at `bin/static/data/defaults.json`, it provides default values throughout the application. + +```json +{ + // Default Pokemon subscription options + "min_iv": 0, + "max_iv": 100, + "min_lvl": 0, + "max_lvl": 35, + "min_cp": 0, + "max_cp": 99999, + "pvp": { + // Default PVP filtering values if none provided + "little": { + "min_rank": 1, + "max_rank": 25, + "min_percent": 90, + "max_percent": 100, + "min_league_cp": 450, + "max_league_cp": 500, + }, + "great": { + "min_rank": 1, + "max_rank": 25, + "min_percent": 90, + "max_percent": 100, + "min_league_cp": 1400, + "max_league_cp": 1500, + }, + "ultra": { + "min_rank": 1, + "max_rank": 25, + "min_percent": 90, + "max_percent": 100, + "min_league_cp": 2400, + "max_league_cp": 2500, + } + }, + + // Queue options + // Maximum queue batch size when sending outgoing messages + "max_queue_batch_size": 10, + // Maximum queue size before warning + "max_queue_size_warning": 50, + + // + "all": "All", + + // Emoji schemas + "emoji_schema": "<:{0}:{1}>", + "type_emoji_schema": "<:types_{0}:{1}>", + + // Pokemon generation ranges + "pokemon_generation_ranges": { + "1": { + "gen": 1, + "start": 1, + "end": 151 + }, + "2": { + "gen": 2, + "start": 152, + "end": 251 + }, + "3": { + "gen": 3, + "start": 252, + "end": 385 + }, + "4": { + "gen": 4, + "start": 386, + "end": 493 + }, + "5": { + "gen": 5, + "start": 494, + "end": 649 + }, + "6": { + "gen": 6, + "start": 650, + "end": 721 + }, + "7": { + "gen": 7, + "start": 722, + "end": 809 + }, + "8": { + "gen": 8, + "start": 810, + "end": 890 + } + }, + + // Default emojis list + "emoji_list": [ + // Teams + "neutral", + "valor", + "mystic", + "instinct", + + // Capture rates + "capture_1", + "capture_2", + "capture_3", + + // Weather + "weather_1", // Clear + "weather_2", // Rain + "weather_3", // PartlyCloudy/Overcast + "weather_4", // Cloudy + "weather_5", // Windy + "weather_6", // Snow + "weather_7", // Fog + + // Gyms + "ar", + "ex", + + // Pokemon types + "types_fire", + "types_grass", + "types_ground", + "types_rock", + "types_water", + "types_ghost", + "types_ice", + "types_dragon", + "types_fairy", + "types_fighting", + "types_bug", + "types_psychic", + "types_electric", + "types_steel", + "types_dark", + "types_normal", + "types_flying", + "types_poison", + + // Pvp leagues + "league_great", + "league_ultra", + + // Pokemon genders + "gender_male", + "gender_female", + "gender_less" + ], + + // Weather boost dictionary + "weather_boosts": { + // None + "0": [], + // Clear/Sunny + "1": ["Fire", "Grass", "Ground"], + // Rainy + "2": ["Water", "Electric", "Bug"], + // Partly Cloudy + "3": ["Normal", "Rock"], + // Cloudy / Overcast + "4": ["Fairy", "Fighting", "Poison"], + // Windy + "5": ["Dragon", "Flying", "Psychic"], + // Snow + "6": ["Ice", "Steel"], + // Fog + "7": ["Dark", "Ghost"] + } +} +``` \ No newline at end of file diff --git a/docs/other/geocoding.md b/docs/other/geocoding.md new file mode 100644 index 00000000..2d0dc67e --- /dev/null +++ b/docs/other/geocoding.md @@ -0,0 +1,166 @@ +# Reverse Geocoding + +Convert latitude and longitude coordinates to street addresses. + +Supported Providers: + +- Google Maps +- OpenStreetMaps Nominatim + +## Google Maps Geocoding +### __Setup__ +- [Getting started](https://console.cloud.google.com/google/maps-apis/start) +- [Create an API key](https://developers.google.com/maps/documentation/geocoding/get-api-key) + +### __Available DTS Options__ +```json +{ + "plus_code": { + "compound_code": "2X5Q\u002BXX Yucaipa, CA, USA", + "global_code": "85642X5Q\u002BXX" + }, + "results": [ + { + "address_components": [ + { + "long_name": "13403", + "short_name": "13403", + "types": [ + "street_number" + ] + }, + { + "long_name": "Canyon Crest Road", + "short_name": "Canyon Crest Rd", + "types": [ + "route" + ] + }, + { + "long_name": "Yucaipa", + "short_name": "Yucaipa", + "types": [ + "locality", + "political" + ] + }, + { + "long_name": "San Bernardino County", + "short_name": "San Bernardino County", + "types": [ + "administrative_area_level_2", + "political" + ] + }, + { + "long_name": "California", + "short_name": "CA", + "types": [ + "administrative_area_level_1", + "political" + ] + }, + { + "long_name": "United States", + "short_name": "US", + "types": [ + "country", + "political" + ] + }, + { + "long_name": "92399", + "short_name": "92399", + "types": [ + "postal_code" + ] + }, + { + "long_name": "5823", + "short_name": "5823", + "types": [ + "postal_code_suffix" + ] + } + ], + "formatted_address": "13403 Canyon Crest Rd, Yucaipa, CA 92399, USA", + "geometry": { + "bounds": { + "northeast": { + "lat": 34.0099215, + "lng": -117.0098454 + }, + "southwest": { + "lat": 34.009714, + "lng": -117.010073 + } + }, + "location": { + "lat": 34.0098401, + "lng": -117.0099373 + }, + "location_type": "ROOFTOP", + "viewport": { + "northeast": { + "lat": 34.01116673029149, + "lng": -117.0086102197085 + }, + "southwest": { + "lat": 34.00846876970849, + "lng": -117.0113081802915 + } + } + }, + "place_id": "ChIJGfc7IW1Q24ARogf1hYAtakw", + "types": [ + "premise" + ] + } + ], + "status": "OK" +} +``` + + +## OpenStreetMaps Nominatim +### __Setup__ +- [Self Hosting](https://nominatim.org/release-docs/latest/admin/Installation/) +- [Testing Endpoint](https://nominatim.openstreetmap.org) (never use in production) + +### __Available DTS Options__ +```json +{ + "place_id": 265892028, + "licence": "Data \u00A9 OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright", + "osm_type": "way", + "osm_id": 30602906, + "lat": "34.010038", + "lon": "-117.010446", + "place_rank": 30, + "category": "place", + "type": "house", + "importance": -1.15, + "addresstype": "place", + "name": null, + "display_name": "36398, Canyon Terrace Drive, Yucaipa, San Bernardino County, California, 92399, United States", + "address": { + "house_number": "36398", + "road": "Canyon Terrace Drive", + "neighbourhood": null, + "suburb": null, + "city": "Yucaipa", + "county": "San Bernardino County", + "state": "California", + "postcode": "92399", + "country": "United States", + "country_code": "us" + }, + "boundingbox": [ + "34.009988", + "34.010088", + "-117.010496", + "-117.010396" + ] +} + +``` \ No newline at end of file diff --git a/docs/other/healthchecks.md b/docs/other/healthchecks.md new file mode 100644 index 00000000..bd24dd0e --- /dev/null +++ b/docs/other/healthchecks.md @@ -0,0 +1,61 @@ +# Health Checks UI & API + +Application health checks user interface and API. + +**Available Endpoints**: + +- http://ip:port/health +- http://ip:port/health-ui + +### Health Checks API Example +```json +{ + "status": "Healthy", + "totalDuration": "00:00:00.0283632", + "entries": { + "Subscriptions Database": { + "data": {}, + "duration": "00:00:00.0082672", + "status": "Healthy", + "tags": [] + }, + "Scanner Database": { + "data": {}, + "duration": "00:00:00.0092902", + "status": "Healthy", + "tags": [] + }, + "Nests Database": { + "data": {}, + "duration": "00:00:00.0077391", + "status": "Healthy", + "tags": [] + }, + "Process": { + "data": {}, + "duration": "00:00:00.0132519", + "status": "Healthy", + "tags": [] + }, + "Allocated Memory": { + "data": {}, + "description": "Allocated megabytes in memory: 160 mb", + "duration": "00:00:00.0001172", + "status": "Healthy", + "tags": [] + }, + "Local Disk Storage": { + "data": {}, + "duration": "00:00:00.0010851", + "status": "Healthy", + "tags": [] + }, + "Discord Status": { + "data": {}, + "duration": "00:00:00.0281373", + "status": "Healthy", + "tags": [] + } + } +} +``` \ No newline at end of file diff --git a/docs/other/pm2.md b/docs/other/pm2.md new file mode 100644 index 00000000..664142e7 --- /dev/null +++ b/docs/other/pm2.md @@ -0,0 +1,37 @@ +# PM2 Configuration + +**Install PM2** +https://pm2.keymetrics.io/docs/usage/quick-start/#installation + +**Create PM2 Config** +Create `ecosystem.config.js` file with below example file. (can be named anything) + +**Run** +Start with `pm2 start ecosystem.config.js` + + +Example PM2 ecosystem configuration file: +```js +module.exports = { + apps: [ + { + name: "WhMgr1", + script: "WhMgr.dll", + args: "--name Test --config config.test.json", + watch: true, + cwd: "/home/user/whmgr/bin", + interpreter: "dotnet", + max_memory_restart: "2G", + autorestart: true, + instances: 1, + exec_mode: "fork" + }, + { + ... + } + ] +}; +``` + +**PM2 Auto Startup Instructions** +https://pm2.keymetrics.io/docs/usage/startup/ \ No newline at end of file diff --git a/docs/other/staticmaps.md b/docs/other/staticmaps.md new file mode 100644 index 00000000..efffc2bd --- /dev/null +++ b/docs/other/staticmaps.md @@ -0,0 +1 @@ +# Static Maps Generator diff --git a/docs/requirements.txt b/docs/requirements.txt index 5570e294..d3c01542 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1 +1,2 @@ -mkdocs-bootswatch==1.0 \ No newline at end of file +mkdocs-bootswatch==1.0 +mkdocs>=1.2.3 # not directly required, pinned by Snyk to avoid a vulnerability \ No newline at end of file diff --git a/docs/screenshots.md b/docs/screenshots.md index 3de4051c..a0935642 100644 --- a/docs/screenshots.md +++ b/docs/screenshots.md @@ -1,38 +1,41 @@ # Screenshots -*All examples are completely customizable using Dynamic Text Replacement/Substitution* +*All examples are completely customizable using [Dynamic Text Replacement/Substitution](dts/index.md)* ## Pokemon Notifications -![Pokemon Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images/pkmn.png "Pokemon Notifications") +![Pokemon Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/pkmn.png "Pokemon Notifications") ## Pokemon PVP Notifications -![Pokemon Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images/pvp.png "Pokemon PVP Notifications") +![Pokemon Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/pvp.png "Pokemon PVP Notifications") -## Raid Notifications -![Raid Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images/raids.png "Raid Notifications") +## Raid Boss Notifications +![Raid Boss Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/raids.png "Raid Boss Notifications") ## Raid Egg Notifications -![Egg Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images/eggs.png "Egg Notifications") +![Egg Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/eggs.png "Egg Notifications") ## Quest Notifications -![Quest Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images/quests.png "Quest Notifications") +![Quest Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/quests.png "Quest Notifications") ## Lure Notifications -![Lure Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images/lure.png "Lure Notifications") +![Lure Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/lure.png "Lure Notifications") + +## Rainy Lure Notifications +![Lure (Rainy) Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/lures_rainy.png "Lure (Rainy) Notifications") ## Glacial Lure Notifications -![Lure (Glacial) Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images/lure_glacial.png "Lure (Glacial) Notifications") +![Lure (Glacial) Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/lure_glacial.png "Lure (Glacial) Notifications") ## Mossy Lure Notifications -![Lure (Mossy) Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images//lure_mossy.png "Lure (Mossy) Notifications") +![Lure (Mossy) Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images//lure_mossy.png "Lure (Mossy) Notifications") ## Magnetic Lure Notifications -![Lure (Magnetic) Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images/lure_magnetic.png "Lure (Magnetic) Notifications") +![Lure (Magnetic) Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/lure_magnetic.png "Lure (Magnetic) Notifications") ## Gym Team Takeover Notifications -![Gym Team Takeover Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images/gyms.png "Gym Team Takeover Notifications") +![Gym Team Takeover Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/gyms.png "Gym Team Takeover Notifications") ## Team Rocket Invasion Notifications -![Team Rocket Invasion Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images/invasions.png "Team Rocket Invasion Notifications") +![Team Rocket Invasion Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/invasions.png "Team Rocket Invasion Notifications") ## Weather Notifications -![Weather Notifications](https://raw.githubusercontent.com/versx/WhMgr/master/images/weather.png "Weather Notifications") \ No newline at end of file +![Weather Notifications](https://raw.githubusercontent.com/versx/WhMgr/v5-rewrite/.github/images/weather.png "Weather Notifications") \ No newline at end of file diff --git a/docs/terminology.md b/docs/terminology.md index 4a70e32f..5177a7bf 100644 --- a/docs/terminology.md +++ b/docs/terminology.md @@ -1,5 +1,5 @@ # Terminology -- **Alerts:** Discord message structures for channel messages or direct message subscriptions +- **Embeds:** Discord message structures for channel messages or direct message subscriptions - **Subscriptions:** Custom user defined Pokemon, Raid, Quest, Invasion, or Gym direct messages subscriptions - **Geofences:** Area restrictions per Alarm - **Alarms:** Discord channel messages \ No newline at end of file diff --git a/docs/user-guide/alerts.md b/docs/user-guide/alerts.md deleted file mode 100644 index ef748a49..00000000 --- a/docs/user-guide/alerts.md +++ /dev/null @@ -1,171 +0,0 @@ -# Alerts -Alerts depict how Discord embed messages are formatted. Customization is endless. - -`` - Replacement placeholders. -`<#condition>` - Conditional replacements. - -**Replacement Placeholders** -Placeholders are used to build a template (similar to [mustache](https://mustache.github.io/)) which are replaced with real values from incoming webhooks and used to send outgoing Discord messages. - -**Conditional replacements** -Enable the ability to only show something if the conditional value evaluates to `true`. A prime example would be if the Pokemon is near a Pokestop, to include the Pokestop name and image. Below is an example of it: -``` -<#near_pokestop>**Near Pokestop:** []()
-``` - -`` - Replaced by the name of the nearby Pokestop. -`` - Replaced by the image url of the nearby Pokestop. -`
` - Replaced with a new line break to preserve readability and formatting. - -For a list of available dynamic text substitution/replacement options check out the [DTS](user-guide/dts/) pages. - - -## Alert Message Structures -```js -{ - "pokemon": { - "avatarUrl": "", - "content": "
(//) L
**Despawn:** ( left)
**Details:** CP: IV: LV:
**Size:** | <#has_weather> | <#is_weather_boosted> (Boosted)
**Moveset:**
<#near_pokestop>**Near Pokestop:** []()
<#is_ditto>**Catch Pokemon:**
<#has_capture_rates> % % %
<#is_event>Go Fest Spawn
<#is_pvp>
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": "", - "url": "", - "username": " ", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "pokemonMissingStats": { - "avatarUrl": "", - "content": "
**Despawn:** ( left)
**Types:**
<#near_pokestop>**Near Pokestop:** []()
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": "", - "url": "", - "username": " ", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "gyms": { - "avatarUrl": "", - "content": "<#team_changed>Gym changed from to
<#in_battle>Gym is under attack!
**Slots Available:**
<#is_ex> Gym!**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "raids": { - "avatarUrl": "", - "content": " Raid Ends: ( left)
**Perfect CP:** / :white_sun_rain_cloud:
**Worst CP:** / :white_sun_rain_cloud:
**Types:** | **Level:** | **Team:**
**Moveset:**
**Weaknesses:**
<#is_ex> Gym!
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": " Raid", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "eggs": { - "avatarUrl": "", - "content": "Hatches: ()
**Ends:** ( left)
**Team:**
<#is_ex> Gym!
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "Level Egg", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "pokestops": { - "avatarUrl": "", - "content": "<#has_lure>**Lure Expires** ( left)
**Lure Type:**
<#has_invasion>**Expires:** ( left)
**Type:** | **Gender:**

**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "quests": { - "avatarUrl": "", - "content": "**Quest:**
<#has_quest_conditions>**Condition(s):**
**Reward:**
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "lures": { - "avatarUrl": "", - "content": "<#has_lure>**Lure Expires:** ( left)
**Lure Type:**
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "invasions": { - "avatarUrl": "", - "content": "<#has_invasion>**Expires:** ( left)
**Type:** | **Gender:**

**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "nests": { - "avatarUrl": "", - "content": "**Pokemon:**
**Average Spawns:** /h | **Types:**
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "weather": { - "avatarUrl": "", - "content": "**Weather Condition:**
**Weather Cell ID:** #", - "iconUrl": "", - "title": "", - "url": "", - "username": "Weather", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - } -} - -``` \ No newline at end of file diff --git a/docs/user-guide/config.md b/docs/user-guide/config.md deleted file mode 100644 index 238882fb..00000000 --- a/docs/user-guide/config.md +++ /dev/null @@ -1,222 +0,0 @@ -# Configuration - -At a minimum you'll want to make sure your have your webhook listening port set as well as one Discord server added to the `servers` property. - -## Main Properties -| Key | Example | Description | -|---|---|---| -| host | `10.0.0.2` | Listening interface to receive webhook data. | -| port | `8008` | Listening port used to receive incoming json webhooks. | -| locale | `en` | Two letter country code used to translate bot messages. | -| shortUrlApiUrl | `http://site.com/api.php?signature=` | Yourls.org URL shortener endpoint | -| stripeApiKey | `rk_32uo3j2lkjlkj3l2kjdlk2j3ldj2` | Stripe API key used with `expire` command to let users check their subscription expiration date. | -| eventPokemonIds | `[123,43,483]` | List of Pokemon ID(s) to treat as event Pokemon. Event Pokemon are not reported to any channels or DM unless 90% or higher IV. | -| iconStyles | `{ "default": "icon_path", ... }` | List key value pairs demonstrating a list of icon styles to choose from. | -| database.main | `{}` | Main database used to save subscriptions. | -| database.scanner | `{}` | RDM scanner database used to retrieve pokestops table. | -| database.nests | `{}` | PMSF nests database used for reporting nests. | -| gmapsKey | `testkeyljdsflkjsdflkj=` | Needed if you want to use the address lookup DTS. | -| despawnTimeMinimumMinutes | `5` | Minimum despawn time in minutes a Pokemon must have in order to send the alarm (default: 5) | -| reloadSubscriptionChangesMinutes | `1` | Reload subscriptions every minute to sync with WhMgr-UI changes (default: 1) | -| maxNotificationsPerMinute | `10` | Maximum amount of notifications a user can receive per minute before being rate limited | -| debug | `false` | Log webhook payloads to a file for debugging (do not enable unless you're having issues receiving data | -| logLevel | `Info` | Only show logs with higher or equal priority levels (Trace, Debug, Info, Warning, Error, Fatal, None) | - -## Database `database` -| Key | Example | Description | -|---|---|---| -| host | `127.0.0.1` | Hostname or IP address of database server. | -| port | `3306` | Listening port for database server. | -| username | `root` | Database username to use when authenticating. | -| password | `password` | Database password to use when authenticating. | -| database | `rdmdb` | Database name | - -## Discord Server Specific `servers` -| Key | Example | Description | -|---|---|---| -| commandPrefix | `!` | Prefix for all commands, leave blank to use bot mention string. | -| guildId | `4032948092834` | Discord guild ID the bot will be connecting to. | -| emojiGuildId | `3984729874298` | Discord guild ID to use emojis from. (Can be same as `guildId`) | -| ownerId | `8184229834297` | Bot owner's unique Discord ID. | -| donorRoleIds | `[00000001,00000002,...]` | List of donor/support role IDs to use with permissions. | -| moderatorRoleIds | `[09020021,09029302,...]` | List of Discord role IDs for moderators. | -| token | `lkj2l8sl98o9slil.o32oumjj3lkjlkA` | Bot Discord authentication token. | -| alarms | `alarms-test.json` | File path to alarms file that'll be used with the Discord server. | -| dmAlertsFile | `alerts-dm.json` | File path to alerts file that'll be used for DMM subscription notifications. | -| enableSubscriptions | `true` | Allow users to subscribe to specific Pokemon, Raids, Quests, and Invasions with their own pre-defined filters.| -| enableCities | `true` | Enable the city roles used to differentiate between the different areas. | -| cityRoles | `["City1","City2"]` | List of city role names users will be able to subscribe to. | -| citiesRequireSupporterRole | `true` | If `true`, any city role assignment command will require the user have a donor/supporter role. | -| pruneQuestChannels | `true` | If `true`, prune designated quest channels every day at midnight. | -| questChannelIds | `[098309389,987398790,...]` | | -| nestsChannelId | `1347092710` | | -| shinyStats.enabled | `true` | If `true`, enable shiny stats posting. | -| shinyStats.clearMessages | `false` | Clear previous shiny stat messages. | -| shinyStats.channelId | `1347092710` | Channel ID to post shiny stats. | -| iconStyle | `Default` | Icon style to use for Pokemon, Raid, Quest, and Invasion images. | -| botChannelIds | `[098309389,987398790,...]` | Prevents the bot from executing commands outside of listed channels. | -| status | `Finding Pokemon...` | Custom Discord bot status, leave blank for bot version string | - -## Urls `urls` -| Key | Example | Description | -|---|---|---| -| staticMap | `https://tiles.com:8080` | Static map tile server endpoint. | -| scannerMap | `https://map.com/@/{0}/{1}/15` | Scanner map url for embed DTS `scanmaps_url`. | - -## StaticMaps `staticMaps` -| Key | Example | Description | -|---|---|---| -| pokemon | `pokemon.example` | Name of staticmap template used for pokemon messages on tileserver. | -| raids | `raids.example` | Name of staticmap template used for raids messages on tileserver. | -| gyms | `gyms.example` | Name of staticmap template used for gym messages on tileserver. | -| quests | `quests.example` | Name of staticmap template used for quest messages on tileserver. | -| invasions | `invasions.example` | Name of staticmap template used for invasion messages on tileserver. | -| lures | `lures.example` | Name of staticmap template used for lure messages on tileserver. | -| weather | `weather.example` | Name of staticmap template used for weather messages on tileserver. | -| nests | `nests.example` | Name of staticmap template used for nest messages on tileserver. | - -## Twilio `twilio` -| Key | Example | Description | -|---|---|---| -| enabled | `false` | Determines if text message alerts are enabled | -| accountSid | `ACb9ef2a14fa64...` | Twilio account SID (Get via Twilio dashboard) | -| authToken | `19c2f1c032962f...` | Twilio account auth token (Get via Twilio dashboard) | -| from | `8181234567` | Twilio phone number that will be sending the text message alert | -| userIds | `[092830498234,80928340822]` | List of Discord user ids that can receive text message alerts | -| pokemonIds | `[201,480,481,482,443,633,610]` | List of acceptable Pokemon to receive text message alerts for | -| minIV | `100` | Minimum acceptable IV value for Pokemon if not ultra rare (Unown, Lake Trio) | - -## Example -```js -{ - // Http listening interface for raw webhook data. - "host": "10.0.0.10", - // Http listener port for raw webhook data. - "port": 8008, - // Locale language translation - "locale": "en", - // ShortURL API (yourls.org API, i.e. `https://domain.com/yourls-api.php?signature=XXXXXX`) - "shortUrlApiUrl": "", - // Stripe API key (Stripe production API key, i.e. rk_3824802934 - "stripeApiKey": "" - // List of Discord servers to connect and post webhook messages to. - "servers": { - // Discord server #1 guild ID (replace `000000000000000001` with guild id of server) - "000000000000000001": "discord1.json", - // 2nd Discord server section (if applicable) - "000000000000000002": "discord2.json" - }, - // Database configuration - "database": { - // Database to store notification subscriptions. - "main": { - // Database hostname or IP address. - "host": "127.0.0.1", - // Database connection port. - "port": 3306, - // Database user account name. - "username": "root", - // Database user account password. - "password": "password", - // Brock database name. - "database": "brock3" - }, - // Scanner database config - "scanner": { - // Database hostname or IP address. - "host": "127.0.0.1", - // Database connection port. - "port": 3306, - // Database user account name. - "username": "root", - // Database user account password. - "password": "password", - // RDM database name. - "database": "rdmdb" - }, - // PMSF Nests database config - "nests": { - // Database hostname or IP address. - "host": "127.0.0.1", - // Database connection port. - "port": 3306, - // Database user account name. - "username": "root", - // Database user account password. - "password": "password", - // PMSF nests database name. - "database": "manualdb" - } - }, - // List of Pokemon IDs to treat as event and restrict postings and subscriptions to 90% IV or higher. (Filled in automatically with `event set` command) - "eventPokemonIds": [ - 129, - 456, - 320 - ], - // Minimum IV value for an event Pokemon to have to meet in order to post via Discord channel alarm or direct message subscription. - "eventMinimumIV": "90", - // Image URL config - "urls": { - // Static map tileserver endpoint. - "staticMap": "http://tiles.example.com:8080", - // Scanner map DTS option for embeds as `scanmaps_url` - "scannerMap": "http://map.example.com/@/{0}/{1}/15" - }, - // Available icon styles - "iconStyles": { - "Default": "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/ICONS/ICONS/", - "Shuffle": "https://raw.githubusercontent.com/nileplumb/PkmnShuffleMap/master/ICONS_STANDARD/" - }, - // Custom static map template files for each alarm type - "staticMaps": { - // Static map template for Pokemon - "pokemon": "pokemon.example", - // Static map template for Raids and Eggs - "raids": "raids.example", - // Static map template for field research quests - "quests": "quests.example", - // Static map template for Team Rocket invasions - "invasions": "invasions.example", - // Static map template for Pokestop lures - "lures": "lures.example", - // Static map template for Gym team control changes - "gyms": "gyms.example", - // Static map template for nest postings - "nests": "nests.example", - // Static map template for weather changes - "weather": "weather.example" - }, - // Get text message alerts with Twilio.com - "twilio": { - // Determines if text message alerts are enabled - "enabled": false, - // Twilio account SID (Get via Twilio dashboard) - "accountSid": "", - // Twilio account auth token (Get via Twilio dashboard) - "authToken": "", - // Twilio phone number that will be sending the text message alert - "from": "", - // List of Discord user ids that can receive text message alerts - "userIds": [], - // List of Discord roles that can receive text message alerts - "roleIds": [], - // List of acceptable Pokemon to receive text message alerts for - "pokemonIds": [201, 480, 481, 482, 443, 444, 445, 633, 634, 635, 610, 611, 612], - // Minimum acceptable IV value for Pokemon if not ultra rare (Unown, Lake Trio) - "minIV": 100 - }, - // Needed if you want to use the address lookup DTS - "gmapsKey": "", - // Minimum despawn time in minutes a Pokemon must have in order to send the alarm (default: 5 minutes) - "despawnTimeMinimumMinutes": 5, - // Reload subscriptions every minute to sync with WhMgr-UI changes - "reloadSubscriptionChangesMinutes": 1, - // Maximum amount of notifications a user can receive per minute before being rate limited - "maxNotificationsPerMinute": 10, - // Log webhook payloads to a file for debugging (do not enable unless you're having issues receiving data - "debug": false, - // Only show logs with higher or equal priority levels (Trace, Debug, Info, Warning, Error, Fatal, None) - "logLevel": "Trace" -} -``` \ No newline at end of file diff --git a/docs/user-guide/discords.md b/docs/user-guide/discords.md deleted file mode 100644 index dece4811..00000000 --- a/docs/user-guide/discords.md +++ /dev/null @@ -1,136 +0,0 @@ -# Discord Server Configs -Copy your Discord specific configs to the `bin/discords` folder and reference them in the main config under the servers section. - -```json - { - // Bot command prefix, leave blank to use @mention - "commandPrefix": ".", - // Discord Emoji server ID. (Can be same as `guildId`) - "emojiGuildId": 000000000000000001, - // Discord server owner ID. - "ownerId": 000000000000000000, - // Donor/Supporter role ID(s). - "donorRoleIds": [ - 000000000000000000 - ], - // Name of a free role for free weekends etc - "freeRoleName": "", - // Moderator Discord role ID(s). - "moderatorRoleIds": [ - 000000000000000000 - ], - // Discord bot token with user. - "token": "", - // Alarms file path. - "alarms": "alarms.json", - // Geofences related to the Discord guild. **NOT** used for subscriptions. - "geofences": [ - "City1.txt", - "City2.json" - ], - // Custom user subscriptions - "subscriptions": { - // Enable or disable custom direct message notification subscriptions per user. - "enabled": false, - // Maximum amount of Pokemon subscriptions a user can set, set as 0 for no limit. - "maxPokemonSubscriptions": 0, - // Maximum amount of PvP subscriptions a user can set, set as 0 for no limit. - "maxPvPSubscriptions": 0, - // Maximum amount of Raid subscriptions a user can set, set as 0 for no limit. - "maxRaidSubscriptions": 0, - // Maximum amount of Quest subscriptions a user can set, set as 0 for no limit. - "maxQuestSubscriptions": 0, - // Maximum amount of Invasion subscriptions a user can set, set as 0 for no limit. - "maxInvasionSubscriptions": 0, - // Maximum amount of Gym subscriptions a user can set, set as 0 for no limit. - "maxGymSubscriptions": 0, - // Maximum amount of Lure subscriptions a user can set, set as 0 for no limit. - "maxLureSubscriptions": 0 - }, - // Enable city/geofence role assignments. - "enableGeofenceRoles": false, - // Automatically remove any created and assigned city/area/geofence roles when a donor/support role is removed. - "autoRemoveGeofenceRoles": false, - // Assigning city roles requires Donor/Supporter role. - "citiesRequireSupporterRole": true, - // Prune old field research quests at midnight. - "pruneQuestChannels": true, - // Channel ID(s) of quest channels to prune at midnight. - "questChannelIds": [ - 000000000000000000 - ], - // Channel ID to post nests. - "nestsChannelId": 000000000000000000, - // Minimum amount of average spawn count per hour for nest to post - "nestsMinimumPerHour": 2, - // Shiny stats configuration - "shinyStats": { - // Enable shiny stats posting. - "enabled": true, - // Clear previous shiny stat messages. - "clearMessages": false, - // Channel ID to post shiny stats. - "channelId": 000000000000000000 - }, - // Icon style to use. - "iconStyle": "Default", - // Channel ID(s) bot commands can be executed in. - "botChannelIds": [ - 000000000000000000 - ], - // Custom Discord status per server, leave blank or null to use current version. - "status": "", - // Alerts file that will be used for direct message subscription notifications. - "dmAlertsFile": "default.json", - // Discord embed colors - "embedColors": { - // Embed colors for Pokemon embeds - "pokemon": { - // Embed colors for Pokemon with IV embeds - "iv": [ - { "min": 0, "max": 0, "color": "#ffffff" }, - { "min": 1, "max": 89, "color": "#ffff00" }, - { "min": 90, "max": 99, "color": "#ffa500" }, - { "min": 100, "max": 100, "color": "#00ff00" } - ], - // Embed colors for Pokemon with PvP stats embeds - "pvp": [ - { "min": 1, "max": 1, "color": "#000080" }, - { "min": 6, "max": 25, "color": "#800080" }, - { "min": 25, "max": 100, "color": "#aa2299" } - ] - }, - // Embed colors for Raid embeds - "raids": { - "1": "#ff69b4", - "2": "#ff69b4", - "3": "#ffff00", - "4": "#ffff00", - "5": "#800080", - "6": "#a52a2a", - "ex": "#2c2f33" - }, - // Embed colors for different types of Pokestops - "pokestops": { - "quests": "#ffa500", - "lures": { - "normal": "#ff69b4", - "glacial": "#6495ed", - "mossy": "#507d2a", - "magnetic": "#808080" - }, - "invasions": "#ff0000" - }, - // Embed colors for Weather embeds - "weather": { - "clear": "#ffff00", - "cloudy": "#99aab5", - "fog": "#9a9a9a", - "partlyCloudy": "#808080", - "rain": "#0000ff", - "snow": "#ffffff", - "windy": "#800080" - } - } - } -``` \ No newline at end of file diff --git a/docs/user-guide/filters.md b/docs/user-guide/filters.md deleted file mode 100644 index c5354f87..00000000 --- a/docs/user-guide/filters.md +++ /dev/null @@ -1,73 +0,0 @@ -# Filters -Filters allow you to narrow down what is reported. All filters are optional and can be omitted. Plenty of examples in the repository under the [`examples/Filters`](https://github.com/versx/WhMgr/tree/master/examples/filters) directory for all different needs. - -## Converters -- WDR [Filter Converter](https://github.com/versx/WdrFilterConverter) - -## Available Filter Options -```js -{ - "pokemon": - { - "enabled": true, // Filter is enabled - "pokemon": [280,337,374], // List of Pokemon for the filter or empty for all - "min_iv": 0, // Minimum IV of Pokemon to send - "max_iv": 100, // Maximum IV of Pokemon to send - "min_cp": 0, // Minimum CP of Pokemon - "max_cp": 999999, // Maximum CP of Pokemon - "gender": "m", // Only send male (m,f,*) - "size": "Big", // Tiny, Small, Normal, Large, Big - "great_league": true, // Great League - "ultra_league": true, // Ultra League - "min_rank": 1, // Minimum rank of #1 PVP stats - "max_rank": 5, // Maximum rank of #5 PVP stats - "type": "Include", // Include or Exclude the `pokemon` list - "is_event": false, // Only send Pokemon checked with event accounts (GoFest, etc) - "ignoreMissing": true // Ignore Pokemon missing stats - }, - "eggs": - { - "enabled": true, // Filter is enabled - "min_lvl": 1, // Minimum egg level to send - "max_lvl": 6, // Maximum egg level to send - "onlyEx": false, // Only send ex-eligible raids. - "team": "All", // All, Valor, Mystic, Instinct, Neutral - }, - "raids": - { - "enabled": true, // Filter is enabled - "pokemon": [], // Raid bosses to include or none for all. - "min_lvl": 1, // Minimum raid level to send - "max_lvl": 6, // Maximum raid level to send - "type": "Include", // Include or Exclude the `pokemon` list - "onlyEx": false, // Only send ex-eligible raids. - "team": "All", // All, Valor, Mystic, Instinct, Nuetral - "ignoreMissing": true // Ignore raids missing stats - }, - "quests": - { - "enabled": true, // Filter is enabled - "rewards": ["spinda", "nincada"], // Quest reward string (Chansey, stardust, candy, etc.) - "isShiny": false, // Only shiny encounter quests. - "type": "Include" // Include or Exclude the `rewards` list - }, - "pokestops": - { - "enabled": true, // Filter is enabled - "lured": true, // Only send lured pokestops - "lure_types": ["Normal", "Glacial", "Mossy", "Magnetic"], // Only send lures in type list - "invasions": false // Only send Team Rocket invasion pokestops - }, - "gyms": - { - "enabled": true, // Filter is enabled - "underAttack": true, // Only gyms that are under attack - "team": "All" // Team change to notify about (i.e. Neutral/Mystic/Valor/Instinct/All) - }, - "weather": - { - "enabled": true, // Filter is enabled - "types": ["Clear", "Rainy", "PartlyCloudy", "Overcast", "Windy", "Snow", "Fog"] // Only send weather types that are in the list - } -} -``` diff --git a/docs/user-guide/getting-started.md b/docs/user-guide/getting-started.md deleted file mode 100644 index 6cda5e01..00000000 --- a/docs/user-guide/getting-started.md +++ /dev/null @@ -1,69 +0,0 @@ -# Getting Started - -## Installation - -Run the following to install .NET Core runtime, clone respository, and copy example Alerts, Filters, Geofences, config and alarm files. - -**Linux/macOS** -``` -wget https://raw.githubusercontent.com/versx/WhMgr/master/install.sh && chmod +x install.sh && ./install.sh && rm install.sh -``` -**Windows** -``` -bitsadmin /transfer dotnet-install-job /download /priority FOREGROUND https://raw.githubusercontent.com/versx/WhMgr/master/install.bat install.bat | start install.bat -``` - -## Configuration -1.) Edit `config.json` either open in Notepad/++ or `vi config.json`. [Config Instructions](./config.md) - - - [Create bot token](https://github.com/reactiflux/discord-irc/wiki/Creating-a-discord-bot-&-getting-a-token) - - Input your bot token and config options. - - Fill out the rest of the config options. - -2.) Edit `alarms/alarms.json` either open in Notepad/++ or `vi alarms/alarms.json`. - -3.) Fill out the alarms file. [Alarm Instructions](./alarms.md) - -4.) Create directory `bin/geofences` if it doesn't already exist. - -5.) Create/copy geofence files to `geofences` folder. [Geofence Instructions](./geofences.md) - -6.) Add `dotnet` to your environment path if it isn't already (optional): -```sh -export PATH=~/.dotnet/:$PATH -``` - -## Running -To run via command line arguments [click here](../other/commandline.md). - -1.) Build executable: -``` -dotnet build ../../.. -``` -2.) Start WhMgr: -``` -dotnet WhMgr.dll -``` -3.) Optional User Interface for members to create subscriptions from a website instead of using Discord commands. [WhMgr UI](https://github.com/versx/WhMgr-UI) -4.) Optional reverse location lookup with OpenStreetMaps Nominatim instead of Google Maps, install instructions [here](https://nominatim.org/release-docs/develop/admin/Installation/) - - -## Discord Permissions -Discord recently enabled a new feature that requires you to enable the Global Intents options in the [Discord Developers Portal](https://discord.com/developers) to access Discord member lists. - -The bot needs the following Discord permissions: - -- Read Messages -- Send Messages -- Manage Messages (Prune quest channels) -- Manage Roles (If cities are enabled) -- Manage Emojis -- Embed Links -- Attach Files (`export` command) -- Use External Emojis - - -## Notes -- If `dotnet` is not in your path, you'll need to use `~/.dotnet/dotnet` instead of just `dotnet` for commands. -- If you ran the original install command as `root`, `dotnet` will be located at `/root/.dotnet/dotnet` and you'll need to either use that for build commands or replace the `~/.dotnet/dotnet` path with it when adding to your path. -- Upon starting, database tables will be automatically created if `subscriptions.enabled` is set to `true`. Emoji icons are also created in the specified `EmojiGuildId` upon connecting to Discord. diff --git a/ecosystem.config.js b/ecosystem.config.js index 70fef8b3..0d75bfb0 100644 --- a/ecosystem.config.js +++ b/ecosystem.config.js @@ -2,6 +2,7 @@ module.exports = { apps: [{ name: "WhMgr", script: "WhMgr.dll", + args: "--config config.json --name test", watch: true, cwd: "/home/user/WhMgr/bin", interpreter: "dotnet", diff --git a/examples/alarms/alarms.example.json b/examples/alarms/alarms.example.json index 5efabcda..27053cb3 100644 --- a/examples/alarms/alarms.example.json +++ b/examples/alarms/alarms.example.json @@ -1,179 +1,179 @@ -{ - "enablePokemon": true, //Enable or disable Pokemon alarms globally - "enableRaids": true, //Enable or disable Raid alarms globally - "enableQuests": true, //Enable or disable Quest alarms globally - "enablePokestops": true, //Enable or disable Pokestop alarms globally - "enableGyms": true, //Enable or disable Gym alarms globally - "enableWeather": true, //Enable or disable Weather alarms globally - "alarms": - [ - { - "name": "City1-Rare", - "description": " <@&12331131> L ", - "alerts": "default.json", - "filters": "all.json", - "geofences":["City1.txt", "City2.txt"], - "webhook": "" - }, - { - "name": "City1-100iv", - "description": "", - "alerts": "default.json", - "filters": "100iv.json", - "geofences":["City1.txt", "City2.txt"], - "webhook": "" - }, - { - "name": "City1-Raids", - "description": "", - "alerts": "default.json", - "filters": "raids.json", - "geofences":["City1.txt", "City2.txt"], - "webhook": "" - }, - { - "name": "City1-LegendaryRaids", - "description": "", - "alerts": "default.json", - "filters": "legendary_raids.json", - "geofences":["City1.txt", "City2.txt"], - "webhook": "" - }, - { - "name": "City1-ExRaids", - "description": "", - "alerts": "default.json", - "filters": "ex_raids.json", - "geofences":["City1.txt", "City2.txt"], - "webhook": "" - }, - { - "name": "City1-Quests", - "description": "", - "alerts": "default.json", - "filters": "quests.json", - "geofences":["City1.txt", "City2.txt"], - "webhook": "" - }, - { - "name": "City1-Lures", - "description": "", - "alerts": "default.json", - "filters": "lures.json", - "geofences":["City1.txt", "City2.txt"], - "webhook": "" - }, - { - "name": "City1-Invasions", - "description": "", - "alerts": "default.json", - "filters": "invasions.json", - "geofences":["City1.txt", "City2.txt"], - "webhook": "" - }, - { - "name": "City1-Gyms", - "description": "", - "alerts": "default.json", - "filters": "gyms.json", - "geofences":["City1.txt", "City2.txt"], - "webhook": "" - }, - { - "name": "City1-Weather", - "description": "", - "alerts": "default.json", - "filters": "weather.json", - "geofences":["City1.txt", "City2.txt"], - "webhook": "" - }, - { - "name": "City2-Rare", - "description": "", - "alerts": "default.json", - "filters": "all.json", - "geofences": ["City2.txt"], - "webhook": "" - }, - { - "name": "City2-100iv", - "description": "", - "alerts": "default.json", - "filters": "100iv.json", - "geofences": ["City2.txt"], - "webhook": "" - }, - { - "name": "City2-Raids", - "description": "", - "alerts": "default.json", - "filters": "raids.json", - "geofences": ["City2.txt"], - "webhook": "" - }, - { - "name": "City2-LegendaryRaids", - "description": "", - "alerts": "default.json", - "filters": "legendary_raids.json", - "geofences": ["City2.txt"], - "webhook": "" - }, - { - "name": "City2-ExRaids", - "description": "", - "alerts": "default.json", - "filters": "ex_raids.json", - "geofences": ["City2.txt"], - "webhook": "" - }, - { - "name": "City2-Quests", - "description": "", - "alerts": "default.json", - "filters": "quests.json", - "geofences": ["City2.txt"], - "webhook": "" - }, - { - "name": "City2-Lures", - "description": "", - "alerts": "default.json", - "filters": "lures.json", - "geofences": ["City2.txt"], - "webhook": "" - }, - { - "name": "City2-Invasions", - "description": "", - "alerts": "default.json", - "filters": "invasions.json", - "geofences": ["City2.txt"], - "webhook": "" - }, - { - "name": "City2-Gyms", - "description": "", - "alerts": "default.json", - "filters": "gyms.json", - "geofences": ["City2.txt"], - "webhook": "" - }, - { - "name": "Absol-Quests", - "description": "", - "alerts": "default.json", - "filters": "quests_absol.json", - "geofences": ["City2.txt"], - "webhook": "" - }, - { - "name": "City2-Weather", - "description": "", - "alerts": "default.json", - "filters": "weather.json", - "geofences": ["City2.txt"], - "webhook": "" - } - ] -} +{ + "enablePokemon": true, //Enable or disable Pokemon alarm filters globally + "enableRaids": true, //Enable or disable Raid alarm filters globally + "enableQuests": true, //Enable or disable Quest alarm filters globally + "enablePokestops": true, //Enable or disable Pokestop alarm filters globally + "enableInvasions": true, //Enable or disable Invasion alarm filters globally + "enableGyms": true, //Enable or disable Gym alarm filters globally + "enableWeather": true, //Enable or disable Weather alarm filters globally + "alarms": [ + { + "name": "City1-Rare", + "description": " <@&12331131> {{iv}} L{{lvl}} {{geofence}}", + "embeds": "default.json", + "filters": "all.json", + "geofences": [ "City1.txt", "City2.txt" ], + "webhook": "" + }, + { + "name": "City1-100iv", + "description": "", + "embeds": "default.json", + "filters": "100iv.json", + "geofences": [ "City1.txt", "City2.txt" ], + "webhook": "" + }, + { + "name": "City1-Raids", + "description": "", + "embeds": "default.json", + "filters": "raids.json", + "geofences": [ "City1.txt", "City2.txt" ], + "webhook": "" + }, + { + "name": "City1-LegendaryRaids", + "description": "", + "embeds": "default.json", + "filters": "legendary_raids.json", + "geofences": [ "City1.txt", "City2.txt" ], + "webhook": "" + }, + { + "name": "City1-ExRaids", + "description": "", + "embeds": "default.json", + "filters": "ex_raids.json", + "geofences": [ "City1.txt", "City2.txt" ], + "webhook": "" + }, + { + "name": "City1-Quests", + "description": "", + "embeds": "default.json", + "filters": "quests.json", + "geofences": [ "City1.txt", "City2.txt" ], + "webhook": "" + }, + { + "name": "City1-Lures", + "description": "", + "embeds": "default.json", + "filters": "lures.json", + "geofences": [ "City1.txt", "City2.txt" ], + "webhook": "" + }, + { + "name": "City1-Invasions", + "description": "", + "embeds": "default.json", + "filters": "invasions.json", + "geofences": [ "City1.txt", "City2.txt" ], + "webhook": "" + }, + { + "name": "City1-Gyms", + "description": "", + "embeds": "default.json", + "filters": "gyms.json", + "geofences": [ "City1.txt", "City2.txt" ], + "webhook": "" + }, + { + "name": "City1-Weather", + "description": "", + "embeds": "default.json", + "filters": "weather.json", + "geofences": [ "City1.txt", "City2.txt" ], + "webhook": "" + }, + { + "name": "City2-Rare", + "description": "", + "embeds": "default.json", + "filters": "all.json", + "geofences": [ "City2.txt" ], + "webhook": "" + }, + { + "name": "City2-100iv", + "description": "", + "embeds": "default.json", + "filters": "100iv.json", + "geofences": [ "City2.txt" ], + "webhook": "" + }, + { + "name": "City2-Raids", + "description": "", + "embeds": "default.json", + "filters": "raids.json", + "geofences": [ "City2.txt" ], + "webhook": "" + }, + { + "name": "City2-LegendaryRaids", + "description": "", + "embeds": "default.json", + "filters": "legendary_raids.json", + "geofences": [ "City2.txt" ], + "webhook": "" + }, + { + "name": "City2-ExRaids", + "description": "", + "embeds": "default.json", + "filters": "ex_raids.json", + "geofences": [ "City2.txt" ], + "webhook": "" + }, + { + "name": "City2-Quests", + "description": "", + "embeds": "default.json", + "filters": "quests.json", + "geofences": [ "City2.txt" ], + "webhook": "" + }, + { + "name": "City2-Lures", + "description": "", + "embeds": "default.json", + "filters": "lures.json", + "geofences": [ "City2.txt" ], + "webhook": "" + }, + { + "name": "City2-Invasions", + "description": "", + "embeds": "default.json", + "filters": "invasions.json", + "geofences": [ "City2.txt" ], + "webhook": "" + }, + { + "name": "City2-Gyms", + "description": "", + "embeds": "default.json", + "filters": "gyms.json", + "geofences": [ "City2.txt" ], + "webhook": "" + }, + { + "name": "Absol-Quests", + "description": "", + "embeds": "default.json", + "filters": "quests_absol.json", + "geofences": [ "City2.txt" ], + "webhook": "" + }, + { + "name": "City2-Weather", + "description": "", + "embeds": "default.json", + "filters": "weather.json", + "geofences": [ "City2.txt" ], + "webhook": "" + } + ] +} diff --git a/examples/alerts/default.json b/examples/alerts/default.json deleted file mode 100644 index a5947c5d..00000000 --- a/examples/alerts/default.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "pokemon": { - "avatarUrl": "", - "content": " (//) L
**Despawn:** ( left)
**Details:** CP: IV: LV:
**Size:** | <#has_weather> | <#is_weather_boosted> (Boosted)
**Moveset:**
<#near_pokestop>**Near Pokestop:** []()
<#is_ditto>**Catch Pokemon:**
<#has_capture_rates> % % %
<#is_event>Go Fest Spawn
<#is_pvp>
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": "", - "url": "", - "username": " ", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "pokemonMissingStats": { - "avatarUrl": "", - "content": "
**Despawn:** ( left)
**Types:**
<#near_pokestop>**Near Pokestop:** []()
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": "", - "url": "", - "username": " ", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "gyms": { - "avatarUrl": "", - "content": "<#team_changed>Gym changed from to
<#in_battle>Gym is under attack!
**Slots Available:**
<#is_ex> Gym!**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "raids": { - "avatarUrl": "", - "content": " Raid Ends: ( left)
**Perfect CP:** / :white_sun_rain_cloud:
**Worst CP:** / :white_sun_rain_cloud:
**Types:** | **Level:** | **Team:**
**Moveset:**
**Weaknesses:**
<#is_ex> Gym!
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": " Raid", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "eggs": { - "avatarUrl": "", - "content": "Hatches: ()
**Ends:** ( left)
**Team:**
<#is_ex> Gym!
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "Level Egg", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "pokestops": { - "avatarUrl": "", - "content": "<#has_lure>**Lure Expires** ( left)
**Lure Type:**
<#has_invasion>**Expires:** ( left)
**Type:** | **Gender:**

**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "quests": { - "avatarUrl": "", - "content": "**Quest:**
<#has_quest_conditions>**Condition(s):**
**Reward:**
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "lures": { - "avatarUrl": "", - "content": "<#has_lure>**Lure Expires:** ( left)
**Lure Type:**
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "invasions": { - "avatarUrl": "", - "content": "<#has_invasion>**Expires:** ( left)
**Type:** | **Gender:**

**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "nests": { - "avatarUrl": "", - "content": "**Pokemon:**
**Average Spawns:** /h | **Types:**
**[Google]() | [Apple]() | [Waze]() | [Scanner]()**", - "iconUrl": "", - "title": ": ", - "url": "", - "username": "", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - }, - "weather": { - "avatarUrl": "", - "content": "**Weather Condition:**
**Weather Cell ID:** #", - "iconUrl": "", - "title": "", - "url": "", - "username": "Weather", - "imageUrl": "", - "footer": { - "text": " ", - "iconUrl": "" - } - } -} diff --git a/examples/configs/config.example.json b/examples/configs/config.example.json new file mode 100644 index 00000000..922296f2 --- /dev/null +++ b/examples/configs/config.example.json @@ -0,0 +1,168 @@ +{ + "host": "*", + "port": 8008, + "locale": "en", + "sentry": true, + "shortUrlApi": { + "enabled": false, + "apiUrl": "http://127.0.0.1/u/api.php", + "signature": "", + "action": "shorturl", + "format": "json" + }, + "stripeApi": { + "apiKey": "" + }, + "servers": { + "000000000000000001": "discord1.example.json", + "000000000000000002": "discord2.example.json" + }, + "database": { + "main": { + "host": "127.0.0.1", + "port": 3306, + "username": "root", + "password": "password", + "database": "brockdb" + }, + "scanner": { + "host": "127.0.0.1", + "port": 3306, + "username": "root", + "password": "password", + "database": "rdmdb" + }, + "nests": { + "host": "127.0.0.1", + "port": 3306, + "username": "root", + "password": "password", + "database": "manualdb" + } + }, + "eventPokemon": { + "enabled": false, + "pokemonIds": [], + "minimumIV": 90, + "type": "Include", + "ignoreMissingStats": true + }, + "urls": { + "scannerMap": "http://map.example.com/@/{0}/{1}/15" + }, + "iconStyles": { + "Default": { + "Base": { + "name": "Default", + "path": "https://raw.githubusercontent.com/WatWowMap/wwm-uicons/main/" + }, + "Pokemon": { + "name": "Default_Pokemon", + "path": "https://raw.githubusercontent.com/nileplumb/PkmnShuffleMap/master/UICONS/pokemon/" + } + /* + "Raid", + "Egg", + "Gym", + "Pokestop", + "Reward", + "Invasion", + "Type", + "Nest", + "Team", + "Weather", + "Misc", + */ + }, + "Home": { + "Base": { + "name": "Home", + "path": "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/master/UICONS_OS/" + } + }, + "Shuffle": { + "Base": { + "name": "Shuffle", + "path": "https://raw.githubusercontent.com/nileplumb/PkmnShuffleMap/master/UICONS/" + } + }, + "Pokemon Go": { + "Base": { + "name": "Pokemon Go", + "path": "https://raw.githubusercontent.com/whitewillem/PogoAssets/main/uicons/" + } + }, + "PMSF": { + "Base": { + "name": "PMSF", + "path": "https://raw.githubusercontent.com/pmsf/PMSF/develop/static/sprites/" + } + } + }, + "staticMaps": { + "enabled": false, + "url": "http://tiles.example.com:8080", + // StaticMap or MultiStaticMap + "type": "StaticMap", + "includeGyms": false, + "includePokestops": false, + // Including Gyms and Pokestops on the StaticMap only works if `pregenerate` is set to `true` + "pregenerate": true + }, + "twilio": { + "enabled": false, + "accountSid": "", + "authToken": "", + "from": "", + "userIds": [], + "roleIds": [], + "pokemonIds": [201, 480, 481, 482, 443, 444, 445, 633, 634, 635, 610, 611, 612], + "minIV": 100 + }, + "reverseGeocoding": { + "provider": "osm", // osm/gmaps + "cacheToDisk": true, + "gmaps": { + "key": "", + "schema": "{{Results.[0].FormattedAddress}}" + }, + "nominatim": { + "endpoint": "", + "schema": "{{Address.Road}} {{Address.State}} {{Address.Postcode}} {{Address.Country}}" + } + }, + "despawnTimeMinimumMinutes": 5, + "reloadSubscriptionChangesMinutes": 1, + "checkForDuplicates": true, + "debug": false, + /* + * Trace: 0 + * Debug: 1 + * Info: 2 + * Warning: 3 + * Error: 4 + * Critical: 5 + * None: 6 + */ + "logLevel": 0, + "pvpLeagues": { + "little": { + "minCP": 450, + "maxCP": 500, + "minRank": 1, + "maxRank": 100 + }, + "great": { + "minCP": 1400, + "maxCP": 1500, + "minRank": 1, + "maxRank": 100 + }, + "ultra": { + "minCP": 2400, + "maxCP": 2500, + "minRank": 1, + "maxRank": 100 + } + } +} diff --git a/examples/discord_auth.json b/examples/discord_auth.json new file mode 100644 index 00000000..49a97103 --- /dev/null +++ b/examples/discord_auth.json @@ -0,0 +1,7 @@ +{ + "ownerId": 0, + "clientId": 0, + "clientSecret": "", + "redirectUri": "http://127.0.0.1:8008/auth/discord/callback", + "userIds": [] +} \ No newline at end of file diff --git a/examples/discords/discord1.example.json b/examples/discords/discord1.example.json index 63ad3d1a..0e1cb547 100644 --- a/examples/discords/discord1.example.json +++ b/examples/discords/discord1.example.json @@ -1,41 +1,72 @@ { - "commandPrefix": ".", - "emojiGuildId": 000000000000000001, - "ownerId": 000000000000000000, - "donorRoleIds": [], + "bot": { + "commandPrefix": ".", + "emojiGuildId": 000000000000000001, + "token": "", + "channelIds": [], + "status": null, + "ownerId": 000000000000000000 + }, + "donorRoleIds": { + "000000000000000000": ["pokemon", "pvp", "raids", "quests", "invasions", "lures", "gyms"], + "000000000000000001": [], + "000000000000000002": ["quests", "gyms"] + }, "freeRoleName": "", "moderatorRoleIds": [], - "token": "", "alarms": "alarms.json", "geofences": [ - "City1.txt", - "City2.json" + "City1.txt", + "City2.json" ], "subscriptions": { - "enabled": false, - "maxNotificationsPerMinute": 10, - "maxPokemonSubscriptions": 0, - "maxPvPSubscriptions": 0, - "maxRaidSubscriptions": 0, - "maxQuestSubscriptions": 0, - "maxInvasionSubscriptions": 0, - "maxLureSubscriptions": 0, - "maxGymSubscriptions": 0 + "enabled": false, + "maxNotificationsPerMinute": 10, + "maxPokemonSubscriptions": 0, + "maxPvPSubscriptions": 0, + "maxRaidSubscriptions": 0, + "maxQuestSubscriptions": 0, + "maxInvasionSubscriptions": 0, + "maxLureSubscriptions": 0, + "maxGymSubscriptions": 0, + "url": "http://127.0.0.1:8009", + "embedsFile": "default.json" + }, + "geofenceRoles": { + "enabled": false, + "autoRemove": true, + "requiresDonorRole": true + }, + "questsPurge": { + "enabled": false, + "channels": { + "America/Denver": [ + 000000000000000000, + 000000000000000001 + ], + "America/New_York": [ + 000000000000000000, + 000000000000000001 + ] + } + }, + "nests": { + "enabled": false, + "channelId": 0, + "minimumPerHour": 2 }, - "enableGeofenceRoles": false, - "autoRemoveGeofenceRoles": false, - "citiesRequireSupporterRole": true, - "pruneQuestChannels": true, - "questChannelIds": [], - "nestsChannelId": 0, - "nestsMinimumPerHour": 2, - "shinyStats": { - "enabled": false, - "clearMessages": false, - "channelId": 0 + "dailyStats": { + "shiny": { + "enabled": false, + "clearMessages": false, + "channelId": 0 + }, + "iv": { + "enabled": false, + "clearMessages": false, + "channelId": 0 + } }, "iconStyle": "Default", - "botChannelIds": [], - "status": null, - "dmAlertsFile": "default.json", + "logLevel": 4 } diff --git a/examples/discords/discord2.example.json b/examples/discords/discord2.example.json index a093d46e..1eb2df27 100644 --- a/examples/discords/discord2.example.json +++ b/examples/discords/discord2.example.json @@ -1,41 +1,72 @@ { - "commandPrefix": ".", - "emojiGuildId": 000000000000000001, - "ownerId": 000000000000000000, - "donorRoleIds": [], + "bot": { + "commandPrefix": ".", + "emojiGuildId": 000000000000000001, + "token": "", + "channelIds": [], + "status": "Test #2", + "ownerId": 000000000000000000 + }, + "donorRoleIds": { + "000000000000000000": ["pokemon", "pvp", "raids", "quests", "invasions", "lures", "gyms"], + "000000000000000001": [], + "000000000000000002": ["quests", "gyms"] + }, "freeRoleName": "", "moderatorRoleIds": [], - "token": "", "alarms": "alarms2.json", "geofences": [ - "City3.txt", - "City4.json" + "City3.txt", + "City4.json" ], "subscriptions": { - "enabled": false, - "maxNotificationsPerMinute": 10, - "maxPokemonSubscriptions": 0, - "maxPvPSubscriptions": 0, - "maxRaidSubscriptions": 0, - "maxQuestSubscriptions": 0, - "maxInvasionSubscriptions": 0, - "maxLureSubscriptions": 0, - "maxGymSubscriptions": 0 + "enabled": false, + "maxNotificationsPerMinute": 10, + "maxPokemonSubscriptions": 0, + "maxPvPSubscriptions": 0, + "maxRaidSubscriptions": 0, + "maxQuestSubscriptions": 0, + "maxInvasionSubscriptions": 0, + "maxLureSubscriptions": 0, + "maxGymSubscriptions": 0, + "url": "http://127.0.0.1:8009", + "embedsFile": "default.json" + }, + "geofenceRoles": { + "enabled": false, + "autoRemove": true, + "requiresDonorRole": true + }, + "questsPurge": { + "enabled": false, + "channels": { + "America/Denver": [ + 000000000000000000, + 000000000000000001 + ], + "America/New_York": [ + 000000000000000000, + 000000000000000001 + ] + } + }, + "nests": { + "enabled": false, + "channelId": 0, + "minimumPerHour": 2 }, - "enableGeofenceRoles": false, - "autoRemoveGeofenceRoles": false, - "citiesRequireSupporterRole": true, - "pruneQuestChannels": true, - "questChannelIds": [], - "nestsChannelId": 0, - "nestsMinimumPerHour": 2, - "shinyStats": { - "enabled": false, - "clearMessages": false, - "channelId": 0 + "dailyStats": { + "shiny": { + "enabled": false, + "clearMessages": false, + "channelId": 0 + }, + "iv": { + "enabled": false, + "clearMessages": false, + "channelId": 0 + } }, "iconStyle": "Default", - "botChannelIds": [], - "status": "Test #2", - "dmAlertsFile": "default.json" + "logLevel": 4 } diff --git a/examples/embeds/default.json b/examples/embeds/default.json new file mode 100644 index 00000000..f716342e --- /dev/null +++ b/examples/embeds/default.json @@ -0,0 +1,230 @@ +{ + "pokemon": { + "avatarUrl": "{{pkmn_img_url}}", + "content": [ + "{{pkmn_name}} {{form}}{{gender}} {{iv}} ({{atk_iv}}/{{def_iv}}/{{sta_iv}}) L{{lvl}}", + "**Despawn:** {{despawn_time}} ({{time_left}} left){{despawn_time_verified}}", + "**Details:** CP: {{cp}} IV: {{iv}} LV: {{lvl}}", + "**Size:** {{size}} | {{types_emoji}}{{#if has_weather}} | {{weather_emoji}}{{#if is_weather_boosted}} (Boosted){{/if}}{{/if}}", + "**Moveset:** {{moveset}}", + "{{#if near_pokestop}}**Near Pokestop:** [{{pokestop_name}}]({{pokestop_url}})", + "{{/if}}{{#if is_ditto}}**Catch Pokemon:** {{original_pkmn_name}}", + "{{/if}}{{#if has_capture_rates}}{{capture_1_emoji}} {{capture_1}}% {{capture_2_emoji}} {{capture_2}}% {{capture_3_emoji}} {{capture_3}}%", + "{{/if}}{{#if is_event}}Go Fest Spawn", + "{{/if}}{{#if has_pvp}}{{#each pvp}}**{{@key}}**", + "{{#each this}}", + "#{{rank}} {{getPokemonName pokemonId}} {{getFormName formId}} {{cp}}CP @ L{{level}} {{formatPercentage percentage}}%", + "{{/each}}{{/each}}{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pkmn_img_url}}", + "title": "{{geofence}}", + "url": "{{gmaps_url}}", + "username": "{{form}} {{pkmn_name}}{{gender}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "pokemonMissingStats": { + "avatarUrl": "{{pkmn_img_url}}", + "content": [ + "{{pkmn_name}} {{form}}{{gender}}", + "**Despawn:** {{despawn_time}} ({{time_left}} left){{despawn_time_verified}}", + "**Types:** {{types_emoji}}", + "{{#if near_pokestop}}**Near Pokestop:** [{{pokestop_name}}]({{pokestop_url}})", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pkmn_img_url}}", + "title": "{{geofence}}", + "url": "{{gmaps_url}}", + "username": "{{form}} {{pkmn_name}}{{gender}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "gyms": { + "avatarUrl": "{{gym_url}}", + "content": [ + "{{#if team_changed}}Gym changed from {{old_gym_team_emoji}} {{old_gym_team}} to {{gym_team_emoji}} {{gym_team}}", + "{{/if}}{{#if in_battle}}Gym is under attack!", + "{{/if}}**Slots Available:** {{slots_available}}", + "{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}{{#if is_ex}}{{ex_emoji}} Gym!", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{gym_url}}", + "title": "{{geofence}}: {{gym_name}}", + "url": "{{gmaps_url}}", + "username": "{{gym_name}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "raids": { + "avatarUrl": "{{pkmn_img_url}}", + "content": [ + "{{evolution}} {{form}} {{pkmn_name}}{{gender}} {{costume}} Raid Ends: {{end_time}} ({{end_time_left}} left)", + "**Perfect CP:** {{perfect_cp}} / :white_sun_rain_cloud: {{perfect_cp_boosted}}", + "**Worst CP:** {{worst_cp}} / :white_sun_rain_cloud: {{worst_cp_boosted}}", + "**Types:** {{types_emoji}} | **Level:** {{lvl}} | **Team:** {{team_emoji}}", + "**Moveset:** {{moveset}}", + "**Weaknesses:** {{weaknesses_emoji}}", + "{{#if is_ex}}{{ex_emoji}} Gym!", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pkmn_img_url}}", + "title": "{{geofence}}: {{gym_name}}", + "url": "{{gmaps_url}}", + "username": "{{form}} {{pkmn_name}}{{gender}} {{costume}} Raid", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "eggs": { + "avatarUrl": "{{pkmn_img_url}}", + "content": [ + "Hatches: {{start_time}} ({{start_time_left}})", + "**Ends:** {{end_time}} ({{end_time_left}} left)", + "**Team:** {{team_emoji}}", + "{{#if is_ex}}{{ex_emoji}} Gym!", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pkmn_img_url}}", + "title": "{{geofence}}: {{gym_name}}", + "url": "{{gmaps_url}}", + "username": "Level {{lvl}} Egg", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "pokestops": { + "avatarUrl": "{{pokestop_url}}", + "content": [ + "{{#if has_lure}}**Lure Expires** {{lure_expire_time}} ({{lure_expire_time_left}} left)", + "**Lure Type:** {{lure_type}}", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pokestop_url}}", + "title": "{{geofence}}: {{pokestop_name}}", + "url": "{{gmaps_url}}", + "username": "{{pokestop_name}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "quests": { + "avatarUrl": "{{quest_reward_img_url}}", + "content": [ + "**Quest:** {{quest_task}}", + "{{#if has_quest_conditions}}**Condition(s):** {{quest_conditions}}", + "{{/if}}**Reward:** {{quest_reward}}", + "{{#if is_ar}}{{ar_emoji}}**AR Quest Required!**", + "{{/if}}", + "**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pokestop_url}}", + "title": "{{geofence}}: {{pokestop_name}}", + "url": "{{gmaps_url}}", + "username": "{{quest_task}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "lures": { + "avatarUrl": "{{lure_img_url}}", + "content": [ + "{{#if has_lure}}**Lure Expires** {{lure_expire_time}} ({{lure_expire_time_left}} left)", + "**Lure Type:** {{lure_type}}", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pokestop_url}}", + "title": "{{geofence}}: {{pokestop_name}}", + "url": "{{gmaps_url}}", + "username": "{{pokestop_name}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "invasions": { + "avatarUrl": "{{invasion_img_url}}", + "content": [ + "**Expires:** {{invasion_expire_time}} ({{invasion_expire_time_left}} left)", + "**Type:** {{grunt_type_emoji}} | **Gender:** {{grunt_gender}}", + "**Encounter Reward Chance:**", + "{{#each invasion_encounters}}", + "{{chance}} - {{pokemon}}", + "{{/each}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pokestop_url}}", + "title": "{{geofence}}: {{pokestop_name}}", + "url": "{{gmaps_url}}", + "username": "{{pokestop_name}}", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "nests": { + "avatarUrl": "{{pkmn_img_url}}", + "content": [ + "**Pokemon:** {{pkmn_name}}", + "**Average Spawns:** {{avg_spawns}}/h | **Types:** {{types_emojis}}", + "**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + ], + "iconUrl": "{{pkmn_img_url}}", + "title": "{{geofence}}: {{nest_name}}", + "url": "{{gmaps_url}}", + "username": "", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + }, + "weather": { + "avatarUrl": "{{weather_img_url}}", + "content": [ + "**Weather Condition:** {{weather_emoji}} {{weather_condition}}", + "**Weather Cell ID:** #{{id}}" + ], + "iconUrl": "{{weather_img_url}}", + "title": "{{geofence}}", + "url": "{{gmaps_url}}", + "username": "Weather", + "imageUrl": "{{tilemaps_url}}", + "footer": { + "text": "{{guild_name}} {{date_time}}", + "iconUrl": "{{guild_img_url}}" + } + } +} diff --git a/examples/filters/0iv.json b/examples/filters/0iv.json index 6aeb93a7..d653f9a5 100644 --- a/examples/filters/0iv.json +++ b/examples/filters/0iv.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 0, - "max_iv": 0, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 0, + "max_iv": 0, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/100iv.json b/examples/filters/100iv.json index 0103b2b9..7b374d3a 100644 --- a/examples/filters/100iv.json +++ b/examples/filters/100iv.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 100, - "max_iv": 100, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 100, + "max_iv": 100, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/100iv_basura.json b/examples/filters/100iv_basura.json index 8ed1126e..18355bc6 100644 --- a/examples/filters/100iv_basura.json +++ b/examples/filters/100iv_basura.json @@ -1,13 +1,13 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [1,4,10,11,13,14,16,17,19,20,21,22,25,23,27,29,30,32,33,37,39,43,46,47,48,49,50,51,52,56,54,58,60,72,74,77,79,84,88,90,96,102,104,109,112,116,126,127,128,133,138,140,152,155,161,163,165,167,170,177,179,183,187,190,191,193,200,198,194,209,215,216,218,220,223,226,228,231,252,255,261,263,265,270,273,276,277,285,287,293,296,299,300,302,304,307,309,311,312,314,315,316,318,322,325,328,331,333,336,339,341,343,345,347,351,353,355,361,363,370,387,390,396,399,401,412,418,421,427,431,434,451,453,459,495,498,504,506,509,519,572], - "min_iv": 100, - "max_iv": 100, - "min_lvl": 0, - "max_lvl": 100, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [1,4,10,11,13,14,16,17,19,20,21,22,25,23,27,29,30,32,33,37,39,43,46,47,48,49,50,51,52,56,54,58,60,72,74,77,79,84,88,90,96,102,104,109,112,116,126,127,128,133,138,140,152,155,161,163,165,167,170,177,179,183,187,190,191,193,200,198,194,209,215,216,218,220,223,226,228,231,252,255,261,263,265,270,273,276,277,285,287,293,296,299,300,302,304,307,309,311,312,314,315,316,318,322,325,328,331,333,336,339,341,343,345,347,351,353,355,361,363,370,387,390,396,399,401,412,418,421,427,431,434,451,453,459,495,498,504,506,509,519,572], + "min_iv": 100, + "max_iv": 100, + "min_lvl": 0, + "max_lvl": 100, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/100iv_lvl30.json b/examples/filters/100iv_lvl30.json index 17c71721..3197c03c 100644 --- a/examples/filters/100iv_lvl30.json +++ b/examples/filters/100iv_lvl30.json @@ -1,13 +1,13 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 100, - "max_iv": 100, - "min_lvl": 30, - "max_lvl": 100, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 100, + "max_iv": 100, + "min_lvl": 30, + "max_lvl": 100, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/100iv_lvl35.json b/examples/filters/100iv_lvl35.json index 53b4466d..3cf04eb1 100644 --- a/examples/filters/100iv_lvl35.json +++ b/examples/filters/100iv_lvl35.json @@ -1,13 +1,13 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 100, - "max_iv": 100, - "min_lvl": 35, - "max_lvl": 100, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 100, + "max_iv": 100, + "min_lvl": 35, + "max_lvl": 100, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/100iv_rare.json b/examples/filters/100iv_rare.json index 1c4fad30..426e7bb6 100644 --- a/examples/filters/100iv_rare.json +++ b/examples/filters/100iv_rare.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [1,4,10,11,13,14,16,17,19,20,21,22,25,23,27,29,30,32,33,37,39,43,46,47,48,49,50,51,52,56,54,58,60,72,74,77,79,84,88,90,96,102,104,109,112,116,126,127,128,133,138,140,152,155,161,163,165,167,170,177,179,183,187,190,191,193,200,198,194,209,215,216,218,220,223,226,228,231,252,255,261,263,265,270,273,276,277,285,287,293,296,299,300,302,304,307,309,311,312,314,315,316,318,322,325,328,331,333,336,339,341,343,345,347,351,353,355,361,363,370,387,390,396,399,401,412,418,421,427,431,434,451,453,459,495,498,504,506,509,519,524,543,572,590], - "min_iv": 100, - "max_iv": 100, - "type": "Exclude", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [1,4,10,11,13,14,16,17,19,20,21,22,25,23,27,29,30,32,33,37,39,43,46,47,48,49,50,51,52,56,54,58,60,72,74,77,79,84,88,90,96,102,104,109,112,116,126,127,128,133,138,140,152,155,161,163,165,167,170,177,179,183,187,190,191,193,200,198,194,209,215,216,218,220,223,226,228,231,252,255,261,263,265,270,273,276,277,285,287,293,296,299,300,302,304,307,309,311,312,314,315,316,318,322,325,328,331,333,336,339,341,343,345,347,351,353,355,361,363,370,387,390,396,399,401,412,418,421,427,431,434,451,453,459,495,498,504,506,509,519,524,543,572,590], + "min_iv": 100, + "max_iv": 100, + "type": "Exclude", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/100iv_ultra.json b/examples/filters/100iv_ultra.json index d089c0ae..53ab9ee8 100644 --- a/examples/filters/100iv_ultra.json +++ b/examples/filters/100iv_ultra.json @@ -6,6 +6,6 @@ "min_iv": 100, "max_iv": 100, "type": "Include", - "ignoreMissing": true + "ignore_missing": true } } diff --git a/examples/filters/3rd_evo.json b/examples/filters/3rd_evo.json index ff7a590d..42edbbee 100644 --- a/examples/filters/3rd_evo.json +++ b/examples/filters/3rd_evo.json @@ -1,9 +1,9 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [3,6,9,31,34,45,62,65,68,71,76,94,149,154,157,160,181,189,248,254,257,260,267,269,272,275,282,289,295,306,330,365,373,376,389,392,395,398,405,407,414,445,462,464,466,467,468,473,474,475,477,478], - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [3,6,9,31,34,45,62,65,68,71,76,94,149,154,157,160,181,189,248,254,257,260,267,269,272,275,282,289,295,306,330,365,373,376,389,392,395,398,405,407,414,445,462,464,466,467,468,473,474,475,477,478], + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/90iv.json b/examples/filters/90iv.json index fa1bc049..dfe453fb 100644 --- a/examples/filters/90iv.json +++ b/examples/filters/90iv.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 90, - "max_iv": 99, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 90, + "max_iv": 99, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/90iv_cd.json b/examples/filters/90iv_cd.json index ec0cdc91..de48fed7 100644 --- a/examples/filters/90iv_cd.json +++ b/examples/filters/90iv_cd.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [4, 13, 63, 92, 111, 125, 126, 137, 158, 220, 252, 255, 258, 273, 280, 287, 328, 358, 371, 387, 393], - "min_iv": 90, - "max_iv": 100, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [4, 13, 63, 92, 111, 125, 126, 137, 158, 220, 252, 255, 258, 273, 280, 287, 328, 358, 371, 387, 393], + "min_iv": 90, + "max_iv": 100, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/90iv_gible.json b/examples/filters/90iv_gible.json index b5d1b7b1..9dec863a 100644 --- a/examples/filters/90iv_gible.json +++ b/examples/filters/90iv_gible.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [443, 444, 445], - "min_iv": 90, - "max_iv": 100, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [443, 444, 445], + "min_iv": 90, + "max_iv": 100, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/90iv_gible_axew_deino.json b/examples/filters/90iv_gible_axew_deino.json index 0f7b1250..6619c561 100644 --- a/examples/filters/90iv_gible_axew_deino.json +++ b/examples/filters/90iv_gible_axew_deino.json @@ -6,6 +6,6 @@ "min_iv": 90, "max_iv": 100, "type": "Include", - "ignoreMissing": true + "ignore_missing": true } } \ No newline at end of file diff --git a/examples/filters/90iv_lvl34.json b/examples/filters/90iv_lvl34.json index 52b18824..9728b88a 100644 --- a/examples/filters/90iv_lvl34.json +++ b/examples/filters/90iv_lvl34.json @@ -1,13 +1,13 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 90, - "max_iv": 99, - "min_lvl": 34, - "max_lvl": 35, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 90, + "max_iv": 99, + "min_lvl": 34, + "max_lvl": 35, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/90iv_snorlax.json b/examples/filters/90iv_snorlax.json index 499946b9..4a7c0dc3 100644 --- a/examples/filters/90iv_snorlax.json +++ b/examples/filters/90iv_snorlax.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [143], - "min_iv": 90, - "max_iv": 100, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [143], + "min_iv": 90, + "max_iv": 100, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/96iv.json b/examples/filters/96iv.json index 30f1a7cd..2e937891 100644 --- a/examples/filters/96iv.json +++ b/examples/filters/96iv.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 95, - "max_iv": 99, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 95, + "max_iv": 99, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/98iv.json b/examples/filters/98iv.json index 690615fc..3effba80 100644 --- a/examples/filters/98iv.json +++ b/examples/filters/98iv.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 97, - "max_iv": 100, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 97, + "max_iv": 100, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/98iv_cd.json b/examples/filters/98iv_cd.json index 53cf7cbc..9d60ad81 100644 --- a/examples/filters/98iv_cd.json +++ b/examples/filters/98iv_cd.json @@ -6,6 +6,6 @@ "min_iv": 97, "max_iv": 100, "type": "Include", - "ignoreMissing": true + "ignore_missing": true } } \ No newline at end of file diff --git a/examples/filters/all.json b/examples/filters/all.json index fa3c3498..44606e46 100644 --- a/examples/filters/all.json +++ b/examples/filters/all.json @@ -1,17 +1,17 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [ - 1,2,4,5,7,10,11,13,14,16,17,19,20,21,22,23,24,25,27,28,29,30,32,33,35,37,39,41,43,44,46,47,48,49,50,51,52,53,54,56,58,59,60,63,66,69,70,72,74,75,77,79,81,84,86,90,92,95,96,97,98,100,102,104,105,109,111,114,116,118,120,123,124,125,126,127,128,129,133,138,140, - 152,155,158,161,162,163,164,165,166,167,168,170,177,178,179,183,184,185,187,188,190,191,193,194,198,200,202,203,204,206,207,209,210,211,213,215,216,218,219,220,223,225,226,227,228,231,234, - 252,255,258,261,262,263,264,265,270,273,274,276,277,278,283,285,293,294,296,299,300,302,304,307,309,311,312,314,315,316,318,320,322,325,328,331,332,333,336,338,339,341,343,345,347,351,353,355,361,363,370, - 387,390,393,396,399,401,412,415,418,421,422,425,427,431,432,434,451,453,459, - 495,498,504,506,509,519,520,529,543,590 - ], - "min_iv": 0, - "max_iv": 100, - "type": "Exclude", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [ + 1,2,4,5,7,10,11,13,14,16,17,19,20,21,22,23,24,25,27,28,29,30,32,33,35,37,39,41,43,44,46,47,48,49,50,51,52,53,54,56,58,59,60,63,66,69,70,72,74,75,77,79,81,84,86,90,92,95,96,97,98,100,102,104,105,109,111,114,116,118,120,123,124,125,126,127,128,129,133,138,140, + 152,155,158,161,162,163,164,165,166,167,168,170,177,178,179,183,184,185,187,188,190,191,193,194,198,200,202,203,204,206,207,209,210,211,213,215,216,218,219,220,223,225,226,227,228,231,234, + 252,255,258,261,262,263,264,265,270,273,274,276,277,278,283,285,293,294,296,299,300,302,304,307,309,311,312,314,315,316,318,320,322,325,328,331,332,333,336,338,339,341,343,345,347,351,353,355,361,363,370, + 387,390,393,396,399,401,412,415,418,421,422,425,427,431,432,434,451,453,459, + 495,498,504,506,509,519,520,529,543,590 + ], + "min_iv": 0, + "max_iv": 100, + "type": "Exclude", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/archen.json b/examples/filters/archen.json index dc6a80a6..449bb34b 100644 --- a/examples/filters/archen.json +++ b/examples/filters/archen.json @@ -6,6 +6,6 @@ "min_iv": 0, "max_iv": 100, "type": "Include", - "ignoreMissing": false + "ignore_missing": false } } \ No newline at end of file diff --git a/examples/filters/axew.json b/examples/filters/axew.json index fd2d4dbf..e6c4e43f 100644 --- a/examples/filters/axew.json +++ b/examples/filters/axew.json @@ -6,6 +6,6 @@ "min_iv": 0, "max_iv": 100, "type": "Include", - "ignoreMissing": false + "ignore_missing": false } } \ No newline at end of file diff --git a/examples/filters/bagon.json b/examples/filters/bagon.json index 9ad488c8..a5a63bd0 100644 --- a/examples/filters/bagon.json +++ b/examples/filters/bagon.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [371,372,373], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [371,372,373], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/beldum.json b/examples/filters/beldum.json index ebc8fb94..e2081fd8 100644 --- a/examples/filters/beldum.json +++ b/examples/filters/beldum.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [374,375,376], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [374,375,376], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/bronzor.json b/examples/filters/bronzor.json index 1ca5dfd2..3c666c99 100644 --- a/examples/filters/bronzor.json +++ b/examples/filters/bronzor.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [436,437], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [436,437], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/chansey.json b/examples/filters/chansey.json index 61d52b89..098fb37c 100644 --- a/examples/filters/chansey.json +++ b/examples/filters/chansey.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [113,242], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [113,242], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/clamperl.json b/examples/filters/clamperl.json index bcd44a6f..759c494e 100644 --- a/examples/filters/clamperl.json +++ b/examples/filters/clamperl.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [366,367,368], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [366,367,368], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/cranidos.json b/examples/filters/cranidos.json index 76ef5ba6..0ab27b4c 100644 --- a/examples/filters/cranidos.json +++ b/examples/filters/cranidos.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [408,409], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [408,409], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/darumaka.json b/examples/filters/darumaka.json index 673b867e..3a84a936 100644 --- a/examples/filters/darumaka.json +++ b/examples/filters/darumaka.json @@ -6,6 +6,6 @@ "min_iv": 0, "max_iv": 100, "type": "Include", - "ignoreMissing": false + "ignore_missing": false } } \ No newline at end of file diff --git a/examples/filters/default.json b/examples/filters/default.json index 63968c24..bfa636cd 100644 --- a/examples/filters/default.json +++ b/examples/filters/default.json @@ -1,68 +1,224 @@ { - "pokemon": - { - "enabled": true, // Filter is enabled - "pokemon": [280,337,374], // List of Pokemon for the filter or empty for all - "forms": ["Alola","Galarian"], // List of forms for the filter or empty for all - "costumes": ["Detective","Holiday"], // List of costumes for the filter or empty for all - "min_iv": 0, // Minimum IV of Pokemon to send - "max_iv": 100, // Maximum IV of Pokemon to send - "min_cp": 0, // Minimum CP of Pokemon - "max_cp": 999999, // Maximum CP of Pokemon - "gender": "m", // Only send male (m,f,*) - "size": "Big", // Tiny, Small, Normal, Large, Big - "great_league": true, // Great League - "ultra_league": true, // Ultra League - "min_rank": 1, // Minimum rank of #1 PVP stats - "max_rank": 5, // Maximum rank of #5 PVP stats - "type": "Include", // Include or Exclude the `pokemon` list - "is_event": false, // Only send Pokemon checked with event accounts (GoFest, etc) - "ignoreMissing": true // Ignore Pokemon missing stats - }, - "eggs": - { - "enabled": true, // Filter is enabled - "min_lvl": 1, // Minimum egg level to send - "max_lvl": 6, // Maximum egg level to send - "onlyEx": false, // Only send ex-eligible raids. - "team": "All", // All, Valor, Mystic, Instinct, Neutral - }, - "raids": - { - "enabled": true, // Filter is enabled - "pokemon": [], // Raid bosses to include or none for all. - "costumes": ["Detective","Holiday"], //List of costumes for the filter or empty for all - "forms": ["Alola","Galarian"], //List of forms for the filter or empty for all - "min_lvl": 1, // Minimum raid level to send - "max_lvl": 6, // Maximum raid level to send - "type": "Include", // Include or Exclude the `pokemon` list - "onlyEx": false, // Only send ex-eligible raids. - "team": "All", // All, Valor, Mystic, Instinct, Nuetral - "ignoreMissing": true // Ignore raids missing stats - }, - "quests": - { - "enabled": true, // Filter is enabled - "rewards": ["spinda", "nincada"], // Quest reward string (Chansey, stardust, candy, etc.) - "isShiny": false, // Only shiny encounter quests. - "type": "Include" // Include or Exclude the `rewards` list - }, - "pokestops": - { - "enabled": true, // Filter is enabled - "lured": false, // Only send lured pokestops - "lure_types": ["Normal", "Glacial", "Mossy", "Magnetic"], // All lure types - "invasions": false // Only send Team Rocket invasion pokestops - }, - "gyms": - { - "enabled": true, // Filter is enabled - "underAttack": true, // Only gyms that are under attack - "team": "All" // Team change to notify about (i.e. Neutral/Mystic/Valor/Instinct/All) - }, - "weather": - { - "enabled": true, // Filter is enabled - "types": ["Clear", "Rainy", "PartlyCloudy", "Overcast", "Windy", "Snow", "Fog"] // Only send weather types that are in the list - } + "pokemon": + { + "enabled": true, // Filter is enabled + "pokemon": [280,337,374], // List of Pokemon for the filter or empty for all + "forms": ["Alola","Galar"], // List of forms for the filter or empty for all + "costumes": ["Detective","Holiday"], // List of costumes for the filter or empty for all + "min_iv": 0, // Minimum IV of Pokemon to send + "max_iv": 100, // Maximum IV of Pokemon to send + "min_cp": 0, // Minimum CP of Pokemon + "max_cp": 999999, // Maximum CP of Pokemon + "min_lvl": 0, // Minimum level of Pokemon + "max_lvl": 35, // Maximum level of Pokemon + "gender": "m", // Only send male (m,f,*) + "size": "Big", // Tiny, Small, Normal, Large, Big + "pvp": { + // Add or remove any PVP league filtering keys + // depending on the interested ranks + // Little league rank filtering + "little": { + // Minimum rank of #1 for PVP rank stats + "min_rank": 1, + // Maximum rank of #5 for PVP rank stats + "max_rank": 5, + // Minimum CP value of 400 for PVP rank stats + "min_cp": 400, + // Maximum CP value of 500 for PVP rank stats + "max_cp": 500, + // Minimum PVP product stat + "min_percent": 90, + // Maximum PVP product stat + "max_percent": 100, + // Gender filtering requirement (*, m, or f) + "gender": "*" + }], + // Great league rank filtering + "great": { + "min_rank": 1, + "max_rank": 5, + "min_cp": 1400, + "max_cp": 1500, + "gender": "m" + }], + // Ultra league rank filtering + "ultra": { + "min_rank": 1, + "max_rank": 25, + "min_cp": 2400, + "max_cp": 2500, + "gender": "f" + } + }, + "type": "Include", // Include or Exclude the `pokemon` list + "is_event": false, // Only send Pokemon checked with event accounts (GoFest, etc) + "ignore_missing": true // Ignore Pokemon missing stats + }, + "eggs": + { + "enabled": true, // Filter is enabled + "min_lvl": 1, // Minimum egg level to send + "max_lvl": 8, // Maximum egg level to send + "only_ex": false, // Only send ex-eligible raids. + "team": "All", // All, Valor, Mystic, Instinct, Neutral + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + } + }, + "raids": + { + "enabled": true, // Filter is enabled + "pokemon": [], // Raid bosses to include or none for all. + "forms": ["Alola","Galar"], // List of forms for the filter or empty for all + "costumes": ["Detective","Holiday"], // List of costumes for the filter or empty for all + "min_lvl": 1, // Minimum raid level to send + "max_lvl": 8, // Maximum raid level to send + "type": "Include", // Include or Exclude the `pokemon` list + "only_ex": false, // Only send ex-eligible raids. + "team": "All", // All, Valor, Mystic, Instinct, Nuetral + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + }, + "ignore_missing": true // Ignore raids missing stats + }, + "quests": + { + "enabled": true, // Filter is enabled + "rewards": ["spinda", "nincada"], // Quest reward string (Chansey, stardust, candy, etc.) + "is_shiny": false, // Only shiny encounter quests. + "type": "Include" // Include or Exclude the `rewards` list + }, + "pokestops": + { + "enabled": true, // Filter is enabled + "lured": false, // Only send lured pokestops + "lure_types": ["Normal", "Glacial", "Mossy", "Magnetic"], // All lure types + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + } + }, + "invasions": + { + "enabled": true, // Filter is enabled + // Determines which invasion types to send + "invasionTypes": { + "CharacterUnset": false, + "CharacterBlanche": true, + "CharacterCandela": true, + "CharacterSpark": true, + "CharacterGruntMale": true, + "CharacterGruntFemale": true, + "CharacterBugGruntFemale": true, + "CharacterBugGruntMale": true, + "CharacterDarknessGruntFemale": true, + "CharacterDarknessGruntMale": true, + "CharacterDarkGruntFemale": true, + "CharacterDarkGruntMale": true, + "CharacterDragonGruntFemale": true, + "CharacterDragonGruntMale": true, + "CharacterFairyGruntFemale": true, + "CharacterFairyGruntMale": true, + "CharacterFightingGruntFemale": true, + "CharacterFightingGruntMale": true, + "CharacterFireGruntFemale": true, + "CharacterFireGruntMale": true, + "CharacterFlyingGruntFemale": true, + "CharacterFlyingGruntMale": true, + "CharacterGrassGruntFemale": true, + "CharacterGrassGruntMale": true, + "CharacterGroundGruntFemale": true, + "CharacterGroundGruntMale": true, + "CharacterIceGruntFemale": true, + "CharacterIceGruntMale": true, + "CharacterMetalGruntFemale": true, + "CharacterMetalGruntMale": true, + "CharacterNormalGruntFemale": true, + "CharacterNormalGruntMale": true, + "CharacterPoisonGruntFemale": true, + "CharacterPoisonGruntMale": true, + "CharacterPsychicGruntFemale": true, + "CharacterPsychicGruntMale": true, + "CharacterRockGruntFemale": true, + "CharacterRockGruntMale": true, + "CharacterWaterGruntFemale": true, + "CharacterWaterGruntMale": true, + "CharacterPlayerTeamLeader": true, + "CharacterExecutiveCliff": true, + "CharacterExecutiveArlo": true, + "CharacterExecutiveSierra": true, + "CharacterGiovanni": true, + "CharacterDecoyGruntMale": true, + "CharacterDecoyGruntFemale": true, + "CharacterGhostGruntFemale": true, + "CharacterGhostGruntMale": true, + "CharacterElectricGruntFemale": true, + "CharacterElectricGruntMale": true, + "CharacterBalloonGruntFemale": true, + "CharacterBalloonGruntMale": true, + "CharacterGruntbFemale": true, + "CharacterGruntbMale": true, + "CharacterBugBalloonGruntFemale": true, + "CharacterBugBalloonGruntMale": true, + "CharacterDarkBalloonGruntFemale": true, + "CharacterDarkBalloonGruntMale": true, + "CharacterDragonBalloonGruntFemale": true, + "CharacterDragonBalloonGruntMale": true, + "CharacterFairyBalloonGruntFemale": true, + "CharacterFairyBalloonGruntMale": true, + "CharacterFightingBalloonGruntFemale": true, + "CharacterFightingBalloonGruntMale": true, + "CharacterFireBalloonGruntFemale": true, + "CharacterFireBalloonGruntMale": true, + "CharacterFlyingBalloonGruntFemale": true, + "CharacterFlyingBalloonGruntMale": true, + "CharacterGrassBalloonGruntFemale": true, + "CharacterGrassBalloonGruntMale": true, + "CharacterGroundBalloonGruntFemale": true, + "CharacterGroundBalloonGruntMale": true, + "CharacterIceBalloonGruntFemale": true, + "CharacterIceBalloonGruntMale": true, + "CharacterMetalBalloonGruntFemale": true, + "CharacterMetalBalloonGruntMale": true, + "CharacterNormalBalloonGruntFemale": true, + "CharacterNormalBalloonGruntMale": true, + "CharacterPoisonBalloonGruntFemale": true, + "CharacterPoisonBalloonGruntMale": true, + "CharacterPsychicBalloonGruntFemale": true, + "CharacterPsychicBalloonGruntMale": true, + "CharacterRockBalloonGruntFemale": true, + "CharacterRockBalloonGruntMale": true, + "CharacterWaterBalloonGruntFemale": true, + "CharacterWaterBalloonGruntMale": true, + "CharacterGhostBalloonGruntFemale": true, + "CharacterGhostBalloonGruntMale": true, + "CharacterElectricBalloonGruntFemale": true, + "CharacterElectricBalloonGruntMale": true + } + }, + "gyms": + { + "enabled": true, // Filter is enabled + "under_attack": true, // Only gyms that are under attack + "team": "All", // Team change to notify about (i.e. Neutral/Mystic/Valor/Instinct/All) + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + } + }, + "weather": + { + "enabled": true, // Filter is enabled + "types": ["Clear", "Rainy", "PartlyCloudy", "Overcast", "Windy", "Snow", "Fog"] // Only send weather types that are in the list + } } diff --git a/examples/filters/deino.json b/examples/filters/deino.json index ea54be83..e6e3a581 100644 --- a/examples/filters/deino.json +++ b/examples/filters/deino.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [633, 634, 635], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [633, 634, 635], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/ditto.json b/examples/filters/ditto.json index c49bc2b1..7ee0f593 100644 --- a/examples/filters/ditto.json +++ b/examples/filters/ditto.json @@ -1,9 +1,9 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [132], - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [132], + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/dratini.json b/examples/filters/dratini.json index 32e7d469..c2c056da 100644 --- a/examples/filters/dratini.json +++ b/examples/filters/dratini.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [147,148,149], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [147,148,149], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/drilbur.json b/examples/filters/drilbur.json index 20c223c0..b92b0b03 100644 --- a/examples/filters/drilbur.json +++ b/examples/filters/drilbur.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [529, 530], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [529, 530], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/durant.json b/examples/filters/durant.json index 10802e04..7589c943 100644 --- a/examples/filters/durant.json +++ b/examples/filters/durant.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [632], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [632], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/dwebble.json b/examples/filters/dwebble.json index 51bd997a..196f768f 100644 --- a/examples/filters/dwebble.json +++ b/examples/filters/dwebble.json @@ -6,6 +6,6 @@ "min_iv": 0, "max_iv": 100, "type": "Include", - "ignoreMissing": false + "ignore_missing": false } } \ No newline at end of file diff --git a/examples/filters/ex_raids.json b/examples/filters/ex_raids.json index 2d340b80..fa0d3b11 100644 --- a/examples/filters/ex_raids.json +++ b/examples/filters/ex_raids.json @@ -1,19 +1,19 @@ -{ - "eggs": - { - "enabled": true, - "min_lvl": 1, - "max_lvl": 5, - "onlyEx": true - }, - "raids": - { - "enabled": true, - "min_lvl": 1, - "max_lvl": 5, - "pokemon": [], - "type": "Include", - "onlyEx": true, - "ignoreMissing": false - } +{ + "eggs": + { + "enabled": true, + "min_lvl": 1, + "max_lvl": 8, + "only_ex": true + }, + "raids": + { + "enabled": true, + "min_lvl": 1, + "max_lvl": 8, + "pokemon": [], + "type": "Include", + "only_ex": true, + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/feebas.json b/examples/filters/feebas.json index 7390dc98..8a0570c7 100644 --- a/examples/filters/feebas.json +++ b/examples/filters/feebas.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [349,350], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [349,350], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/ferroseed.json b/examples/filters/ferroseed.json index 7880605d..95d7b048 100644 --- a/examples/filters/ferroseed.json +++ b/examples/filters/ferroseed.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [597, 598], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [597, 598], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/gible.json b/examples/filters/gible.json index b4ad002d..78a886ca 100644 --- a/examples/filters/gible.json +++ b/examples/filters/gible.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [443,444,445], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [443,444,445], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/gofest.json b/examples/filters/gofest.json index 69095891..2d160481 100644 --- a/examples/filters/gofest.json +++ b/examples/filters/gofest.json @@ -7,6 +7,6 @@ "max_iv": 100, //Maximum IV of Pokemon to send "type": "Include", //Include or Exclude the `pokemon` list "is_event": true, //Only send Pokemon checked with event accounts (GoFest, etc) - "ignoreMissing": true //Ignore Pokemon missing stats + "ignore_missing": true //Ignore Pokemon missing stats } } \ No newline at end of file diff --git a/examples/filters/golett.json b/examples/filters/golett.json index f4f5be9d..e08b1dff 100644 --- a/examples/filters/golett.json +++ b/examples/filters/golett.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [622, 623], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [622, 623], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/gyms.json b/examples/filters/gyms.json index 0b9879a7..f1b65cf9 100644 --- a/examples/filters/gyms.json +++ b/examples/filters/gyms.json @@ -2,7 +2,7 @@ "gyms": { "enabled": true, - "underAttack": true, + "under_attack": true, "team": "All" } } \ No newline at end of file diff --git a/examples/filters/heatmor.json b/examples/filters/heatmor.json index 40db5beb..d2fd84f6 100644 --- a/examples/filters/heatmor.json +++ b/examples/filters/heatmor.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [631], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [631], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/invasions.json b/examples/filters/invasions.json index 83b526b8..d3df34de 100644 --- a/examples/filters/invasions.json +++ b/examples/filters/invasions.json @@ -1,8 +1,99 @@ -{ - "pokestops": - { - "enabled": true, - "lured": false, - "invasions": true - } +{ + "invasions": + { + "enabled": true, + "invasion_types": { + "CharacterUnset": false, + "CharacterBlanche": true, + "CharacterCandela": true, + "CharacterSpark": true, + "CharacterGruntMale": true, + "CharacterGruntFemale": true, + "CharacterBugGruntFemale": true, + "CharacterBugGruntMale": true, + "CharacterDarknessGruntFemale": true, + "CharacterDarknessGruntMale": true, + "CharacterDarkGruntFemale": true, + "CharacterDarkGruntMale": true, + "CharacterDragonGruntFemale": true, + "CharacterDragonGruntMale": true, + "CharacterFairyGruntFemale": true, + "CharacterFairyGruntMale": true, + "CharacterFightingGruntFemale": true, + "CharacterFightingGruntMale": true, + "CharacterFireGruntFemale": true, + "CharacterFireGruntMale": true, + "CharacterFlyingGruntFemale": true, + "CharacterFlyingGruntMale": true, + "CharacterGrassGruntFemale": true, + "CharacterGrassGruntMale": true, + "CharacterGroundGruntFemale": true, + "CharacterGroundGruntMale": true, + "CharacterIceGruntFemale": true, + "CharacterIceGruntMale": true, + "CharacterMetalGruntFemale": true, + "CharacterMetalGruntMale": true, + "CharacterNormalGruntFemale": true, + "CharacterNormalGruntMale": true, + "CharacterPoisonGruntFemale": true, + "CharacterPoisonGruntMale": true, + "CharacterPsychicGruntFemale": true, + "CharacterPsychicGruntMale": true, + "CharacterRockGruntFemale": true, + "CharacterRockGruntMale": true, + "CharacterWaterGruntFemale": true, + "CharacterWaterGruntMale": true, + "CharacterPlayerTeamLeader": true, + "CharacterExecutiveCliff": true, + "CharacterExecutiveArlo": true, + "CharacterExecutiveSierra": true, + "CharacterGiovanni": true, + "CharacterDecoyGruntMale": true, + "CharacterDecoyGruntFemale": true, + "CharacterGhostGruntFemale": true, + "CharacterGhostGruntMale": true, + "CharacterElectricGruntFemale": true, + "CharacterElectricGruntMale": true, + "CharacterBalloonGruntFemale": true, + "CharacterBalloonGruntMale": true, + "CharacterGruntbFemale": true, + "CharacterGruntbMale": true, + "CharacterBugBalloonGruntFemale": true, + "CharacterBugBalloonGruntMale": true, + "CharacterDarkBalloonGruntFemale": true, + "CharacterDarkBalloonGruntMale": true, + "CharacterDragonBalloonGruntFemale": true, + "CharacterDragonBalloonGruntMale": true, + "CharacterFairyBalloonGruntFemale": true, + "CharacterFairyBalloonGruntMale": true, + "CharacterFightingBalloonGruntFemale": true, + "CharacterFightingBalloonGruntMale": true, + "CharacterFireBalloonGruntFemale": true, + "CharacterFireBalloonGruntMale": true, + "CharacterFlyingBalloonGruntFemale": true, + "CharacterFlyingBalloonGruntMale": true, + "CharacterGrassBalloonGruntFemale": true, + "CharacterGrassBalloonGruntMale": true, + "CharacterGroundBalloonGruntFemale": true, + "CharacterGroundBalloonGruntMale": true, + "CharacterIceBalloonGruntFemale": true, + "CharacterIceBalloonGruntMale": true, + "CharacterMetalBalloonGruntFemale": true, + "CharacterMetalBalloonGruntMale": true, + "CharacterNormalBalloonGruntFemale": true, + "CharacterNormalBalloonGruntMale": true, + "CharacterPoisonBalloonGruntFemale": true, + "CharacterPoisonBalloonGruntMale": true, + "CharacterPsychicBalloonGruntFemale": true, + "CharacterPsychicBalloonGruntMale": true, + "CharacterRockBalloonGruntFemale": true, + "CharacterRockBalloonGruntMale": true, + "CharacterWaterBalloonGruntFemale": true, + "CharacterWaterBalloonGruntMale": true, + "CharacterGhostBalloonGruntFemale": true, + "CharacterGhostBalloonGruntMale": true, + "CharacterElectricBalloonGruntFemale": true, + "CharacterElectricBalloonGruntMale": true + } + } } \ No newline at end of file diff --git a/examples/filters/invasions_leaders.json b/examples/filters/invasions_leaders.json new file mode 100644 index 00000000..534b9c91 --- /dev/null +++ b/examples/filters/invasions_leaders.json @@ -0,0 +1,99 @@ +{ + "invasions": + { + "enabled": true, + "invasion_types": { + "CharacterUnset": false, + "CharacterBlanche": false, + "CharacterCandela": false, + "CharacterSpark": false, + "CharacterGruntMale": false, + "CharacterGruntFemale": false, + "CharacterBugGruntFemale": false, + "CharacterBugGruntMale": false, + "CharacterDarknessGruntFemale": false, + "CharacterDarknessGruntMale": false, + "CharacterDarkGruntFemale": false, + "CharacterDarkGruntMale": false, + "CharacterDragonGruntFemale": false, + "CharacterDragonGruntMale": false, + "CharacterFairyGruntFemale": false, + "CharacterFairyGruntMale": false, + "CharacterFightingGruntFemale": false, + "CharacterFightingGruntMale": false, + "CharacterFireGruntFemale": false, + "CharacterFireGruntMale": false, + "CharacterFlyingGruntFemale": false, + "CharacterFlyingGruntMale": false, + "CharacterGrassGruntFemale": false, + "CharacterGrassGruntMale": false, + "CharacterGroundGruntFemale": false, + "CharacterGroundGruntMale": false, + "CharacterIceGruntFemale": false, + "CharacterIceGruntMale": false, + "CharacterMetalGruntFemale": false, + "CharacterMetalGruntMale": false, + "CharacterNormalGruntFemale": false, + "CharacterNormalGruntMale": false, + "CharacterPoisonGruntFemale": false, + "CharacterPoisonGruntMale": false, + "CharacterPsychicGruntFemale": false, + "CharacterPsychicGruntMale": false, + "CharacterRockGruntFemale": false, + "CharacterRockGruntMale": false, + "CharacterWaterGruntFemale": false, + "CharacterWaterGruntMale": false, + "CharacterPlayerTeamLeader": false, + "CharacterExecutiveCliff": true, + "CharacterExecutiveArlo": true, + "CharacterExecutiveSierra": true, + "CharacterGiovanni": true, + "CharacterDecoyGruntMale": true, + "CharacterDecoyGruntFemale": true, + "CharacterGhostGruntFemale": false, + "CharacterGhostGruntMale": false, + "CharacterElectricGruntFemale": false, + "CharacterElectricGruntMale": false, + "CharacterBalloonGruntFemale": false, + "CharacterBalloonGruntMale": false, + "CharacterGruntbFemale": false, + "CharacterGruntbMale": false, + "CharacterBugBalloonGruntFemale": false, + "CharacterBugBalloonGruntMale": false, + "CharacterDarkBalloonGruntFemale": false, + "CharacterDarkBalloonGruntMale": false, + "CharacterDragonBalloonGruntFemale": false, + "CharacterDragonBalloonGruntMale": false, + "CharacterFairyBalloonGruntFemale": false, + "CharacterFairyBalloonGruntMale": false, + "CharacterFightingBalloonGruntFemale": false, + "CharacterFightingBalloonGruntMale": false, + "CharacterFireBalloonGruntFemale": false, + "CharacterFireBalloonGruntMale": false, + "CharacterFlyingBalloonGruntFemale": false, + "CharacterFlyingBalloonGruntMale": false, + "CharacterGrassBalloonGruntFemale": false, + "CharacterGrassBalloonGruntMale": false, + "CharacterGroundBalloonGruntFemale": false, + "CharacterGroundBalloonGruntMale": false, + "CharacterIceBalloonGruntFemale": false, + "CharacterIceBalloonGruntMale": false, + "CharacterMetalBalloonGruntFemale": false, + "CharacterMetalBalloonGruntMale": false, + "CharacterNormalBalloonGruntFemale": false, + "CharacterNormalBalloonGruntMale": false, + "CharacterPoisonBalloonGruntFemale": false, + "CharacterPoisonBalloonGruntMale": false, + "CharacterPsychicBalloonGruntFemale": false, + "CharacterPsychicBalloonGruntMale": false, + "CharacterRockBalloonGruntFemale": false, + "CharacterRockBalloonGruntMale": false, + "CharacterWaterBalloonGruntFemale": false, + "CharacterWaterBalloonGruntMale": false, + "CharacterGhostBalloonGruntFemale": false, + "CharacterGhostBalloonGruntMale": false, + "CharacterElectricBalloonGruntFemale": false, + "CharacterElectricBalloonGruntMale": false + } + } +} \ No newline at end of file diff --git a/examples/filters/lake_trio.json b/examples/filters/lake_trio.json index 8c2063ec..6a2c130b 100644 --- a/examples/filters/lake_trio.json +++ b/examples/filters/lake_trio.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [480,481,482], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [480,481,482], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/lapras.json b/examples/filters/lapras.json index 8e17226b..84988c3d 100644 --- a/examples/filters/lapras.json +++ b/examples/filters/lapras.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [131], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [131], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/larvitar.json b/examples/filters/larvitar.json index e5f13194..e48df2d7 100644 --- a/examples/filters/larvitar.json +++ b/examples/filters/larvitar.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [246,247,248], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [246,247,248], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/legendary_raids.json b/examples/filters/legendary_raids.json index dd2343f8..7758f7df 100644 --- a/examples/filters/legendary_raids.json +++ b/examples/filters/legendary_raids.json @@ -1,17 +1,17 @@ -{ - "eggs": - { - "enabled": true, - "min_lvl": 5, - "max_lvl": 5 - }, - "raids": - { - "enabled": true, - "min_lvl": 5, - "max_lvl": 5, - "pokemon": [], - "type": "Include", - "ignoreMissing": false - } +{ + "eggs": + { + "enabled": true, + "min_lvl": 5, + "max_lvl": 5 + }, + "raids": + { + "enabled": true, + "min_lvl": 5, + "max_lvl": 5, + "pokemon": [], + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/litwick.json b/examples/filters/litwick.json index afa67b65..84883417 100644 --- a/examples/filters/litwick.json +++ b/examples/filters/litwick.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [607], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [607], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/lunatone.json b/examples/filters/lunatone.json index 8d6787cc..30a39e6d 100644 --- a/examples/filters/lunatone.json +++ b/examples/filters/lunatone.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [337], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [337], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/lures.json b/examples/filters/lures.json index 6fc388c9..7aafc1c3 100644 --- a/examples/filters/lures.json +++ b/examples/filters/lures.json @@ -1,9 +1,8 @@ -{ - "pokestops": - { - "enabled": true, - "lured": true, - "lure_types": ["Normal", "Glacial", "Mossy", "Magnetic"], - "invasions": false - } -} \ No newline at end of file +{ + "pokestops": + { + "enabled": true, + "lured": true, + "lure_types": ["Normal", "Glacial", "Mossy", "Magnetic", "Rainy"] + } +} diff --git a/examples/filters/magikarp.json b/examples/filters/magikarp.json index 9e8786b1..cd4899a4 100644 --- a/examples/filters/magikarp.json +++ b/examples/filters/magikarp.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [129,130], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [129,130], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/mawile_raids.json b/examples/filters/mawile_raids.json index a9ffd6ab..f0a2146b 100644 --- a/examples/filters/mawile_raids.json +++ b/examples/filters/mawile_raids.json @@ -1,12 +1,12 @@ -{ - "raids": - { - "enabled": true, - "min_lvl": 1, - "max_lvl": 5, - "pokemon": [303], - "type": "Include", - "onlyEx": false, - "ignoreMissing": false - } +{ + "raids": + { + "enabled": true, + "min_lvl": 1, + "max_lvl": 5, + "pokemon": [303], + "type": "Include", + "onlyEx": false, + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/mega_raids.json b/examples/filters/mega_raids.json index bbd94626..248c3f80 100644 --- a/examples/filters/mega_raids.json +++ b/examples/filters/mega_raids.json @@ -12,6 +12,6 @@ "max_lvl": 6, "pokemon": [], "type": "Include", - "ignoreMissing": false + "ignore_missing": false } } \ No newline at end of file diff --git a/examples/filters/noibat.json b/examples/filters/noibat.json index 84c19c86..43bf3246 100644 --- a/examples/filters/noibat.json +++ b/examples/filters/noibat.json @@ -6,6 +6,6 @@ "min_iv": 0, "max_iv": 100, "type": "Include", - "ignoreMissing": false + "ignore_missing": false } } \ No newline at end of file diff --git a/examples/filters/power_level.json b/examples/filters/power_level.json new file mode 100644 index 00000000..757b0a75 --- /dev/null +++ b/examples/filters/power_level.json @@ -0,0 +1,147 @@ +{ + "eggs": { + "enabled": true, + "min_lvl": 1, + "max_lvl": 8, + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + } + }, + "raids": + { + "enabled": true, + "min_lvl": 1, + "max_lvl": 8, + "pokemon": [], + "type": "Include", + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + }, + "ignore_missing": false + }, + "pokestops": + { + "enabled": true, // Filter is enabled + "lured": false, // Only send lured pokestops + "lure_types": ["Normal", "Glacial", "Mossy", "Magnetic"], // All lure types + "invasions": false, // Only send Team Rocket invasion pokestops + // Determines which invasion types to send + "invasionTypes": { + "CharacterUnset": false, + "CharacterBlanche": true, + "CharacterCandela": true, + "CharacterSpark": true, + "CharacterGruntMale": true, + "CharacterGruntFemale": true, + "CharacterBugGruntFemale": true, + "CharacterBugGruntMale": true, + "CharacterDarknessGruntFemale": true, + "CharacterDarknessGruntMale": true, + "CharacterDarkGruntFemale": true, + "CharacterDarkGruntMale": true, + "CharacterDragonGruntFemale": true, + "CharacterDragonGruntMale": true, + "CharacterFairyGruntFemale": true, + "CharacterFairyGruntMale": true, + "CharacterFightingGruntFemale": true, + "CharacterFightingGruntMale": true, + "CharacterFireGruntFemale": true, + "CharacterFireGruntMale": true, + "CharacterFlyingGruntFemale": true, + "CharacterFlyingGruntMale": true, + "CharacterGrassGruntFemale": true, + "CharacterGrassGruntMale": true, + "CharacterGroundGruntFemale": true, + "CharacterGroundGruntMale": true, + "CharacterIceGruntFemale": true, + "CharacterIceGruntMale": true, + "CharacterMetalGruntFemale": true, + "CharacterMetalGruntMale": true, + "CharacterNormalGruntFemale": true, + "CharacterNormalGruntMale": true, + "CharacterPoisonGruntFemale": true, + "CharacterPoisonGruntMale": true, + "CharacterPsychicGruntFemale": true, + "CharacterPsychicGruntMale": true, + "CharacterRockGruntFemale": true, + "CharacterRockGruntMale": true, + "CharacterWaterGruntFemale": true, + "CharacterWaterGruntMale": true, + "CharacterPlayerTeamLeader": true, + "CharacterExecutiveCliff": true, + "CharacterExecutiveArlo": true, + "CharacterExecutiveSierra": true, + "CharacterGiovanni": true, + "CharacterDecoyGruntMale": true, + "CharacterDecoyGruntFemale": true, + "CharacterGhostGruntFemale": true, + "CharacterGhostGruntMale": true, + "CharacterElectricGruntFemale": true, + "CharacterElectricGruntMale": true, + "CharacterBalloonGruntFemale": true, + "CharacterBalloonGruntMale": true, + "CharacterGruntbFemale": true, + "CharacterGruntbMale": true, + "CharacterBugBalloonGruntFemale": true, + "CharacterBugBalloonGruntMale": true, + "CharacterDarkBalloonGruntFemale": true, + "CharacterDarkBalloonGruntMale": true, + "CharacterDragonBalloonGruntFemale": true, + "CharacterDragonBalloonGruntMale": true, + "CharacterFairyBalloonGruntFemale": true, + "CharacterFairyBalloonGruntMale": true, + "CharacterFightingBalloonGruntFemale": true, + "CharacterFightingBalloonGruntMale": true, + "CharacterFireBalloonGruntFemale": true, + "CharacterFireBalloonGruntMale": true, + "CharacterFlyingBalloonGruntFemale": true, + "CharacterFlyingBalloonGruntMale": true, + "CharacterGrassBalloonGruntFemale": true, + "CharacterGrassBalloonGruntMale": true, + "CharacterGroundBalloonGruntFemale": true, + "CharacterGroundBalloonGruntMale": true, + "CharacterIceBalloonGruntFemale": true, + "CharacterIceBalloonGruntMale": true, + "CharacterMetalBalloonGruntFemale": true, + "CharacterMetalBalloonGruntMale": true, + "CharacterNormalBalloonGruntFemale": true, + "CharacterNormalBalloonGruntMale": true, + "CharacterPoisonBalloonGruntFemale": true, + "CharacterPoisonBalloonGruntMale": true, + "CharacterPsychicBalloonGruntFemale": true, + "CharacterPsychicBalloonGruntMale": true, + "CharacterRockBalloonGruntFemale": true, + "CharacterRockBalloonGruntMale": true, + "CharacterWaterBalloonGruntFemale": true, + "CharacterWaterBalloonGruntMale": true, + "CharacterGhostBalloonGruntFemale": true, + "CharacterGhostBalloonGruntMale": true, + "CharacterElectricBalloonGruntFemale": true, + "CharacterElectricBalloonGruntMale": true + }, + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + } + }, + "gyms": + { + "enabled": false, + "under_attack": true, + "team": "All", + "power_level": { + "min_level": 1, + "max_level": 3, + "min_points": 10, + "max_points": 250 + } + } +} \ No newline at end of file diff --git a/examples/filters/pvp1500cp.json b/examples/filters/pvp1500cp.json index 6a1078c2..0222a18d 100644 --- a/examples/filters/pvp1500cp.json +++ b/examples/filters/pvp1500cp.json @@ -1,16 +1,22 @@ { - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 0, - "max_iv": 100, - "min_cp": 0, - "max_cp": 1500, - "great_league": true, - "min_rank": 1, - "max_rank": 25, - "type": "Include", - "ignoreMissing": true - } + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 0, + "max_iv": 100, + "min_cp": 0, + "max_cp": 1500, + "pvp": { + "great": { + "min_rank": 1, + "max_rank": 25, + "min_cp": 1400, + "max_cp": 1500, + "gender": "*" + } + }, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/pvp1500cp_rank1.json b/examples/filters/pvp1500cp_rank1.json index 2e0d5756..baab3b61 100644 --- a/examples/filters/pvp1500cp_rank1.json +++ b/examples/filters/pvp1500cp_rank1.json @@ -1,16 +1,22 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 0, - "max_iv": 100, - "min_cp": 0, - "max_cp": 1500, - "great_league": true, - "min_rank": 1, - "max_rank": 1, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 0, + "max_iv": 100, + "min_cp": 0, + "max_cp": 1500, + "pvp": { + "great": { + "min_rank": 1, + "max_rank": 1, + "min_cp": 1400, + "max_cp": 1500, + "gender": "*" + } + }, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/pvp1500cp_rank5.json b/examples/filters/pvp1500cp_rank5.json index 758f4aef..4befb167 100644 --- a/examples/filters/pvp1500cp_rank5.json +++ b/examples/filters/pvp1500cp_rank5.json @@ -1,16 +1,22 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 0, - "max_iv": 100, - "min_cp": 0, - "max_cp": 1500, - "great_league": true, - "min_rank": 1, - "max_rank": 5, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 0, + "max_iv": 100, + "min_cp": 0, + "max_cp": 1500, + "pvp": { + "great": { + "min_rank": 1, + "max_rank": 5, + "min_cp": 1400, + "max_cp": 1500, + "gender": "*" + } + }, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/pvp2500cp.json b/examples/filters/pvp2500cp.json index 7f0b73ca..c01d7357 100644 --- a/examples/filters/pvp2500cp.json +++ b/examples/filters/pvp2500cp.json @@ -1,16 +1,22 @@ { - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 0, - "max_iv": 100, - "min_cp": 0, - "max_cp": 2500, - "ultra_league": true, - "min_rank": 1, - "max_rank": 25, - "type": "Include", - "ignoreMissing": true + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 0, + "max_iv": 100, + "min_cp": 0, + "max_cp": 2500, + "pvp": { + "ultra": { + "min_rank": 1, + "max_rank": 25, + "min_cp": 2400, + "max_cp": 2500, + "gender": "*" + } + }, + "type": "Include", + "ignore_missing": true } } \ No newline at end of file diff --git a/examples/filters/pvp2500cp_rank1.json b/examples/filters/pvp2500cp_rank1.json index 92e0b194..7219926c 100644 --- a/examples/filters/pvp2500cp_rank1.json +++ b/examples/filters/pvp2500cp_rank1.json @@ -1,16 +1,22 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 0, - "max_iv": 100, - "min_cp": 0, - "max_cp": 2500, - "ultra_league": true, - "min_rank": 1, - "max_rank": 1, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 0, + "max_iv": 100, + "min_cp": 0, + "max_cp": 2500, + "pvp": { + "ultra": { + "min_rank": 1, + "max_rank": 1, + "min_cp": 2400, + "max_cp": 2500, + "gender": "*" + } + }, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/pvp2500cp_rank5.json b/examples/filters/pvp2500cp_rank5.json index 374efac2..1e626876 100644 --- a/examples/filters/pvp2500cp_rank5.json +++ b/examples/filters/pvp2500cp_rank5.json @@ -1,16 +1,22 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [], - "min_iv": 0, - "max_iv": 100, - "min_cp": 0, - "max_cp": 2500, - "ultra_league": true, - "min_rank": 1, - "max_rank": 5, - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 0, + "max_iv": 100, + "min_cp": 0, + "max_cp": 2500, + "pvp": { + "ultra": { + "min_rank": 1, + "max_rank": 5, + "min_cp": 2400, + "max_cp": 2500, + "gender": "*" + } + }, + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/pvp500cp.json b/examples/filters/pvp500cp.json new file mode 100644 index 00000000..25cb8c28 --- /dev/null +++ b/examples/filters/pvp500cp.json @@ -0,0 +1,22 @@ +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 0, + "max_iv": 100, + "min_cp": 0, + "max_cp": 500, + "pvp": { + "little": { + "max_rank": 25, + "min_rank": 1, + "min_cp": 450, + "max_cp": 500, + "gender": "*" + } + }, + "type": "Include", + "ignore_missing": true + } +} \ No newline at end of file diff --git a/examples/filters/pvp500cp_rank1.json b/examples/filters/pvp500cp_rank1.json new file mode 100644 index 00000000..fe29868a --- /dev/null +++ b/examples/filters/pvp500cp_rank1.json @@ -0,0 +1,22 @@ +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 0, + "max_iv": 100, + "min_cp": 0, + "max_cp": 500, + "pvp": { + "little": { + "min_rank": 1, + "max_rank": 1, + "min_cp": 450, + "max_cp": 500, + "gender": "*" + } + }, + "type": "Include", + "ignore_missing": true + } +} \ No newline at end of file diff --git a/examples/filters/pvp500cp_rank5.json b/examples/filters/pvp500cp_rank5.json new file mode 100644 index 00000000..9b775386 --- /dev/null +++ b/examples/filters/pvp500cp_rank5.json @@ -0,0 +1,22 @@ +{ + "pokemon": + { + "enabled": true, + "pokemon": [], + "min_iv": 0, + "max_iv": 100, + "min_cp": 0, + "max_cp": 500, + "pvp": { + "little": { + "min_rank": 1, + "max_rank": 5, + "min_cp": 450, + "max_cp": 500, + "gender": "*" + } + }, + "type": "Include", + "ignore_missing": true + } +} \ No newline at end of file diff --git a/examples/filters/quests.json b/examples/filters/quests.json index 6ea2d9b6..b4cad86f 100644 --- a/examples/filters/quests.json +++ b/examples/filters/quests.json @@ -1,6 +1,6 @@ -{ - "quests": - { - "enabled": true - } +{ + "quests": + { + "enabled": true + } } \ No newline at end of file diff --git a/examples/filters/quests_absol.json b/examples/filters/quests_absol.json index 480851b1..f0432a0f 100644 --- a/examples/filters/quests_absol.json +++ b/examples/filters/quests_absol.json @@ -1,7 +1,7 @@ -{ - "quests": - { - "enabled": true, - "rewards": ["Absol"] - } +{ + "quests": + { + "enabled": true, + "rewards": ["Absol"] + } } \ No newline at end of file diff --git a/examples/filters/quests_aerodactyl.json b/examples/filters/quests_aerodactyl.json index eeb9ffc0..f36fd741 100644 --- a/examples/filters/quests_aerodactyl.json +++ b/examples/filters/quests_aerodactyl.json @@ -1,7 +1,7 @@ -{ - "quests": - { - "enabled": true, - "rewards": ["Aerodactyl"] - } +{ + "quests": + { + "enabled": true, + "rewards": ["Aerodactyl"] + } } \ No newline at end of file diff --git a/examples/filters/quests_chansey.json b/examples/filters/quests_chansey.json index 5282f594..af607cea 100644 --- a/examples/filters/quests_chansey.json +++ b/examples/filters/quests_chansey.json @@ -1,7 +1,7 @@ -{ - "quests": - { - "enabled": true, - "rewards": ["Chansey"] - } +{ + "quests": + { + "enabled": true, + "rewards": ["Chansey"] + } } \ No newline at end of file diff --git a/examples/filters/quests_dratini.json b/examples/filters/quests_dratini.json index 9f6c7d8b..afc563fb 100644 --- a/examples/filters/quests_dratini.json +++ b/examples/filters/quests_dratini.json @@ -1,7 +1,7 @@ -{ - "quests": - { - "enabled": true, - "rewards": ["Dratini"] - } +{ + "quests": + { + "enabled": true, + "rewards": ["Dratini"] + } } \ No newline at end of file diff --git a/examples/filters/quests_golden_pinap.json b/examples/filters/quests_golden_pinap.json index 224ace37..ba34295d 100644 --- a/examples/filters/quests_golden_pinap.json +++ b/examples/filters/quests_golden_pinap.json @@ -1,7 +1,7 @@ -{ - "quests": - { - "enabled": true, - "rewards": ["Silver Pinap"] - } +{ + "quests": + { + "enabled": true, + "rewards": ["Silver Pinap"] + } } \ No newline at end of file diff --git a/examples/filters/quests_lapras.json b/examples/filters/quests_lapras.json index 555ca708..e5758834 100644 --- a/examples/filters/quests_lapras.json +++ b/examples/filters/quests_lapras.json @@ -1,7 +1,7 @@ -{ - "quests": - { - "enabled": true, - "rewards": ["Lapras"] - } +{ + "quests": + { + "enabled": true, + "rewards": ["Lapras"] + } } \ No newline at end of file diff --git a/examples/filters/quests_larvitar.json b/examples/filters/quests_larvitar.json index efe2e4f6..d240aadf 100644 --- a/examples/filters/quests_larvitar.json +++ b/examples/filters/quests_larvitar.json @@ -1,7 +1,7 @@ -{ - "quests": - { - "enabled": true, - "rewards": ["Larvitar"] - } +{ + "quests": + { + "enabled": true, + "rewards": ["Larvitar"] + } } \ No newline at end of file diff --git a/examples/filters/quests_nincada.json b/examples/filters/quests_nincada.json index b0d67914..d615e703 100644 --- a/examples/filters/quests_nincada.json +++ b/examples/filters/quests_nincada.json @@ -1,7 +1,7 @@ -{ - "quests": - { - "enabled": true, - "rewards": ["Nincada"] - } +{ + "quests": + { + "enabled": true, + "rewards": ["Nincada"] + } } \ No newline at end of file diff --git a/examples/filters/quests_rare.json b/examples/filters/quests_rare.json index d1e21523..8cf35e64 100644 --- a/examples/filters/quests_rare.json +++ b/examples/filters/quests_rare.json @@ -1,7 +1,7 @@ -{ - "quests": - { - "enabled": true, - "rewards": ["Spinda","Nincada","Absol","Aerodactyl","Chansey","Larvitar","Dratini","Seel","Lapras","Silver"] - } +{ + "quests": + { + "enabled": true, + "rewards": ["Spinda","Nincada","Absol","Aerodactyl","Chansey","Larvitar","Dratini","Seel","Lapras","Silver"] + } } \ No newline at end of file diff --git a/examples/filters/quests_seel.json b/examples/filters/quests_seel.json index 578bee92..2c627c40 100644 --- a/examples/filters/quests_seel.json +++ b/examples/filters/quests_seel.json @@ -1,7 +1,7 @@ -{ - "quests": - { - "enabled": true, - "rewards": ["Seel"] - } +{ + "quests": + { + "enabled": true, + "rewards": ["Seel"] + } } \ No newline at end of file diff --git a/examples/filters/quests_spinda.json b/examples/filters/quests_spinda.json index b1e3379a..e76656cf 100644 --- a/examples/filters/quests_spinda.json +++ b/examples/filters/quests_spinda.json @@ -1,7 +1,7 @@ -{ - "quests": - { - "enabled": true, - "rewards": ["Spinda"] - } +{ + "quests": + { + "enabled": true, + "rewards": ["Spinda"] + } } \ No newline at end of file diff --git a/examples/filters/raids.json b/examples/filters/raids.json index 01960976..ae43b25d 100644 --- a/examples/filters/raids.json +++ b/examples/filters/raids.json @@ -1,17 +1,17 @@ -{ - "eggs": - { - "enabled": true, - "min_lvl": 1, - "max_lvl": 4 - }, - "raids": - { - "enabled": true, - "min_lvl": 1, - "max_lvl": 4, - "pokemon": [], - "type": "Include", - "ignoreMissing": false - } -} +{ + "eggs": + { + "enabled": true, + "min_lvl": 1, + "max_lvl": 4 + }, + "raids": + { + "enabled": true, + "min_lvl": 1, + "max_lvl": 4, + "pokemon": [], + "type": "Include", + "ignore_missing": false + } +} diff --git a/examples/filters/ralts.json b/examples/filters/ralts.json index 21ec0dfa..f6304362 100644 --- a/examples/filters/ralts.json +++ b/examples/filters/ralts.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [280,281,282], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [280,281,282], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/shieldon.json b/examples/filters/shieldon.json index 46b9669f..5b55f9a7 100644 --- a/examples/filters/shieldon.json +++ b/examples/filters/shieldon.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [410,411], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [410,411], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/shinx_raids.json b/examples/filters/shinx_raids.json index cb5fde29..c3767757 100644 --- a/examples/filters/shinx_raids.json +++ b/examples/filters/shinx_raids.json @@ -1,12 +1,12 @@ -{ - "raids": - { - "enabled": true, - "min_lvl": 1, - "max_lvl": 5, - "pokemon": [403], - "type": "Include", - "onlyEx": false, - "ignoreMissing": false - } +{ + "raids": + { + "enabled": true, + "min_lvl": 1, + "max_lvl": 5, + "pokemon": [403], + "type": "Include", + "only_ex": false, + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/shiny_raids.json b/examples/filters/shiny_raids.json index c24a416f..aa604884 100644 --- a/examples/filters/shiny_raids.json +++ b/examples/filters/shiny_raids.json @@ -1,12 +1,12 @@ -{ - "raids": - { - "enabled": true, - "min_lvl": 1, - "max_lvl": 5, - "pokemon": [1,4,7,10,25,26,27,32,58,74,77,81,88,90,92,96,98,104,105,127,129,133,138,140,142,144,145,146,147,152,155,158,177,179,191,198,200,204,209,225,228,249,250,261,278,296,302,303,307,315,320,333,353,355,359,361,370,374,403,425], - "type": "Include", - "onlyEx": false, - "ignoreMissing": false - } -} \ No newline at end of file +{ + "raids": + { + "enabled": true, + "min_lvl": 1, + "max_lvl": 8, + "pokemon": [1,4,7,10,25,26,27,32,58,74,77,81,88,90,92,96,98,104,105,127,129,133,138,140,142,144,145,146,147,152,155,158,177,179,191,198,200,204,209,225,228,249,250,261,278,296,302,303,307,315,320,333,353,355,359,361,370,374,403,425], + "type": "Include", + "only_ex": false, + "ignore_missing": false + } +} diff --git a/examples/filters/skorupi.json b/examples/filters/skorupi.json index 05b4b7ab..d28b878f 100644 --- a/examples/filters/skorupi.json +++ b/examples/filters/skorupi.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [451,452], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [451,452], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/snorlax.json b/examples/filters/snorlax.json index 31f0aaee..7162a5e4 100644 --- a/examples/filters/snorlax.json +++ b/examples/filters/snorlax.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [143], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [143], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/solrock.json b/examples/filters/solrock.json index 35830ae8..28d8df0f 100644 --- a/examples/filters/solrock.json +++ b/examples/filters/solrock.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [338], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [338], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/ultra_beast_raids.json b/examples/filters/ultra_beast_raids.json new file mode 100644 index 00000000..4da094a0 --- /dev/null +++ b/examples/filters/ultra_beast_raids.json @@ -0,0 +1,19 @@ +{ + "eggs": + { + "enabled": true, + "min_lvl": 7, + "max_lvl": 8, + "only_ex": true + }, + "raids": + { + "enabled": true, + "min_lvl": 7, + "max_lvl": 8, + "pokemon": [], + "type": "Include", + "only_ex": true, + "ignore_missing": false + } +} \ No newline at end of file diff --git a/examples/filters/unown.json b/examples/filters/unown.json index 8058642c..8f23825c 100644 --- a/examples/filters/unown.json +++ b/examples/filters/unown.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [201], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [201], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/wailmer.json b/examples/filters/wailmer.json index 7825b1fe..d012c829 100644 --- a/examples/filters/wailmer.json +++ b/examples/filters/wailmer.json @@ -1,11 +1,11 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [320,321], - "min_iv": 0, - "max_iv": 100, - "type": "Include", - "ignoreMissing": false - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [320,321], + "min_iv": 0, + "max_iv": 100, + "type": "Include", + "ignore_missing": false + } } \ No newline at end of file diff --git a/examples/filters/xl_karp.json b/examples/filters/xl_karp.json index 3c8716c7..88a9d625 100644 --- a/examples/filters/xl_karp.json +++ b/examples/filters/xl_karp.json @@ -1,10 +1,10 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [129], - "size": "Big", - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [129], + "size": "Big", + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/filters/xs_rat.json b/examples/filters/xs_rat.json index 5dfb57de..72b901c1 100644 --- a/examples/filters/xs_rat.json +++ b/examples/filters/xs_rat.json @@ -1,10 +1,10 @@ -{ - "pokemon": - { - "enabled": true, - "pokemon": [19], - "size": "Tiny", - "type": "Include", - "ignoreMissing": true - } +{ + "pokemon": + { + "enabled": true, + "pokemon": [19], + "size": "Tiny", + "type": "Include", + "ignore_missing": true + } } \ No newline at end of file diff --git a/examples/geofences/Paris.txt b/examples/geofences/Paris.txt index a54fbf22..36351107 100644 --- a/examples/geofences/Paris.txt +++ b/examples/geofences/Paris.txt @@ -1,5 +1,5 @@ -[Paris] -0.0002,-9.28888 -0.0030,-9.41888 -0.0012,-9.33888 +[Paris] +0.0002,-9.28888 +0.0030,-9.41888 +0.0012,-9.33888 0.0031,-9.55888 \ No newline at end of file diff --git a/examples/geofences/ParisLondon.txt b/examples/geofences/ParisLondon.txt index 5a599043..e14489e3 100644 --- a/examples/geofences/ParisLondon.txt +++ b/examples/geofences/ParisLondon.txt @@ -1,8 +1,8 @@ -[Paris] -0.0002,-9.28888 -0.0030,-9.41888 -0.0012,-9.33888 -0.0031,-9.55888 -[London] -30.111,-110.0001 +[Paris] +0.0002,-9.28888 +0.0030,-9.41888 +0.0012,-9.33888 +0.0031,-9.55888 +[London] +30.111,-110.0001 22.441,-107.0004 \ No newline at end of file diff --git a/examples/roles.examples.json b/examples/roles.examples.json new file mode 100644 index 00000000..12c0ba6d --- /dev/null +++ b/examples/roles.examples.json @@ -0,0 +1,52 @@ +{ + "guild id goes here for role": { + "name": "Subscriber", + "moderator": false, + "permissions": [ + "Raids", + "Quests", + "Invasions", + "Lures", + "Gyms" + ] + }, + "guild id goes here for role": { + "name": "Subscriber6", + "moderator": false, + "permissions": [ + "Pokemon", + "PvP", + "Raids", + "Quests", + "Invasions", + "Lures", + "Gyms" + ] + }, + "618612745377677333": { + "name": "Subscriber12", + "moderator": false, + "permissions": [ + "Pokemon", + "PvP", + "Raids", + "Quests", + "Invasions", + "Lures", + "Gyms" + ] + }, + "560541321568190484": { + "name": "Moderator test", + "moderator": true, + "permissions": [ + "Pokemon", + "PvP", + "Raids", + "Quests", + "Invasions", + "Lures", + "Gyms" + ] + } +} diff --git a/examples/templates/Flo/lures.example.json b/examples/templates/Flo/lures.example.json index 32d55137..8a6a5328 100644 --- a/examples/templates/Flo/lures.example.json +++ b/examples/templates/Flo/lures.example.json @@ -7,19 +7,11 @@ "height": 175, "scale": 1, "markers": [{ - "url": "https://raw.githubusercontent.com/versx/WhMgr-Assets/master/original/misc/pokestop.png", - "latitude": #(lat), - "longitude": #(lon), - "x_offset": 0, - "y_offset": 0, - "width": 32, - "height": 32 - },{ "url": "#(url2)", "latitude": #(lat), "longitude": #(lon), "x_offset": 0, - "y_offset": -25, + "y_offset": 0, "width": 32, "height": 32 }] diff --git a/examples/templates/Flo/pokemon.example.json b/examples/templates/Flo/pokemon.example.json index 745464de..84e3f9be 100644 --- a/examples/templates/Flo/pokemon.example.json +++ b/examples/templates/Flo/pokemon.example.json @@ -6,7 +6,30 @@ "width": 300, "height": 175, "scale": 1, - "markers": [{ + "markers": [ + #if(pokestops != nil): + #for(pokestop in pokestops): + { + "url": "#(pokestop.marker)", + "latitude": #(pokestop.lat), + "longitude": #(pokestop.lon), + "width": 24, + "height": 24 + }, + #endfor + #endif + #if(gyms != nil): + #for(gym in gyms): + { + "url": "#(gym.marker)", + "latitude": #(gym.lat), + "longitude": #(gym.lon), + "width": 24, + "height": 24 + }, + #endfor + #endif + { "url": "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/ICONS/ICONS/misc/grass.png", "latitude": #(lat), "longitude": #(lon), @@ -14,7 +37,8 @@ "y_offset": 0, "width": 48, "height": 48 - },{ + }, + { "url": "#(url2)", "latitude": #(lat), "longitude": #(lon), @@ -23,4 +47,4 @@ "width": 32, "height": 32 }] -} \ No newline at end of file +} diff --git a/examples/templates/Flo/quests.example.json b/examples/templates/Flo/quests.example.json index 8e47c0cb..78708609 100644 --- a/examples/templates/Flo/quests.example.json +++ b/examples/templates/Flo/quests.example.json @@ -10,16 +10,16 @@ "url": "https://raw.githubusercontent.com/versx/WhMgr-Assets/master/original/misc/pokestop.png", "latitude": #(lat), "longitude": #(lon), - "height": "32", - "width": "32", + "height": 32, + "width": 32, "x_offset": 0, "y_offset": 0 },{ "url": "#(url2)", "latitude": #(lat), "longitude": #(lon), - "height": "32", - "width": "32", + "height": 32, + "width": 32, "x_offset": 0, "y_offset": -25 }] diff --git a/examples/templates/versx/invasions.example.json b/examples/templates/versx/invasions.example.json index c531eef0..d558b9db 100644 --- a/examples/templates/versx/invasions.example.json +++ b/examples/templates/versx/invasions.example.json @@ -17,7 +17,7 @@ },{ "url": "<%= url2 %>", "latitude": <%= lat %>, - "longitude": <%= lat %>, + "longitude": <%= lon %>, "x_offset": 0, "y_offset": -25, "width": 32, diff --git a/examples/templates/versx/lures.example.json b/examples/templates/versx/lures.example.json index 4679ba32..97ace4d4 100644 --- a/examples/templates/versx/lures.example.json +++ b/examples/templates/versx/lures.example.json @@ -7,19 +7,11 @@ "height": 175, "scale": 1, "markers": [{ - "url": "https://raw.githubusercontent.com/versx/WhMgr-Assets/master/original/misc/pokestop.png", - "latitude": <%= lat %>, - "longitude": <%= lon %>, - "x_offset": 0, - "y_offset": 0, - "width": 32, - "height": 32 - },{ "url": "<%= url2 %>", "latitude": <%= lat %>, "longitude": <%= lon %>, "x_offset": 0, - "y_offset": -25, + "y_offset": 0, "width": 32, "height": 32 }] diff --git a/examples/templates/versx/pokemon.example.json b/examples/templates/versx/pokemon.example.json index c678954c..6adb33e7 100644 --- a/examples/templates/versx/pokemon.example.json +++ b/examples/templates/versx/pokemon.example.json @@ -6,7 +6,30 @@ "width": 300, "height": 175, "scale": 1, - "markers": [{ + "markers": [ + <% if (typeof(pokestops) !== 'undefined') { + pokestops.forEach(function(pokestop) { %> + { + "url": "<%= pokestop.marker %>", + "latitude": <%= pokestop.lat %>, + "longitude": <%= pokestop.lon %>, + "width": 24, + "height": 24 + }, + <% }); + } %> + <% if (typeof(gyms) !== 'undefined') { + gyms.forEach(function(gym) { %> + { + "url": "<%= gym.marker %>", + "latitude": <%= gym.lat %>, + "longitude": <%= gym.lon %>, + "width": 24, + "height": 24 + }, + <% }); + } %> + { "url": "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/ICONS/ICONS/misc/grass.png", "latitude": <%= lat %>, "longitude": <%= lon %>, diff --git a/images/eggs.png b/images/eggs.png deleted file mode 100644 index 57e8931b..00000000 Binary files a/images/eggs.png and /dev/null differ diff --git a/images/gyms.png b/images/gyms.png deleted file mode 100644 index d2c16f7b..00000000 Binary files a/images/gyms.png and /dev/null differ diff --git a/images/invasions.png b/images/invasions.png deleted file mode 100644 index 2a05d51e..00000000 Binary files a/images/invasions.png and /dev/null differ diff --git a/images/lure.png b/images/lure.png deleted file mode 100644 index 0811d938..00000000 Binary files a/images/lure.png and /dev/null differ diff --git a/images/lure_glacial.png b/images/lure_glacial.png deleted file mode 100644 index a0d618e2..00000000 Binary files a/images/lure_glacial.png and /dev/null differ diff --git a/images/lure_magnetic.png b/images/lure_magnetic.png deleted file mode 100644 index 8d7d3d2c..00000000 Binary files a/images/lure_magnetic.png and /dev/null differ diff --git a/images/lure_mossy.png b/images/lure_mossy.png deleted file mode 100644 index 1f7ebf04..00000000 Binary files a/images/lure_mossy.png and /dev/null differ diff --git a/images/pkmn.png b/images/pkmn.png deleted file mode 100644 index 181c908c..00000000 Binary files a/images/pkmn.png and /dev/null differ diff --git a/images/pvp.png b/images/pvp.png deleted file mode 100644 index 74e0c206..00000000 Binary files a/images/pvp.png and /dev/null differ diff --git a/images/quests.png b/images/quests.png deleted file mode 100644 index df6358e4..00000000 Binary files a/images/quests.png and /dev/null differ diff --git a/images/raids.png b/images/raids.png deleted file mode 100644 index 6446f6fe..00000000 Binary files a/images/raids.png and /dev/null differ diff --git a/install.bat b/install.bat deleted file mode 100644 index 474b850c..00000000 --- a/install.bat +++ /dev/null @@ -1,43 +0,0 @@ -@echo off - -SET prjDir=%CD%\WhMgr -SET binDir=%prjDir%\bin\debug\netcoreapp2.1 - -:: Download .NET Core 2.1 installer -echo "Downloading .NET Core 2.1 installer..." -powershell -Command "iwr -outf ~/Desktop/dotnet-install.ps1 https://dotnet.microsoft.com/download/dotnet-core/scripts/v1/dotnet-install.ps1" - -:: Make installer executable - -:: Install .NET Core 2.1.0 -echo "Launching .NET Core installer..." -powershell -ExecutionPolicy RemoteSigned -File dotnet-install.ps1 -Version 2.1.813 - -:: Delete .NET Core 2.1.0 installer -echo "Deleting .NET Core installer..." -del dotnet-install.ps1 - -:: Clone repository -echo "Cloning repository..." -git clone https://github.com/versx/WhMgr - -:: Change directory into cloned repository -echo "Changing directory..." -cd %prjDir% - -:: Build WhMgr.dll -echo "Building WhMgr..." -dotnet build - -:: Copy example config -echo "Copying example files..." -xcopy /s /e %prjDir%\examples\alarms\* %binDir%\alarms\ -xcopy /s /e %prjDir%\examples\alerts\* %binDir%\alerts\ -xcopy /s /e %prjDir%\examples\discords\* %binDir%\discords\ -xcopy /s /e %prjDir%\examples\filters\* %binDir%\filters\ -xcopy /s /e %prjDir%\examples\geofences\* %binDir%\geofences\ -xcopy /s /e %prjDir%\static\* %binDir%\static\ -xcopy %prjDir%\config.example.json %binDir%\config.json* - -echo "Changing directory to build folder..." -cd %binDir% diff --git a/install.sh b/install.sh deleted file mode 100644 index 0b8d517d..00000000 --- a/install.sh +++ /dev/null @@ -1,40 +0,0 @@ -# Download .NET Core 2.1 installer -echo "Downloading .NET Core 2.1 installer..." -wget https://dotnetwebsite.azurewebsites.net/download/dotnet-core/scripts/v1/dotnet-install.sh - -# Make installer executable -echo "Setting executable permissions..." -chmod +x dotnet-install.sh - -# Install .NET Core 2.1.0 -echo "Launching .NET Core installer..." -./dotnet-install.sh --version 2.1.813 - -# Delete .NET Core 2.1.0 installer -echo "Deleting .NET Core installer..." -rm dotnet-install.sh - -# Clone repository -echo "Cloning repository..." -git clone https://github.com/versx/WhMgr - -# Change directory into cloned repository -echo "Changing directory..." -cd WhMgr - -# Build WhMgr.dll -echo "Building WhMgr..." -~/.dotnet/dotnet build - -# Copy example config -echo "Copying example files..." -cp -R examples/alarms bin/alarms/ -cp -R examples/alerts bin/alerts/ -cp -R examples/discords bin/discords/ -cp -R examples/filters bin/filters/ -cp -R examples/geofences bin/geofences/ -cp -R static/ bin/static/ -cp config.example.json bin/config.json - -echo "Changing directory to build folder..." -cd bin diff --git a/migrate-v4-to-v5.sql b/migrate-v4-to-v5.sql new file mode 100644 index 00000000..a8aecec0 --- /dev/null +++ b/migrate-v4-to-v5.sql @@ -0,0 +1,121 @@ +CREATE TABLE `__EFMigrationsHistory` ( + `MigrationId` varchar(150) NOT NULL, + `ProductVersion` varchar(32) NOT NULL, + PRIMARY KEY (`MigrationId`) +); + +INSERT INTO `__EFMigrationsHistory` VALUES +( + '20210707002802_InitialCreate', + '5.0.13' +), +( + '20210707043736_AddMultiRaidSubSupport', + '5.0.13' +), +( + '20210714054610_AddExRaidGymSubFilter', + '5.0.13' +), +( + '20210909003442_AddMultiInvasionSubSupport', + '5.0.13' +), +( + '20210909012222_AddMultiLureSubSupport', + '5.0.13' +), +( + '20220109043031_ModifyFormsToList', + '5.0.13' +), +( + '20220109043806_RenameCityToAreas', + '5.0.13' +); + +DROP TABLE IF EXISTS `metadata`; +CREATE TABLE `metadata` ( + `key` varchar(255) NOT NULL, + `value` longtext DEFAULT NULL, + PRIMARY KEY (`key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +INSERT IGNORE INTO `metadata` (`key`, `value`) VALUES +('LAST_MODIFIED', '1643133618.555'); + + +ALTER TABLE subscriptions MODIFY COLUMN `status` tinyint(3) unsigned NOT NULL; +ALTER TABLE subscriptions MODIFY COLUMN `icon_style` longtext DEFAULT NULL; +ALTER TABLE subscriptions MODIFY COLUMN `phone_number` longtext DEFAULT NULL; +ALTER TABLE subscriptions MODIFY COLUMN `location` longtext DEFAULT NULL; + + +ALTER TABLE gyms MODIFY COLUMN `name` longtext DEFAULT NULL; +ALTER TABLE gyms MODIFY COLUMN `min_level` smallint(5) unsigned NOT NULL; +ALTER TABLE gyms MODIFY COLUMN `max_level` smallint(5) unsigned NOT NULL; +ALTER TABLE gyms MODIFY COLUMN `pokemon_ids` longtext DEFAULT NULL; +ALTER TABLE gyms MODIFY COLUMN `location` longtext DEFAULT NULL; +ALTER TABLE gyms ADD COLUMN `ex_eligible` tinyint(1) NOT NULL DEFAULT 0; + + +ALTER TABLE raids DROP INDEX `ix_pokemon_id`; +ALTER TABLE raids DROP INDEX `ix_form`; +ALTER TABLE raids MODIFY COLUMN `pokemon_id` longtext DEFAULT NULL; +ALTER TABLE raids CHANGE COLUMN `form` `forms` longtext DEFAULT NULL; +ALTER TABLE raids MODIFY COLUMN `location` longtext DEFAULT NULL; +ALTER TABLE raids CHANGE COLUMN `city` `areas` longtext DEFAULT NULL; +ALTER TABLE raids ADD COLUMN `ex_eligible` tinyint(1) NOT NULL DEFAULT 0; +UPDATE raids SET `pokemon_id` = CONCAT('[', pokemon_id, ']'); +UPDATE raids SET forms=NULL WHERE forms = '' AND forms IS NOT NULL OR forms = ','; + + +ALTER TABLE invasions DROP INDEX `ix_reward_pokemon_id`; +ALTER TABLE invasions MODIFY COLUMN `reward_pokemon_id` longtext DEFAULT NULL; +ALTER TABLE invasions MODIFY COLUMN `grunt_type` longtext DEFAULT NULL; +ALTER TABLE invasions MODIFY COLUMN `pokestop_name` longtext DEFAULT NULL; +ALTER TABLE invasions MODIFY COLUMN `location` longtext DEFAULT NULL; +ALTER TABLE invasions CHANGE COLUMN `city` `areas` longtext DEFAULT NULL; +UPDATE invasions SET `grunt_type` = CONCAT('[', reward_pokemon_id, ']') WHERE grunt_type IS NOT NULL; +UPDATE invasions SET `reward_pokemon_id` = CONCAT('[', reward_pokemon_id, ']') WHERE reward_pokemon_id IS NOT NULL; + + +ALTER TABLE lures MODIFY COLUMN `pokestop_name` longtext DEFAULT NULL; +ALTER TABLE lures MODIFY COLUMN `lure_type` longtext DEFAULT NULL; +ALTER TABLE lures MODIFY COLUMN `location` longtext DEFAULT NULL; +ALTER TABLE lures CHANGE COLUMN `city` `areas` longtext DEFAULT NULL; +UPDATE lures SET `lure_type` = CONCAT('[', lure_type, ']') WHERE lure_type IS NOT NULL; + + +ALTER TABLE pokemon DROP INDEX `ix_form`; +ALTER TABLE pokemon MODIFY COLUMN `pokemon_id` longtext NOT NULL; +ALTER TABLE pokemon CHANGE COLUMN `form` `forms` longtext DEFAULT NULL; +ALTER TABLE pokemon MODIFY COLUMN `min_cp` int(11) NOT NULL; +ALTER TABLE pokemon MODIFY COLUMN `min_iv` int(11) NOT NULL; +ALTER TABLE pokemon MODIFY COLUMN `iv_list` longtext DEFAULT NULL; +ALTER TABLE pokemon MODIFY COLUMN `min_lvl` int(11) NOT NULL; +ALTER TABLE pokemon MODIFY COLUMN `max_lvl` int(11) NOT NULL; +ALTER TABLE pokemon MODIFY COLUMN `gender` longtext DEFAULT NULL; +ALTER TABLE pokemon MODIFY COLUMN `size` tinyint(3) unsigned NOT NULL; +ALTER TABLE pokemon MODIFY COLUMN `location` longtext DEFAULT NULL; +ALTER TABLE pokemon CHANGE COLUMN `city` `areas` longtext DEFAULT NULL; +UPDATE pokemon SET `pokemon_id` = CONCAT('[', pokemon_id, ']'); +UPDATE pokemon SET forms=NULL WHERE forms = '' AND forms IS NOT NULL OR forms = ','; + + +ALTER TABLE pvp DROP INDEX `ix_form`; +ALTER TABLE pvp MODIFY COLUMN `pokemon_id` longtext NOT NULL; +ALTER TABLE pvp CHANGE COLUMN `form` `forms` longtext DEFAULT NULL; +ALTER TABLE pvp MODIFY COLUMN `league` longtext NOT NULL; +ALTER TABLE pvp MODIFY COLUMN `min_rank` int(11) NOT NULL; +ALTER TABLE pvp MODIFY COLUMN `min_percent` double NOT NULL; +ALTER TABLE pvp MODIFY COLUMN `location` longtext DEFAULT NULL; +ALTER TABLE pvp CHANGE COLUMN `city` `areas` longtext DEFAULT NULL; +UPDATE pvp SET `pokemon_id` = CONCAT('[', pokemon_id, ']'); +UPDATE pvp SET forms=NULL WHERE forms = '' AND forms IS NOT NULL OR forms = ','; + + +ALTER TABLE quests DROP INDEX `ix_reward`; +ALTER TABLE quests MODIFY COLUMN `pokestop_name` longtext DEFAULT NULL; +ALTER TABLE quests MODIFY COLUMN `reward` longtext DEFAULT NULL; +ALTER TABLE quests MODIFY COLUMN `location` longtext DEFAULT NULL; +ALTER TABLE quests CHANGE COLUMN `city` `areas` longtext DEFAULT NULL; diff --git a/migrations/1.sql b/migrations/1.sql deleted file mode 100644 index 5a0157bf..00000000 --- a/migrations/1.sql +++ /dev/null @@ -1,94 +0,0 @@ -CREATE TABLE `subscriptions` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `guild_id` bigint(20) DEFAULT NULL, - `user_id` bigint(20) DEFAULT NULL, - `enabled` int(11) DEFAULT 1, - `distance` int(11) DEFAULT 0, - `latitude` double DEFAULT NULL, - `longitude` double DEFAULT NULL, - `icon_style` text DEFAULT NULL, - PRIMARY KEY (`id`) -); - -CREATE TABLE IF NOT EXISTS `pokemon` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `subscription_id` int(11) NOT NULL DEFAULT 0, - `guild_id` bigint(20) DEFAULT NULL, - `user_id` bigint(20) DEFAULT NULL, - `pokemon_id` int(11) DEFAULT NULL, - `form` text DEFAULT NULL, - `min_cp` int(11) DEFAULT 0, - `min_iv` int(11) DEFAULT NULL, - `min_lvl` int(11) DEFAULT 0, - `max_lvl` int(11) DEFAULT 35, - `gender` varchar(1) DEFAULT '*', - `iv_list` longtext DEFAULT NULL, - `city` varchar(64) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FK_pokemon_subscriptions_subscription_id` (`subscription_id`), - CONSTRAINT `FK_pokemon_subscriptions_subscription_id` FOREIGN KEY (`subscription_id`) REFERENCES `subscriptions` (`id`) -); - -CREATE TABLE IF NOT EXISTS `raids` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `subscription_id` int(11) NOT NULL DEFAULT 0, - `guild_id` bigint(20) DEFAULT NULL, - `user_id` bigint(20) DEFAULT NULL, - `pokemon_id` int(11) DEFAULT NULL, - `form` text DEFAULT NULL, - `city` varchar(64) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FK_raid_subscriptions_subscription_id` (`subscription_id`), - CONSTRAINT `FK_raid_subscriptions_subscription_id` FOREIGN KEY (`subscription_id`) REFERENCES `subscriptions` (`id`) -); - -CREATE TABLE IF NOT EXISTS `quests` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `subscription_id` int(11) NOT NULL DEFAULT 0, - `guild_id` bigint(20) DEFAULT NULL, - `user_id` bigint(20) DEFAULT NULL, - `reward` text DEFAULT NULL, - `city` varchar(64) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FK_quest_subscriptions_subscription_id` (`subscription_id`), - CONSTRAINT `FK_quest_subscriptions_subscription_id` FOREIGN KEY (`subscription_id`) REFERENCES `subscriptions` (`id`) -); - -CREATE TABLE IF NOT EXISTS `gyms` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `subscription_id` int(11) NOT NULL DEFAULT 0, - `guild_id` bigint(20) DEFAULT NULL, - `user_id` bigint(20) DEFAULT NULL, - `name` varchar(128) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FK_gym_subscriptions_subscription_id` (`subscription_id`), - CONSTRAINT `FK_gym_subscriptions_subscription_id` FOREIGN KEY (`subscription_id`) REFERENCES `subscriptions` (`id`) -); - -CREATE TABLE IF NOT EXISTS `invasions` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `subscription_id` int(11) NOT NULL DEFAULT 0, - `guild_id` bigint(20) DEFAULT NULL, - `user_id` bigint(20) DEFAULT NULL, - `reward_pokemon_id` int(11) DEFAULT NULL, - `city` varchar(64) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FK_invasion_subscriptions_subscription_id` (`subscription_id`), - CONSTRAINT `FK_invasion_subscriptions_subscription_id` FOREIGN KEY (`subscription_id`) REFERENCES `subscriptions` (`id`) -); - -CREATE TABLE IF NOT EXISTS `pvp` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `guild_id` bigint(20) NOT NULL, - `user_id` bigint(20) NOT NULL, - `subscription_id` int(11) NOT NULL, - `pokemon_id` int(11) NOT NULL, - `form` varchar(255) DEFAULT NULL, - `league` varchar(255) NOT NULL, - `min_rank` int(11) NOT NULL DEFAULT 25, - `min_percent` double NOT NULL DEFAULT 90, - `city` varchar(64) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FK_pvp_subscriptions_subscription_id` (`subscription_id`), - CONSTRAINT `FK_pvp_subscriptions_subscription_id` FOREIGN KEY (`subscription_id`) REFERENCES `subscriptions` (`id`) -); \ No newline at end of file diff --git a/migrations/10.sql b/migrations/10.sql deleted file mode 100644 index 8fd43355..00000000 --- a/migrations/10.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `pokemon` -MODIFY COLUMN `pokemon_id` text NOT NULL; - -ALTER TABLE `pokemon` -DROP INDEX `ix_pokemon_id`; \ No newline at end of file diff --git a/migrations/11.sql b/migrations/11.sql deleted file mode 100644 index c5b85d46..00000000 --- a/migrations/11.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `invasions` -MODIFY COLUMN `reward_pokemon_id` text DEFAULT NULL; \ No newline at end of file diff --git a/migrations/12.sql b/migrations/12.sql deleted file mode 100644 index d2eae96b..00000000 --- a/migrations/12.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `pvp` -DROP INDEX `ix_pokemon_id`; - -ALTER TABLE `pvp` -MODIFY COLUMN `pokemon_id` text NOT NULL; diff --git a/migrations/2.sql b/migrations/2.sql deleted file mode 100644 index ba840dd1..00000000 --- a/migrations/2.sql +++ /dev/null @@ -1,2 +0,0 @@ - -ALTER TABLE `subscriptions` ADD COLUMN `phone_number` varchar(10) DEFAULT NULL; diff --git a/migrations/3.sql b/migrations/3.sql deleted file mode 100644 index 0ef87cc2..00000000 --- a/migrations/3.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `pokemon` MODIFY COLUMN `city` longtext DEFAULT NULL; -ALTER TABLE `pvp` MODIFY COLUMN `city` longtext DEFAULT NULL; -ALTER TABLE `raids` MODIFY COLUMN `city` longtext DEFAULT NULL; -ALTER TABLE `quests` MODIFY COLUMN `city` longtext DEFAULT NULL; -ALTER TABLE `invasions` MODIFY COLUMN `city` longtext DEFAULT NULL; \ No newline at end of file diff --git a/migrations/4.sql b/migrations/4.sql deleted file mode 100644 index 694db311..00000000 --- a/migrations/4.sql +++ /dev/null @@ -1,47 +0,0 @@ -CREATE TABLE IF NOT EXISTS `lures` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `subscription_id` int(11) NOT NULL DEFAULT 0, - `guild_id` bigint(20) DEFAULT NULL, - `user_id` bigint(20) DEFAULT NULL, - `lure_type` varchar(20) NOT NULL, - `city` text DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FK_lure_subscriptions_subscription_id` (`subscription_id`), - CONSTRAINT `FK_lure_subscriptions_subscription_id` FOREIGN KEY (`subscription_id`) REFERENCES `subscriptions` (`id`) -); - - -ALTER TABLE subscriptions ADD KEY ix_server (guild_id, user_id); -ALTER TABLE subscriptions ADD KEY ix_enabled (enabled); - -ALTER TABLE pokemon MODIFY COLUMN pokemon_id smallint(5) unsigned NOT NULL; -ALTER TABLE pokemon MODIFY COLUMN iv_list text DEFAULT NULL; -ALTER TABLE pokemon MODIFY COLUMN city text DEFAULT NULL; -ALTER TABLE pokemon ADD KEY ix_server (guild_id, user_id); -ALTER TABLE pokemon ADD KEY ix_pokemon_id (pokemon_id); - -ALTER TABLE pvp MODIFY COLUMN pokemon_id smallint(5) unsigned NOT NULL; -ALTER TABLE pvp MODIFY COLUMN city text DEFAULT NULL; -ALTER TABLE pvp ADD KEY ix_server (guild_id, user_id); -ALTER TABLE pvp ADD KEY ix_pokemon_id (pokemon_id); - -ALTER TABLE raids MODIFY COLUMN pokemon_id smallint(5) unsigned NOT NULL; -ALTER TABLE raids MODIFY COLUMN city text DEFAULT NULL; -ALTER TABLE raids ADD KEY ix_server (guild_id, user_id); -ALTER TABLE raids ADD KEY ix_pokemon_id (pokemon_id); - -ALTER TABLE quests MODIFY COLUMN city text DEFAULT NULL; -ALTER TABLE quests ADD KEY ix_server (guild_id, user_id); - -ALTER TABLE invasions MODIFY COLUMN city text DEFAULT NULL; -ALTER TABLE invasions MODIFY COLUMN reward_pokemon_id smallint(5) unsigned NOT NULL; -ALTER TABLE invasions ADD KEY ix_server (guild_id, user_id); -ALTER TABLE invasions ADD KEY ix_reward_pokemon_id (reward_pokemon_id); - -ALTER TABLE gyms ADD KEY ix_server (guild_id, user_id); -ALTER TABLE gyms ADD KEY ix_name (name); - - -UPDATE subscriptions SET latitude=0 WHERE latitude IS NULL; -UPDATE subscriptions SET longitude=0 WHERE longitude IS NULL; -UPDATE subscriptions SET phone_number=NULL WHERE phone_number=''; diff --git a/migrations/5.sql b/migrations/5.sql deleted file mode 100644 index c349d7b9..00000000 --- a/migrations/5.sql +++ /dev/null @@ -1,8 +0,0 @@ -ALTER TABLE `gyms` -ADD COLUMN `min_level` tinyint(1) unsigned DEFAULT 0; - -ALTER TABLE `gyms` -ADD COLUMN `max_level` tinyint(1) unsigned DEFAULT 0; - -ALTER TABLE `gyms` -ADD COLUMN `pokemon_ids` text DEFAULT NULL; diff --git a/migrations/6.sql b/migrations/6.sql deleted file mode 100644 index 5e04e63d..00000000 --- a/migrations/6.sql +++ /dev/null @@ -1,8 +0,0 @@ -ALTER TABLE `invasions` -MODIFY COLUMN `reward_pokemon_id` SMALLINT(5) DEFAULT NULL; - -ALTER TABLE `invasions` -ADD COLUMN `pokestop_name` VARCHAR(255) DEFAULT NULL; - -ALTER TABLE `invasions` -ADD COLUMN `grunt_type` TINYINT(2) DEFAULT NULL; diff --git a/migrations/7.sql b/migrations/7.sql deleted file mode 100644 index 66739ee8..00000000 --- a/migrations/7.sql +++ /dev/null @@ -1,52 +0,0 @@ -ALTER TABLE `subscriptions` -DROP COLUMN `distance`; - -ALTER TABLE `subscriptions` -DROP COLUMN `latitude`; - -ALTER TABLE `subscriptions` -DROP COLUMN `longitude`; - -ALTER TABLE `subscriptions` -ADD COLUMN `location` varchar(32) DEFAULT NULL; - -ALTER TABLE `pokemon` -ADD COLUMN `location` varchar(32) DEFAULT NULL; - -ALTER TABLE `pvp` -ADD COLUMN `location` varchar(32) DEFAULT NULL; - -ALTER TABLE `raids` -ADD COLUMN `location` varchar(32) DEFAULT NULL; - -ALTER TABLE `quests` -ADD COLUMN `location` varchar(32) DEFAULT NULL; - -ALTER TABLE `invasions` -ADD COLUMN `location` varchar(32) DEFAULT NULL; - -ALTER TABLE `lures` -ADD COLUMN `location` varchar(32) DEFAULT NULL; - -ALTER TABLE `gyms` -ADD COLUMN `location` varchar(32) DEFAULT NULL; - -CREATE TABLE `locations` ( - `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `subscription_id` int(11) NOT NULL DEFAULT 0, - `guild_id` bigint(20) DEFAULT NULL, - `user_id` bigint(20) DEFAULT NULL, - `name` varchar(32) NOT NULL, - `distance` int(11) DEFAULT 0, - `latitude` double DEFAULT 0, - `longitude` double DEFAULT 0, - PRIMARY KEY (`id`), - KEY `FK_location_subscriptions_subscription_id` (`subscription_id`), - CONSTRAINT `FK_location_subscriptions_subscription_id` FOREIGN KEY (`subscription_id`) REFERENCES `subscriptions` (`id`) -); - -ALTER TABLE `subscriptions` -DROP COLUMN `enabled`; - -ALTER TABLE `subscriptions` -ADD COLUMN `status` smallint(5) unsigned DEFAULT 127; diff --git a/migrations/8.sql b/migrations/8.sql deleted file mode 100644 index 493afe66..00000000 --- a/migrations/8.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE pokemon -ADD COLUMN `size` tinyint(1) DEFAULT 0; diff --git a/migrations/9.sql b/migrations/9.sql deleted file mode 100644 index 4eecd860..00000000 --- a/migrations/9.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `quests` -ADD COLUMN `pokestop_name` VARCHAR(255) DEFAULT NULL; - -ALTER TABLE `lures` -ADD COLUMN `pokestop_name` VARCHAR(255) DEFAULT NULL; diff --git a/mkdocs.yml b/mkdocs.yml index e610b010..28843c6c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,6 +1,6 @@ site_name: Webhook Manager site_url: https://github.com/versx/WhMgr -site_description: Webhook manager +site_description: Webhook Manager site_author: versx repo_url: https://github.com/versx/whmgr/ @@ -9,36 +9,48 @@ edit_uri: "" theme: name: readthedocs #mkdocs, bootstrap4, cinder, cosmo, cyborg, flatly, ivory, material, readthedocs, slate, yeti -extends: mkdocs -hljs_style: docco +plugins: + - search: + separator: '[\s\-\.]+' + lang: en nav: - - Home: index.md - General: + - Home: index.md - Screenshots: screenshots.md - Terminology: terminology.md - - Updating: updating.md - - User Guide: - - Getting Started: user-guide/getting-started.md - - Config: user-guide/config.md - - Discord: user-guide/discords.md - - Geofences: user-guide/geofences.md - - Alarms: user-guide/alarms.md - - Filters: user-guide/filters.md - - Alerts: user-guide/alerts.md - - DTS: - - Pokemon: user-guide/dts/pokemon.md - - Raids & Eggs: user-guide/dts/raids.md - - Quests: user-guide/dts/quests.md - - Pokestops: user-guide/dts/pokestops.md - - Gyms: user-guide/dts/gyms.md - - Weather: user-guide/dts/weather.md - - Nests: user-guide/dts/nests.md + - Installation: + - Prerequisites: install/prerequisites.md + - Getting Started: install/getting-started.md + - Updating: install/updating.md + - Migrate v4: install/migrate-v4-to-v5.md + - Configuration: + - Config: config/config.md + - Discord: config/discords.md + - Geofences: config/geofences.md + - Alarms: config/alarms.md + - Filters: config/filters.md + - Embeds: config/embeds.md + - DTS: + - Pokemon: dts/pokemon.md + - Raids & Eggs: dts/raids.md + - Quests: dts/quests.md + - Pokestops: dts/pokestops.md + - Invasions: dts/invasions.md + - Gyms: dts/gyms.md + - Weather: dts/weather.md + - Nests: dts/nests.md - Commands: - Subscriptions: commands/subscriptions.md - Owner: commands/owner.md - Other: + - Dashboard: other/dashboard.md + - Defaults: other/defaults.md - Command Line: other/commandline.md + - Geocoding: other/geocoding.md + - PM2: other/pm2.md + - Static Maps: other/staticmaps.md + - Health Checks: other/healthchecks.md # - About: # - Release Notes: about/release-notes.md # - Contributing: about/contributing.md @@ -47,10 +59,7 @@ markdown_extensions: - toc: permalink:  -copyright: Copyright © 2019 versx, Maintained by versx. - -plugins: - - search +copyright: Copyright © 2021, Maintained by versx. extra_css: - css/base.css diff --git a/scripts/install.bat b/scripts/install.bat new file mode 100644 index 00000000..aa4c3840 --- /dev/null +++ b/scripts/install.bat @@ -0,0 +1,47 @@ +@echo off + +SET prjDir=%CD%\WhMgr +SET binDir=%prjDir%\bin + +:: Download .NET 5.0 installer +echo "Downloading .NET 5.0 installer..." +powershell -Command "iwr -outf ~/Desktop/dotnet-install.ps1 https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.ps1" + +:: Make installer executable + +:: Install .NET 5.0 SDK +echo "Launching .NET installer..." +powershell -ExecutionPolicy RemoteSigned -File dotnet-install.ps1 -Version 5.0.404 + +:: Delete .NET 5.0 installer +echo "Deleting .NET installer..." +del dotnet-install.ps1 + +:: Clone repository +echo "Cloning repository..." +git clone https://github.com/versx/WhMgr -b v5-rewrite + +:: Change directory into cloned repository +echo "Changing directory..." +cd %prjDir% + +:: Build WhMgr.dll +echo "Building WhMgr..." +dotnet build + +:: Copy example config +echo "Copying example files..." +xcopy /s /e %prjDir%\examples\discord_auth.json %binDir%\discord_auth.json +xcopy /s /e %prjDir%\examples\roles.example.json %binDir%\wwwroot\static\data\roles.json +xcopy /s /e %prjDir%\examples\configs\* %binDir%\configs\ +xcopy /s /e %binDir%\configs\config.example.json %binDir%\configs\config.json +xcopy /s /e %prjDir%\examples\alarms\* %binDir%\alarms\ +xcopy /s /e %prjDir%\examples\embeds\* %binDir%\embeds\ +xcopy /s /e %prjDir%\examples\discords\* %binDir%\discords\ +xcopy /s /e %prjDir%\examples\filters\* %binDir%\filters\ +xcopy /s /e %prjDir%\examples\geofences\* %binDir%\geofences\ +xcopy /s /e %prjDir%\static\* %binDir%\static\ +curl https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/master-latest.json > %binDir%\static\data\masterfile.json + +echo "Changing directory to build folder..." +cd %binDir% diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100644 index 00000000..33bedb21 --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,44 @@ +# Download .NET 5.0 installer +curl https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.sh > dotnet-install.sh +echo "Downloading .NET 5.0 installer..." + +# Make installer executable +echo "Setting executable permissions..." +chmod +x dotnet-install.sh + +# Install .NET 5.0 SDK +echo "Launching .NET installer..." +./dotnet-install.sh --version 5.0.404 + +# Delete .NET Core 5.0 installer +echo "Deleting .NET installer..." +rm dotnet-install.sh + +# Clone repository +echo "Cloning repository..." +git clone https://github.com/versx/WhMgr -b v5-rewrite + +# Change directory into cloned repository +echo "Changing directory..." +cd WhMgr + +# Build WhMgr.dll +echo "Building WhMgr..." +~/.dotnet/dotnet build + +# Copy example config +echo "Copying example files..." +cp examples/discord_auth.json bin/discord_auth.json +cp examples/roles.example.json bin/wwwroot/static/data/roles.json +cp -R examples/configs bin/configs/ +cp bin/configs/config.example.json bin/configs/config.json +cp -R examples/alarms bin/alarms/ +cp -R examples/embeds bin/embeds/ +cp -R examples/discords bin/discords/ +cp -R examples/filters bin/filters/ +cp -R examples/geofences bin/geofences/ +cp -R static bin/static/ +curl https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/master-latest.json > bin/static/data/masterfile.json + +echo "Changing directory to build folder..." +cd bin diff --git a/scripts/update.bat b/scripts/update.bat new file mode 100644 index 00000000..164995e5 --- /dev/null +++ b/scripts/update.bat @@ -0,0 +1,23 @@ +@echo off + +SET prjDir=%CD% +SET binDir=%prjDir%\bin + +:: Pull latest Git repository +echo "Pulling latest Git repository changes..." +git pull + +:: Build WhMgr.dll +echo "Building WhMgr..." +dotnet build + +:: Copy example config +::echo "Copying example files..." +::xcopy /s /e %prjDir%\examples\embeds\* %binDir%\embeds\ +::xcopy /s /e %prjDir%\examples\filters\* %binDir%\filters\ + +echo "Copying latest master file..." +curl https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/master-latest.json > %binDir%\static\data\masterfile.json +xcopy /y /s /e /d %prjDir%\static\data\cpMultipliers.json %binDir%\static\data\cpMultipliers.json + +echo "Update Complete" diff --git a/update.sh b/scripts/update.sh old mode 100755 new mode 100644 similarity index 83% rename from update.sh rename to scripts/update.sh index 04648f5f..aeffd26d --- a/update.sh +++ b/scripts/update.sh @@ -11,7 +11,7 @@ echo "Building WhMgr..." # Copy example configs if [ "$1" == "examples" ] || [ "$1" == "example" ] || [ "$1" == "all" ]; then echo "Copying examples" - cp -R "examples/alerts" "bin/" + cp -R "examples/embeds" "bin/" cp -R "examples/filters" "bin/" cp -R "examples/alarms" "bin/" cp -R "examples/discords" "bin/" @@ -24,11 +24,10 @@ fi # Copy locale translation files echo "Copying locale translation files... " mkdir -p "bin/static" -cp -R "static/locale" "bin/static/" echo "Copying latest master file..." mkdir -p "bin/static/data" -cp "static/data/masterfile.json" "bin/static/data/masterfile.json" +curl https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/master-latest.json > bin/static/data/masterfile.json cp "static/data/cpMultipliers.json" "bin/static/data/cpMultipliers.json" echo "Update Complete" diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 00000000..251a7883 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,333 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Cc]onfig.json + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +.leu \ No newline at end of file diff --git a/src/Alarms/AlarmList.cs b/src/Alarms/AlarmList.cs deleted file mode 100644 index 3d4a9bf2..00000000 --- a/src/Alarms/AlarmList.cs +++ /dev/null @@ -1,64 +0,0 @@ -namespace WhMgr.Alarms -{ - using System.Collections.Generic; - - using Newtonsoft.Json; - - using WhMgr.Alarms.Models; - - /// - /// Alarm list class - /// - public class AlarmList - { - /// - /// Gets or sets the global toggle for Pokemon alarms - /// - [JsonProperty("enablePokemon")] - public bool EnablePokemon { get; set; } - - /// - /// Gets or sets the global toggle for Raid alarms - /// - [JsonProperty("enableRaids")] - public bool EnableRaids { get; set; } - - /// - /// Gets or sets the global toggle for Quest alarms - /// - [JsonProperty("enableQuests")] - public bool EnableQuests { get; set; } - - /// - /// Gets or sets the global toggle for Pokestops - /// - [JsonProperty("enablePokestops")] - public bool EnablePokestops { get; set; } - - /// - /// Gets or sets the global toggle for Gyms - /// - [JsonProperty("enableGyms")] - public bool EnableGyms { get; set; } - - /// - /// Gets or sets the global toggle for weather - /// - [JsonProperty("enableWeather")] - public bool EnableWeather { get; set; } - - /// - /// Gets or sets the Alarms list - /// - [JsonProperty("alarms")] - public List Alarms { get; set; } - - /// - /// Instantiates a new class - /// - public AlarmList() - { - Alarms = new List(); - } - } -} \ No newline at end of file diff --git a/src/Alarms/Alerts/AlertMessage.cs b/src/Alarms/Alerts/AlertMessage.cs deleted file mode 100644 index 982335bc..00000000 --- a/src/Alarms/Alerts/AlertMessage.cs +++ /dev/null @@ -1,199 +0,0 @@ -namespace WhMgr.Alarms.Alerts -{ - using System; - using System.Collections.Generic; - - public class AlertMessage : Dictionary - { - public static readonly AlertMessage Defaults = new AlertMessage - { - { - AlertMessageType.Pokemon, new AlertMessageSettings - { - AvatarUrl = "", - Content = " (//) L
**Despawn:** ( left)
**Details:** CP: IV: LV:
| **Size:** <#has_weather> | <#is_weather_boosted> (Boosted)
**Moveset:**
<#near_pokestop>**Near Pokestop:** []()
<#is_ditto>**Catch Pokemon:**
<#has_capture_rates> % % %
<#is_event>Go Fest Spawn
<#is_pvp>
**[[Google]()] [[Apple]()] [[Waze]()] [[Scanner]()]**", - IconUrl = "", - Title = "", - Url = "", - Username = " ", - ImageUrl = "", - Footer = new AlertMessageFooter - { - Text = " | ", - IconUrl = "" - } - } - }, - { - AlertMessageType.PokemonMissingStats, new AlertMessageSettings - { - AvatarUrl = "", - Content = "
**Despawn:** ( left)
**Types:**
<#near_pokestop>**Near Pokestop:** []()
**[[Google]()] [[Apple]()] [[Waze]()] [[Scanner]()]**", - IconUrl = "", - Title = "", - Url = "", - Username = " ", - ImageUrl = "", - Footer = new AlertMessageFooter - { - Text = " | ", - IconUrl = "" - } - } - }, - { - AlertMessageType.Gyms, new AlertMessageSettings - { - AvatarUrl = "", - Content = "<#team_changed>Gym changed from to
<#in_battle>Gym is under attack!
**Slots Available:**
<#is_ex> Gym!**[[Google]()] [[Apple]()] [[Waze]()] [[Scanner]()]**", - IconUrl = "", - Title = ": ", - Url = "", - Username = "", - ImageUrl = "", - Footer = new AlertMessageFooter - { - Text = " | ", - IconUrl = "" - } - } - }, - { - AlertMessageType.Raids, new AlertMessageSettings - { - AvatarUrl = "", - Content = " Raid Ends: ( left)
**Perfect CP:** / :white_sun_rain_cloud:
**Worst CP:** / :white_sun_rain_cloud:
**Types:** | **Level:** | **Team:**
**Moveset:**
**Weaknesses:**
<#is_ex> Gym!
**[[Google]()] [[Apple]()] [[Waze]()] [[Scanner]()]**", - IconUrl = "", - Title = ": ", - Url = "", - Username = " Raid", - ImageUrl = "", - Footer = new AlertMessageFooter - { - Text = " | ", - IconUrl = "" - } - } - }, - { - AlertMessageType.Eggs, new AlertMessageSettings - { - AvatarUrl = "", - Content = "Hatches: ()
**Ends:** ( left)
**Team:**
<#is_ex> Gym!
**[[Google]()] [[Apple]()] [[Waze]()] [[Scanner]()]**", - IconUrl = "", - Title = ": ", - Url = "", - Username = "Level Egg", - ImageUrl = "", - Footer = new AlertMessageFooter - { - Text = " | ", - IconUrl = "" - } - } - }, - { - AlertMessageType.Pokestops, new AlertMessageSettings - { - AvatarUrl = "", - Content = "<#has_lure>**Lure Expires** ( left)
**Lure Type:**
<#has_invasion>**Expires:** ( left)
**Type:** | **Gender:**

**[[Google]()] [[Apple]()] [[Waze]()] [[Scanner]()]**", - IconUrl = "", - Title = ": ", - Url = "", - Username = "", - ImageUrl = "", - Footer = new AlertMessageFooter - { - Text = " | ", - IconUrl = "" - } - } - }, - { - AlertMessageType.Quests, new AlertMessageSettings - { - AvatarUrl = "", - Content = "**Quest:**
<#has_quest_conditions>**Condition(s):**
**Reward:**
**[[Google]()] [[Apple]()] [[Waze]()] [[Scanner]()]**", - IconUrl = "", - Title = ": ", - Url = "", - Username = "", - ImageUrl = "", - Footer = new AlertMessageFooter - { - Text = " | ", - IconUrl = "" - } - } - }, - { - AlertMessageType.Invasions, new AlertMessageSettings - { - AvatarUrl = "", - Content = "<#has_invasion>**Expires:** ( left)
**Type:** | **Gender:**

**[[Google]()] [[Apple]()] [[Waze]()] [[Scanner]()]**", - IconUrl = "", - Title = ": ", - Url = "", - Username = "", - ImageUrl = "", - Footer = new AlertMessageFooter - { - Text = " | ", - IconUrl = "" - } - } - }, - { - AlertMessageType.Lures, new AlertMessageSettings - { - AvatarUrl = "", - Content = "<#has_lure>**Lure Expires:** ( left)
**Lure Type:**
**[[Google]()] [[Apple]()] [[Waze]()] [[Scanner]()]**", - IconUrl = "", - Title = ": ", - Url = "", - Username = "", - ImageUrl = "", - Footer = new AlertMessageFooter - { - Text = " | ", - IconUrl = "" - } - } - }, - { - AlertMessageType.Nests, new AlertMessageSettings - { - AvatarUrl = "", - Content = "**Pokemon:**
**Average Spawns:** /h | **Types:**
**[[Google]()] [[Apple]()] [[Waze]()] [[Scanner]()]**", - IconUrl = "", - Title = ": ", - Url = "", - Username = "", - ImageUrl = "", - Footer = new AlertMessageFooter - { - Text = " | ", - IconUrl = "" - } - } - }, - { - AlertMessageType.Weather, new AlertMessageSettings - { - AvatarUrl = "", - Content = "**Weather Condition:**
**Weather Cell ID:** #", - IconUrl = "", - Title = "", - Url = "", - Username = "Weather", - ImageUrl = "", - Footer = new AlertMessageFooter - { - Text = " | ", - IconUrl = "" - } - } - } - }; - } -} \ No newline at end of file diff --git a/src/Alarms/Alerts/DynamicReplacementEngine.cs b/src/Alarms/Alerts/DynamicReplacementEngine.cs deleted file mode 100644 index ac14d4b9..00000000 --- a/src/Alarms/Alerts/DynamicReplacementEngine.cs +++ /dev/null @@ -1,59 +0,0 @@ -namespace WhMgr.Alarms.Alerts -{ - using System; - using System.Collections.Generic; - using System.Text.RegularExpressions; - - public static class DynamicReplacementEngine - { - /// - /// Replace text placeholders with Pokemon values - /// - /// Placeholder alarm text - /// Replacement values dictionary - /// - public static string ReplaceText(string alarmText, IReadOnlyDictionary pkmnInfo) - { - if (string.IsNullOrEmpty(alarmText)) - return string.Empty; - - var placeHolder = alarmText; - - // Loop through all available keys, replace any place holders with values. - foreach (var (key, value) in pkmnInfo) - { - placeHolder = placeHolder.Replace($"<{key}>", value); - } - - // Replace IF statement blocks i.e. <#is_ditto>**Catch Pokemon:** . If value is true return value inside IF block, otherwise return an empty string. - foreach (var (key, value) in pkmnInfo) - { - if (bool.TryParse(value, out var result)) - { - placeHolder = ReplaceBlock(placeHolder, key, result); - } - } - return placeHolder; - } - - /// - /// Replace conditional block with value within itself - /// - /// Placeholder text to check - /// Property key - /// Default replacement value - /// - private static string ReplaceBlock(string text, string property, bool value = false) - { - var expr = @"\<#" + property + @">([^\}]+)\"; - var regex = new Regex(expr); - var match = regex.Match(text); - return string.IsNullOrEmpty(match?.Value) ? - text : - text.Replace(match.Value, value ? - match?.Groups[1]?.Value : - string.Empty - ); - } - } -} \ No newline at end of file diff --git a/src/Alarms/Filters/Filters.cs b/src/Alarms/Filters/Filters.cs deleted file mode 100644 index 6d586ecd..00000000 --- a/src/Alarms/Filters/Filters.cs +++ /dev/null @@ -1,164 +0,0 @@ -namespace WhMgr.Alarms.Filters -{ - using System; - - using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; - - using WhMgr.Diagnostics; - using WhMgr.Net.Models; - - public static class Filters - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("FILTERS", Program.LogLevel); - - static Filters() - { - _logger.Trace($"Filters::Filters"); - } - - public static bool MatchesIV(string iv, uint minimumIV, uint maximumIV) - { - var matchesIV = false; - var missing = iv == "?" || string.IsNullOrEmpty(iv); - if (!missing) - { - if (!double.TryParse(iv.Replace("%", ""), out double resultIV)) - { - _logger.Error($"Failed to parse pokemon IV value '{iv}', skipping filter check."); - return false; - } - - matchesIV |= Math.Round(resultIV) >= minimumIV && Math.Round(resultIV) <= maximumIV; - } - - matchesIV |= (missing && minimumIV == 0); - - return matchesIV; - } - - public static bool MatchesCP(string cp, uint minimumCP, uint maximumCP) - { - var matchesCP = false; - var missing = cp == "?" || string.IsNullOrEmpty(cp); - if (!missing) - { - if (!int.TryParse(cp, out int resultCP)) - { - _logger.Error($"Failed to parse pokemon CP value '{cp}', skipping filter check."); - return false; - } - - matchesCP |= resultCP >= minimumCP && resultCP <= maximumCP; - } - - matchesCP |= (missing && minimumCP == 0); - - return matchesCP; - } - - public static bool MatchesLvl(string lvl, uint minimumLvl, uint maximumLvl) - { - var matchesLvl = false; - var missing = lvl == "?" || string.IsNullOrEmpty(lvl); - if (!missing) - { - if (!int.TryParse(lvl, out int resultLvl)) - { - _logger.Error($"Failed to parse pokemon level value '{lvl}', skipping filter check."); - return false; - } - - matchesLvl |= resultLvl >= minimumLvl && resultLvl <= maximumLvl; - } - - matchesLvl |= (missing && minimumLvl == 0); - - return matchesLvl; - } - - public static bool MatchesPvPRank(int rank, uint minimumRank, uint maximumRank) - { - var matchesRank = false; - var missing = rank == 0; - if (!missing) - { - matchesRank |= rank >= minimumRank && rank <= maximumRank; - } - - matchesRank |= (missing && minimumRank == 0); - - return matchesRank; - } - - public static bool MatchesIV(string iv, int minimumIV) - { - var matchesIV = false; - var missing = iv == "?" || string.IsNullOrEmpty(iv); - if (!missing) - { - if (!double.TryParse(iv.Replace("%", ""), out double resultIV)) - { - _logger.Error($"Failed to parse pokemon IV value '{iv}', skipping filter check."); - return false; - } - - matchesIV |= Math.Round(resultIV) >= minimumIV; - } - - matchesIV |= (missing && minimumIV == 0); - - return matchesIV; - } - - public static bool MatchesCP(string cp, int minimumCP) - { - var matchesCP = false; - var missing = cp == "?" || string.IsNullOrEmpty(cp); - if (!missing) - { - if (!int.TryParse(cp, out int resultCP)) - { - _logger.Error($"Failed to parse pokemon CP value '{cp}', skipping filter check."); - return false; - } - - matchesCP |= resultCP >= minimumCP; - } - - matchesCP |= (missing && minimumCP == 0); - - return matchesCP; - } - - public static bool MatchesGender(Gender gender, Gender desiredGender) - { - return gender == desiredGender || - gender == Gender.Unset || - gender == Gender.Less; - } - - public static bool MatchesGender(Gender gender, string desiredGender) - { - desiredGender = desiredGender.ToLower(); - - if (desiredGender == "*" || gender == Gender.Less || gender == Gender.Unset) - return true; - - if (desiredGender == "m" && gender == Gender.Male) - return true; - - if (desiredGender == "f" && gender == Gender.Female) - return true; - - return false; - } - - public static bool MatchesSize(PokemonSize pkmnSize, PokemonSize? filterSize) - { - return (filterSize.HasValue && pkmnSize == filterSize.Value) || - filterSize == PokemonSize.All || - !filterSize.HasValue || - filterSize == null; - } - } -} \ No newline at end of file diff --git a/src/Alarms/Filters/Models/FilterGymObject.cs b/src/Alarms/Filters/Models/FilterGymObject.cs deleted file mode 100644 index 6fb28129..00000000 --- a/src/Alarms/Filters/Models/FilterGymObject.cs +++ /dev/null @@ -1,30 +0,0 @@ -namespace WhMgr.Alarms.Filters.Models -{ - using Newtonsoft.Json; - - using WhMgr.Net.Models; - - /// - /// Gym filters - /// - public class FilterGymObject - { - /// - /// Enable gym filter - /// - [JsonProperty("enabled")] - public bool Enabled { get; set; } - - /// - /// Filter only Gyms under attack - /// - [JsonProperty("underAttack")] - public bool UnderAttack { get; set; } - - /// - /// Filter by Pokemon Go Team - /// - [JsonProperty("team")] - public PokemonTeam Team { get; set; } - } -} \ No newline at end of file diff --git a/src/Alarms/Filters/Models/FilterObject.cs b/src/Alarms/Filters/Models/FilterObject.cs deleted file mode 100644 index 49e93a42..00000000 --- a/src/Alarms/Filters/Models/FilterObject.cs +++ /dev/null @@ -1,53 +0,0 @@ -namespace WhMgr.Alarms.Filters.Models -{ - using Newtonsoft.Json; - - /// - /// Main filter object - /// - [JsonObject("filter")] - public class FilterObject - { - /// - /// Pokemon filters - /// - [JsonProperty("pokemon")] - public FilterPokemonObject Pokemon { get; set; } - - /// - /// Raid filters - /// - [JsonProperty("raids")] - public FilterRaidObject Raids { get; set; } - - /// - /// Raid egg filters - /// - [JsonProperty("eggs")] - public FilterEggObject Eggs { get; set; } - - /// - /// Field research quest filters - /// - [JsonProperty("quests")] - public FilterQuestObject Quests { get; set; } - - /// - /// Pokestop filters - /// - [JsonProperty("pokestops")] - public FilterPokestopObject Pokestops { get; set; } - - /// - /// Gym filters - /// - [JsonProperty("gyms")] - public FilterGymObject Gyms { get; set; } - - /// - /// Weather cell filters - /// - [JsonProperty("weather")] - public FilterWeatherObject Weather { get; set; } - } -} \ No newline at end of file diff --git a/src/Alarms/Filters/Models/FilterPokestopObject.cs b/src/Alarms/Filters/Models/FilterPokestopObject.cs deleted file mode 100644 index a4a82f98..00000000 --- a/src/Alarms/Filters/Models/FilterPokestopObject.cs +++ /dev/null @@ -1,45 +0,0 @@ -namespace WhMgr.Alarms.Filters.Models -{ - using System; - using System.Collections.Generic; - - using Newtonsoft.Json; - - /// - /// Pokemon filters - /// - public class FilterPokestopObject - { - /// - /// Gets or sets a value determining whether to enable the pokestop filter - /// - [JsonProperty("enabled")] - public bool Enabled { get; set; } - - /// - /// Gets or sets a value determining whether to only report lured Pokestops - /// - [JsonProperty("lured")] - public bool Lured { get; set; } - - /// - /// Gets or sets the Pokestop lure types to report - /// - [JsonProperty("lure_types")] - public List LureTypes { get; set; } - - /// - /// Gets or sets a value determining whether to only report Team Rocket invasion Pokestops - /// - [JsonProperty("invasions")] - public bool Invasions { get; set; } - - /// - /// Instantiate a new class - /// - public FilterPokestopObject() - { - LureTypes = new List(); - } - } -} \ No newline at end of file diff --git a/src/Alarms/Models/AlarmObject.cs b/src/Alarms/Models/AlarmObject.cs deleted file mode 100644 index 33072da6..00000000 --- a/src/Alarms/Models/AlarmObject.cs +++ /dev/null @@ -1,116 +0,0 @@ -namespace WhMgr.Alarms.Models -{ - using System.Collections.Generic; - using System.IO; - - using Newtonsoft.Json; - - using WhMgr.Alarms.Alerts; - using WhMgr.Alarms.Filters.Models; - using WhMgr.Geofence; - - /// - /// Alarm filter class - /// - [JsonObject("alarm")] - public class AlarmObject - { - /// - /// Gets the Area geofences for the alarm - /// - [JsonIgnore] - public List GeofenceItems { get; private set; } - - /// - /// Gets the Discord alert messages for the alarm - /// - [JsonIgnore] - public AlertMessage Alerts { get; private set; } - - /// - /// Gets the Alarm filters for the alarm - /// - [JsonIgnore] - public FilterObject Filters { get; private set; } - - /// - /// Gets or sets the Alarm name - /// - [JsonProperty("name")] - public string Name { get; set; } - - /// - /// Gets or sets the Discord message content outside of the embed message. (above it, can contain role/user mentions, DTS, etc) - /// - [JsonProperty("description")] - public string Description { get; set; } - - /// - /// Gets or sets the filters file to load - /// - [JsonProperty("filters")] - public string FiltersFile { get; set; } - - /// - /// Gets or sets the alerts file to load - /// - [JsonProperty("alerts")] - public string AlertsFile { get; set; } - - /// - /// Gets or sets the geofences file to load - /// - [JsonProperty("geofences")] - public List Geofences { get; set; } - - /// - /// Gets or sets the Discord channel webhook url address - /// - [JsonProperty("webhook")] - public string Webhook { get; set; } - - /// - /// Instantiate a new class - /// - public AlarmObject() - { - GeofenceItems = new List(); - LoadAlerts(); - LoadFilters(); - } - - /// - /// Load alerts from the `/Alerts` folder - /// - /// Returns parsed alert message - public AlertMessage LoadAlerts() - { - if (string.IsNullOrEmpty(AlertsFile)) - return null; - - var path = Path.Combine(Strings.AlertsFolder, AlertsFile); - if (!File.Exists(path)) - throw new FileNotFoundException($"Alert file {path} not found.", path); - - var data = File.ReadAllText(path); - return Alerts = JsonConvert.DeserializeObject(data); - } - - /// - /// Load alarm filters from the `/Filters` folder - /// - /// Returns parsed filters object - public FilterObject LoadFilters() - { - if (string.IsNullOrEmpty(FiltersFile)) - return null; - - var path = Path.Combine(Strings.FiltersFolder, FiltersFile); - if (!File.Exists(path)) - throw new FileNotFoundException($"Filter file {path} not found.", path); - - var data = File.ReadAllText(path); - return Filters = JsonConvert.DeserializeObject(data); - } - } -} \ No newline at end of file diff --git a/src/App.config b/src/App.config deleted file mode 100644 index 12778b1e..00000000 --- a/src/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/Bot.cs b/src/Bot.cs deleted file mode 100644 index 24ca4ed1..00000000 --- a/src/Bot.cs +++ /dev/null @@ -1,1166 +0,0 @@ -namespace WhMgr -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Threading; - using System.Threading.Tasks; - - using WhMgr.Commands; - using WhMgr.Configuration; - using WhMgr.Data; - using WhMgr.Data.Models.Discord; - using WhMgr.Data.Subscriptions; - using WhMgr.Data.Subscriptions.Models; - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Geofence; - using WhMgr.Localization; - using WhMgr.Net.Models; - using WhMgr.Net.Webhooks; - using WhMgr.Services; - using WhMgr.Utilities; - - using DSharpPlus; - using DSharpPlus.Entities; - using DSharpPlus.EventArgs; - using DSharpPlus.CommandsNext; - using DSharpPlus.Interactivity; - - // TODO: List all subscriptions with info command - // TODO: IV wildcards - - public class Bot - { - #region Variables - - private readonly Dictionary _servers; - private readonly WebhookController _whm; - private readonly WhConfigHolder _whConfig; - private readonly SubscriptionProcessor _subProcessor; - - private static readonly IEventLogger _logger = EventLogger.GetLogger("BOT"); - - #endregion - - #region Constructor - - /// - /// Discord bot class - /// - /// Configuration settings - public Bot(WhConfigHolder whConfig) - { - _logger.Trace($"WhConfig [Servers={whConfig.Instance.Servers.Count}, Port={whConfig.Instance.WebhookPort}]"); - _servers = new Dictionary(); - _whConfig = whConfig; - _whm = new WebhookController(_whConfig); - - // Build form lists for icons - IconFetcher.Instance.SetIconStyles(_whConfig.Instance.IconStyles); - - // Set translation language - Translator.Instance.SetLocale(_whConfig.Instance.Locale); - - // Set database connection strings to static properties so we can access within our extension classes - DataAccessLayer.ConnectionString = _whConfig.Instance.Database.Main.ToString(); - DataAccessLayer.ScannerConnectionString = _whConfig.Instance.Database.Scanner.ToString(); - - // Set unhandled exception event handler - AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler; - - // Initialize and start midnight reset timer - var midnight = new DandTSoftware.Timers.MidnightTimer(); - midnight.TimeReached += async (e) => await OnMidnightTimer(); - midnight.Start(); - - // Initialize the subscription processor if at least one Discord server wants custom notifications - // and start database migrator - if (_whConfig.Instance.Servers.Values.ToList().Exists(x => x.Subscriptions.Enabled)) - { - // Start database migrator - var migrator = new DatabaseMigrator(); - while (!migrator.Finished) - { - Thread.Sleep(50); - } - - _subProcessor = new SubscriptionProcessor(_servers, _whConfig, _whm); - } - - // Create a DiscordClient object per Discord server in config - foreach (var (guildId, serverConfig) in _whConfig.Instance.Servers) - { - serverConfig.LoadDmAlerts(); - var client = new DiscordClient(new DiscordConfiguration - { - AutomaticGuildSync = true, - AutoReconnect = true, - EnableCompression = true, - Token = serverConfig.Token, - TokenType = TokenType.Bot, - UseInternalLogHandler = true - }); - - // If you are on Windows 7 and using .NETFX, install - // DSharpPlus.WebSocket.WebSocket4Net from NuGet, - // add appropriate usings, and uncomment the following - // line - //client.SetWebSocketClient(); - - // If you are on Windows 7 and using .NET Core, install - // DSharpPlus.WebSocket.WebSocket4NetCore from NuGet, - // add appropriate usings, and uncomment the following - // line - //client.SetWebSocketClient(); - - // If you are using Mono, install - // DSharpPlus.WebSocket.WebSocketSharp from NuGet, - // add appropriate usings, and uncomment the following - // line - //client.SetWebSocketClient(); - - client.Ready += Client_Ready; - client.GuildAvailable += Client_GuildAvailable; - client.GuildMemberUpdated += Client_GuildMemberUpdated; - //_client.MessageCreated += Client_MessageCreated; - client.ClientErrored += Client_ClientErrored; - client.DebugLogger.LogMessageReceived += DebugLogger_LogMessageReceived; - - // Configure Discord interactivity module - var interactivity = client.UseInteractivity - ( - new InteractivityConfiguration - { - // default pagination behaviour to just ignore the reactions - PaginationBehaviour = TimeoutBehaviour.Ignore, - - // default pagination timeout to 5 minutes - PaginationTimeout = TimeSpan.FromMinutes(5), - - // default timeout for other actions to 2 minutes - Timeout = TimeSpan.FromMinutes(2) - } - ); - - // Build the dependency collection which will contain our objects that can be globally used within each command module - DependencyCollection dep; - using (var d = new DependencyCollectionBuilder()) - { - d.AddInstance(new Dependencies(interactivity, _whm, _subProcessor, _whConfig, new StripeService(_whConfig.Instance.StripeApiKey))); - dep = d.Build(); - } - - // Discord commands configuration - var commands = client.UseCommandsNext - ( - new CommandsNextConfiguration - { - StringPrefix = serverConfig.CommandPrefix?.ToString(), - EnableDms = true, - // If command prefix is null, allow for mention prefix - EnableMentionPrefix = string.IsNullOrEmpty(serverConfig.CommandPrefix), - // Use DSharpPlus's built-in help formatter - EnableDefaultHelp = true, - CaseSensitive = false, - IgnoreExtraArguments = true, - Dependencies = dep - } - ); - commands.CommandExecuted += Commands_CommandExecuted; - commands.CommandErrored += Commands_CommandErrored; - // Register Discord command handler classes - commands.RegisterCommands(); - commands.RegisterCommands(); - commands.RegisterCommands(); - commands.RegisterCommands(); - commands.RegisterCommands(); - commands.RegisterCommands(); - commands.RegisterCommands(); - if (serverConfig.Subscriptions.Enabled) - { - commands.RegisterCommands(); - } - if (serverConfig.EnableGeofenceRoles) - { - commands.RegisterCommands(); - } - else - { - commands.RegisterCommands(); - } - - _logger.Info($"Configured Discord server {guildId}"); - if (!_servers.ContainsKey(guildId)) - { - _servers.Add(guildId, client); - } - - // Wait 3 seconds between initializing Discord clients - Task.Delay(3000).GetAwaiter().GetResult(); - } - - RegisterConfigMonitor(); - } - - #endregion - - #region Public Methods - - /// - /// Start the Discord bot(s) - /// - /// - public async Task Start() - { - _logger.Trace("Start"); - _logger.Info("Connecting to Discord..."); - - // Loop through each Discord server and attempt initial connection - foreach (var (guildId, client) in _servers) - { - _logger.Info($"Attempting connection to Discord server {guildId}"); - await client.ConnectAsync(); - await Task.Delay(1000); - } - - // Register alarm event handlers - _whm.PokemonAlarmTriggered += OnPokemonAlarmTriggered; - _whm.RaidAlarmTriggered += OnRaidAlarmTriggered; - _whm.QuestAlarmTriggered += OnQuestAlarmTriggered; - _whm.PokestopAlarmTriggered += OnPokestopAlarmTriggered; - _whm.GymAlarmTriggered += OnGymAlarmTriggered; - _whm.GymDetailsAlarmTriggered += OnGymDetailsAlarmTriggered; - _whm.WeatherAlarmTriggered += OnWeatherAlarmTriggered; - // At least one server wants subscriptions - if (_whConfig.Instance.Servers.Any(x => x.Value.Subscriptions.Enabled)) - { - // Register subscription event handlers - _whm.PokemonSubscriptionTriggered += OnPokemonSubscriptionTriggered; - _whm.RaidSubscriptionTriggered += OnRaidSubscriptionTriggered; - _whm.QuestSubscriptionTriggered += OnQuestSubscriptionTriggered; - _whm.InvasionSubscriptionTriggered += OnInvasionSubscriptionTriggered; - _whm.LureSubscriptionTriggered += OnLureSubscriptionTriggered; - } - _whm.Start(); - - _logger.Info("WebhookManager is running..."); - } - - /// - /// Stop the Discord bot(s) - /// - /// - public async Task Stop() - { - _logger.Trace("Stop"); - _logger.Info("Disconnecting from Discord..."); - - // Loop through each Discord server and terminate the connection - foreach (var (guildId, client) in _servers) - { - _logger.Info($"Attempting disconnection from Discord server {guildId}"); - await client.DisconnectAsync(); - await Task.Delay(1000); - } - - // Unregister alarm event handlers - _whm.PokemonAlarmTriggered -= OnPokemonAlarmTriggered; - _whm.RaidAlarmTriggered -= OnRaidAlarmTriggered; - _whm.QuestAlarmTriggered -= OnQuestAlarmTriggered; - _whm.PokestopAlarmTriggered -= OnPokestopAlarmTriggered; - _whm.GymAlarmTriggered -= OnGymAlarmTriggered; - _whm.GymDetailsAlarmTriggered -= OnGymDetailsAlarmTriggered; - _whm.WeatherAlarmTriggered -= OnWeatherAlarmTriggered; - if (_whConfig.Instance.Servers.Any(x => x.Value.Subscriptions.Enabled)) - { - //At least one server wanted subscriptions, unregister the subscription event handlers - _whm.PokemonSubscriptionTriggered -= OnPokemonSubscriptionTriggered; - _whm.RaidSubscriptionTriggered -= OnRaidSubscriptionTriggered; - _whm.QuestSubscriptionTriggered -= OnQuestSubscriptionTriggered; - _whm.InvasionSubscriptionTriggered -= OnInvasionSubscriptionTriggered; - _whm.LureSubscriptionTriggered -= OnLureSubscriptionTriggered; - } - _whm.Stop(); - - _logger.Info("WebhookManager is stopped..."); - } - - #endregion - - #region Discord Events - - private Task Client_Ready(ReadyEventArgs e) - { - _logger.Info($"------------------------------------------"); - _logger.Info($"[DISCORD] Connected."); - _logger.Info($"[DISCORD] ----- Current Application"); - _logger.Info($"[DISCORD] Name: {e.Client.CurrentApplication.Name}"); - _logger.Info($"[DISCORD] Description: {e.Client.CurrentApplication.Description}"); - _logger.Info($"[DISCORD] Owner: {e.Client.CurrentApplication.Owner.Username}#{e.Client.CurrentApplication.Owner.Discriminator}"); - _logger.Info($"[DISCORD] ----- Current User"); - _logger.Info($"[DISCORD] Id: {e.Client.CurrentUser.Id}"); - _logger.Info($"[DISCORD] Name: {e.Client.CurrentUser.Username}#{e.Client.CurrentUser.Discriminator}"); - _logger.Info($"[DISCORD] Email: {e.Client.CurrentUser.Email}"); - _logger.Info($"------------------------------------------"); - - return Task.CompletedTask; - } - - private async Task Client_GuildAvailable(GuildCreateEventArgs e) - { - // If guild is in configured servers list then attempt to create emojis needed - if (_whConfig.Instance.Servers.ContainsKey(e.Guild.Id)) - { - // Create default emojis - await CreateEmojis(e.Guild.Id); - - if (!(e.Client is DiscordClient client)) - { - _logger.Error($"DiscordClient is null, Unable to update status."); - return; - } - - // Set custom bot status if guild is in config server list - if (_whConfig.Instance.Servers.ContainsKey(e.Guild.Id)) - { - var status = _whConfig.Instance.Servers[e.Guild.Id].Status; - await client.UpdateStatusAsync(new DiscordGame(status ?? $"v{Strings.Version}"), UserStatus.Online); - } - } - } - - private async Task Client_GuildMemberUpdated(GuildMemberUpdateEventArgs e) - { - if (!_whConfig.Instance.Servers.ContainsKey(e.Guild.Id)) - return; - - var server = _whConfig.Instance.Servers[e.Guild.Id]; - if (!server.AutoRemoveGeofenceRoles) - return; - - var hasBefore = e.RolesBefore.FirstOrDefault(x => server.DonorRoleIds.Contains(x.Id)) != null; - var hasAfter = e.RolesAfter.FirstOrDefault(x => server.DonorRoleIds.Contains(x.Id)) != null; - var roleRemoved = hasBefore && !hasAfter; - var roleAdded = !hasBefore && hasAfter; - var subscription = _subProcessor.Manager.GetUserSubscriptions(e.Guild.Id, e.Member.Id); - - // Check if donor role was removed - if (roleRemoved) - { - _logger.Info($"Member {e.Member.Username} ({e.Member.Id}) donor role removed, removing any city roles..."); - // If so, remove all city/geofence/area roles - var areaRoles = server.Geofences.Select(x => x.Name.ToLower()); - foreach (var roleName in areaRoles) - { - var role = e.Guild.GetRoleFromName(roleName); - if (role == null) - { - _logger.Debug($"Failed to get role by name {roleName}"); - continue; - } - await e.Member.RevokeRoleAsync(role, "No longer a supporter/donor"); - } - _logger.Info($"All city roles removed from member {e.Member.Username} ({e.Member.Id})"); - - if (subscription == null) - return; - - // Disable subscriptions for user - subscription.DisableNotificationType(NotificationStatusType.All); - if (!subscription.Save()) - { - _logger.Warn($"Failed to disable subscriptions for member no longer having donor access: ({e.Member.Username}) {e.Member.Id}"); - } - } - else if (roleAdded) - { - if (subscription == null) - return; - - // Enable subscriptions for user if returning donor - subscription.EnableNotificationType(NotificationStatusType.All); - if (!subscription.Save()) - { - _logger.Warn($"Failed to enable subscriptions for returning member donor access: ({e.Member.Username}) {e.Member.Id}"); - } - } - } - - //private async Task Client_MessageCreated(MessageCreateEventArgs e) - //{ - // if (e.Author.Id == e.Client.CurrentUser.Id) - // return; - - // if (_whConfig.Instance.BotChannelIds.Count > 0 && !_whConfig.Instance.BotChannelIds.Contains(e.Channel.Id)) - // return; - - // await _commands.HandleCommandsAsync(e); - //} - - private async Task Client_ClientErrored(ClientErrorEventArgs e) - { - _logger.Error(e.Exception); - - await Task.CompletedTask; - } - - private async Task Commands_CommandExecuted(CommandExecutionEventArgs e) - { - // let's log the name of the command and user - e.Context.Client.DebugLogger.LogMessage(DSharpPlus.LogLevel.Info, Strings.BotName, $"{e.Context.User.Username} successfully executed '{e.Command.QualifiedName}'", DateTime.Now); - - // since this method is not async, let's return - // a completed task, so that no additional work - // is done - await Task.CompletedTask; - } - - private async Task Commands_CommandErrored(CommandErrorEventArgs e) - { - e.Context.Client.DebugLogger.LogMessage(DSharpPlus.LogLevel.Error, Strings.BotName, $"{e.Context.User.Username} tried executing '{e.Command?.QualifiedName ?? e.Context.Message.Content}' but it errored: {e.Exception.GetType()}: {e.Exception.Message ?? ""}", DateTime.Now); - - // let's check if the error is a result of lack of required permissions - if (e.Exception is DSharpPlus.CommandsNext.Exceptions.ChecksFailedException) - { - // The user lacks required permissions, - var emoji = DiscordEmoji.FromName(e.Context.Client, ":no_entry:"); - - // let's wrap the response into an embed - var embed = new DiscordEmbedBuilder - { - Title = "Access denied", - Description = $"{emoji} You do not have the permissions required to execute this command.", - Color = new DiscordColor(0xFF0000) // red - }; - await e.Context.RespondAsync(embed: embed); - } - else if (e.Exception is ArgumentException) - { - // The user lacks required permissions, - var emoji = DiscordEmoji.FromName(e.Context.Client, ":x:"); - - var guildId = e.Context.Guild?.Id ?? e.Context.Client.Guilds.FirstOrDefault(x => _whConfig.Instance.Servers.ContainsKey(x.Key)).Key; - var prefix = _whConfig.Instance.Servers.ContainsKey(guildId) ? _whConfig.Instance.Servers[guildId].CommandPrefix : "!"; - var example = $"Command Example: ```{prefix}{e.Command.Name} {string.Join(" ", e.Command.Arguments.Select(x => x.IsOptional ? $"[{x.Name}]" : x.Name))}```\r\n*Parameters in brackets are optional.*"; - - // let's wrap the response into an embed - var embed = new DiscordEmbedBuilder - { - Title = $"{emoji} Invalid Argument(s)", - Description = $"{string.Join(Environment.NewLine, e.Command.Arguments.Select(x => $"Parameter **{x.Name}** expects type **{x.Type.ToHumanReadableString()}.**"))}.\r\n\r\n{example}", - Color = new DiscordColor(0xFF0000) // red - }; - await e.Context.RespondAsync(embed: embed); - } - else if (e.Exception is DSharpPlus.CommandsNext.Exceptions.CommandNotFoundException) - { - _logger.Warn($"User {e.Context.User.Username} tried executing command {e.Context.Message.Content} but command does not exist."); - } - else - { - _logger.Error($"User {e.Context.User.Username} tried executing command {e.Command?.Name} and unknown error occurred.\r\n: {e.Exception}"); - } - } - - private void DebugLogger_LogMessageReceived(object sender, DebugLogMessageEventArgs e) - { - //Color - ConsoleColor color; - switch (e.Level) - { - case DSharpPlus.LogLevel.Error: color = ConsoleColor.DarkRed; break; - case DSharpPlus.LogLevel.Warning: color = ConsoleColor.Yellow; break; - case DSharpPlus.LogLevel.Info: color = ConsoleColor.White; break; - case DSharpPlus.LogLevel.Critical: color = ConsoleColor.Red; break; - case DSharpPlus.LogLevel.Debug: default: color = ConsoleColor.DarkGray; break; - } - - //Source - var sourceName = e.Application; - - //Text - var text = e.Message; - - //Build message - var builder = new System.Text.StringBuilder(text.Length + (sourceName?.Length ?? 0) + 5); - if (sourceName != null) - { - builder.Append('['); - builder.Append(sourceName); - builder.Append("] "); - } - - for (var i = 0; i < text.Length; i++) - { - //Strip control chars - var c = text[i]; - if (!char.IsControl(c)) - builder.Append(c); - } - - if (text != null) - { - builder.Append(": "); - builder.Append(text); - } - - text = builder.ToString(); - Console.ForegroundColor = color; - Console.WriteLine(text); - Console.ResetColor(); - } - - #endregion - - #region WebhookManager Events - - private void OnPokemonAlarmTriggered(object sender, AlarmEventTriggeredEventArgs e) - { - if (string.IsNullOrEmpty(e.Alarm.Webhook)) - return; - - _logger.Info($"Pokemon Found [Alarm: {e.Alarm.Name}, Pokemon: {e.Data.Id}, Despawn: {e.Data.DespawnTime}]"); - - var pokemon = e.Data; - var loc = GeofenceService.GetGeofence(e.Alarm.GeofenceItems, new Location(pokemon.Latitude, pokemon.Longitude)); - if (loc == null) - { - //_logger.Warn($"[POKEMON] Failed to lookup city from coordinates {pokemon.Latitude},{pokemon.Longitude} {pkmn.Name} {pokemon.IV}, skipping..."); - return; - } - - if (!_servers.ContainsKey(e.GuildId)) - return; - - if (!_whConfig.Instance.Servers.ContainsKey(e.GuildId)) - return; - - try - { - var server = _whConfig.Instance.Servers[e.GuildId]; - var client = _servers[e.GuildId]; - var eb = pokemon.GeneratePokemonMessage(e.GuildId, client, _whConfig.Instance, e.Alarm, loc.Name); - var jsonEmbed = new DiscordWebhookMessage - { - Username = eb.Username, - AvatarUrl = eb.IconUrl, - Content = eb.Description, - Embeds = eb.Embeds - }.Build(); - NetUtil.SendWebhook(e.Alarm.Webhook, jsonEmbed); - Statistics.Instance.PokemonAlarmsSent++; - - if (pokemon.IV == "100%") - { - Statistics.Instance.AddHundredIV(pokemon); - } - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - private void OnRaidAlarmTriggered(object sender, AlarmEventTriggeredEventArgs e) - { - if (string.IsNullOrEmpty(e.Alarm.Webhook)) - return; - - _logger.Info($"Raid Found [Alarm: {e.Alarm.Name}, Raid: {e.Data.PokemonId}, Level: {e.Data.Level}, StartTime: {e.Data.StartTime}]"); - - var raid = e.Data; - var loc = GeofenceService.GetGeofence(e.Alarm.GeofenceItems, new Location(raid.Latitude, raid.Longitude)); - if (loc == null) - { - //_logger.Warn($"[RAID] Failed to lookup city from coordinates {raid.Latitude},{raid.Longitude} {pkmn.Name} {raid.Level}, skipping..."); - return; - } - - if (!_servers.ContainsKey(e.GuildId)) - return; - - if (!_whConfig.Instance.Servers.ContainsKey(e.GuildId)) - return; - - try - { - var server = _whConfig.Instance.Servers[e.GuildId]; - var client = _servers[e.GuildId]; - var eb = raid.GenerateRaidMessage(e.GuildId, client, _whConfig.Instance, e.Alarm, loc.Name); - var jsonEmbed = new DiscordWebhookMessage - { - Username = eb.Username, - AvatarUrl = eb.IconUrl, - Content = eb.Description, - Embeds = eb.Embeds - }.Build(); - NetUtil.SendWebhook(e.Alarm.Webhook, jsonEmbed); - if (raid.IsEgg) - Statistics.Instance.EggAlarmsSent++; - else - Statistics.Instance.RaidAlarmsSent++; - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - private void OnQuestAlarmTriggered(object sender, AlarmEventTriggeredEventArgs e) - { - if (string.IsNullOrEmpty(e.Alarm.Webhook)) - return; - - _logger.Info($"Quest Found [Alarm: {e.Alarm.Name}, PokestopId: {e.Data.PokestopId}, Type={e.Data.Type}]"); - - var quest = e.Data; - var loc = GeofenceService.GetGeofence(e.Alarm.GeofenceItems, new Location(quest.Latitude, quest.Longitude)); - if (loc == null) - { - //_logger.Warn($"[QUEST] Failed to lookup city for coordinates {quest.Latitude},{quest.Longitude}, skipping..."); - return; - } - - if (!_servers.ContainsKey(e.GuildId)) - return; - - if (!_whConfig.Instance.Servers.ContainsKey(e.GuildId)) - return; - - try - { - var client = _servers[e.GuildId]; - var eb = quest.GenerateQuestMessage(e.GuildId, client, _whConfig.Instance, e.Alarm, loc?.Name ?? e.Alarm.Name); - var jsonEmbed = new DiscordWebhookMessage - { - Username = eb.Username, - AvatarUrl = eb.IconUrl, - Content = eb.Description, - Embeds = eb.Embeds - }.Build(); - NetUtil.SendWebhook(e.Alarm.Webhook, jsonEmbed); - Statistics.Instance.QuestAlarmsSent++; - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - private void OnPokestopAlarmTriggered(object sender, AlarmEventTriggeredEventArgs e) - { - if (string.IsNullOrEmpty(e.Alarm.Webhook)) - return; - - _logger.Info($"Pokestop Found [Alarm: {e.Alarm.Name}, PokestopId: {e.Data.PokestopId}, LureExpire={e.Data.LureExpire}, InvasionExpire={e.Data.IncidentExpire}]"); - - var pokestop = e.Data; - var loc = GeofenceService.GetGeofence(e.Alarm.GeofenceItems, new Location(pokestop.Latitude, pokestop.Longitude)); - if (loc == null) - { - //_logger.Warn($"[POKESTOP] Failed to lookup city for coordinates {pokestop.Latitude},{pokestop.Longitude}, skipping..."); - return; - } - - if (!_servers.ContainsKey(e.GuildId)) - return; - - if (!_whConfig.Instance.Servers.ContainsKey(e.GuildId)) - return; - - try - { - var client = _servers[e.GuildId]; - var eb = pokestop.GeneratePokestopMessage(e.GuildId, client, _whConfig.Instance, e.Alarm, loc?.Name ?? e.Alarm.Name, pokestop.HasLure, pokestop.HasInvasion); - var jsonEmbed = new DiscordWebhookMessage - { - Username = eb.Username ?? Translator.Instance.Translate("UNKNOWN_POKESTOP"), - AvatarUrl = eb.IconUrl, - Content = eb.Description, - Embeds = eb.Embeds - }.Build(); - NetUtil.SendWebhook(e.Alarm.Webhook, jsonEmbed); - if (pokestop.HasInvasion) - Statistics.Instance.InvasionAlarmsSent++; - else if (pokestop.HasLure) - Statistics.Instance.LureAlarmsSent++; - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - private void OnGymAlarmTriggered(object sender, AlarmEventTriggeredEventArgs e) - { - if (string.IsNullOrEmpty(e.Alarm.Webhook)) - return; - - _logger.Info($"Gym Found [Alarm: {e.Alarm.Name}, GymId: {e.Data.GymId}, Team={e.Data.Team}, SlotsAvailable={e.Data.SlotsAvailable}, GuardPokemonId={e.Data.GuardPokemonId}]"); - - //TODO: Implement gym alarms. - } - - private void OnGymDetailsAlarmTriggered(object sender, AlarmEventTriggeredEventArgs e) - { - if (string.IsNullOrEmpty(e.Alarm.Webhook)) - return; - - _logger.Info($"Gym Details Found [Alarm: {e.Alarm.Name}, GymId: {e.Data.GymId}, InBattle={e.Data.InBattle}, Team={e.Data.Team}]"); - - var gymDetails = e.Data; - var loc = GeofenceService.GetGeofence(e.Alarm.GeofenceItems, new Location(gymDetails.Latitude, gymDetails.Longitude)); - if (loc == null) - { - //_logger.Warn($"Failed to lookup city from coordinates {pokemon.Latitude},{pokemon.Longitude} {pkmn.Name} {pokemon.IV}, skipping..."); - return; - } - - if (!_servers.ContainsKey(e.GuildId)) - return; - - if (!_whConfig.Instance.Servers.ContainsKey(e.GuildId)) - return; - - try - { - var oldGym = _whm.Gyms[gymDetails.GymId]; - var changed = oldGym.Team != gymDetails.Team || gymDetails.InBattle || oldGym.SlotsAvailable != gymDetails.SlotsAvailable; - if (!changed) - return; - - var client = _servers[e.GuildId]; - var eb = gymDetails.GenerateGymMessage(e.GuildId, client, _whConfig.Instance, e.Alarm, _whm.Gyms[gymDetails.GymId], loc?.Name ?? e.Alarm.Name); - var name = gymDetails.GymName; - var jsonEmbed = new DiscordWebhookMessage - { - Username = eb.Username, - AvatarUrl = eb.IconUrl, - Content = eb.Description, - Embeds = eb.Embeds - }.Build(); - NetUtil.SendWebhook(e.Alarm.Webhook, jsonEmbed); - Statistics.Instance.GymAlarmsSent++; - - // Gym team changed, set gym in gym cache - _whm.SetGym(gymDetails.GymId, gymDetails); - - Statistics.Instance.GymAlarmsSent++; - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - private void OnWeatherAlarmTriggered(object sender, AlarmEventTriggeredEventArgs e) - { - if (string.IsNullOrEmpty(e.Alarm.Webhook)) - return; - - _logger.Info($"Weather Found [Alarm: {e.Alarm.Name}, S2CellId: {e.Data.Id}, Condition={e.Data.GameplayCondition}, Severity={e.Data.Severity}]"); - - var weather = e.Data; - var loc = GeofenceService.GetGeofence(e.Alarm.GeofenceItems, new Location(weather.Latitude, weather.Longitude)); - if (loc == null) - { - //_logger.Warn($"Failed to lookup city from coordinates {pokemon.Latitude},{pokemon.Longitude} {pkmn.Name} {pokemon.IV}, skipping..."); - return; - } - - if (!_servers.ContainsKey(e.GuildId)) - return; - - if (!_whConfig.Instance.Servers.ContainsKey(e.GuildId)) - return; - - try - { - var client = _servers[e.GuildId]; - var eb = weather.GenerateWeatherMessage(e.GuildId, client, _whConfig.Instance, e.Alarm, loc?.Name ?? e.Alarm.Name); - var jsonEmbed = new DiscordWebhookMessage - { - Username = eb.Username, - AvatarUrl = eb.IconUrl, - Content = eb.Description, - Embeds = eb.Embeds - }.Build(); - NetUtil.SendWebhook(e.Alarm.Webhook, jsonEmbed); - - // Weather changed, set weather in weather cache - _whm.SetWeather(weather.Id, weather.GameplayCondition); - - Statistics.Instance.WeatherAlarmsSent++; - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - #endregion - - #region Subscription Events - - private void OnPokemonSubscriptionTriggered(object sender, PokemonData e) - { - if (_subProcessor == null) - return; - - if (!ThreadPool.QueueUserWorkItem(async x => await _subProcessor.ProcessPokemonSubscription(e))) - { - // Failed to queue thread - _logger.Error($"Failed to queue thread to process Pokemon subscription"); - } - if (!ThreadPool.QueueUserWorkItem(async x => await _subProcessor.ProcessPvPSubscription(e))) - { - // Failed to queue thread - _logger.Error($"Failed to queue thread to process PVP subscription"); - } - } - - private void OnRaidSubscriptionTriggered(object sender, RaidData e) - { - if (_subProcessor == null) - return; - - if (!ThreadPool.QueueUserWorkItem(async x => await _subProcessor.ProcessRaidSubscription(e))) - { - // Failed to queue thread - _logger.Error($"Failed to queue thread to process raid subscription"); - } - - if (!ThreadPool.QueueUserWorkItem(async _ => await _subProcessor.ProcessGymSubscription(e))) - { - // Failed to queue thread - _logger.Error($"Failed to queue thread to process gym subscription"); - } - } - - private void OnQuestSubscriptionTriggered(object sender, QuestData e) - { - if (_subProcessor == null) - return; - - if (!ThreadPool.QueueUserWorkItem(async x => await _subProcessor.ProcessQuestSubscription(e))) - { - // Failed to queue thread - _logger.Error($"Failed to queue thread to process quest subscription"); - } - } - - private void OnInvasionSubscriptionTriggered(object sender, PokestopData e) - { - if (_subProcessor == null) - return; - - if (!ThreadPool.QueueUserWorkItem(async x => await _subProcessor.ProcessInvasionSubscription(e))) - { - // Failed to queue thread - _logger.Error($"Failed to queue thread to process invasion subscription"); - } - } - - private void OnLureSubscriptionTriggered(object sender, PokestopData e) - { - if (_subProcessor == null) - return; - - if (!ThreadPool.QueueUserWorkItem(async x => await _subProcessor.ProcessLureSubscription(e))) - { - // Failed to queue thread - _logger.Error($"Failed to queue thread to process lure subscription"); - } - } - - #endregion - - #region Private Methods - - private async Task CreateEmojis(ulong guildId) - { - _logger.Trace($"CreateEmojis"); - - if (!_servers.ContainsKey(guildId)) - { - _logger.Warn($"Discord client not ready yet to create emojis for guild {guildId}"); - return; - } - - var server = _whConfig.Instance.Servers[guildId]; - var client = _servers[guildId]; - if (!(client.Guilds?.ContainsKey(server.EmojiGuildId) ?? false)) - { - _logger.Warn($"Bot not in emoji server {server.EmojiGuildId}"); - return; - } - - var guild = client.Guilds[server.EmojiGuildId]; - foreach (var emoji in Strings.EmojiList) - { - try - { - var emojis = await guild.GetEmojisAsync(); - var emojiExists = emojis.FirstOrDefault(x => string.Compare(x.Name, emoji, true) == 0); - if (emojiExists == null) - { - _logger.Debug($"Emoji {emoji} doesn't exist, creating..."); - - var emojiPath = Path.Combine(Strings.EmojisFolder, emoji + ".png"); - if (!File.Exists(emojiPath)) - { - _logger.Error($"Unable to find emoji file at {emojiPath}, skipping..."); - continue; - } - - var fs = new FileStream(emojiPath, FileMode.Open, FileAccess.Read); - await guild.CreateEmojiAsync(emoji, fs, null, $"Missing `{emoji}` emoji."); - - _logger.Info($"Emoji {emoji} created successfully."); - } - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - await CacheGuildEmojisList(); - } - - private async Task CacheGuildEmojisList() - { - _logger.Trace($"LoadEmojis"); - - foreach (var (guildId, serverConfig) in _whConfig.Instance.Servers) - { - var emojiGuildId = serverConfig.EmojiGuildId; - if (!_servers.ContainsKey(guildId)) - continue; - - var configGuild = _servers[guildId]; - if (!configGuild.Guilds.ContainsKey(emojiGuildId)) - continue; - - var emojiGuild = configGuild.Guilds[emojiGuildId]; - var emojis = await emojiGuild.GetEmojisAsync(); - foreach (var name in Strings.EmojiList) - { - var emoji = emojis.FirstOrDefault(x => string.Compare(x.Name, name, true) == 0); - if (emoji == null) - continue; - - if (!MasterFile.Instance.Emojis.ContainsKey(emoji.Name)) - { - MasterFile.Instance.Emojis.Add(emoji.Name, emoji.Id); - continue; - } - } - } - } - - private async Task OnMidnightTimer() - { - _logger.Debug($"MIDNIGHT {DateTime.Now}"); - - Statistics.WriteOut(); - Statistics.Instance.Reset(); - - foreach (var (guildId, serverConfig) in _whConfig.Instance.Servers) - { - if (!_servers.ContainsKey(guildId)) - { - _logger.Warn($"{guildId} guild does not exist it Discord servers."); - continue; - } - var client = _servers[guildId]; - if (serverConfig.ShinyStats.Enabled) - { - _logger.Debug($"Starting Shiny Stat posting..."); - await PostShinyStats(client, guildId, serverConfig); - } - else - { - _logger.Debug($"Shiny Stat posting not enabled...skipping"); - } - - if (serverConfig.PruneQuestChannels && serverConfig.QuestChannelIds.Count > 0) - { - _logger.Debug($"Starting automatic quest messages cleanup..."); - await PruneQuestChannels(client, serverConfig); - } - else - { - _logger.Debug($"Quest cleanup not enabled...skipping"); - } - - Thread.Sleep(10 * 1000); - } - - CleanupDepartedMembers(); - } - - private async Task PostShinyStats(DiscordClient client, ulong guildId, DiscordServerConfig server) - { - var statsChannel = await client.GetChannelAsync(server.ShinyStats.ChannelId); - if (statsChannel == null) - { - _logger.Warn($"Unable to get channel id {server.ShinyStats.ChannelId} to post shiny stats."); - return; - } - - if (server.ShinyStats.ClearMessages) - { - _logger.Debug($"Deleting previous shiny stats messages in channel {server.ShinyStats.ChannelId}"); - await client.DeleteMessages(server.ShinyStats.ChannelId); - } - - //var guildId = server.GuildId; - _logger.Debug($"Posting shiny stats for guild {client.Guilds[guildId].Name} ({guildId}) in channel {server.ShinyStats.ChannelId}"); - // Subtract an hour to make sure it shows yesterday's date. - await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_TITLE").FormatText(DateTime.Now.Subtract(TimeSpan.FromHours(1)).ToLongDateString())); - Thread.Sleep(500); - await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_NEWLINE")); - var stats = await ShinyStats.GetShinyStats(_whConfig.Instance.Database.Scanner.ToString()); - if (stats == null) - { - _logger.Error($"Failed to get list of shiny stats for guild {guildId}, skipping..."); - return; - } - - var sorted = stats.Keys.ToList(); - sorted.Sort(); - - foreach (var pokemon in sorted) - { - if (pokemon == 0) - continue; - - if (!MasterFile.Instance.Pokedex.ContainsKey(pokemon)) - continue; - - var pkmn = MasterFile.Instance.Pokedex[pokemon]; - var pkmnStats = stats[pokemon]; - var chance = pkmnStats.Shiny == 0 || pkmnStats.Total == 0 ? 0 : Convert.ToInt32(pkmnStats.Total / pkmnStats.Shiny); - if (chance == 0) - await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_MESSAGE").FormatText(pkmn.Name, pokemon, pkmnStats.Shiny.ToString("N0"), pkmnStats.Total.ToString("N0"))); - else - await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_MESSAGE_WITH_RATIO").FormatText(pkmn.Name, pokemon, pkmnStats.Shiny.ToString("N0"), pkmnStats.Total.ToString("N0"), chance)); - - Thread.Sleep(500); - } - - var total = stats[0]; - var totalRatio = total.Shiny == 0 || total.Total == 0 ? 0 : Convert.ToInt32(total.Total / total.Shiny); - if (totalRatio == 0) - await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_TOTAL_MESSAGE").FormatText(total.Shiny.ToString("N0"), total.Total.ToString("N0"))); - else - await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO").FormatText(total.Shiny.ToString("N0"), total.Total.ToString("N0"), totalRatio)); - - Thread.Sleep(10 * 1000); - } - - private async Task PruneQuestChannels(DiscordClient client, DiscordServerConfig server) - { - try - { - var channelIds = server.QuestChannelIds; - _logger.Debug($"Quest channel pruning started for {channelIds.Count:N0} channels..."); - foreach (var channelId in channelIds) - { - var result = await client.DeleteMessages(channelId); - _logger.Debug($"Deleted all {result.Item2:N0} quest messages from channel {result.Item1.Name}."); - Thread.Sleep(1000); - } - _logger.Debug($"Finished automatic quest messages cleanup..."); - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - private void CleanupDepartedMembers() - { - _logger.Trace("CleanupDepartedMembers"); - - foreach (var (guildId, client) in _servers) - { - var server = _whConfig.Instance.Servers[guildId]; - if (!server.Subscriptions.Enabled) - return; - - _logger.Debug($"Checking if there are any subscriptions for members that are no longer apart of the server..."); - - var users = _subProcessor.Manager.Subscriptions; - foreach (var user in users) - { - var discordUser = client.GetMemberById(guildId, user.UserId); - if (discordUser == null) - { - _logger.Debug($"Removing user {user.UserId} subscription settings because they are no longer a member of the server."); - if (!SubscriptionManager.RemoveAllUserSubscriptions(user.GuildId, user.UserId)) - { - _logger.Warn($"Unable to remove user {user.UserId} subscription settings from the database."); - continue; - } - _logger.Info($"Successfully removed user {user.UserId}'s subscription settings from the database."); - } - } - } - } - - private void RegisterConfigMonitor() - { - var path = Path.Combine(Directory.GetCurrentDirectory(), Strings.ConfigFileName); - var fileWatcher = new FileWatcher(path); - fileWatcher.Changed += (sender, e) => - { - try - { - _whConfig.Instance = WhConfig.Load(e.FullPath); - } - catch (Exception ex) - { - _logger.Error("Error while reloading config:"); - _logger.Error(ex); - } - }; - fileWatcher.Start(); - } - - private async void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) - { - _logger.Debug("Unhandled exception caught."); - _logger.Error((Exception)e.ExceptionObject); - - if (!e.IsTerminating) - return; - - foreach (var (guildId, serverConfig) in _whConfig.Instance.Servers) - { - if (!_servers.ContainsKey(guildId)) - { - _logger.Error($"Unable to find guild id {guildId} in Discord server client list."); - continue; - } - var client = _servers[guildId]; - if (client != null) - { - var owner = await client.GetUserAsync(serverConfig.OwnerId); - if (owner == null) - { - _logger.Warn($"Unable to get owner from id {serverConfig.OwnerId}."); - return; - } - - await client.SendDirectMessage(owner, Translator.Instance.Translate("BOT_CRASH_MESSAGE"), null); - } - } - } - - #endregion - } -} diff --git a/src/ClientApp/README.md b/src/ClientApp/README.md new file mode 100644 index 00000000..b87cb004 --- /dev/null +++ b/src/ClientApp/README.md @@ -0,0 +1,46 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.\ +You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/src/ClientApp/build/favicon.ico b/src/ClientApp/build/favicon.ico new file mode 100644 index 00000000..a11777cc Binary files /dev/null and b/src/ClientApp/build/favicon.ico differ diff --git a/src/ClientApp/build/logo192.png b/src/ClientApp/build/logo192.png new file mode 100644 index 00000000..fc44b0a3 Binary files /dev/null and b/src/ClientApp/build/logo192.png differ diff --git a/src/ClientApp/build/logo512.png b/src/ClientApp/build/logo512.png new file mode 100644 index 00000000..a4e47a65 Binary files /dev/null and b/src/ClientApp/build/logo512.png differ diff --git a/src/ClientApp/build/manifest.json b/src/ClientApp/build/manifest.json new file mode 100644 index 00000000..080d6c77 --- /dev/null +++ b/src/ClientApp/build/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/src/ClientApp/build/robots.txt b/src/ClientApp/build/robots.txt new file mode 100644 index 00000000..e9e57dc4 --- /dev/null +++ b/src/ClientApp/build/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/src/ClientApp/package-lock.json b/src/ClientApp/package-lock.json new file mode 100644 index 00000000..771921ce --- /dev/null +++ b/src/ClientApp/package-lock.json @@ -0,0 +1,12890 @@ +{ + "name": "dashboard", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@apideck/better-ajv-errors": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.4.tgz", + "integrity": "sha512-Ic2d8ZT6HJiSikGVQvSklaFyw1OUv4g8sDOxa0PXSlbmN/3gL5IO1WYY9DOwTDqOFmjWoqG1yaaKnPDqYCE9KA==", + "requires": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + } + }, + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", + "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==" + }, + "@babel/core": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz", + "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.0", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/eslint-parser": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.2.tgz", + "integrity": "sha512-oFQYkE8SuH14+uR51JVAmdqwKYXGRjEXx7s+WiagVjqQ+HPE+nnwyF2qlVG8evUsUHmPcA+6YXMEDbIhEyQc5A==", + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/generator": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "requires": { + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", + "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", + "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==" + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "requires": { + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "requires": { + "@babel/types": "^7.17.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helper-replace-supers": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", + "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + }, + "dependencies": { + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-simple-access": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "requires": { + "@babel/types": "^7.18.2" + }, + "dependencies": { + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" + }, + "@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helpers": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + }, + "dependencies": { + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", + "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz", + "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", + "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", + "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", + "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", + "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.2.tgz", + "integrity": "sha512-kbDISufFOxeczi0v4NQP3p5kIeW6izn/6klfWBrIIdGZZe4UpHR+QU03FAoWjGGd9SUXAwbw2pup1kaL4OQsJQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.12", + "charcodes": "^0.2.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", + "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", + "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", + "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", + "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", + "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", + "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", + "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", + "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", + "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz", + "integrity": "sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz", + "integrity": "sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", + "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", + "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", + "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", + "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", + "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-classes": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", + "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", + "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", + "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", + "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz", + "integrity": "sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-flow": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", + "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "requires": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", + "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", + "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", + "requires": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", + "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", + "requires": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.18.2", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.4.tgz", + "integrity": "sha512-lH2UaQaHVOAeYrUUuZ8i38o76J/FnO8vu21OE+tD1MyP9lxdZoSfz+pDbWkq46GogUrdrMz3tiz/FYGB+bVThg==", + "requires": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", + "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", + "requires": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", + "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.17.12.tgz", + "integrity": "sha512-CaOtzk2fDYisbjAD4Sd1MTKGVIpRtx9bWLyj24Y/k6p4s4gQ3CqDGJauFJxt8M/LEx003d0i3klVqnN73qvK3w==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", + "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.12.tgz", + "integrity": "sha512-maEkX2xs2STuv2Px8QuqxqjhV2LsFobT1elCgyU5704fcyTu9DyD/bJXxD/mrRiVyhpHweOQ00OJ5FKhHq9oEw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", + "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/types": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + }, + "@babel/plugin-syntax-jsx": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", + "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.0.tgz", + "integrity": "sha512-6+0IK6ouvqDn9bmEG7mEyF/pwlJXVj5lwydybpyyH3D0A7Hftk+NCTdYjnLNZksn261xaOV5ksmp20pQEmc2RQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", + "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "regenerator-transform": "^0.15.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", + "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.2.tgz", + "integrity": "sha512-mr1ufuRMfS52ttq+1G1PD8OJNqgcTFjq3hwn8SZ5n1x1pBhi0E36rYMdTK0TsKtApJ4lDEdfXJwtGobQMHSMPg==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", + "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", + "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", + "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", + "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-typescript": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/preset-env": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", + "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-async-generator-functions": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.18.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.18.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-private-methods": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.17.12", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.17.12", + "@babel/plugin-transform-async-to-generator": "^7.17.12", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.17.12", + "@babel/plugin-transform-classes": "^7.17.12", + "@babel/plugin-transform-computed-properties": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.18.0", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.17.12", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.18.1", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.17.12", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.18.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.2", + "@babel/plugin-transform-modules-systemjs": "^7.18.0", + "@babel/plugin-transform-modules-umd": "^7.18.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", + "@babel/plugin-transform-new-target": "^7.17.12", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.17.12", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.18.0", + "@babel/plugin-transform-reserved-words": "^7.17.12", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.17.12", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.18.2", + "@babel/plugin-transform-typeof-symbol": "^7.17.12", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.2", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + }, + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.17.12.tgz", + "integrity": "sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.17.12", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/preset-typescript": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz", + "integrity": "sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.17.12" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + } + } + }, + "@babel/runtime": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz", + "integrity": "sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q==", + "requires": { + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz", + "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.0", + "@babel/types": "^7.18.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/types": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "@csstools/normalize.css": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", + "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" + }, + "@csstools/postcss-cascade-layers": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.3.tgz", + "integrity": "sha512-fvXP0+dcllGtRKAjA5n5tBr57xWQalKky09hSiXAZ9qqjHn0sDuQV2Jz0Y5zHRQ6iGrAjJZOf2+xQj3yuXfLwA==", + "requires": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, + "@csstools/postcss-color-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz", + "integrity": "sha512-5D5ND/mZWcQoSfYnSPsXtuiFxhzmhxt6pcjrFLJyldj+p0ZN2vvRpYNX+lahFTtMhAYOa2WmkdGINr0yP0CvGA==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-font-format-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz", + "integrity": "sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-hwb-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.1.tgz", + "integrity": "sha512-AMZwWyHbbNLBsDADWmoXT9A5yl5dsGEBeJSJRUJt8Y9n8Ziu7Wstt4MC8jtPW7xjcLecyfJwtnUTNSmOzcnWeg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-ic-unit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.0.tgz", + "integrity": "sha512-i4yps1mBp2ijrx7E96RXrQXQQHm6F4ym1TOD0D69/sjDjZvQ22tqiEvaNw7pFZTUO5b9vWRHzbHzP9+UKuw+bA==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-is-pseudo-class": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.5.tgz", + "integrity": "sha512-Ek+UFI4UP2hB9u0N1cJd6KgSF1rL0J3PT4is0oSStuus8+WzbGGPyJNMOKQ0w/tyPjxiCnOI4RdSMZt3nks64g==", + "requires": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, + "@csstools/postcss-normalize-display-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz", + "integrity": "sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-oklab-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.0.tgz", + "integrity": "sha512-e/Q5HopQzmnQgqimG9v3w2IG4VRABsBq3itOcn4bnm+j4enTgQZ0nWsaH/m9GV2otWGQ0nwccYL5vmLKyvP1ww==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-stepped-value-functions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.0.tgz", + "integrity": "sha512-q8c4bs1GumAiRenmFjASBcWSLKrbzHzWl6C2HcaAxAXIiL2rUlUWbqQZUjwVG5tied0rld19j/Mm90K3qI26vw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-trigonometric-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.1.tgz", + "integrity": "sha512-G78CY/+GePc6dDCTUbwI6TTFQ5fs3N9POHhI6v0QzteGpf6ylARiJUNz9HrRKi4eVYBNXjae1W2766iUEFxHlw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-unset-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.1.tgz", + "integrity": "sha512-f1G1WGDXEU/RN1TWAxBPQgQudtLnLQPyiWdtypkPC+mVYNKFKH/HYXSxH4MVNqwF8M0eDsoiU7HumJHCg/L/jg==" + }, + "@csstools/selector-specificity": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.0.tgz", + "integrity": "sha512-rZ6vufeY/UjAgtyiJ4WvfF6XP6HizIyOfbZOg0RnecIwjrvH8Am3nN1BpKnnPZunYAkUcPPXDhwbxOtGop8cfQ==" + }, + "@date-io/core": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.11.0.tgz", + "integrity": "sha512-DvPBnNoeuLaoSJZaxgpu54qzRhRKjSYVyQjhznTFrllKuDpm0sDFjHo6lvNLCM/cfMx2gb2PM2zY2kc9C8nmuw==" + }, + "@date-io/date-fns": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@date-io/date-fns/-/date-fns-2.11.0.tgz", + "integrity": "sha512-mPQ71plBeFrArvBSHtjWMHXA89IUbZ6kuo2dsjlRC/1uNOybo91spIb+wTu03NxKTl8ut07s0jJ9svF71afpRg==", + "requires": { + "@date-io/core": "^2.11.0" + } + }, + "@date-io/dayjs": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@date-io/dayjs/-/dayjs-2.11.0.tgz", + "integrity": "sha512-w67vRK56NZJIKhJM/CrNbfnIcuMvR3ApfxzNZiCZ5w29sxgBDeKuX4M+P7A9r5HXOMGcsOcpgaoTDINNGkdpGQ==", + "requires": { + "@date-io/core": "^2.11.0" + } + }, + "@date-io/luxon": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@date-io/luxon/-/luxon-2.11.1.tgz", + "integrity": "sha512-JUXo01kdPQxLORxqdENrgdUhooKgDUggsNRSdi2BcUhASIY2KGwwWXu8ikVHHGkw+DUF4FOEKGfkQd0RHSvX6g==", + "requires": { + "@date-io/core": "^2.11.0" + } + }, + "@date-io/moment": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@date-io/moment/-/moment-2.11.0.tgz", + "integrity": "sha512-QSL+83qezQ9Ty0dtFgAkk6eC0GMl/lgYfDajeVUDB3zVA2A038hzczRLBg29ifnBGhQMPABxuOafgWwhDjlarg==", + "requires": { + "@date-io/core": "^2.11.0" + } + }, + "@emotion/babel-plugin": { + "version": "11.7.2", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.7.2.tgz", + "integrity": "sha512-6mGSCWi9UzXut/ZAN6lGFu33wGR3SJisNl3c0tvlmb8XChH1b2SUvxvnOh7hvLpqyRdHHU9AiazV3Cwbk5SXKQ==", + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/runtime": "^7.13.10", + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.5", + "@emotion/serialize": "^1.0.2", + "babel-plugin-macros": "^2.6.1", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.0.13" + }, + "dependencies": { + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "requires": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + } + } + }, + "@emotion/cache": { + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.7.1.tgz", + "integrity": "sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==", + "requires": { + "@emotion/memoize": "^0.7.4", + "@emotion/sheet": "^1.1.0", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "stylis": "4.0.13" + } + }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "@emotion/is-prop-valid": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.1.tgz", + "integrity": "sha512-bW1Tos67CZkOURLc0OalnfxtSXQJMrAMV0jZTVGJUPSOd4qgjF3+tTD5CwJM13PHA8cltGW1WGbbvV9NpvUZPw==", + "requires": { + "@emotion/memoize": "^0.7.4" + } + }, + "@emotion/memoize": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", + "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" + }, + "@emotion/react": { + "version": "11.9.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.9.3.tgz", + "integrity": "sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@emotion/babel-plugin": "^11.7.1", + "@emotion/cache": "^11.9.3", + "@emotion/serialize": "^1.0.4", + "@emotion/utils": "^1.1.0", + "@emotion/weak-memoize": "^0.2.5", + "hoist-non-react-statics": "^3.3.1" + }, + "dependencies": { + "@emotion/cache": { + "version": "11.9.3", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.9.3.tgz", + "integrity": "sha512-0dgkI/JKlCXa+lEXviaMtGBL0ynpx4osh7rjOXE71q9bIF8G+XhJgvi+wDu0B0IdCVx37BffiwXlN9I3UuzFvg==", + "requires": { + "@emotion/memoize": "^0.7.4", + "@emotion/sheet": "^1.1.1", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "stylis": "4.0.13" + } + }, + "@emotion/serialize": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.4.tgz", + "integrity": "sha512-1JHamSpH8PIfFwAMryO2bNka+y8+KA5yga5Ocf2d7ZEiJjb7xlLW7aknBGZqJLajuLOvJ+72vN+IBSwPlXD1Pg==", + "requires": { + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.1.tgz", + "integrity": "sha512-J3YPccVRMiTZxYAY0IOq3kd+hUP8idY8Kz6B/Cyo+JuXq52Ek+zbPbSQUrVQp95aJ+lsAW7DPL1P2Z+U1jGkKA==" + }, + "@emotion/utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz", + "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==" + } + } + }, + "@emotion/serialize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz", + "integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==", + "requires": { + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.0.tgz", + "integrity": "sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==" + }, + "@emotion/styled": { + "version": "11.9.3", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.9.3.tgz", + "integrity": "sha512-o3sBNwbtoVz9v7WB1/Y/AmXl69YHmei2mrVnK7JgyBJ//Rst5yqPZCecEJlMlJrFeWHp+ki/54uN265V2pEcXA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@emotion/babel-plugin": "^11.7.1", + "@emotion/is-prop-valid": "^1.1.3", + "@emotion/serialize": "^1.0.4", + "@emotion/utils": "^1.1.0" + }, + "dependencies": { + "@emotion/is-prop-valid": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz", + "integrity": "sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA==", + "requires": { + "@emotion/memoize": "^0.7.4" + } + }, + "@emotion/serialize": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.4.tgz", + "integrity": "sha512-1JHamSpH8PIfFwAMryO2bNka+y8+KA5yga5Ocf2d7ZEiJjb7xlLW7aknBGZqJLajuLOvJ+72vN+IBSwPlXD1Pg==", + "requires": { + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" + } + }, + "@emotion/utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz", + "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==" + } + } + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "@emotion/utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.0.0.tgz", + "integrity": "sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA==" + }, + "@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + }, + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/schemas": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", + "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", + "requires": { + "@sinclair/typebox": "^0.23.3" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, + "@mui/base": { + "version": "5.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.66.tgz", + "integrity": "sha512-LARfVx0HmGV5YwU2pdIqEApQwz/CtEnYtKkV856hlY0cgi5NQL2htzZ/9ujKz0j3LFUaMYiYuJ2AOwrNtGFGrw==", + "requires": { + "@babel/runtime": "^7.16.7", + "@emotion/is-prop-valid": "^1.1.1", + "@mui/utils": "^5.3.0", + "@popperjs/core": "^2.4.4", + "clsx": "^1.1.1", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + } + }, + "@mui/core-downloads-tracker": { + "version": "5.10.10", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.10.tgz", + "integrity": "sha512-aDuE2PNEh+hAndxEWlZgq7uiFPZKJtnkPDX7v6kSCrMXA32ZaQ6rZi5olmC7DUHt/BaOSxb7N/im/ss0XBkDhA==" + }, + "@mui/icons-material": { + "version": "5.8.4", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.8.4.tgz", + "integrity": "sha512-9Z/vyj2szvEhGWDvb+gG875bOGm8b8rlHBKOD1+nA3PcgC3fV6W1AU6pfOorPeBfH2X4mb9Boe97vHvaSndQvA==", + "requires": { + "@babel/runtime": "^7.17.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", + "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "@mui/lab": { + "version": "5.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.66.tgz", + "integrity": "sha512-C/WB5vo+arkdbx3r1gRRKh4BcZJ763+ePcPHYj3pShDA1vG0jecp1RWO8MJ07SnsdfDHiKWtlUDJh+DpieR0Og==", + "requires": { + "@babel/runtime": "^7.16.7", + "@date-io/date-fns": "^2.11.0", + "@date-io/dayjs": "^2.11.0", + "@date-io/luxon": "^2.11.1", + "@date-io/moment": "^2.11.0", + "@mui/base": "5.0.0-alpha.66", + "@mui/system": "^5.3.0", + "@mui/utils": "^5.3.0", + "clsx": "^1.1.1", + "prop-types": "^15.7.2", + "react-is": "^17.0.2", + "react-transition-group": "^4.4.2", + "rifm": "^0.12.1" + } + }, + "@mui/material": { + "version": "5.10.8", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.8.tgz", + "integrity": "sha512-sF/Ka0IJjGXV52zoT4xAWEqXVRjNYbIjATo9L4Q5oQC5iJpGrKJFY16uNtWWB0+vp/nayAuPGZHrxtV+t3ecdQ==", + "requires": { + "@babel/runtime": "^7.19.0", + "@mui/base": "5.0.0-alpha.100", + "@mui/core-downloads-tracker": "^5.10.8", + "@mui/system": "^5.10.8", + "@mui/types": "^7.2.0", + "@mui/utils": "^5.10.6", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@emotion/cache": { + "version": "11.10.3", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz", + "integrity": "sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==", + "requires": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.0.13" + } + }, + "@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "requires": { + "@emotion/memoize": "^0.8.0" + } + }, + "@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "@emotion/sheet": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz", + "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==" + }, + "@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, + "@mui/base": { + "version": "5.0.0-alpha.100", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.100.tgz", + "integrity": "sha512-bSoJEKCENtmJrJDECHUe9PiqztIUACuSskyqw9ypqE7Dz3WxL3e8puFsWBkUsz+WOCjXh4B4Xljn88Ucxxv5HA==", + "requires": { + "@babel/runtime": "^7.19.0", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.0", + "@mui/utils": "^5.10.6", + "@popperjs/core": "^2.11.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, + "@mui/private-theming": { + "version": "5.10.9", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.9.tgz", + "integrity": "sha512-BN7/CnsVPVyBaQpDTij4uV2xGYHHHhOgpdxeYLlIu+TqnsVM7wUeF+37kXvHovxM6xmL5qoaVUD98gDC0IZnHg==", + "requires": { + "@babel/runtime": "^7.19.0", + "@mui/utils": "^5.10.9", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.10.8", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.8.tgz", + "integrity": "sha512-w+y8WI18EJV6zM/q41ug19cE70JTeO6sWFsQ7tgePQFpy6ToCVPh0YLrtqxUZXSoMStW5FMw0t9fHTFAqPbngw==", + "requires": { + "@babel/runtime": "^7.19.0", + "@emotion/cache": "^11.10.3", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + } + }, + "@mui/system": { + "version": "5.10.10", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.10.tgz", + "integrity": "sha512-TXwtKN0adKpBrZmO+eilQWoPf2veh050HLYrN78Kps9OhlvO70v/2Kya0+mORFhu9yhpAwjHXO8JII/R4a5ZLA==", + "requires": { + "@babel/runtime": "^7.19.0", + "@mui/private-theming": "^5.10.9", + "@mui/styled-engine": "^5.10.8", + "@mui/types": "^7.2.0", + "@mui/utils": "^5.10.9", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz", + "integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==" + }, + "@mui/utils": { + "version": "5.10.9", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.9.tgz", + "integrity": "sha512-2tdHWrq3+WCy+G6TIIaFx3cg7PorXZ71P375ExuX61od1NOAJP1mK90VxQ8N4aqnj2vmO3AQDkV4oV2Ktvt4bA==", + "requires": { + "@babel/runtime": "^7.19.0", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, + "@popperjs/core": { + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + } + } + }, + "@mui/private-theming": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.3.0.tgz", + "integrity": "sha512-EBobUEyM9fMnteKrVPp8pTMUh81xXakyfdpkoh7Y19q9JpD2eh7QGAQVJVj0JBFlcUJD60NIE4K8rdokrRmLwg==", + "requires": { + "@babel/runtime": "^7.16.7", + "@mui/utils": "^5.3.0", + "prop-types": "^15.7.2" + } + }, + "@mui/styled-engine": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.3.0.tgz", + "integrity": "sha512-I4YemFy9WnCLUdZ5T+6egpzc8e7Jq/uh9AJ3QInZHbyNu/9I2SWvNn7vHjWOT/D8Y8LMzIOhu5WwZbzjez7YRw==", + "requires": { + "@babel/runtime": "^7.16.7", + "@emotion/cache": "^11.7.1", + "prop-types": "^15.7.2" + } + }, + "@mui/styles": { + "version": "5.8.6", + "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.8.6.tgz", + "integrity": "sha512-0IvwctufjczoS5qERihquoeVwsz3/buHRpVIt6hNb9Jab2dKH38fhxvIHJTTmmJMQazchaAeVh7T3duOV2Vl2g==", + "requires": { + "@babel/runtime": "^7.17.2", + "@emotion/hash": "^0.8.0", + "@mui/private-theming": "^5.8.6", + "@mui/types": "^7.1.4", + "@mui/utils": "^5.8.6", + "clsx": "^1.1.1", + "csstype": "^3.1.0", + "hoist-non-react-statics": "^3.3.2", + "jss": "^10.8.2", + "jss-plugin-camel-case": "^10.8.2", + "jss-plugin-default-unit": "^10.8.2", + "jss-plugin-global": "^10.8.2", + "jss-plugin-nested": "^10.8.2", + "jss-plugin-props-sort": "^10.8.2", + "jss-plugin-rule-value-function": "^10.8.2", + "jss-plugin-vendor-prefixer": "^10.8.2", + "prop-types": "^15.8.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@mui/private-theming": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.9.1.tgz", + "integrity": "sha512-eIh2IZJInNTdgPLMo9cruzm8UDX5amBBxxsSoNre7lRj3wcsu3TG5OKjIbzkf4VxHHEhdPeNNQyt92k7L78u2A==", + "requires": { + "@babel/runtime": "^7.17.2", + "@mui/utils": "^5.9.1", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.4.tgz", + "integrity": "sha512-uveM3byMbthO+6tXZ1n2zm0W3uJCQYtwt/v5zV5I77v2v18u0ITkb8xwhsDD2i3V2Kye7SaNR6FFJ6lMuY/WqQ==" + }, + "@mui/utils": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.9.1.tgz", + "integrity": "sha512-8+4adOR3xusyJwvbnZxcjqcmbWvl7Og+260ZKIrSvwnFs0aLubL+8MhiceeDDGcmb0bTKxfUgRJ96j32Jb7P+A==", + "requires": { + "@babel/runtime": "^7.17.2", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "csstype": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, + "@mui/system": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.3.0.tgz", + "integrity": "sha512-mblz3EObrhhIMPwSEe2Az7MbMaXOFgrvItPOzZwcY5O9qERB7Rr8KQgbU8VouWLUqyV2i8BaFpLrkKPA6eX2Aw==", + "requires": { + "@babel/runtime": "^7.16.7", + "@mui/private-theming": "^5.3.0", + "@mui/styled-engine": "^5.3.0", + "@mui/types": "^7.1.0", + "@mui/utils": "^5.3.0", + "clsx": "^1.1.1", + "csstype": "^3.0.10", + "prop-types": "^15.7.2" + } + }, + "@mui/types": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.0.tgz", + "integrity": "sha512-Hh7ALdq/GjfIwLvqH3XftuY3bcKhupktTm+S6qRIDGOtPtRuq2L21VWzOK4p7kblirK0XgGVH5BLwa6u8z/6QQ==" + }, + "@mui/utils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.3.0.tgz", + "integrity": "sha512-O/E9IQKPMg0OrN7+gkn7Ga5o5WA2iXQGdyqNBFPNrYzxOvwzsEtM5K7MtTCGGYKFe8mhTRM0ZOjh5OM0dglw+Q==", + "requires": { + "@babel/runtime": "^7.16.7", + "@types/prop-types": "^15.7.4", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + } + }, + "@mui/x-data-grid": { + "version": "5.17.5", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-5.17.5.tgz", + "integrity": "sha512-rMSy2G/qFtvD3DQTBJ9d90VJfhCG/yEWsT0+m1CRybyS4O9u1hFjKOTr4FtTcjqu4qt7Nbrb/eLaQZVerN5P1Q==", + "requires": { + "@babel/runtime": "^7.18.9", + "@mui/utils": "^5.10.3", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "reselect": "^4.1.6" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@mui/utils": { + "version": "5.10.9", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.9.tgz", + "integrity": "sha512-2tdHWrq3+WCy+G6TIIaFx3cg7PorXZ71P375ExuX61od1NOAJP1mK90VxQ8N4aqnj2vmO3AQDkV4oV2Ktvt4bA==", + "requires": { + "@babel/runtime": "^7.19.0", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz", + "integrity": "sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q==", + "requires": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.8.1", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + } + } + }, + "@popperjs/core": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz", + "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==" + }, + "@react-leaflet/core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-1.1.1.tgz", + "integrity": "sha512-7PGLWa9MZ5x/cWy8EH2VzI4T8q5WpuHbixzCDXqixP/WyqwIrg5NDUPgYuFnB4IEIZF+6nA265mYzswFo/h1Pw==" + }, + "@remix-run/router": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.1.tgz", + "integrity": "sha512-eBV5rvW4dRFOU1eajN7FmYxjAIVz/mRHgUE9En9mBn6m3mulK3WTR5C3iQhL9MZ14rWAq+xOlEaCkDiW0/heOg==" + }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + } + } + }, + "@rushstack/eslint-patch": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz", + "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==" + }, + "@sinclair/typebox": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", + "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==" + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "requires": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" + }, + "@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + } + }, + "@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "requires": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "requires": { + "@babel/types": "^7.12.6" + } + }, + "@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "requires": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + } + }, + "@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "requires": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + } + }, + "@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" + }, + "@types/babel__core": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/geojson": { + "version": "7946.0.8", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", + "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==", + "dev": true + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "requires": { + "@types/node": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "@types/leaflet": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.7.9.tgz", + "integrity": "sha512-H8vPgD49HKzqM41ArHGZM70g/tfhp8W+JcPxfnF+5H/Xvp+xiP+KQOUNWU8U89fqS1Jj3cpRY/+nbnaHFzwnFA==", + "dev": true, + "requires": { + "@types/geojson": "*" + } + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "@types/node": { + "version": "16.11.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.21.tgz", + "integrity": "sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/prettier": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==" + }, + "@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" + }, + "@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/ramda": { + "version": "0.27.64", + "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.27.64.tgz", + "integrity": "sha512-EDf++ss/JoMiDpvT1MuA8oi88OwpvmqVE+o8Ojm5v/5bdJEPZ6eIQd/XYAeQ0imlwG6Tf0Npfq4Z9w3hAKBk9Q==", + "dev": true, + "requires": { + "ts-toolbelt": "^6.15.1" + } + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "@types/react": { + "version": "17.0.38", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.38.tgz", + "integrity": "sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", + "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-is": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", + "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", + "requires": { + "@types/react": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "requires": { + "@types/react": "*" + } + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "requires": { + "@types/node": "*" + } + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.27.1.tgz", + "integrity": "sha512-6dM5NKT57ZduNnJfpY81Phe9nc9wolnMCnknb1im6brWi1RYv84nbMS3olJa27B6+irUVV1X/Wb+Am0FjJdGFw==", + "requires": { + "@typescript-eslint/scope-manager": "5.27.1", + "@typescript-eslint/type-utils": "5.27.1", + "@typescript-eslint/utils": "5.27.1", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.27.1.tgz", + "integrity": "sha512-Vd8uewIixGP93sEnmTRIH6jHZYRQRkGPDPpapACMvitJKX8335VHNyqKTE+mZ+m3E2c5VznTZfSsSsS5IF7vUA==", + "requires": { + "@typescript-eslint/utils": "5.27.1" + } + }, + "@typescript-eslint/parser": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.27.1.tgz", + "integrity": "sha512-7Va2ZOkHi5NP+AZwb5ReLgNF6nWLGTeUJfxdkVUAPPSaAdbWNnFZzLZ4EGGmmiCTg+AwlbE1KyUYTBglosSLHQ==", + "requires": { + "@typescript-eslint/scope-manager": "5.27.1", + "@typescript-eslint/types": "5.27.1", + "@typescript-eslint/typescript-estree": "5.27.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.27.1.tgz", + "integrity": "sha512-fQEOSa/QroWE6fAEg+bJxtRZJTH8NTskggybogHt4H9Da8zd4cJji76gA5SBlR0MgtwF7rebxTbDKB49YUCpAg==", + "requires": { + "@typescript-eslint/types": "5.27.1", + "@typescript-eslint/visitor-keys": "5.27.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.27.1.tgz", + "integrity": "sha512-+UC1vVUWaDHRnC2cQrCJ4QtVjpjjCgjNFpg8b03nERmkHv9JV9X5M19D7UFMd+/G7T/sgFwX2pGmWK38rqyvXw==", + "requires": { + "@typescript-eslint/utils": "5.27.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.27.1.tgz", + "integrity": "sha512-LgogNVkBhCTZU/m8XgEYIWICD6m4dmEDbKXESCbqOXfKZxRKeqpiJXQIErv66sdopRKZPo5l32ymNqibYEH/xg==" + }, + "@typescript-eslint/typescript-estree": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.27.1.tgz", + "integrity": "sha512-DnZvvq3TAJ5ke+hk0LklvxwYsnXpRdqUY5gaVS0D4raKtbznPz71UJGnPTHEFo0GDxqLOLdMkkmVZjSpET1hFw==", + "requires": { + "@typescript-eslint/types": "5.27.1", + "@typescript-eslint/visitor-keys": "5.27.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.27.1.tgz", + "integrity": "sha512-mZ9WEn1ZLDaVrhRaYgzbkXBkTPghPFsup8zDbbsYTxC5OmqrFE7skkKS/sraVsLP3TcT3Ki5CSyEFBRkLH/H/w==", + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.27.1", + "@typescript-eslint/types": "5.27.1", + "@typescript-eslint/typescript-estree": "5.27.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.27.1.tgz", + "integrity": "sha512-xYs6ffo01nhdJgPieyk7HAOpjhTsx7r/oB9LWEhwAXgwn33tkr+W8DI2ChboqhZlC4q3TC6geDYPoiX8ROqyOQ==", + "requires": { + "@typescript-eslint/types": "5.27.1", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "address": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", + "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==" + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.reduce": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", + "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "autoprefixer": { + "version": "10.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", + "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "requires": { + "browserslist": "^4.20.3", + "caniuse-lite": "^1.0.30001335", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "axe-core": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz", + "integrity": "sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==" + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" + }, + "babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "requires": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==" + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "requires": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "requires": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "bfj": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", + "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", + "requires": { + "bluebird": "^3.5.5", + "check-types": "^11.1.1", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "bonjour-service": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz", + "integrity": "sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==", + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "browserslist": { + "version": "4.20.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", + "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", + "requires": { + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", + "escalade": "^3.1.1", + "node-releases": "^2.0.5", + "picocolors": "^1.0.0" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001350", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001350.tgz", + "integrity": "sha512-NZBql38Pzd+rAu5SPXv+qmTWGQuFsRiemHCJCAPvkoDxWV19/xqL2YHF32fDJ9SDLdLqfax8+S0CO3ncDCp9Iw==" + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + }, + "charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==" + }, + "check-types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", + "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==" + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + }, + "ci-info": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz", + "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==" + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + }, + "clean-css": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", + "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" + }, + "colorette": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.17.tgz", + "integrity": "sha512-hJo+3Bkn0NCHybn9Tu35fIeoOKGOk5OCC32y4Hz2It+qlCO2Q3DeQ1hRn/tDDMQKRYUEzqsl7jbF6dYKjlE60g==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" + }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "core-js": { + "version": "3.22.8", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.8.tgz", + "integrity": "sha512-UoGQ/cfzGYIuiq6Z7vWL1HfkE9U9IZ4Ub+0XSiJTCzvbZzgPA69oDF2f+lgJ6dFFLEdjW5O6svvoKzXX23xFkA==" + }, + "core-js-compat": { + "version": "3.22.8", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.8.tgz", + "integrity": "sha512-pQnwg4xtuvc2Bs/5zYQPaEYYSuTxsF7LBWF0SvnVhthZo/Qe+rJpcEekrdNK5DWwDJ0gv0oI9NNX5Mppdy0ctg==", + "requires": { + "browserslist": "^4.20.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "core-js-pure": { + "version": "3.22.8", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.8.tgz", + "integrity": "sha512-bOxbZIy9S5n4OVH63XaLVXZ49QKicjowDx/UELyJ68vxfCRpYsbyh/WNZNfEfAk+ekA8vSjt+gCDpvh672bc3w==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "css-declaration-sorter": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", + "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==" + }, + "css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "css-loader": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + } + }, + "css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "requires": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==" + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-vendor": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", + "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", + "requires": { + "@babel/runtime": "^7.8.3", + "is-in-browser": "^1.0.2" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "cssdb": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.6.3.tgz", + "integrity": "sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.11.tgz", + "integrity": "sha512-2nx+O6LvewPo5EBtYrKc8762mMkZRk9cMGIOP4UlkmxHm7ObxH+zvsJJ+qLwPkUc4/yumL/qJkavYi9NlodWIQ==", + "requires": { + "cssnano-preset-default": "^5.2.11", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.11", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.11.tgz", + "integrity": "sha512-4PadR1NtuaIK8MvLNuY7MznK4WJteldGlzCiMaaTiOUP+apeiIvUDIXykzUOoqgOOUAHrU64ncdD90NfZR3LSQ==", + "requires": { + "css-declaration-sorter": "^6.2.2", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.2", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.5", + "postcss-merge-rules": "^5.1.2", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.3", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.0", + "postcss-normalize-repeat-style": "^5.1.0", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.2", + "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==" + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + } + } + }, + "csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + }, + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "requires": { + "execa": "^5.0.0" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "dns-packet": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.1.tgz", + "integrity": "sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==", + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "~0.4" + } + }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + } + } + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + } + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.4.148", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.148.tgz", + "integrity": "sha512-8MJk1bcQUAYkuvCyWZxaldiwoDG0E0AMzBGA6cv3WfuvJySiPgfidEPBFCRRH3cZm6SVZwo/oRlK1ehi1QNEIQ==" + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "enhanced-resolve": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", + "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "requires": { + "stackframe": "^1.3.4" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz", + "integrity": "sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==", + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "requires": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + } + } + }, + "eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "requires": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "requires": { + "@typescript-eslint/experimental-utils": "^5.0.0" + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "requires": { + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" + } + }, + "eslint-plugin-react": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz", + "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==", + "requires": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz", + "integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==" + }, + "eslint-plugin-testing-library": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.5.1.tgz", + "integrity": "sha512-plLEkkbAKBjPxsLj7x4jNapcHAg2ernkQlKKrN2I8NrQwPISZHyCUNvg5Hv3EDqOQReToQb5bnqXYbkijJPE/g==", + "requires": { + "@typescript-eslint/utils": "^5.13.0" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + }, + "eslint-webpack-plugin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", + "requires": { + "@types/eslint": "^7.28.2", + "jest-worker": "^27.3.1", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1" + } + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "requires": { + "bser": "2.1.1" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + } + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "requires": { + "duplexer": "^0.1.2" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + } + } + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==" + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "hyphenate-style-name": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", + "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" + }, + "idb": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", + "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==" + }, + "identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "requires": { + "harmony-reflect": "^1.4.6" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + }, + "immer": { + "version": "9.0.14", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.14.tgz", + "integrity": "sha512-ubBeqQutOSLIFCUBN03jGeOS6a3DoYlSYwYJTa+gSKEZKU5redJIqkIdZ3JVv/4RZpfcXdAWH5zCNLWPRv2WDw==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + } + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-in-browser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", + "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" + }, + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + }, + "istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "requires": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" + }, + "jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "requires": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "@jest/console": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.1.tgz", + "integrity": "sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA==", + "requires": { + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", + "slash": "^3.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "@jest/test-result": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.1.tgz", + "integrity": "sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ==", + "requires": { + "@jest/console": "^28.1.1", + "@jest/types": "^28.1.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-message-util": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" + }, + "jest-util": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", + "requires": { + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-watcher": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.1.tgz", + "integrity": "sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug==", + "requires": { + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.1", + "string-length": "^4.0.1" + }, + "dependencies": { + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + }, + "string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "requires": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==" + } + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonpointer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", + "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==" + }, + "jss": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.1.tgz", + "integrity": "sha512-omDBQTYyIdYuHee1mkpqDyHw2NguCrURBU1izPPHmdtDK6SkP7P3buZt4ybHWOahTZ3+xd0C+zLPBBw7Hn3eYg==", + "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^3.0.2", + "is-in-browser": "^1.1.3", + "tiny-warning": "^1.0.2" + } + }, + "jss-plugin-camel-case": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.1.tgz", + "integrity": "sha512-irEr3Z2ENUz71OIq6PWN0N6g3uIA6LyGEwiIfL1JBzy+HVZS17xq/vwnHda3KyvPls18cKiwNNuuVwY6TrWwWg==", + "requires": { + "@babel/runtime": "^7.3.1", + "hyphenate-style-name": "^1.0.3", + "jss": "10.9.1" + } + }, + "jss-plugin-default-unit": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.1.tgz", + "integrity": "sha512-sqQ1nRSy07z1brABTXK8EamDDjYVp/u9b/gKL51ZB+NNzbqvQF0CR33fGKPt0IOai98mzk0aHHIpf5il7mRN7A==", + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.9.1" + } + }, + "jss-plugin-global": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.1.tgz", + "integrity": "sha512-wc8EQMUe9NGInmnZErA1xQsX9jfk+7MrgN0sOB7l1IqfFQyuN0ntgo93bKhIj4I5RUtzjCskcvReBEZVwAHK8w==", + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.9.1" + } + }, + "jss-plugin-nested": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.1.tgz", + "integrity": "sha512-5kSHhhZra1+xwitBVyKN4da00860X7DDeuzf+sF8C6L6C0DuV2VAy6MKIoWKuIrx3pknYUgS/eo/VfsRmFP5Mw==", + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.9.1", + "tiny-warning": "^1.0.2" + } + }, + "jss-plugin-props-sort": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.1.tgz", + "integrity": "sha512-Z+KkIty+MEq8+7SDGYdpb9A0IV6NTlk5s4NGGPvgHxyB/6gr46XWvaHuPE8BagrC+k1Aq5E63nPN6uL0pKsnjw==", + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.9.1" + } + }, + "jss-plugin-rule-value-function": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.1.tgz", + "integrity": "sha512-4GbLHDqq+Ps6BZMRYZwjiAtxuqnscGLxwG4YnrgfuDM/yqGNJFZwK4Zfabs3XMe0cM+IbadsgJVUQgJwuNB4IA==", + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.9.1", + "tiny-warning": "^1.0.2" + } + }, + "jss-plugin-vendor-prefixer": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.1.tgz", + "integrity": "sha512-tlaN/UdAkim7vji7EcAw5MbOUq5/Vh1hhrWMzmdlcDATwHhDp2bYiq9G21NEa5D0AzcW631VjJq7WulpE1APHQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "css-vendor": "^2.0.8", + "jss": "10.9.1" + } + }, + "jsx-ast-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz", + "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==", + "requires": { + "array-includes": "^3.1.4", + "object.assign": "^4.1.2" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" + }, + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==" + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "leaflet": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.7.1.tgz", + "integrity": "sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw==" + }, + "leaflet-draw": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/leaflet-draw/-/leaflet-draw-1.0.4.tgz", + "integrity": "sha512-rsQ6saQO5ST5Aj6XRFylr5zvarWgzWnrg46zQ1MEOEIHsppdC/8hnN8qMoFvACsPvTioAuysya/TVtog15tyAQ==" + }, + "leaflet-easybutton": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/leaflet-easybutton/-/leaflet-easybutton-2.4.0.tgz", + "integrity": "sha512-O+qsQq4zTF6ds8VClnytobTH/MKalctlPpiA8L+bNKHP14J3lgJpvEd/jSpq9mHTI6qOzRAvbQX6wS6qNwThvg==", + "requires": { + "leaflet": "^1.0.1" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "requires": { + "tmpl": "1.0.5" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "memfs": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.4.tgz", + "integrity": "sha512-W4gHNUE++1oSJVn8Y68jPXi+mkx3fXR5ITE/Ubz6EQ3xRpCN5k2CQ4AUR8094Z7211F876TyoBACGsIveqgiGA==", + "requires": { + "fs-monkey": "1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mini-css-extract-plugin": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz", + "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==", + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", + "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", + "requires": { + "array.prototype.reduce": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" + } + }, + "object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + } + } + }, + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-attribute-case-insensitive": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.1.tgz", + "integrity": "sha512-wrt2VndqSLJpyBRNz9OmJcgnhI9MaongeWgapdBuUMu2a/KNJ8SENesG4SdiTnQwGO9b1VKbTWYAfCPeokLqZQ==", + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==" + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-functional-notation": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.3.tgz", + "integrity": "sha512-5fbr6FzFzjwHXKsVnkmEYrJYG8VNNzvD1tAXaPPWR97S6rhKI5uh2yOfV5TAzhDkZoq4h+chxEplFDc8GeyFtw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-hex-alpha": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.3.tgz", + "integrity": "sha512-fESawWJCrBV035DcbKRPAVmy21LpoyiXdPTuHUfWJ14ZRjY7Y7PA6P4g8z6LQGYhU1WAxkTxjIjurXzoe68Glw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-rebeccapurple": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", + "integrity": "sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", + "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "requires": { + "browserslist": "^4.20.3", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-properties": { + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.7.tgz", + "integrity": "sha512-N/hYP5gSoFhaqxi2DPCmvto/ZcRDVjE3T1LiAMzc/bg53hvhcHOLpXOHb526LzBBp5ZlAUhkuot/bfpmpgStJg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-dir-pseudo-class": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", + "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==" + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==" + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==" + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==" + }, + "postcss-double-position-gradients": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz", + "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==" + }, + "postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==" + }, + "postcss-gap-properties": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", + "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==" + }, + "postcss-image-set-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", + "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==" + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-lab-function": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", + "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + } + }, + "postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==" + }, + "postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==" + }, + "postcss-merge-longhand": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.5.tgz", + "integrity": "sha512-NOG1grw9wIO+60arKa2YYsrbgvP6tp+jqc7+ZD5/MalIw234ooH2C6KlR6FEn4yle7GqZoBxSK1mLBE9KPur6w==", + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" + } + }, + "postcss-merge-rules": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", + "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", + "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "requires": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "postcss-nesting": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.8.tgz", + "integrity": "sha512-txdb3/idHYsBbNDFo1PFY0ExCgH5nfWi8G5lO49e6iuU42TydbODTzJgF5UuL5bhgeSlnAtDgfFTDG0Cl1zaSQ==", + "requires": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "requires": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==" + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz", + "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz", + "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", + "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "requires": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-opacity-percentage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==" + }, + "postcss-ordered-values": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.2.tgz", + "integrity": "sha512-wr2avRbW4HS2XE2ZCqpfp4N/tDC6GZKZ+SVP8UBTOVS8QWrc4TD8MYrebJrvVVlGPKszmiSCzue43NDiVtgDmg==", + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-overflow-shorthand": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", + "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==" + }, + "postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==" + }, + "postcss-place": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", + "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-preset-env": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.7.1.tgz", + "integrity": "sha512-1sx6+Nl1wMVJzaYLVaz4OAR6JodIN/Z1upmVqLwSPCLT6XyxrEoePgNMHPH08kseLe3z06i9Vfkt/32BYEKDeA==", + "requires": { + "@csstools/postcss-cascade-layers": "^1.0.2", + "@csstools/postcss-color-function": "^1.1.0", + "@csstools/postcss-font-format-keywords": "^1.0.0", + "@csstools/postcss-hwb-function": "^1.0.1", + "@csstools/postcss-ic-unit": "^1.0.0", + "@csstools/postcss-is-pseudo-class": "^2.0.4", + "@csstools/postcss-normalize-display-values": "^1.0.0", + "@csstools/postcss-oklab-function": "^1.1.0", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.1", + "@csstools/postcss-unset-value": "^1.0.1", + "autoprefixer": "^10.4.7", + "browserslist": "^4.20.3", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^6.6.3", + "postcss-attribute-case-insensitive": "^5.0.1", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.3", + "postcss-color-hex-alpha": "^8.0.3", + "postcss-color-rebeccapurple": "^7.0.2", + "postcss-custom-media": "^8.0.1", + "postcss-custom-properties": "^12.1.7", + "postcss-custom-selectors": "^6.0.2", + "postcss-dir-pseudo-class": "^6.0.4", + "postcss-double-position-gradients": "^3.1.1", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.3", + "postcss-image-set-function": "^4.0.6", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.0", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.1.7", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.3", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.4", + "postcss-pseudo-class-any-link": "^7.1.4", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-pseudo-class-any-link": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.4.tgz", + "integrity": "sha512-JxRcLXm96u14N3RzFavPIE9cRPuOqLDuzKeBsqi4oRk4vt8n0A7I0plFs/VXTg7U2n7g/XkQi0OwqTO3VWBfEg==", + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-reduce-initial": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", + "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==" + }, + "postcss-selector-not": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.0.tgz", + "integrity": "sha512-i/HI/VNd3V9e1WOLCwJsf9nePBRXqcGtVibcJ9FsVo0agfDEfsLSlFt94aYjY35wUNcdG0KrvdyjEr7It50wLQ==", + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "dependencies": { + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + } + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "requires": { + "asap": "~2.0.6" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + } + } + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + } + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "requires": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + } + }, + "react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "requires": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "react-leaflet": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-3.2.5.tgz", + "integrity": "sha512-Z3KZ+4SijsRbbrt2I1a3ZDY6+V6Pm91eYTdxTN18G6IOkFRsJo1BuSPLFnyFrlF3WDjQFPEcTPkEgD1VEeAoBg==", + "requires": { + "@react-leaflet/core": "^1.1.1" + } + }, + "react-leaflet-draw": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/react-leaflet-draw/-/react-leaflet-draw-0.20.1.tgz", + "integrity": "sha512-Y5XYWut/GL8wku5j65PJeu36tMT1bDL4T963tHfynBD9XaujGbVAvXw2gLGN9SKQ67m15tfxtMI+E4oeNMjnIQ==", + "requires": { + "fast-deep-equal": "^3.1.3", + "lodash-es": "^4.17.15" + } + }, + "react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" + }, + "react-router": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.1.tgz", + "integrity": "sha512-OJASKp5AykDWFewgWUim1vlLr7yfD4vO/h+bSgcP/ix8Md+LMHuAjovA74MQfsfhQJGGN1nHRhwS5qQQbbBt3A==", + "requires": { + "@remix-run/router": "1.0.1" + } + }, + "react-router-dom": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.1.tgz", + "integrity": "sha512-MY7NJCrGNVJtGp8ODMOBHu20UaIkmwD2V3YsAOUQoCXFk7Ppdwf55RdcGyrSj+ycSL9Uiwrb3gTLYSnzcRoXww==", + "requires": { + "@remix-run/router": "1.0.1", + "react-router": "6.4.1" + } + }, + "react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "requires": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "fsevents": "^2.3.2", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + } + }, + "react-transition-group": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", + "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "requires": { + "minimatch": "3.0.4" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + }, + "regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" + }, + "regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "reselect": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==" + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rifm": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/rifm/-/rifm-0.12.1.tgz", + "integrity": "sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.75.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz", + "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" + }, + "sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "selfsigned": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", + "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", + "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", + "requires": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + } + } + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + } + } + }, + "string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "style-loader": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==" + }, + "stylehacks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", + "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "requires": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + } + }, + "stylis": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "tailwindcss": { + "version": "3.0.24", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", + "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", + "requires": { + "arg": "^5.0.1", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.12", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.0" + }, + "dependencies": { + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" + }, + "tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "requires": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" + } + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", + "requires": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "dependencies": { + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "requires": { + "punycode": "^2.1.1" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "ts-toolbelt": { + "version": "6.15.5", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz", + "integrity": "sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + }, + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + } + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "requires": { + "makeerror": "1.0.12" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "webpack": { + "version": "5.73.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz", + "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.2.tgz", + "integrity": "sha512-H95Ns95dP24ZsEzO6G9iT+PNw4Q7ltll1GfJHV4fKphuHWgKFzGHWi4alTlTnpk1SPPk41X+l2RB7rLfIhnB9Q==", + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "ws": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==" + } + } + }, + "webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "requires": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + } + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "workbox-background-sync": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.3.tgz", + "integrity": "sha512-0DD/V05FAcek6tWv9XYj2w5T/plxhDSpclIcAGjA/b7t/6PdaRkQ7ZgtAX6Q/L7kV7wZ8uYRJUoH11VjNipMZw==", + "requires": { + "idb": "^6.1.4", + "workbox-core": "6.5.3" + } + }, + "workbox-broadcast-update": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.3.tgz", + "integrity": "sha512-4AwCIA5DiDrYhlN+Miv/fp5T3/whNmSL+KqhTwRBTZIL6pvTgE4lVuRzAt1JltmqyMcQ3SEfCdfxczuI4kwFQg==", + "requires": { + "workbox-core": "6.5.3" + } + }, + "workbox-build": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.3.tgz", + "integrity": "sha512-8JNHHS7u13nhwIYCDea9MNXBNPHXCs5KDZPKI/ZNTr3f4sMGoD7hgFGecbyjX1gw4z6e9bMpMsOEJNyH5htA/w==", + "requires": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.5.3", + "workbox-broadcast-update": "6.5.3", + "workbox-cacheable-response": "6.5.3", + "workbox-core": "6.5.3", + "workbox-expiration": "6.5.3", + "workbox-google-analytics": "6.5.3", + "workbox-navigation-preload": "6.5.3", + "workbox-precaching": "6.5.3", + "workbox-range-requests": "6.5.3", + "workbox-recipes": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3", + "workbox-streams": "6.5.3", + "workbox-sw": "6.5.3", + "workbox-window": "6.5.3" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "requires": { + "whatwg-url": "^7.0.0" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "workbox-cacheable-response": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.3.tgz", + "integrity": "sha512-6JE/Zm05hNasHzzAGKDkqqgYtZZL2H06ic2GxuRLStA4S/rHUfm2mnLFFXuHAaGR1XuuYyVCEey1M6H3PdZ7SQ==", + "requires": { + "workbox-core": "6.5.3" + } + }, + "workbox-core": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.3.tgz", + "integrity": "sha512-Bb9ey5n/M9x+l3fBTlLpHt9ASTzgSGj6vxni7pY72ilB/Pb3XtN+cZ9yueboVhD5+9cNQrC9n/E1fSrqWsUz7Q==" + }, + "workbox-expiration": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.3.tgz", + "integrity": "sha512-jzYopYR1zD04ZMdlbn/R2Ik6ixiXbi15c9iX5H8CTi6RPDz7uhvMLZPKEndZTpfgmUk8mdmT9Vx/AhbuCl5Sqw==", + "requires": { + "idb": "^6.1.4", + "workbox-core": "6.5.3" + } + }, + "workbox-google-analytics": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.3.tgz", + "integrity": "sha512-3GLCHotz5umoRSb4aNQeTbILETcrTVEozSfLhHSBaegHs1PnqCmN0zbIy2TjTpph2AGXiNwDrWGF0AN+UgDNTw==", + "requires": { + "workbox-background-sync": "6.5.3", + "workbox-core": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" + } + }, + "workbox-navigation-preload": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.3.tgz", + "integrity": "sha512-bK1gDFTc5iu6lH3UQ07QVo+0ovErhRNGvJJO/1ngknT0UQ702nmOUhoN9qE5mhuQSrnK+cqu7O7xeaJ+Rd9Tmg==", + "requires": { + "workbox-core": "6.5.3" + } + }, + "workbox-precaching": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.3.tgz", + "integrity": "sha512-sjNfgNLSsRX5zcc63H/ar/hCf+T19fRtTqvWh795gdpghWb5xsfEkecXEvZ8biEi1QD7X/ljtHphdaPvXDygMQ==", + "requires": { + "workbox-core": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" + } + }, + "workbox-range-requests": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.3.tgz", + "integrity": "sha512-pGCP80Bpn/0Q0MQsfETSfmtXsQcu3M2QCJwSFuJ6cDp8s2XmbUXkzbuQhCUzKR86ZH2Vex/VUjb2UaZBGamijA==", + "requires": { + "workbox-core": "6.5.3" + } + }, + "workbox-recipes": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.3.tgz", + "integrity": "sha512-IcgiKYmbGiDvvf3PMSEtmwqxwfQ5zwI7OZPio3GWu4PfehA8jI8JHI3KZj+PCfRiUPZhjQHJ3v1HbNs+SiSkig==", + "requires": { + "workbox-cacheable-response": "6.5.3", + "workbox-core": "6.5.3", + "workbox-expiration": "6.5.3", + "workbox-precaching": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" + } + }, + "workbox-routing": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.3.tgz", + "integrity": "sha512-DFjxcuRAJjjt4T34RbMm3MCn+xnd36UT/2RfPRfa8VWJGItGJIn7tG+GwVTdHmvE54i/QmVTJepyAGWtoLPTmg==", + "requires": { + "workbox-core": "6.5.3" + } + }, + "workbox-strategies": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.3.tgz", + "integrity": "sha512-MgmGRrDVXs7rtSCcetZgkSZyMpRGw8HqL2aguszOc3nUmzGZsT238z/NN9ZouCxSzDu3PQ3ZSKmovAacaIhu1w==", + "requires": { + "workbox-core": "6.5.3" + } + }, + "workbox-streams": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.3.tgz", + "integrity": "sha512-vN4Qi8o+b7zj1FDVNZ+PlmAcy1sBoV7SC956uhqYvZ9Sg1fViSbOpydULOssVJ4tOyKRifH/eoi6h99d+sJ33w==", + "requires": { + "workbox-core": "6.5.3", + "workbox-routing": "6.5.3" + } + }, + "workbox-sw": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.3.tgz", + "integrity": "sha512-BQBzm092w+NqdIEF2yhl32dERt9j9MDGUTa2Eaa+o3YKL4Qqw55W9yQC6f44FdAHdAJrJvp0t+HVrfh8AiGj8A==" + }, + "workbox-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-Es8Xr02Gi6Kc3zaUwR691ZLy61hz3vhhs5GztcklQ7kl5k2qAusPh0s6LF3wEtlpfs9ZDErnmy5SErwoll7jBA==", + "requires": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.5.3" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "workbox-window": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.3.tgz", + "integrity": "sha512-GnJbx1kcKXDtoJBVZs/P7ddP0Yt52NNy4nocjBpYPiRhMqTpJCNrSL+fGHZ/i/oP6p/vhE8II0sA6AZGKGnssw==", + "requires": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.3" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==" + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + } + } +} diff --git a/src/ClientApp/package.json b/src/ClientApp/package.json new file mode 100644 index 00000000..e56905f5 --- /dev/null +++ b/src/ClientApp/package.json @@ -0,0 +1,57 @@ +{ + "name": "dashboard", + "version": "0.1.0", + "private": true, + "homepage": "/dashboard/", + "dependencies": { + "@emotion/react": "^11.9.3", + "@emotion/styled": "^11.9.3", + "@mui/icons-material": "^5.8.4", + "@mui/lab": "^5.0.0-alpha.66", + "@mui/material": "^5.10.8", + "@mui/styles": "^5.8.6", + "@mui/x-data-grid": "^5.17.5", + "leaflet": "^1.7.1", + "leaflet-draw": "^1.0.4", + "leaflet-easybutton": "^2.4.0", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-leaflet": "^3.2.5", + "react-leaflet-draw": "^0.20.1", + "react-router-dom": "^6.4.1", + "react-scripts": "5.0.1", + "rimraf": "^3.0.2", + "typescript": "^4.8.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@types/leaflet": "^1.7.9", + "@types/node": "^16.11.21", + "@types/ramda": "^0.27.64", + "@types/react": "^17.0.38", + "@types/react-dom": "^17.0.11" + } +} diff --git a/src/ClientApp/public/favicon.ico b/src/ClientApp/public/favicon.ico new file mode 100644 index 00000000..a11777cc Binary files /dev/null and b/src/ClientApp/public/favicon.ico differ diff --git a/src/ClientApp/public/index.html b/src/ClientApp/public/index.html new file mode 100644 index 00000000..08a32925 --- /dev/null +++ b/src/ClientApp/public/index.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/src/ClientApp/public/logo192.png b/src/ClientApp/public/logo192.png new file mode 100644 index 00000000..fc44b0a3 Binary files /dev/null and b/src/ClientApp/public/logo192.png differ diff --git a/src/ClientApp/public/logo512.png b/src/ClientApp/public/logo512.png new file mode 100644 index 00000000..a4e47a65 Binary files /dev/null and b/src/ClientApp/public/logo512.png differ diff --git a/src/ClientApp/public/manifest.json b/src/ClientApp/public/manifest.json new file mode 100644 index 00000000..080d6c77 --- /dev/null +++ b/src/ClientApp/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/src/ClientApp/public/robots.txt b/src/ClientApp/public/robots.txt new file mode 100644 index 00000000..e9e57dc4 --- /dev/null +++ b/src/ClientApp/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/src/ClientApp/src/App.css b/src/ClientApp/src/App.css new file mode 100644 index 00000000..865edf65 --- /dev/null +++ b/src/ClientApp/src/App.css @@ -0,0 +1,4 @@ +.link { + text-decoration: none; + color: inherit; +} \ No newline at end of file diff --git a/src/ClientApp/src/App.tsx b/src/ClientApp/src/App.tsx new file mode 100644 index 00000000..2ec71179 --- /dev/null +++ b/src/ClientApp/src/App.tsx @@ -0,0 +1,83 @@ +import React from 'react'; +import { BrowserRouter, Routes, Route } from 'react-router-dom'; +import { makeStyles } from '@mui/styles'; +import { Grid } from '@mui/material'; + +import './App.css'; +import config from './config.json'; + +import { + Navbar, + Leftbar, + Rightbar, +} from './components/Nav'; +import Dashboard from './pages/Dashboard'; +import { ListConfigs, NewConfig, EditConfig } from './pages/Configs'; +import { ListDiscords, NewDiscord, EditDiscord } from './pages/Discords'; +import { ListAlarms, NewAlarm, EditAlarm } from './pages/Alarms'; +import { ListFilters, NewFilter, EditFilter } from './pages/Filters'; +import { ListEmbeds, NewEmbed, EditEmbed } from './pages/Embeds'; +import { ListGeofences, NewGeofence, EditGeofence } from './pages/Geofences'; +import { ListRoles, NewRole, EditRole } from './pages/Roles'; +import ListSubscriptions from './pages/ListSubscriptions'; +import ListUsers from './pages/ListUsers'; +import Settings from './pages/Settings'; + +const useStyles = makeStyles((theme: any) => ({ + right: { + display: 'none', // always hide + [theme.breakpoints.down('sm')]: { + display: 'none', + }, + }, +})); + +function App() { + const classes = useStyles(); + return ( +
+ + + + + + + {/* 7 */} + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + + + + + +
+ ); +} + +export default App; \ No newline at end of file diff --git a/src/ClientApp/src/components/Alarm.tsx b/src/ClientApp/src/components/Alarm.tsx new file mode 100644 index 00000000..ac94db00 --- /dev/null +++ b/src/ClientApp/src/components/Alarm.tsx @@ -0,0 +1,143 @@ +import React, { useState } from 'react'; +import { + FormControl, + Grid, + InputLabel, + MenuItem, + Select, + TextField, +} from '@mui/material'; + +export interface AlarmProps { + name: string; + filters: string; + embeds: string; + geofences: string[]; + description: string; + webhook: string; + + allFilters: string[]; + allEmbeds: string[]; + allGeofences: string[]; +} + +export function Alarm(props: AlarmProps) { + //console.log('alarm props:', props); + const [state, setState] = useState({ + name: props.name ?? '', + description: props.description ?? '', + geofences: props.geofences ?? [], + //embeds: props.allEmbeds.find(e => e === props.embeds) ?? '', + //filters: props.allFilters.find(f => f === props.filters) ?? '', + embeds: props.embeds ?? '', + filters: props.filters ?? '', + webhook: props.webhook ?? '', + }); + + const onInputChange = (e: any) => { + setState({ ...state, [e.target.name]: e.target.value }); + }; + + return ( +
+ + + + + + + + + + Filters + + + + + + Embeds + + + + + + Geofences + + + + + + + +
+ ); +}; \ No newline at end of file diff --git a/src/ClientApp/src/components/BreadCrumbs.tsx b/src/ClientApp/src/components/BreadCrumbs.tsx new file mode 100644 index 00000000..225139bc --- /dev/null +++ b/src/ClientApp/src/components/BreadCrumbs.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import { + Breadcrumbs, + Link, + Typography, +} from '@mui/material'; + +interface BreadCrumbProps { + crumbs: BreadCrumbItem[]; +} + +interface BreadCrumbItem { + text: string; + color: string; + href: string; + selected: boolean; +} + +export function BreadCrumbs(props: BreadCrumbProps) { + return ( +
+ + {props.crumbs.map((crumb: BreadCrumbItem) => { + return ( + crumb.selected + ? {crumb.text} + : + {crumb.text} + + ); + })} + +
+ ); +}; \ No newline at end of file diff --git a/src/ClientApp/src/components/DatabaseInfo.tsx b/src/ClientApp/src/components/DatabaseInfo.tsx new file mode 100644 index 00000000..8bd120ac --- /dev/null +++ b/src/ClientApp/src/components/DatabaseInfo.tsx @@ -0,0 +1,91 @@ +import React from 'react'; +import { + Grid, + TextField, +} from '@mui/material'; + +interface DatabaseProps { + name: string; + host: string; + port: number; + username: string; + password: string; + database: string; + onInputChange: any; +} + +export function DatabaseInfo(props: DatabaseProps) { + //console.log('database props:', props); + + return ( +
+ + + + + + + + + + + + + + + + + +
+ ); +}; \ No newline at end of file diff --git a/src/ClientApp/src/components/EmbedChip.tsx b/src/ClientApp/src/components/EmbedChip.tsx new file mode 100644 index 00000000..a4156ce5 --- /dev/null +++ b/src/ClientApp/src/components/EmbedChip.tsx @@ -0,0 +1,23 @@ +import React, { useState } from 'react'; +import { Chip } from '@mui/material'; + +interface EmbedChipProps { + label: string; + color: any; + default: string; + onClick: any; +} + +function EmbedChip(props: EmbedChipProps) { + //const [state, setState] = useState(); + + return ( + + ); +} + +export default EmbedChip; \ No newline at end of file diff --git a/src/ClientApp/src/components/EmbedPreview.tsx b/src/ClientApp/src/components/EmbedPreview.tsx new file mode 100644 index 00000000..f96112bf --- /dev/null +++ b/src/ClientApp/src/components/EmbedPreview.tsx @@ -0,0 +1,81 @@ +import React, { useState } from 'react'; +import { + Avatar, + Card, + CardContent, + CardHeader, + Chip, + Grid, + IconButton, + Typography, +} from '@mui/material'; + +interface EmbedPreviewProps { + +} + +function EmbedPreview(props: EmbedPreviewProps) { + const [state, setState] = useState({ + avatarUrl: '{{pkmn_img_url}}', + username: '{{form}} {{pkmn_name}}{{gender}}', + iconUrl: '{{pkmn_img_url}}', + title: '{{geofence}}', + url: '{{gmaps_url}}', + content: [ + '{{pkmn_name}} {{form}}{{gender}} {{iv}} ({{atk_iv}}/{{def_iv}}/{{sta_iv}}) L{{lvl}}', + '**Despawn:** {{despawn_time}} ({{time_left}} left){{despawn_time_verified}}', + '**Details:** CP: {{cp}} IV: {{iv}} LV: {{lvl}}', + '**Size:** {{size}} | {{types_emoji}}{{#if has_weather}} | {{weather_emoji}}{{#if is_weather_boosted}} (Boosted){{/if}}{{/if}}', + '**Moveset:** {{moveset}}', + '{{#if near_pokestop}}**Near Pokestop:** [{{pokestop_name}}]({{pokestop_url}})', + '{{/if}}{{#if is_ditto}}**Catch Pokemon:** {{original_pkmn_name}}', + '{{/if}}{{#if has_capture_rates}}{{capture_1_emoji}} {{capture_1}}% {{capture_2_emoji}} {{capture_2}}% {{capture_3_emoji}} {{capture_3}}%', + '{{/if}}{{#if is_event}}Go Fest Spawn', + '{{/if}}{{#if is_pvp}}', + '{{#if is_great}}{{great_league_emoji}}**Great League**', + '{{#each great_league}}#{{rank}} {{pokemonName}} {{cp}}CP @ L{{level}} {{percentage}}%', + '{{/each}}', + '{{/if}}{{#if is_ultra}}{{ultra_league_emoji}}**Ultra League**', + '{{#each ultra_league}}#{{rank}} {{pokemonName}} {{cp}}CP @ L{{level}} {{percentage}}%', + '{{/each}}', + '{{/if}}{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**', + ], + imageUrl: '{{tilemaps_url}}', + footerText: '{{guild_name}} {{date_time}}', + footerIconUrl: '{{guild_img_url}}', + }); + + // TODO: Use handlebars for templating + + return ( + + + + Icon Name Gender [BotTag] Date + + + + + + + {state.content.map((x: any) => { + return ( + // TODO: + {x} + ); + })} + + + Icon + + + + + + + ); +} + +export default EmbedPreview; \ No newline at end of file diff --git a/src/ClientApp/src/components/MapButton.tsx b/src/ClientApp/src/components/MapButton.tsx new file mode 100644 index 00000000..e0208ce3 --- /dev/null +++ b/src/ClientApp/src/components/MapButton.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import * as L from 'leaflet'; + +//import L from 'leaflet-easybutton'; +import 'leaflet-easybutton'; +import 'leaflet-easybutton/src/easy-button.css'; + +import withMap from '../hooks/WithMap'; + +interface MapButtonProps { + tooltip: string; + onClick: any; + map: any; + icon: string; +} + +class MapButton extends React.Component { + private button: any; + + constructor(props: MapButtonProps) { + super(props); + } + + componentDidMount() { + const { map, tooltip, icon, onClick } = this.props; + this.button = L.easyButton(icon, onClick, tooltip); + this.button.addTo(map); + } + + componentWillUnmount() { + this.button.remove(); + } + + render() { + return null; + } +} + +export default withMap(MapButton); \ No newline at end of file diff --git a/src/ClientApp/src/components/Modals/AddAlarmModal.tsx b/src/ClientApp/src/components/Modals/AddAlarmModal.tsx new file mode 100644 index 00000000..98a99577 --- /dev/null +++ b/src/ClientApp/src/components/Modals/AddAlarmModal.tsx @@ -0,0 +1,179 @@ +import React, { useState } from 'react'; +import { + Box, + Button, + Grid, + FormControl, + InputLabel, + MenuItem, + Modal, + Select, + TextField, + Typography, +} from '@mui/material'; + +interface AddAlarmProps { + embeds: string[]; + filters: string[]; + geofences: string[]; + open: boolean; + toggle: React.MouseEventHandler | undefined; + onSubmit: any; //React.ChangeEventHandler | undefined; +} + +export function AddAlarmModal(props: AddAlarmProps) { + const style = { + position: 'absolute' as 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: 400, + bgcolor: 'background.paper', + border: '2px solid #000', + boxShadow: 24, + p: 4, + }; + + const [state, setState] = useState({ + name: '', + description: '', + filters: '', + embeds: '', + geofences: [], + webhook: '', + }); + + const onInputChange = (e: any) => { + setState({ ...state, [e.target.name]: e.target.value }); + }; + + return ( +
+ + + + Create Alarm + + + + + + + + + + + + Filters + + + + + + Embeds + + + + + + Geofences + + + + + + + + + + + + + +
+ ); +} \ No newline at end of file diff --git a/src/ClientApp/src/components/Modals/GeofenceModal.tsx b/src/ClientApp/src/components/Modals/GeofenceModal.tsx new file mode 100644 index 00000000..a13857df --- /dev/null +++ b/src/ClientApp/src/components/Modals/GeofenceModal.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import { + Box, + Grid, + Modal, + Typography, +} from '@mui/material'; + +interface GeofenceModalProps { + show: boolean; + onClose: any; + title: string; + body: any; +} + +export function GeofenceModal(props: GeofenceModalProps) { + const style = { + position: 'absolute' as 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: 400, + bgcolor: 'background.paper', + border: '2px solid #000', + boxShadow: 24, + p: 4, + }; + + return ( + + + + + {props.title} + + + {props.body} + + + + + ); +} \ No newline at end of file diff --git a/src/ClientApp/src/components/Modals/index.ts b/src/ClientApp/src/components/Modals/index.ts new file mode 100644 index 00000000..8b3b85e4 --- /dev/null +++ b/src/ClientApp/src/components/Modals/index.ts @@ -0,0 +1,7 @@ +import { AddAlarmModal } from "./AddAlarmModal"; +import { GeofenceModal } from "./GeofenceModal"; + +export { + AddAlarmModal, + GeofenceModal, +}; \ No newline at end of file diff --git a/src/ClientApp/src/components/MultiSelect.tsx b/src/ClientApp/src/components/MultiSelect.tsx new file mode 100644 index 00000000..c9e1b0c6 --- /dev/null +++ b/src/ClientApp/src/components/MultiSelect.tsx @@ -0,0 +1,49 @@ +import React, { useState } from 'react'; +import { + FormControl, + InputLabel, + MenuItem, + Select, + SelectChangeEvent, +} from '@mui/material'; + +interface MultiSelectProps { + id: string; + title: string; + allItems: string[]; + selectedItems: string[]; +} + +export function MultiSelect(props: MultiSelectProps) { + //console.log('multi select props:', props); + const [items, setItems] = useState(props.selectedItems ?? []); + + const handleChange = (event: SelectChangeEvent) => { + const { + target: { value }, + } = event; + setItems( + typeof value === 'string' ? value.split(',') : value, + ); + }; + + return ( +
+ + {props.title} + + +
+ ) +}; \ No newline at end of file diff --git a/src/ClientApp/src/components/Nav/Leftbar.tsx b/src/ClientApp/src/components/Nav/Leftbar.tsx new file mode 100644 index 00000000..475aaf71 --- /dev/null +++ b/src/ClientApp/src/components/Nav/Leftbar.tsx @@ -0,0 +1,157 @@ +import React from 'react' +import { Link, useLocation } from 'react-router-dom'; +import { + Home as HomeIcon, + Settings as SettingsIcon, + ExitToApp as ExitToAppIcon, + MiscellaneousServices as MiscellaneousServicesIcon, + Notifications as NotificationsIcon, + Storage as StorageIcon, + FilterList as FilterListIcon, + AccountTree as AccountTreeIcon, + Navigation as NavigationIcon, + Layers as LayersIcon, + Subscriptions as SubscriptionsIcon, + People as PeopleIcon, +} from '@mui/icons-material'; +import { Container, Typography } from '@mui/material'; +import { makeStyles } from '@mui/styles'; +const { homepage } = require('../../../package.json'); + +const useStyles = makeStyles((theme: any) => ({ + container: { + height: '100vh', + //color: 'white', + paddingTop: theme.spacing(10), + backgroundColor: theme.palette.primary.main, + position: 'sticky', + top: 0, + [theme.breakpoints.up('sm')]: { + backgroundColor: 'white', + color: '#555', + border: '1px solid #ece7e7', + }, + }, + item: { + display: 'flex', + alignItems: 'center', + marginBottom: theme.spacing(4), + [theme.breakpoints.up('sm')]: { + marginBottom: theme.spacing(3), + cursor: 'pointer', + }, + }, + icon: { + marginRight: theme.spacing(1), + [theme.breakpoints.up('sm')]: { + fontSize: '18px', + }, + }, + text: { + fontWeight: 500, + [theme.breakpoints.down('sm')]: { + display: 'none', + }, + }, + link: { + textDecoration: 'none', + color: 'inherit', + }, + active: { + color: 'dodgerblue', + }, +})); + +function Leftbar() { + const classes = useStyles(); + const location = useLocation(); + const isActive = (page: string): any => { + const { pathname } = location; + const splitLocation = pathname.split('/'); + const isDashboard = page === splitLocation[2]; + const isPage = (splitLocation[2] && page.includes(splitLocation[2])) || (page === splitLocation[2] && !isDashboard); + const result = splitLocation.length >= 2 && (isPage || isDashboard); + if (result) { + return classes.active; + } + return null; + }; + return ( + + +
+ + Dashboard +
+ + +
+ + Configs +
+ + +
+ + Discords +
+ + +
+ + Alarms +
+ + +
+ + Filters +
+ + +
+ + Embeds +
+ + +
+ + Geofences +
+ + +
+ + Discord Roles +
+ + +
+ + Subscriptions +
+ + +
+ + Users +
+ + +
+ + Settings +
+ + +
+ + Logout +
+ +
+ ); +} + +export default Leftbar; \ No newline at end of file diff --git a/src/ClientApp/src/components/Nav/Navbar.tsx b/src/ClientApp/src/components/Nav/Navbar.tsx new file mode 100644 index 00000000..53c369fc --- /dev/null +++ b/src/ClientApp/src/components/Nav/Navbar.tsx @@ -0,0 +1,89 @@ +import React, { useState } from 'react' +import { + AppBar, + Avatar, + Badge, + MenuItem, + TextField, + Toolbar, + Typography, +} from '@mui/material'; +import { + Camera as CameraIcon, + Notifications, +} from '@mui/icons-material'; +import { makeStyles } from '@mui/styles'; + +const useStyles = makeStyles((theme: any) => ({ + toolbar: { + display: 'flex', + justifyContent: 'space-between', + }, + logoLg: { + display: 'none', + [theme.breakpoints.up('sm')]: { + display: 'block', + }, + }, + logoSm: { + display: 'block', + alignItems: 'center', + [theme.breakpoints.up('sm')]: { + display: 'none', + }, + }, + input: { + color: 'white', + marginLeft: theme.spacing(1), + }, + cancel: { + [theme.breakpoints.up('sm')]: { + display: 'none', + }, + }, + icons: { + alignItems: 'center', + display: (props: any) => props.open ? 'none' : 'flex', + }, + badge: { + marginRight: theme.spacing(2), + }, + logoIcon: { + display: 'flex', + marginRight: '10px', + objectFit: 'cover', + justifyContent: 'space-between', + alignItems: 'center', + }, +})); + +function Navbar() { + const classes = useStyles({}); + return ( + + +
+ + + Webhook Manager Admin Dashboard + + + WhMgr Admin + +
+
+ + + + +
+
+
+ ); +} + +export default Navbar; \ No newline at end of file diff --git a/src/ClientApp/src/components/Nav/Rightbar.tsx b/src/ClientApp/src/components/Nav/Rightbar.tsx new file mode 100644 index 00000000..d050cec0 --- /dev/null +++ b/src/ClientApp/src/components/Nav/Rightbar.tsx @@ -0,0 +1,103 @@ +import React from 'react' +import { + Avatar, + AvatarGroup, + Container, + Divider, + ImageList, + ImageListItem, + Link, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + paddingTop: theme.spacing(10), + position: "sticky", + top: 0, + }, + title: { + fontSize: '16px', + fontWeight: 500, + color: '#555', + }, + imageList: { + }, + link: { + marginRight: theme.spacing(2), + color: '#555', + fontSize: '16px', + }, +})); + +// TODO: Show subscription details, enabled types, location, etc + +function Rightbar() { + const classes = useStyles(); + return ( + + Subscription Details +
+
    +
  • Enabled
  • +
  • Location
  • +
  • Phone Number
  • +
+
+ Online Friends + + + + + + + + + + Gallery + + + + + + + + + + + + + + + + + + + + + Categories + + Sport + + + Food + + + Music + + + + Movies + + + Science + + + Life + +
+ ); +} + +export default Rightbar; \ No newline at end of file diff --git a/src/ClientApp/src/components/Nav/index.ts b/src/ClientApp/src/components/Nav/index.ts new file mode 100644 index 00000000..0b2fa690 --- /dev/null +++ b/src/ClientApp/src/components/Nav/index.ts @@ -0,0 +1,9 @@ +import Navbar from './Navbar'; +import Leftbar from './Leftbar'; +import Rightbar from './Rightbar'; + +export { + Navbar, + Leftbar, + Rightbar, +}; \ No newline at end of file diff --git a/src/ClientApp/src/config.example.json b/src/ClientApp/src/config.example.json new file mode 100644 index 00000000..77d07314 --- /dev/null +++ b/src/ClientApp/src/config.example.json @@ -0,0 +1,9 @@ +{ + "apiUrl": "/api/v1/", + "homepage": "/dashboard/", + "map": { + "startLocation": [33.91, -117.71], + "startZoom": 10, + "tileserver": "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" + } +} \ No newline at end of file diff --git a/src/ClientApp/src/hooks/WithMap.tsx b/src/ClientApp/src/hooks/WithMap.tsx new file mode 100644 index 00000000..bb6b8fe9 --- /dev/null +++ b/src/ClientApp/src/hooks/WithMap.tsx @@ -0,0 +1,12 @@ +import { useMap } from 'react-leaflet'; + +const withMap = (Component: any) => { + return function WrappedComponent(props: any) { + const map = useMap(); + return ( + + ); + } +}; + +export default withMap; \ No newline at end of file diff --git a/src/ClientApp/src/hooks/WithRouter.tsx b/src/ClientApp/src/hooks/WithRouter.tsx new file mode 100644 index 00000000..43af239b --- /dev/null +++ b/src/ClientApp/src/hooks/WithRouter.tsx @@ -0,0 +1,16 @@ +import { + useParams, + useLocation, + useNavigate, +} from 'react-router-dom'; + +const withRouter = (Child: any) => { + return (props: any) => { + const location = useLocation(); + const navigate = useNavigate(); + const params = useParams(); + return ; + }; +} + +export default withRouter; \ No newline at end of file diff --git a/src/ClientApp/src/hooks/index.ts b/src/ClientApp/src/hooks/index.ts new file mode 100644 index 00000000..a938f738 --- /dev/null +++ b/src/ClientApp/src/hooks/index.ts @@ -0,0 +1,7 @@ +import withMap from "./WithMap"; +import withRouter from "./WithRouter"; + +export { + withMap, + withRouter, +}; \ No newline at end of file diff --git a/src/ClientApp/src/index.tsx b/src/ClientApp/src/index.tsx new file mode 100644 index 00000000..75d59fc7 --- /dev/null +++ b/src/ClientApp/src/index.tsx @@ -0,0 +1,15 @@ +import { ThemeProvider } from "@mui/styles"; +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +import { theme } from './themes/default'; + +ReactDOM.render( + + + + + , + document.getElementById('root') +); \ No newline at end of file diff --git a/src/ClientApp/src/interfaces/IGlobalProps.ts b/src/ClientApp/src/interfaces/IGlobalProps.ts new file mode 100644 index 00000000..d5a97e49 --- /dev/null +++ b/src/ClientApp/src/interfaces/IGlobalProps.ts @@ -0,0 +1,14 @@ +import { NavigateFunction, Params } from "react-router-dom"; + +export interface IGlobalProps { + location?: Location; + navigate?: NavigateFunction; + params?: Readonly>; + props: IProps; +}; + +export interface IProps { + //config: IConfig; + //geofences: any; + //masterfile: any; +}; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Alarms/EditAlarm.tsx b/src/ClientApp/src/pages/Alarms/EditAlarm.tsx new file mode 100644 index 00000000..816e6045 --- /dev/null +++ b/src/ClientApp/src/pages/Alarms/EditAlarm.tsx @@ -0,0 +1,355 @@ +import React, { useState } from 'react' +import { + Box, + Button, + Card, + CardContent, + CardHeader, + Container, + FormControl, + FormControlLabel, + Grid, + List, + Select, + SelectChangeEvent, + Switch, + TextField, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { AddAlarmModal } from '../../components/Modals'; +import { Alarm, AlarmProps } from '../../components/Alarm'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import { withRouter } from '../../hooks'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; + +class EditAlarm extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + name: props.params!.id, + enablePokemon: false, + enableRaids: false, + enableQuests: false, + enablePokestops: false, + enableGyms: false, + enableWeather: false, + alarms: [], + allEmbeds: [], + allFilters: [], + allGeofences: [], + open: false, + }; + this.handleChange = this.handleChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + componentDidMount() { + console.log('componentDidMount:', this.state, this.props); + this.fetchData(this.props.params!.id); + } + + fetchData(id: any) { + fetch(config.apiUrl + 'admin/alarm/' + id, { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + //console.log('alarm data:', data); + //this.setState(data.data.alarm); + const keys: string[] = Object.keys(data.data.alarm); + for (const key of keys) { + //console.log('key:', key, 'data:', data.data.alarm[key]); + if (data.data.alarm[key]) { + this.setState({ [key]: data.data.alarm[key] }); + } + } + this.setState({ + ['allEmbeds']: data.data.embeds, + ['allFilters']: data.data.filters, + ['allGeofences']: data.data.geofences, + }); + //console.log('state:', this.state); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + } + + handleChange(event: any) { + const { name, value } = event.target; + //console.log('event:', event); + //this.setState({ [name]: value }); + this.setState(state => ({ ...state, [name]: value })); + //this.setObjectByPath([name], value); + console.log('state:', this.state); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + const id = this.props.params!.id; + const data = { + name: this.state.name, + alarm: { + enablePokemon: this.state.enablePokemon, + enableRaids: this.state.enableRaids, + enableQuests: this.state.enableQuests, + enablePokestops: this.state.enablePokestops, + enableGyms: this.state.enableGyms, + enableWeather: this.state.enableWeather, + alarms: this.state.alarms, + }, + }; + console.log('alarm submit:', id, data); + fetch(config.apiUrl + 'admin/alarm/' + id, { + method: 'PUT', + body: JSON.stringify(data), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + if (data.status !== 'OK') { + alert(data.error); + return; + } + window.location.href = config.homepage + 'alarms'; + // TODO: Show success/error notification + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + // TODO: Show error notification + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'alarms'; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Alarms', + color: 'inherit', + href: config.homepage + 'alarms', + selected: false, + }, { + text: 'Edit ' + this.props.params!.id, + color: 'primary', + href: '', + selected: true, + }]; + + const toggleModal = () => { + this.setState({ ['open']: !this.state.open }); + if (!this.state.open) { + console.log('this.state:', this.state); + } + }; + + const onModalSubmit = (data: any) => { + //console.log('modal submit data:', data); + // Add alarm to list/update state + const alarms = this.state.alarms; + alarms.push(data); + this.setState({ ['alarms']: alarms }); + }; + + const handleCheckbox = (event: any) => { + this.setState({ [event.target.name]: event.target.checked }); + }; + + return ( +
+ + + + Edit Alarm {this.props.params!.id} + + + Channel alarms config description goes here + +
+ + + + + + + + + } + label="Enable Pokemon" + /> + + + } + label="Enable Raids" + /> + + + } + label="Enable Quests" /> + + + } + label="Enable Pokestops" + /> + + + } + label="Enable Gyms" + /> + + + } + label="Enable Weather" + /> + + + + +
+
+ + + + + + {this.state.alarms.map((alarm: any) => { + const props: AlarmProps = { + ...alarm, + allGeofences: this.state.allGeofences, + allFilters: this.state.allFilters, + allEmbeds: this.state.allEmbeds, + }; + const handleDelete = (name: string) => { + const alarms = this.state.alarms; + const newAlarms = alarms.filter((item: any) => item.name !== name); + this.setState({ ['alarms']: newAlarms }); + }; + return ( +
+ + +
+ ); + })} +
+
+
+
+
+ + +
+
+ +
+ ); + } +} + +export default withRouter(EditAlarm); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Alarms/ListAlarms.tsx b/src/ClientApp/src/pages/Alarms/ListAlarms.tsx new file mode 100644 index 00000000..e9003684 --- /dev/null +++ b/src/ClientApp/src/pages/Alarms/ListAlarms.tsx @@ -0,0 +1,179 @@ +import React, { useEffect, useState } from 'react' +import { Link } from 'react-router-dom'; +import { + Button, + ButtonGroup, + IconButton, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; +import { DataGrid, GridColDef } from '@mui/x-data-grid'; +import { + Delete as DeleteIcon, + Edit as EditIcon, +} from '@mui/icons-material'; + +import config from '../../config.json'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + //padding: theme.spacing(2), + paddingTop: theme.spacing(10), + //marginRight: theme.spacing(-6), + //paddingLeft: theme.spacing(2), + height: '80%', + width: '100%', + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, +})); + +function ListAlarms() { + const columns: GridColDef[] = [ + { field: 'id', headerName: 'Name', flex: 1 }, + { + field: 'enable_pokemon', + headerName: 'Enable Pokemon', + flex: 1, + renderCell: (params) => params.row.enable_pokemon ? 'Yes' : 'No', + }, + { + field: 'enable_raids', + headerName: 'Enable Raids', + flex: 1, + renderCell: (params) => params.row.enable_raids ? 'Yes' : 'No', + }, + { + field: 'enable_gyms', + headerName: 'Enable Gyms', + flex: 1, + renderCell: (params) => params.row.enable_gyms ? 'Yes' : 'No', + }, + { + field: 'enable_quests', + headerName: 'Enable Quests', + flex: 1, + renderCell: (params) => params.row.enable_quests ? 'Yes' : 'No', + }, + { + field: 'enable_pokestops', + headerName: 'Enable Pokestops', + flex: 1, + renderCell: (params) => params.row.enable_pokestops ? 'Yes' : 'No', + }, + { + field: 'enable_weather', + headerName: 'Enable Weather', + flex: 1, + renderCell: (params) => params.row.enable_weather ? 'Yes' : 'No', + }, + { field: 'count', headerName: 'Count', flex: 1 }, + { + field: 'action', + headerName: 'Action', + width: 100, + flex: 1, + renderCell: (params) => { + return ( + + window.location.href = config.homepage + 'alarm/' + params.row.id}> + + + confirmDelete(params.row.id)}> + + + + ); + }, + }, + ]; + + const [alarms, setAlarms] = useState([]); + useEffect(() => { + refreshList(); + }, []); + const refreshList = () => { + fetch(config.apiUrl + 'admin/alarms', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + setAlarms(data); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + }; + + const confirmDelete = (id: number): void => { + const result = window.confirm(`Are you sure you want to delete alarm ${id}?`); + if (!result) { + return; + } + // Send delete request + fetch(config.apiUrl + 'admin/alarm/' + id, { + method: 'DELETE', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + if (data.status !== 'OK') { + // TODO: error + alert(data.error); + return; + } + // Update list on successful delete via api + setAlarms(alarms.filter((item: any) => item.id !== id)); + }).catch(err => { + console.error('error:', err); + }); + }; + + const classes = useStyles(); + return ( +
+
+ Channel Alarms + + + +
+ + Channel alarms are pre-defined configs that specify what data to report to a Discord server's channel via webhooks. + + +
+ ); +} + +export default ListAlarms; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Alarms/NewAlarm.tsx b/src/ClientApp/src/pages/Alarms/NewAlarm.tsx new file mode 100644 index 00000000..8696ad58 --- /dev/null +++ b/src/ClientApp/src/pages/Alarms/NewAlarm.tsx @@ -0,0 +1,340 @@ +import React from 'react' +import { + Box, + Button, + Card, + CardContent, + CardHeader, + Container, + FormControlLabel, + Grid, + List, + Switch, + TextField, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { AddAlarmModal } from '../../components/Modals'; +import { Alarm, AlarmProps } from '../../components/Alarm'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import { withRouter } from '../../hooks'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; + +class NewAlarm extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + name: '', + enablePokemon: false, + enableRaids: false, + enableQuests: false, + enablePokestops: false, + enableGyms: false, + enableWeather: false, + alarms: [], + allEmbeds: [], + allFilters: [], + allGeofences: [], + open: false, + }; + this.handleChange = this.handleChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + componentDidMount() { + console.log('componentDidMount:', this.state, this.props); + this.fetchData(); + } + + fetchData() { + fetch(config.apiUrl + 'admin/alarm/data', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + console.log('alarm data:', data); + this.setState({ + ['allEmbeds']: data.data.embeds, + ['allFilters']: data.data.filters, + ['allGeofences']: data.data.geofences, + }); + //console.log('state:', this.state); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + } + + handleChange(event: any) { + const { name, value } = event.target; + this.setState({ [name]: value }); + console.log('state:', this.state); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + const id = this.props.params!.id; + const data = { + name: this.state.name, + alarm: { + enablePokemon: this.state.enablePokemon, + enableRaids: this.state.enableRaids, + enableQuests: this.state.enableQuests, + enablePokestops: this.state.enablePokestops, + enableGyms: this.state.enableGyms, + enableWeather: this.state.enableWeather, + alarms: this.state.alarms, + }, + }; + console.log('alarm submit:', id, data); + fetch(config.apiUrl + 'admin/alarm/new', { + method: 'POST', + body: JSON.stringify(data), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + if (data.status !== 'OK') { + alert(data.error); + return; + } + window.location.href = config.homepage + 'alarms'; + // TODO: Show success/error notification + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + // TODO: Show error notification + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'alarms'; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Alarms', + color: 'inherit', + href: config.homepage + 'alarms', + selected: false, + }, { + text: 'Edit ' + this.props.params!.id, + color: 'primary', + href: '', + selected: true, + }]; + + const toggleModal = () => { + this.setState({ ['open']: !this.state.open }); + if (!this.state.open) { + console.log('this.state:', this.state); + } + }; + + const onModalSubmit = (data: any) => { + //console.log('modal submit data:', data); + // Add alarm to list/update state + const alarms = this.state.alarms; + alarms.push(data); + this.setState({ ['alarms']: alarms }); + }; + + const handleCheckbox = (event: any) => { + this.setState({ [event.target.name]: event.target.checked }); + }; + + return ( +
+ + + + New Alarm + + + Channel alarms config description goes here + +
+ + + + + + + + + } + label="Enable Pokemon" + /> + + + } + label="Enable Raids" + /> + + + } + label="Enable Quests" /> + + + } + label="Enable Pokestops" + /> + + + } + label="Enable Gyms" + /> + + + } + label="Enable Weather" + /> + + + + +
+
+ + + + + + {this.state.alarms.map((alarm: any) => { + const props: AlarmProps = { + ...alarm, + allGeofences: this.state.allGeofences, + allFilters: this.state.allFilters, + allEmbeds: this.state.allEmbeds, + }; + const handleDelete = (name: string) => { + const alarms = this.state.alarms; + const newAlarms = alarms.filter((item: any) => item.name !== name); + this.setState({ ['alarms']: newAlarms }); + }; + return ( +
+ + +
+ ); + })} +
+
+
+
+
+ + +
+
+ +
+ ); + } +} + +export default withRouter(NewAlarm); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Alarms/index.ts b/src/ClientApp/src/pages/Alarms/index.ts new file mode 100644 index 00000000..233beac5 --- /dev/null +++ b/src/ClientApp/src/pages/Alarms/index.ts @@ -0,0 +1,9 @@ +import ListAlarms from './ListAlarms'; +import EditAlarm from './EditAlarm'; +import NewAlarm from './NewAlarm'; + +export { + ListAlarms, + EditAlarm, + NewAlarm, +}; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Configs/EditConfig.tsx b/src/ClientApp/src/pages/Configs/EditConfig.tsx new file mode 100644 index 00000000..ed76bb7a --- /dev/null +++ b/src/ClientApp/src/pages/Configs/EditConfig.tsx @@ -0,0 +1,866 @@ +import React, { useState } from 'react' +import { + Accordion, + AccordionDetails, + AccordionSummary, + Box, + Button, + Card, + CardContent, + CardHeader, + Container, + FormControl, + FormControlLabel, + Grid, + InputLabel, + MenuItem, + Select, + SelectChangeEvent, + Switch, + TextField, + Typography, +} from '@mui/material'; +import { + ExpandMore as ExpandMoreIcon, +} from '@mui/icons-material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import { DatabaseInfo } from '../../components/DatabaseInfo'; +import { MultiSelect } from '../../components/MultiSelect'; +import withRouter from '../../hooks/WithRouter'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +/** + * Flatten a multidimensional object + * + * For example: + * flattenObject{ a: 1, b: { c: 2 } } + * Returns: + * { a: 1, 'b.c': 2} + */ +export const flattenObject = (obj: any, parent?: string) => { + const flattened: any = {} + Object.keys(obj).forEach((key) => { + const value = obj[key]; + const keyed = parent ? parent + '.' + key : key; + if (typeof value === 'object' && value !== null && !Array.isArray(value)) { + Object.assign(flattened, flattenObject(value, keyed)); + } else { + flattened[keyed] = value; + } + }); + return flattened +} + +// TODO: Fix discord servers (save as dict not list when submitted) +// TODO: Add NewStaticMap component +// TODO: Add NewIconStyle component + +class EditConfig extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + name: props.params!.id, + host: '*', + port: 8008, + locale: 'en', + value: 0, + despawnTimeMinimumMinutes: 5, + checkForDuplicates: false, + discord: '', + discords: [], + debug: false, + logLevel: 0, + stripeApi: { + apiKey: '', + }, + shortUrlApi: { + enabled: false, + apiUrl: '', + signature: '', + }, + urls: { + scannerMap: '', + }, + eventPokemon: { + pokemonIds: [], + minimumIV: 90, + type: 'Include', + }, + iconStyles: { + }, + staticMaps: { + }, + twilio: { + enabled: false, + accountSid: '', + authToken: '', + from: '', + userIds: [], + roleIds: [], + pokemonIds: [], + minIV: 90, + }, + reverseGeocoding: { + provider: '', + cacheToDisk: false, + gmaps: { + key: '', + schema: '', + }, + nominatim: { + endpoint: '', + schema: '', + }, + }, + database: { + main: { + host: '', + port: 3306, + username: '', + password: '', + database: 'brockdb', + }, + scanner: { + host: '', + port: 3306, + username: '', + password: '', + database: 'rdmdb', + }, + nests: { + host: '', + port: 3306, + username: '', + password: '', + database: 'manualdb', + }, + }, + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + componentDidMount() { + console.log('componentDidMount:', this.state, this.props); + this.fetchData(this.props.params!.id); + } + + fetchData(id: any) { + fetch(config.apiUrl + 'admin/config/' + id, { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + const keys: string[] = Object.keys(data.data.config); + for (const key of keys) { + //console.log('key:', key, 'data:', data.data.config[key]); + this.setState({ [key]: data.data.config[key] }); + } + this.setState({ ['discords']: data.data.discords }); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + const id = this.props.params!.id; + let servers: any = {}; + for (const discord of this.state.servers) { + const id = this.state.discords[discord]; + servers[id] = discord; + } + const data = { + ...this.state, + servers, + }; + fetch(config.apiUrl + 'admin/config/' + id, { + method: 'PUT', + body: JSON.stringify(data), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + if (data.status !== 'OK') { + alert(data.error); + return; + } + window.location.href = config.homepage + 'configs'; + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'configs'; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Configs', + color: 'inherit', + href: config.homepage + 'configs', + selected: false, + }, { + text: 'Edit ' + this.props.params!.id, + color: 'primary', + href: '', + selected: true, + }]; + + return ( +
+ + + + Edit Config {this.props.params!.id} + + + Config description goes here + +
+ + }> + General + + + + + + + + + + + + + + + Locale + + + + + + + + } + label="Check For Duplicates" + /> + + + {/* + + */} + + Discord Servers + + + + + + + + }> + Databases + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + }> + Short Url API + + + + + } label="Enabled" /> + + + + + + + + + + + + }> + Stripe API + + + + + + + + + + + }> + Urls + + + + + + + + + + + }> + Event Pokemon + + + + + + + + + + + + Filter Type + + + + + + + + }> + Icon Styles + + + + + ... + + + + + + }> + Static Maps + + + + {Object.keys(this.state.staticMaps).map((key: string) => { + return ( + + + + + + + } + label="Include Pokestops" + /> + } + label="Include Gyms" + /> + + + + ); + })} + + + + + }> + Twilio + + + + + } label="Enabled" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + }> + Reverse Geocoding + + + + + + Provider + + + + + } + label="Cache To Disk" + /> + + + + + + + + + + + + + + + + + + + + + + + + }> + Diagnostics + + + + + } + label="Enable Webhook Debug" + /> + + + + Log Level + + + + + + +
+
+ + +
+
+
+ ); + } +} + +export default withRouter(EditConfig); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Configs/ListConfigs.tsx b/src/ClientApp/src/pages/Configs/ListConfigs.tsx new file mode 100644 index 00000000..2532c5e9 --- /dev/null +++ b/src/ClientApp/src/pages/Configs/ListConfigs.tsx @@ -0,0 +1,150 @@ +import React, { useEffect, useState } from 'react' +import { Link } from 'react-router-dom'; +import { + Button, + ButtonGroup, + IconButton, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; +import { DataGrid, GridColDef } from '@mui/x-data-grid'; +import { + Delete as DeleteIcon, + Edit as EditIcon, +} from '@mui/icons-material'; + +import config from '../../config.json'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + //padding: theme.spacing(2), + paddingTop: theme.spacing(10), + //marginRight: theme.spacing(-6), + //paddingLeft: theme.spacing(2), + height: '80%', + width: '100%', + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, +})); + +function ListConfigs() { + const columns: GridColDef[] = [ + { field: 'id', headerName: 'Name', flex: 1 }, + { + field: 'endpoint', + headerName: 'Endpoint', + width: 130, + flex: 1, + renderCell: (params) => params.row.host + ':' + params.row.port, + }, + { field: 'count', headerName: 'No. Servers', flex: 1 }, + { + field: 'action', + headerName: 'Action', + width: 100, + flex: 1, + renderCell: (params) => { + return ( + + window.location.href = config.homepage + 'config/' + params.row.id}> + + + confirmDelete(params.row.id)}> + + + + ); + }, + }, + ]; + + const [configs, setConfigs] = useState([]); + useEffect(() => { + refreshList(); + }, []); + const refreshList = () => { + fetch(config.apiUrl + 'admin/configs', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + setConfigs(data); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + }; + + const confirmDelete = (id: number): void => { + const result = window.confirm(`Are you sure you want to delete config ${id}?`); + if (!result) { + return; + } + // Send delete request + fetch(config.apiUrl + 'admin/config/' + id, { + method: 'DELETE', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + if (data.status !== 'OK') { + // TODO: error + alert(data.error); + return; + } + // Update list on successful delete via api + setConfigs(configs.filter((item: any) => item.id !== id)); + }).catch(err => { + console.error('error:', err); + }); + }; + + const classes = useStyles(); + return ( +
+
+ Configs + + + +
+ + Configs are the heart of the program and only one is used per instance at a time. + + +
+ ); +} + +export default ListConfigs; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Configs/NewConfig.tsx b/src/ClientApp/src/pages/Configs/NewConfig.tsx new file mode 100644 index 00000000..3376b860 --- /dev/null +++ b/src/ClientApp/src/pages/Configs/NewConfig.tsx @@ -0,0 +1,841 @@ +import React, { useState } from 'react' +import { + Accordion, + AccordionDetails, + AccordionSummary, + Box, + Button, + Card, + CardContent, + CardHeader, + Container, + FormControl, + FormControlLabel, + Grid, + InputLabel, + MenuItem, + Select, + SelectChangeEvent, + Switch, + TextField, + Typography, +} from '@mui/material'; +import { + ExpandMore as ExpandMoreIcon, +} from '@mui/icons-material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import { DatabaseInfo } from '../../components/DatabaseInfo'; +import { MultiSelect } from '../../components/MultiSelect'; +import withRouter from '../../hooks/WithRouter'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +/** + * Flatten a multidimensional object + * + * For example: + * flattenObject{ a: 1, b: { c: 2 } } + * Returns: + * { a: 1, 'b.c': 2} + */ +export const flattenObject = (obj: any, parent?: string) => { + const flattened: any = {} + Object.keys(obj).forEach((key) => { + const value = obj[key]; + const keyed = parent ? parent + '.' + key : key; + if (typeof value === 'object' && value !== null && !Array.isArray(value)) { + Object.assign(flattened, flattenObject(value, keyed)); + } else { + flattened[keyed] = value; + } + }); + return flattened +} + +class NewConfig extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + name: '', + host: '*', + port: 8008, + locale: 'en', + value: 0, + despawnTimeMinimumMinutes: 5, + checkForDuplicates: false, + discord: '', + discords: [], + debug: false, + logLevel: 0, + stripeApi: { + apiKey: '', + }, + shortUrlApi: { + enabled: false, + apiUrl: '', + signature: '', + }, + urls: { + scannerMap: '', + }, + eventPokemon: { + pokemonIds: [], + minimumIV: 90, + type: 'Include', + }, + iconStyles: { + }, + staticMaps: { + }, + twilio: { + enabled: false, + accountSid: '', + authToken: '', + from: '', + userIds: [], + roleIds: [], + pokemonIds: [], + minIV: 90, + }, + reverseGeocoding: { + provider: '', + cacheToDisk: false, + gmaps: { + key: '', + schema: '', + }, + nominatim: { + endpoint: '', + schema: '', + }, + }, + database: { + main: { + host: '', + port: 3306, + username: '', + password: '', + database: 'brockdb', + }, + scanner: { + host: '', + port: 3306, + username: '', + password: '', + database: 'rdmdb', + }, + nests: { + host: '', + port: 3306, + username: '', + password: '', + database: 'manualdb', + }, + }, + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + componentDidMount() { + console.log('componentDidMount:', this.state, this.props); + this.fetchData(); + } + + fetchData() { + fetch(config.apiUrl + 'admin/config/data', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + if (data.status !== 'OK') { + // Failed to fetch helper data + alert(data.error); + return; + } + this.setState({ ['discords']: data.data.discords }); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + let servers: any = {}; + for (const discord of this.state.servers) { + const id = this.state.discords[discord]; + servers[id] = discord; + } + const data = { + ...this.state, + servers, + }; + fetch(config.apiUrl + 'admin/config/new', { + method: 'POST', + body: JSON.stringify(data), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + if (data.status !== 'OK') { + alert(data.error); + return; + } + window.location.href = config.homepage + 'configs'; + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'configs'; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Configs', + color: 'inherit', + href: config.homepage + 'configs', + selected: false, + }, { + text: 'New', + color: 'primary', + href: '', + selected: true, + }]; + + return ( +
+ + + + New Config + + + Config description goes here + +
+ + }> + General + + + + + + + + + + + + + + + Locale + + + + + + + + } + label="Check For Duplicates" + /> + + + + + + + + + }> + Databases + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + }> + Short Url API + + + + + } label="Enabled" /> + + + + + + + + + + + + }> + Stripe API + + + + + + + + + + + }> + Urls + + + + + + + + + + + }> + Event Pokemon + + + + + + + + + + + + Filter Type + + + + + + + + }> + Icon Styles + + + + + ... + + + + + + }> + Static Maps + + + + {Object.keys(this.state.staticMaps).map((key: string) => { + return ( + + + + + + + } + label="Include Pokestops" + /> + } + label="Include Gyms" + /> + + + + ); + })} + + + + + }> + Twilio + + + + + } label="Enabled" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + }> + Reverse Geocoding + + + + + + Provider + + + + + } + label="Cache To Disk" + /> + + + + + + + + + + + + + + + + + + + + + + + + }> + Diagnostics + + + + + } + label="Enable Webhook Debug" + /> + + + + Log Level + + + + + + +
+
+ + +
+
+
+ ); + } +} + +export default withRouter(NewConfig); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Configs/index.ts b/src/ClientApp/src/pages/Configs/index.ts new file mode 100644 index 00000000..f5fccddc --- /dev/null +++ b/src/ClientApp/src/pages/Configs/index.ts @@ -0,0 +1,9 @@ +import ListConfigs from './ListConfigs'; +import EditConfig from './EditConfig'; +import NewConfig from './NewConfig'; + +export { + ListConfigs, + EditConfig, + NewConfig, +}; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Dashboard.tsx b/src/ClientApp/src/pages/Dashboard.tsx new file mode 100644 index 00000000..5ef96773 --- /dev/null +++ b/src/ClientApp/src/pages/Dashboard.tsx @@ -0,0 +1,105 @@ +import React, { useEffect, useState } from 'react' +import { Link } from 'react-router-dom'; +import { + Box, + Button, + ButtonGroup, + Card, + CardContent, + Grid, + Paper, + Typography, +} from '@mui/material'; +import { + PlayArrow as PlayArrowIcon, +} from '@mui/icons-material'; +import { makeStyles } from '@mui/styles'; + +import config from '../config.json'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + //padding: theme.spacing(2), + paddingTop: theme.spacing(10), + //marginRight: theme.spacing(-6), + //paddingLeft: theme.spacing(2), + height: '80%', + width: '100%', + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, +})); + +function Dashboard() { + const [data, setData] = useState([]); + useEffect(() => { + refreshList(); + }, []); + const refreshList = () => { + fetch(config.apiUrl + 'admin/dashboard', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + setData(data); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + }; + + const classes = useStyles(); + return ( +
+
+ Dashboard +
+ + + {data.map((item: any) => { + return ( + + + + + + + + + + {item.name} {item.count} + + + + + + + ); + })} + + +
+ ); +} + +export default Dashboard; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Discords/EditDiscord.tsx b/src/ClientApp/src/pages/Discords/EditDiscord.tsx new file mode 100644 index 00000000..cc210c45 --- /dev/null +++ b/src/ClientApp/src/pages/Discords/EditDiscord.tsx @@ -0,0 +1,819 @@ +import React, { useState } from 'react' +import { + Accordion, + AccordionDetails, + AccordionSummary, + Box, + Button, + Card, + CardContent, + CardHeader, + Container, + FormControl, + FormControlLabel, + Grid, + InputLabel, + MenuItem, + Select, + SelectChangeEvent, + Switch, + TextField, + Typography, +} from '@mui/material'; +import { + ExpandMore as ExpandMoreIcon, +} from '@mui/icons-material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import { MultiSelect } from '../../components/MultiSelect'; +import withRouter from '../../hooks/WithRouter'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +class EditDiscord extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + allAlarms: [], + allGeofences: [], + allEmbeds: [], + allRoles: [], + allIconStyles: [], + + name: props.params!.id, + geofences: [], + donorRoleIds: [], + moderatorRoleIds: [], + freeRoleName: '', + alarms: '', + iconStyle: '', + bot: { + commandPrefix: '.', + guildId: '', + emojiGuildId: '', + token: '', + channelIds: [], + status: '', + ownerId: '', + }, + subscriptions: { + enabled: false, + maxPokemonSubscriptions: 0, + maxPvPSubscriptions: 0, + maxRaidSubscriptions: 0, + maxQuestSubscriptions: 0, + maxLureSubscriptions: 0, + maxInvasionSubscriptions: 0, + maxGymSubscriptions: 0, + maxNotificationsPerMinute: 10, + url: 'https://ui.example.com', + embedsFile: 'default.json', + }, + geofenceRoles: { + enabled: false, + autoRemove: true, + requiresDonorRole: true, + }, + questsPurge: { + enabled: false, + channelIds: {}, + }, + nests: { + enabled: false, + channelId: '', + minimumPerHour: 1, + }, + dailyStats: { + iv: { + enabled: false, + clearMessages: false, + channelId: '', + }, + shiny: { + enabled: false, + clearMessages: false, + channelId: '', + }, + }, + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + componentDidMount() { + console.log('componentDidMount:', this.state, this.props); + this.fetchData(this.props.params!.id); + } + + fetchData(id: any) { + fetch(config.apiUrl + 'admin/discord/' + id, { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + //console.log('discord data:', data); + //this.setState(data.data.discord); + + const keys: string[] = Object.keys(data.data.discord); + for (const key of keys) { + //console.log('KEY:', key, data.data.discord[key]); + this.setState({ [key]: data.data.discord[key] }); + } + + this.setState({ + ['allAlarms']: data.data.allAlarms, + ['allEmbeds']: data.data.allEmbeds, + ['allGeofences']: data.data.allGeofences, + ['allRoles']: data.data.allRoles, + ['allIconStyles']: data.data.allIconStyles, + }); + //console.log('discord state:', this.state); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + const id = this.props.params!.id; + fetch(config.apiUrl + 'admin/discord/' + id, { + method: 'PUT', + body: JSON.stringify(this.state), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + // TODO: Show notification/redirect to /dashboard/discords + + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'discords'; + const handleDonorRoleChange = (event: any) => { + const { name, value } = event.target; + const roleId = value[0]; + const role = this.state.allRoles.filter((x: any) => x.id == roleId); + if (!role) { + console.error('Failed to get role from id:', roleId); + } + const permissions = role[0].permissions; + console.log('donor role change target:', this.state, name, roleId, permissions); + this.setState({ + [name]: { + [roleId]: permissions, + }, + }); + console.log('donor role state:', this.state); + }; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Discords', + color: 'inherit', + href: config.homepage + 'discords', + selected: false, + }, { + text: 'Edit ' + this.props.params!.id, + color: 'primary', + href: '', + selected: true, + }]; + + return ( +
+ + + + Edit Discord Server {this.props.params!.id} + + + Discord server config description goes here + +
+ + }> + General + + + + + + + + + Donor Roles + + + + + + Moderator Roles + + + + + + + + + Alarms + + + + + + + + + Icon Style + + + + + + + + }> + Bot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + }> + Subscriptions + + + + + } + label="Enabled" + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Embeds + + + + + + + + }> + Geofence Roles + + + + + } + label="Enabled" + /> + + + } + label="Automatically Remove" + /> + + + } + label="Requires Donor Role" + /> + + + + + + }> + Quest Purge + + + + + } + label="Enabled" + /> + + TODO: Channel IDs + + + + + }> + Nests + + + + + } + label="Enabled" + /> + + + + + + + + + + + + }> + Daily Statistics + + + + + + + + + + } + label="Enabled" + /> + + + } + label="Clear Existing Messages" + /> + + + + + + + + + + + + + + + } + label="Enabled" + /> + + + } + label="Clear Existing Messages" + /> + + + + + + + + + + + +
+
+ + +
+
+
+ ); + } +} + +export default withRouter(EditDiscord); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Discords/ListDiscords.tsx b/src/ClientApp/src/pages/Discords/ListDiscords.tsx new file mode 100644 index 00000000..7b2d8c03 --- /dev/null +++ b/src/ClientApp/src/pages/Discords/ListDiscords.tsx @@ -0,0 +1,152 @@ +import React, { useEffect, useState } from 'react' +import { Link } from 'react-router-dom'; +import { + Button, + ButtonGroup, + IconButton, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; +import { DataGrid, GridColDef } from '@mui/x-data-grid'; +import { + Delete as DeleteIcon, + Edit as EditIcon, +} from '@mui/icons-material'; + +import config from '../../config.json'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + //padding: theme.spacing(2), + paddingTop: theme.spacing(10), + //marginRight: theme.spacing(-6), + //paddingLeft: theme.spacing(2), + height: '80%', + width: '100%', + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, +})); + +function ListDiscords() { + const columns: GridColDef[] = [ + { field: 'id', headerName: 'Name', flex: 1 }, + { field: 'alarms', headerName: 'Alarms', flex: 1 }, + { field: 'geofences', headerName: 'No. Geofences', flex: 1 }, + { + field: 'subscriptions_enabled', + headerName: 'Subscriptions Enabled', + flex: 1, + renderCell: (params) => params.row.subscriptions_enabled ? 'Yes' : 'No', + }, + { field: 'embeds', headerName: 'Embeds', flex: 1 }, + { field: 'icon_style', headerName: 'Icon Style', flex: 1 }, + { + field: 'action', + headerName: 'Action', + width: 100, + flex: 1, + renderCell: (params) => { + return ( + + window.location.href = config.homepage + 'discord/' + params.row.id}> + + + confirmDelete(params.row.id)}> + + + + ); + }, + }, + ]; + + const [discords, setDiscords] = useState([]); + useEffect(() => { + refreshList(); + }, []); + const refreshList = () => { + fetch(config.apiUrl + 'admin/discords', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + setDiscords(data); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + }; + + const confirmDelete = (id: number): void => { + const result = window.confirm(`Are you sure you want to delete discord ${id}?`); + if (!result) { + return; + } + // Send delete request + fetch(config.apiUrl + 'admin/discord/' + id, { + method: 'DELETE', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + if (data.status !== 'OK') { + // TODO: error + alert(data.error); + return; + } + // Update list on successful delete via api + setDiscords(discords.filter((item: any) => item.id !== id)); + }).catch(err => { + console.error('error:', err); + }); + }; + + const classes = useStyles(); + return ( +
+
+ Discord Servers + + + +
+ + Discord server configs are used by Configs to determine what Discord server to report and respond to. + + +
+ ); +} + +export default ListDiscords; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Discords/NewDiscord.tsx b/src/ClientApp/src/pages/Discords/NewDiscord.tsx new file mode 100644 index 00000000..5a1a2cf2 --- /dev/null +++ b/src/ClientApp/src/pages/Discords/NewDiscord.tsx @@ -0,0 +1,814 @@ +import React, { useState } from 'react' +import { + Accordion, + AccordionDetails, + AccordionSummary, + Box, + Button, + Card, + CardContent, + CardHeader, + Container, + FormControl, + FormControlLabel, + Grid, + InputLabel, + MenuItem, + Select, + SelectChangeEvent, + Switch, + TextField, + Typography, +} from '@mui/material'; +import { + ExpandMore as ExpandMoreIcon, +} from '@mui/icons-material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import { MultiSelect } from '../../components/MultiSelect'; +import withRouter from '../../hooks/WithRouter'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +class NewDiscord extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + allAlarms: [], + allGeofences: [], + allEmbeds: [], + allRoles: [], + allIconStyles: [], + + name: '', + geofences: [], + donorRoleIds: [], + moderatorRoleIds: [], + freeRoleName: '', + alarms: '', + iconStyle: '', + bot: { + commandPrefix: '.', + guildId: '', + emojiGuildId: '', + token: '', + channelIds: [], + status: '', + ownerId: '', + }, + subscriptions: { + enabled: false, + maxPokemonSubscriptions: 0, + maxPvPSubscriptions: 0, + maxRaidSubscriptions: 0, + maxQuestSubscriptions: 0, + maxLureSubscriptions: 0, + maxInvasionSubscriptions: 0, + maxGymSubscriptions: 0, + maxNotificationsPerMinute: 10, + url: 'https://ui.example.com', + embedsFile: 'default.json', + }, + geofenceRoles: { + enabled: false, + autoRemove: true, + requiresDonorRole: true, + }, + questsPurge: { + enabled: false, + channelIds: {}, + }, + nests: { + enabled: false, + channelId: '', + minimumPerHour: 1, + }, + dailyStats: { + iv: { + enabled: false, + clearMessages: false, + channelId: '', + }, + shiny: { + enabled: false, + clearMessages: false, + channelId: '', + }, + }, + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + componentDidMount() { + console.log('componentDidMount:', this.state, this.props); + this.fetchData(); + } + + fetchData() { + fetch(config.apiUrl + 'admin/discord/data', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + //console.log('discord data:', data); + this.setState({ + ['allAlarms']: data.data.allAlarms, + ['allEmbeds']: data.data.allEmbeds, + ['allGeofences']: data.data.allGeofences, + ['allRoles']: data.data.allRoles, + ['allIconStyles']: data.data.allIconStyles, + }); + //console.log('discord state:', this.state); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + fetch(config.apiUrl + 'admin/discord/new', { + method: 'POST', + body: JSON.stringify(this.state), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + // TODO: Show notification/redirect to /dashboard/discords + if (data.status !== 'OK') { + alert(data.error); + return; + } + window.location.href = config.homepage + 'discords'; + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'discords'; + const handleDonorRoleChange = (event: any) => { + const { name, value } = event.target; + const roleId = value[0]; + const role = this.state.allRoles.filter((x: any) => x.id == roleId); + if (!role) { + console.error('Failed to get role from id:', roleId); + } + const permissions = role[0].permissions; + console.log('donor role change target:', this.state, name, roleId, permissions); + this.setState({ + [name]: { + [roleId]: permissions, + }, + }); + console.log('donor role state:', this.state); + }; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Discords', + color: 'inherit', + href: config.homepage + 'discords', + selected: false, + }, { + text: 'New', + color: 'primary', + href: '', + selected: true, + }]; + + return ( +
+ + + + New Discord Server + + + Discord server config description goes here + +
+ + }> + General + + + + + + + + + Donor Roles + + + + + + Moderator Roles + + + + + + + + + Alarms + + + + + + + + + Icon Style + + + + + + + + }> + Bot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + }> + Subscriptions + + + + + } + label="Enabled" + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Embeds + + + + + + + + }> + Geofence Roles + + + + + } + label="Enabled" + /> + + + } + label="Automatically Remove" + /> + + + } + label="Requires Donor Role" + /> + + + + + + }> + Quest Purge + + + + + } + label="Enabled" + /> + + TODO: Channel IDs + + + + + }> + Nests + + + + + } + label="Enabled" + /> + + + + + + + + + + + + }> + Daily Statistics + + + + + + + + + + } + label="Enabled" + /> + + + } + label="Clear Messages" + /> + + + + + + + + + + + + + + + } + label="Enabled" + /> + + + } + label="Clear Messages" + /> + + + + + + + + + + + +
+
+ + +
+
+
+ ); + } +} + +export default withRouter(NewDiscord); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Discords/index.ts b/src/ClientApp/src/pages/Discords/index.ts new file mode 100644 index 00000000..c413268c --- /dev/null +++ b/src/ClientApp/src/pages/Discords/index.ts @@ -0,0 +1,9 @@ +import ListDiscords from './ListDiscords'; +import EditDiscord from './EditDiscord'; +import NewDiscord from './NewDiscord'; + +export { + ListDiscords, + EditDiscord, + NewDiscord, +}; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Embeds/EditEmbed.tsx b/src/ClientApp/src/pages/Embeds/EditEmbed.tsx new file mode 100644 index 00000000..b4cf2148 --- /dev/null +++ b/src/ClientApp/src/pages/Embeds/EditEmbed.tsx @@ -0,0 +1,2135 @@ +import React, { useState } from 'react' +import { + Accordion, + AccordionDetails, + AccordionSummary, + Box, + Button, + Container, + Grid, + Paper, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + TextField, + Typography, +} from '@mui/material'; +import { + ExpandMore as ExpandMoreIcon, +} from '@mui/icons-material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import EmbedPreview from '../../components/EmbedPreview'; +import withRouter from '../../hooks/WithRouter'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +// TODO: Reusable embed components (pass onInputChange via props) +// TODO: Use chips instead of text to auto input placeholders +// TODO: Add Discord Embed preview + +class EditEmbed extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + name: props.params!.id, + placeholders: {}, + Pokemon: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + PokemonMissingStats: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Gyms: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Raids: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Eggs: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Pokestops: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Quests: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Lures: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Invasions: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Nests: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Weather: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + componentDidMount() { + console.log('componentDidMount:', this.state, this.props); + this.fetchData(this.props.params!.id); + } + + fetchData(id: any) { + fetch(config.apiUrl + 'admin/embed/' + id, { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + //console.log('embed data:', data); + //this.setState(data.data.embed); + const keys: string[] = Object.keys(data.data.embed); + for (const key of keys) { + //console.log('key:', key, 'data:', data.data.embed[key]); + if (data.data.embed[key]) { + this.setState({ [key]: data.data.embed[key] }); + } + } + this.setState({ ['placeholders']: data.data.placeholders }); + //console.log('state:', this.state); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + const id = this.props.params!.id; + const data = { + name: this.state.name, + embed: { + pokemon: this.state.Pokemon, + pokemonMissingStats: this.state.PokemonMissingStats, + gyms: this.state.Gyms, + raids: this.state.Raids, + eggs: this.state.Eggs, + pokestops: this.state.Pokestops, + quests: this.state.Quests, + lures: this.state.Lures, + invasions: this.state.Invasions, + nests: this.state.Nests, + weather: this.state.Weather, + }, + }; + fetch(config.apiUrl + 'admin/embed/' + id, { + method: 'PUT', + body: JSON.stringify(data), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + //console.log('response:', data); + if (data.status !== 'OK') { + // TODO: Show error notification + alert(data.error); + return; + } + window.location.href = config.homepage + 'embeds'; + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'embeds'; + const formatContent = (key: string) => { + const content = this.state[key].content; + const array = typeof content === 'string' + ? [content] + : (content ?? []); + const result = array.join('\n'); + return result; + }; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Embeds', + color: 'inherit', + href: config.homepage + 'embeds', + selected: false, + }, { + text: 'Edit ' + this.props.params!.id, + color: 'primary', + href: '', + selected: true, + }]; + + return ( +
+ + + + Edit Embed Message Template {this.props.params!.id} + + + Use {"{{placeholder}}"} surrounding an available placeholder value to replace it with actual data at runtime.
+ Use {"{{#if placeholder}}Show if true!{{/if}}"} to handle conditional expressions that return a Boolean type.
+ Use {"{{#each rankings}}{{rank}} {{cp}} {{pokemon}}{{/each}}"} to iterate and handle displaying Array values.
+ Handlebars Documentation

+ Each new line in the content field reflects an actual new line in the message embed. +
+
+ + + }> + Pokemon + + + {/**/} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.pokemon && this.state.placeholders.pokemon.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Pokemon Missing IV Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.pokemon && this.state.placeholders.pokemon.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Raids + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.raids && this.state.placeholders.raids.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Eggs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.raids && this.state.placeholders.raids.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Gyms + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.gyms && this.state.placeholders.gyms.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Pokestops + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.pokestops && this.state.placeholders.pokestops.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Quests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.quests && this.state.placeholders.quests.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Lures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.pokestops && this.state.placeholders.pokestops.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Invasions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.pokestops && this.state.placeholders.pokestops.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Nests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.nests && this.state.placeholders.nests.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Weather + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.weather && this.state.placeholders.weather.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+
+
+ + +
+
+
+ ); + } +} + +export default withRouter(EditEmbed); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Embeds/ListEmbeds.tsx b/src/ClientApp/src/pages/Embeds/ListEmbeds.tsx new file mode 100644 index 00000000..57f82985 --- /dev/null +++ b/src/ClientApp/src/pages/Embeds/ListEmbeds.tsx @@ -0,0 +1,202 @@ +import React, { useEffect, useState } from 'react' +import { Link } from 'react-router-dom'; +import { + Button, + ButtonGroup, + IconButton, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; +import { DataGrid, GridColDef } from '@mui/x-data-grid'; +import { + Delete as DeleteIcon, + Edit as EditIcon, +} from '@mui/icons-material'; + +import config from '../../config.json'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + //padding: theme.spacing(2), + paddingTop: theme.spacing(10), + //marginRight: theme.spacing(-6), + //paddingLeft: theme.spacing(2), + height: '80%', + width: '100%', + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, +})); + +function ListEmbeds() { + const columns: GridColDef[] = [ + { field: 'id', headerName: 'Name', flex: 1 }, + { + field: 'pokemon', + headerName: 'Pokemon', + flex: 1, + renderCell: (params) => params.row.pokemon ? 'Yes' : 'No' + }, + { + field: 'pokemon_missing_stats', + headerName: 'Pokemon w/o Stats', + flex: 1, + renderCell: (params) => params.row.pokemon_missing_stats ? 'Yes' : 'No' + }, + { + field: 'raids', + headerName: 'Raids', + flex: 1, + renderCell: (params) => params.row.raids ? 'Yes' : 'No' + }, + { + field: 'gyms', + headerName: 'Gyms', + flex: 1, + renderCell: (params) => params.row.gyms ? 'Yes' : 'No' + }, + { + field: 'pokestops', + headerName: 'Pokestops', + flex: 1, + renderCell: (params) => params.row.pokestops ? 'Yes' : 'No' + }, + { + field: 'quests', + headerName: 'Quests', + flex: 1, + renderCell: (params) => params.row.quests ? 'Yes' : 'No' + }, + { + field: 'lures', + headerName: 'Lures', + flex: 1, + renderCell: (params) => params.row.lures ? 'Yes' : 'No' + }, + { + field: 'invasions', + headerName: 'Invasions', + flex: 1, + renderCell: (params) => params.row.invasions ? 'Yes' : 'No' + }, + { + field: 'nests', + headerName: 'Nests', + flex: 1, + renderCell: (params) => params.row.nests ? 'Yes' : 'No' + }, + { + field: 'weather', + headerName: 'Weather', + flex: 1, + renderCell: (params) => params.row.weather ? 'Yes' : 'No' + }, + { + field: 'action', + headerName: 'Action', + width: 100, + flex: 1, + renderCell: (params) => { + return ( + + window.location.href = config.homepage + 'embed/' + params.row.id}> + + + confirmDelete(params.row.id)}> + + + + ); + }, + }, + ]; + + const [embeds, setEmbeds] = useState([]); + useEffect(() => { + refreshList(); + }, []); + const refreshList = () => { + fetch(config.apiUrl + 'admin/embeds', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + setEmbeds(data); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + }; + + const confirmDelete = (id: number): void => { + const result = window.confirm(`Are you sure you want to delete embed ${id}?`); + if (!result) { + return; + } + // Send delete request + fetch(config.apiUrl + 'admin/embed/' + id, { + method: 'DELETE', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + if (data.status !== 'OK') { + // TODO: error + alert(data.error); + return; + } + // Update list on successful delete via api + setEmbeds(embeds.filter((item: any) => item.id !== id)); + }).catch(err => { + console.error('error:', err); + }); + }; + + const classes = useStyles(); + return ( +
+
+ Embeds + + + +
+ + Message embeds depict how the Discord message looks to your users. Place holders are replaced with actual values at runtime using the Handlebars templating engine. + + +
+ ); +} + +export default ListEmbeds; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Embeds/NewEmbed.tsx b/src/ClientApp/src/pages/Embeds/NewEmbed.tsx new file mode 100644 index 00000000..58e8b02b --- /dev/null +++ b/src/ClientApp/src/pages/Embeds/NewEmbed.tsx @@ -0,0 +1,2101 @@ +import React, { useState } from 'react' +import { + Accordion, + AccordionDetails, + AccordionSummary, + Box, + Button, + Container, + Grid, + Paper, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + TextField, + Typography, +} from '@mui/material'; +import { + ExpandMore as ExpandMoreIcon, +} from '@mui/icons-material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import EmbedPreview from '../../components/EmbedPreview'; +import withRouter from '../../hooks/WithRouter'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +// TODO: Reusable embed components (pass onInputChange via props) +// TODO: Use chips instead of text to auto input placeholders +// TODO: Add Discord Embed preview + +class NewEmbed extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + name: props.params!.id, + placeholders: {}, + Pokemon: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + PokemonMissingStats: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Gyms: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Raids: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Eggs: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Pokestops: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Quests: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Lures: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Invasions: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Nests: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + Weather: { + avatarUrl: '', + content: [], + iconUrl: '', + title: '', + url: '', + username: '', + imageUrl: '', + footer: { + text: '', + iconUrl: '', + }, + }, + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + const data = { + name: this.state.name, + embed: { + pokemon: this.state.Pokemon, + pokemonMissingStats: this.state.PokemonMissingStats, + gyms: this.state.Gyms, + raids: this.state.Raids, + eggs: this.state.Eggs, + pokestops: this.state.Pokestops, + quests: this.state.Quests, + lures: this.state.Lures, + invasions: this.state.Invasions, + nests: this.state.Nests, + weather: this.state.Weather, + }, + }; + fetch(config.apiUrl + 'admin/embed/new', { + method: 'POST', + body: JSON.stringify(data), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + //console.log('response:', data); + if (data.status !== 'OK') { + // TODO: Show error notification + alert(data.error); + return; + } + window.location.href = config.homepage + 'embeds'; + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'embeds'; + const formatContent = (key: string) => { + const content = this.state[key].content; + const array = typeof content === 'string' + ? [content] + : (content ?? []); + const result = array.join('\n'); + return result; + }; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Embeds', + color: 'inherit', + href: config.homepage + 'embeds', + selected: false, + }, { + text: 'New', + color: 'primary', + href: '', + selected: true, + }]; + + return ( +
+ + + + New Embed Message Template + + + Use {"{{placeholder}}"} surrounding an available placeholder value to replace it with actual data at runtime.
+ Use {"{{#if placeholder}}Show if true!{{/if}}"} to handle conditional expressions that return a Boolean type.
+ Use {"{{#each rankings}}{{rank}} {{cp}} {{pokemon}}{{/each}}"} to iterate and handle displaying Array values.
+ Handlebars Documentation

+ Each new line in the content field reflects an actual new line in the message embed. +
+
+ + + }> + Pokemon + + + {/**/} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.pokemon && this.state.placeholders.pokemon.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Pokemon Missing IV Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.pokemon && this.state.placeholders.pokemon.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Raids + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.raids && this.state.placeholders.raids.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Eggs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.raids && this.state.placeholders.raids.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Gyms + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.gyms && this.state.placeholders.gyms.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Pokestops + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.pokestops && this.state.placeholders.pokestops.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Quests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.quests && this.state.placeholders.quests.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Lures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.pokestops && this.state.placeholders.pokestops.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Invasions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.pokestops && this.state.placeholders.pokestops.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Nests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.nests && this.state.placeholders.nests.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+ + }> + Weather + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Placeholder + Description + Example + Type + + + + {this.state.placeholders.weather && this.state.placeholders.weather.map((placeholder: any) => { + return ( + + + {placeholder.placeholder} + + + {placeholder.description} + + + {placeholder.example} + + + {placeholder.type} + + + ); + })} + +
+
+
+
+
+
+
+
+ + +
+
+
+ ); + } +} + +export default withRouter(NewEmbed); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Embeds/index.ts b/src/ClientApp/src/pages/Embeds/index.ts new file mode 100644 index 00000000..2ebec7d0 --- /dev/null +++ b/src/ClientApp/src/pages/Embeds/index.ts @@ -0,0 +1,9 @@ +import ListEmbeds from './ListEmbeds'; +import EditEmbed from './EditEmbed'; +import NewEmbed from './NewEmbed'; + +export { + ListEmbeds, + EditEmbed, + NewEmbed, +}; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Filters/EditFilter.tsx b/src/ClientApp/src/pages/Filters/EditFilter.tsx new file mode 100644 index 00000000..e3faec39 --- /dev/null +++ b/src/ClientApp/src/pages/Filters/EditFilter.tsx @@ -0,0 +1,895 @@ +import React, { ReactNode, useEffect, useState } from 'react' +import { + Accordion, + AccordionDetails, + AccordionSummary, + Box, + Button, + Card, + CardContent, + CardHeader, + Container, + FormControl, + FormControlLabel, + Grid, + InputLabel, + MenuItem, + Select, + SelectChangeEvent, + Switch, + TextareaAutosize, + TextField, + Typography, +} from '@mui/material'; +import { + ExpandMore as ExpandMoreIcon, +} from '@mui/icons-material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import withRouter from '../../hooks/WithRouter'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +class EditFilter extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + name: props.params!.id, + pokemon: { + enabled: false, + pokemon: [], + forms: [], + costumes: [], + min_iv: 0, + max_iv: 100, + min_cp: 0, + max_cp: 999999, + min_lvl: 0, + max_lvl: 35, + gender: '*', + size: 'All', + great_league: false, + ultra_league: false, + min_rank: 0, + max_rank: 100, + is_event: false, + type: 'Include', + ignore_missing: false, + }, + raids: { + enabled: false, + pokemon: [], + forms: [], + costumes: [], + min_lvl: 1, + max_lvl: 6, + team: 'All', + type: 'Include', + only_ex: false, + ignore_missing: false, + }, + eggs: { + enabled: false, + min_lvl: 1, + max_lvl: 6, + team: 'All', + only_ex: false, + }, + quests: { + enabled: false, + rewards: [], + is_shiny: false, + type: 'Include', + }, + pokestops: { + enabled: false, + lured: false, + lure_types: [], + invasions: false, + invasion_types: {}, + }, + gyms: { + enabled: false, + under_attack: false, + team: 'All', + }, + weather: { + enabled: false, + types: [], + }, + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + componentDidMount() { + console.log('componentDidMount:', this.state, this.props); + this.fetchData(this.props.params!.id); + } + + fetchData(id: any) { + fetch(config.apiUrl + 'admin/filter/' + id, { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + console.log('filter data:', data); + //this.setState(data.data.filter); + const keys: string[] = Object.keys(data.data.filter); + for (const key of keys) { + //console.log('key:', key, 'data:', data.data.filter[key]); + if (data.data.filter[key]) { + this.setState({ [key]: data.data.filter[key] }); + } + } + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + const id = this.props.params!.id; + // TODO: Only send what is set + const data = { + name: this.state.name, + filter: { + pokemon: { + ...this.state.pokemon, + pokemon: this.state.pokemon.pokemon.map(Number), + }, + raids: { + ...this.state.raids, + pokemon: this.state.raids.pokemon.map(Number), + }, + eggs: this.state.eggs, + quests: this.state.quests, + pokestops: this.state.pokestops, + gyms: this.state.gyms, + weather: this.state.weather, + }, + }; + fetch(config.apiUrl + 'admin/filter/' + id, { + method: 'PUT', + body: JSON.stringify(data), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + // TODO: Csrf token or auth token + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'filters'; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Filters', + color: 'inherit', + href: config.homepage + 'filters', + selected: false, + }, { + text: 'Edit ' + this.props.params!.id, + color: 'primary', + href: '', + selected: true, + }]; + + return ( +
+ + + + + Edit Webhook Filter {this.props.params!.id} + + + Webhook filter config description goes here + +
+ + + }> + Pokemon + + + + + } + label="Enabled" + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + } + label="Is Great League" + /> + + + } + label="Is Ultra League" + /> + + + + + + + + + } + label="Is Event Pokemon" + /> + + + + Filter Type + + + + + } + label="Ignore Pokemon Missing Stats" + /> + + + + + + }> + Raids + + + + + } + label="Enabled" + /> + + + + + + + + + + + + + + + + + + + Team + + + + + } + label="Only EX-Eligible Gyms" + /> + + + + Filter Type + + + + + } + label="Ignore Pokemon Missing Stats" + /> + + + + + + }> + Eggs + + + + + } + label="Enabled" + /> + + + + + + + + + + Team + + + + + } + label="Only EX-Eligible Gyms" + /> + + + + + + }> + Quests + + + + + } + label="Enabled" + /> + + + + + + } + label="Is Shiny Pokemon" + /> + + + + Filter Type + + + + + + + + }> + Pokestops + + + + + } + label="Enabled" + /> + + + } + label="Is Lured Pokestop" + /> + + + + Lure Types + + + + + } + label="Is Invasion Pokestop" + /> + + + + Invasion Types + + + + + + + + }> + Gyms + + + + + } + label="Enabled" + /> + + + } + label="Is Under Attack" + /> + + + + Team + + + + + + + + }> + Weather + + + + + } + label="Enabled" + /> + + + + Weather Types + + + + + + +
+
+ + +
+
+
+ +
+ ); + } +} + +export default withRouter(EditFilter); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Filters/ListFilters.tsx b/src/ClientApp/src/pages/Filters/ListFilters.tsx new file mode 100644 index 00000000..4ea3ad02 --- /dev/null +++ b/src/ClientApp/src/pages/Filters/ListFilters.tsx @@ -0,0 +1,178 @@ +import React, { useEffect, useState } from 'react' +import { Link } from 'react-router-dom'; +import { + Button, + ButtonGroup, + IconButton, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; +import { DataGrid, GridColDef } from '@mui/x-data-grid'; +import { + Delete as DeleteIcon, + Edit as EditIcon, +} from '@mui/icons-material'; + +import config from '../../config.json'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + //padding: theme.spacing(2), + paddingTop: theme.spacing(10), + //marginRight: theme.spacing(-6), + //paddingLeft: theme.spacing(2), + height: '80%', + width: '100%', + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, +})); + +function ListFilters() { + const columns: GridColDef[] = [ + { field: 'id', headerName: 'Name', flex: 1 }, + { + field: 'pokemon', + headerName: 'Pokemon', + flex: 1, + renderCell: (params) => params.row.pokemon ? 'Yes' : 'No', + }, + { + field: 'raids', + headerName: 'Raids', + flex: 1, + renderCell: (params) => params.row.raids ? 'Yes' : 'No', + }, + { + field: 'gyms', + headerName: 'Gyms', + flex: 1, + renderCell: (params) => params.row.gyms ? 'Yes' : 'No', + }, + { + field: 'quests', + headerName: 'Quests', + flex: 1, + renderCell: (params) => params.row.quests ? 'Yes' : 'No', + }, + { + field: 'pokestops', + headerName: 'Pokestops', + flex: 1, + renderCell: (params) => params.row.pokestops ? 'Yes' : 'No', + }, + { + field: 'weather', + headerName: 'Weather', + flex: 1, + renderCell: (params) => params.row.weather ? 'Yes' : 'No', + }, + { + field: 'action', + headerName: 'Action', + width: 100, + flex: 1, + renderCell: (params) => { + return ( + + window.location.href = config.homepage + 'filter/' + params.row.id}> + + + confirmDelete(params.row.id)}> + + + + ); + }, + }, + ]; + + const [filters, setFilters] = useState([]); + useEffect(() => { + refreshList(); + }, []); + const refreshList = () => { + fetch(config.apiUrl + 'admin/filters', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + setFilters(data); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + }; + + const confirmDelete = (id: number): void => { + const result = window.confirm(`Are you sure you want to delete filter ${id}?`); + if (!result) { + return; + } + // Send delete request + fetch(config.apiUrl + 'admin/filter/' + id, { + method: 'DELETE', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + if (data.status !== 'OK') { + // TODO: error + alert(data.error); + return; + } + // Update list on successful delete via api + setFilters(filters.filter((item: any) => item.id !== id)); + }).catch(err => { + console.error('error:', err); + }); + }; + + const classes = useStyles(); + return ( +
+
+ Alarm Filters + + + +
+ + Webhook alarm filters are used by Channel Alarms to filter incoming webhook data based on type and other various properties. + + +
+ ); +} + +export default ListFilters; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Filters/NewFilter.tsx b/src/ClientApp/src/pages/Filters/NewFilter.tsx new file mode 100644 index 00000000..94515ed9 --- /dev/null +++ b/src/ClientApp/src/pages/Filters/NewFilter.tsx @@ -0,0 +1,873 @@ +import React from 'react' +import { + Accordion, + AccordionDetails, + AccordionSummary, + Box, + Button, + Container, + FormControl, + FormControlLabel, + Grid, + InputLabel, + MenuItem, + Select, + Slider, + Switch, + TextField, + Typography, +} from '@mui/material'; +import { + ExpandMore as ExpandMoreIcon, +} from '@mui/icons-material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import withRouter from '../../hooks/WithRouter'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +class NewFilter extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + name: props.params!.id, + pokemon: { + enabled: false, + pokemon: [], + forms: [], + costumes: [], + min_iv: 0, + max_iv: 100, + min_cp: 0, + max_cp: 999999, + min_lvl: 0, + max_lvl: 35, + gender: '*', + size: 'All', + great_league: false, + ultra_league: false, + min_rank: 0, + max_rank: 100, + is_event: false, + type: 'Include', + ignore_missing: false, + }, + raids: { + enabled: false, + pokemon: [], + forms: [], + costumes: [], + min_lvl: 1, + max_lvl: 6, + team: 'All', + type: 'Include', + only_ex: false, + ignore_missing: false, + }, + eggs: { + enabled: false, + min_lvl: 1, + max_lvl: 6, + team: 'All', + only_ex: false, + }, + quests: { + enabled: false, + rewards: [], + is_shiny: false, + type: 'Include', + }, + pokestops: { + enabled: false, + lured: false, + lure_types: [], + invasions: false, + invasion_types: {}, + }, + gyms: { + enabled: false, + under_attack: false, + team: 'All', + }, + weather: { + enabled: false, + types: [], + }, + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + // TODO: Only send what is set + const data = { + name: this.state.name, + filter: { + pokemon: { + ...this.state.pokemon, + pokemon: this.state.pokemon.pokemon.map(Number), + }, + raids: { + ...this.state.raids, + pokemon: this.state.raids.pokemon.map(Number), + }, + eggs: this.state.eggs, + quests: this.state.quests, + pokestops: this.state.pokestops, + gyms: this.state.gyms, + weather: this.state.weather, + }, + }; + console.log('submit filter data:', data); + fetch(config.apiUrl + 'admin/filter/new', { + method: 'POST', + body: JSON.stringify(data), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + // TODO: Csrf token or auth token + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + if (data.status !== 'OK') { + alert(data.error); + return; + } + window.location.href = config.homepage + 'filters'; + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'filters'; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Filters', + color: 'inherit', + href: config.homepage + 'filters', + selected: false, + }, { + text: 'New', + color: 'primary', + href: '', + selected: true, + }]; + + return ( +
+ + + + New Webhook Filter + + + Webhook filter config description goes here + +
+ + + }> + Pokemon + + + + + } + label="Enabled" + /> + + + + + + + + + + + + + + + + + + 'Temperature range'} + value={[20, 80]} + onChange={this.onInputChange} + valueLabelDisplay="auto" + //getAriaValueText={valuetext} + disableSwap + /> + + + + + + + + + + + + + + + } + label="Is Great League" + /> + + + } + label="Is Ultra League" + /> + + + + + + + + + } + label="Is Event Pokemon" + /> + + + + Filter Type + + + + + } + label="Ignore Pokemon Missing Stats" + /> + + + + + + }> + Raids + + + + + } + label="Enabled" + /> + + + + + + + + + + + + + + + + + + + Team + + + + + } + label="Only EX-Eligible Gyms" + /> + + + + Filter Type + + + + + } + label="Ignore Pokemon Missing Stats" + /> + + + + + + }> + Eggs + + + + + } + label="Enabled" + /> + + + + + + + + + + Team + + + + + } + label="Only EX-Eligible Gyms" + /> + + + + + + }> + Quests + + + + + } + label="Enabled" + /> + + + + + + } + label="Is Shiny Pokemon" + /> + + + + Filter Type + + + + + + + + }> + Pokestops + + + + + } + label="Enabled" + /> + + + } + label="Is Lured Pokestop" + /> + + + + Lure Types + + + + + } + label="Is Invasion Pokestop" + /> + + + + Invasion Types + + + + + + + + }> + Gyms + + + + + } + label="Enabled" + /> + + + } + label="Is Under Attack" + /> + + + + Team + + + + + + + + }> + Weather + + + + + } + label="Enabled" + /> + + + + Weather Types + + + + + + +
+
+ + +
+
+
+ ); + } +} + +export default withRouter(NewFilter); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Filters/index.ts b/src/ClientApp/src/pages/Filters/index.ts new file mode 100644 index 00000000..a0cb851e --- /dev/null +++ b/src/ClientApp/src/pages/Filters/index.ts @@ -0,0 +1,9 @@ +import ListFilters from './ListFilters'; +import EditFilter from './EditFilter'; +import NewFilter from './NewFilter'; + +export { + ListFilters, + EditFilter, + NewFilter, +}; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Geofences/EditGeofence.tsx b/src/ClientApp/src/pages/Geofences/EditGeofence.tsx new file mode 100644 index 00000000..884add07 --- /dev/null +++ b/src/ClientApp/src/pages/Geofences/EditGeofence.tsx @@ -0,0 +1,690 @@ +import React from 'react' +import { + MapContainer, + TileLayer, + GeoJSON, + FeatureGroup, +} from 'react-leaflet'; +import { EditControl } from 'react-leaflet-draw'; +import 'leaflet/dist/leaflet.css'; +import 'leaflet-draw/dist/leaflet.draw.css' + +import { Feature, Geometry } from 'geojson'; +import L, { LatLngExpression, Layer } from 'leaflet'; +import { + Box, + Button, + Chip, + Container, + FormControl, + FormControlLabel, + FormLabel, + Grid, + Radio, + RadioGroup, + TextField, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import { GeofenceModal } from '../../components/Modals'; +import MapButton from '../../components/MapButton'; +import { withRouter } from '../../hooks'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { geoJsonToIni, iniToGeoJson } from '../../utils/geofenceConverter'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +// TODO: Move geofence modal logic to modal component and pass map via props + +let set = false; +let loaded = false; +const formatGeofenceToGeoJson = (format: string, data: any): any => { + //console.log('format:', format, 'data:', data); + if (data.length === 0) { + return null; + } + if (typeof data === 'object') { + return data; + } + switch (format) { + case '.json': + return JSON.parse(data); + case '.txt': + // case '.ini': + return iniToGeoJson(data); + default: + throw Error('Unsupported geofence format'); + } +}; + +class EditGeofence extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + name: '', + format: '', + count: 0, + geofence: null, + open: false, + importFormat: '.txt', + importGeofence: {}, + exportOpen: false, + exportFormat: '.json', + exportGeofence: {}, + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this._onCreated = this._onCreated.bind(this); + this._onEdited = this._onEdited.bind(this); + this._onDeleted = this._onDeleted.bind(this); + this._onFormatSaved = this._onFormatSaved.bind(this); + this.loadGeofence = this.loadGeofence.bind(this); + //this._onFeatureGroupReady = this._onFeatureGroupReady.bind(this); + } + + componentDidMount() { + console.log('componentDidMount:', this.state, this.props); + this.fetchData(this.props.params!.id); + } + + componentDidUpdate() { + //console.log('geofence:', this.state.geofence); + if (!set) { + const geofence = formatGeofenceToGeoJson(this.state.format, this.state.geofence); + this.setState({ + ['count']: geofence.features.length, + }); + set = true; + } + } + + fetchData(id: any) { + fetch(config.apiUrl + 'admin/geofence/' + id, { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + //console.log('geofence data:', data); + const geofence = formatGeofenceToGeoJson(data.data.format, data.data.geofence); + this.setState({ + //...this.state, + name: data.data.name, + format: data.data.format, + geofence: geofence, + exportGeofence: JSON.stringify(geofence, null, 2), + }); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + const id = this.props.params!.id; + fetch(config.apiUrl + 'admin/geofence/' + id, { + method: 'PUT', + body: JSON.stringify(this.state), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + // TODO: Csrf token or auth token + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + _onFormatSaved() { + //const geofence = formatGeofenceToGeoJson(this.state.format, this.state.geofence.toString()); + //console.log('this.state.geofence:', geofence); + this.setState({ + ['geofence']: this.state.geofence, + //['count']: geofence.features.length, + }); + console.log('state:', this.state); + } + + _onCreated(event: any) { + console.log('onCreated:', event); + const layer = event.layer; + if (this._editableFG) { + this._editableFG.addLayer(layer); + const json = this._editableFG.toGeoJSON(); + //console.log('json:', json); + this.setState({ + ['geofence']: json, + ['count']: json.features.length, + }); + this._onFormatSaved(); + } + } + + _onEdited(event: any) { + console.log('onEdited:', event); + this._onFormatSaved(); + } + + _onDeleted(event: any) { + console.log('onDeleted:', event); + this._onFormatSaved(); + } + + _onFeatureGroupReady(reactFGref: any) { + // Populate the leaflet FeatureGroup with the geoJson layers + //console.log('onFeatureGroupReady:', this.state.format, this.state.geofence); + if (!this.state.format || !this.state.geofence) { + return; + } + const geofence = formatGeofenceToGeoJson(this.state.format, this.state.geofence); + let leafletGeoJSON = new L.GeoJSON(geofence); + let leafletFG = reactFGref; + + leafletGeoJSON.eachLayer((layer: any) => { + if (!loaded && leafletFG) { + const html = ` + Name: ${layer.feature.properties.name}
+ Area: ${0} km2 +`; + layer.bindTooltip(html); + leafletFG.addLayer(layer); + } + }); + + if (!loaded && leafletFG) { + loaded = true; + } + + // Store the ref for future access to content + this._editableFG = reactFGref; + }; + + loadGeofence(data: any) { + let leafletGeoJSON = new L.GeoJSON(data); + leafletGeoJSON.eachLayer((layer: any) => { + if (this._editableFG) { + const html = ` + Name: ${layer.feature.properties.name}
+ Area: ${0} km2 +`; + layer.bindTooltip(html); + this._editableFG.addLayer(layer); + } + }); + const json = this._editableFG.toGeoJSON(); + this.setState({ + ...this.state, + open: false, + geofence: json, + count: json.features.length, + }); + } + + _editableFG: any = null; + + render() { + const handleCancel = () => window.location.href = config.homepage + 'geofences'; + + const handleOnEachFeature = (feature: Feature, layer: Layer) => { + console.log('handleOnEachFeature:', feature, layer); + }; + + const handleOnFormatChange = (event: any) => { + this.onInputChange(event); + const newFormat = event.target.value; + this.setState({ + ...this.state, + count: this.state.geofence.features.length, + format: newFormat, + //geofence: formatGeofenceToGeoJson(newFormat, this.state.geofence), + }); + // TODO: Check new format + // TODO: Convert geofence + // TODO: Save state + }; + + const copyToClipboard = (text: string) => { + navigator.clipboard.writeText(text); + }; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Geofences', + color: 'inherit', + href: config.homepage + 'geofences', + selected: false, + }, { + text: 'Edit ' + this.props.params!.id, + color: 'primary', + href: '', + selected: true, + }]; + + const shapeOptions = { + stroke: true, + color: '#3388ff', + weight: 3, + opacity: 1, + fill: true, + fillColor: null, + fillOpacity: 0.2, + }; + + return ( +
+ + + + + + Edit Geofence {this.props.params!.id} + + + + + + + + Geofence description goes here + +
+ + + + + + + Save Format + + } + label="INI" + /> + } + label="GeoJSON" + /> + + + + + + + + + + { + //console.log('reactFGref:', reactFGref); + this._onFeatureGroupReady(reactFGref); + }} + > + + + {/*this.state.geofence && ( + + )*/} + { + this.setState({ + ['open']: true, + }); + }} + /> + { + const result = window.confirm('Are you sure you want to delete all shapes?'); + if (!result) { + return; + } + this._editableFG.clearLayers(); + this.setState({ + ['count']: 0, + ['geofence']: null, + }); + }} + /> + + + + + + + Format + + { + this.setState({ + ['importFormat']: '.txt', + }); + }} />} + label="INI" + /> + { + this.setState({ + ['importFormat']: '.json', + }); + }} />} + label="GeoJSON" + /> + + + + +
+ + +
+
+
+ )} + show={this.state.open} + onClose={() => { + this.setState({ + ['open']: false, + }); + }} + /> + + + + + + + Export Format + + { + // Convert geofence + //const geofence = formatGeofenceToGeoJson('.txt', this.state.geofence); + const iniData: any = []; + this._editableFG.eachLayer((layer: any) => { + const geojson = layer.toGeoJSON(); + if (geojson) { + const ini = geoJsonToIni(geojson); + iniData.push(ini) + } + }); + this.setState({ + ['exportGeofence']: iniData.join(''), + ['exportFormat']: '.txt', + }); + }} />} + label="INI" + /> + { + // Convert geofence + const geofence = iniToGeoJson(this.state.exportGeofence); + const json = JSON.stringify(geofence, null, 2); + this.setState({ + ['exportGeofence']: json, + ['exportFormat']: '.json', + }); + }} />} + label="GeoJSON" + /> + + + + +
+ + +
+
+
+ )} + show={this.state.exportOpen} + onClose={() => { + this.setState({ + ['exportOpen']: false, + }); + }} + /> + + + +
+
+ + +
+
+
+ ); + } +} + +export default withRouter(EditGeofence); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Geofences/ListGeofences.tsx b/src/ClientApp/src/pages/Geofences/ListGeofences.tsx new file mode 100644 index 00000000..51c33dce --- /dev/null +++ b/src/ClientApp/src/pages/Geofences/ListGeofences.tsx @@ -0,0 +1,142 @@ +import React, { useEffect, useState } from 'react' +import { Link } from 'react-router-dom'; +import { + Button, + ButtonGroup, + IconButton, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; +import { DataGrid, GridColDef } from '@mui/x-data-grid'; +import { + Delete as DeleteIcon, + Edit as EditIcon, +} from '@mui/icons-material'; + +import config from '../../config.json'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + //padding: theme.spacing(2), + paddingTop: theme.spacing(10), + //marginRight: theme.spacing(-6), + //paddingLeft: theme.spacing(2), + height: '80%', + width: '100%', + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, +})); + +function ListGeofences() { + const columns: GridColDef[] = [ + { field: 'id', headerName: 'Name', flex: 1 }, + { + field: 'action', + headerName: 'Action', + width: 100, + flex: 1, + renderCell: (params) => { + return ( + + window.location.href = config.homepage + 'geofence/' + params.row.id}> + + + confirmDelete(params.row.id)}> + + + + ); + }, + }, + ]; + + const [geofences, setGeofences] = useState([]); + useEffect(() => { + refreshList(); + }, []); + const refreshList = () => { + fetch(config.apiUrl + 'admin/geofences', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + setGeofences(data); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + }; + + const confirmDelete = (id: number): void => { + const result = window.confirm(`Are you sure you want to delete geofence ${id}?`); + if (!result) { + return; + } + // Send delete request + fetch(config.apiUrl + 'admin/geofence/' + id, { + method: 'DELETE', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + if (data.status !== 'OK') { + // TODO: error + alert(data.error); + return; + } + // Update list on successful delete via api + setGeofences(geofences.filter((item: any) => item.id !== id)); + }).catch(err => { + console.error('error:', err); + }); + }; + + const classes = useStyles(); + return ( +
+
+ Geofences + + + +
+ + Geofences define a scan areas borders. + + +
+ ); +} + +export default ListGeofences; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Geofences/NewGeofence.tsx b/src/ClientApp/src/pages/Geofences/NewGeofence.tsx new file mode 100644 index 00000000..244dbb82 --- /dev/null +++ b/src/ClientApp/src/pages/Geofences/NewGeofence.tsx @@ -0,0 +1,629 @@ +import React from 'react' +import { + MapContainer, + TileLayer, + GeoJSON, + FeatureGroup, +} from 'react-leaflet'; +import { EditControl } from 'react-leaflet-draw'; +import 'leaflet/dist/leaflet.css'; +import 'leaflet-draw/dist/leaflet.draw.css' + +import { Feature, Geometry } from 'geojson'; +import L, { LatLngExpression, Layer } from 'leaflet'; +import { + Box, + Button, + Chip, + Container, + FormControl, + FormControlLabel, + FormLabel, + Grid, + Radio, + RadioGroup, + TextField, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import { GeofenceModal } from '../../components/Modals'; +import MapButton from '../../components/MapButton'; +import { withRouter } from '../../hooks'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { geoJsonToIni, iniToGeoJson } from '../../utils/geofenceConverter'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +// TODO: Move geofence modal logic to modal component and pass map via props + +let set = false; +let loaded = false; +const formatGeofenceToGeoJson = (format: string, data: any): any => { + //console.log('format:', format, 'data:', data); + if (data.length === 0) { + return null; + } + if (typeof data === 'object') { + return data; + } + switch (format) { + case '.json': + return JSON.parse(data); + case '.txt': + // case '.ini': + return iniToGeoJson(data); + default: + throw Error('Unsupported geofence format'); + } +}; + +class NewGeofence extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + name: '', + format: '.json', + count: 0, + geofence: null, + open: false, + importFormat: '.txt', + importGeofence: {}, + exportOpen: false, + exportFormat: '.json', + exportGeofence: {}, + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this._onCreated = this._onCreated.bind(this); + this._onEdited = this._onEdited.bind(this); + this._onDeleted = this._onDeleted.bind(this); + this._onFormatSaved = this._onFormatSaved.bind(this); + this.loadGeofence = this.loadGeofence.bind(this); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + fetch(config.apiUrl + 'admin/geofence/new', { + method: 'POST', + body: JSON.stringify(this.state), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + // TODO: Csrf token or auth token + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + if (data.status !== 'OK') { + alert(data.error); + return; + } + window.location.href = config.homepage + 'geofences'; + // TODO: Redirect to /geofences or show notification (show notification on list geofences page) + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + _onFormatSaved() { + //const geofence = formatGeofenceToGeoJson(this.state.format, this.state.geofence.toString()); + //console.log('this.state.geofence:', geofence); + this.setState({ + ['geofence']: this.state.geofence, + //['count']: geofence.features.length, + }); + console.log('state:', this.state); + } + + _onCreated(event: any) { + console.log('onCreated:', event); + const layer = event.layer; + if (this._editableFG) { + this._editableFG.addLayer(layer); + const json = this._editableFG.toGeoJSON(); + //console.log('json:', json); + this.setState({ + ['geofence']: json, + ['count']: json.features.length, + }); + console.log('this.state:', this.state); + this._onFormatSaved(); + } + } + + _onEdited(event: any) { + console.log('onEdited:', event); + this._onFormatSaved(); + } + + _onDeleted(event: any) { + console.log('onDeleted:', event); + this._onFormatSaved(); + } + + _onFeatureGroupReady(reactFGref: any) { + if (reactFGref) { + this._editableFG = reactFGref; + } + }; + + loadGeofence(data: any) { + let leafletGeoJSON = new L.GeoJSON(data); + leafletGeoJSON.eachLayer((layer: any) => { + if (this._editableFG) { + const html = ` + Name: ${layer.feature.properties.name}
+ Area: ${0} km2 +`; + layer.bindTooltip(html); + this._editableFG.addLayer(layer); + } + }); + const json = this._editableFG.toGeoJSON(); + this.setState({ + ...this.state, + open: false, + geofence: json, + count: json.features.length, + }); + } + + _editableFG: any = null; + + render() { + const handleCancel = () => window.location.href = config.homepage + 'geofences'; + + const handleOnEachFeature = (feature: Feature, layer: Layer) => { + console.log('handleOnEachFeature:', feature, layer); + }; + + const handleOnFormatChange = (event: any) => { + this.onInputChange(event); + const newFormat = event.target.value; + this.setState({ + ...this.state, + count: this.state.geofence.features.length, + format: newFormat, + //geofence: formatGeofenceToGeoJson(newFormat, this.state.geofence), + }); + // TODO: Check new format + // TODO: Convert geofence + // TODO: Save state + }; + + const copyToClipboard = (text: string) => { + navigator.clipboard.writeText(text); + }; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Geofences', + color: 'inherit', + href: config.homepage + 'geofences', + selected: false, + }, { + text: 'New', + color: 'primary', + href: '', + selected: true, + }]; + + const shapeOptions = { + stroke: true, + color: '#3388ff', + weight: 3, + opacity: 1, + fill: true, + fillColor: null, + fillOpacity: 0.2, + }; + + return ( +
+ + + + + + New Geofence + + + + + + + + Geofence description goes here + +
+ + + + + + + Save Format + + } + label="INI" + /> + } + label="GeoJSON" + /> + + + + + + + + + + { + //console.log('reactFGref:', reactFGref); + this._onFeatureGroupReady(reactFGref); + }} + > + + + {/*this.state.geofence && ( + + )*/} + { + this.setState({ + ['open']: true, + }); + }} + /> + { + const result = window.confirm('Are you sure you want to delete all shapes?'); + if (!result) { + return; + } + this._editableFG.clearLayers(); + this.setState({ + ['count']: 0, + ['geofence']: null, + }); + }} + /> + + + + + + + Format + + { + this.setState({ + ['importFormat']: '.txt', + }); + }} />} + label="INI" + /> + { + this.setState({ + ['importFormat']: '.json', + }); + }} />} + label="GeoJSON" + /> + + + + +
+ + +
+
+
+ )} + show={this.state.open} + onClose={() => { + this.setState({ + ['open']: false, + }); + }} + /> + + + + + + + Export Format + + { + // Convert geofence + //const geofence = formatGeofenceToGeoJson('.txt', this.state.geofence); + const iniData: any = []; + this._editableFG.eachLayer((layer: any) => { + const geojson = layer.toGeoJSON(); + if (geojson) { + const ini = geoJsonToIni(geojson); + iniData.push(ini) + } + }); + this.setState({ + ['exportGeofence']: iniData.join(''), + ['exportFormat']: '.txt', + }); + }} />} + label="INI" + /> + { + // Convert geofence + const geofence = iniToGeoJson(this.state.exportGeofence); + const json = JSON.stringify(geofence, null, 2); + this.setState({ + ['exportGeofence']: json, + ['exportFormat']: '.json', + }); + }} />} + label="GeoJSON" + /> + + + + +
+ + +
+
+
+ )} + show={this.state.exportOpen} + onClose={() => { + this.setState({ + ['exportOpen']: false, + }); + }} + /> + + + +
+
+ + +
+
+
+ ); + } +} + +export default withRouter(NewGeofence); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Geofences/index.ts b/src/ClientApp/src/pages/Geofences/index.ts new file mode 100644 index 00000000..c583c99f --- /dev/null +++ b/src/ClientApp/src/pages/Geofences/index.ts @@ -0,0 +1,9 @@ +import EditGeofence from './EditGeofence'; +import ListGeofences from './ListGeofences'; +import NewGeofence from './NewGeofence'; + +export { + EditGeofence, + ListGeofences, + NewGeofence, +}; \ No newline at end of file diff --git a/src/ClientApp/src/pages/ListSubscriptions.tsx b/src/ClientApp/src/pages/ListSubscriptions.tsx new file mode 100644 index 00000000..0f611af3 --- /dev/null +++ b/src/ClientApp/src/pages/ListSubscriptions.tsx @@ -0,0 +1,126 @@ +import React, { useEffect, useState } from 'react' +import { + Button, + ButtonGroup, + IconButton, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; +import { DataGrid, GridColDef } from '@mui/x-data-grid'; +import { + Add as AddIcon, + Delete as DeleteIcon, + Visibility as VisibilityIcon, +} from '@mui/icons-material'; + +import config from '../config.json'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + //padding: theme.spacing(2), + paddingTop: theme.spacing(10), + //marginRight: theme.spacing(-6), + //paddingLeft: theme.spacing(2), + height: '80%', + width: '100%', + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, +})); + +function ListSubscriptions() { + const columns: GridColDef[] = [ + { field: 'id', headerName: 'Name', flex: 1 }, + { + field: 'name', + headerName: 'Name', + flex: 1, + }, + { + field: 'action', + headerName: 'Action', + width: 100, + flex: 1, + renderCell: (params) => { + return ( + + window.location.href = config.homepage + 'subscription/' + params.row.id}> + + + confirmDelete(params.row.id)}> + + + + ); + }, + }, + ]; + + const [users, setUsers] = useState([]); + useEffect(() => { + refreshList(); + }, []); + const refreshList = () => { + fetch(config.apiUrl + 'admin/subscriptions', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + setUsers(data); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + }; + + const confirmDelete = (id: number): void => { + const result = window.confirm(`Are you sure you want to delete user subscription ${id}?`); + if (!result) { + return; + } + // TODO: Send delete request + console.log('delete:', users); + setUsers(users.filter((item: any) => item.id !== id)); + }; + + const classes = useStyles(); + return ( +
+
+ User Subscriptions +
+ + User subscriptions management + + +
+ ); +} + +export default ListSubscriptions; \ No newline at end of file diff --git a/src/ClientApp/src/pages/ListUsers.tsx b/src/ClientApp/src/pages/ListUsers.tsx new file mode 100644 index 00000000..50a99103 --- /dev/null +++ b/src/ClientApp/src/pages/ListUsers.tsx @@ -0,0 +1,129 @@ +import React, { useEffect, useState } from 'react' +import { Link } from 'react-router-dom'; +import { + Button, + ButtonGroup, + IconButton, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; +import { DataGrid, GridColDef } from '@mui/x-data-grid'; +import { + Delete as DeleteIcon, + Edit as EditIcon, +} from '@mui/icons-material'; + +import config from '../config.json'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + //padding: theme.spacing(2), + paddingTop: theme.spacing(10), + //marginRight: theme.spacing(-6), + //paddingLeft: theme.spacing(2), + height: '80%', + width: '100%', + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, +})); + +function ListUsers() { + const columns: GridColDef[] = [ + { field: 'id', headerName: 'Name', flex: 1 }, + { + field: 'name', + headerName: 'Name', + flex: 1, + }, + { + field: 'action', + headerName: 'Action', + width: 100, + flex: 1, + renderCell: (params) => { + return ( + + window.location.href = config.homepage + 'user/edit/' + params.row.id}> + + + confirmDelete(params.row.id)}> + + + + ); + }, + }, + ]; + + const [users, setUsers] = useState([]); + useEffect(() => { + refreshList(); + }, []); + const refreshList = () => { + fetch(config.apiUrl + 'admin/users', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + setUsers(data); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + }; + + const confirmDelete = (id: number): void => { + const result = window.confirm(`Are you sure you want to delete filter ${id}?`); + if (!result) { + return; + } + // TODO: Send delete request + console.log('delete:', users); + setUsers(users.filter((item: any) => item.id !== id)); + }; + + const classes = useStyles(); + return ( +
+
+ Users + + + +
+ + Admin management + + +
+ ); +} + +export default ListUsers; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Roles/EditRole.tsx b/src/ClientApp/src/pages/Roles/EditRole.tsx new file mode 100644 index 00000000..290ebed9 --- /dev/null +++ b/src/ClientApp/src/pages/Roles/EditRole.tsx @@ -0,0 +1,243 @@ +import React, { useState } from 'react' +import { + Box, + Button, + Container, + FormControl, + FormControlLabel, + Grid, + InputLabel, + MenuItem, + Select, + Switch, + TextField, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import withRouter from '../../hooks/WithRouter'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +class EditRole extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + name: props.params!.id, + moderator: false, + permissions: [], + roleId: '', + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + componentDidMount() { + console.log('componentDidMount:', this.state, this.props); + this.fetchData(this.props.params!.id); + } + + fetchData(id: any) { + fetch(config.apiUrl + 'admin/role/' + id, { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + console.log('role data:', data); + this.setState({ + ...data.data.role, + roleId: data.data.roleId, + }); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + const id = this.props.params!.id; + fetch(config.apiUrl + 'admin/role/' + id, { + method: 'PUT', + body: JSON.stringify(this.state), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'discords'; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Discord Roles', + color: 'inherit', + href: config.homepage + 'roles', + selected: false, + }, { + text: 'Edit ' + this.props.params!.id, + color: 'primary', + href: '', + selected: true, + }]; + + return ( +
+ + + + Edit Discord Role {this.props.params!.id} + + + Discord role description goes here + +
+ + + + + + + + + + Permissions + + + + + } + label="Is Moderator" + /> + + +
+
+ + +
+
+
+ ); + } +} + +export default withRouter(EditRole); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Roles/ListRoles.tsx b/src/ClientApp/src/pages/Roles/ListRoles.tsx new file mode 100644 index 00000000..6c26d726 --- /dev/null +++ b/src/ClientApp/src/pages/Roles/ListRoles.tsx @@ -0,0 +1,159 @@ +import React, { useEffect, useState } from 'react' +import { Link } from 'react-router-dom'; +import { + Button, + ButtonGroup, + IconButton, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; +import { DataGrid, GridColDef } from '@mui/x-data-grid'; +import { + Delete as DeleteIcon, + Edit as EditIcon, +} from '@mui/icons-material'; + +import config from '../../config.json'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + //padding: theme.spacing(2), + paddingTop: theme.spacing(10), + //marginRight: theme.spacing(-6), + //paddingLeft: theme.spacing(2), + height: '80%', + width: '100%', + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, +})); + +function ListRoles() { + const columns: GridColDef[] = [ + { field: 'name', headerName: 'Name', flex: 1 }, + { + field: 'id', + headerName: 'Discord ID', + flex: 1, + renderCell: (params) => BigInt(params.row.id).toString(), + }, + { + field: 'permissions', + headerName: 'Permissions', + flex: 1, + }, + { + field: 'moderator', + headerName: 'Is Moderator', + flex: 1, + renderCell: (params) => params.row.moderator ? 'Yes' : 'No', + }, + { + field: 'action', + headerName: 'Action', + width: 100, + flex: 1, + renderCell: (params) => { + return ( + + window.location.href = config.homepage + 'role/' + params.row.name}> + + + confirmDelete(params.row.id)}> + + + + ); + }, + }, + ]; + + const [roles, setRoles] = useState([]); + useEffect(() => { + refreshList(); + }, []); + const refreshList = () => { + fetch(config.apiUrl + 'admin/roles', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + setRoles(data); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + }; + + const confirmDelete = (id: number): void => { + const result = window.confirm(`Are you sure you want to delete role ${id}?`); + if (!result) { + return; + } + // Send delete request + fetch(config.apiUrl + 'admin/role/' + id, { + method: 'DELETE', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + if (data.status !== 'OK') { + // TODO: error + alert(data.error); + return; + } + // Update list on successful delete via api + setRoles(roles.filter((item: any) => item.id !== id)); + }).catch(err => { + console.error('error:', err); + }); + }; + + const classes = useStyles(); + return ( +
+
+ Discord Roles + + + +
+ + Available Discord roles for subscribers and moderators. + + +
+ ); +} + +export default ListRoles; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Roles/NewRole.tsx b/src/ClientApp/src/pages/Roles/NewRole.tsx new file mode 100644 index 00000000..6e4ce690 --- /dev/null +++ b/src/ClientApp/src/pages/Roles/NewRole.tsx @@ -0,0 +1,239 @@ +import React, { useState } from 'react' +import { + Box, + Button, + Container, + FormControl, + FormControlLabel, + Grid, + InputLabel, + MenuItem, + Select, + Switch, + TextField, + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; + +import config from '../../config.json'; +import { BreadCrumbs } from '../../components/BreadCrumbs'; +import withRouter from '../../hooks/WithRouter'; +import { IGlobalProps } from '../../interfaces/IGlobalProps'; +import { onNestedStateChange } from '../../utils/nestedStateHelper'; + +class NewRole extends React.Component { + public state: any; + + constructor(props: IGlobalProps) { + super(props); + console.log('props:', props); + this.state = { + // TODO: Set default state values + name: '', + moderator: false, + permissions: [], + roleId: '', + }; + this.onInputChange = this.onInputChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handlePanelExpanded = this.handlePanelExpanded.bind(this); + } + + componentDidMount() { + console.log('componentDidMount:', this.state, this.props); + this.fetchData(this.props.params!.id); + } + + fetchData(id: any) { + fetch(config.apiUrl + 'admin/role/' + id, { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + console.log('role data:', data); + this.setState({ + ...data.data.role, + roleId: data.data.roleId, + }); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + } + + onInputChange(event: any) { + onNestedStateChange(event, this); + } + + handlePanelExpanded = (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => { + this.setState({ ['expanded']: isExpanded ? panel : false }); + } + + handleSubmit(event: React.FormEvent) { + event.preventDefault(); + + console.log('handle submit state:', this.state); + + fetch(config.apiUrl + 'admin/role/new', { + method: 'POST', + body: JSON.stringify(this.state), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }).then(async (response) => await response.json()) + .then((data: any) => { + console.log('response:', data); + + }).catch((err) => { + console.error('error:', err); + event.preventDefault(); + }); + } + + render() { + const handleCancel = () => window.location.href = config.homepage + 'discords'; + + const classes: any = makeStyles({ + container: { + //paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, + buttonContainer: { + paddingTop: '20px', + }, + }); + + const breadcrumbs = [{ + text: 'Dashboard', + color: 'inherit', + href: config.homepage, + selected: false, + }, { + text: 'Discord Roles', + color: 'inherit', + href: config.homepage + 'roles', + selected: false, + }, { + text: 'New', + color: 'primary', + href: '', + selected: true, + }]; + + return ( +
+ + + + New Discord Role + + + Discord role description goes here + +
+ + + + + + + + + + Permissions + + + + + } + label="Is Moderator" + /> + + +
+
+ + +
+
+
+ ); + } +} + +export default withRouter(NewRole); \ No newline at end of file diff --git a/src/ClientApp/src/pages/Roles/index.ts b/src/ClientApp/src/pages/Roles/index.ts new file mode 100644 index 00000000..3d7674b4 --- /dev/null +++ b/src/ClientApp/src/pages/Roles/index.ts @@ -0,0 +1,9 @@ +import EditRole from './EditRole'; +import ListRoles from './ListRoles'; +import NewRole from './NewRole'; + +export { + EditRole, + ListRoles, + NewRole, +}; \ No newline at end of file diff --git a/src/ClientApp/src/pages/Settings.tsx b/src/ClientApp/src/pages/Settings.tsx new file mode 100644 index 00000000..3b490dd6 --- /dev/null +++ b/src/ClientApp/src/pages/Settings.tsx @@ -0,0 +1,69 @@ +import React, { useEffect, useState } from 'react' +import { + Typography, +} from '@mui/material'; +import { makeStyles } from '@mui/styles'; + +import config from '../config.json'; + +const useStyles = makeStyles((theme: any) => ({ + container: { + //padding: theme.spacing(2), + paddingTop: theme.spacing(10), + }, + table: { + }, + title: { + display: 'flex', + fontWeight: 600, + marginLeft: '10px', + fontSize: '22px', + }, + titleContainer: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: '20px', + }, + buttonGroup: { + display: 'flex', + }, +})); + +function Settings() { + const [settings, setSettings] = useState([]); + useEffect(() => { + refreshList(); + }, []); + const refreshList = () => { + fetch(config.apiUrl + 'admin/settings', { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + }) + .then(async (response) => await response.json()) + .then(data => { + setSettings(data); + }).catch(err => { + console.error('error:', err); + // TODO: Show error notification + }); + }; + + const classes = useStyles(); + return ( +
+
+ Settings +
+ + Settings configuration + +
+ ); +} + +export default Settings; \ No newline at end of file diff --git a/src/ClientApp/src/react-app-env.d.ts b/src/ClientApp/src/react-app-env.d.ts new file mode 100644 index 00000000..6431bc5f --- /dev/null +++ b/src/ClientApp/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/src/ClientApp/src/themes/default.ts b/src/ClientApp/src/themes/default.ts new file mode 100644 index 00000000..1e021b57 --- /dev/null +++ b/src/ClientApp/src/themes/default.ts @@ -0,0 +1,10 @@ +import { createTheme } from '@mui/material'; +import { grey } from '@mui/material/colors'; + +export const theme = createTheme({ + palette: { + primary: { + main: grey[50], + }, + }, +}); \ No newline at end of file diff --git a/src/ClientApp/src/utils/geofenceConverter.ts b/src/ClientApp/src/utils/geofenceConverter.ts new file mode 100644 index 00000000..c3ff63da --- /dev/null +++ b/src/ClientApp/src/utils/geofenceConverter.ts @@ -0,0 +1,39 @@ +export const iniToGeoJson = (data: any): any => { + const geoJson: any = { + type: 'FeatureCollection', + features: [], + }; + const fences = data.match(/\[([^\]]+)\]([^[]*)/g); + for (const fence of fences) { + const geofence: any = { + type: 'Feature', + properties: { + name: fence.match(/\[([^\]]+)\]/)[1], + }, + geometry: { + type: 'Polygon', + coordinates: [[]], + }, + }; + const coordinates = fence.match(/[0-9\-.]+,\s*[0-9\-.]+/g).map((point: any) => [parseFloat(point.split(',')[1]), parseFloat(point.split(',')[0])]); + geofence.geometry.coordinates[0] = coordinates; + // Ensure first coordinate is also the last coordinate + geofence.geometry.coordinates[0].push(geofence.geometry.coordinates[0][0]); + geoJson.features.push(geofence); + } + return geoJson; +}; + +export const geoJsonToIni = (feature: any): any => { + let geofence = []; + if (feature.geometry.type === 'Polygon') { + geofence.push(`[${feature.properties.name}]\n`); + for (const coord of feature.geometry.coordinates) { + coord.pop(); + for (const point of coord) { + geofence.push(`${point[1]},${point[0]}\n`); + } + } + } + return geofence.join(''); +}; \ No newline at end of file diff --git a/src/ClientApp/src/utils/nestedStateHelper.tsx b/src/ClientApp/src/utils/nestedStateHelper.tsx new file mode 100644 index 00000000..40903944 --- /dev/null +++ b/src/ClientApp/src/utils/nestedStateHelper.tsx @@ -0,0 +1,21 @@ +import React, { Component} from 'react'; + +export const onNestedStateChange = (event: any, component: Component) => { + const { name, type, value, checked } = event.target; + const path = name.split('.'); + const finalProp = path.pop(); + const newState = { ...component.state }; + let pointer: any = newState; + path.forEach((el: string) => { + pointer[el] = { ...pointer[el] }; + pointer = pointer[el]; + }); + var formattedValue = value.includes(',') ? value.split(',') : value; + pointer[finalProp] = type === 'checkbox' + ? checked + : type === 'number' + ? Number(value) + : formattedValue; + console.log('newState:', newState); + component.setState(newState); +}; \ No newline at end of file diff --git a/src/ClientApp/tsconfig.json b/src/ClientApp/tsconfig.json new file mode 100644 index 00000000..1e33dee0 --- /dev/null +++ b/src/ClientApp/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "outDir": "./dist", + "rootDir": "./src", + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": [ + "src" + ] +} diff --git a/src/CommandLine.cs b/src/CommandLine.cs deleted file mode 100644 index 6afd2aa6..00000000 --- a/src/CommandLine.cs +++ /dev/null @@ -1,69 +0,0 @@ -namespace WhMgr -{ - using System; - using System.Collections.Generic; - - using WhMgr.Diagnostics; - - /// - /// The command line class. - /// - public static class CommandLine - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("COMMANDLINE", Program.LogLevel); - - /// - /// Parses the provided command line parameters. - /// - /// - /// The command line parameters to parse. - /// Returns a dictionary of key value pairs containing the parsed command line parameters. - public static Dictionary ParseArgs(string[] prefixes, string[] args) - { - _logger.Trace("CommandLine::ParseArgs"); - - var dict = new Dictionary(); - for (int i = 0; i < args.Length; i++) - { - var prefix = GetPrefix(prefixes, args[i]); - if (!string.IsNullOrEmpty(prefix)) - { - try - { - var key = args[i].Substring(prefix.Length, args[i].Length - prefix.Length); - var isEnd = args.Length - 1 == i; - var isCommand = !isEnd && args[i + 1].Contains(prefix); - if (isCommand || isEnd) - { - dict.Add(key, true); - continue; - } - - var value = args[i + 1]; - dict.Add(key, value); - } - catch (Exception ex) - { - _logger.Debug($"Failed to parse argument: {ex}"); - } - } - } - - return dict; - } - - private static string GetPrefix(string[] prefixes, string argument) - { - foreach (var prefix in prefixes) - { - var arg = argument.Substring(0, prefix.Length); - if (arg == prefix) - { - return prefix; - } - } - - return null; - } - } -} \ No newline at end of file diff --git a/src/Commands/Areas.cs b/src/Commands/Areas.cs deleted file mode 100644 index 2c7cd3eb..00000000 --- a/src/Commands/Areas.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -using DSharpPlus.CommandsNext; -using DSharpPlus.CommandsNext.Attributes; -using DSharpPlus.Entities; -using DSharpPlus.Interactivity; - -using WhMgr.Diagnostics; -using WhMgr.Extensions; -using WhMgr.Localization; -using WhMgr.Net.Webhooks; - -namespace WhMgr.Commands -{ - public class Areas - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("AREAS", Program.LogLevel); - - private readonly Dependencies _dep; - - public Areas(Dependencies dep) - { - _dep = dep; - - } - - [ - Command("areas"), - //Aliases("", ""), - Description("Shows a list of areas") - ] - public async Task SendPaginated(CommandContext ctx) - { - if (!await ctx.IsDirectMessageSupported(_dep.WhConfig)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - - var geofences = _dep.Whm.GetServerGeofences(guildId); - - List areas = geofences.Select(geofence => geofence.Name).OrderBy(Name => Name).ToList(); - - - var interactivity = ctx.Client.GetInteractivityModule(); - List pages = new List(); - int pagelength = 0; - var psb = new StringBuilder(); - int linesThisPage = 0; - int num = 1; - var title = string.Format("Page {0}", (object)num); - foreach (var line in areas.Select(area => $"- {area}\n")) - { - var length = line.Length; - var wouldGoOver = length + pagelength > 2000; - - if (wouldGoOver || linesThisPage >= 25) - { - title = string.Format("Page {0}", (object)num); - var eb = new DiscordEmbedBuilder - { - Color = DiscordColor.Blue, - Title = title, - Description = psb.ToString(), - }; - pages.Add(new Page { Embed = eb }); - psb.Clear(); - pagelength = 0; - linesThisPage = 0; - ++num; - } - - psb.Append(line); - pagelength += length; - linesThisPage++; - } - - if (psb.Length > 0) - { - title = string.Format("Page {0}", (object)num); - var eb = new DiscordEmbedBuilder - { - Color = DiscordColor.Red, - Title = title, - Description = psb.ToString(), - - }; - pages.Add(new Page { Embed = eb }); - } - - await interactivity.SendPaginatedMessage(ctx.Channel, ctx.User, pages, timeoutoverride: TimeSpan.FromMinutes(5)); - } - - } - - -} diff --git a/src/Commands/Dependencies.cs b/src/Commands/Dependencies.cs deleted file mode 100644 index 79f16601..00000000 --- a/src/Commands/Dependencies.cs +++ /dev/null @@ -1,37 +0,0 @@ -namespace WhMgr.Commands -{ - using DSharpPlus.Interactivity; - - using WhMgr.Configuration; - using WhMgr.Data.Subscriptions; - using WhMgr.Net.Webhooks; - using WhMgr.Osm; - using WhMgr.Services; - - public class Dependencies - { - private readonly WhConfigHolder _configHolder; - - public InteractivityModule Interactivity; - - public WebhookController Whm { get; } - - public SubscriptionProcessor SubscriptionProcessor { get; } - - public WhConfig WhConfig => _configHolder.Instance; - - public StripeService Stripe { get; } - - public OsmManager OsmManager { get; } - - public Dependencies(InteractivityModule interactivity, WebhookController whm, SubscriptionProcessor subProcessor, WhConfigHolder whConfig, StripeService stripe) - { - Interactivity = interactivity; - Whm = whm; - SubscriptionProcessor = subProcessor; - _configHolder = whConfig; - Stripe = stripe; - OsmManager = new OsmManager(); - } - } -} \ No newline at end of file diff --git a/src/Commands/Discord/Areas.cs b/src/Commands/Discord/Areas.cs new file mode 100644 index 00000000..0dfda441 --- /dev/null +++ b/src/Commands/Discord/Areas.cs @@ -0,0 +1,106 @@ +namespace WhMgr.Commands.Discord +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text; + using System.Threading.Tasks; + + using DSharpPlus.CommandsNext; + using DSharpPlus.CommandsNext.Attributes; + using DSharpPlus.Entities; + using DSharpPlus.Interactivity; + using DSharpPlus.Interactivity.Extensions; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Services.Geofence; + + public class Areas : BaseCommandModule + { + private readonly ConfigHolder _config; + private readonly Microsoft.Extensions.Logging.ILogger _logger; + + public Areas( + ConfigHolder config, + Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) + { + _config = config; + _logger = loggerFactory.CreateLogger(typeof(Feeds).FullName); + } + + [ + Command("areas"), + Description("Shows a list of available areas covered") + ] + public async Task SendPaginated(CommandContext ctx) + { + if (!await ctx.IsDirectMessageSupportedAsync(_config.Instance)) + return; + + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(guildId => _config.Instance.Servers.ContainsKey(guildId)); + if (!_config.Instance.Servers.ContainsKey(guildId)) + return; + + List GetServerGeofences(ulong guildId) + { + if (!_config.Instance.Servers.ContainsKey(guildId)) + { + _logger.Warning($"Failed to get geofences from guild: {guildId}"); + return null; + } + return _config.Instance.Servers[guildId].Geofences; + } + + var server = _config.Instance.Servers[guildId]; + var geofences = GetServerGeofences(guildId); + var areas = geofences.Select(geofence => geofence.Name).OrderBy(Name => Name).ToList(); + + var interactivity = ctx.Client.GetInteractivity(); + var pages = new List(); + var pageLength = 0; + var psb = new StringBuilder(); + var linesThisPage = 0; + var pageNum = 1; + + foreach (var line in areas.Select(area => $"- {area}\n")) + { + var length = line.Length; + var wouldGoOver = length + pageLength > 2000; + + if (wouldGoOver || linesThisPage >= 25) + { + var eb = new DiscordEmbedBuilder + { + Color = DiscordColor.Blue, + Title = $"Page {pageNum}", + Description = psb.ToString(), + }; + pages.Add(new Page { Embed = eb }); + psb.Clear(); + pageLength = 0; + linesThisPage = 0; + ++pageNum; + } + + psb.Append(line); + pageLength += length; + linesThisPage++; + } + + if (psb.Length > 0) + { + var eb = new DiscordEmbedBuilder + { + Color = DiscordColor.Red, + Title = $"Page {pageNum}", + Description = psb.ToString(), + + }; + pages.Add(new Page { Embed = eb }); + } + + await interactivity.SendPaginatedMessageAsync(ctx.Channel, ctx.User, pages);//, timeoutoverride: TimeSpan.FromMinutes(5)); + } + } +} \ No newline at end of file diff --git a/src/Commands/Discord/DailyStats.cs b/src/Commands/Discord/DailyStats.cs new file mode 100644 index 00000000..7a14a0b1 --- /dev/null +++ b/src/Commands/Discord/DailyStats.cs @@ -0,0 +1,164 @@ +namespace WhMgr.Commands.Discord +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading.Tasks; + + using DSharpPlus; + using DSharpPlus.CommandsNext; + using DSharpPlus.CommandsNext.Attributes; + using DSharpPlus.Entities; + using Microsoft.EntityFrameworkCore; + + using WhMgr.Configuration; + using WhMgr.Data; + using WhMgr.Data.Factories; + using WhMgr.Extensions; + using WhMgr.HostedServices; + using WhMgr.Localization; + + // TODO: Simplified IV stats postings via command with arg `list` + // TODO: Get total IV found for IV stats + // TODO: Include forms with shiny/iv stats + + public class DailyStats : BaseCommandModule + { + private readonly ConfigHolder _config; + + public DailyStats(ConfigHolder config) + { + _config = config; + } + + #region Stat Commands + + [ + Command("shiny-stats"), + RequirePermissions(Permissions.KickMembers), + ] + public async Task GetShinyStatsAsync(CommandContext ctx) + { + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(guildId => _config.Instance.Servers.ContainsKey(guildId)); + if (guildId > 0) + { + await StatisticReportsHostedService.PostShinyStatsAsync(guildId, _config.Instance, ctx.Client); + } + } + + [ + Command("hundo-stats"), + RequirePermissions(Permissions.KickMembers), + ] + public async Task GetHundoStatsAsync(CommandContext ctx) + { + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(guildId => _config.Instance.Servers.ContainsKey(guildId)); + if (guildId > 0) + { + await StatisticReportsHostedService.PostHundoStatsAsync(guildId, _config.Instance, ctx.Client); + } + } + + [ + Command("iv-stats"), + RequirePermissions(Permissions.KickMembers), + ] + public async Task GetIVStatsAsync(CommandContext ctx, uint minimumIV = 100) + { + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(guildId => _config.Instance.Servers.ContainsKey(guildId)); + + if (!_config.Instance.Servers.ContainsKey(guildId)) + { + await ctx.RespondEmbedAsync(Translator.Instance.Translate("ERROR_NOT_IN_DISCORD_SERVER"), DiscordColor.Red); + return; + } + + var server = _config.Instance.Servers[guildId]; + if (!server.DailyStats.IVStats.Enabled) + return; + + var statsChannel = await ctx.Client.GetChannelAsync(server.DailyStats.IVStats.ChannelId); + if (statsChannel == null) + { + Console.WriteLine($"Failed to get channel id {server.DailyStats.IVStats.ChannelId} to post shiny stats."); + await ctx.RespondEmbedAsync(Translator.Instance.Translate("SHINY_STATS_INVALID_CHANNEL").FormatText(ctx.User.Username), DiscordColor.Yellow); + return; + } + + if (server.DailyStats.IVStats.ClearMessages) + { + await ctx.Client.DeleteMessagesAsync(server.DailyStats.IVStats.ChannelId); + } + + var stats = GetIvStats(_config.Instance.Database.Scanner.ToString(), minimumIV); + + var date = DateTime.Now.Subtract(TimeSpan.FromHours(24)).ToLongDateString(); + // TODO: Localize IV stats + await statsChannel.SendMessageAsync($"[**{minimumIV}% IV Pokemon stats for {date}**]"); + await statsChannel.SendMessageAsync("----------------------------------------------"); + + //var sb = new System.Text.StringBuilder(); + var keys = stats.Keys.ToList(); + keys.Sort(); + //foreach (var (pokemonId, count) in stats) + foreach (var key in keys) + { + var count = stats[key]; + var total = 0; + var ratio = 0; + var pkmn = GameMaster.GetPokemon(key); + //sb.AppendLine($"- {pkmn.Name} (#{key}) {count:N0}"); + await statsChannel.SendMessageAsync($"**{pkmn.Name} (#{key})** | **{count:N0}** out of **{total}** total seen in the last 24 hours with a **1/{ratio}** ratio."); + } + + await statsChannel.SendMessageAsync($"Found **8,094** total {minimumIV}% IV Pokemon out of **4,050,641** possiblities with a **1/500** ratio in total."); + /* + var embed = new DiscordEmbedBuilder + { + Title = $"100% Pokemon Found (Last 24 Hours)", + Description = sb.ToString(), + }; + await ctx.RespondAsync(embed.Build()); + */ + } + + #endregion + + internal static Dictionary GetIvStats(string scannerConnectionString, double minIV) + { + try + { + using var ctx = DbContextFactory.CreateMapContext(scannerConnectionString); + ctx.Database.SetCommandTimeout(TimeSpan.FromSeconds(30)); // 30 seconds timeout + var now = DateTime.UtcNow; + var hoursAgo = TimeSpan.FromHours(24); + var yesterday = Convert.ToInt64(Math.Round(now.Subtract(hoursAgo).GetUnixTimestamp())); + // Checks within last 24 hours and 100% IV (or use statistics cache?) + var pokemon = ctx.Pokemon + .AsEnumerable() + .Where(pokemon => pokemon.Attack != null && pokemon.Defense != null && pokemon.Stamina != null + && pokemon.DisappearTime > yesterday + && GetIV(pokemon.Attack, pokemon.Defense, pokemon.Stamina) >= minIV + //&& x.Attack == 15 + //&& x.Defense == 15 + //&& x.Stamina == 15 + ) + .AsEnumerable() + .GroupBy(x => x.PokemonId, y => y.IV) + .Select(g => new { name = g.Key, count = g.Count() }) + .ToDictionary(x => x.name, y => y.count); + return pokemon; + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex}"); + } + return null; + } + + static double GetIV(ushort? attack, ushort? defense, ushort? stamina) + { + return Math.Round((attack ?? 0 + defense ?? 0 + stamina ?? 0) * 100.0 / 45.0, 1); + } + } +} \ No newline at end of file diff --git a/src/Commands/Feeds.cs b/src/Commands/Discord/Feeds.cs similarity index 53% rename from src/Commands/Feeds.cs rename to src/Commands/Discord/Feeds.cs index 3a6d7303..e0b33111 100644 --- a/src/Commands/Feeds.cs +++ b/src/Commands/Discord/Feeds.cs @@ -1,4 +1,4 @@ -namespace WhMgr.Commands +namespace WhMgr.Commands.Discord { using System; using System.Collections.Generic; @@ -7,53 +7,60 @@ using System.Threading; using System.Threading.Tasks; + using DSharpPlus; using DSharpPlus.CommandsNext; using DSharpPlus.CommandsNext.Attributes; using DSharpPlus.Entities; + //using Microsoft.Extensions.Logging; - using WhMgr.Diagnostics; + using WhMgr.Configuration; using WhMgr.Extensions; using WhMgr.Localization; - public class Feeds + public class Feeds : BaseCommandModule { - private static readonly IEventLogger _logger = EventLogger.GetLogger("FEEDS", Program.LogLevel); + private readonly ConfigHolder _config; + private readonly Microsoft.Extensions.Logging.ILogger _logger; - private readonly Dependencies _dep; - - public Feeds(Dependencies dep) + public Feeds( + ConfigHolder config, + Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) { - _dep = dep; + _config = config; + //_logger = (Microsoft.Extensions.Logging.ILogger)loggerFactory.CreateLogger(typeof(Feeds).FullName); // CreateLogger(); + _logger = loggerFactory.CreateLogger(typeof(Feeds).FullName); } [ - Command("feeds"), - Aliases("cities", "roles"), - Description("Shows a list of assignable city roles and other roles.") - ] + Command("feeds"), + Aliases("cities", "roles"), + Description("Shows a list of assignable city roles and other roles.") + ] public async Task FeedsAsync(CommandContext ctx) { - if (!await ctx.IsDirectMessageSupported(_dep.WhConfig)) + if (!await ctx.IsDirectMessageSupportedAsync(_config.Instance)) return; - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(guildId => _config.Instance.Servers.ContainsKey(guildId)); + if (!_config.Instance.Servers.ContainsKey(guildId)) return; - var server = _dep.WhConfig.Servers[guildId]; - var cityRoles = server.Geofences.Select(x => x.Name).ToList(); + var server = _config.Instance.Servers[guildId]; + var cityRoles = server.Geofences.Select(geofence => geofence.Name) + .Distinct() + .ToList(); cityRoles.Sort(); var sb = new StringBuilder(); sb.AppendLine(Translator.Instance.Translate("FEEDS_AVAILABLE_CITY_ROLES")); sb.AppendLine($"- {string.Join($"{Environment.NewLine}- ", cityRoles)}"); sb.AppendLine(); - sb.AppendLine($"- {Strings.All}"); + sb.AppendLine($"- {Strings.Defaults.All}"); sb.AppendLine(); sb.AppendLine(); - sb.AppendLine(Translator.Instance.Translate("FEEDS_TYPE_COMMAND_ASSIGN_ROLE").FormatText(server.CommandPrefix)); + sb.AppendLine(Translator.Instance.Translate("FEEDS_TYPE_COMMAND_ASSIGN_ROLE").FormatText(new { prefix = server.Bot.CommandPrefix })); var eb = new DiscordEmbedBuilder { - Color = DiscordColor.Red, + Color = DiscordColor.Blurple, Description = sb.ToString(), Footer = new DiscordEmbedBuilder.EmbedFooter { @@ -73,25 +80,25 @@ public async Task FeedsAsync(CommandContext ctx) public async Task FeedMeAsync(CommandContext ctx, [Description("City name to join or all."), RemainingText] string cityName = null) { - if (!await ctx.IsDirectMessageSupported(_dep.WhConfig)) + if (!await ctx.IsDirectMessageSupportedAsync(_config.Instance)) return; - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(guildId => _config.Instance.Servers.ContainsKey(guildId)); + if (!_config.Instance.Servers.ContainsKey(guildId)) return; - var server = _dep.WhConfig.Servers[guildId]; - var isSupporter = await ctx.Client.IsSupporterOrHigher(ctx.User.Id, guildId, _dep.WhConfig); - var isFreeRole = string.IsNullOrEmpty(server.FreeRoleName) ? false : string.Compare(cityName, server.FreeRoleName, true) == 0; - if (server.CitiesRequireSupporterRole && !isSupporter && !isFreeRole) + var server = _config.Instance.Servers[guildId]; + var isSupporter = await ctx.Client.IsSupporterOrHigherAsync(ctx.User.Id, guildId, _config.Instance); + var isFreeRole = !string.IsNullOrEmpty(server.FreeRoleName) && string.Compare(cityName, server.FreeRoleName, true) == 0; + if (server.GeofenceRoles.RequiresDonorRole && !isSupporter && !isFreeRole) { - await ctx.DonateUnlockFeaturesMessage(); + await ctx.DonateUnlockFeaturesMessageAsync(); return; } - if (string.Compare(cityName, Strings.All, true) == 0) + if (string.Compare(cityName, Strings.Defaults.All, true) == 0) { - await ctx.RespondEmbed(Translator.Instance.Translate("FEEDS_PLEASE_WAIT", ctx.User.Username), DiscordColor.Green); + await ctx.RespondEmbedAsync(Translator.Instance.Translate("FEEDS_PLEASE_WAIT").FormatText(new { author = ctx.User.Username }), DiscordColor.Green); await AssignAllDefaultFeedRoles(ctx); return; } @@ -102,19 +109,28 @@ public async Task FeedMeAsync(CommandContext ctx, try { var cityNames = cityName.RemoveSpaces(); - var cityRoles = server.Geofences.Select(x => x.Name.ToLower()); + var cityRoles = server.Geofences.Select(geofence => geofence.Name.ToLower()); foreach (var city in cityNames) { if (!isFreeRole && !cityRoles.Contains(city.ToLower())) { - await ctx.RespondEmbed(Translator.Instance.Translate("FEEDS_INVALID_CITY_NAME_TYPE_COMMAND").FormatText(ctx.User.Username, city, server.CommandPrefix), DiscordColor.Red); + await ctx.RespondEmbedAsync(Translator.Instance.Translate("FEEDS_INVALID_CITY_NAME_TYPE_COMMAND").FormatText(new + { + author = ctx.User.Username, + city, + prefix = server.Bot.CommandPrefix, + }), DiscordColor.Red); continue; } var cityRole = ctx.Guild.GetRoleFromName(city); if (cityRole == null) { - await ctx.RespondEmbed(Translator.Instance.Translate("FEEDS_INVALID_CITY_NAME").FormatText(ctx.User.Username, city), DiscordColor.Red); + await ctx.RespondEmbedAsync(Translator.Instance.Translate("FEEDS_INVALID_CITY_NAME").FormatText(new + { + author = ctx.User.Username, + city, + }), DiscordColor.Red); continue; } @@ -133,23 +149,31 @@ public async Task FeedMeAsync(CommandContext ctx, if (assigned.Count == 0 && alreadyAssigned.Count == 0) { - ctx.Client.DebugLogger.LogMessage(DSharpPlus.LogLevel.Debug, "Feeds", $"No roles assigned or already assigned for user {ctx.User.Username} ({ctx.User.Id}). Value: {string.Join(", ", cityNames)}", DateTime.Now); + _logger.Debug($"No roles assigned or already assigned for user {ctx.User.Username} ({ctx.User.Id}). Value: {string.Join(", ", cityNames)}"); return; } - await ctx.RespondEmbed + await ctx.RespondEmbedAsync ( (assigned.Count > 0 - ? Translator.Instance.Translate("FEEDS_ASSIGNED_ROLES").FormatText(ctx.User.Username, string.Join("**, **", assigned)) + ? Translator.Instance.Translate("FEEDS_ASSIGNED_ROLES").FormatText(new + { + author = ctx.User.Username, + roles = string.Join("**, **", assigned), + }) : string.Empty) + (alreadyAssigned.Count > 0 - ? Translator.Instance.Translate("FEEDS_UNASSIGNED_ROLES").FormatText(ctx.User.Username, string.Join("**, **", alreadyAssigned)) + ? Translator.Instance.Translate("FEEDS_UNASSIGNED_ROLES").FormatText(new + { + author = ctx.User.Username, + roles = string.Join("**, **", alreadyAssigned), + }) : string.Empty) ); } catch (Exception ex) { - _logger.Error(ex); + _logger.Error(ex.ToString()); } } @@ -160,25 +184,25 @@ await ctx.RespondEmbed public async Task FeedMeNotAsync(CommandContext ctx, [Description("City name to leave or all."), RemainingText] string cityName) { - if (!await ctx.IsDirectMessageSupported(_dep.WhConfig)) + if (!await ctx.IsDirectMessageSupportedAsync(_config.Instance)) return; - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(guildId => _config.Instance.Servers.ContainsKey(guildId)); + if (!_config.Instance.Servers.ContainsKey(guildId)) return; - var server = _dep.WhConfig.Servers[guildId]; - var isSupporter = await ctx.Client.IsSupporterOrHigher(ctx.User.Id, guildId, _dep.WhConfig); - var isFreeRole = string.IsNullOrEmpty(server.FreeRoleName) ? false : string.Compare(cityName, server.FreeRoleName, true) == 0; - if (server.CitiesRequireSupporterRole && !isSupporter && !isFreeRole) + var server = _config.Instance.Servers[guildId]; + var isSupporter = await ctx.Client.IsSupporterOrHigherAsync(ctx.User.Id, guildId, _config.Instance); + var isFreeRole = !string.IsNullOrEmpty(server.FreeRoleName) && string.Compare(cityName, server.FreeRoleName, true) == 0; + if (server.GeofenceRoles.RequiresDonorRole && !isSupporter && !isFreeRole) { - await ctx.DonateUnlockFeaturesMessage(); + await ctx.DonateUnlockFeaturesMessageAsync(); return; } - if (string.Compare(cityName, Strings.All, true) == 0) + if (string.Compare(cityName, Strings.Defaults.All, true) == 0) { - await ctx.RespondEmbed(Translator.Instance.Translate("FEEDS_PLEASE_WAIT", ctx.User.Username), DiscordColor.Green); + await ctx.RespondEmbedAsync(Translator.Instance.Translate("FEEDS_PLEASE_WAIT").FormatText(new { author = ctx.User.Username }), DiscordColor.Green); await RemoveAllDefaultFeedRoles(ctx); return; } @@ -189,19 +213,28 @@ public async Task FeedMeNotAsync(CommandContext ctx, try { var cityNames = cityName.RemoveSpaces(); - var areas = server.Geofences.Select(x => x.Name).ToList(); + var areas = server.Geofences.Select(geofence => geofence.Name).ToList(); foreach (var city in cityNames) { - if (!isFreeRole && !areas.Exists(x => string.Compare(city, x, true) == 0)) + if (!isFreeRole && !areas.Exists(area => string.Compare(city, area, true) == 0)) { - await ctx.RespondEmbed(Translator.Instance.Translate("FEEDS_INVALID_CITY_NAME_TYPE_COMMAND").FormatText(ctx.User.Username, city, server.CommandPrefix), DiscordColor.Red); + await ctx.RespondEmbedAsync(Translator.Instance.Translate("FEEDS_INVALID_CITY_NAME_TYPE_COMMAND").FormatText(new + { + author = ctx.User.Username, + city, + server.Bot.CommandPrefix, + }), DiscordColor.Red); continue; } var cityRole = ctx.Guild.GetRoleFromName(city); if (cityRole == null) { - await ctx.RespondEmbed(Translator.Instance.Translate("FEEDS_INVALID_CITY_NAME").FormatText(ctx.User.Username, city), DiscordColor.Red); + await ctx.RespondEmbedAsync(Translator.Instance.Translate("FEEDS_INVALID_CITY_NAME").FormatText(new + { + author = ctx.User.Username, + city, + }), DiscordColor.Red); continue; } @@ -217,36 +250,44 @@ public async Task FeedMeNotAsync(CommandContext ctx, Thread.Sleep(200); } - await ctx.RespondEmbed + await ctx.RespondEmbedAsync ( (unassigned.Count > 0 - ? Translator.Instance.Translate("FEEDS_UNASSIGNED_ROLES").FormatText(ctx.User.Username, string.Join("**, **", unassigned)) + ? Translator.Instance.Translate("FEEDS_UNASSIGNED_ROLES").FormatText(new + { + author = ctx.User.Username, + roles = string.Join("**, **", unassigned), + }) : string.Empty) + (alreadyUnassigned.Count > 0 - ? Translator.Instance.Translate("FEEDS_UNASSIGNED_ROLES_ALREADY").FormatText(ctx.User.Username, string.Join("**, **", alreadyUnassigned)) + ? Translator.Instance.Translate("FEEDS_UNASSIGNED_ROLES_ALREADY").FormatText(new + { + author = ctx.User.Username, + roles = string.Join("**, **", alreadyUnassigned), + }) : string.Empty) ); } catch (Exception ex) { - _logger.Error(ex); + _logger.Error(ex.ToString()); } } private async Task AssignAllDefaultFeedRoles(CommandContext ctx) { - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(guildId => _config.Instance.Servers.ContainsKey(guildId)); - if (_dep.WhConfig.Servers[guildId].Geofences == null) + if (_config.Instance.Servers[guildId].Geofences == null) { - _logger.Warn($"City roles empty."); + _logger.Warning($"City roles empty."); return; } try { - var server = _dep.WhConfig.Servers[guildId]; - var areas = server.Geofences.Select(x => x.Name).ToList(); + var server = _config.Instance.Servers[guildId]; + var areas = server.Geofences.Select(geofence => geofence.Name).Distinct().ToList(); for (var i = 0; i < areas.Count; i++) { var city = areas[i]; @@ -265,31 +306,34 @@ private async Task AssignAllDefaultFeedRoles(CommandContext ctx) Thread.Sleep(500); } + + await ctx.RespondEmbedAsync(Translator.Instance.Translate("FEEDS_ASSIGNED_ALL_ROLES").FormatText(new + { + author = ctx.User.Username, + roles = "\n- " + string.Join("\n- ", areas), + })); } catch (Exception) { _logger.Error($"Failed to add feed role, make sure bot has correct permissions."); - await ctx.RespondEmbed($"Failed to add feed role, make sure bot has correct permissions."); - return; + await ctx.RespondEmbedAsync($"Failed to add feed role, make sure bot has correct permissions."); } - - await ctx.RespondEmbed(Translator.Instance.Translate("FEEDS_ASSIGNED_ALL_ROLES").FormatText(ctx.User.Username)); } private async Task RemoveAllDefaultFeedRoles(CommandContext ctx) { - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(guildId => _config.Instance.Servers.ContainsKey(guildId)); - if (_dep.WhConfig.Servers[guildId].Geofences == null) + if (_config.Instance.Servers[guildId].Geofences == null) { - _logger.Warn($"City roles empty."); + _logger.Warning($"City roles empty."); return; } try { - var server = _dep.WhConfig.Servers[guildId]; - var areas = server.Geofences.Select(x => x.Name).ToList(); + var server = _config.Instance.Servers[guildId]; + var areas = server.Geofences.Select(geofence => geofence.Name).Distinct().ToList(); for (var i = 0; i < areas.Count; i++) { var city = areas[i]; @@ -308,15 +352,19 @@ private async Task RemoveAllDefaultFeedRoles(CommandContext ctx) Thread.Sleep(200); } + + await ctx.RespondEmbedAsync(Translator.Instance.Translate("FEEDS_UNASSIGNED_ALL_ROLES").FormatText(new + { + author = ctx.User.Username, + roles = "\n- " + string.Join("\n- ", areas), + })); } catch (Exception) { _logger.Error($"Failed to remove feed role, make sure bot has correct permissions."); - await ctx.RespondEmbed($"Failed to remove feed role, make sure bot has correct permissions."); + await ctx.RespondEmbedAsync($"Failed to remove feed role, make sure bot has correct permissions."); return; } - - await ctx.RespondEmbed(Translator.Instance.Translate("FEEDS_UNASSIGNED_ALL_ROLES").FormatText(ctx.User.Username)); } private async Task AddFeedRole(DiscordMember member, DiscordRole city) diff --git a/src/Commands/Discord/Nests.cs b/src/Commands/Discord/Nests.cs new file mode 100644 index 00000000..1b6da372 --- /dev/null +++ b/src/Commands/Discord/Nests.cs @@ -0,0 +1,314 @@ +namespace WhMgr.Commands.Discord +{ + using System; + using System.Collections.Generic; + using System.Collections.Immutable; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + + using DSharpPlus; + using DSharpPlus.CommandsNext; + using DSharpPlus.CommandsNext.Attributes; + using DSharpPlus.Entities; + using Microsoft.EntityFrameworkCore; + + using WhMgr.Common; + using WhMgr.Configuration; + using WhMgr.Data; + using WhMgr.Data.Factories; + using WhMgr.Data.Models; + using WhMgr.Extensions; + using WhMgr.Localization; + using WhMgr.Osm; + using WhMgr.Services; + using WhMgr.Services.Alarms.Embeds; + using WhMgr.Services.Geofence; + using WhMgr.Services.Geofence.Geocoding; + using WhMgr.Services.Icons; + using WhMgr.Services.StaticMap; + + public class Nests : BaseCommandModule + { + private readonly ConfigHolder _config; + private readonly OsmManager _osmManager; + + public Nests( + ConfigHolder config, + OsmManager osmManager) + { + _config = config; + _osmManager = osmManager; + } + + [ + Command("nests"), + Description(""), + RequirePermissions(Permissions.KickMembers) + ] + public async Task PostNestsAsync(CommandContext ctx, + [Description("")] string args = null) + { + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(guildId => _config.Instance.Servers.ContainsKey(guildId)); + if (!_config.Instance.Servers.ContainsKey(guildId)) + { + await ctx.RespondEmbedAsync(Translator.Instance.Translate("ERROR_NOT_IN_DISCORD_SERVER"), DiscordColor.Red); + return; + } + + var server = _config.Instance.Servers[guildId]; + // Check if nest posting is enabled + if (!server.Nests.Enabled) + { + Console.WriteLine($"Nest reporting disabled..."); + return; + } + + var channelId = server.Nests.ChannelId; + var channel = await ctx.Client.GetChannelAsync(channelId); + if (channel == null) + { + await ctx.RespondEmbedAsync(Translator.Instance.Translate("ERROR_NESTS_DISABLED").FormatText(ctx.User.Username), DiscordColor.Red); + return; + } + + var deleted = await ctx.Client.DeleteMessagesAsync(channelId); + if (deleted.Item2 == 0) + { + Console.WriteLine($"Failed to delete messages in channel: {channelId}"); + } + + var nests = await GetNests(); + if (nests == null) + { + await ctx.RespondEmbedAsync(Translator.Instance.Translate("ERROR_NESTS_LIST").FormatText(ctx.User.Username)); + return; + } + + var postNestAsList = string.Compare(args, "list", true) == 0; + if (postNestAsList) + { + var groupedNests = GroupNests(guildId, nests); + groupedNests.ToImmutableSortedDictionary(); + var sortedKeys = groupedNests.Keys.ToList(); + sortedKeys.Sort(); + foreach (var key in sortedKeys) + { + var eb = new DiscordEmbedBuilder + { + Title = key, + Description = string.Empty, + Color = DiscordColor.Green + }; + var message = string.Empty; + foreach (var nest in groupedNests[key]) + { + if (nest.Average < server.Nests.MinimumPerHour) + continue; + + var pkmn = GameMaster.GetPokemon(nest.PokemonId); + var pkmnName = Translator.Instance.GetPokemonName(pkmn.PokedexId); + var gmapsLink = string.Format(Strings.Defaults.GoogleMaps, nest.Latitude, nest.Longitude); + // TODO: Check if possible shiny (emoji) + message += $"[**{nest.Name}**]({gmapsLink}): {pkmnName} (#{nest.PokemonId}) {nest.Average:N0} per hour\n"; + if (message.Length >= Strings.DiscordMaximumMessageLength) + { + eb.Description = message[..Math.Min(message.Length, Strings.DiscordMaximumMessageLength)]; + message = string.Empty; + await channel.SendMessageAsync(embed: eb); + eb = new DiscordEmbedBuilder + { + Title = key, + Description = string.Empty, + Color = DiscordColor.Green + }; + } + } + if (message.Length > 0) + { + eb.Description = message; + message = string.Empty; + await channel.SendMessageAsync(embed: eb); + } + Thread.Sleep(1000); + } + } + else + { + var cities = server.Geofences.Select(geofence => geofence.Name.ToLower()).ToList(); + for (var i = 0; i < nests.Count; i++) + { + var nest = nests[i]; + if (nest.Average == 0) + continue; + + try + { + var eb = GenerateEmbedMessage(guildId, ctx.Client, nest); + var geofence = GeofenceService.GetGeofence(server.Geofences, new Coordinate(nest)); + if (geofence == null) + { + //_logger.Warn($"Failed to find geofence for nest {nest.Key}."); + continue; + } + + if (!cities.Contains(geofence.Name.ToLower())) + continue; + + if (nest.Average < server.Nests.MinimumPerHour) + continue; + + await channel.SendMessageAsync(embed: eb); + Thread.Sleep(200); + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex}"); + } + } + } + } + + public DiscordEmbed GenerateEmbedMessage(ulong guildId, DiscordClient client, Nest nest) + { + var alertMessageType = EmbedMessageType.Nests; + var alertMessage = /*alarm?.Embeds[alertMessageType] ??*/ EmbedMessage.Defaults[alertMessageType]; // TODO: Add nestEmbed config option + var server = _config.Instance.Servers[guildId]; + var pokemonImageUrl = UIconService.Instance.GetPokemonIcon(server.IconStyle, nest.PokemonId); + var properties = GetProperties(client.Guilds[guildId], nest, pokemonImageUrl); + var eb = new DiscordEmbedBuilder + { + Title = TemplateRenderer.Parse(alertMessage.Title, properties), + Url = TemplateRenderer.Parse(alertMessage.Url, properties), + ImageUrl = TemplateRenderer.Parse(alertMessage.ImageUrl, properties), + Thumbnail = new DiscordEmbedBuilder.EmbedThumbnail + { + Url = TemplateRenderer.Parse(alertMessage.IconUrl, properties), + }, + Description = TemplateRenderer.Parse(alertMessage.Content, properties), + Color = DiscordColor.Green, + Footer = new DiscordEmbedBuilder.EmbedFooter + { + Text = TemplateRenderer.Parse(alertMessage.Footer?.Text, properties), + IconUrl = TemplateRenderer.Parse(alertMessage.Footer?.IconUrl, properties), + }, + }; + return eb.Build(); + } + + public dynamic GetProperties(DiscordGuild guild, Nest nest, string pokemonImageUrl) + { + var config = _config.Instance; + var pkmnInfo = GameMaster.GetPokemon(nest.PokemonId); + var pkmnImage = pokemonImageUrl; + var nestName = nest.Name ?? "Unknown"; + var types = pkmnInfo?.Types; + var type1 = types?.Count >= 1 + ? types[0] + : PokemonType.None; + var type2 = types?.Count > 1 + ? types[1] + : PokemonType.None; + var typeEmojis = types?.GetTypeEmojiIcons() ?? string.Empty; + var gmapsLink = string.Format(Strings.Defaults.GoogleMaps, nest.Latitude, nest.Longitude); + var appleMapsLink = string.Format(Strings.Defaults.AppleMaps, nest.Latitude, nest.Longitude); + var wazeMapsLink = string.Format(Strings.Defaults.WazeMaps, nest.Latitude, nest.Longitude); + var scannerMapsLink = string.Format(config.Urls.ScannerMap, nest.Latitude, nest.Longitude); + var address = ReverseGeocodingLookup.Instance.GetAddressAsync(new Coordinate(nest)).Result; + + var osmNest = _osmManager.GetNest(nest.Name)?.FirstOrDefault(); + var polygonPath = OsmManager.MultiPolygonToLatLng(osmNest?.Geometry?.Coordinates, true); + var staticMapLink = config.StaticMaps?.GenerateStaticMap( + StaticMapType.Nests, + nest, + pokemonImageUrl, + null, + null, + polygonPath + ); + var geofence = GeofenceService.GetGeofence(config.Servers[guild.Id].Geofences, new Coordinate(nest)); + var city = geofence?.Name ?? "Unknown"; + + var dict = new + { + // Main properties + pkmn_id = nest.PokemonId, + pkmn_id_3 = nest.PokemonId.ToString("D3"), + pkmn_name = pkmnInfo?.Name, + pkmn_img_url = pkmnImage, + avg_spawns = nest.Average, + nest_name = nestName, + type_1 = Convert.ToString(type1), + type_2 = Convert.ToString(type2), + types = $"{type1} | {type2}", + types_emojis = typeEmojis, + + // Location properties + geofence = city, + lat = nest.Latitude, + lng = nest.Longitude, + lon = nest.Longitude, + lat_5 = Math.Round(nest.Latitude, 5), + lng_5 = Math.Round(nest.Longitude, 5), + lon_5 = Math.Round(nest.Longitude, 5), + + // Location links + tilemaps_url = staticMapLink, + gmaps_url = gmapsLink, + applemaps_url = appleMapsLink, + wazemaps_url = wazeMapsLink, + scanmaps_url = scannerMapsLink, + + address = address ?? string.Empty, + + // Discord Guild properties + guild_name = guild?.Name, + guild_img_url = guild?.IconUrl, + + // Misc properties + date_time = DateTime.Now.ToString(), + br = "\n", + }; + return dict; + } + + private Dictionary> GroupNests(ulong guildId, IEnumerable nests) + { + var dict = new Dictionary>(); + foreach (var nest in nests) + { + var geofence = GeofenceService.GetGeofence( + _config.Instance.Servers[guildId].Geofences, + new Coordinate(nest) + ); + if (geofence == null) + { + // _logger.LogWarn($"Failed to find geofence for nest {nest.Name}."); + continue; + } + var geofenceName = geofence.Name; + var server = _config.Instance.Servers[guildId]; + var cities = server.Geofences.Select(geofence => geofence.Name.ToLower()).ToList(); + if (!cities.Contains(geofenceName.ToLower())) + continue; + + if (dict.ContainsKey(geofenceName)) + { + dict[geofenceName].Add(nest); + } + else + { + dict.Add(geofenceName, new List { nest }); + } + dict[geofenceName].Sort((x, y) => x.Name.CompareTo(y.Name)); + } + return dict; + } + + private async Task> GetNests() + { + using var ctx = DbContextFactory.CreateManualContext(_config.Instance.Database.Nests.ToString()); + return await ctx.Nests.ToListAsync(); + } + } +} \ No newline at end of file diff --git a/src/Commands/Discord/Notifications.cs b/src/Commands/Discord/Notifications.cs new file mode 100644 index 00000000..c73bfd18 --- /dev/null +++ b/src/Commands/Discord/Notifications.cs @@ -0,0 +1,86 @@ +namespace WhMgr.Commands.Discord +{ + using System; + using System.Threading.Tasks; + + using DSharpPlus.CommandsNext; + using DSharpPlus.CommandsNext.Attributes; + using DSharpPlus.Entities; + + using WhMgr.Configuration; + + public class Notifications : BaseCommandModule + { + private readonly ConfigHolder _config; + + public Notifications(ConfigHolder config) + { + _config = config; + } + + // TODO: Add support for info and enable/disable commands + [Command("info")] + public async Task InfoAsync(CommandContext ctx) => await RespondUserInterface(ctx); + + [Command("enable")] + public async Task EnableAsync(CommandContext ctx) => await RespondUserInterface(ctx); + [Command("disable")] + public async Task DisableAsync(CommandContext ctx) => await RespondUserInterface(ctx); + + + [Command("pokeme")] + public async Task PokeMeAsync(CommandContext ctx) => await RespondUserInterface(ctx); + [Command("pokemenot")] + public async Task PokeMeNotAsync(CommandContext ctx) => await RespondUserInterface(ctx); + + [Command("pvpme")] + public async Task PvpMeAsync(CommandContext ctx) => await RespondUserInterface(ctx); + [Command("pvpmenot")] + public async Task PvpMeNotAsync(CommandContext ctx) => await RespondUserInterface(ctx); + + [Command("raidme")] + public async Task RaidMeAsync(CommandContext ctx) => await RespondUserInterface(ctx); + [Command("raidmenot")] + public async Task RaidMeNotAsync(CommandContext ctx) => await RespondUserInterface(ctx); + + [Command("questme")] + public async Task QuestMeAsync(CommandContext ctx) => await RespondUserInterface(ctx); + [Command("questmenot")] + public async Task QuestMeNotAsync(CommandContext ctx) => await RespondUserInterface(ctx); + + [Command("invme")] + public async Task InvasionMeAsync(CommandContext ctx) => await RespondUserInterface(ctx); + [Command("invmenot")] + public async Task InvasionMeNotAsync(CommandContext ctx) => await RespondUserInterface(ctx); + + [Command("lureme")] + public async Task LureMeAsync(CommandContext ctx) => await RespondUserInterface(ctx); + [Command("luremenot")] + public async Task LureMeNotAsync(CommandContext ctx) => await RespondUserInterface(ctx); + + [Command("gymme")] + public async Task GymMeAsync(CommandContext ctx) => await RespondUserInterface(ctx); + [Command("gymmenot")] + public async Task GymMeNotAsync(CommandContext ctx) => await RespondUserInterface(ctx); + + private async Task RespondUserInterface(CommandContext ctx) + { + // Make sure guild executing command is configured + if (!_config.Instance.Servers.ContainsKey(ctx.Guild?.Id ?? 0)) + return; + + // Make sure subscriptions are enabled for guild + var guildConfig = _config.Instance.Servers[ctx.Guild.Id]; + if (!guildConfig.Subscriptions.Enabled) + return; + + var eb = new DiscordEmbedBuilder + { + // TODO: Localize + Description = $"Please visit {guildConfig.Subscriptions.Url} to configure your subscriptions.", + Color = DiscordColor.Blurple, + }; + await ctx.RespondAsync(eb); + } + } +} \ No newline at end of file diff --git a/src/Commands/Discord/Quests.cs b/src/Commands/Discord/Quests.cs new file mode 100644 index 00000000..36e8da3f --- /dev/null +++ b/src/Commands/Discord/Quests.cs @@ -0,0 +1,97 @@ +namespace WhMgr.Commands.Discord +{ + using System; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + + using DSharpPlus; + using DSharpPlus.CommandsNext; + using DSharpPlus.CommandsNext.Attributes; + using DSharpPlus.Entities; + //using Microsoft.Extensions.Logging; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Localization; + + public class Quests : BaseCommandModule + { + private readonly ConfigHolder _config; + private readonly Microsoft.Extensions.Logging.ILogger _logger; + + public Quests( + ConfigHolder config, + Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) + { + _config = config; + _logger = loggerFactory.CreateLogger(typeof(Quests).FullName); + } + + [ + Command("reset-quests"), + Hidden, + RequirePermissions(Permissions.KickMembers) + ] + public async Task ResetChannelAsync(CommandContext ctx, + [Description("Discord channel to reset.")] DiscordChannel channel = null) + { + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(guildId => _config.Instance.Servers.ContainsKey(guildId)); + if (guildId == 0) + { + _logger.Warning($"Failed to find any configured guild {guildId} for Discord bot."); + return; + } + + var server = _config.Instance.Servers[guildId]; + // If channel specified, delete all messages in channel + if (channel != null) + { + await DeleteChannelMessages(ctx, channel); + return; + } + + // Otherwise loop channels and delete all messages in all channels + var questChannels = server.QuestsPurge.ChannelIds; + foreach (var (timezone, channelIds) in questChannels) + { + foreach (var channelId in channelIds) + { + var questChannel = await ctx.Client.GetChannelAsync(channelId); + if (questChannel == null) + { + _logger.Warning($"Unable to get quest channel with id '{channelId}'."); + continue; + } + + // Delete all channel messages + await DeleteChannelMessages(ctx, questChannel); + } + } + } + + private static async Task DeleteChannelMessages(CommandContext ctx, DiscordChannel channel) + { + var messages = await channel.GetMessagesAsync(); + while (messages.Count > 0) + { + for (var i = 0; i < messages.Count; i++) + { + var message = messages[i]; + if (message == null) + continue; + + await message.DeleteAsync("Channel reset."); + Thread.Sleep(100); + } + + messages = await channel.GetMessagesAsync(); + } + await ctx.RespondEmbedAsync(Translator.Instance.Translate("CHANNEL_MESSAGES_DELETED").FormatText(new + { + author = ctx.User.Username, + channel = channel.Mention, + })); + } + } +} \ No newline at end of file diff --git a/src/Commands/Discord/UserMaintenance.cs b/src/Commands/Discord/UserMaintenance.cs new file mode 100644 index 00000000..9002d4ce --- /dev/null +++ b/src/Commands/Discord/UserMaintenance.cs @@ -0,0 +1,143 @@ +namespace WhMgr.Commands.Discord +{ + using System.Linq; + using System.Threading.Tasks; + + using DSharpPlus; + using DSharpPlus.CommandsNext; + using DSharpPlus.CommandsNext.Attributes; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Localization; + using WhMgr.Services.Subscriptions; + using WhMgr.Services.Subscriptions.Models; + + public class UserMaintenance : BaseCommandModule + { + private readonly ConfigHolder _config; + private readonly Microsoft.Extensions.Logging.ILogger _logger; + private readonly ISubscriptionManagerService _subManager; + + public UserMaintenance( + ConfigHolder config, + Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, + ISubscriptionManagerService subManager) + { + _config = config; + _logger = loggerFactory.CreateLogger(typeof(UserMaintenance).FullName); + _subManager = subManager; + } + + [ + Command("clean-departed"), + Description("Remove user subscriptions that are no longer donors from the database. Specify whether it's a dry run and if non-donor subscriptions should be set to disabled rather than deleted completely."), + Hidden, + RequireUserPermissions(Permissions.KickMembers, false), + ] + public async Task CleanDepartedAsync(CommandContext ctx, + [Description("Only Disable: Use `true` to only disable non-donor subscriptions, otherwise they will be deleted.")] + bool onlyDisable = true) + { + _logger.Debug($"Checking if there are any subscriptions for members that are no longer apart of the server..."); + + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _config.Instance.Servers.ContainsKey(x)); + var removed = 0; + var users = _subManager?.Subscriptions; + + if (users.Count == 0) + { + await ctx.RespondEmbedAsync($"No user subscriptions for '{guildId}', unable to clean subscriptions for users."); + return; + } + + if (!_config.Instance.Servers.ContainsKey(guildId)) + { + await ctx.RespondEmbedAsync($"Guild '{guildId}' not configured, unable to remove user area roles."); + return; + } + + var guildConfig = _config.Instance.Servers[guildId]; + var revokeReason = "No longer server donor"; + _logger.Information($"Starting expired donor subscriptions cleanup."); + + for (var i = 0; i < users.Count; i++) + { + var user = users[i]; + var discordMember = await ctx.Client.GetMemberByIdAsync(guildId, user.UserId); + var donorRoleIds = guildConfig.DonorRoleIds.Keys.ToList(); + var isDonor = ctx.Client.HasSupporterRole(guildId, user.UserId, donorRoleIds); + if (discordMember == null) + { + // No longer in the guild, completely remove subscriptions + //_logger.Debug($"User is no longer in guild '{guildId}', removing all user subscriptions..."); + await _subManager.RemoveAllUserSubscriptionsAsync(user.Id); + _logger.Information($"Removed all {user.UserId} subscriptions for guild '{guildId}'."); + + removed++; + } + + if (discordMember != null && !isDonor) + { + // No longer a donor/supporter, remove/disable subscriptions and geofence/area roles assigned + if (onlyDisable) + { + await _subManager.SetSubscriptionStatusAsync(user.Id, NotificationStatusType.None); + } + else + { + await _subManager.RemoveAllUserSubscriptionsAsync(user.Id); + } + _logger.Information($"{(onlyDisable ? "Disabled" : "Removed")} all {user.UserId} subscriptions for guild '{guildId}'."); + + removed++; + + // Remove any assigned area/geofence roles from the Discord member if + // the geofence roles config option is enabled as well as the auto remove + // and requires donor role options. + if ((guildConfig.GeofenceRoles?.Enabled ?? false) && + (guildConfig.GeofenceRoles?.AutoRemove ?? false) && + (guildConfig.GeofenceRoles?.RequiresDonorRole ?? false)) + { + // Skip users without any roles assigned + if (!discordMember.Roles.Any()) + continue; + + // Compose list of user's role names and guild's area/geofence role names to compare + var userRoleNames = discordMember.Roles.Select(role => role.Name.ToLower()) + .ToList(); + var areaRoleNames = guildConfig.Geofences.Select(geofence => geofence.Name.ToLower()) + .ToList(); + // Check if user has any area roles assigned to remove + if (!userRoleNames.Exists(userRoleName => areaRoleNames.Contains(userRoleName))) + continue; + + // Remove any assigned area roles from user + foreach (var areaRoleName in areaRoleNames) + { + var memberRole = discordMember.Roles.FirstOrDefault(role => string.Compare(role.Name, areaRoleName, true) == 0); + var memberTag = $"{discordMember.Username}#{discordMember.Discriminator} ({discordMember.Id})"; + if (memberRole == null) + { + _logger.Warning($"Failed to get discord member '{memberTag}' role by name '{areaRoleName}', skipping area role."); + continue; + } + + // Removing role from user + await discordMember.RevokeRoleAsync(memberRole, revokeReason); + _logger.Debug($"Removed role '{memberRole.Name} ({memberRole.Id})' from user '{memberTag}' in guild '{ctx.Guild?.Name} ({guildId})'"); + } + } + } + } + + _logger.Information($"Finished cleaning expired donor subscriptions. Removed donor access from {removed:N0} of {users:N0} total members in guild '{ctx.Guild?.Name}' ({guildId})"); + + await ctx.RespondEmbedAsync(Translator.Instance.Translate("REMOVED_TOTAL_DEPARTED_MEMBERS").FormatText(new + { + removed = removed.ToString("N0"), + users = users.Count.ToString("N0"), + })); + } + } +} \ No newline at end of file diff --git a/src/Commands/Event.cs b/src/Commands/Event.cs deleted file mode 100644 index d8ebfe66..00000000 --- a/src/Commands/Event.cs +++ /dev/null @@ -1,347 +0,0 @@ -namespace WhMgr.Commands -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Threading.Tasks; - - using DSharpPlus; - using DSharpPlus.CommandsNext; - using DSharpPlus.CommandsNext.Attributes; - using DSharpPlus.Entities; - using ServiceStack.OrmLite; - - using WhMgr.Data; - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Localization; - - [ - Group("event"), - Aliases("ev"), - Description("Event Pokemon management commands."), - Hidden, - RequirePermissions(Permissions.KickMembers) - ] - public class Event - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("COMMUNITYDAY", Program.LogLevel); - - private readonly Dependencies _dep; - - public Event(Dependencies dep) - { - _dep = dep; - } - - [ - Command("list"), - Aliases("l"), - Description("List all Pokemon considered as `event`.") - ] - public async Task ListAsync(CommandContext ctx) - { - var eb = new DiscordEmbedBuilder - { - Color = DiscordColor.Blurple, - Description = "List of Pokemon set as event Pokemon which will only show in channels that are 90% or higher.", - Title = "Event Pokemon List", - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = $"{ctx.Guild?.Name} | {DateTime.Now}", - IconUrl = ctx.Guild?.IconUrl - } - }; - var pkmnNames = new List(); - for (var i = 0; i < _dep.WhConfig.EventPokemonIds.Count; i++) - { - var pkmnId = _dep.WhConfig.EventPokemonIds[i]; - if (MasterFile.Instance.Pokedex.ContainsKey(pkmnId)) - { - pkmnNames.Add(pkmnId + ":" + MasterFile.Instance.Pokedex[pkmnId].Name); - } - } - - eb.AddField("Event Pokemon", string.Join("\r\n", pkmnNames)); - await ctx.RespondAsync(embed: eb); - } - - [ - Command("set"), - Aliases("s"), - Description("Sets a list of Pokemon as `event`.") - ] - public async Task SetAsync(CommandContext ctx, - [Description("Comma separated list of event Pokemon")] string eventPokemonIds = "0") - { - var eventPokemonSplit = eventPokemonIds.Split(','); - var pkmnToAdd = new List(); - var pkmnFailed = new List(); - for (var i = 0; i < eventPokemonSplit.Length; i++) - { - var eventPokemonId = eventPokemonSplit[i]; - if (uint.TryParse(eventPokemonId, out var pokemonId) && (pokemonId == 0 || MasterFile.Instance.Pokedex.ContainsKey(pokemonId))) - { - pkmnToAdd.Add(pokemonId); - continue; - } - - pkmnFailed.Add(eventPokemonId); - } - - _dep.WhConfig.EventPokemonIds = pkmnToAdd; - _dep.WhConfig.Save(_dep.WhConfig.FileName); - - var pkmnNames = new List(); - for (var i = 0; i < pkmnToAdd.Count; i++) - { - var pkmnId = pkmnToAdd[i]; - if (MasterFile.Instance.Pokedex.ContainsKey(pkmnId)) - { - pkmnNames.Add(pkmnId + ":" + MasterFile.Instance.Pokedex[pkmnId].Name); - } - } - - var message = Translator.Instance.Translate("EVENT_POKEMON_SET").FormatText(ctx.User.Username, string.Join(", ", pkmnNames)); - if (pkmnFailed.Count > 0) - { - message += "\r\n" + Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(ctx.User.Username, string.Join(", ", pkmnFailed)); - } - await ctx.RespondEmbed(message); - } - - [ - Command("add"), - Aliases("a"), - Description("Adds one or more Pokemon to current `event` list.") - ] - public async Task AddAsync(CommandContext ctx, - [Description("Comma separated list of event Pokemon")] string eventPokemonIds) - { - var eventPokemonSplit = eventPokemonIds.Split(','); - var pkmnToAdd = new List(); - var pkmnFailed = new List(); - for (var i = 0; i < eventPokemonSplit.Length; i++) - { - var eventPokemonId = eventPokemonSplit[i]; - if (uint.TryParse(eventPokemonId, out var pokemonId) && (pokemonId == 0 || MasterFile.Instance.Pokedex.ContainsKey(pokemonId))) - { - pkmnToAdd.Add(pokemonId); - continue; - } - - pkmnFailed.Add(eventPokemonId); - } - - _dep.WhConfig.EventPokemonIds.AddRange(pkmnToAdd); - _dep.WhConfig.Save(_dep.WhConfig.FileName); - - var pkmnNames = new List(); - for (var i = 0; i < pkmnToAdd.Count; i++) - { - var pkmnId = pkmnToAdd[i]; - if (MasterFile.Instance.Pokedex.ContainsKey(pkmnId)) - { - pkmnNames.Add(pkmnId + ":" + MasterFile.Instance.Pokedex[pkmnId].Name); - } - } - - var message = Translator.Instance.Translate("EVENT_POKEMON_SET").FormatText(ctx.User.Username, string.Join(", ", pkmnNames)); - if (pkmnFailed.Count > 0) - { - message += "\r\n" + Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(ctx.User.Username, string.Join(", ", pkmnFailed)); - } - await ctx.RespondEmbed(message); - } - - [ - Command("remove"), - Aliases("r", "rm"), - Description("Removes one or more Pokemon from `event` list.") - ] - public async Task RemoveAsync(CommandContext ctx, - [Description("Command separated list of event Pokemon")] string eventPokemonIds) - { - var eventPokemonSplit = eventPokemonIds.Split(','); - var pkmnToRemove = new List(); - var pkmnFailed = new List(); - for (var i = 0; i < eventPokemonSplit.Length; i++) - { - var eventPokemonId = eventPokemonSplit[i]; - if (uint.TryParse(eventPokemonId, out var pokemonId) && (pokemonId == 0 || MasterFile.Instance.Pokedex.ContainsKey(pokemonId))) - { - pkmnToRemove.Add(pokemonId); - continue; - } - - pkmnFailed.Add(eventPokemonId); - } - - pkmnToRemove.ForEach(x => _dep.WhConfig.EventPokemonIds.Remove(x)); - _dep.WhConfig.Save(_dep.WhConfig.FileName); - - var pkmnNames = new List(); - for (var i = 0; i < pkmnToRemove.Count; i++) - { - var pkmnId = pkmnToRemove[i]; - if (MasterFile.Instance.Pokedex.ContainsKey(pkmnId)) - { - pkmnNames.Add(pkmnId + ":" + MasterFile.Instance.Pokedex[pkmnId].Name); - } - } - - var message = Translator.Instance.Translate("EVENT_POKEMON_REMOVE").FormatText(ctx.User.Username, string.Join(", ", pkmnNames)); - if (pkmnFailed.Count > 0) - { - message += "\r\n" + Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(ctx.User.Username, string.Join(", ", pkmnFailed)); - } - await ctx.RespondEmbed(message); - } - - [ - Command("stats"), - Description("") - ] - public async Task StatsAsync(CommandContext ctx, - [Description("")] string pokemon, - [Description("")] string start, - [Description("")] string end) - { - var pokeId = pokemon.PokemonIdFromName(); - if (pokeId == 0) - { - // TODO: Localize - await ctx.RespondEmbed($"{ctx.User.Username} Unable to find Pokemon by name or id {pokemon}"); - return; - } - - // TODO: Parse and validate start/end - - var sql = @" - SELECT - COUNT(id) AS total, - SUM(iv > 0) AS with_iv, - SUM(iv IS NULL) AS without_iv, - SUM(iv = 0) AS iv_0, - SUM(iv >= 1 AND iv < 10) AS iv_1_9, - SUM(iv >= 10 AND iv < 20) AS iv_10_19, - SUM(iv >= 20 AND iv < 30) AS iv_20_29, - SUM(iv >= 30 AND iv < 40) AS iv_30_39, - SUM(iv >= 40 AND iv < 50) AS iv_40_49, - SUM(iv >= 50 AND iv < 60) AS iv_50_59, - SUM(iv >= 60 AND iv < 70) AS iv_60_69, - SUM(iv >= 70 AND iv < 80) AS iv_70_79, - SUM(iv >= 80 AND iv < 90) AS iv_80_89, - SUM(iv >= 90 AND iv < 100) AS iv_90_99, - SUM(iv = 100) AS iv_100, - SUM(gender = 1) AS male, - SUM(gender = 2) AS female, - SUM(gender = 3) AS genderless, - SUM(level >= 1 AND level <= 9) AS level_1_9, - SUM(level >= 10 AND level <= 19) AS level_10_19, - SUM(level >= 20 AND level <= 29) AS level_20_29, - SUM(level >= 30 AND level <= 35) AS level_30_35 - FROM - pokemon - WHERE - pokemon_id = @pokemonId - AND first_seen_timestamp >= @start - AND first_seen_timestamp <= @end - "; - var dict = new Dictionary - { - { "pokemonId", pokemon }, - { "start", start }, - { "end", end } - }; - var results = ExecuteQuery(sql, dict); - if (results.Count > 0) - { - var result = (dynamic)results.FirstOrDefault(); - Console.WriteLine(result); - int total = Convert.ToInt32(result.total ?? 0); - int withIV = Convert.ToInt32(result.with_iv ?? 0); - int withoutIV = Convert.ToInt32(result.without_iv ?? 0); - int iv0 = Convert.ToInt32(result.iv_0 ?? 0); - int iv1_9 = Convert.ToInt32(result.iv_1_9 ?? 0); - int iv10_19 = Convert.ToInt32(result.iv_10_19 ?? 0); - int iv20_29 = Convert.ToInt32(result.iv_20_29 ?? 0); - int iv30_39 = Convert.ToInt32(result.iv_30_39 ?? 0); - int iv40_49 = Convert.ToInt32(result.iv_40_49 ?? 0); - int iv50_59 = Convert.ToInt32(result.iv_50_59 ?? 0); - int iv60_69 = Convert.ToInt32(result.iv_60_69 ?? 0); - int iv70_79 = Convert.ToInt32(result.iv_70_79 ?? 0); - int iv80_89 = Convert.ToInt32(result.iv_80_89 ?? 0); - int iv90_99 = Convert.ToInt32(result.iv_90_99 ?? 0); - int iv100 = Convert.ToInt32(result.iv_100 ?? 0); - int male = Convert.ToInt32(result.male ?? 0); - int female = Convert.ToInt32(result.female ?? 0); - int genderless = Convert.ToInt32(result.genderless ?? 0); - int level1_9 = Convert.ToInt32(result.level_1_9 ?? 0); - int level10_19 = Convert.ToInt32(result.level_10_19 ?? 0); - int level20_29 = Convert.ToInt32(result.level_20_29 ?? 0); - int level30_35 = Convert.ToInt32(result.level_30_35 ?? 0); - - var pkmn = MasterFile.GetPokemon(pokeId, 0); - var eb = new DiscordEmbedBuilder - { - Color = DiscordColor.Blurple, - Title = $"{ctx.Guild.Name} Community Day Stats", - Description = $"**{pkmn.Name}** ({pokeId})\r\nBetween: {start} - {end}", - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = $"{ctx.Guild?.Name} | {DateTime.Now}", - IconUrl = ctx.Guild?.IconUrl - } - }; - // TODO: Localize - eb.AddField("Total", total.ToString("N0"), true); - eb.AddField("With IV", withIV.ToString("N0"), true); - eb.AddField("Without IV", withoutIV.ToString("N0"), true); - - eb.AddField("0% IV", iv0.ToString("N0"), true); - eb.AddField("1-9% IV", iv1_9.ToString("N0"), true); - eb.AddField("10-19% IV", iv10_19.ToString("N0"), true); - eb.AddField("20-29% IV", iv20_29.ToString("N0"), true); - eb.AddField("30-39% IV", iv30_39.ToString("N0"), true); - eb.AddField("40-49% IV", iv40_49.ToString("N0"), true); - eb.AddField("50-59% IV", iv50_59.ToString("N0"), true); - eb.AddField("60-69% IV", iv60_69.ToString("N0"), true); - eb.AddField("70-79% IV", iv70_79.ToString("N0"), true); - eb.AddField("80-89% IV", iv80_89.ToString("N0"), true); - eb.AddField("90-99% IV", iv90_99.ToString("N0"), true); - eb.AddField("100 % IV", iv100.ToString("N0"), true); - - eb.AddField("Male", male.ToString("N0"), true); - eb.AddField("Female", female.ToString("N0"), true); - eb.AddField("Genderless", genderless.ToString("N0"), true); - - eb.AddField("Level 1-9", level1_9.ToString("N0"), true); - eb.AddField("Level 10-19", level10_19.ToString("N0"), true); - eb.AddField("Level 20-29", level20_29.ToString("N0"), true); - eb.AddField("Level 30-35", level30_35.ToString("N0"), true); - await ctx.RespondAsync(embed: eb); - } - } - - public static List ExecuteQuery(string sql, Dictionary args) - { - if (string.IsNullOrEmpty(DataAccessLayer.ScannerConnectionString)) - return default; - - try - { - using (var db = DataAccessLayer.CreateFactory(DataAccessLayer.ScannerConnectionString).Open()) - { - var query = db.Select(sql, args); - return query; - } - } - catch (MySql.Data.MySqlClient.MySqlException ex) - { - _logger.Error(ex); - } - return default; - } - } -} \ No newline at end of file diff --git a/src/Commands/Gyms.cs b/src/Commands/Gyms.cs deleted file mode 100644 index 5acdc7fd..00000000 --- a/src/Commands/Gyms.cs +++ /dev/null @@ -1,97 +0,0 @@ -namespace WhMgr.Commands -{ - using System; - using System.Text; - using System.Text.RegularExpressions; - using System.Threading.Tasks; - - using DSharpPlus; - using DSharpPlus.CommandsNext; - using DSharpPlus.CommandsNext.Attributes; - using DSharpPlus.Entities; - - using ServiceStack.OrmLite; - - using WhMgr.Extensions; - using WhMgr.Localization; - - [ - Group("gyms"), - Aliases("g"), - Description("Gym management commands."), - Hidden, - RequirePermissions(Permissions.KickMembers) - ] - public class Gyms - { - //private static readonly IEventLogger _logger = EventLogger.GetLogger("GYMS", Program.LogLevel); - private readonly Dependencies _dep; - - public Gyms(Dependencies dep) - { - _dep = dep; - } - - [ - Command("convert"), - Description("Deletes Pokestops that have converted to Gyms from the database.") - ] - public async Task ConvertedPokestopsToGymsAsync(CommandContext ctx, - [Description("Real or dry run check (y/n)")] string yesNo = "y") - { - using (var db = Data.DataAccessLayer.CreateFactory(_dep.WhConfig.Database.Scanner.ToString()).Open()) - { - //Select query where ids match for pokestops and gyms - var convertedGyms = db.Select(Strings.SQL_SELECT_CONVERTED_POKESTOPS); - if (convertedGyms?.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("GYM_NO_POKESTOPS_CONVERTED").FormatText(ctx.User.Username), DiscordColor.Yellow); - return; - } - - var sb = new StringBuilder(); - sb.AppendLine(Translator.Instance.Translate("GYM_POKESTOPS_EMBED_TITLE")); - sb.AppendLine(); - var eb = new DiscordEmbedBuilder - { - Color = DiscordColor.Blurple, - Footer = new DiscordEmbedBuilder.EmbedFooter - { - IconUrl = ctx.Guild?.IconUrl, - Text = $"{ctx.Guild?.Name ?? Strings.Creator} | {DateTime.Now}" - } - }; - for (var i = 0; i < convertedGyms.Count; i++) - { - var gym = convertedGyms[i]; - var name = string.IsNullOrEmpty(gym.Name) ? Translator.Instance.Translate("GYM_UNKNOWN_NAME") : gym.Name; - var imageUrl = string.IsNullOrEmpty(gym.Url) ? Translator.Instance.Translate("GYM_UNKNOWN_IMAGE") : gym.Url; - var locationUrl = string.Format(Strings.GoogleMaps, gym.Latitude, gym.Longitude); - //eb.AddField($"{name} ({gym.Latitude},{gym.Longitude})", url); - sb.AppendLine(Translator.Instance.Translate("GYM_NAME").FormatText(name)); - sb.AppendLine(Translator.Instance.Translate("GYM_DIRECTIONS_IMAGE_LINK").FormatText(locationUrl, imageUrl)); - } - eb.Description = sb.ToString(); - await ctx.RespondAsync(embed: eb); - - if (Regex.IsMatch(yesNo, DiscordExtensions.YesRegex)) - { - //Gyms are updated where the ids match. - var rowsAffected = db.ExecuteNonQuery(Strings.SQL_UPDATE_CONVERTED_POKESTOPS); - await ctx.RespondEmbed(Translator.Instance.Translate("GYM_POKESTOPS_CONVERTED").FormatText(ctx.User.Username, rowsAffected.ToString("N0"))); - - //If no pokestops are updated. - if (rowsAffected == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("GYM_NO_POKESTOPS_UPDATED").FormatText(ctx.User.Username), DiscordColor.Yellow); - return; - } - - //Delete gyms from database where the ids match existing Pokestops. - rowsAffected = db.ExecuteNonQuery(Strings.SQL_DELETE_CONVERTED_POKESTOPS); - await ctx.RespondEmbed(Translator.Instance.Translate("GYM_POKESTOPS_DELETED").FormatText(ctx.User.Username, rowsAffected.ToString("N0"))); - } - } - } - } -} \ No newline at end of file diff --git a/src/Commands/Input/InvasionSubscriptionInput.cs b/src/Commands/Input/InvasionSubscriptionInput.cs deleted file mode 100644 index 3f9ef859..00000000 --- a/src/Commands/Input/InvasionSubscriptionInput.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace WhMgr.Commands.Input -{ - using DSharpPlus.CommandsNext; - - internal class InvasionSubscriptionInput : SubscriptionInput - { - private readonly CommandContext _context; - - public InvasionSubscriptionInput(CommandContext ctx) : base(ctx) - { - _context = ctx; - } - } -} \ No newline at end of file diff --git a/src/Commands/Input/PokemonSubscriptionInput.cs b/src/Commands/Input/PokemonSubscriptionInput.cs deleted file mode 100644 index 2bf8201a..00000000 --- a/src/Commands/Input/PokemonSubscriptionInput.cs +++ /dev/null @@ -1,183 +0,0 @@ -namespace WhMgr.Commands.Input -{ - using System; - using System.Linq; - using System.Threading.Tasks; - - using DSharpPlus.CommandsNext; - using DSharpPlus.Entities; - - using WhMgr.Extensions; - using WhMgr.Localization; - - internal sealed class PokemonSubscriptionInput : SubscriptionInput - { - private readonly CommandContext _context; - - public PokemonSubscriptionInput(CommandContext ctx) : base(ctx) - { - _context = ctx; - } - - public async Task GetIVResult() - { - var message = (await _context.RespondEmbed("Enter the minimum IV value or specific individual values (i.e. 95 or 0-14-15):", DiscordColor.Blurple)).FirstOrDefault(); - var userValue = await _context.WaitForUserChoice(); - var attack = -1; - var defense = -1; - var stamina = -1; - var realIV = 0; - - // Check if IV value contains `-` and to expect individual values instead of whole IV value - if (userValue.Contains("-")) - { - var split = userValue.Split('-'); - if (split.Length != 3) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_IV_VALUES").FormatText(_context.User.Username, userValue), DiscordColor.Red); - return new IVResult(); - } - if (!int.TryParse(split[0], out attack)) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_ATTACK_VALUE").FormatText(_context.User.Username, split[0]), DiscordColor.Red); - return new IVResult(); - } - if (!int.TryParse(split[1], out defense)) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_DEFENSE_VALUE").FormatText(_context.User.Username, split[1]), DiscordColor.Red); - return new IVResult(); - } - if (!int.TryParse(split[2], out stamina)) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_STAMINA_VALUE").FormatText(_context.User.Username, split[2]), DiscordColor.Red); - return new IVResult(); - } - } - else - { - // User provided IV value as a whole - if (!int.TryParse(userValue, out realIV) || realIV < Strings.MinimumIV || realIV > Strings.MaximumIV) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_IV_RANGE").FormatText(_context.User.Username, userValue), DiscordColor.Red); - return new IVResult(); - } - } - await message.DeleteAsync(); - - return new IVResult - { - IV = (ushort)realIV, - Attack = (short)attack, - Defense = (short)defense, - Stamina = (short)stamina, - }; - } - - public async Task GetLevelResult() - { - var message = (await _context.RespondEmbed($"Enter the minimum level or minimum and maximum level (i.e 25 or 25-35):", DiscordColor.Blurple)).FirstOrDefault(); - var levelSub = await _context.WaitForUserChoice(); - var minLevel = Strings.MinimumLevel; - var maxLevel = Strings.MaximumLevel; - // Check if level contains `-` and to expect a minimum and maximum level provided - if (levelSub.Contains('-')) - { - var split = levelSub.Split('-'); - if (!int.TryParse(split[0], out minLevel)) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_MINIMUM_LEVEL", _context.User.Username, split[0]), DiscordColor.Red); - return new LevelResult(); - } - if (!int.TryParse(split[1], out maxLevel)) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_MAXIMUM_LEVEL", _context.User.Username, split[1]), DiscordColor.Red); - return new LevelResult(); - } - } - else - { - // Only minimum level was provided - if (!int.TryParse(levelSub, out minLevel)) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_MINIMUM_LEVEL", _context.User.Username, levelSub), DiscordColor.Red); - return new LevelResult(); - } - } - - // Validate minimum and maximum levels are within range - if (minLevel < 0 || minLevel > 35) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_LEVEL").FormatText(_context.User.Username, levelSub), DiscordColor.Red); - return new LevelResult(); - } - - await message.DeleteAsync(); - - return new LevelResult - { - MinimumLevel = (ushort)minLevel, - MaximumLevel = (ushort)maxLevel, - }; - } - - public async Task GetGenderResult() - { - var message = (await _context.RespondEmbed($"Enter the gender to receive notifications for (i.e `m`, `f`, or `*`):", DiscordColor.Blurple)).FirstOrDefault(); - var gender = await _context.WaitForUserChoice(); - - // Check if gender is a valid gender provided - if (!Strings.ValidGenders.Contains(gender.ToLower())) - { - await _context.TriggerTypingAsync(); - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_GENDER").FormatText(_context.User.Username, gender), DiscordColor.Red); - return "*"; - } - - await message.DeleteAsync(); - - return gender; - } - } - - internal sealed class IVResult - { - public ushort IV { get; set; } - - public short Attack { get; set; } - - public short Defense { get; set; } - - public short Stamina { get; set; } - - public bool IsSet => Attack == -1 || Defense == -1 || Stamina == -1; - - public IVResult() : this(0, -1, -1, -1) - { - } - - public IVResult(ushort iv, short attack, short defense, short stamina) - { - IV = iv; - Attack = attack; - Defense = defense; - Stamina = stamina; - } - } - - internal sealed class LevelResult - { - public ushort MinimumLevel { get; set; } - - public ushort MaximumLevel { get; set; } - - public LevelResult() : this(0, 35) - { - } - - public LevelResult(ushort minLevel, ushort maxLevel) - { - MinimumLevel = minLevel; - MaximumLevel = maxLevel; - } - } -} \ No newline at end of file diff --git a/src/Commands/Input/PvPSubscriptionInput.cs b/src/Commands/Input/PvPSubscriptionInput.cs deleted file mode 100644 index cbfcbc93..00000000 --- a/src/Commands/Input/PvPSubscriptionInput.cs +++ /dev/null @@ -1,82 +0,0 @@ -namespace WhMgr.Commands.Input -{ - using System; - using System.Linq; - using System.Threading.Tasks; - - using DSharpPlus.CommandsNext; - using DSharpPlus.Entities; - - using WhMgr.Data.Subscriptions.Models; - using WhMgr.Extensions; - using WhMgr.Localization; - - internal class PvPSubscriptionInput : SubscriptionInput - { - private readonly CommandContext _context; - - public PvPSubscriptionInput(CommandContext ctx) : base(ctx) - { - _context = ctx; - } - - public async Task GetLeagueResult() - { - var message = (await _context.RespondEmbed($"Enter the PvP league type to use (i.e `Great` or `Ultra`):", DiscordColor.Blurple)).FirstOrDefault(); - var league = await _context.WaitForUserChoice(); - - var pvpLeague = string.Compare(league, "great", true) == 0 ? - PvPLeague.Great : - string.Compare(league, "ultra", true) == 0 ? - PvPLeague.Ultra : - string.Compare(league, "master", true) == 0 ? - PvPLeague.Master : - PvPLeague.Other; - - if (pvpLeague == PvPLeague.Other) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_PVP_LEAGUE").FormatText(_context.User.Username, league), DiscordColor.Red); - return PvPLeague.Other; - } - - await message.DeleteAsync(); - - return pvpLeague; - } - - public async Task GetRankResult() - { - var message = (await _context.RespondEmbed($"Enter the minimum PvP rank to receive (i.e `1`, `3`, `25`):", DiscordColor.Blurple)).FirstOrDefault(); - var minRank = await _context.WaitForUserChoice(); - await message.DeleteAsync(); - - if (!int.TryParse(minRank, out var minimumRank)) - return 3; - - //You may only subscribe to the top 100 or higher rank. - if (minimumRank < Strings.MinimumRank || minimumRank > Strings.MaximumRank) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_PVP_RANK_RANGE").FormatText(_context.User.Username, minRank), DiscordColor.Red); - return 3; - } - return minimumRank; - } - - public async Task GetPercentResult() - { - var message = (await _context.RespondEmbed($"Enter the minimum PvP rank percent to receive (i.e `90`, `99`, '100'):", DiscordColor.Blurple)).FirstOrDefault(); - var minPercent = await _context.WaitForUserChoice(); - await message.DeleteAsync(); - - if (!double.TryParse(minPercent, out var minimumPercent)) - return 98; - - if (minimumPercent < Strings.MinimumPercent || minimumPercent > Strings.MaximumPercent) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_PVP_PERCENT_RANGE").FormatText(_context.User.Username, minimumPercent), DiscordColor.Red); - return 98; - } - return minimumPercent; - } - } -} \ No newline at end of file diff --git a/src/Commands/Input/QuestSubscriptionInput.cs b/src/Commands/Input/QuestSubscriptionInput.cs deleted file mode 100644 index fa50d176..00000000 --- a/src/Commands/Input/QuestSubscriptionInput.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace WhMgr.Commands.Input -{ - using System; - using System.Linq; - using System.Threading.Tasks; - - using DSharpPlus.CommandsNext; - using DSharpPlus.Entities; - - using WhMgr.Extensions; - - internal class QuestSubscriptionInput : SubscriptionInput - { - private readonly CommandContext _context; - - public QuestSubscriptionInput(CommandContext ctx) : base(ctx) - { - _context = ctx; - } - - public async Task GetRewardInput() - { - var message = (await _context.RespondEmbed($"Enter a reward keyword (i.e `larvitar`, `razz`, `1000 stardust`):", DiscordColor.Blurple)).FirstOrDefault(); - var reward = await _context.WaitForUserChoice(); - await message.DeleteAsync(); - return reward; - } - } -} \ No newline at end of file diff --git a/src/Commands/Input/RaidSubscriptionInput.cs b/src/Commands/Input/RaidSubscriptionInput.cs deleted file mode 100644 index 36c05723..00000000 --- a/src/Commands/Input/RaidSubscriptionInput.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace WhMgr.Commands.Input -{ - using DSharpPlus.CommandsNext; - - internal class RaidSubscriptionInput : SubscriptionInput - { - private readonly CommandContext _context; - - public RaidSubscriptionInput(CommandContext ctx) : base(ctx) - { - _context = ctx; - } - } -} \ No newline at end of file diff --git a/src/Commands/Input/SubscriptionInput.cs b/src/Commands/Input/SubscriptionInput.cs deleted file mode 100644 index 68a93562..00000000 --- a/src/Commands/Input/SubscriptionInput.cs +++ /dev/null @@ -1,74 +0,0 @@ -namespace WhMgr.Commands.Input -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Threading.Tasks; - - using DSharpPlus.CommandsNext; - using DSharpPlus.Entities; - - using WhMgr.Configuration; - using WhMgr.Extensions; - using WhMgr.Localization; - - /// - /// Subscription input class - /// - internal class SubscriptionInput - { - private readonly CommandContext _context; - - /// - /// Instantiate a new class - /// - /// - public SubscriptionInput(CommandContext ctx) - { - _context = ctx; - } - - /// - /// Gets the Pokemon ID/Name list from the Discord interactivity from the user - /// - /// Returns a object containing valid and invalid Pokemon specified. - public async Task GetPokemonResult(uint maxPokemonId) - { - var pokemonMessage = (await _context.RespondEmbed("Enter either the Pokemon name(s) or Pokedex ID(s) separated by a comma to subscribe to (i.e. Mewtwo,Dragonite):", DiscordColor.Blurple)).FirstOrDefault(); - var pokemonSubs = await _context.WaitForUserChoice(); - // Validate the provided pokemon list - var validation = PokemonValidation.Validate(pokemonSubs, maxPokemonId); - if (validation == null || validation.Valid.Count == 0) - { - await _context.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(_context.User.Username, string.Join(", ", validation.Invalid)), DiscordColor.Red); - return new PokemonValidation(); - } - await pokemonMessage.DeleteAsync(); - return validation; - } - - /// - /// Gets the areas list from the Discord interacitivity from the user - /// - /// Discord server guild id to lookup valid areas - /// Returns a list of valid areas specified - public async Task> GetAreasResult(ulong guildId) - { - var deps = _context.Dependencies.GetDependency(); - var server = deps.WhConfig.Servers[guildId]; - var validAreas = server.Geofences.Select(g => g.Name).ToList(); - var message = (await _context.RespondEmbed($"Enter the areas to get notifications from separated by a comma (i.e. `city1,city2`):\n**Available Areas:**\n{string.Join("\n- ", validAreas)}\n- All", DiscordColor.Blurple)).FirstOrDefault(); - var cities = await _context.WaitForUserChoice(true); - await message.DeleteAsync(); - - // Check if provided areas are valid and only return valid areas - var areas = SubscriptionAreas.GetAreas(server, cities); - if (areas.Count == 0) - { - // No valid areas provided - return new List(); - } - return areas; - } - } -} \ No newline at end of file diff --git a/src/Commands/ModifyFilters.cs b/src/Commands/ModifyFilters.cs deleted file mode 100644 index 87297b30..00000000 --- a/src/Commands/ModifyFilters.cs +++ /dev/null @@ -1,59 +0,0 @@ -namespace WhMgr.Commands -{ - using System; - using System.Linq; - using System.Threading.Tasks; - - using DSharpPlus.CommandsNext; - using DSharpPlus.CommandsNext.Attributes; - - using WhMgr.Diagnostics; - using WhMgr.Extensions; - - [Group("filters")] - public class ModifyFilters - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("FILTERS", Program.LogLevel); - - private readonly Dependencies _dep; - - public ModifyFilters(Dependencies dep) - { - _dep = dep; - } - - [ - Command("add"), - //Aliases("", ""), - Description("") - ] - public async Task AddFilters(CommandContext ctx) - { - if (!await ctx.IsDirectMessageSupported(_dep.WhConfig)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - } - - [ - Command("edit"), - //Aliases("", ""), - Description("") - ] - public async Task EditFilters(CommandContext ctx) - { - if (!await ctx.IsDirectMessageSupported(_dep.WhConfig)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - } - } -} \ No newline at end of file diff --git a/src/Commands/Nests.cs b/src/Commands/Nests.cs deleted file mode 100644 index e0209199..00000000 --- a/src/Commands/Nests.cs +++ /dev/null @@ -1,302 +0,0 @@ -namespace WhMgr.Commands -{ - using System; - using System.Collections.Generic; - using System.Collections.Immutable; - using System.Linq; - using System.Threading; - using System.Threading.Tasks; - - using DSharpPlus; - using DSharpPlus.CommandsNext; - using DSharpPlus.CommandsNext.Attributes; - using DSharpPlus.Entities; - using ServiceStack; - using ServiceStack.OrmLite; - - using WhMgr.Alarms.Alerts; - using WhMgr.Data; - using WhMgr.Data.Models; - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Localization; - using WhMgr.Geofence; - using WhMgr.Services; - using WhMgr.Utilities; - - public class Nests - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("NESTS", Program.LogLevel); - - private readonly Dependencies _dep; - - public Nests(Dependencies dep) - { - _dep = dep; - } - - [ - Command("nests"), - Description(""), - RequirePermissions(Permissions.KickMembers) - ] - public async Task PostNestsAsync(CommandContext ctx, - [Description("")] string args = null) - { - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_NOT_IN_DISCORD_SERVER"), DiscordColor.Red); - return; - } - - var server = _dep.WhConfig.Servers[guildId]; - var channelId = server.NestsChannelId; - var channel = await ctx.Client.GetChannelAsync(channelId); - if (channel == null) - { - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_NESTS_DISABLED").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var deleted = await ctx.Client.DeleteMessages(channelId); - if (deleted.Item2 == 0) - { - _logger.Warn($"Failed to delete messages in channel: {channelId}"); - } - - var nests = GetNests(_dep.WhConfig.Database.Nests.ToString()); - if (nests == null) - { - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_NESTS_LIST").FormatText(ctx.User.Username)); - return; - } - - var postNestAsList = string.Compare(args, "list", true) == 0; - if (postNestAsList) - { - var groupedNests = GroupNests(guildId, nests); - groupedNests.ToImmutableSortedDictionary(); - var sortedKeys = groupedNests.Keys.ToList(); - sortedKeys.Sort(); - foreach (var key in sortedKeys) - { - var eb = new DiscordEmbedBuilder - { - Title = key, - Description = string.Empty, - Color = DiscordColor.Green - }; - var message = string.Empty; - foreach (var nest in groupedNests[key]) - { - if (nest.Average < server.NestsMinimumPerHour) - continue; - - var pkmn = MasterFile.GetPokemon(nest.PokemonId, 0); - var pkmnName = Translator.Instance.GetPokemonName(pkmn.PokedexId); - var gmapsLink = string.Format(Strings.GoogleMaps, nest.Latitude, nest.Longitude); - // TODO: Check if possible shiny - message += $"[**{nest.Name}**]({gmapsLink}): {pkmnName} (#{nest.PokemonId}) {nest.Average:N0} per hour\r\n"; - if (message.Length >= 2048) - { - eb.Description = message.Substring(0, Math.Min(message.Length, 2048)); - message = string.Empty; - await channel.SendMessageAsync(embed: eb); - eb = new DiscordEmbedBuilder - { - Title = key, - Description = string.Empty, - Color = DiscordColor.Green - }; - } - } - if (message.Length > 0) - { - eb.Description = message; - message = string.Empty; - await channel.SendMessageAsync(embed: eb); - } - Thread.Sleep(1000); - } - } - else - { - var cities = server.Geofences.Select(x => x.Name.ToLower()).ToList(); - for (var i = 0; i < nests.Count; i++) - { - var nest = nests[i]; - if (nest.Average == 0) - continue; - - try - { - var eb = GenerateNestMessage(guildId, ctx.Client, nest); - var geofence = _dep.Whm.GetGeofence(guildId, nest.Latitude, nest.Longitude); - if (geofence == null) - { - //_logger.Warn($"Failed to find geofence for nest {nest.Key}."); - continue; - } - - if (!cities.Contains(geofence.Name.ToLower())) - continue; - - if (nest.Average < server.NestsMinimumPerHour) - continue; - - await channel.SendMessageAsync(embed: eb); - Thread.Sleep(200); - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - } - } - - public DiscordEmbed GenerateNestMessage(ulong guildId, DiscordClient client, Nest nest) - { - var alertMessageType = AlertMessageType.Nests; - var alertMessage = /*alarm?.Alerts[alertMessageType] ??*/ AlertMessage.Defaults[alertMessageType]; // TODO: Add nestAlert config option - var server = _dep.WhConfig.Servers[guildId]; - var pokemonImageUrl = IconFetcher.Instance.GetPokemonIcon(server.IconStyle, nest.PokemonId); - var properties = GetProperties(client.Guilds[guildId], nest, pokemonImageUrl); - var eb = new DiscordEmbedBuilder - { - Title = DynamicReplacementEngine.ReplaceText(alertMessage.Title, properties), - Url = DynamicReplacementEngine.ReplaceText(alertMessage.Url, properties), - ImageUrl = DynamicReplacementEngine.ReplaceText(alertMessage.ImageUrl, properties), - ThumbnailUrl = DynamicReplacementEngine.ReplaceText(alertMessage.IconUrl, properties), - Description = DynamicReplacementEngine.ReplaceText(alertMessage.Content, properties), - Color = DiscordColor.Green, - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = DynamicReplacementEngine.ReplaceText(alertMessage.Footer?.Text, properties), - IconUrl = DynamicReplacementEngine.ReplaceText(alertMessage.Footer?.IconUrl, properties) - } - }; - return eb.Build(); - } - - public IReadOnlyDictionary GetProperties(DiscordGuild guild, Nest nest, string pokemonImageUrl) - { - var pkmnInfo = MasterFile.GetPokemon(nest.PokemonId, 0); - var pkmnImage = pokemonImageUrl; - var nestName = nest.Name ?? "Unknown"; - var type1 = pkmnInfo?.Types?[0]; - var type2 = pkmnInfo?.Types?.Count > 1 ? pkmnInfo.Types?[1] : PokemonType.None; - var type1Emoji = pkmnInfo?.Types?[0].GetTypeEmojiIcons(); - var type2Emoji = pkmnInfo?.Types?.Count > 1 ? pkmnInfo?.Types?[1].GetTypeEmojiIcons() : string.Empty; - var typeEmojis = $"{type1Emoji} {type2Emoji}"; - var gmapsLink = string.Format(Strings.GoogleMaps, nest.Latitude, nest.Longitude); - var appleMapsLink = string.Format(Strings.AppleMaps, nest.Latitude, nest.Longitude); - var wazeMapsLink = string.Format(Strings.WazeMaps, nest.Latitude, nest.Longitude); - var scannerMapsLink = string.Format(_dep.WhConfig.Urls.ScannerMap, nest.Latitude, nest.Longitude); - var staticMapLink = StaticMap.GetUrl(_dep.WhConfig.Urls.StaticMap, _dep.WhConfig.StaticMaps["nests"], nest.Latitude, nest.Longitude, pkmnImage, Net.Models.PokemonTeam.All, _dep.OsmManager.GetNest(nest.Name)?.FirstOrDefault()); - var geofence = _dep.Whm.GetGeofence(guild.Id, nest.Latitude, nest.Longitude); - var city = geofence?.Name ?? "Unknown"; - var address = new Location(null, city, nest.Latitude, nest.Longitude).GetAddress(_dep.WhConfig); - - var dict = new Dictionary - { - //Main properties - { "pkmn_id", Convert.ToString(nest.PokemonId) }, - { "pkmn_id_3", nest.PokemonId.ToString("D3") }, - { "pkmn_name", pkmnInfo?.Name }, - { "pkmn_img_url", pkmnImage }, - { "avg_spawns", Convert.ToString(nest.Average) }, - { "nest_name", nestName }, - { "type_1", Convert.ToString(type1) }, - { "type_2", Convert.ToString(type2) }, - { "type_1_emoji", type1Emoji }, - { "type_2_emoji", type2Emoji }, - { "types", $"{type1} | {type2}" }, - { "types_emojis", typeEmojis }, - - //Location properties - { "geofence", city }, - { "lat", Convert.ToString(nest.Latitude) }, - { "lng", Convert.ToString(nest.Longitude) }, - { "lat_5", Convert.ToString(Math.Round(nest.Latitude, 5)) }, - { "lng_5", Convert.ToString(Math.Round(nest.Longitude, 5)) }, - - //Location links - { "tilemaps_url", staticMapLink }, - { "gmaps_url", gmapsLink }, - { "applemaps_url", appleMapsLink }, - { "wazemaps_url", wazeMapsLink }, - { "scanmaps_url", scannerMapsLink }, - - { "address", address?.Address }, - - // Discord Guild properties - { "guild_name", guild?.Name }, - { "guild_img_url", guild?.IconUrl }, - - { "date_time", DateTime.Now.ToString() }, - - //Misc properties - { "br", "\r\n" } - }; - return dict; - } - - private Dictionary> GroupNests(ulong guildId, IEnumerable nests) - { - var dict = new Dictionary>(); - foreach (var nest in nests) - { - var geofence = _dep.Whm.GetGeofence(guildId, nest.Latitude, nest.Longitude); - if (geofence == null) - { - _logger.Warn($"Failed to find geofence for nest {nest.Name}."); - continue; - } - var geofenceName = geofence.Name; - var server = _dep.WhConfig.Servers[guildId]; - var cities = server.Geofences.Select(x => x.Name.ToLower()).ToList(); - if (!cities.Contains(geofenceName.ToLower())) - continue; - - if (dict.ContainsKey(geofenceName)) - { - dict[geofenceName].Add(nest); - } - else - { - dict.Add(geofenceName, new List { nest }); - } - dict[geofenceName].Sort((x, y) => x.Name.CompareTo(y.Name)); - } - return dict; - } - - /// - /// Get a list of nests from the database - /// - /// - /// - public static List GetNests(string nestsConnectionString = null) - { - if (string.IsNullOrEmpty(nestsConnectionString)) - return null; - - try - { - using (var db = DataAccessLayer.CreateFactory(nestsConnectionString).Open()) - { - var nests = db.LoadSelect(); - return nests; - } - } - catch (Exception ex) - { - _logger.Error(ex); - } - - return null; - } - } -} \ No newline at end of file diff --git a/src/Commands/Notifications.cs b/src/Commands/Notifications.cs deleted file mode 100644 index c87e66c6..00000000 --- a/src/Commands/Notifications.cs +++ /dev/null @@ -1,3260 +0,0 @@ -namespace WhMgr.Commands -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Text; - using System.Threading.Tasks; - - using DSharpPlus; - using DSharpPlus.CommandsNext; - using DSharpPlus.CommandsNext.Attributes; - using DSharpPlus.Entities; - using Newtonsoft.Json; - - using WhMgr.Commands.Input; - using WhMgr.Configuration; - using WhMgr.Data; - using WhMgr.Data.Models; - using WhMgr.Data.Subscriptions; - using WhMgr.Data.Subscriptions.Models; - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Localization; - using WhMgr.Net.Models; - using WhMgr.Utilities; - - public class Notifications - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("NOTIFICATIONS", Program.LogLevel); - - private readonly Dependencies _dep; - - public Notifications(Dependencies dep) - { - _dep = dep; - } - - #region General - - [ - Command("info"), - Description("Shows your current Pokemon and Raid boss notification subscriptions.") - ] - public async Task InfoAsync(CommandContext ctx, - [Description("Discord user mention string.")] string mention = "") - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (string.IsNullOrEmpty(mention)) - { - await SendUserSubscriptionSettings(ctx.Client, ctx.User, ctx.User, guildId); - return; - } - - var isModOrHigher = await ctx.Client.IsModeratorOrHigher(ctx.User.Id, guildId, _dep.WhConfig); - if (!isModOrHigher) - { - await ctx.RespondEmbed(Translator.Instance.Translate("MSG_NOT_MODERATOR_OR_HIGHER").FormatText(ctx.User.Mention), DiscordColor.Red); - return; - } - - var userId = ConvertMentionToUserId(mention); - if (userId <= 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("MSG_INVALID_USER_MENTION").FormatText(ctx.User.Mention, mention), DiscordColor.Red); - return; - } - - var user = await ctx.Client.GetUserAsync(userId); - if (user == null) - { - _logger.Warn($"Failed to get Discord user with id {userId}."); - return; - } - - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - - await SendUserSubscriptionSettings(ctx.Client, ctx.User, user, guildId); - } - - [ - Command("enable"), - Aliases("disable"), - Description("Enables or disables all of your Pokemon and Raid notification subscriptions at once.") - ] - public async Task EnableDisableAsync(CommandContext ctx, - [Description("Discord user mention string.")] string mention = "") - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - if (string.IsNullOrEmpty(mention)) - { - await EnableDisableUserSubscriptions(ctx, ctx.User, guildId); - return; - } - - var isModOrHigher = await ctx.Client.IsModeratorOrHigher(ctx.User.Id, guildId, _dep.WhConfig); - if (!isModOrHigher) - { - await ctx.RespondEmbed(Translator.Instance.Translate("MSG_NOT_MODERATOR_OR_HIGHER").FormatText(ctx.User.Mention), DiscordColor.Red); - return; - } - - var userId = ConvertMentionToUserId(mention); - if (userId <= 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("MSG_INVALID_USER_MENTION").FormatText(ctx.User.Mention, mention), DiscordColor.Red); - return; - } - - var user = await ctx.Client.GetUserAsync(userId); - if (user == null) - { - _logger.Warn($"Failed to get Discord user with id {userId}."); - return; - } - - await EnableDisableUserSubscriptions(ctx, user, guildId); - - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - [ - Command("set-distance"), - Description("Set the distance and location you'd like to receive raid notifications.") - ] - public async Task SetDistanceAsync(CommandContext ctx, - [Description("Name of the location you want to create i.e. Home, Work, etc")] string locationName, - [Description("Maximum distance in meters between the set coordinates.")] int distance, - [Description("Coordinates in `34.00,-117.00` format."), RemainingText] string coordinates) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - var parts = coordinates.Replace(" ", null).Split(','); - if (!double.TryParse(parts[0], out var lat) || !double.TryParse(parts[1], out var lng)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_COORDINATES").FormatText(ctx.User.Username, coordinates), DiscordColor.Red); - return; - } - - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (subscription == null) - { - await ctx.RespondEmbed(Translator.Instance.Translate("MSG_USER_NOT_SUBSCRIBED").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var location = subscription.Locations?.FirstOrDefault(x => string.Compare(x.Name, subscription.Location, true) == 0); - if (location == null) - { - location = new LocationSubscription - { - SubscriptionId = subscription.Id, - GuildId = subscription.GuildId, - UserId = subscription.UserId, - Name = locationName, - DistanceM = distance, - Latitude = lat, - Longitude = lng, - }; - subscription.Locations.Add(location); - } - else - { - location.DistanceM = distance; - location.Latitude = lat; - location.Longitude = lng; - } - subscription.Save(); - - // TODO: Change response message to include new/modifed location name - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_DISTANCE_SET").FormatText(ctx.User.Username, distance, lat, lng)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - [ - Command("set-number"), - Description("Set the phone number to receive text message notifications for ultra rare pokemon.") - ] - public async Task SetPhoneNumberAsync(CommandContext ctx, - [Description("10 digit phone number to receive text message alerts for")] string phoneNumber) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - // Check if user is in list of acceptable users to receive Pokemon text message notifications - if (!_dep.WhConfig.Twilio.UserIds.Contains(ctx.User.Id)) - return; - - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (subscription == null) - { - await ctx.RespondEmbed(Translator.Instance.Translate("MSG_USER_NOT_SUBSCRIBED").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - subscription.PhoneNumber = phoneNumber; - subscription.Save(); - - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_PHONE_NUMBER_SET").FormatText(ctx.User.Username, phoneNumber)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - [ - Command("expire"), - Aliases("expires"), - Description("") - ] - public async Task GetExpireDateAsync(CommandContext ctx) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - var message = BuildExpirationMessage(guildId, ctx.User); - await ctx.Client.SendDirectMessage(ctx.User, message); - } - - [ - Command("expire-admin"), - Description(""), - Hidden, - RequireOwner - ] - public async Task GetExpireAdminAsync(CommandContext ctx, - [Description("Discord user id to check expire date for")] string userId) - { - if (!await CanExecute(ctx)) - return; - - if (!ulong.TryParse(userId, out var realUserId)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_PARSING_USER_ID").FormatText(ctx.User.Username, userId), DiscordColor.Red); - return; - } - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - var user = await ctx.Client.GetUserAsync(realUserId); - var message = BuildExpirationMessage(guildId, user); - await ctx.Client.SendDirectMessage(ctx.User, message); - } - - #endregion - - #region Pokeme / Pokemenot - - [ - Command("pokeme"), - Description("Subscribe to Pokemon notifications based on the pokedex number or name, minimum IV stats, or minimum level.") - ] - public async Task PokeMeAsync(CommandContext ctx, - [Description("Comma delimited list of Pokemon name(s) and/or Pokedex IDs to subscribe to Pokemon spawn notifications.")] string poke, - [Description("Minimum IV to receive notifications for, use 0 to disregard IV. i.e. 100 or 0-15-15")] string iv = "0", - [Description("Minimum level and maximum level to receive notifications for, use 0 to disregard level. Set a maximum value with 15-35.")] string lvl = "0", - [Description("Specific gender the Pokemon must be, use * to disregard gender. (*, m, f)")] string gender = "*", - [Description("City or area to add to the subscription, 'All' for all areas, or leave blank to use set distance."), RemainingText] string city = null) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - - //if (!int.TryParse(cpArg, out int cp)) - //{ - // await message.RespondEmbed($"'{cpArg}' is not a valid value for CP.", DiscordColor.Red); - // return; - //} - - var attack = -1; - var defense = -1; - var stamina = -1; - var realIV = 0; - - // Check if IV value contains `-` and to expect individual values instead of whole IV value - if (iv.Contains("-")) - { - var split = iv.Split('-'); - if (split.Length != 3) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_IV_VALUES").FormatText(ctx.User.Username, iv), DiscordColor.Red); - return; - } - if (!int.TryParse(split[0], out attack)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_ATTACK_VALUE").FormatText(ctx.User.Username, split[0]), DiscordColor.Red); - return; - } - if (!int.TryParse(split[1], out defense)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_DEFENSE_VALUE").FormatText(ctx.User.Username, split[1]), DiscordColor.Red); - return; - } - if (!int.TryParse(split[2], out stamina)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_STAMINA_VALUE").FormatText(ctx.User.Username, split[2]), DiscordColor.Red); - return; - } - } - else - { - // User provided IV value as a whole - if (!int.TryParse(iv, out realIV) || realIV < Strings.MinimumIV || realIV > Strings.MaximumIV) - { - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_IV_RANGE").FormatText(ctx.User.Username, iv), DiscordColor.Red); - return; - } - } - - var minLevel = Strings.MinimumLevel; - var maxLevel = Strings.MaximumLevel; - // Check if level contains `-` and to expect a minimum and maximum level provided - if (lvl.Contains('-')) - { - var split = lvl.Split('-'); - if (!int.TryParse(split[0], out minLevel)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_MINIMUM_LEVEL", ctx.User.Username, split[0]), DiscordColor.Red); - return; - } - if (!int.TryParse(split[1], out maxLevel)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_MAXIMUM_LEVEL", ctx.User.Username, split[1]), DiscordColor.Red); - return; - } - } - else - { - // Only minimum level was provided - if (!int.TryParse(lvl, out minLevel)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_MINIMUM_LEVEL", ctx.User.Username, lvl), DiscordColor.Red); - return; - } - } - - // Validate minimum and maximum levels are within range - if (minLevel < 0 || minLevel > 35) - { - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_LEVEL").FormatText(ctx.User.Username, lvl), DiscordColor.Red); - return; - } - - // Check if gender is a valid gender provided - if (!Strings.ValidGenders.Contains(gender.ToLower())) - { - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_GENDER").FormatText(ctx.User.Username, gender), DiscordColor.Red); - return; - } - - // Check if user is trying to subscribe to 'All' Pokemon - if (string.Compare(poke, Strings.All, true) == 0) - { - // If so, make sure they specified at least 90% or higher - if (realIV < 90) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_MINIMUM_IV").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - } - - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - // Check subscription limits - if (server.Subscriptions.MaxPokemonSubscriptions > 0 && subscription.Pokemon.Count >= server.Subscriptions.MaxPokemonSubscriptions) - { - // Max limit for Pokemon subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxPokemonSubscriptions), DiscordColor.Red); - return; - } - - var alreadySubscribed = new List(); - var subscribed = new List(); - var isModOrHigher = await ctx.Client.IsModeratorOrHigher(ctx.User.Id, guildId, _dep.WhConfig); - - var areas = SubscriptionAreas.GetAreas(server, city); - if (areas.Count == 0 && string.IsNullOrEmpty(subscription.Location)) - { - // TODO: Provide better response - await ctx.RespondEmbed($"{ctx.User.Username}#{ctx.User.Discriminator} You must either set a distance to receive notifications from (`set-distance ,`) or provide a city/area for the subscription. Aborting request.", DiscordColor.Red); - return; - } - - // TODO: Save form as form with comma delimiter - - // Validate the provided pokemon list - var isAll = string.Compare(Strings.All, poke, true) == 0; - if (isAll) - { - poke = string.Join(",", PokemonValidation.GetListFromRange(1, _dep.WhConfig.MaxPokemonId)); - } - var validation = PokemonValidation.Validate(poke, _dep.WhConfig.MaxPokemonId); - if (validation == null || validation.Valid.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(ctx.User.Username, string.Join(", ", validation.Invalid)), DiscordColor.Red); - return; - } - - var valid = string.Join(",", validation.Valid.Keys.ToList()); - var forms = string.Join(",", validation.Valid.Values.ToList().Distinct()); - - // Check for any subscriptions that match the pokemon_id/forms string, otherwise create a new one - var exists = subscription.Pokemon.FirstOrDefault(x => x.PokemonIdString == valid && x.FormsString == forms); - //var minIV = pokemonId.IsRarePokemon() ? 0 : realIV; - //var minLvl = pokemonId.IsRarePokemon() ? 0 : minLevel; - //var maxLvl = pokemonId.IsRarePokemon() ? 35 : maxLevel; - var hasStatsSet = attack >= 0 || defense >= 0 || stamina >= 0; - - if (exists != null) - { - // Update Pokemon subscription - exists.FormsString = forms; - exists.MinimumIV = hasStatsSet ? exists.MinimumIV : realIV; - exists.MinimumLevel = minLevel; - exists.MaximumLevel = maxLevel; - exists.Gender = gender; - if (hasStatsSet) - { - exists.IVList.Add($"{attack}/{defense}/{stamina}"); - } - foreach (var area in areas) - { - if (!exists.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - exists.Areas.Add(area); - } - } - subscribed.Add(valid); - } - else - { - // Does not exist, create. - subscription.Pokemon.Add(new PokemonSubscription - { - GuildId = guildId, - UserId = ctx.User.Id, - PokemonIdString = valid, - FormsString = forms, - MinimumIV = realIV, - MinimumLevel = minLevel, - MaximumLevel = maxLevel, - Gender = gender, - IVList = hasStatsSet ? new List { $"{attack}/{defense}/{stamina}" } : new List(), - Areas = areas - }); - subscribed.Add(valid); - } - - subscription.Save(); - await ctx.TriggerTypingAsync(); - if (subscribed.Count == 0 && alreadySubscribed.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_SPECIFIED").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var isGen = false; - for (var i = 1; i < 6; i++) - { - if (string.Compare("Gen" + i, poke, true) == 0) - { - isGen = true; - break; - } - } - - var pkmnNames = string.Join(", ", subscribed.Select(x => MasterFile.GetPokemon(uint.Parse(x), 0)?.Name)); - await ctx.RespondEmbed - ( - (subscribed.Count > 0 - ? $"{ctx.User.Username} has subscribed to **{(isAll || isGen ? Strings.All : string.Join("**, **", pkmnNames))}** notifications with a{(attack >= 0 || defense >= 0 || stamina >= 0 ? $"n IV value of {attack}/{defense}/{stamina}" : $" minimum IV of {iv}%")}{(minLevel > 0 ? $" and between levels {minLevel}-{maxLevel}" : null)}{(gender == "*" ? null : $" and only '{gender}' gender types")} and only from the following areas: {(areas.Count == server.Geofences.Count ? Strings.All : string.Join(", ", areas))}." - : string.Empty) + - (alreadySubscribed.Count > 0 - ? $"\r\n{ctx.User.Username} is already subscribed to **{(isAll || isGen ? Strings.All : string.Join("**, **", alreadySubscribed))}** notifications with a{(attack >= 0 || defense >= 0 || stamina >= 0 ? $"n IV value of {attack}/{defense}/{stamina}" : $" minimum IV of {iv}%")}{(minLevel > 0 ? $" and between levels {minLevel}-{maxLevel}" : null)}{(gender == "*" ? null : $" and only '{gender}' gender types")} and only from the following areas: {(areas.Count == server.Geofences.Count ? Strings.All : string.Join(", ", areas))}." - : string.Empty) - ); - - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - [ - Command("pokemenot"), - Description("Unsubscribe from one or more or even all subscribed Pokemon notifications by pokedex number or name.") - ] - public async Task PokeMeNotAsync(CommandContext ctx, - [Description("Pokemon name or id to unsubscribe from Pokemon spawn notifications.")] string poke, - [Description("City or area to remove from the subscription, 'All' for all areas, or leave blank to remove the whole subscription.")] string city = null) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (subscription == null || subscription?.Pokemon?.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_NO_POKEMON_SUBSCRIPTIONS").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - // Check if we received the all parameter - if (string.Compare(poke, Strings.All, true) == 0) - { - // Send a confirmation confirming the user actually wants to remove all of their Pokemon subscriptions - var confirm = await ctx.Confirm(Translator.Instance.Translate("NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS").FormatText(ctx.User.Username, subscription.Pokemon.Count.ToString("N0"))); - if (!confirm) - return; - - // Loop through all Pokemon subscriptions and remove them - subscription.Pokemon.ForEach(x => x.Id.Remove()); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS").FormatText(ctx.User.Username)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - return; - } - - var validation = PokemonValidation.Validate(poke, _dep.WhConfig.MaxPokemonId); - if (validation.Valid == null || validation.Valid.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(ctx.User.Username, string.Join(", ", validation.Invalid)), DiscordColor.Red); - return; - } - - var areas = SubscriptionAreas.GetAreas(_dep.WhConfig.Servers[guildId], city); - var pokemonNames = validation.Valid.Select(x => MasterFile.Instance.Pokedex[x.Key].Name + (string.IsNullOrEmpty(x.Value) ? string.Empty : "-" + x.Value)); - var error = false; - //foreach (var (pokemonId, form) in validation.Valid) - //{ - var valid = string.Join(",", validation.Valid.Keys.ToList()); - var forms = string.Join(",", validation.Valid.Values.ToList()); - var exists = subscription.Pokemon.FirstOrDefault(x => x.PokemonIdString == valid && x.FormsString == forms); - //var exists = subscription.Pokemon.FirstOrDefault(x => x.PokemonId == pokemonId && (string.IsNullOrEmpty(x.Form) || string.Compare(x.Form, form, true) == 0)); - if (exists == null) - return; - //continue; - - foreach (var area in areas) - { - // TODO: Remove all areas to prevent lingering ones? - if (exists.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - var index = exists.Areas.FindIndex(x => string.Compare(x, area, true) == 0); - exists.Areas.RemoveAt(index); - } - } - - // Check if there are no more areas set for the Pokemon subscription - // If no city specified then remove the whole subscription - if (string.IsNullOrEmpty(city)) - { - // If no more areas set for the Pokemon subscription, delete it - var result = exists.Id.Remove(); - if (!result) - { - error = true; - //TODO: Collect list of failed. - } - } - else - { - // Save/update Pokemon subscription if cities still assigned - exists.Save(); - } - //} - - if (error) - { - await ctx.RespondEmbed(Translator.Instance.Translate("FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText(ctx.User.Username, string.Join(", ", pokemonNames)), DiscordColor.Red); - return; - } - - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText(ctx.User.Username, string.Join("**, **", pokemonNames))); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - #endregion - - #region Raidme / Raidmenot - - [ - Command("raidme"), - Description("Subscribe to raid boss notifications based on the pokedex number or name.") - ] - public async Task RaidMeAsync(CommandContext ctx, - [Description("Pokemon name or id to subscribe to raid notifications.")] string poke, - [Description("City or area to add to the subscription, 'All' for all areas, or leave blank to use set distance."), RemainingText] string city = null) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - // Check subscription limits - if (server.Subscriptions.MaxRaidSubscriptions > 0 && subscription.Raids.Count >= server.Subscriptions.MaxRaidSubscriptions) - { - // Max limit for Raid subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxRaidSubscriptions), DiscordColor.Red); - return; - } - - var validation = PokemonValidation.Validate(poke, _dep.WhConfig.MaxPokemonId); - if (validation.Valid == null || validation.Valid.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(ctx.User.Username, string.Join(", ", validation.Invalid)), DiscordColor.Red); - return; - } - - var areas = SubscriptionAreas.GetAreas(server, city); - if (areas.Count == 0 && string.IsNullOrEmpty(subscription.Location)) - { - await ctx.RespondEmbed($"{ctx.User.Username}#{ctx.User.Discriminator} You must either set a distance to receive notifications from (`set-distance ,`) or provide a city/area for the subscription. Aborting request.", DiscordColor.Red); - return; - } - - foreach (var (pokemonId, form) in validation.Valid) - { - var subRaid = subscription.Raids.FirstOrDefault(x => x.PokemonId == pokemonId && string.Compare(x.Form, form, true) == 0); - if (subRaid != null) - { - // Existing raid subscription - // Loop all areas, check if the area is already in subs, if not add it - foreach (var area in areas) - { - if (!subRaid.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - subRaid.Areas.Add(area); - } - } - // Save raid subscription and continue; - // REVIEW: Might not be needed - subRaid.Save(); - continue; - } - - // New raid subscription - subscription.Raids.Add(new RaidSubscription - { - GuildId = guildId, - UserId = ctx.User.Id, - PokemonId = pokemonId, - Form = form, - Areas = areas - }); - } - subscription.Save(); - - var pokemonNames = validation.Valid.Select(x => MasterFile.Instance.Pokedex[x.Key].Name + (string.IsNullOrEmpty(x.Value) ? string.Empty : "-" + x.Value)); - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE").FormatText( - ctx.User.Username, - string.Compare(poke, Strings.All, true) == 0 ? Strings.All : string.Join("**, **", pokemonNames), - string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(city)) - ); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - [ - Command("raidmenot"), - Description("Unsubscribe from one or more or even all subscribed raid boss notifications by pokedex number or name.") - ] - public async Task RaidMeNotAsync(CommandContext ctx, - [Description("Pokemon name or id to unsubscribe from raid notifications.")] string poke, - [Description("City or area to remove from the subscription, 'All' for all areas, or leave blank to remove the whole subscription."), RemainingText] string city = null) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (subscription == null || subscription?.Raids.Count == 0) - { - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_NO_RAID_SUBSCRIPTIONS").FormatText(ctx.User.Username, - string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(city)), - DiscordColor.Red - ); - return; - } - - if (string.Compare(poke, Strings.All, true) == 0) - { - var result = await ctx.Confirm(Translator.Instance.Translate("NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS").FormatText(ctx.User.Username, subscription.Raids.Count.ToString("N0"))); - if (!result) - return; - - subscription.Raids.ForEach(x => x.Id.Remove()); - - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS").FormatText(ctx.User.Username)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - return; - } - - var validation = PokemonValidation.Validate(poke, _dep.WhConfig.MaxPokemonId); - if (validation.Valid == null || validation.Valid.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(ctx.User.Username, string.Join(", ", validation.Invalid)), DiscordColor.Red); - return; - } - - var areas = SubscriptionAreas.GetAreas(_dep.WhConfig.Servers[guildId], city); - foreach (var item in validation.Valid) - { - var pokemonId = item.Key; - var form = item.Value; - var subRaid = subscription.Raids.FirstOrDefault(x => x.PokemonId == pokemonId && (string.IsNullOrEmpty(x.Form) || string.Compare(x.Form, form, true) == 0)); - // Check if subscribed - if (subRaid == null) - continue; - - foreach (var area in areas) - { - if (subRaid.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - var index = subRaid.Areas.FindIndex(x => string.Compare(x, area, true) == 0); - subRaid.Areas.RemoveAt(index); - } - } - - // Check if there are no more areas set for the Pokemon subscription - //if (subRaid.Areas.Count == 0) - // If no city specified then remove the whole subscription - if (string.IsNullOrEmpty(city)) - { - // If no more areas set for the Pokemon subscription, delete it - if (!subRaid.Id.Remove()) - { - _logger.Error($"Unable to remove raid subscription for user id {subRaid.UserId} from guild id {subRaid.GuildId}"); - } - } - else - { - // Save/update raid subscription if cities still assigned - subRaid.Save(); - } - } - - var pokemonNames = validation.Valid.Select(x => MasterFile.Instance.Pokedex[x.Key].Name + (string.IsNullOrEmpty(x.Value) ? string.Empty : "-" + x.Value)); - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText( - ctx.User.Username, - string.Compare(poke, Strings.All, true) == 0 ? Strings.All : string.Join("**, **", pokemonNames), - string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(string.Join(", ", areas))) - ); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - #endregion - - #region Questme / Questmenot - - [ - Command("questme"), - Description("Subscribe to quest notifications based on the reward keyword.") - ] - public async Task QuestMeAsync(CommandContext ctx, - [Description("Reward keyword to use to find field research. Example: Spinda, 1200 stardust, candy")] string rewardKeyword, - [Description("City or area to add to the subscription, 'All' for all areas, or leave blank to use set distance."), RemainingText] string city = null) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - // Check subscription limits - if (server.Subscriptions.MaxQuestSubscriptions > 0 && subscription.Quests.Count >= server.Subscriptions.MaxQuestSubscriptions) - { - // Max limit for Quest subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxQuestSubscriptions), DiscordColor.Red); - return; - } - - var areas = SubscriptionAreas.GetAreas(server, city); - if (areas.Count == 0 && string.IsNullOrEmpty(subscription.Location)) - { - await ctx.RespondEmbed($"{ctx.User.Username}#{ctx.User.Discriminator} You must either set a distance to receive notifications from (`set-distance ,`) or provide a city/area for the subscription. Aborting request.", DiscordColor.Red); - return; - } - - var subQuest = subscription.Quests.FirstOrDefault(x => string.Compare(x.RewardKeyword, rewardKeyword, true) == 0); - if (subQuest != null) - { - // Existing quest subscription - // Loop all areas, check if the area is already in subs, if not add it - foreach (var area in areas) - { - if (!subQuest.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - subQuest.Areas.Add(area); - } - } - // Save quest subscription and continue; - // REVIEW: Might not be needed - subQuest.Save(); - } - else - { - subscription.Quests.Add(new QuestSubscription - { - GuildId = guildId, - UserId = ctx.User.Id, - RewardKeyword = rewardKeyword, - Areas = areas - }); - } - - subscription.Save(); - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE").FormatText( - ctx.User.Username, - rewardKeyword, - string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(city)) - ); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - [ - Command("questmenot"), - Description("Unsubscribe from one or all subscribed field research quest notifications by reward keyword.") - ] - public async Task QuestMeNotAsync(CommandContext ctx, - [Description("Reward keyword to remove from field research quest subscriptions. Example: Spinda, 1200 stardust, candy")] string rewardKeyword, - [Description("City or area to remove from the subscription, 'All' for all areas, or leave blank to remove the whole subscription."), RemainingText] string city = null) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (subscription == null || subscription?.Quests.Count == 0) - { - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_NO_QUEST_SUBSCRIPTIONS").FormatText( - ctx.User.Username, - rewardKeyword, - string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(city)), - DiscordColor.Red - ); - return; - } - - var notSubscribed = new List(); - var unsubscribed = new List(); - await ctx.TriggerTypingAsync(); - - if (string.Compare(rewardKeyword, Strings.All, true) == 0) - { - var removeAllResult = await ctx.Confirm(Translator.Instance.Translate("NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS").FormatText(ctx.User.Username, subscription.Quests.Count.ToString("N0"))); - if (!removeAllResult) - return; - - subscription.Quests.ForEach(x => x.Id.Remove()); - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_CONFIRM_SUCCESS_ALL_QUEST_SUBSCRIPTIONS").FormatText(ctx.User.Username)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - return; - } - - var areas = SubscriptionAreas.GetAreas(_dep.WhConfig.Servers[guildId], city); - var subQuest = subscription.Quests.FirstOrDefault(x => string.Compare(x.RewardKeyword, rewardKeyword, true) == 0); - // Check if subscribed - if (subQuest == null) - return; - - foreach (var area in areas) - { - if (subQuest.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - var index = subQuest.Areas.FindIndex(x => string.Compare(x, area, true) == 0); - subQuest.Areas.RemoveAt(index); - } - } - - // Check if there are no more areas set for the Pokemon subscription - //if (subQuest.Areas.Count == 0) - // If no city specified then remove the whole subscription - if (string.IsNullOrEmpty(city)) - { - // If no more areas set for the Pokemon subscription, delete it - if (!subQuest.Id.Remove()) - { - _logger.Error($"Unable to remove quest subscription for user id {subQuest.UserId} from guild id {subQuest.GuildId}"); - } - } - else - { - // Save/update quest subscription if cities still assigned - subQuest.Save(); - } - subscription.Save(); - - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText( - ctx.User.Username, - rewardKeyword, - string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(city)) - ); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - #endregion - - #region Gymme / Gymmenot - - [ - Command("gymme"), - Description("Add raid notifications for specific gyms.") - ] - public async Task GymMeAsync(CommandContext ctx, - [Description("Gym name to subscribed to.")] string gymName, - [Description("Minimum raid level.")] ushort minLevel, - [Description("Maximum raid level.")] ushort maxLevel, - [Description("Comma delimited list of Pokemon name(s) and/or Pokedex IDs.")] string pokemonIds = null) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - // Check subscription limits - if (server.Subscriptions.MaxGymSubscriptions > 0 && subscription.Gyms.Count >= server.Subscriptions.MaxGymSubscriptions) - { - // Max limit for Gym subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxGymSubscriptions), DiscordColor.Red); - return; - } - - if (minLevel > maxLevel || maxLevel < minLevel) - { - // Invalid level range - // TODO: Response to user with error message - return; - } - - // Check pokemon - var pokemon = new List(); - if (!string.IsNullOrEmpty(pokemonIds)) - { - pokemon = PokemonValidation.Validate(pokemonIds, _dep.WhConfig.MaxPokemonId).Valid.Keys.ToList().ConvertAll(x =>(uint)x); - } - - var subGym = subscription.Gyms.FirstOrDefault(x => string.Compare(x.Name, gymName, true) == 0); - var id = subGym?.Id ?? 0; - subGym = new GymSubscription - { - Id = id, - SubscriptionId = subscription.Id, - GuildId = guildId, - UserId = ctx.User.Id, - Name = gymName, - MinimumLevel = minLevel, - MaximumLevel = maxLevel, - PokemonIDs = pokemon, - }; - subscription.Gyms.Add(subGym); - subscription.Save(); - - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_GYM_SUBSCRIPTION_ADDED").FormatText(ctx.User.Username, gymName)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - [ - Command("gymmenot"), - Description("Remove raid notifications for specific gyms.") - ] - public async Task GymMeNotAsync(CommandContext ctx, - [Description("Gym name to unsubscribed from."), RemainingText] string gymName) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (string.Compare(Strings.All, gymName, true) == 0) - { - var result = await ctx.Confirm(Translator.Instance.Translate("NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS").FormatText(ctx.User.Username, subscription.Gyms.Count.ToString("N0"))); - if (!result) - return; - - subscription.Gyms.ForEach(x => x.Id.Remove()); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS").FormatText(ctx.User.Username)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - return; - } - - subscription.Gyms - .Where(x => string.Compare(x.Name, gymName, true) == 0)? - .ToList()? - .ForEach(x => x.Id.Remove()); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_GYM_SUBSCRIPTION_REMOVED").FormatText(ctx.User.Username, gymName)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - #endregion - - #region Invme / Invmenot - - [ - Command("invme"), - Description("Subscribe to Team Rocket invasion notifications based on the encounter reward.") - ] - public async Task InvMeAsync(CommandContext ctx, - [Description("Comma delimited list of Pokemon name(s) and/or Pokedex IDs to subscribe to rewards from Team Rocket Invasion notifications.")] string poke, - [Description("City or area to add to the subscription, 'All' for all areas, or leave blank to use set distance."), RemainingText] string city = null) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - // Check subscription limits - if (server.Subscriptions.MaxInvasionSubscriptions > 0 && subscription.Invasions.Count >= server.Subscriptions.MaxInvasionSubscriptions) - { - // Max limit for Invasion subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxInvasionSubscriptions), DiscordColor.Red); - return; - } - - var validation = PokemonValidation.Validate(poke, _dep.WhConfig.MaxPokemonId); - if (validation.Valid == null || validation.Valid.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(ctx.User.Username, string.Join(", ", validation.Invalid)), DiscordColor.Red); - return; - } - - var areas = SubscriptionAreas.GetAreas(server, city); - if (areas.Count == 0 && string.IsNullOrEmpty(subscription.Location)) - { - await ctx.RespondEmbed($"{ctx.User.Username}#{ctx.User.Discriminator} You must either set a distance to receive notifications from (`set-distance ,`) or provide a city/area for the subscription. Aborting request.", DiscordColor.Red); - return; - } - - var valid = string.Join(",", validation.Valid.Keys.ToList()); - var subInvasion = subscription.Invasions.FirstOrDefault(x => x.RewardPokemonIdString == valid); - if (subInvasion != null) - { - // Existing invasion subscription - // Loop all areas, check if the area is already in subs, if not add it - foreach (var area in areas) - { - if (!subInvasion.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - subInvasion.Areas.Add(area); - } - } - // Save quest subscription and continue; - // REVIEW: Might not be needed - subInvasion.Save(); - } - else - { - // New invasion subscription - subscription.Invasions.Add(new InvasionSubscription - { - GuildId = guildId, - UserId = ctx.User.Id, - RewardPokemonIdString = valid, - Areas = areas - }); - } - subscription.Save(); - - var validPokemonNames = validation.Valid.Keys.Select(x => MasterFile.GetPokemon(x, 0).Name); - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE").FormatText( - ctx.User.Username, - string.Compare(poke, Strings.All, true) == 0 ? Strings.All : string.Join(", ", validPokemonNames), - string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(city)) - ); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - [ - Command("invmenot"), - Description("Unsubscribe from one or all subscribed Team Rocket invasion notifications by encounter reward.") - ] - public async Task InvMeNotAsync(CommandContext ctx, - [Description("Comma delimited list of Pokemon name(s) and/or Pokedex IDs to unsubscribe from rewards for Team Rocket Invasion notifications.")] string poke, - [Description("City or area to remove from the subscription, 'All' for all areas, or leave blank to remove the whole subscription."), RemainingText] string city = null) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (subscription == null || subscription?.Invasions.Count == 0) - { - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_NO_INVASION_SUBSCRIPTIONS").FormatText(ctx.User.Username, string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(city)), - DiscordColor.Red - ); - return; - } - - if (string.Compare(poke, Strings.All, true) == 0) - { - var result = await ctx.Confirm(Translator.Instance.Translate("NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS").FormatText(ctx.User.Username, subscription.Invasions.Count.ToString("N0"))); - if (!result) - return; - - subscription.Invasions.ForEach(x => x.Id.Remove()); - - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS").FormatText(ctx.User.Username)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - return; - } - - var validation = PokemonValidation.Validate(poke, _dep.WhConfig.MaxPokemonId); - if (validation.Valid == null || validation.Valid.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(ctx.User.Username, string.Join(", ", validation.Invalid)), DiscordColor.Red); - return; - } - - var areas = SubscriptionAreas.GetAreas(_dep.WhConfig.Servers[guildId], city); - var valid = string.Join(",", validation.Valid.Keys.ToList()); - var subInvasion = subscription.Invasions.FirstOrDefault(x => x.RewardPokemonIdString == valid); - // Check if subscribed - if (subInvasion == null) - return; - - foreach (var area in areas) - { - if (subInvasion.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - var index = subInvasion.Areas.FindIndex(x => string.Compare(x, area, true) == 0); - subInvasion.Areas.RemoveAt(index); - } - } - - // Check if there are no more areas set for the invasion subscription - //if (subInvasion.Areas.Count == 0) - // If no city specified then remove the whole subscription - if (string.IsNullOrEmpty(city)) - { - // If no more areas set for the invasion subscription, delete it - if (!subInvasion.Id.Remove()) - { - _logger.Error($"Unable to remove invasion subscription for user id {subInvasion.UserId} from guild id {subInvasion.GuildId}"); - } - } - else - { - // Save/update invasion subscription if cities still assigned - subInvasion.Save(); - } - subscription.Save(); - - var validPokemonNames = validation.Valid.Keys.Select(x => MasterFile.GetPokemon(x, 0).Name); - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText( - ctx.User.Username, - string.Compare(poke, Strings.All, true) == 0 ? Strings.All : string.Join(", ", validPokemonNames), - string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(city)) - ); - - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - #endregion - - #region Pvpme / Pvpmenot - - [ - Command("pvpme"), - Description("") - ] - public async Task PvpMeAsync(CommandContext ctx, - [Description("Comma delimited list of Pokemon name(s) and/or Pokedex IDs to subscribe to Pokemon spawn notifications.")] string poke, - [Description("PvP league")] string league, - [Description("Minimum PvP ranking.")] int minimumRank = 5, - [Description("Minimum PvP rank percentage.")] double minimumPercent = 0.0, - [Description("City or area to add to the subscription, 'All' for all areas, or leave blank to use set distance."), RemainingText] string city = null) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - var pvpLeague = string.Compare(league, "great", true) == 0 ? - PvPLeague.Great : - string.Compare(league, "ultra", true) == 0 ? - PvPLeague.Ultra : - string.Compare(league, "master", true) == 0 ? - PvPLeague.Master : - PvPLeague.Other; - - if (pvpLeague == PvPLeague.Other) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_PVP_LEAGUE").FormatText(ctx.User.Username, league), DiscordColor.Red); - return; - } - - //You may only subscribe to the top 100 or higher rank. - if (minimumRank < Strings.MinimumRank || minimumRank > Strings.MaximumRank) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_PVP_RANK_RANGE").FormatText(ctx.User.Username, minimumRank), DiscordColor.Red); - return; - } - - if (minimumPercent < Strings.MinimumPercent || minimumPercent > Strings.MaximumPercent) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_PVP_RANK_RANGE").FormatText(ctx.User.Username, minimumPercent), DiscordColor.Red); - return; - } - - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - // Check subscription limits - if (server.Subscriptions.MaxPvPSubscriptions > 0 && subscription.PvP.Count >= server.Subscriptions.MaxPvPSubscriptions) - { - // Max limit for PvP subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxPvPSubscriptions), DiscordColor.Red); - return; - } - - var alreadySubscribed = new List(); - var subscribed = new List(); - - var isAll = string.Compare(Strings.All, poke, true) == 0; - if (isAll) - { - poke = string.Join(",", PokemonValidation.GetListFromRange(1, _dep.WhConfig.MaxPokemonId)); - } - var validation = PokemonValidation.Validate(poke, _dep.WhConfig.MaxPokemonId); - if (validation == null || validation.Valid.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(ctx.User.Username, string.Join(", ", validation.Invalid)), DiscordColor.Red); - return; - } - - var valid = string.Join(",", validation.Valid.Keys.ToList()); - var forms = string.Join(",", validation.Valid.Values.ToList().Distinct()); - - var areas = SubscriptionAreas.GetAreas(server, city); - if (areas.Count == 0 && string.IsNullOrEmpty(subscription.Location)) - { - await ctx.RespondEmbed($"{ctx.User.Username}#{ctx.User.Discriminator} You must either set a distance to receive notifications from (`set-distance ,`) or provide a city/area for the subscription. Aborting request.", DiscordColor.Red); - return; - } - - /* - if (!MasterFile.Instance.Pokedex.ContainsKey(pokemonId)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_ID").FormatText(ctx.User.Username, pokemonId), DiscordColor.Red); - continue; - } - */ - - //var pokemon = MasterFile.Instance.Pokedex[pokemonId]; - //var name = string.IsNullOrEmpty(form) ? pokemon.Name : pokemon.Name + "-" + form; - var subPkmn = subscription.PvP.FirstOrDefault(x => x.PokemonIdString == valid && - x.FormsString == forms && - x.League == pvpLeague); - if (subPkmn == null) - { - //Does not exist, create. - subscription.PvP.Add(new PvPSubscription - { - GuildId = guildId, - UserId = ctx.User.Id, - PokemonIdString = valid, - FormsString = forms, - League = pvpLeague, - MinimumRank = minimumRank, - MinimumPercent = minimumPercent, - Areas = areas - }); - subscribed.Add(valid); - //continue; - } - else - { - //Exists, check if anything changed. - if (minimumRank != subPkmn.MinimumRank || - minimumPercent != subPkmn.MinimumPercent || - !SubscriptionAreas.IsAreasEqual(subPkmn.Areas, areas)) - { - subPkmn.MinimumRank = minimumRank; - subPkmn.MinimumPercent = minimumPercent; - foreach (var area in areas) - { - if (!subPkmn.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - subPkmn.Areas.Add(area); - } - } - subscribed.Add(valid); - } - } - - var result = subscription.Save(); - - if (subscribed.Count == 0 && alreadySubscribed.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_SPECIFIED").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var isGen = false; - for (var i = 1; i < 6; i++) - { - if (string.Compare("Gen" + i, poke, true) == 0) - { - isGen = true; - break; - } - } - - var pkmnNames = string.Join(", ", subscribed.Select(x => MasterFile.GetPokemon(uint.Parse(x), 0)?.Name)); - await ctx.RespondEmbed - ( - (subscribed.Count > 0 - ? $"{ctx.User.Username} has subscribed to **{(isAll || isGen ? "All" : string.Join("**, **", pkmnNames))}** notifications with a minimum {pvpLeague} League PvP ranking of {minimumRank} or higher and a minimum ranking percentage of {minimumPercent}% and from the following areas: {(areas.Count == server.Geofences.Count ? Strings.All : string.Join(", ", areas))}." - : string.Empty) + - (alreadySubscribed.Count > 0 - ? $"\r\n{ctx.User.Username} is already subscribed to **{(isAll || isGen ? "All" : string.Join("**, **", alreadySubscribed))}** notifications with a minimum {pvpLeague} League PvP ranking of '{minimumRank}' or higher and a minimum ranking percentage of {minimumPercent}% and from the following areas: {(areas.Count == server.Geofences.Count ? Strings.All : string.Join(", ", areas))}." - : string.Empty) - ); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - [ - Command("pvpmenot"), - Description("") - ] - public async Task PvpMeNotAsync(CommandContext ctx, - [Description("Comma delimited list of Pokemon name(s) and/or Pokedex IDs to subscribe to Pokemon spawn notifications.")] string poke, - [Description("PvP league")] string league, - [Description("City or area to remove from the subscription, 'All' for all areas, or leave blank to remove the whole subscription."), RemainingText] string city = null) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (subscription == null || subscription?.PvP?.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_NO_POKEMON_SUBSCRIPTIONS").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var pvpLeague = string.Compare(league, "great", true) == 0 ? - PvPLeague.Great : - string.Compare(league, "ultra", true) == 0 ? - PvPLeague.Ultra : - string.Compare(league, "master", true) == 0 ? - PvPLeague.Master : - PvPLeague.Other; - - if (pvpLeague == PvPLeague.Other) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_PVP_LEAGUE").FormatText(ctx.User.Username, league), DiscordColor.Red); - return; - } - - if (string.Compare(poke, Strings.All, true) == 0) - { - var confirm = await ctx.Confirm(Translator.Instance.Translate("NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS").FormatText(ctx.User.Username, subscription.PvP.Count(x => x.League == pvpLeague).ToString("N0"), pvpLeague)); - if (!confirm) - return; - - subscription.PvP - .Where(x => x.League == pvpLeague)? - .ToList()? - .ForEach(x => x.Id.Remove()); - - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS").FormatText(ctx.User.Username, pvpLeague)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - return; - } - - var validation = PokemonValidation.Validate(poke, _dep.WhConfig.MaxPokemonId); - if (validation.Valid == null || validation.Valid.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_IDS_OR_NAMES").FormatText(ctx.User.Username, string.Join(", ", validation.Invalid)), DiscordColor.Red); - return; - } - - var areas = SubscriptionAreas.GetAreas(_dep.WhConfig.Servers[guildId], city); - await RemovePvPSubscription(ctx, subscription, validation, pvpLeague, areas); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - #endregion - - #region Lureme / Luremenot - - [ - Command("lureme"), - Description("Subscribe to Pokestop lure notifications based on the lure type.") - ] - public async Task LureMeAsync(CommandContext ctx, - [Description("Comma delimited list of Pokestop lures to subscribe to notifications.")] string lureTypes = "all", - [Description("City to send the notification if the lure appears in otherwise if null all will be sent."), RemainingText] string city = "all") - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - // Check subscription limits - if (server.Subscriptions.MaxLureSubscriptions > 0 && subscription.Lures.Count >= server.Subscriptions.MaxLureSubscriptions) - { - // Max limit for Lure subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxLureSubscriptions), DiscordColor.Red); - return; - } - - var areas = SubscriptionAreas.GetAreas(server, city); - var lures = GetLures(lureTypes); - foreach (var lureType in lures) - { - var subLure = subscription.Lures.FirstOrDefault(x => x.LureType == lureType); - if (subLure != null) - { - // Existing lure subscription - // Loop all areas, check if the area is already in subs, if not add it - foreach (var area in areas) - { - if (!subLure.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - subLure.Areas.Add(area); - } - } - // Save quest subscription and continue; - // REVIEW: Might not be needed - subLure.Save(); - } - else - { - // New lure subscription - subscription.Lures.Add(new LureSubscription - { - GuildId = guildId, - UserId = ctx.User.Id, - LureType = lureType, - Areas = areas - }); - } - } - subscription.Save(); - - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE").FormatText( - ctx.User.Username, - string.Compare(lureTypes, Strings.All, true) == 0 ? Strings.All : string.Join(", ", lures), - string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(city)) - ); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - [ - Command("luremenot"), - Description("Unsubscribe from one or all subscribed Pokestop lure notifications by lure type.") - ] - public async Task LureMeNotAsync(CommandContext ctx, - [Description("Comma delimited list of Pokestop lures to unsubscribe from notifications.")] string lureTypes = "all", - [Description("City to send the notification if the raid appears in otherwise if null all will be sent."), RemainingText] string city = "all") - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (subscription == null || subscription?.Lures.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_NO_LURE_SUBSCRIPTIONS").FormatText(ctx.User.Username, string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(city)), - DiscordColor.Red - ); - return; - } - - if (string.Compare(lureTypes, Strings.All, true) == 0) - { - var result = await ctx.Confirm(Translator.Instance.Translate("NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS").FormatText(ctx.User.Username, subscription.Lures.Count.ToString("N0"))); - if (!result) - return; - - subscription.Lures.ForEach(x => x.Id.Remove()); - - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_SUCCESS_REMOVE_ALL_LURE_SUBSCRIPTIONS").FormatText(ctx.User.Username)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - return; - } - - var areas = SubscriptionAreas.GetAreas(_dep.WhConfig.Servers[guildId], city); - var lures = GetLures(lureTypes); - foreach (var lureType in lures) - { - var subLure = subscription.Lures.FirstOrDefault(x => x.LureType == lureType); - // Check if subscribed - if (subLure == null) - return; - - foreach (var area in areas) - { - if (subLure.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - var index = subLure.Areas.FindIndex(x => string.Compare(x, area, true) == 0); - subLure.Areas.RemoveAt(index); - } - } - - // Check if there are no more areas set for the lure subscription - if (subLure.Areas.Count == 0) - { - // If no more areas set for the lure subscription, delete it - if (!subLure.Id.Remove()) - { - _logger.Error($"Unable to remove lure subscription for user id {subLure.UserId} from guild id {subLure.GuildId}"); - } - } - else - { - // Save/update lure subscription if cities still assigned - subLure.Save(); - } - } - subscription.Save(); - - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText( - ctx.User.Username, - string.Compare(lureTypes, Strings.All, true) == 0 ? Strings.All : string.Join(", ", lures), - string.IsNullOrEmpty(city) - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(city)) - ); - - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - #endregion - - #region Add / Remove - - [ - Command("add"), - Description("Easily add subscriptions via guided messages.") - ] - public async Task AddAsync(CommandContext ctx) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - - var subType = await ctx.GetSubscriptionTypeSelection(); - // TODO: Maybe show current settings for selected info - switch (subType) - { - case 1: // Pokemon - #region Pokemon - { - // Check subscription limits - if (server.Subscriptions.MaxPokemonSubscriptions > 0 && subscription.Pokemon.Count >= server.Subscriptions.MaxPokemonSubscriptions) - { - // Max limit for Pokemon subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxPokemonSubscriptions), DiscordColor.Red); - return; - } - - var pkmnInput = new PokemonSubscriptionInput(ctx); - var pkmnResult = await pkmnInput.GetPokemonResult(_dep.WhConfig.MaxPokemonId); - var ivResult = await pkmnInput.GetIVResult(); - var lvlResult = await pkmnInput.GetLevelResult(); - var genderResult = await pkmnInput.GetGenderResult(); - var areasResult = await pkmnInput.GetAreasResult(guildId); - - var validPokemonNames = string.Join(", ", pkmnResult.Valid.Keys); - var result = await AddPokemonSubscription(ctx, subscription, pkmnResult, ivResult, lvlResult.MinimumLevel, lvlResult.MaximumLevel, genderResult, areasResult); - - var subscribed = result.Key; - var alreadySubscribed = result.Value; - if (subscribed.Count == 0 && alreadySubscribed.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_SPECIFIED").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var isAll = string.Compare(Strings.All, validPokemonNames, true) == 0; - var isGen = false; - for (var i = 1; i < 6; i++) - { - if (string.Compare("Gen" + i, validPokemonNames, true) == 0) - { - isGen = true; - break; - } - } - - var msg = $@" -{(ivResult.Attack >= 0 || ivResult.Defense >= 0 || ivResult.Stamina >= 0 ? $"an IV value of {ivResult.Attack}/{ivResult.Defense}/{ivResult.Stamina}" : $" a minimum IV of {ivResult.IV}%")} -{(lvlResult.MinimumLevel > 0 ? $"and between levels {lvlResult.MinimumLevel}-{lvlResult.MaximumLevel}" : null)} -{(genderResult == "*" ? null : $" and only '{genderResult}' gender types")} -and only from the following areas: {(areasResult.Count == server.Geofences.Count ? Strings.All : string.Join(", ", areasResult))}. - "; - - await ctx.RespondEmbed - ( - (subscribed.Count > 0 - ? $"{ctx.User.Username} has subscribed to **{(isAll || isGen ? "All" : string.Join("**, **", subscribed))}** notifications with {msg}." - : string.Empty) + - (alreadySubscribed.Count > 0 - ? $"\r\n{ctx.User.Username} is already subscribed to **{(isAll || isGen ? "All" : string.Join("**, **", alreadySubscribed))}** notifications with {msg}." - : string.Empty) - ); - } - #endregion - break; - case 2: // PVP - #region PvP - { - // Check subscription limits - if (server.Subscriptions.MaxPvPSubscriptions > 0 && subscription.PvP.Count >= server.Subscriptions.MaxPvPSubscriptions) - { - // Max limit for PvP Pokemon subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxPvPSubscriptions), DiscordColor.Red); - return; - } - - var pvpInput = new PvPSubscriptionInput(ctx); - var pvpPokemon = await pvpInput.GetPokemonResult(_dep.WhConfig.MaxPokemonId); - var pvpLeague = await pvpInput.GetLeagueResult(); - var pvpRank = await pvpInput.GetRankResult(); - var pvpPercent = await pvpInput.GetPercentResult(); - var pvpAreas = await pvpInput.GetAreasResult(guildId); - - var validPokemonNames = string.Join(", ", pvpPokemon.Valid.Keys); - var pvpResult = AddPvPSubscription(ctx, subscription, pvpPokemon, pvpLeague, pvpRank, pvpPercent, pvpAreas); - var subscribed = pvpResult.Key; - var alreadySubscribed = pvpResult.Value; - if (subscribed.Count == 0 && alreadySubscribed.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_SPECIFIED").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var isAll = string.Compare(Strings.All, validPokemonNames, true) == 0; - var isGen = false; - for (var i = 1; i < 6; i++) - { - if (string.Compare("Gen" + i, validPokemonNames, true) == 0) - { - isGen = true; - break; - } - } - - await ctx.RespondEmbed - ( - (subscribed.Count > 0 - ? $"{ctx.User.Username} has subscribed to **{(isAll || isGen ? "All" : string.Join("**, **", subscribed))}** notifications with a minimum {pvpLeague} League PvP ranking of {pvpRank} or higher and a minimum ranking percentage of {pvpPercent}% and from the following areas: {(pvpAreas.Count == server.Geofences.Count ? Strings.All : string.Join(", ", pvpAreas))}." - : string.Empty) + - (alreadySubscribed.Count > 0 - ? $"\r\n{ctx.User.Username} is already subscribed to **{(isAll || isGen ? "All" : string.Join("**, **", alreadySubscribed))}** notifications with a minimum {pvpLeague} League PvP ranking of '{pvpRank}' or higher and a minimum ranking percentage of {pvpPercent}% and from the following areas: {(pvpAreas.Count == server.Geofences.Count ? Strings.All : string.Join(", ", pvpAreas))}." - : string.Empty) - ); - } - #endregion - break; - case 3: // Raids - #region Raids - { - // Check subscription limits - if (server.Subscriptions.MaxRaidSubscriptions > 0 && subscription.Raids.Count >= server.Subscriptions.MaxRaidSubscriptions) - { - // Max limit for Raid subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxRaidSubscriptions), DiscordColor.Red); - return; - } - - var raidInput = new RaidSubscriptionInput(ctx); - var raidPokemon = await raidInput.GetPokemonResult(_dep.WhConfig.MaxPokemonId); - var raidAreas = await raidInput.GetAreasResult(guildId); - - var validPokemonNames = string.Join(", ", raidPokemon.Valid.Select(x => MasterFile.Instance.Pokedex[x.Key].Name + (string.IsNullOrEmpty(x.Value) ? string.Empty : "-" + x.Value))); - var raidResult = AddRaidSubscription(ctx, subscription, raidPokemon, raidAreas); - var subscribed = raidResult.Key; - var alreadySubscribed = raidResult.Value; - if (subscribed.Count == 0 && alreadySubscribed.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_SPECIFIED").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var isAll = string.Compare(Strings.All, validPokemonNames, true) == 0; - /* - var isGen = false; - for (var i = 1; i < 6; i++) - { - if (string.Compare("Gen" + i, validPokemonNames, true) == 0) - { - isGen = true; - break; - } - } - */ - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE").FormatText( - ctx.User.Username, - isAll ? Strings.All : validPokemonNames, - raidAreas.Count == server.Geofences.Count - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(string.Join(", ", raidAreas)) - )); - } - #endregion - break; - case 4: // Quests - #region Quests - { - // Check subscription limits - if (server.Subscriptions.MaxQuestSubscriptions > 0 && subscription.Quests.Count >= server.Subscriptions.MaxQuestSubscriptions) - { - // Max limit for Quest subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxQuestSubscriptions), DiscordColor.Red); - return; - } - - var questInput = new QuestSubscriptionInput(ctx); - var rewardKeyword = await questInput.GetRewardInput(); - var areas = await questInput.GetAreasResult(guildId); - - var subQuest = subscription.Quests.FirstOrDefault(x => string.Compare(x.RewardKeyword, rewardKeyword, true) == 0); - if (subQuest != null) - { - // Existing quest subscription - // Loop all areas, check if the area is already in subs, if not add it - foreach (var area in areas) - { - if (!subQuest.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - subQuest.Areas.Add(area); - } - } - // Save quest subscription and continue; - // REVIEW: Might not be needed - subQuest.Save(); - } - else - { - subscription.Quests.Add(new QuestSubscription - { - GuildId = guildId, - UserId = ctx.User.Id, - RewardKeyword = rewardKeyword, - Areas = areas - }); - } - - subscription.Save(); - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE").FormatText( - ctx.User.Username, - rewardKeyword, - areas.Count == server.Geofences.Count - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(string.Join(", ", areas)) - )); - } - #endregion - break; - case 5: // Invasions - #region - { - // Check subscription limits - if (server.Subscriptions.MaxInvasionSubscriptions > 0 && subscription.Invasions.Count >= server.Subscriptions.MaxInvasionSubscriptions) - { - // Max limit for Invasion subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxInvasionSubscriptions), DiscordColor.Red); - return; - } - - var invasionInput = new InvasionSubscriptionInput(ctx); - var invasionPokemon = await invasionInput.GetPokemonResult(_dep.WhConfig.MaxPokemonId); - var invasionAreas = await invasionInput.GetAreasResult(guildId); - - var valid = string.Join(",", invasionPokemon.Valid.ToList()); - var validPokemonNames = string.Join(", ", invasionPokemon.Valid.Select(x => MasterFile.Instance.Pokedex[x.Key].Name)); - var subInvasion = subscription.Invasions.FirstOrDefault(x => x.RewardPokemonIdString == valid); - if (subInvasion != null) - { - // Existing invasion subscription - // Loop all areas, check if the area is already in subs, if not add it - foreach (var area in invasionAreas) - { - if (!subInvasion.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - subInvasion.Areas.Add(area); - } - } - // Save quest subscription and continue; - // REVIEW: Might not be needed - subInvasion.Save(); - } - else - { - // New invasion subscription - subscription.Invasions.Add(new InvasionSubscription - { - GuildId = guildId, - UserId = ctx.User.Id, - RewardPokemonIdString = valid, - Areas = invasionAreas - }); - } - var result = subscription.Save(); - if (!result) - { - } - - var isAll = string.Compare(Strings.All, validPokemonNames, true) == 0; - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE").FormatText( - ctx.User.Username, - isAll ? Strings.All : validPokemonNames, - invasionAreas.Count == server.Geofences.Count - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(string.Join(", ", invasionAreas)) - )); - } - #endregion - break; - case 6: // Gyms - #region Gyms - { - // Check subscription limits - if (server.Subscriptions.MaxGymSubscriptions > 0 && subscription.Gyms.Count >= server.Subscriptions.MaxGymSubscriptions) - { - // Max limit for Gym subscriptions reached - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT", ctx.User.Username, server.Subscriptions.MaxGymSubscriptions), DiscordColor.Red); - return; - } - - var gymMessage = (await ctx.RespondEmbed($"Enter a gym name (or partial name) to get raid subscriptions from:", DiscordColor.Blurple)).FirstOrDefault(); - var gymName = await ctx.WaitForUserChoice(); - await gymMessage.DeleteAsync(); - - if (string.IsNullOrEmpty(gymName)) - { - await ctx.RespondEmbed($"{ctx.User.Username} Gym Name must not be empty", DiscordColor.Blurple); - return; - } - - var gymExists = subscription.Gyms.Exists(x => string.Compare(x.Name, gymName, true) == 0); - if (gymExists) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_GYM_SUBSCRIPTION_EXISTS").FormatText(ctx.User.Username, gymName), DiscordColor.Red); - return; - } - - subscription.Gyms.Add(new GymSubscription - { - GuildId = guildId, - UserId = ctx.User.Id, - Name = gymName - }); - subscription.Save(); - - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_GYM_SUBSCRIPTION_ADDED").FormatText(ctx.User.Username, gymName)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - break; - #endregion - case 0: // Invalid entry - await ctx.RespondEmbed($"Invalid entry specified, please try again...", DiscordColor.Red); - break; - } - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - private async Task, List>> AddPokemonSubscription(CommandContext ctx, SubscriptionObject subscription, PokemonValidation validation, IVResult ivResult, int minLevel, int maxLevel, string gender, List areas) - { - var subscribed = new List(); - var alreadySubscribed = new List(); - var valid = string.Join(",", validation.Valid.Keys.ToList()); - var forms = string.Join(",", validation.Valid.Values.ToList()); - //foreach (var (pokemonId, form) in validation.Valid) - { - //if (!MasterFile.Instance.Pokedex.ContainsKey(pokemonId)) - if (validation.Invalid.Count > 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_POKEMON_ID").FormatText(ctx.User.Username, string.Join(", ", validation.Invalid)), DiscordColor.Red); - //continue; - return new KeyValuePair, List>(); - } - - //var pokemon = MasterFile.Instance.Pokedex[pokemonId]; - //var name = string.IsNullOrEmpty(form) ? pokemon.Name : pokemon.Name + "-" + form; - var isModOrHigher = await ctx.Client.IsModeratorOrHigher(ctx.User.Id, subscription.GuildId, _dep.WhConfig); - - foreach (var (validId, validForm) in validation.Valid) - { - // Check if common type pokemon e.g. Pidgey, Ratatta, Spinarak 'they are beneath him and he refuses to discuss them further' - if (validId.IsCommonPokemon() && ivResult.IV < Strings.CommonTypeMinimumIV && !isModOrHigher) - { - var pokemon = MasterFile.Instance.Pokedex[validId]; - var name = string.IsNullOrEmpty(validForm) ? pokemon.Name : pokemon.Name + "-" + validForm; - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_COMMON_TYPE_POKEMON").FormatText(ctx.User.Username, name, Strings.CommonTypeMinimumIV), DiscordColor.Red); - continue; - } - } - - var subPkmn = subscription.Pokemon.FirstOrDefault(x => x.PokemonIdString == valid && x.FormsString == forms); - // Always ignore the user's input for Unown and set it to 0 by default. - //var minIV = pokemonId.IsRarePokemon() ? 0 : ivResult.IV; - //var minLvl = pokemonId.IsRarePokemon() ? 0 : minLevel; - //var maxLvl = pokemonId.IsRarePokemon() ? 35 : maxLevel; - var hasStatsSet = ivResult.Attack >= 0 || ivResult.Defense >= 0 || ivResult.Stamina >= 0; - - if (subPkmn == null) - { - // Does not exist, create. - subscription.Pokemon.Add(new PokemonSubscription - { - GuildId = subscription.GuildId, - UserId = ctx.User.Id, - PokemonIdString = valid, - FormsString = forms, - MinimumIV = ivResult.IV, - MinimumLevel = minLevel, - MaximumLevel = maxLevel, - Gender = gender, - IVList = hasStatsSet ? new List { $"{ivResult.Attack}/{ivResult.Defense}/{ivResult.Stamina}" } : new List(), - Areas = areas - }); - subscribed.Add(valid); - //continue; - } - else if (ivResult.IV != subPkmn.MinimumIV || - forms != subPkmn.FormsString || - minLevel != subPkmn.MinimumLevel || - maxLevel != subPkmn.MaximumLevel || - gender != subPkmn.Gender || - (!subPkmn.IVList.Contains($"{ivResult.Attack}/{ivResult.Defense}/{ivResult.Stamina}") && hasStatsSet) || - !SubscriptionAreas.IsAreasEqual(subPkmn.Areas, areas)) - { - subPkmn.FormsString = forms; - subPkmn.MinimumIV = hasStatsSet ? subPkmn.MinimumIV : ivResult.IV; - subPkmn.MinimumLevel = minLevel; - subPkmn.MaximumLevel = maxLevel; - subPkmn.Gender = gender; - if (hasStatsSet) - { - subPkmn.IVList.Add($"{ivResult.Attack}/{ivResult.Defense}/{ivResult.Stamina}"); - } - foreach (var area in areas) - { - if (!subPkmn.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - subPkmn.Areas.Add(area); - } - } - subscribed.Add(valid); - //continue; - } - - // Already subscribed to the same Pokemon and form - //alreadySubscribed.Add(name); - } - var result = subscription.Save(); - if (!result) - { - } - return new KeyValuePair, List>(subscribed, alreadySubscribed); - } - - private KeyValuePair, List> AddPvPSubscription(CommandContext ctx, SubscriptionObject subscription, PokemonValidation validation, PvPLeague league, int minRank, double minPercent, List areas) - { - var alreadySubscribed = new List(); - var subscribed = new List(); - - var valid = string.Join(",", validation.Valid.Keys.ToList()); - var forms = string.Join(",", validation.Valid.Values.ToList()); - - var subPkmn = subscription.PvP.FirstOrDefault(x => x.PokemonIdString == valid && - x.FormsString == forms && - x.League == league); - if (subPkmn == null) - { - //Does not exist, create. - subscription.PvP.Add(new PvPSubscription - { - GuildId = subscription.GuildId, - UserId = ctx.User.Id, - PokemonIdString = valid, - FormsString = forms, - League = league, - MinimumRank = minRank, - MinimumPercent = minPercent, - Areas = areas - }); - subscribed.Add(valid); - } - else - { - //Exists, check if anything changed. - if (minRank != subPkmn.MinimumRank || - minPercent != subPkmn.MinimumPercent || - !SubscriptionAreas.IsAreasEqual(subPkmn.Areas, areas)) - { - subPkmn.MinimumRank = minRank; - subPkmn.MinimumPercent = minPercent; - foreach (var area in areas) - { - if (!subPkmn.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - subPkmn.Areas.Add(area); - } - } - subscribed.Add(valid); - } - } - - var result = subscription.Save(); - if (!result) - { - } - return new KeyValuePair, List>(subscribed, alreadySubscribed); - } - - private KeyValuePair, List> AddRaidSubscription(CommandContext ctx, SubscriptionObject subscription, PokemonValidation validation, List areas) - { - var alreadySubscribed = new List(); - var subscribed = new List(); - foreach (var (pokemonId, form) in validation.Valid) - { - var subRaid = subscription.Raids.FirstOrDefault(x => x.PokemonId == pokemonId && string.Compare(x.Form, form, true) == 0); - if (subRaid != null) - { - // Existing raid subscription - // Loop all areas, check if the area is already in subs, if not add it - foreach (var area in areas) - { - if (!subRaid.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - subRaid.Areas.Add(area); - } - } - // Save raid subscription and continue; - // REVIEW: Might not be needed - subRaid.Save(); - continue; - } - - // New raid subscription - subscription.Raids.Add(new RaidSubscription - { - GuildId = subscription.GuildId, - UserId = ctx.User.Id, - PokemonId = pokemonId, - Form = form, - Areas = areas - }); - } - var result = subscription.Save(); - if (!result) - { - } - return new KeyValuePair, List>(subscribed, alreadySubscribed); - } - - [ - Command("remove"), - Aliases("rem", "rm", "r"), - Description("Easily remove subscriptions via guided messages.") - ] - public async Task RemoveAsync(CommandContext ctx) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return; - - var server = _dep.WhConfig.Servers[guildId]; - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - - var subType = await ctx.GetSubscriptionTypeSelection(); - // TODO: Maybe show current settings for selected info - switch (subType) - { - case 1: // Pokemon - #region Pokemon - { - if (subscription == null || subscription?.Pokemon.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_NO_POKEMON_SUBSCRIPTIONS").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var pkmnInput = new PokemonSubscriptionInput(ctx); - var pkmnResult = await pkmnInput.GetPokemonResult(_dep.WhConfig.MaxPokemonId); - var areasResult = await pkmnInput.GetAreasResult(guildId); - - await RemovePokemonSubscription(ctx, subscription, pkmnResult, areasResult); - break; - } - #endregion - case 2: // PVP - #region PvP - { - if (subscription == null || subscription?.PvP.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_NO_POKEMON_SUBSCRIPTIONS").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var pvpInput = new PvPSubscriptionInput(ctx); - var pvpPokemonResult = await pvpInput.GetPokemonResult(_dep.WhConfig.MaxPokemonId); - var pvpLeagueResult = await pvpInput.GetLeagueResult(); - var pvpAreasResult = await pvpInput.GetAreasResult(guildId); - - await RemovePvPSubscription(ctx, subscription, pvpPokemonResult, pvpLeagueResult, pvpAreasResult); - } - #endregion - break; - case 3: // Raids - #region Raids - { - if (subscription == null || subscription?.Raids.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_NO_RAID_SUBSCRIPTIONS").FormatText(ctx.User.Username, DiscordColor.Red)); - return; - } - - var raidInput = new RaidSubscriptionInput(ctx); - var raidPokemonResult = await raidInput.GetPokemonResult(_dep.WhConfig.MaxPokemonId); - var raidAreasResult = await raidInput.GetAreasResult(guildId); - - await RemoveRaidSubscription(ctx, subscription, null, raidAreasResult); - } - #endregion - break; - case 4: // Quests - #region Quests - { - if (subscription == null || subscription?.Quests.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_NO_QUEST_SUBSCRIPTIONS").FormatText(ctx.User.Username, DiscordColor.Red)); - return; - } - - var questInput = new QuestSubscriptionInput(ctx); - var rewardResult = await questInput.GetRewardInput(); - var areasResult = await questInput.GetAreasResult(guildId); - - var notSubscribed = new List(); - var unsubscribed = new List(); - await ctx.TriggerTypingAsync(); - - if (string.Compare(rewardResult, Strings.All, true) == 0) - { - var removeAllResult = await ctx.Confirm(Translator.Instance.Translate("NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS").FormatText(ctx.User.Username, subscription.Quests.Count.ToString("N0"))); - if (!removeAllResult) - return; - - subscription.Quests.ForEach(x => x.Id.Remove()); - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_CONFIRM_SUCCESS_ALL_QUEST_SUBSCRIPTIONS").FormatText(ctx.User.Username)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - return; - } - - var subQuest = subscription.Quests.FirstOrDefault(x => string.Compare(x.RewardKeyword, rewardResult, true) == 0); - // Check if subscribed - if (subQuest == null) - return; - - foreach (var area in areasResult) - { - if (subQuest.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - var index = subQuest.Areas.FindIndex(x => string.Compare(x, area, true) == 0); - subQuest.Areas.RemoveAt(index); - } - } - - // Check if there are no more areas set for the Pokemon subscription - if (subQuest.Areas.Count == 0) - { - // If no more areas set for the Pokemon subscription, delete it - if (!subQuest.Id.Remove()) - { - _logger.Error($"Unable to remove quest subscription for user id {subQuest.UserId} from guild id {subQuest.GuildId}"); - } - } - else - { - // Save/update quest subscription if cities still assigned - subQuest.Save(); - } - subscription.Save(); - - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText( - ctx.User.Username, - rewardResult, - areasResult.Count == server.Geofences.Count - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(string.Join(", ", areasResult))) - ); - } - #endregion - break; - case 5: // Invasions - #region - { - if (subscription == null || subscription?.Invasions.Count == 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_NO_INVASION_SUBSCRIPTIONS").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var invasionInput = new InvasionSubscriptionInput(ctx); - var invasionPokemonResult = await invasionInput.GetPokemonResult(_dep.WhConfig.MaxPokemonId); - var invasionAreasResult = await invasionInput.GetAreasResult(guildId); - - var valid = string.Join(",", invasionPokemonResult.Valid.Keys.ToList()); - var subInvasion = subscription.Invasions.FirstOrDefault(x => x.RewardPokemonIdString == valid); - // Check if subscribed - if (subInvasion == null) - return; - - foreach (var area in invasionAreasResult) - { - if (subInvasion.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - var index = subInvasion.Areas.FindIndex(x => string.Compare(x, area, true) == 0); - subInvasion.Areas.RemoveAt(index); - } - } - - // Check if there are no more areas set for the invasion subscription - if (subInvasion.Areas.Count == 0) - { - // If no more areas set for the invasion subscription, delete it - if (!subInvasion.Id.Remove()) - { - _logger.Error($"Unable to remove invasion subscription for user id {subInvasion.UserId} from guild id {subInvasion.GuildId}"); - } - } - else - { - // Save/update invasion subscription if cities still assigned - subInvasion.Save(); - } - subscription.Save(); - - var validIds = valid.Split(',').Select(x => uint.Parse(x)); - var validPokemonNames = string.Join("**, **", validIds.Select(x => MasterFile.Instance.Pokedex[x].Name)); - var isAll = string.Compare(Strings.All, validPokemonNames, true) == 0; - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText( - ctx.User.Username, - isAll ? Strings.All : validPokemonNames, - invasionAreasResult.Count == server.Geofences.Count - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(validPokemonNames) - )); - } - #endregion - break; - case 6: // Gyms - #region Gyms - { - var gymInput = (await ctx.RespondEmbed($"Enter a gym name to remove from receiving raid notifcations:", DiscordColor.Blurple)).FirstOrDefault(); - var gymName = await ctx.WaitForUserChoice(); - await gymInput.DeleteAsync(); - - if (string.Compare(Strings.All, gymName, true) == 0) - { - var result = await ctx.Confirm(Translator.Instance.Translate("NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS").FormatText(ctx.User.Username, subscription.Gyms.Count.ToString("N0"))); - if (!result) - return; - - subscription.Gyms.ForEach(x => x.Id.Remove()); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS").FormatText(ctx.User.Username)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - return; - } - - subscription.Gyms - .Where(x => string.Compare(x.Name, gymName, true) == 0)? - .ToList()? - .ForEach(x => x.Id.Remove()); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_GYM_SUBSCRIPTION_REMOVED").FormatText(ctx.User.Username, gymName)); - } - break; - #endregion - case 0: // Invalid entry - await ctx.RespondEmbed($"Invalid entry specified, please try again...", DiscordColor.Red); - break; - } - - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - private async Task RemovePokemonSubscription(CommandContext ctx, SubscriptionObject subscription, PokemonValidation validation, List areas) - { - var error = false; - var valid = string.Join(",", validation.Valid.Keys.ToList()); - var forms = string.Join(",", validation.Valid.Values.ToList()); - //foreach (var (pokemonId, form) in validation.Valid) - { - var subPkmn = subscription.Pokemon.FirstOrDefault(x => x.PokemonIdString == valid && x.FormsString == forms); - if (subPkmn == null) - //continue; - return; - - foreach (var area in areas) - { - // TODO: Remove all areas to prevent lingering ones? - if (subPkmn.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - var index = subPkmn.Areas.FindIndex(x => string.Compare(x, area, true) == 0); - subPkmn.Areas.RemoveAt(index); - } - } - - // Check if there are no more areas set for the Pokemon subscription - if (areas.Count == 0) - { - // If no more areas set for the Pokemon subscription, delete it - var result = subPkmn.Id.Remove(); - if (!result) - { - error = true; - //TODO: Collect list of failed. - } - } - else - { - // Save/update Pokemon subscription if cities still assigned - subPkmn.Save(); - } - } - - if (error) - { - var pokemonNames = validation.Valid.Select(x => MasterFile.Instance.Pokedex[x.Key].Name + (string.IsNullOrEmpty(x.Value) ? string.Empty : "-" + x.Value)); - await ctx.RespondEmbed(Translator.Instance.Translate("FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText(ctx.User.Username, pokemonNames), DiscordColor.Red); - return; - } - } - - private async Task RemovePvPSubscription(CommandContext ctx, SubscriptionObject subscription, PokemonValidation validation, PvPLeague league, List areas) - { - var error = false; - var valid = string.Join(",", validation.Valid.Keys.ToList()); - var forms = string.Join(",", validation.Valid.Values.ToList()); - var pokemonNames = validation.Valid.Select(x => MasterFile.Instance.Pokedex[x.Key].Name + (string.IsNullOrEmpty(x.Value) ? string.Empty : "-" + x.Value)); - foreach (var (pokemonId, form) in validation.Valid) - { - var subPvP = subscription.PvP.FirstOrDefault(x => x.PokemonIdString == valid && x.FormsString == forms && x.League == league); - if (subPvP == null) - continue; - - foreach (var area in areas) - { - if (subPvP.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - var index = subPvP.Areas.FindIndex(x => string.Compare(x, area, true) == 0); - subPvP.Areas.RemoveAt(index); - } - } - - // If no city specified then remove the whole subscription - if (areas.Count == 0) - { - // If no more areas set for the PvP Pokemon subscription, delete it - var result = subPvP.Id.Remove(); - if (!result) - { - error = true; - //TODO: Collect list of failed. - } - } - else - { - // Save/update PvP Pokemon subscription if cities still assigned - subPvP.Save(); - } - } - - if (error) - { - await ctx.RespondEmbed(Translator.Instance.Translate("FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText(ctx.User.Username, string.Join(", ", pokemonNames)), DiscordColor.Red); - return; - } - - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText(ctx.User.Username, string.Join("**, **", pokemonNames), league)); - } - - private async Task RemoveRaidSubscription(CommandContext ctx, SubscriptionObject subscription, PokemonValidation validation, List areas) - { - var server = _dep.WhConfig.Servers[subscription.GuildId]; - foreach (var item in validation.Valid) - { - var pokemonId = item.Key; - var form = item.Value; - var subRaid = subscription.Raids.FirstOrDefault(x => x.PokemonId == pokemonId && (string.IsNullOrEmpty(x.Form) || string.Compare(x.Form, form, true) == 0)); - // Check if subscribed - if (subRaid == null) - continue; - - foreach (var area in areas) - { - if (subRaid.Areas.Select(x => x.ToLower()).Contains(area.ToLower())) - { - var index = subRaid.Areas.FindIndex(x => string.Compare(x, area, true) == 0); - subRaid.Areas.RemoveAt(index); - } - } - - // Check if there are no more areas set for the Pokemon subscription - if (areas.Count == 0) - { - // If no more areas set for the Pokemon subscription, delete it - if (!subRaid.Id.Remove()) - { - _logger.Error($"Unable to remove raid subscription for user id {subRaid.UserId} from guild id {subRaid.GuildId}"); - } - } - else - { - // Save/update raid subscription if cities still assigned - subRaid.Save(); - } - } - - var validPokemonNames = string.Join("**, **", validation.Valid.Select(x => MasterFile.Instance.Pokedex[x.Key].Name + (string.IsNullOrEmpty(x.Value) ? string.Empty : "-" + x.Value)));; - var isAll = string.Compare(Strings.All, validPokemonNames, true) == 0; - await ctx.RespondEmbed(Translator.Instance.Translate("SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE").FormatText( - ctx.User.Username, - isAll ? Strings.All : validPokemonNames, - areas.Count == server.Geofences.Count - ? Translator.Instance.Translate("SUBSCRIPTIONS_FROM_ALL_CITIES") - : Translator.Instance.Translate("SUBSCRIPTIONS_FROM_CITY").FormatText(validPokemonNames)) - ); - } - - #endregion - - #region Reset / Clear / Wipe - - [ - Command("reset"), - Aliases("clear", "wipe") - ] - public async Task ResetAsync(CommandContext ctx, - [Description("Discord user mention string.")] string mention = "") - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - if (string.IsNullOrEmpty(mention)) - { - var userResult = await ctx.Confirm("Are you sure you want to delete all of your subscriptions? This action is irreversible and cannot be undone."); - if (!userResult) return; - - if (!SubscriptionManager.RemoveAllUserSubscriptions(guildId, ctx.User.Id)) - { - // TODO: Localize - await ctx.RespondEmbed($"{ctx.User.Username} failed to cleared all of your subscriptions", DiscordColor.Red); - return; - } - - // TODO: Localize - await ctx.RespondEmbed($"{ctx.User.Username} has cleared all subscriptions", DiscordColor.Green); - return; - } - - var isModOrHigher = await ctx.Client.IsModeratorOrHigher(ctx.User.Id, guildId, _dep.WhConfig); - if (!isModOrHigher) - { - await ctx.RespondEmbed(Translator.Instance.Translate("MSG_NOT_MODERATOR_OR_HIGHER").FormatText(ctx.User.Mention), DiscordColor.Red); - return; - } - - var userId = ConvertMentionToUserId(mention); - if (userId <= 0) - { - await ctx.RespondEmbed(Translator.Instance.Translate("MSG_INVALID_USER_MENTION").FormatText(ctx.User.Mention, mention), DiscordColor.Red); - return; - } - - var user = await ctx.Client.GetUserAsync(userId); - if (user == null) - { - _logger.Warn($"Failed to get Discord user with id {userId}."); - return; - } - - var modResult = await ctx.Confirm($"{ctx.User.Username} is about to delete all of {user.Username}'s subscriptions. This action is irreversible and cannot be undone, are you sure you want to do this?"); - if (!modResult) return; - - if (!SubscriptionManager.RemoveAllUserSubscriptions(guildId, user.Id)) - { - // TODO: Localize - await ctx.RespondEmbed($"{ctx.User.Username} failed to cleared all of {user.Username}'s subscriptions", DiscordColor.Red); - return; - } - - // TODO: Localize - await ctx.RespondEmbed($"{ctx.User.Username} has cleared all of {user.Username}'s subscriptions", DiscordColor.Green); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - #endregion - - #region Import / Export - - [ - Command("import"), - Description("Import your saved notification subscription settings for Pokemon, Raids, Quests, Pokestops, and Gyms.") - ] - public async Task ImportAsync(CommandContext ctx) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_IMPORT_UPLOAD_FILE").FormatText(ctx.User.Username)); - var xc = await _dep.Interactivity.WaitForMessageAsync(x => x.Author.Id == ctx.User.Id && x.Attachments.Count > 0, TimeSpan.FromSeconds(180)); - if (xc == null) - return; - - var attachment = xc.Message.Attachments[0]; - if (attachment == null) - return; - - var data = NetUtil.Get(attachment.Url); - if (string.IsNullOrEmpty(data)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_IMPORT_INVALID_ATTACHMENT").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var oldSubscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (oldSubscription != null) - { - var result = SubscriptionManager.RemoveAllUserSubscriptions(guildId, ctx.User.Id); - if (!result) - { - _logger.Error($"Failed to clear old user subscriptions for {ctx.User.Username} ({ctx.User.Id}) in guild {ctx.Guild?.Name} ({ctx.Guild?.Id}) before importing."); - } - } - - var subscription = JsonConvert.DeserializeObject(data); - if (subscription == null) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_IMPORT_MALFORMED_DATA").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - subscription.Save(); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_IMPORT_SUCCESS").FormatText(ctx.User.Username)); - } - - [ - Command("export"), - Description("Export your current notification subscription settings for Pokemon, Raids, Quests, Pokestops, and Gyms.") - ] - public async Task ExportAsync(CommandContext ctx) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (subscription == null) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_EXPORT_NO_SUBSCRIPTIONS").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - var json = JsonConvert.SerializeObject(subscription, Formatting.Indented); - var tmpFile = Path.Combine(Path.GetTempPath(), $"{ctx.Guild?.Name}_{ctx.User.Username}_subscriptions_{DateTime.Now:yyyy-MM-dd}.json"); - File.WriteAllText(tmpFile, json); - - await ctx.RespondWithFileAsync(tmpFile, Translator.Instance.Translate("NOTIFY_EXPORT_SUCCESS").FormatText(ctx.User.Username)); - } - - #endregion - - #region Icon Style - - [ - Command("icons"), - Description("List all available icon styles.") - ] - public async Task IconsAsync(CommandContext ctx) - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - var description = "**Available Icon Styles:**\r\n" + - $"- {string.Join($"{Environment.NewLine}- ", _dep.WhConfig.IconStyles.Keys)}" + - Environment.NewLine + - Environment.NewLine + - $"*Type `{_dep.WhConfig.Servers[guildId].CommandPrefix}set-icons iconStyle` to use that icon style when receiving notifications from {Strings.BotName}.*"; - var eb = new DiscordEmbedBuilder - { - Color = DiscordColor.Green, - Description = description, - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = $"{ctx.Guild?.Name} | {DateTime.Now}", - IconUrl = ctx.Guild?.IconUrl - } - }; - - await ctx.TriggerTypingAsync(); - await ctx.RespondAsync(embed: eb.Build()); - } - - [ - Command("set-icons"), - Description("Set the icon style to use when receiving notifications via direct message.") - ] - public async Task SetIconAsync(CommandContext ctx, - [Description("Icon style to use.")] string iconStyle = "Default") - { - if (!await CanExecute(ctx)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - if (!_dep.WhConfig.IconStyles.Select(x => x.Key.ToLower()).Contains(iconStyle.ToLower())) - { - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_INVALID_ICON_STYLE").FormatText(ctx.User.Username, _dep.WhConfig.Servers[guildId].CommandPrefix), DiscordColor.Red); - return; - } - - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, ctx.User.Id); - if (subscription == null) - { - await ctx.RespondEmbed(Translator.Instance.Translate("MSG_USER_NOT_SUBSCRIBED").FormatText(ctx.User.Username), DiscordColor.Red); - return; - } - - subscription.IconStyle = iconStyle; - subscription.Save(); - - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_ICON_STYLE_CHANGE").FormatText(ctx.User.Username, iconStyle)); - _dep.SubscriptionProcessor.Manager.ReloadSubscriptions(); - } - - #endregion - - [ - Command("stats"), - Description("Notification statistics for alarms and subscriptions of Pokemon, Raids, and Quests.") - ] - public async Task StatsAsync(CommandContext ctx) - { - var stats = Statistics.Instance; - var eb = new DiscordEmbedBuilder - { - Title = $"{DateTime.Now.ToLongDateString()} Statistics", - Color = DiscordColor.Blurple, - ThumbnailUrl = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQdNi3XTIwl8tkN_D6laRdexk0fXJ-fMr0C_s4ju-bXw2kcDSRI" - }; - - var sb = new StringBuilder(); - sb.AppendLine($"__**Pokemon**__"); - sb.AppendLine($"Alarms Sent: {stats.PokemonAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {stats.TotalReceivedPokemon:N0}"); - sb.AppendLine($"With IV Stats: {stats.TotalReceivedPokemonWithStats:N0}"); - sb.AppendLine($"Missing IV Stats: {stats.TotalReceivedPokemonMissingStats:N0}"); - sb.AppendLine($"Subscriptions Sent: {stats.SubscriptionPokemonSent:N0}"); - sb.AppendLine(); - sb.AppendLine("__**Raids**__"); - sb.AppendLine($"Egg Alarms Sent: {stats.EggAlarmsSent:N0}"); - sb.AppendLine($"Raids Alarms Sent: {stats.RaidAlarmsSent:N0}"); - sb.AppendLine($"Total Eggs Received: {stats.TotalReceivedRaids:N0}"); - sb.AppendLine($"Total Raids Received: {stats.TotalReceivedRaids:N0}"); - sb.AppendLine($"Raid Subscriptions Sent: {stats.SubscriptionRaidsSent:N0}"); - sb.AppendLine(); - sb.AppendLine($"__**Quests**__"); - sb.AppendLine($"Alarms Sent: {stats.QuestAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {stats.TotalReceivedQuests:N0}"); - sb.AppendLine($"Subscriptions Sent: {stats.SubscriptionQuestsSent:N0}"); - sb.AppendLine(); - sb.AppendLine($"__**Invasions**__"); - sb.AppendLine($"Alarms Sent: {stats.InvasionAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {stats.TotalReceivedInvasions:N0}"); - sb.AppendLine($"Subscriptions Sent: {stats.SubscriptionInvasionsSent:N0}"); - sb.AppendLine(); - sb.AppendLine($"__**Lures**__"); - sb.AppendLine($"Alarms Sent: {stats.LureAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {stats.TotalReceivedLures:N0}"); - sb.AppendLine(); - sb.AppendLine($"__**Gyms**__"); - sb.AppendLine($"Alarms Sent: {stats.GymAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {stats.TotalReceivedGyms:N0}"); - sb.AppendLine(); - sb.AppendLine($"__**Weather**__"); - sb.AppendLine($"Alarms Sent: {stats.WeatherAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {stats.TotalReceivedWeathers:N0}"); - sb.AppendLine(); - //var hundos = string.Join(Environment.NewLine, stats.Hundos.Select(x => $"{x.Key}: {MasterFile.Instance.Pokedex[x.Value.Id].Name} {x.Value.IV} IV {x.Value.CP} CP")); - //sb.AppendLine($"**Recent 100% Spawns**"); - //sb.AppendLine(string.IsNullOrEmpty(hundos) ? "None" : hundos); - - eb.Description = sb.ToString(); - eb.Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = $"{(ctx.Guild?.Name ?? Strings.Creator)} | {DateTime.Now}", - IconUrl = ctx.Guild?.IconUrl - }; - await ctx.RespondAsync(embed: eb); - } - - #region Private Methods - - private async Task EnableDisableUserSubscriptions(CommandContext ctx, DiscordUser user, ulong guildId) - { - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, user.Id); - if (subscription == null) - { - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("MSG_USER_NOT_SUBSCRIBED").FormatText(user.Username), DiscordColor.Red); - return; - } - - var cmd = ctx.Message.Content.TrimStart('.', ' '); - var isEnableCommand = cmd.ToLower().Contains("enable"); - subscription.Status = isEnableCommand - ? NotificationStatusType.All - : NotificationStatusType.None; - subscription.Update(); - //subscription.Save(); - - await ctx.TriggerTypingAsync(); - await ctx.RespondEmbed(Translator.Instance.Translate("NOTIFY_ENABLE_DISABLE").FormatText(user.Username, cmd)); - } - - private async Task SendUserSubscriptionSettings(DiscordClient client, DiscordUser receiver, DiscordUser user, ulong guildId) - { - var messages = await BuildUserSubscriptionSettings(client, user, guildId); - for (var i = 0; i < messages.Count; i++) - { - var message = messages[i]; - message = message.Length > 2000 ? message.Substring(0, Math.Min(message.Length, 1500)) : message; - var eb = new DiscordEmbedBuilder - { - Title = Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_TITLE").FormatText(user.Username, i + 1, messages.Count), - Description = message, - Color = DiscordColor.CornflowerBlue, - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = $"{Strings.Creator} | {DateTime.Now}" - } - }; - await client.SendDirectMessage(receiver, eb.Build()); - } - } - - private async Task> BuildUserSubscriptionSettings(DiscordClient client, DiscordUser user, ulong guildId) - { - var member = await client.GetMemberById(guildId, user.Id); - if (member == null) - { - var error = $"Failed to get discord member from id {user.Id}."; - _logger.Error(error); - return new List { error }; - } - - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - return null; - - var server = _dep.WhConfig.Servers[guildId]; - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, user.Id); - var isSubbed = subscription?.Pokemon.Count > 0 || subscription?.PvP.Count > 0 || subscription?.Raids.Count > 0 || subscription?.Quests.Count > 0 || subscription?.Invasions.Count > 0 || subscription?.Gyms.Count > 0 || subscription?.Lures.Count > 0; - var hasPokemon = isSubbed && subscription?.Pokemon?.Count > 0; - var hasPvP = isSubbed && subscription?.PvP?.Count > 0; - var hasRaids = isSubbed && subscription?.Raids?.Count > 0; - var hasGyms = isSubbed && subscription?.Gyms?.Count > 0; - var hasQuests = isSubbed && subscription?.Quests?.Count > 0; - var hasInvasions = isSubbed && subscription?.Invasions?.Count > 0; - var hasLures = isSubbed && subscription?.Lures?.Count > 0; - var messages = new List(); - var isSupporter = await client.IsSupporterOrHigher(user.Id, guildId, _dep.WhConfig); - - var areas = server.Geofences.Select(x => x.Name).ToList(); - var feeds = member?.Roles?.Select(x => x.Name).Where(x => areas.Contains(x))?.ToList(); - if (feeds == null) - return messages; - feeds.Sort(); - - var activeLocation = subscription.Locations?.FirstOrDefault(x => string.Compare(x.Name, subscription.Location, true) == 0); - var locationLink = $"[{activeLocation?.Latitude},{activeLocation?.Longitude}]({string.Format(Strings.GoogleMaps, activeLocation?.Latitude, activeLocation?.Longitude)})"; - var sb = new StringBuilder(); - sb.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_ENABLED").FormatText(subscription.Status.ToString())); - sb.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_ICON_STYLE").FormatText(subscription.IconStyle)); - sb.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_DISTANCE").FormatText(activeLocation?.DistanceM == 0 ? - Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET") : - Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_DISTANCE_KM").FormatText(activeLocation?.DistanceM.ToString("N0"), locationLink))); - if (!string.IsNullOrEmpty(subscription.PhoneNumber)) - { - sb.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_PHONE_NUMBER").FormatText(subscription.PhoneNumber)); - } - sb.AppendLine(Environment.NewLine); - - if (hasPokemon) - { - var pokemon = subscription.Pokemon; - // TODO: pokemon.Sort((x, y) => x.PokemonId.CompareTo(y.PokemonId)); - - var exceedsLimits = pokemon.Count > Strings.MaxPokemonDisplayed; - var defaultIV = 0; - var defaultCount = 0; - var results = pokemon.GroupBy(p => p.MinimumIV, (key, g) => new { IV = key, Pokes = g.ToList() }); - foreach (var result in results) - { - if (result.Pokes.Count > defaultIV) - { - defaultIV = result.IV; - defaultCount = result.Pokes.Count; - } - } - - sb.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_POKEMON").FormatText(pokemon.Count, server.Subscriptions.MaxPokemonSubscriptions == 0 ? "∞" : server.Subscriptions.MaxPokemonSubscriptions.ToString("N0"))); - sb.Append("```"); - - if (exceedsLimits) - { - sb.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED").FormatText(defaultIV, defaultCount.ToString("N0"))); - } - - var cityRoles = server.Geofences.Select(x => x.Name); - foreach (var poke in subscription.Pokemon) - { - if (poke.MinimumIV == defaultIV && poke.IVList.Count == 0 && exceedsLimits) - continue; - - //if (!MasterFile.Instance.Pokedex.ContainsKey(poke.PokemonId)) - // continue; - - //var pkmn = MasterFile.Instance.Pokedex[poke.PokemonId]; - var form = string.IsNullOrEmpty(poke.FormsString) ? string.Empty : $" ({string.Join(", ", poke.FormsString)})"; - //var msg = $"{poke.PokemonId}: {pkmn.Name}{form} {(poke.MinimumIV + "%+ " + (poke.HasStats ? string.Join(", ", poke.IVList) : string.Empty))}{(poke.MinimumLevel > 0 ? $", L{poke.MinimumLevel}+" : null)}{(poke.Gender == "*" ? null : $", Gender: {poke.Gender}")}"; - var msg = $"{poke.PokemonIdString}: {poke}{form} {(poke.MinimumIV + "%+ " + (poke.HasStats ? string.Join(", ", poke.IVList) : string.Empty))}{(poke.MinimumLevel > 0 ? $", L{poke.MinimumLevel}+" : null)}{(poke.Gender == "*" ? null : $", Gender: {poke.Gender}")}"; - var isAllCities = cityRoles.ScrambledEquals(poke.Areas, StringComparer.Create(System.Globalization.CultureInfo.CurrentCulture, true)); - sb.AppendLine(Translator.Instance.Translate("NOTIFY_FROM").FormatText(msg, isAllCities ? Translator.Instance.Translate("ALL_AREAS") : string.Join(", ", poke.Areas))); - } - - sb.Append("```"); - sb.AppendLine(); - sb.AppendLine(); - messages.Add(sb.ToString()); - } - - if (hasPvP) - { - var pvpBuilder = new StringBuilder(); - pvpBuilder.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_PVP").FormatText(subscription.PvP.Count.ToString("N0"), server.Subscriptions.MaxPvPSubscriptions == 0 ? "∞" : server.Subscriptions.MaxPvPSubscriptions.ToString("N0"))); - pvpBuilder.Append("```"); - pvpBuilder.Append(string.Join(Environment.NewLine, GetPvPSubscriptionNames(guildId, user.Id))); - pvpBuilder.Append("```"); - pvpBuilder.AppendLine(); - pvpBuilder.AppendLine(); - messages.Add(pvpBuilder.ToString()); - } - - if (hasRaids) - { - var raidsBuilder = new StringBuilder(); - raidsBuilder.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_RAIDS").FormatText(subscription.Raids.Count.ToString("N0"), server.Subscriptions.MaxRaidSubscriptions == 0 ? "∞" : server.Subscriptions.MaxRaidSubscriptions.ToString("N0"))); - raidsBuilder.Append("```"); - raidsBuilder.Append(string.Join(Environment.NewLine, GetRaidSubscriptionNames(guildId, user.Id))); - raidsBuilder.Append("```"); - raidsBuilder.AppendLine(); - raidsBuilder.AppendLine(); - messages.Add(raidsBuilder.ToString()); - } - - if (hasGyms) - { - var gymsBuilder = new StringBuilder(); - gymsBuilder.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_GYMS").FormatText(subscription.Gyms.Count.ToString("N0"), server.Subscriptions.MaxGymSubscriptions == 0 ? "" : server.Subscriptions.MaxGymSubscriptions.ToString("N0"))); - gymsBuilder.Append("```"); - gymsBuilder.Append(string.Join(Environment.NewLine, GetGymSubscriptionNames(guildId, user.Id))); - gymsBuilder.Append("```"); - gymsBuilder.AppendLine(); - gymsBuilder.AppendLine(); - messages.Add(gymsBuilder.ToString()); - } - - if (hasQuests) - { - var questsBuilder = new StringBuilder(); - questsBuilder.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_QUESTS").FormatText(subscription.Quests.Count.ToString("N0"), server.Subscriptions.MaxQuestSubscriptions == 0 ? "∞" : server.Subscriptions.MaxQuestSubscriptions.ToString("N0"))); - questsBuilder.Append("```"); - questsBuilder.Append(string.Join(Environment.NewLine, GetQuestSubscriptionNames(guildId, user.Id))); - questsBuilder.Append("```"); - questsBuilder.AppendLine(); - questsBuilder.AppendLine(); - messages.Add(questsBuilder.ToString()); - } - - if (hasInvasions) - { - var invasionsBuilder = new StringBuilder(); - invasionsBuilder.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_INVASIONS").FormatText(subscription.Invasions.Count.ToString("N0"), server.Subscriptions.MaxInvasionSubscriptions == 0 ? "∞" : server.Subscriptions.MaxInvasionSubscriptions.ToString("N0"))); - invasionsBuilder.Append("```"); - invasionsBuilder.Append(string.Join(Environment.NewLine, GetInvasionSubscriptionNames(guildId, user.Id))); - invasionsBuilder.Append("```"); - invasionsBuilder.AppendLine(); - invasionsBuilder.AppendLine(); - messages.Add(invasionsBuilder.ToString()); - } - - if (hasLures) - { - var luresBuilder = new StringBuilder(); - luresBuilder.AppendLine(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_LURES").FormatText(subscription.Lures.Count.ToString("N0"), server.Subscriptions.MaxLureSubscriptions == 0 ? "∞" : server.Subscriptions.MaxLureSubscriptions.ToString("N0"))); - luresBuilder.Append("```"); - luresBuilder.Append(string.Join(Environment.NewLine, GetLureSubscriptionNames(guildId, user.Id))); - luresBuilder.Append("```"); - luresBuilder.AppendLine(); - luresBuilder.AppendLine(); - messages.Add(luresBuilder.ToString()); - } - - return messages; - } - - #region Get Subscription Names - - private List GetPvPSubscriptionNames(ulong guildId, ulong userId) - { - var list = new List(); - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, userId); - var subscribedPvP = subscription.PvP; - subscribedPvP.Sort((x, y) => x.PokemonIdString.CompareTo(y.PokemonIdString)); - - var defaultRank = 0; - var defaultCount = 0; - var results = subscribedPvP.GroupBy(p => p.MinimumRank, (key, g) => new { Rank = key, Pokes = g.ToList() }); - foreach (var result in results) - { - if (result.Pokes.Count > defaultRank) - { - defaultRank = result.Rank; - defaultCount = result.Pokes.Count; - } - } - - var exceedsLimits = subscribedPvP.Count > Strings.MaxPokemonDisplayed; - if (exceedsLimits) - { - list.Add(Translator.Instance.Translate("NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED").FormatText(defaultRank, defaultCount.ToString("N0"))); - } - - //var cityRoles = server.CityRoles; - foreach (var pvp in subscription.PvP) - { - if (pvp.MinimumRank == defaultRank && exceedsLimits) - continue; - - var pkmnNames = string.Join(", ", pvp.PokemonId.Select(x => MasterFile.GetPokemon(x, 0).Name)); - list.Add($"{pkmnNames} {(string.IsNullOrEmpty(pvp.FormsString) ? string.Empty : $" {pvp.FormsString} ")}({pvp.League} Rank: 1-{pvp.MinimumRank} Percent: {pvp.MinimumPercent}%+)"); - //var isAllCities = cityRoles.ScrambledEquals(poke.Areas, StringComparer.Create(System.Globalization.CultureInfo.CurrentCulture, true)); - //sb.AppendLine(Translator.Instance.Translate("NOTIFY_FROM").FormatText(msg, isAllCities ? Translator.Instance.Translate("ALL_AREAS") : string.Join(", ", poke.Areas))); - } - - return list; - } - - private List GetRaidSubscriptionNames(ulong guildId, ulong userId) - { - var list = new List(); - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, userId); - var subscribedRaids = subscription.Raids; - subscribedRaids.Sort((x, y) => x.PokemonId.CompareTo(y.PokemonId)); - var cityRoles = _dep.WhConfig.Servers[guildId].Geofences.Select(x => x.Name.ToLower()); - - foreach (var raid in subscribedRaids) - { - if (!MasterFile.Instance.Pokedex.ContainsKey(raid.PokemonId)) - continue; - - var pokemon = MasterFile.Instance.Pokedex[raid.PokemonId]; - if (pokemon == null) - continue; - - var isAllCities = cityRoles.ScrambledEquals(raid.Areas, StringComparer.Create(System.Globalization.CultureInfo.CurrentCulture, true)); - list.Add(Translator.Instance.Translate("NOTIFY_FROM").FormatText(pokemon.Name, isAllCities ? Translator.Instance.Translate("ALL_AREAS") : string.Join(", ", raid.Areas))); - } - - return list; - } - - private List GetGymSubscriptionNames(ulong guildId, ulong userId) - { - var list = new List(); - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, userId); - var subscribedGyms = subscription.Gyms; - subscribedGyms.Sort((x, y) => x.Name.CompareTo(y.Name)); - foreach (var gym in subscribedGyms) - { - list.Add(gym.Name); - } - - return list; - } - - private List GetQuestSubscriptionNames(ulong guildId, ulong userId) - { - var list = new List(); - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, userId); - var subscribedQuests = subscription.Quests; - subscribedQuests.Sort((x, y) => string.Compare(x.RewardKeyword.ToLower(), y.RewardKeyword.ToLower(), true)); - var cityRoles = _dep.WhConfig.Servers[guildId].Geofences.Select(x => x.Name.ToLower()); - - foreach (var quest in subscribedQuests) - { - var isAllCities = cityRoles.ScrambledEquals(quest.Areas, StringComparer.Create(System.Globalization.CultureInfo.CurrentCulture, true)); - list.Add(Translator.Instance.Translate("NOTIFY_FROM").FormatText(quest.RewardKeyword, isAllCities ? Translator.Instance.Translate("ALL_AREAS") : string.Join(", ", quest.Areas))); - } - - return list; - } - - private List GetInvasionSubscriptionNames(ulong guildId, ulong userId) - { - var list = new List(); - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, userId); - var subscribedInvasions = subscription.Invasions; - subscribedInvasions.Sort((x, y) => string.Compare(string.Join(", ", x.RewardPokemonId.Select(a => MasterFile.GetPokemon(a, 0).Name)), string.Join(", ", y.RewardPokemonId.Select(b => MasterFile.GetPokemon(b, 0).Name)), true)); - var cityRoles = _dep.WhConfig.Servers[guildId].Geofences.Select(x => x.Name.ToLower()); - - foreach (var invasion in subscribedInvasions) - { - var isAllCities = cityRoles.ScrambledEquals(invasion.Areas, StringComparer.Create(System.Globalization.CultureInfo.CurrentCulture, true)); - list.Add(Translator.Instance.Translate("NOTIFY_FROM").FormatText(string.Join(", ", invasion.RewardPokemonId.Select(x => MasterFile.GetPokemon(x, 0).Name)), isAllCities ? Translator.Instance.Translate("ALL_AREAS") : string.Join(", ", invasion.Areas))); - } - - return list; - } - - private List GetLureSubscriptionNames(ulong guildId, ulong userId) - { - var list = new List(); - var subscription = _dep.SubscriptionProcessor.Manager.GetUserSubscriptions(guildId, userId); - var subscribedLures = subscription.Lures; - subscribedLures.Sort((x, y) => x.LureType.CompareTo(y.LureType)); - var cityRoles = _dep.WhConfig.Servers[guildId].Geofences.Select(x => x.Name.ToLower()); - - foreach (var lure in subscribedLures) - { - var isAllCities = cityRoles.ScrambledEquals(lure.Areas, StringComparer.Create(System.Globalization.CultureInfo.CurrentCulture, true)); - list.Add(Translator.Instance.Translate("NOTIFY_FROM").FormatText(lure.LureType, isAllCities ? Translator.Instance.Translate("ALL_AREAS") : string.Join(", ", lure.Areas))); - } - - return list; - } - - #endregion - - private DiscordEmbedBuilder BuildExpirationMessage(ulong guildId, DiscordUser user) - { - var customerData = _dep.Stripe.GetCustomerData(guildId, user.Id); - if (!customerData.ExpireDate.HasValue) - { - return null; - } - var expires = customerData.ExpireDate.Value; - var remaining = DateTime.Now.GetTimeRemaining(expires); - return new DiscordEmbedBuilder - { - Title = $"{user.Username}#{user.Discriminator} ({user.Id}) Subscription Expires", - Description = $"Your subscription will expire in {remaining.ToReadableStringNoSeconds()} on {customerData.ExpireDate}\r\n\r\nTo cancel your subscription type `cancel` in the #become-a-donor channel." - }; - } - - private static ulong ConvertMentionToUserId(string mention) - { - //<@201909896357216256> - //mention = Utils.GetBetween(mention, "<", ">"); - mention = mention.Replace("<", null); - mention = mention.Replace(">", null); - mention = mention.Replace("@", null); - mention = mention.Replace("!", null); - - return ulong.TryParse(mention, out ulong result) ? result : 0; - } - - private async Task CanExecute(CommandContext ctx) - { - if (!await ctx.IsDirectMessageSupported(_dep.WhConfig)) - return false; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x.Key)).Key; - if (guildId == 0 || !_dep.WhConfig.Servers.ContainsKey(guildId)) - return false; - - if (!_dep.WhConfig.Servers[guildId].Subscriptions.Enabled) - { - await ctx.RespondEmbed(string.Format(Translator.Instance.Translate("MSG_SUBSCRIPTIONS_NOT_ENABLED"), ctx.User.Username), DiscordColor.Red); - return false; - } - - var isSupporter = await ctx.Client.IsSupporterOrHigher(ctx.User.Id, guildId, _dep.WhConfig); - if (!isSupporter) - { - await ctx.DonateUnlockFeaturesMessage(); - return false; - } - - return true; - } - - private static PokestopLureType GetLureFromName(string lureName) - { - lureName = lureName.ToLower(); - if (lureName.Contains("501") || lureName.Contains("norm")) - return PokestopLureType.Normal; - else if (lureName.Contains("502") || lureName.Contains("glac")) - return PokestopLureType.Glacial; - else if (lureName.Contains("503") || lureName.Contains("mos")) - return PokestopLureType.Mossy; - else if (lureName.Contains("504") || lureName.Contains("mag")) - return PokestopLureType.Magnetic; - else if (lureName.Contains("505") || lureName.Contains("rai")) - return PokestopLureType.Rainy; - return PokestopLureType.None; - } - - private static List GetLures(string lureTypes) - { - var lureNames = lureTypes.RemoveSpaces(); - var list = new List(); - lureNames.ForEach(x => list.Add(GetLureFromName(x))); - return list; - } - - #endregion - } - - internal class SubscriptionAreas - { - /// - /// Get parsed areas from command delimited string value - /// - /// Discord server to get valid areas from - /// Comma delimited string value of areas - /// Returns a List of valid areas from provided string value - public static List GetAreas(DiscordServerConfig server, string city) - { - if (string.IsNullOrEmpty(city)) - return new List(); - - // Get list of valid cities for Discord server - var validCities = server.Geofences.Select(g => g.Name).ToList(); - // If `all` is explicitly specified then include all valid cities, - // otherwise parse comma separated `city` parameter - var cities = string.Compare(city, Strings.All, true) == 0 - ? validCities - : city.RemoveSpaces(); - var validAreas = validCities.Select(x => x.ToLower()); - // Validate areas - return cities - .Where(x => validAreas.Contains(x.ToLower())) - .ToList(); - } - - /// - /// Check if previously subscribed areas differ from newly subscribed areas or not - /// - /// Previous areas to compare - /// New areas to compare - /// Returns true if areas are equal, otherwise returns false. - public static bool IsAreasEqual(List oldCities, List newCities) - { - var oldAreas = oldCities.Select(x => x.ToLower()); - var newAreas = newCities.Select(x => x.ToLower()); - // Check if old subscribed areas and new areas are the same - foreach (var newArea in newAreas) - { - // If old subscribed areas contains new area, skip - if (oldAreas.Contains(newArea)) - continue; - - // `oldAreas` differs from `newAreas` - return false; - } - // Subscribed areas are equal - return true; - } - } -} \ No newline at end of file diff --git a/src/Commands/Owner.cs b/src/Commands/Owner.cs deleted file mode 100644 index ef7b97d4..00000000 --- a/src/Commands/Owner.cs +++ /dev/null @@ -1,137 +0,0 @@ -namespace WhMgr.Commands -{ - using System; - using System.Linq; - using System.Threading.Tasks; - - using DSharpPlus.CommandsNext; - using DSharpPlus.CommandsNext.Attributes; - using DSharpPlus.Entities; - - using WhMgr.Data.Subscriptions; - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Localization; - using WhMgr.Utilities; - - [ - RequireOwner - ] - public class Owner - { - const string PokemonTrainerClub = "https://sso.pokemon.com/sso/login"; - const string NianticLabs = "https://pgorelease.nianticlabs.com/plfe/version"; - - private static readonly IEventLogger _logger = EventLogger.GetLogger("OWNER", Program.LogLevel); - private readonly Dependencies _dep; - - public Owner(Dependencies dep) - { - _dep = dep; - } - - [ - Command("isbanned"), - Description("Check if IP banned from NianticLabs or Pokemon Trainer Club."), - Hidden - ] - public async Task IsIPBannedAsync(CommandContext ctx) - { - var isPtcBanned = NetUtil.IsUrlBlocked(PokemonTrainerClub); - var isNiaBanned = NetUtil.IsUrlBlocked(NianticLabs); - var eb = new DiscordEmbedBuilder - { - Title = "Banned Status", - Color = (isPtcBanned || isNiaBanned) ? DiscordColor.Red : DiscordColor.Green, - Footer = new DiscordEmbedBuilder.EmbedFooter - { - IconUrl = ctx.Guild?.IconUrl, - Text = $"{ctx.Guild?.Name} | {DateTime.Now}" - } - }; - eb.AddField("Pokemon.com", isPtcBanned ? "Banned" : "Good", true); - eb.AddField("NianticLabs.com", isNiaBanned ? "Banned" : "Good", true); - await ctx.RespondAsync(embed: eb.Build()); - } - - [ - Command("clean-departed"), - Description("Remove user subscriptions that are no longer donors from the database."), - Hidden - ] - public async Task CleanDepartedAsync(CommandContext ctx) - { - _logger.Debug($"Checking if there are any subscriptions for members that are no longer apart of the server..."); - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - var removed = 0; - var users = _dep.SubscriptionProcessor?.Manager?.Subscriptions; - for (var i = 0; i < users.Count; i++) - { - var user = users[i]; - var discordUser = ctx.Client.GetMemberById(guildId, user.UserId); - var isSupporter = ctx.Client.HasSupporterRole(guildId, user.UserId, _dep.WhConfig.Servers[guildId].DonorRoleIds); - if (discordUser == null || !isSupporter) - { - _logger.Debug($"Removing user {user.UserId} subscription settings because they are no longer a member of the server."); - if (!SubscriptionManager.RemoveAllUserSubscriptions(guildId, user.UserId)) - { - _logger.Warn($"Unable to remove user {user.UserId} subscription settings from the database."); - continue; - } - - _logger.Info($"Removed {user.UserId} and subscriptions from database."); - removed++; - } - } - - await ctx.RespondEmbed(Translator.Instance.Translate("REMOVED_TOTAL_DEPARTED_MEMBERS").FormatText(removed.ToString("N0"), users.Count.ToString("N0"))); - } - - [ - Command("sudo"), - Description("Executes a command as another user."), - Hidden - ] - public async Task Sudo(CommandContext ctx, - [Description("Member to execute as.")] DiscordMember member, - [Description("Command text to execute."), RemainingText] string command) - { - await ctx.TriggerTypingAsync(); - - // get the command service, we need this for sudo purposes - var cmds = ctx.CommandsNext; - await cmds.SudoAsync(member, ctx.Channel, command); - } - - [ - Command("uptime"), - Description("Shows the uptime of how long the bot has been online since it was last started"), - Hidden, - ] - public async Task UptimeAsync(CommandContext ctx) - { - var started = System.Diagnostics.Process.GetCurrentProcess().StartTime; - var uptime = DateTime.Now - started; - var embed = new DiscordEmbedBuilder - { - Title = $"{ctx.Client.CurrentApplication.Name} Uptime", - Color = DiscordColor.Green, - }; - embed.AddField("Started", started.ToLongDateString() + " " + started.ToLongTimeString()); - embed.AddField("Uptime", uptime.ToReadableString()); - await ctx.RespondAsync(embed: embed); - } - } -} -/* - headers={'Host': 'sso.pokemon.com', - 'Connection': 'close', - 'Accept': '/*', - 'User-Agent': 'pokemongo/0 CFNetwork/893.14.2 Darwin/17.3.0', - 'Accept-Language': 'en-us', - 'Accept-Encoding': 'br, gzip, deflate', - 'X-Unity-Version': '2017.1.2f1'}, - background_callback=__proxy_check_completed, - */ \ No newline at end of file diff --git a/src/Commands/Quests.cs b/src/Commands/Quests.cs deleted file mode 100644 index 19994f56..00000000 --- a/src/Commands/Quests.cs +++ /dev/null @@ -1,77 +0,0 @@ -namespace WhMgr.Commands -{ - using System; - using System.Linq; - using System.Threading; - using System.Threading.Tasks; - - using DSharpPlus; - using DSharpPlus.CommandsNext; - using DSharpPlus.CommandsNext.Attributes; - using DSharpPlus.Entities; - - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Localization; - - public class Quests - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("QUESTS", Program.LogLevel); - private readonly Dependencies _dep; - - public Quests(Dependencies dep) - { - _dep = dep; - } - - [ - Command("reset-quests"), - Hidden, - RequirePermissions(Permissions.KickMembers) - ] - public async Task ResetChannelAsync(CommandContext ctx, - [Description("Discord channel to reset.")] DiscordChannel channel = null) - { - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - if (channel == null) - { - var channelIds = _dep.WhConfig.Servers[guildId].QuestChannelIds; - for (var i = 0; i < channelIds.Count; i++) - { - var qChannel = await ctx.Client.GetChannelAsync(channelIds[i]); - if (qChannel == null) - { - _logger.Warn($"Unable to get quest channel from id '{channelIds[i]}'."); - continue; - } - - await DeleteChannelMessages(ctx, qChannel); - } - return; - } - - await DeleteChannelMessages(ctx, channel); - } - - private async Task DeleteChannelMessages(CommandContext ctx, DiscordChannel channel) - { - var messages = await channel.GetMessagesAsync(); - while (messages.Count > 0) - { - for (var j = 0; j < messages.Count; j++) - { - var message = messages[j]; - if (message == null) - continue; - - await message.DeleteAsync("Channel reset."); - Thread.Sleep(100); - } - - messages = await channel.GetMessagesAsync(); - } - await ctx.RespondEmbed(Translator.Instance.Translate("CHANNEL_MESSAGES_DELETED").FormatText(ctx.User.Username, channel.Mention)); - } - } -} \ No newline at end of file diff --git a/src/Commands/Settings.cs b/src/Commands/Settings.cs deleted file mode 100644 index 569112e4..00000000 --- a/src/Commands/Settings.cs +++ /dev/null @@ -1,167 +0,0 @@ -namespace WhMgr.Commands -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Threading.Tasks; - - using DSharpPlus; - using DSharpPlus.CommandsNext; - using DSharpPlus.CommandsNext.Attributes; - using DSharpPlus.Entities; - - using WhMgr.Extensions; - - [ - Group("settings"), - Aliases("config", "cfg", "conf", "c"), - Description("Event Pokemon management commands."), - Hidden, - RequirePermissions(Permissions.KickMembers) - ] - public class Settings - { - private readonly Dependencies _dep; - - public Settings(Dependencies dep) - { - _dep = dep; - } - - [ - Command("set"), - Aliases("s"), - Description("") - ] - public async Task SetAsync(CommandContext ctx, - [Description("")] string key, - [Description("")] string value) - { - // TODO: Provide list of available config options to set. - if (!await ctx.IsDirectMessageSupported(_dep.WhConfig)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - { - // TODO: Localize - await ctx.RespondEmbed($"{ctx.User.Username} Guild {ctx.Guild?.Name} ({guildId}) not configured in {Strings.ConfigFileName}"); - return; - } - - //var guildConfig = _dep.WhConfig.Servers[guildId]; - switch (key) - { - case "nest_channel": - // TODO: Validate nestChannelId - //_dep.WhConfig.Servers[guildId].NestsChannelId = value; - //_dep.WhConfig.Save(_dep.WhConfig.FileName); - break; - case "prefix": - var oldPrefix = _dep.WhConfig.Servers[guildId].CommandPrefix; - await ctx.RespondEmbed($"{ctx.User.Username} Command prefix changed from {oldPrefix} to {value}.", DiscordColor.Green); - _dep.WhConfig.Servers[guildId].CommandPrefix = value; - _dep.WhConfig.Save(_dep.WhConfig.FileName); - break; - case "enable_subscriptions": - if (!bool.TryParse(value, out var enableSubscriptions)) - { - await ctx.RespondEmbed($"{ctx.User.Username}", DiscordColor.Red); - return; - } - _dep.WhConfig.Servers[guildId].Subscriptions.Enabled = enableSubscriptions; - _dep.WhConfig.Save(_dep.WhConfig.FileName); - break; - case "cities_require_donor": - if (!bool.TryParse(value, out var citiesRequireDonor)) - { - await ctx.RespondEmbed($"{ctx.User.Username}", DiscordColor.Red); - return; - } - _dep.WhConfig.Servers[guildId].CitiesRequireSupporterRole = citiesRequireDonor; - _dep.WhConfig.Save(_dep.WhConfig.FileName); - break; - case "prune_quests": - if (!bool.TryParse(value, out var pruneQuests)) - { - await ctx.RespondEmbed($"{ctx.User.Username}", DiscordColor.Red); - return; - } - _dep.WhConfig.Servers[guildId].PruneQuestChannels = pruneQuests; - _dep.WhConfig.Save(_dep.WhConfig.FileName); - break; - case "icon_style": - if (!_dep.WhConfig.IconStyles.ContainsKey(value)) - { - await ctx.RespondEmbed($"{ctx.User.Username}", DiscordColor.Red); - return; - } - _dep.WhConfig.Servers[guildId].IconStyle = value; - _dep.WhConfig.Save(_dep.WhConfig.FileName); - break; - case "shiny_stats": - if (!bool.TryParse(value, out var enableShinyStats)) - { - await ctx.RespondEmbed($"{ctx.User.Username}", DiscordColor.Red); - return; - } - _dep.WhConfig.Servers[guildId].ShinyStats.Enabled = enableShinyStats; - _dep.WhConfig.Save(_dep.WhConfig.FileName); - break; - } - await Task.CompletedTask; - } - - [ - Command("list"), - Aliases("l"), - Description("List config settings for current guild.") - ] - public async Task ListSettingsAsync(CommandContext ctx) - { - if (!await ctx.IsDirectMessageSupported(_dep.WhConfig)) - return; - - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - if (!_dep.WhConfig.Servers.ContainsKey(ctx.Guild?.Id ?? 0)) - { - // TODO: Localize - await ctx.RespondEmbed($"{ctx.User.Username} Guild {ctx.Guild?.Name} ({guildId}) not configured in {Strings.ConfigFileName}"); - return; - } - - var guildConfig = _dep.WhConfig.Servers[guildId]; - var eb = new DiscordEmbedBuilder - { - Color = DiscordColor.Blurple, - Title = $"{ctx.Guild.Name} Config", - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = $"{ctx.Guild?.Name} | {DateTime.Now}", - IconUrl = ctx.Guild?.IconUrl - } - }; - - // TODO: Localize - eb.AddField($"City Roles", string.Join("\r\n", guildConfig.Geofences.Select(x => x.Name)), true); - eb.AddField($"Enable Subscriptions", guildConfig.Subscriptions.Enabled ? "Yes" : "No", true); - eb.AddField($"Command Prefix", guildConfig.CommandPrefix ?? "@BotMentionHere", true); - eb.AddField($"City Roles Require Donor Role", guildConfig.CitiesRequireSupporterRole ? "Yes" : "No", true); - eb.AddField($"Donor Roles", string.Join("\r\n", guildConfig.DonorRoleIds.Select(x => $"{ctx.Guild.GetRole(x).Name}:{x}")), true); - // TODO: Use await - //eb.AddField($"Moderators", string.Join("\r\n", guildConfig.ModeratorRoleIds.Select(x => $"{ctx.Client.GetMemberById(guildId, x).GetAwaiter().GetResult().Username}:{x}")), true); - eb.AddField($"Nest Channel", guildConfig.NestsChannelId == 0 ? "Not Set" : $"{ctx.Guild.GetChannel(guildConfig.NestsChannelId)?.Name}:{guildConfig.NestsChannelId}", true); - eb.AddField($"Prune Quest Channels", guildConfig.PruneQuestChannels ? "Yes" : "No", true); - eb.AddField($"Quest Channels", string.Join("\r\n", guildConfig.QuestChannelIds.Select(x => $"{ctx.Guild.GetChannel(x)?.Name}:{x}")), true); - eb.AddField($"Enable Shiny Stats", guildConfig.ShinyStats?.Enabled ?? false ? "Yes" : "No", true); - eb.AddField($"Shiny Stats Channel", guildConfig.ShinyStats?.ChannelId == 0 ? "Not Set" : $"{ctx.Guild.GetChannel(guildConfig.ShinyStats.ChannelId)?.Name}:{guildConfig.ShinyStats?.ChannelId}", true); - eb.AddField($"Clear Previous Shiny Stats", guildConfig.ShinyStats?.ClearMessages ?? false ? "Yes" : "No", true); - eb.AddField($"Icon Style", guildConfig.IconStyle, true); - await ctx.RespondAsync(embed: eb); - } - } -} -//List/add/remove quest channel pruning -//Manage shiny stats \ No newline at end of file diff --git a/src/Commands/ShinyStats.cs b/src/Commands/ShinyStats.cs deleted file mode 100644 index 6dde5cd9..00000000 --- a/src/Commands/ShinyStats.cs +++ /dev/null @@ -1,184 +0,0 @@ -namespace WhMgr.Commands -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Threading; - using System.Threading.Tasks; - - using DSharpPlus; - using DSharpPlus.CommandsNext; - using DSharpPlus.CommandsNext.Attributes; - using DSharpPlus.Entities; - - using ServiceStack; - using ServiceStack.DataAnnotations; - using ServiceStack.OrmLite; - - using WhMgr.Data; - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Localization; - - public class ShinyStats - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("SHINY_STATS", Program.LogLevel); - private readonly Dependencies _dep; - - public ShinyStats(Dependencies dep) - { - _dep = dep; - } - - [ - Command("shiny-stats"), - RequirePermissions(Permissions.KickMembers) - ] - public async Task GetShinyStatsAsync(CommandContext ctx) - { - var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.Keys.FirstOrDefault(x => _dep.WhConfig.Servers.ContainsKey(x)); - - if (!_dep.WhConfig.Servers.ContainsKey(guildId)) - { - await ctx.RespondEmbed(Translator.Instance.Translate("ERROR_NOT_IN_DISCORD_SERVER"), DiscordColor.Red); - return; - } - - var server = _dep.WhConfig.Servers[guildId]; - if (!server.ShinyStats.Enabled) - return; - - var statsChannel = await ctx.Client.GetChannelAsync(server.ShinyStats.ChannelId); - if (statsChannel == null) - { - _logger.Warn($"Failed to get channel id {server.ShinyStats.ChannelId} to post shiny stats."); - await ctx.RespondEmbed(Translator.Instance.Translate("SHINY_STATS_INVALID_CHANNEL").FormatText(ctx.User.Username), DiscordColor.Yellow); - return; - } - - if (server.ShinyStats.ClearMessages) - { - await ctx.Client.DeleteMessages(server.ShinyStats.ChannelId); - } - - var stats = await GetShinyStats(_dep.WhConfig.Database.Scanner.ToString()); - var sorted = stats.Keys.ToList(); - sorted.Sort(); - if (sorted.Count > 0) - { - await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_TITLE").FormatText(DateTime.Now.Subtract(TimeSpan.FromHours(24)).ToLongDateString())); - await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_NEWLINE")); - } - - foreach (var pokemon in sorted) - { - if (pokemon == 0) - continue; - - if (!MasterFile.Instance.Pokedex.ContainsKey(pokemon)) - continue; - - var pkmn = MasterFile.Instance.Pokedex[pokemon]; - var pkmnStats = stats[pokemon]; - var chance = pkmnStats.Shiny == 0 || pkmnStats.Total == 0 ? 0 : Convert.ToInt32(pkmnStats.Total / pkmnStats.Shiny); - if (chance == 0) - { - await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_MESSAGE").FormatText(pkmn.Name, pokemon, pkmnStats.Shiny.ToString("N0"), pkmnStats.Total.ToString("N0"))); - } - else - { - await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_MESSAGE_WITH_RATIO").FormatText(pkmn.Name, pokemon, pkmnStats.Shiny.ToString("N0"), pkmnStats.Total.ToString("N0"), chance)); - } - Thread.Sleep(500); - } - - var total = stats[0]; - var totalRatio = total.Shiny == 0 || total.Total == 0 ? 0 : Convert.ToInt32(total.Total / total.Shiny); - if (totalRatio == 0) - { - //await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_TOTAL_MESSAGE").FormatText(total.Shiny.ToString("N0"), total.Total.ToString("N0"))); - // Error, try again - await GetShinyStatsAsync(ctx); - } - else - { - await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO").FormatText(total.Shiny.ToString("N0"), total.Total.ToString("N0"), totalRatio)); - } - } - - internal static Task> GetShinyStats(string scannerConnectionString) - { - var list = new Dictionary - { - { 0, new ShinyPokemonStats { PokemonId = 0 } } - }; - try - { - using (var db = DataAccessLayer.CreateFactory(scannerConnectionString).Open()) - { - db.SetCommandTimeout(30 * 1000); // 30 seconds timeout - var yesterday = DateTime.Now.Subtract(TimeSpan.FromHours(24)).ToString("yyyy/MM/dd"); - var pokemonShiny = db.Select().Where(x => string.Compare(x.Date.ToString("yyyy/MM/dd"), yesterday, true) == 0).ToList(); - var pokemonIV = db.Select().Where(x => string.Compare(x.Date.ToString("yyyy/MM/dd"), yesterday, true) == 0)?.ToDictionary(x => x.PokemonId); - for (var i = 0; i < pokemonShiny.Count; i++) - { - var curPkmn = pokemonShiny[i]; - if (curPkmn.PokemonId > 0) - { - if (!list.ContainsKey(curPkmn.PokemonId)) - { - list.Add(curPkmn.PokemonId, new ShinyPokemonStats { PokemonId = curPkmn.PokemonId }); - } - - list[curPkmn.PokemonId].PokemonId = curPkmn.PokemonId; - list[curPkmn.PokemonId].Shiny += Convert.ToInt32(curPkmn.Count); - list[curPkmn.PokemonId].Total += pokemonIV.ContainsKey(curPkmn.PokemonId) ? Convert.ToInt32(pokemonIV[curPkmn.PokemonId].Count) : 0; - } - } - list.ForEach((x, y) => list[0].Shiny += y.Shiny); - list.ForEach((x, y) => list[0].Total += y.Total); - } - } - catch (Exception ex) - { - _logger.Error(ex); - } - return Task.FromResult(list); - } - - [Alias("pokemon_iv_stats")] - internal class PokemonStatsIV - { - [Alias("date")] - public DateTime Date { get; set; } - - [Alias("pokemon_id")] - public uint PokemonId { get; set; } - - [Alias("count")] - public ulong Count { get; set; } - } - - [Alias("pokemon_shiny_stats")] - internal class PokemonStatsShiny - { - [Alias("date")] - public DateTime Date { get; set; } - - [Alias("pokemon_id")] - public uint PokemonId { get; set; } - - [Alias("count")] - public ulong Count { get; set; } - } - - internal class ShinyPokemonStats - { - public uint PokemonId { get; set; } - - public long Shiny { get; set; } - - public long Total { get; set; } - } - } -} diff --git a/src/Common/CaptureRateType.cs b/src/Common/CaptureRateType.cs new file mode 100644 index 00000000..439e29c0 --- /dev/null +++ b/src/Common/CaptureRateType.cs @@ -0,0 +1,12 @@ +namespace WhMgr.Common +{ + /// + /// Pokemon capture rate + /// + public enum CaptureRateType + { + PokeBall = 1, + GreatBall, + UltraBall, + } +} \ No newline at end of file diff --git a/src/Common/PokemonGenerationRange.cs b/src/Common/PokemonGenerationRange.cs new file mode 100644 index 00000000..abedc605 --- /dev/null +++ b/src/Common/PokemonGenerationRange.cs @@ -0,0 +1,23 @@ +namespace WhMgr.Common +{ + /// + /// Pokemon generation range class + /// + public class PokemonGenerationRange + { + /// + /// Gets or sets the Pokemon generation number + /// + public int Generation { get; set; } + + /// + /// Gets or sets the pokedex ID the generation starts at + /// + public int Start { get; set; } + + /// + /// Gets or sets the pokedex ID the generation ends at + /// + public int End { get; set; } + } +} \ No newline at end of file diff --git a/src/Net/Models/PokemonSize.cs b/src/Common/PokemonSize.cs similarity index 85% rename from src/Net/Models/PokemonSize.cs rename to src/Common/PokemonSize.cs index b31af109..b439db22 100644 --- a/src/Net/Models/PokemonSize.cs +++ b/src/Common/PokemonSize.cs @@ -1,8 +1,11 @@ -namespace WhMgr.Net.Models +namespace WhMgr.Common { + using System.Text.Json.Serialization; + /// /// Size of Pokemon /// + [JsonConverter(typeof(JsonStringEnumConverter))] public enum PokemonSize : byte { /// diff --git a/src/Net/Models/PokemonTeam.cs b/src/Common/PokemonTeam.cs similarity index 78% rename from src/Net/Models/PokemonTeam.cs rename to src/Common/PokemonTeam.cs index f03c3528..72086e91 100644 --- a/src/Net/Models/PokemonTeam.cs +++ b/src/Common/PokemonTeam.cs @@ -1,8 +1,11 @@ -namespace WhMgr.Net.Models +namespace WhMgr.Common { + using System.Text.Json.Serialization; + /// /// Gym team /// + [JsonConverter(typeof(JsonStringEnumConverter))] public enum PokemonTeam { /// @@ -28,6 +31,6 @@ public enum PokemonTeam /// /// All gym teams /// - All = ushort.MaxValue + All = ushort.MaxValue, } } \ No newline at end of file diff --git a/src/Data/Models/PokemonType.cs b/src/Common/PokemonType.cs similarity index 70% rename from src/Data/Models/PokemonType.cs rename to src/Common/PokemonType.cs index 5eb8acbd..d588a4f4 100644 --- a/src/Data/Models/PokemonType.cs +++ b/src/Common/PokemonType.cs @@ -1,9 +1,8 @@ -namespace WhMgr.Data.Models +namespace WhMgr.Common { - using Newtonsoft.Json; - using Newtonsoft.Json.Converters; + using System.Text.Json.Serialization; - [JsonConverter(typeof(StringEnumConverter))] + [JsonConverter(typeof(JsonStringEnumConverter))] public enum PokemonType { None = 0, @@ -24,6 +23,6 @@ public enum PokemonType Ice = 15, Dragon = 16, Dark = 17, - Fairy = 18 + Fairy = 18, } } \ No newline at end of file diff --git a/src/Net/Models/PokestopLureType.cs b/src/Common/PokestopLureType.cs similarity index 96% rename from src/Net/Models/PokestopLureType.cs rename to src/Common/PokestopLureType.cs index 8254e4d8..afef12c7 100644 --- a/src/Net/Models/PokestopLureType.cs +++ b/src/Common/PokestopLureType.cs @@ -1,4 +1,4 @@ -namespace WhMgr.Net.Models +namespace WhMgr.Common { /// /// Pokestop lure type diff --git a/src/Common/PvpLeague.cs b/src/Common/PvpLeague.cs new file mode 100644 index 00000000..6b12fdb9 --- /dev/null +++ b/src/Common/PvpLeague.cs @@ -0,0 +1,14 @@ +namespace WhMgr.Common +{ + using System.Text.Json.Serialization; + + [JsonConverter(typeof(JsonStringEnumConverter))] + public enum PvpLeague + { + Other = 0, + Little = 500, + Great = 1500, + Ultra = 2500, + Master = 99999, + } +} \ No newline at end of file diff --git a/src/Common/WeatherCondition.cs b/src/Common/WeatherCondition.cs new file mode 100644 index 00000000..0a0df69e --- /dev/null +++ b/src/Common/WeatherCondition.cs @@ -0,0 +1,17 @@ +namespace WhMgr.Common +{ + using System.Text.Json.Serialization; + + [JsonConverter(typeof(JsonStringEnumConverter))] + public enum WeatherCondition + { + None = 0, + Clear, + Rainy, + PartlyCloudy, + Overcast, + Windy, + Snow, + Fog, + } +} \ No newline at end of file diff --git a/src/Common/WeatherSeverity.cs b/src/Common/WeatherSeverity.cs new file mode 100644 index 00000000..ec05188d --- /dev/null +++ b/src/Common/WeatherSeverity.cs @@ -0,0 +1,9 @@ +namespace WhMgr.Common +{ + public enum WeatherSeverity + { + None = 0, + Moderate, + Extreme + } +} \ No newline at end of file diff --git a/src/Comparers/QuestConditionEqualityComparer.cs b/src/Comparers/QuestConditionEqualityComparer.cs deleted file mode 100644 index 982a70e7..00000000 --- a/src/Comparers/QuestConditionEqualityComparer.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace WhMgr.Comparers -{ - using System; - using System.Collections.Generic; - - using WhMgr.Net.Models; - - class QuestConditionEqualityComparer : IEqualityComparer - { - public bool Equals(QuestConditionMessage condition1, QuestConditionMessage condition2) - { - if (condition1 == null && condition2 == null) - return true; - if (condition1 == null || condition2 == null) - return false; - - return condition1.Type == condition2.Type; - } - - public int GetHashCode(QuestConditionMessage condition) - { - return condition.Type.GetHashCode(); - } - } -} \ No newline at end of file diff --git a/src/Comparers/QuestRewardEqualityComparer.cs b/src/Comparers/QuestRewardEqualityComparer.cs deleted file mode 100644 index 8a2605f4..00000000 --- a/src/Comparers/QuestRewardEqualityComparer.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace WhMgr.Comparers -{ - using System; - using System.Collections.Generic; - - using WhMgr.Net.Models; - - class QuestRewardEqualityComparer : IEqualityComparer - { - public bool Equals(QuestRewardMessage reward1, QuestRewardMessage reward2) - { - if (reward1 == null && reward2 == null) - return true; - if (reward1 == null || reward2 == null) - return false; - - return reward1.Type == reward2.Type; - } - - public int GetHashCode(QuestRewardMessage reward) - { - return reward.Type.GetHashCode(); - } - } -} \ No newline at end of file diff --git a/src/Configuration/BotConfig.cs b/src/Configuration/BotConfig.cs new file mode 100644 index 00000000..0ad878a5 --- /dev/null +++ b/src/Configuration/BotConfig.cs @@ -0,0 +1,54 @@ +namespace WhMgr.Configuration +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + + public class BotConfig + { + /// + /// Gets or sets the command prefix for all Discord commands + /// + [JsonPropertyName("commandPrefix")] + public string CommandPrefix { get; set; } + + /// + /// Gets or sets the guild id + /// + [JsonPropertyName("guildId")] + public ulong GuildId { get; set; } + + /// + /// Gets or sets the emoji guild id + /// + [JsonPropertyName("emojiGuildId")] + public ulong EmojiGuildId { get; set; } + + /// + /// Gets or sets the Discord bot token + /// + [JsonPropertyName("token")] + public string Token { get; set; } + + /// + /// Gets or sets the bot channel ID(s) + /// + [ + Obsolete("Not used"), + JsonPropertyName("channelIds"), + ] + public List ChannelIds { get; set; } = new(); + + /// + /// Gets or sets the Discord bot's custom status + /// + [JsonPropertyName("status")] + public string Status { get; set; } + + /// + /// Gets or sets the owner id + /// + [JsonPropertyName("ownerId")] + public ulong OwnerId { get; set; } + } +} \ No newline at end of file diff --git a/src/Configuration/WhConfig.cs b/src/Configuration/Config.cs similarity index 52% rename from src/Configuration/WhConfig.cs rename to src/Configuration/Config.cs index b6e46769..08735d29 100644 --- a/src/Configuration/WhConfig.cs +++ b/src/Configuration/Config.cs @@ -3,159 +3,160 @@ using System; using System.Collections.Generic; using System.IO; - using System.Linq; + using System.Text.Json.Serialization; - using Newtonsoft.Json; + using Microsoft.Extensions.Logging; + using WhMgr.Common; using WhMgr.Data; - using WhMgr.Diagnostics; + using WhMgr.Extensions; + using WhMgr.Services.Icons; /// /// Configuration file class /// - public class WhConfig + public class Config { /// /// Gets or sets the HTTP listening interface/host address /// - [JsonProperty("host")] + [JsonPropertyName("host")] public string ListeningHost { get; set; } /// /// Gets or sets the HTTP listening port /// - [JsonProperty("port")] + [JsonPropertyName("port")] public ushort WebhookPort { get; set; } /// /// Gets or sets the locale translation file to use /// - [JsonProperty("locale")] + [JsonPropertyName("locale")] public string Locale { get; set; } /// - /// Gets or sets the short url API url (yourls.org) + /// Gets or sets the short url API config (yourls.org) /// - [JsonProperty("shortUrlApiUrl")] - public string ShortUrlApiUrl { get; set; } + [JsonPropertyName("shortUrlApi")] + public UrlShortenerConfig ShortUrlApi { get; set; } /// - /// Gets or sets the Stripe API key + /// Gets or sets the Stripe API config /// - [JsonProperty("stripeApiKey")] - public string StripeApiKey { get; set; } + [JsonPropertyName("stripeApi")] + public StripeConfig StripeApi { get; set; } /// /// Gets or sets the Discord servers configuration /// [JsonIgnore] - public Dictionary Servers { get; set; } + public Dictionary Servers { get; set; } = new(); /// /// /// - [JsonProperty("servers")] - public Dictionary ServerConfigFiles { get; set; } + [JsonPropertyName("servers")] + public Dictionary ServerConfigFiles { get; set; } = new(); /// /// Gets or sets the Database configuration /// - [JsonProperty("database")] - public ConnectionStringsConfig Database { get; set; } + [JsonPropertyName("database")] + public ConnectionStringsConfig Database { get; set; } = new(); /// /// Gets or sets the Urls configuration /// - [JsonProperty("urls")] - public UrlConfig Urls { get; set; } + [JsonPropertyName("urls")] + public UrlConfig Urls { get; set; } = new(); /// - /// Gets or sets the event Pokemon IDs list + /// Gets or sets the Twilio configuration /// - [JsonProperty("eventPokemonIds")] - public List EventPokemonIds { get; set; } + [JsonPropertyName("twilio")] + public TwilioConfig Twilio { get; set; } = new(); /// - /// Gets or sets the minimum IV value for an event Pokemon to be to process - /// for channel alarms or direct message subscriptions + /// Gets or sets the event specified Pokemon and filtering /// - [JsonProperty("eventMinimumIV")] - public int EventMinimumIV { get; set; } + [JsonPropertyName("eventPokemon")] + public EventPokemonConfig EventPokemon { get; set; } = new(); /// /// Gets or sets the icon styles /// - [JsonProperty("iconStyles")] - public Dictionary IconStyles { get; set; } + [JsonPropertyName("iconStyles")] + public IconStyleCollection IconStyles { get; set; } = new(); /// /// Gets or sets the static map template files to use per type /// - [JsonProperty("staticMaps")] - public Dictionary StaticMaps { get; set; } + [JsonPropertyName("staticMaps")] + public StaticMapConfig StaticMaps { get; set; } = new(); /// - /// Gets or sets the Twilio config for sending text message notifications + /// Gets or sets the reverse geocoding location lookup configuration /// - [JsonProperty("twilio")] - public TwilioConfig Twilio { get; set; } - - /// - /// Gets or sets the Google maps key for location lookup - /// - [JsonProperty("gmapsKey")] - public string GoogleMapsKey { get; set; } - - /// - /// Gets or sets the OpenStreetMaps Nominatim endpoint to use for reverse location lookup - /// - [JsonProperty("nominatim")] - public string NominatimEndpoint { get; set; } - - /// - /// Gets or sets the OpenStreetMaps Nominatim location string schema - /// - [JsonProperty("nominatimSchema")] - public string NominatimSchema { get; set; } + [JsonPropertyName("reverseGeocoding")] + public ReverseGeocodingConfig ReverseGeocoding { get; set; } = new(); /// /// Gets or sets the minimum despawn time in minutes a Pokemon must have in order to send the alarm /// - [JsonProperty("despawnTimeMinimumMinutes")] - public int DespawnTimeMinimumMinutes { get; set; } + [JsonPropertyName("despawnTimeMinimumMinutes")] + public ushort DespawnTimeMinimumMinutes { get; set; } /// /// Gets or sets the interval in minutes to reload subscriptions to accomodate the UI changes /// - [JsonProperty("reloadSubscriptionChangesMinutes")] + [JsonPropertyName("reloadSubscriptionChangesMinutes")] public ushort ReloadSubscriptionChangesMinutes { get; set; } - /// - /// Gets or sets the maximum amount of notifications a user can receive per minute per server before being rate limited - /// - [JsonProperty("maxNotificationsPerMinute")] - public ushort MaxNotificationsPerMinute { get; set; } - /// /// Gets or sets a value determining whether to check for duplicate webhook messages or not /// - [JsonProperty("checkForDuplicates")] + [JsonPropertyName("checkForDuplicates")] public bool CheckForDuplicates { get; set; } /// /// Gets or sets whether to log incoming webhook data to a file /// - [JsonProperty("debug")] + [JsonPropertyName("debug")] public bool Debug { get; set; } - [JsonProperty("maxPokemonId")] - public uint MaxPokemonId { get; set; } + /// + /// Gets a value determining the maximum Pokemon ID to support + /// + [JsonIgnore] + public uint MaxPokemonId => (uint)GameMaster.Instance.Pokedex.Count; /// /// Gets or sets the event logging level to set /// - [JsonProperty("logLevel")] + [JsonPropertyName("logLevel")] public LogLevel LogLevel { get; set; } + /* + * Trace: 0 + * Debug: 1 + * Info: 2 + * Warning: 3 + * Error: 4 + * Critical: 5 + * None: 6 + */ + + /// + /// Gets or sets a value determining whether to enable Sentry tracking or not + /// + [JsonPropertyName("sentry")] + public bool EnableSentry { get; set; } + + /// + /// Gets or sets the allowed PvP league rankings to show and filter by received Pokemon + /// + [JsonPropertyName("pvpLeagues")] + public Dictionary PvpLeagues { get; set; } /// /// Gets or sets the configuration file path @@ -164,27 +165,17 @@ public class WhConfig public string FileName { get; set; } /// - /// Instantiate a new class + /// Instantiate a new class /// - public WhConfig() + public Config() { ListeningHost = "127.0.0.1"; WebhookPort = 8008; Locale = "en"; - MaxPokemonId = 800; LogLevel = LogLevel.Trace; - Servers = new Dictionary(); - Database = new ConnectionStringsConfig(); - Urls = new UrlConfig(); - EventPokemonIds = new List(); - EventMinimumIV = 90; - IconStyles = new Dictionary(); - StaticMaps = new Dictionary(); - Twilio = new TwilioConfig(); DespawnTimeMinimumMinutes = 5; - ReloadSubscriptionChangesMinutes = 1; - MaxNotificationsPerMinute = 10; CheckForDuplicates = true; + PvpLeagues = new Dictionary(); } /// @@ -211,11 +202,48 @@ public void LoadDiscordServers() if (!dict.ContainsKey(id)) { var json = File.ReadAllText(path); - var config = JsonConvert.DeserializeObject(json); + var config = json.FromJson(); dict.Add(id, config); } } Servers = dict; + LoadGeofences(Servers); + } + + private static void LoadGeofences(Dictionary servers) + { + foreach (var (_, serverConfig) in servers) + { + serverConfig.LoadGeofences(); + /* + serverConfig.Geofences.Clear(); + + var geofenceFiles = serverConfig.GeofenceFiles; + var geofences = new List(); + + if (geofenceFiles != null && geofenceFiles.Any()) + { + foreach (var file in geofenceFiles) + { + var filePath = Path.Combine(Strings.GeofenceFolder, file); + + try + { + var fileGeofences = Geofence.FromFile(filePath); + geofences.AddRange(fileGeofences); + Console.WriteLine($"Successfully loaded {fileGeofences.Count} geofences from {file}"); + } + catch (Exception ex) + { + Console.WriteLine($"Could not load Geofence file {file} (for server {serverId}):"); + Console.WriteLine(ex); + } + } + } + + serverConfig.Geofences.AddRange(geofences); + */ + } } /// @@ -224,7 +252,7 @@ public void LoadDiscordServers() /// Path to save the configuration file public void Save(string filePath) { - var data = JsonConvert.SerializeObject(this, Formatting.Indented); + var data = this.ToJson(); File.WriteAllText(filePath, data); } @@ -233,15 +261,15 @@ public void Save(string filePath) /// /// Path to load the configuration file from /// Returns the deserialized configuration object - public static WhConfig Load(string filePath) + public static Config Load(string filePath) { if (!File.Exists(filePath)) { throw new FileNotFoundException("Config not loaded because file not found.", filePath); } - var config = MasterFile.LoadInit(filePath); + var config = filePath.LoadFromFile(); config.LoadDiscordServers(); return config; } } -} +} \ No newline at end of file diff --git a/src/Configuration/WhConfigHolder.cs b/src/Configuration/ConfigHolder.cs similarity index 58% rename from src/Configuration/WhConfigHolder.cs rename to src/Configuration/ConfigHolder.cs index 482233df..cb7e8f86 100644 --- a/src/Configuration/WhConfigHolder.cs +++ b/src/Configuration/ConfigHolder.cs @@ -1,18 +1,18 @@ -using System; - -namespace WhMgr.Configuration +namespace WhMgr.Configuration { + using System; + /// - /// This class holds a singleton instance of WhConfig which can be swapped out (e.g. after a config reload) without everybody + /// This class holds a singleton instance of Config which can be swapped out (e.g. after a config reload) without everybody /// needing to update their references to the config itself. /// - public class WhConfigHolder + public class ConfigHolder { - private readonly object _instanceMutex = new object(); + private readonly object _instanceMutex = new(); - private WhConfig _instance; + private Config _instance; - public WhConfigHolder(WhConfig instance) + public ConfigHolder(Config instance) { _instance = instance; } @@ -23,13 +23,13 @@ public WhConfigHolder(WhConfig instance) public event Action Reloaded; /// - /// Provides thread-safe access to the internal WhConfig instance + /// Provides thread-safe access to the internal Config instance /// - public WhConfig Instance + public Config Instance { get { - WhConfig value; + Config value; lock (_instanceMutex) value = _instance; @@ -45,4 +45,4 @@ public WhConfig Instance } } } -} +} \ No newline at end of file diff --git a/src/Configuration/ConnectionStringsConfig.cs b/src/Configuration/ConnectionStringsConfig.cs index ff6fc04b..02172c42 100644 --- a/src/Configuration/ConnectionStringsConfig.cs +++ b/src/Configuration/ConnectionStringsConfig.cs @@ -1,6 +1,6 @@ namespace WhMgr.Configuration { - using Newtonsoft.Json; + using System.Text.Json.Serialization; /// /// MySQL connection strings configuration class @@ -10,19 +10,19 @@ public class ConnectionStringsConfig /// /// Gets or sets the main database options for subscriptions /// - [JsonProperty("main")] + [JsonPropertyName("main")] public DatabaseConfig Main { get; set; } /// /// Gets or sets the scanner database options /// - [JsonProperty("scanner")] + [JsonPropertyName("scanner")] public DatabaseConfig Scanner { get; set; } /// /// Gets or sets the nests database options /// - [JsonProperty("nests")] + [JsonPropertyName("nests")] public DatabaseConfig Nests { get; set; } } } \ No newline at end of file diff --git a/src/Configuration/DailyStatsConfig.cs b/src/Configuration/DailyStatsConfig.cs new file mode 100644 index 00000000..93b29c53 --- /dev/null +++ b/src/Configuration/DailyStatsConfig.cs @@ -0,0 +1,19 @@ +namespace WhMgr.Configuration +{ + using System.Text.Json.Serialization; + + public class DailyStatsConfig + { + [JsonPropertyName("shiny")] + public StatsConfig ShinyStats { get; set; } + + [JsonPropertyName("iv")] + public StatsConfig IVStats { get; set; } + + public DailyStatsConfig() + { + ShinyStats = new StatsConfig(); + IVStats = new StatsConfig(); + } + } +} \ No newline at end of file diff --git a/src/Configuration/DatabaseConfig.cs b/src/Configuration/DatabaseConfig.cs index 0c6b1473..6a5f67b0 100644 --- a/src/Configuration/DatabaseConfig.cs +++ b/src/Configuration/DatabaseConfig.cs @@ -1,6 +1,6 @@ namespace WhMgr.Configuration { - using Newtonsoft.Json; + using System.Text.Json.Serialization; /// /// MySQL database configuration class. @@ -10,31 +10,31 @@ public class DatabaseConfig /// /// MySQL host address /// - [JsonProperty("host")] + [JsonPropertyName("host")] public string Host { get; set; } /// /// MySQL listening port /// - [JsonProperty("port")] + [JsonPropertyName("port")] public ushort Port { get; set; } /// /// MySQL username /// - [JsonProperty("username")] + [JsonPropertyName("username")] public string Username { get; set; } /// /// MySQL password /// - [JsonProperty("password")] + [JsonPropertyName("password")] public string Password { get; set; } /// /// MySQL database name /// - [JsonProperty("database")] + [JsonPropertyName("database")] public string Database { get; set; } /// diff --git a/src/Configuration/DiscordAuthConfig.cs b/src/Configuration/DiscordAuthConfig.cs new file mode 100644 index 00000000..d65618df --- /dev/null +++ b/src/Configuration/DiscordAuthConfig.cs @@ -0,0 +1,23 @@ +namespace WhMgr.Configuration +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + + public class DiscordAuthConfig + { + [JsonPropertyName("ownerId")] + public ulong OwnerId { get; set; } + + [JsonPropertyName("clientId")] + public ulong ClientId { get; set; } + + [JsonPropertyName("clientSecret")] + public string ClientSecret { get; set; } + + [JsonPropertyName("redirectUri")] + public string RedirectUri { get; set; } + + public IEnumerable UserIds { get; set; } + } +} \ No newline at end of file diff --git a/src/Configuration/DiscordEmbedColorConfig.cs b/src/Configuration/DiscordEmbedColorsConfig.cs similarity index 77% rename from src/Configuration/DiscordEmbedColorConfig.cs rename to src/Configuration/DiscordEmbedColorsConfig.cs index e826fdf2..58e4881a 100644 --- a/src/Configuration/DiscordEmbedColorConfig.cs +++ b/src/Configuration/DiscordEmbedColorsConfig.cs @@ -1,25 +1,23 @@ namespace WhMgr.Configuration { - using System; using System.Collections.Generic; + using System.Text.Json.Serialization; - using Newtonsoft.Json; - - public class DiscordEmbedColorConfig + public class DiscordEmbedColorsConfig { - [JsonProperty("pokemon")] + [JsonPropertyName("pokemon")] public DiscordEmbedColorPokemon Pokemon { get; set; } - [JsonProperty("raids")] + [JsonPropertyName("raids")] public DiscordEmbedColorRaids Raids { get; set; } - [JsonProperty("pokestops")] + [JsonPropertyName("pokestops")] public DiscordEmbedColorPokestop Pokestops { get; set; } - [JsonProperty("weather")] + [JsonPropertyName("weather")] public DiscordEmbedColorWeather Weather { get; set; } - public DiscordEmbedColorConfig() + public DiscordEmbedColorsConfig() { Pokemon = new DiscordEmbedColorPokemon { @@ -35,7 +33,7 @@ public DiscordEmbedColorConfig() new DiscordEmbedColorPokemonPvP { Minimum = 1, Maximum = 3, Color = "#000080" }, new DiscordEmbedColorPokemonPvP { Minimum = 4, Maximum = 25, Color = "#800080" }, new DiscordEmbedColorPokemonPvP { Minimum = 26, Maximum = 100, Color = "#aa2299" }, - } + }, }; Raids = new DiscordEmbedColorRaids(); Pokestops = new DiscordEmbedColorPokestop(); @@ -45,10 +43,10 @@ public DiscordEmbedColorConfig() public class DiscordEmbedColorPokemon { - [JsonProperty("iv")] + [JsonPropertyName("iv")] public List IV { get; set; } - [JsonProperty("pvp")] + [JsonPropertyName("pvp")] public List PvP { get; set; } public DiscordEmbedColorPokemon() @@ -60,13 +58,13 @@ public DiscordEmbedColorPokemon() public class DiscordEmbedColorPokemonIV { - [JsonProperty("min")] + [JsonPropertyName("min")] public int Minimum { get; set; } - [JsonProperty("max")] + [JsonPropertyName("max")] public int Maximum { get; set; } - [JsonProperty("color")] + [JsonPropertyName("color")] public string Color { get; set; } public DiscordEmbedColorPokemonIV() @@ -79,13 +77,13 @@ public DiscordEmbedColorPokemonIV() public class DiscordEmbedColorPokemonPvP { - [JsonProperty("min")] + [JsonPropertyName("min")] public int Minimum { get; set; } - [JsonProperty("max")] + [JsonPropertyName("max")] public int Maximum { get; set; } - [JsonProperty("color")] + [JsonPropertyName("color")] public string Color { get; set; } public DiscordEmbedColorPokemonPvP() @@ -98,25 +96,25 @@ public DiscordEmbedColorPokemonPvP() public class DiscordEmbedColorRaids { - [JsonProperty("1")] + [JsonPropertyName("1")] public string Level1 { get; set; } - [JsonProperty("2")] + [JsonPropertyName("2")] public string Level2 { get; set; } - [JsonProperty("3")] + [JsonPropertyName("3")] public string Level3 { get; set; } - [JsonProperty("4")] + [JsonPropertyName("4")] public string Level4 { get; set; } - [JsonProperty("5")] + [JsonPropertyName("5")] public string Level5 { get; set; } - [JsonProperty("6")] + [JsonPropertyName("6")] public string Level6 { get; set; } - [JsonProperty("ex")] + [JsonPropertyName("ex")] public string Ex { get; set; } public DiscordEmbedColorRaids() @@ -133,13 +131,13 @@ public DiscordEmbedColorRaids() public class DiscordEmbedColorPokestop { - [JsonProperty("quests")] + [JsonPropertyName("quests")] public string Quests { get; set; } - [JsonProperty("lures")] + [JsonPropertyName("lures")] public DiscordEmbedColorPokestopLures Lures { get; set; } - [JsonProperty("invasions")] + [JsonPropertyName("invasions")] public string Invasions { get; set; } public DiscordEmbedColorPokestop() @@ -152,19 +150,19 @@ public DiscordEmbedColorPokestop() public class DiscordEmbedColorPokestopLures { - [JsonProperty("normal")] + [JsonPropertyName("normal")] public string Normal { get; set; } - [JsonProperty("glacial")] + [JsonPropertyName("glacial")] public string Glacial { get; set; } - [JsonProperty("mossy")] + [JsonPropertyName("mossy")] public string Mossy { get; set; } - [JsonProperty("magnetic")] + [JsonPropertyName("magnetic")] public string Magnetic { get; set; } - [JsonProperty("rainy")] + [JsonPropertyName("rainy")] public string Rainy { get; set; } public DiscordEmbedColorPokestopLures() @@ -179,25 +177,25 @@ public DiscordEmbedColorPokestopLures() public class DiscordEmbedColorWeather { - [JsonProperty("clear")] + [JsonPropertyName("clear")] public string Clear { get; set; } - [JsonProperty("cloudy")] + [JsonPropertyName("cloudy")] public string Cloudy { get; set; } - [JsonProperty("fog")] + [JsonPropertyName("fog")] public string Fog { get; set; } - [JsonProperty("partlyCloudy")] + [JsonPropertyName("partlyCloudy")] public string PartlyCloudy { get; set; } - [JsonProperty("rain")] + [JsonPropertyName("rain")] public string Rain { get; set; } - [JsonProperty("snow")] + [JsonPropertyName("snow")] public string Snow { get; set; } - [JsonProperty("windy")] + [JsonPropertyName("windy")] public string Windy { get; set; } public DiscordEmbedColorWeather() diff --git a/src/Configuration/DiscordServerConfig.cs b/src/Configuration/DiscordServerConfig.cs index 130e5515..02153baf 100644 --- a/src/Configuration/DiscordServerConfig.cs +++ b/src/Configuration/DiscordServerConfig.cs @@ -1,15 +1,14 @@ -using WhMgr.Geofence; - -namespace WhMgr.Configuration +namespace WhMgr.Configuration { using System; using System.Collections.Generic; using System.IO; + using System.Linq; + using System.Text.Json.Serialization; - using Newtonsoft.Json; + using Microsoft.Extensions.Logging; - using WhMgr.Alarms.Alerts; - using WhMgr.Data; + using WhMgr.Services.Geofence; /// /// Discord server configuration class @@ -17,22 +16,10 @@ namespace WhMgr.Configuration public class DiscordServerConfig { /// - /// Gets or sets the command prefix for all Discord commands + /// Gets or sets the bot configuration to use /// - [JsonProperty("commandPrefix")] - public string CommandPrefix { get; set; } - - /// - /// Gets or sets the emoji guild id - /// - [JsonProperty("emojiGuildId")] - public ulong EmojiGuildId { get; set; } - - /// - /// Gets or sets the owner id - /// - [JsonProperty("ownerId")] - public ulong OwnerId { get; set; } + [JsonPropertyName("bot")] + public BotConfig Bot { get; set; } //[JsonProperty("locale")] //public string Locale { get; set; } @@ -40,122 +27,80 @@ public class DiscordServerConfig /// /// Gets or sets the donor role ID(s) /// - [JsonProperty("donorRoleIds")] - public List DonorRoleIds { get; set; } - - [JsonProperty("freeRoleName")] - public string FreeRoleName { get; set; } + [JsonPropertyName("donorRoleIds")] + public Dictionary> DonorRoleIds { get; set; } = new(); /// - /// Gets or sets the moderators of the Discord server + /// Gets or sets the free donor role name to assign by non-donors to get + /// free donor access /// - [JsonProperty("moderatorRoleIds")] - public List ModeratorRoleIds { get; set; } + [JsonPropertyName("freeRoleName")] + public string FreeRoleName { get; set; } /// - /// Gets or sets the Discord bot token + /// Gets or sets the moderators of the Discord server /// - [JsonProperty("token")] - public string Token { get; set; } + [JsonPropertyName("moderatorRoleIds")] + public List ModeratorRoleIds { get; set; } = new(); /// /// Gets or sets the associated alarms file for the Discord server /// - [JsonProperty("alarms")] + [JsonPropertyName("alarms")] public string AlarmsFile { get; set; } - + /// - /// Gets or sets the list of Geofence files to use for the Discord server (in addition to the common ones) + /// Gets or sets the list of Geofence files to use for the Discord server + /// (in addition to the common ones) /// - [JsonProperty("geofences")] - public List GeofenceFiles { get; set; } + [JsonPropertyName("geofences")] + public string[] GeofenceFiles { get; set; } [JsonIgnore] - public List Geofences { get; } = new List(); + public List Geofences { get; } = new(); /// /// Gets or sets whether to enable custom direct message subscriptions /// - [JsonProperty("subscriptions")] - public SubscriptionsConfig Subscriptions { get; set; } + [JsonPropertyName("subscriptions")] + public SubscriptionsConfig Subscriptions { get; set; } = new(); /// - /// Gets or sets a value whether to enable assigning geofence/area/city roles or not + /// Gets or sets the GeofenceRoles config to use with assigning geofence + /// roles to see different sections /// - [JsonProperty("enableGeofenceRoles")] - public bool EnableGeofenceRoles { get; set; } + [JsonPropertyName("geofenceRoles")] + public GeofenceRolesConfig GeofenceRoles { get; set; } = new(); /// - /// Gets or sets a value determining whether city roles should be removed when a donor role is removed from a Discord member + /// /// - [JsonProperty("autoRemoveGeofenceRoles")] - public bool AutoRemoveGeofenceRoles { get; set; } + [JsonPropertyName("questsPurge")] + public QuestsPurgeConfig QuestsPurge { get; set; } = new(); /// - /// Gets or sets whether city roles require a Donor role + /// Gets or sets the nests config to use with reporting current nests /// - [JsonProperty("citiesRequireSupporterRole")] - public bool CitiesRequireSupporterRole { get; set; } + [JsonPropertyName("nests")] + public NestsConfig Nests { get; set; } = new(); /// - /// Gets or sets whether to prune previous field research quest channels at midnight + /// Gets or sets the daily stats configuration for nightly channel postings /// - [JsonProperty("pruneQuestChannels")] - public bool PruneQuestChannels { get; set; } - - /// - /// Gets or sets a list of field research quest channel ID(s) to reset - /// - [JsonProperty("questChannelIds")] - public List QuestChannelIds { get; set; } - - /// - /// Gets or sets the nests channel ID to report nests - /// - [JsonProperty("nestsChannelId")] - public ulong NestsChannelId { get; set; } - - /// - /// Gets or sets the minimum nest spawns per hour to limit nest posts by - /// - [JsonProperty("nestsMinimumPerHour")] - public int NestsMinimumPerHour { get; set; } - - /// - /// Gets or sets the shiny stats configuration class - /// - [JsonProperty("shinyStats")] - public ShinyStatsConfig ShinyStats { get; set; } + [JsonPropertyName("dailyStats")] + public DailyStatsConfig DailyStats { get; set; } = new(); /// /// Gets or sets the icon style for messages on the Discord server /// - [JsonProperty("iconStyle")] - public string IconStyle { get; set; } + [JsonPropertyName("iconStyle")] + public string IconStyle { get; set; } = "Default"; /// - /// Gets or sets the bot channel ID(s) + /// Gets or sets the DiscordClient minimum log level to use for the DSharpPlus + /// internal logger (separate from the main logs) /// - [JsonProperty("botChannelIds")] - public List BotChannelIds { get; set; } - - /// - /// Gets or sets the Discord bot's custom status - /// - [JsonProperty("status")] - public string Status { get; set; } - - /// - /// Gets or sets the alerts file to use with direct message subscriptions - /// - [JsonProperty("dmAlertsFile")] - public string DmAlertsFile { get; set; } - - /// - /// Gets or sets the direct message alerts class to use for subscriptions - /// - [JsonIgnore] - public AlertMessage DmAlerts { get; set; } + public LogLevel LogLevel { get; set; } /// /// Instantiate a new class @@ -163,21 +108,37 @@ public class DiscordServerConfig public DiscordServerConfig() { //Locale = "en"; - ModeratorRoleIds = new List(); - IconStyle = "Default"; - QuestChannelIds = new List(); - ShinyStats = new ShinyStatsConfig(); - Subscriptions = new SubscriptionsConfig(); - NestsMinimumPerHour = 1; - DmAlertsFile = "default.json"; - - LoadDmAlerts(); + LogLevel = LogLevel.Error; } - public void LoadDmAlerts() + public void LoadGeofences() { - var path = Path.Combine(Strings.AlertsFolder, DmAlertsFile); - DmAlerts = MasterFile.LoadInit(path); + Geofences.Clear(); + + var geofenceFiles = GeofenceFiles; + var geofences = new List(); + + if (geofenceFiles != null && geofenceFiles.Any()) + { + foreach (var file in geofenceFiles) + { + var filePath = Path.Combine(Strings.GeofencesFolder, file); + + try + { + var fileGeofences = Geofence.FromFile(filePath); + geofences.AddRange(fileGeofences); + Console.WriteLine($"Successfully loaded {fileGeofences.Count} geofences from {file}"); + } + catch (Exception ex) + { + Console.WriteLine($"Could not load Geofence file {file}");// (for server {serverId}):"); + Console.WriteLine(ex); + } + } + } + + Geofences.AddRange(geofences); } } } \ No newline at end of file diff --git a/src/Configuration/EventPokemonConfig.cs b/src/Configuration/EventPokemonConfig.cs new file mode 100644 index 00000000..e693d523 --- /dev/null +++ b/src/Configuration/EventPokemonConfig.cs @@ -0,0 +1,54 @@ +namespace WhMgr.Configuration +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + + using WhMgr.Services.Alarms.Filters; + + public class EventPokemonConfig + { + /// + /// Gets or sets a value determining whether to enable the event Pokemon + /// filtering. + /// + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } + + /// + /// Gets or sets the event Pokemon IDs list. + /// + [JsonPropertyName("pokemonIds")] + public List PokemonIds { get; set; } = new(); + + /// + /// Gets or sets the minimum IV value for an event Pokemon to be to process + /// for channel alarms or direct message subscriptions. + /// + [JsonPropertyName("minimumIV")] + public int MinimumIV { get; set; } = 90; + + // TODO: Add minimumRank EventPokemon config property + + /// + /// Gets or sets the event pokemon filter type. + /// + /// Explaination: Filtering type to use with deemed "event" Pokemon. + /// Set to `Include` if you do not want the Pokemon reported unless + /// it meets the minimumIV value set (or is 0% or has PvP ranks). + /// Set to `Exclude` if you only want the Pokemon reported if it meets + /// the minimum IV value set. No other Pokemon will be reported other + /// than those in the event list. + /// + /// + [JsonPropertyName("type")] + public FilterType FilterType { get; set; } = FilterType.Include; + + /// + /// Gets or sets a value determining whether to ignore event Pokemon + /// missing IV stats. + /// + [JsonPropertyName("ignoreMissingStats")] + public bool IgnoreMissingStats { get; set; } = true; +} +} \ No newline at end of file diff --git a/src/Configuration/GeofenceRolesConfig.cs b/src/Configuration/GeofenceRolesConfig.cs new file mode 100644 index 00000000..e56703f1 --- /dev/null +++ b/src/Configuration/GeofenceRolesConfig.cs @@ -0,0 +1,31 @@ +namespace WhMgr.Configuration +{ + using System.Text.Json.Serialization; + + /// + /// Configuration file determining if geofences should be used as + /// assignable roles + /// + public class GeofenceRolesConfig + { + /// + /// Gets or sets a value determining whether to enable assigning + /// geofence/area/city roles or not + /// + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } + + /// + /// Gets or sets a value determining whether geofence roles should be + /// removed when a donor role is removed from a Discord member + /// + [JsonPropertyName("autoRemove")] + public bool AutoRemove { get; set; } = true; + + /// + /// Gets or sets whether geofence roles require a Donor role + /// + [JsonPropertyName("requiresDonorRole")] + public bool RequiresDonorRole { get; set; } + } +} \ No newline at end of file diff --git a/src/Configuration/IconStyleConfig.cs b/src/Configuration/IconStyleConfig.cs new file mode 100644 index 00000000..c9af58f4 --- /dev/null +++ b/src/Configuration/IconStyleConfig.cs @@ -0,0 +1,23 @@ +namespace WhMgr.Configuration +{ + using System; + using System.Text.Json.Serialization; + + using WhMgr.Services.Icons.Models; + + public class IconStyleConfig + { + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("path")] + public string Path { get; set; } + + [JsonIgnore] + //public HashSet IndexList { get; set; } = new(); + public dynamic IndexList { get; set; } + + [JsonIgnore] + public BaseIndexManifest BaseIndexList { get; set; } = new(); + } +} \ No newline at end of file diff --git a/src/Configuration/NestsConfig.cs b/src/Configuration/NestsConfig.cs new file mode 100644 index 00000000..af98e689 --- /dev/null +++ b/src/Configuration/NestsConfig.cs @@ -0,0 +1,25 @@ +namespace WhMgr.Configuration +{ + using System.Text.Json.Serialization; + + public class NestsConfig + { + /// + /// Gets or sets a value determining whether to post nest listings or not + /// + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } + + /// + /// Gets or sets the nests channel ID to report nests + /// + [JsonPropertyName("channelId")] + public ulong ChannelId { get; set; } + + /// + /// Gets or sets the minimum nest spawns per hour to limit nest posts by + /// + [JsonPropertyName("minimumPerHour")] + public int MinimumPerHour { get; set; } = 1; + } +} \ No newline at end of file diff --git a/src/Configuration/PvpLeagueConfig.cs b/src/Configuration/PvpLeagueConfig.cs new file mode 100644 index 00000000..380cb984 --- /dev/null +++ b/src/Configuration/PvpLeagueConfig.cs @@ -0,0 +1,20 @@ +namespace WhMgr.Configuration +{ + using System; + using System.Text.Json.Serialization; + + public class PvpLeagueConfig + { + [JsonPropertyName("minCP")] + public ushort MinimumCP { get; set; } + + [JsonPropertyName("maxCP")] + public ushort MaximumCP { get; set; } + + [JsonPropertyName("minRank")] + public ushort MinimumRank { get; set; } + + [JsonPropertyName("maxRank")] + public ushort MaximumRank { get; set; } + } +} \ No newline at end of file diff --git a/src/Configuration/QuestsPurgeConfig.cs b/src/Configuration/QuestsPurgeConfig.cs new file mode 100644 index 00000000..01df9c2f --- /dev/null +++ b/src/Configuration/QuestsPurgeConfig.cs @@ -0,0 +1,21 @@ +namespace WhMgr.Configuration +{ + using System.Collections.Generic; + using System.Text.Json.Serialization; + + public class QuestsPurgeConfig + { + /// + /// Gets or sets whether to prune previous field research quest channels + /// at midnight + /// + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } + + /// + /// Gets or sets a list of field research quest channel ID(s) to reset + /// + [JsonPropertyName("channels")] + public Dictionary> ChannelIds { get; set; } = new(); + } +} \ No newline at end of file diff --git a/src/Configuration/ReverseGeocodingConfig.cs b/src/Configuration/ReverseGeocodingConfig.cs new file mode 100644 index 00000000..ca4793d3 --- /dev/null +++ b/src/Configuration/ReverseGeocodingConfig.cs @@ -0,0 +1,65 @@ +namespace WhMgr.Configuration +{ + using System.Text.Json.Serialization; + + using WhMgr.Services.Geofence.Geocoding; + + public class ReverseGeocodingConfig + { + /// + /// Gets or sets a value determining which reverse geocoding provider + /// to use. (Google Maps or OpenStreetMaps Nominatim) + /// + [JsonPropertyName("provider")] + public ReverseGeocodingProvider Provider { get; set; } + + /// + /// Gets or sets a value determining whether to cache reverse geocoding + /// lookups to disk if set to true, otherwise cache in memory. + /// + [JsonPropertyName("cacheToDisk")] + public bool CacheToDisk { get; set; } + + /// + /// Gets or sets the Google Maps config for reverse geocoding. + /// + [JsonPropertyName("gmaps")] + public GoogleMapsConfig GoogleMaps { get; set; } + + /// + /// Gets or set the OpenStreetMaps Nominatim config for reverse geocoding. + /// + [JsonPropertyName("nominatim")] + public NominatimConfig Nominatim { get; set; } + } + + public class GoogleMapsConfig + { + /// + /// Gets or sets the Google maps key for location lookup + /// + [JsonPropertyName("key")] + public string Key { get; set; } + + /// + /// Gets or sets the Google maps location string schema + /// + [JsonPropertyName("schema")] + public string Schema { get; set; } + } + + public class NominatimConfig + { + /// + /// Gets or sets the OpenStreetMaps Nominatim endpoint to use for reverse location lookup + /// + [JsonPropertyName("endpoint")] + public string Endpoint { get; set; } + + /// + /// Gets or sets the OpenStreetMaps Nominatim location string schema + /// + [JsonPropertyName("schema")] + public string Schema { get; set; } + } +} \ No newline at end of file diff --git a/src/Configuration/ShinyStatsConfig.cs b/src/Configuration/ShinyStatsConfig.cs deleted file mode 100644 index 40f1f0ba..00000000 --- a/src/Configuration/ShinyStatsConfig.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace WhMgr.Configuration -{ - using Newtonsoft.Json; - - /// - /// Shiny stats Pokemon configuration class - /// - public class ShinyStatsConfig - { - /// - /// Gets or sets whether to enable shiny stats posting - /// - [JsonProperty("enabled")] - public bool Enabled { get; set; } - - /// - /// Gets or sets whether to clear the previous shiny stats messages - /// - [JsonProperty("clearMessages")] - public bool ClearMessages { get; set; } - - /// - /// Gets or sets the channel ID to post the shiny stats to - /// - [JsonProperty("channelId")] - public ulong ChannelId { get; set; } - } -} \ No newline at end of file diff --git a/src/Configuration/StaticMapConfig.cs b/src/Configuration/StaticMapConfig.cs new file mode 100644 index 00000000..777a3d0b --- /dev/null +++ b/src/Configuration/StaticMapConfig.cs @@ -0,0 +1,27 @@ +namespace WhMgr.Configuration +{ + using System.Text.Json.Serialization; + + using WhMgr.Services.StaticMap; + + public class StaticMapConfig + { + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } = true; + + [JsonPropertyName("url")] + public string Url { get; set; } + + [JsonPropertyName("type")] + public StaticMapTemplateType Type { get; set; } = StaticMapTemplateType.StaticMap; + + [JsonPropertyName("includeGyms")] + public bool IncludeNearbyGyms { get; set; } + + [JsonPropertyName("includePokestops")] + public bool IncludeNearbyPokestops { get; set; } + + [JsonPropertyName("pregenerate")] + public bool Pregenerate { get; set; } = true; + } +} \ No newline at end of file diff --git a/src/Configuration/StatsConfig.cs b/src/Configuration/StatsConfig.cs new file mode 100644 index 00000000..3ada54f1 --- /dev/null +++ b/src/Configuration/StatsConfig.cs @@ -0,0 +1,16 @@ +namespace WhMgr.Configuration +{ + using System.Text.Json.Serialization; + + public class StatsConfig + { + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } + + [JsonPropertyName("clearMessages")] + public bool ClearMessages { get; set; } + + [JsonPropertyName("channelId")] + public ulong ChannelId { get; set; } + } +} \ No newline at end of file diff --git a/src/Configuration/StripeConfig.cs b/src/Configuration/StripeConfig.cs new file mode 100644 index 00000000..282c92b3 --- /dev/null +++ b/src/Configuration/StripeConfig.cs @@ -0,0 +1,10 @@ +namespace WhMgr.Configuration +{ + using System.Text.Json.Serialization; + + public class StripeConfig + { + [JsonPropertyName("apiKey")] + public string ApiKey { get; set; } + } +} \ No newline at end of file diff --git a/src/Configuration/SubscriptionAccessType.cs b/src/Configuration/SubscriptionAccessType.cs new file mode 100644 index 00000000..ffcd7e83 --- /dev/null +++ b/src/Configuration/SubscriptionAccessType.cs @@ -0,0 +1,16 @@ +namespace WhMgr.Configuration +{ + using System.Text.Json.Serialization; + + [JsonConverter(typeof(JsonStringEnumConverter))] + public enum SubscriptionAccessType + { + Pokemon = 0, + PvP, + Raids, + Quests, + Invasions, + Lures, + Gyms, + } +} \ No newline at end of file diff --git a/src/Configuration/SubscriptionsConfig.cs b/src/Configuration/SubscriptionsConfig.cs index 7dc1dc2d..a08df042 100644 --- a/src/Configuration/SubscriptionsConfig.cs +++ b/src/Configuration/SubscriptionsConfig.cs @@ -1,35 +1,57 @@ namespace WhMgr.Configuration { - using Newtonsoft.Json; + using System.IO; + using System.Text.Json.Serialization; + + using WhMgr.Extensions; + using WhMgr.Services.Alarms.Embeds; public class SubscriptionsConfig { - [JsonProperty("enabled")] + [JsonPropertyName("enabled")] public bool Enabled { get; set; } - [JsonProperty("maxPokemonSubscriptions")] + [JsonPropertyName("maxPokemonSubscriptions")] public int MaxPokemonSubscriptions { get; set; } - [JsonProperty("maxPvPSubscriptions")] + [JsonPropertyName("maxPvPSubscriptions")] public int MaxPvPSubscriptions { get; set; } - [JsonProperty("maxRaidSubscriptions")] + [JsonPropertyName("maxRaidSubscriptions")] public int MaxRaidSubscriptions { get; set; } - [JsonProperty("maxQuestSubscriptions")] + [JsonPropertyName("maxQuestSubscriptions")] public int MaxQuestSubscriptions { get; set; } - [JsonProperty("maxInvasionSubscriptions")] + [JsonPropertyName("maxInvasionSubscriptions")] public int MaxInvasionSubscriptions { get; set; } - [JsonProperty("maxLureSubscriptions")] + [JsonPropertyName("maxLureSubscriptions")] public int MaxLureSubscriptions { get; set; } - [JsonProperty("maxGymSubscriptions")] + [JsonPropertyName("maxGymSubscriptions")] public int MaxGymSubscriptions { get; set; } - [JsonProperty("maxNotificationsPerMinute")] - public int MaxNotificationsPerMinute { get; set; } + /// + /// Gets or sets the maximum amount of notifications a user can receive per minute per server before being rate limited + /// + [JsonPropertyName("maxNotificationsPerMinute")] + public ushort MaxNotificationsPerMinute { get; set; } + + [JsonPropertyName("url")] + public string Url { get; set; } + + /// + /// Gets or sets the embeds file to use with direct message subscriptions + /// + [JsonPropertyName("embedsFile")] + public string EmbedsFile { get; set; } = "default.json"; + + /// + /// Gets or sets the direct message embeds class to use for subscriptions + /// + [JsonIgnore] + public EmbedMessage Embeds { get; set; } public SubscriptionsConfig() { @@ -41,7 +63,15 @@ public SubscriptionsConfig() MaxInvasionSubscriptions = 0; MaxLureSubscriptions = 0; MaxGymSubscriptions = 0; - MaxNotificationsPerMinute = 15; + MaxNotificationsPerMinute = 10; + + LoadDmEmbeds(); + } + + public void LoadDmEmbeds() + { + var path = Path.Combine(Strings.EmbedsFolder, EmbedsFile); + Embeds = path.LoadFromFile(); } } } \ No newline at end of file diff --git a/src/Configuration/TwilioConfig.cs b/src/Configuration/TwilioConfig.cs index 58753b7c..305bbc30 100644 --- a/src/Configuration/TwilioConfig.cs +++ b/src/Configuration/TwilioConfig.cs @@ -1,33 +1,33 @@ namespace WhMgr.Configuration { + using System; using System.Collections.Generic; - - using Newtonsoft.Json; + using System.Text.Json.Serialization; public class TwilioConfig { - [JsonProperty("enabled")] + [JsonPropertyName("enabled")] public bool Enabled { get; set; } - [JsonProperty("accountSid")] + [JsonPropertyName("accountSid")] public string AccountSid { get; set; } - [JsonProperty("authToken")] + [JsonPropertyName("authToken")] public string AuthToken { get; set; } - [JsonProperty("from")] + [JsonPropertyName("from")] public string FromNumber { get; set; } - [JsonProperty("userIds")] + [JsonPropertyName("userIds")] public List UserIds { get; set; } - [JsonProperty("roleIds")] + [JsonPropertyName("roleIds")] public List RoleIds { get; set; } - [JsonProperty("pokemonIds")] + [JsonPropertyName("pokemonIds")] public List PokemonIds { get; set; } - [JsonProperty("minIV")] + [JsonPropertyName("minIV")] public int MinimumIV { get; set; } public TwilioConfig() @@ -47,9 +47,9 @@ public TwilioConfig() 635, // Hydreigon 610, // Axew 611, // Fraxure - 612 // Haxorus + 612, // Haxorus }; MinimumIV = 100; } } -} \ No newline at end of file +} diff --git a/src/Configuration/UrlConfig.cs b/src/Configuration/UrlConfig.cs index 4b9d5734..be3a30fa 100644 --- a/src/Configuration/UrlConfig.cs +++ b/src/Configuration/UrlConfig.cs @@ -1,22 +1,16 @@ namespace WhMgr.Configuration { - using Newtonsoft.Json; + using System.Text.Json.Serialization; /// /// Url configuration class /// public class UrlConfig { - /// - /// Gets or sets the static map image url - /// - [JsonProperty("staticMap")] - public string StaticMap { get; set; } - /// /// Gets or sets the scanner map url /// - [JsonProperty("scannerMap")] + [JsonPropertyName("scannerMap")] public string ScannerMap { get; set; } } } \ No newline at end of file diff --git a/src/Configuration/UrlShortenerConfig.cs b/src/Configuration/UrlShortenerConfig.cs new file mode 100644 index 00000000..6812b50c --- /dev/null +++ b/src/Configuration/UrlShortenerConfig.cs @@ -0,0 +1,39 @@ +namespace WhMgr.Configuration +{ + using System.Text.Json.Serialization; + + public class UrlShortenerConfig + { + /// + /// Gets or sets a value determining whether the url shortener api is enabled or not + /// + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } + + /// + /// Gets or sets the base API url for yourls.org + /// + [JsonPropertyName("apiUrl")] + public string ApiUrl { get; set; } + + /// + /// Gets or sets the url shortener signature + /// + [JsonPropertyName("signature")] + public string Signature { get; set; } + + /// + /// Gets or sets the default response action, only 'shorturl' is currently supported + /// + //[JsonPropertyName("action")] + [JsonIgnore] + public string Action { get; set; } = "shorturl"; + + /// + /// Gets or sets the default response format, only 'json' is currently supported + /// + //[JsonPropertyName("format")] + [JsonIgnore] + public string Format { get; set; } = "json"; + } +} \ No newline at end of file diff --git a/src/Controllers/AdminApiController.cs b/src/Controllers/AdminApiController.cs new file mode 100644 index 00000000..6a904ee4 --- /dev/null +++ b/src/Controllers/AdminApiController.cs @@ -0,0 +1,1378 @@ +namespace WhMgr.Controllers +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net.Mime; + using System.Text; + using System.Text.Json.Serialization; + using System.Threading.Tasks; + + using Microsoft.AspNetCore.Http; + using Microsoft.AspNetCore.Mvc; + using Microsoft.Extensions.Logging; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Services.Alarms.Embeds; + using WhMgr.Services.Alarms.Filters.Models; + using WhMgr.Services.Alarms.Models; + + [ApiController] + [Route("/api/v1/admin/")] + public class AdminApiController : ControllerBase + { + private readonly ILogger _logger; + + public AdminApiController( + ILogger logger) + { + _logger = logger; + } + + [HttpGet("dashboard")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetDashboard() + { + return new JsonResult(new List + { + new { name = "Configs", count = Directory.GetFiles(Strings.ConfigsFolder, "*.json").Length }, + new { name = "Discords", count = Directory.GetFiles(Strings.DiscordsFolder, "*.json").Length }, + new { name = "Alarms", count = Directory.GetFiles(Strings.AlarmsFolder, "*.json").Length }, + new { name = "Filters", count = Directory.GetFiles(Strings.FiltersFolder, "*.json").Length }, + new { name = "Embeds", count = Directory.GetFiles(Strings.EmbedsFolder, "*.json").Length }, + new { name = "Geofences", count = Directory.GetFiles(Strings.GeofencesFolder).Length }, + new { name = "Roles", count = GetRoles().Count }, + new { name = "Users", count = 0 }, + }); + } + + #region Config API + + [HttpGet("configs")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetConfigs() + { + var files = Directory.GetFiles(Strings.ConfigsFolder, "*.json"); + //var configs = new Dictionary(); + var configs = new List(); + foreach (var file in files) + { + try + { + var name = Path.GetFileNameWithoutExtension(file); + var config = LoadFromFile(file); + configs.Add(new + { + id = name, + host = config.ListeningHost, + port = config.WebhookPort, + count = config.ServerConfigFiles.Count, + }); + Console.WriteLine($"Config: {config.ListeningHost}:{config.WebhookPort}"); + } + catch (Exception ex) + { + _logger.LogError($"Failed to parse config: {file}\nError: {ex}"); + } + } + return new JsonResult(configs); + } + + [HttpGet("config/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetConfig(string fileName) + { + var filePath = Path.Combine(Strings.ConfigsFolder, fileName + ".json"); + if (!System.IO.File.Exists(filePath)) + { + return SendErrorResponse($"Config '{fileName}' does not exist."); + } + var config = LoadFromFile(filePath); + var discordFiles = Directory.GetFiles(Strings.DiscordsFolder, "*.json"); + var discords = discordFiles.ToDictionary( + filePath => Path.GetFileName(filePath), + filePath => System.IO.File.ReadAllText(filePath).FromJson().Bot.GuildId.ToString()); + var locales = Directory.GetFiles( + Path.Combine( + Path.Combine( + Strings.BasePath, + Strings.LocaleFolder + ) + ), + "*.json" + ).Select(file => Path.GetFileNameWithoutExtension(file)); + + return new JsonResult(new + { + status = "OK", + data = new + { + config, + discords,// = discordFiles.Select(file => Path.GetFileName(file)), + locales, + }, + }); + } + + [HttpPost("config/new")] + [Produces(MediaTypeNames.Application.Json)] + public async Task CreateConfig() + { + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + + // Validate keys exist + if (!dict.ContainsKey("name")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var name = dict["name"].ToString(); + var config = data.FromJson(); + + // Save json + var json = config.ToJson(); + var path = Path.Combine(Strings.ConfigsFolder, name + ".json"); + if (System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to create config '{name}', config already exists."); + } + + await WriteDataAsync(path, json); + + return new JsonResult(new + { + status = "OK", + message = $"Config '{name}' succuessfully created.", + }); + } + + [HttpPut("config/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task UpdateConfig(string fileName) + { + var path = Path.Combine(Strings.ConfigsFolder, fileName + ".json"); + if (!System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to update config '{fileName}', config does not exist."); + } + + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + + // Validate keys exist + if (!dict.ContainsKey("name")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var newName = dict["name"].ToString(); + var config = data.FromJson(); + + // TODO: Check if new alarm already exists or not + var newFileName = $"{newName}.json"; + var newFilePath = Path.Combine(Strings.ConfigsFolder, newFileName); + if (!string.Equals(fileName + ".json", newFileName)) + { + // Move file to new path + System.IO.File.Move( + Path.Combine(Strings.DiscordsFolder, fileName + ".json"), + newFilePath + ); + } + + // Save json + var json = config.ToJson(); + await WriteDataAsync(newFilePath, json); + + return new JsonResult(new + { + status = "OK", + message = $"Config '{fileName}' successfully updated.", + }); + } + + [HttpDelete("config/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult DeleteConfig(string fileName) + { + var path = Path.Combine(Strings.ConfigsFolder, fileName + ".json"); + if (!System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to delete config '{fileName}', config does not exist."); + } + + // Delete config + System.IO.File.Delete(path); + + return new JsonResult(new + { + status = "OK", + message = $"Config '{fileName}' succuessfully deleted.", + }); + } + + #endregion + + #region Discord Servers API + + [HttpGet("discords")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetDiscords() + { + var files = Directory.GetFiles(Strings.DiscordsFolder, "*.json"); + var discords = new List(); + foreach (var file in files) + { + try + { + var name = Path.GetFileNameWithoutExtension(file); + var discord = LoadFromFile(file); + discords.Add(new + { + id = name, + alarms = discord.AlarmsFile, + geofences = discord.GeofenceFiles.Length, + subscriptions_enabled = discord.Subscriptions?.Enabled ?? false, + embeds = discord.Subscriptions.EmbedsFile, + icon_style = discord.IconStyle, + }); + } + catch (Exception ex) + { + _logger.Error($"Failed to parse discord: {file}\nError: {ex}"); + } + } + return new JsonResult(discords); + } + + [HttpGet("discord/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetDiscord(string fileName) + { + var filePath = Path.Combine(Strings.DiscordsFolder, fileName + ".json"); + if (!System.IO.File.Exists(filePath)) + { + return SendErrorResponse($"Discord '{fileName}' does not exist."); + } + var discord = LoadFromFile(filePath); + + var geofenceFiles = Directory.GetFiles(Strings.GeofencesFolder); + var validGeofences = new[] { ".json", ".txt" }; + var geofences = geofenceFiles.Where(f => validGeofences.Contains(Path.GetExtension(f))) + .Select(f => Path.GetFileName(f)); + + var alarms = Directory.GetFiles(Strings.AlarmsFolder, "*.json") + .Select(f => Path.GetFileName(f)); + var embeds = Directory.GetFiles(Strings.EmbedsFolder, "*.json") + .Select(f => Path.GetFileName(f)); + + var roles = GetRoles(); + var result = new List(); + foreach (var (roleId, role) in roles) + { + result.Add(new + { + id = roleId, + name = role.Name, + permissions = role.Permissions, + isModerator = role.IsModerator, + }); + } + + return new JsonResult(new + { + status = "OK", + data = new + { + discord, + allGeofences = geofences, + allAlarms = alarms, + allEmbeds = embeds, + allRoles = result, + allIconStyles = new List + { + "Default", + "Test", + }, + // TODO: Include icon styles + }, + }); + } + + [HttpPost("discord/new")] + [Produces(MediaTypeNames.Application.Json)] + public async Task CreateDiscord() + { + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + + // Validate keys exist + if (!dict.ContainsKey("name")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var name = dict["name"].ToString(); + var discord = data.FromJson(); + + // Save json + var json = discord.ToJson(); + var path = Path.Combine(Strings.DiscordsFolder, name + ".json"); + if (System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to create discord server '{name}', discord server already exists."); + } + + await WriteDataAsync(path, json); + + return new JsonResult(new + { + status = "OK", + message = $"Discord server '{name}' succuessfully created.", + }); + } + + [HttpPut("discord/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task UpdateDiscord(string fileName) + { + var path = Path.Combine(Strings.DiscordsFolder, fileName + ".json"); + if (!System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to update Discord server '{fileName}', Discord server does not exist."); + } + + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + + // Validate keys exist + if (!dict.ContainsKey("name"))// || + //!dict.ContainsKey("discord")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var newName = dict["name"].ToString(); + var discord = data.FromJson(); + + // TODO: Check if new alarm already exists or not + var newFileName = $"{newName}.json"; + var newFilePath = Path.Combine(Strings.DiscordsFolder, newFileName); + if (!string.Equals(fileName + ".json", newFileName)) + { + // Move file to new path + System.IO.File.Move( + Path.Combine(Strings.DiscordsFolder, fileName + ".json"), + newFilePath + ); + } + + // Save json + var json = discord.ToJson(); + await WriteDataAsync(newFilePath, json); + + return new JsonResult(new + { + status = "OK", + message = $"Discord server '{fileName}' successfully updated.", + }); + } + + [HttpDelete("discord/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult DeleteDiscord(string fileName) + { + var path = Path.Combine(Strings.DiscordsFolder, fileName + ".json"); + if (!System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to delete discord server '{fileName}', discord server does not exist."); + } + + // Delete discord server config + System.IO.File.Delete(path); + + return new JsonResult(new + { + status = "OK", + message = $"Discord server '{fileName}' succuessfully deleted.", + }); + } + + #endregion + + #region Alarms API + + [HttpGet("alarms")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetAlarms() + { + var files = Directory.GetFiles(Strings.AlarmsFolder, "*.json"); + var alarms = new List(); + foreach (var file in files) + { + try + { + var name = Path.GetFileNameWithoutExtension(file); + var alarm = LoadFromFile(file); + alarms.Add(new + { + id = name, + enable_pokemon = alarm.EnablePokemon, + enable_raids = alarm.EnableRaids, + enable_gyms = alarm.EnableGyms, + enable_quests = alarm.EnableQuests, + enable_pokestops = alarm.EnablePokestops, + enable_weather = alarm.EnableWeather, + count = alarm.Alarms.Count, + }); + } + catch (Exception ex) + { + _logger.Error($"Failed to parse alarm: {file}\nError: {ex}"); + } + } + return new JsonResult(alarms); + } + + [HttpGet("alarm/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetAlarm(string fileName) + { + var filePath = Path.Combine(Strings.AlarmsFolder, fileName + ".json"); + if (!System.IO.File.Exists(filePath)) + { + return BadRequest($"Alarm '{fileName}' does not exist"); + } + var alarm = LoadFromFile(filePath); + var embedFiles = Directory.GetFiles(Strings.EmbedsFolder, "*.json"); + var filterFiles = Directory.GetFiles(Strings.FiltersFolder, "*.json"); + var geofenceFiles = Directory.GetFiles(Strings.GeofencesFolder); + return new JsonResult(new + { + status = "OK", + data = new + { + alarm, + embeds = embedFiles.Select(file => Path.GetFileName(file)), + filters = filterFiles.Select(file => Path.GetFileName(file)), + geofences = geofenceFiles.Select(file => Path.GetFileName(file)), + }, + }); + } + + [HttpPost("alarm/new")] + [Produces(MediaTypeNames.Application.Json)] + public async Task CreateAlarm() + { + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + + // Validate keys exist + if (!dict.ContainsKey("name") || + !dict.ContainsKey("alarm")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var name = dict["name"].ToString(); + var alarmJson = dict["alarm"].ToString(); + var alarm = alarmJson.FromJson(); + + // Save json + var json = alarm.ToJson(); + var path = Path.Combine(Strings.AlarmsFolder, name + ".json"); + if (System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to create alarm '{name}', alarm already exists."); + } + + await WriteDataAsync(path, json); + + return new JsonResult(new + { + status = "OK", + message = $"Alarm '{name}' succuessfully created.", + }); + } + + [HttpPut("alarm/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task UpdateAlarm(string fileName) + { + var path = Path.Combine(Strings.AlarmsFolder, fileName + ".json"); + if (!System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to update alarm '{fileName}', alarm does not exist."); + } + + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + + // Validate keys exist + if (!dict.ContainsKey("name") || + !dict.ContainsKey("alarm")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var newName = dict["name"].ToString(); + + var alarmJson = dict["alarm"].ToString(); + var alarm = alarmJson.FromJson(); + + // TODO: Check if new alarm already exists or not + var newFileName = $"{newName}.json"; + var newFilePath = Path.Combine(Strings.AlarmsFolder, newFileName); + if (!string.Equals(fileName + ".json", newFileName)) + { + // Move file to new path + System.IO.File.Move( + Path.Combine(Strings.AlarmsFolder, fileName + ".json"), + newFilePath + ); + } + + // Save json + var json = alarm.ToJson(); + await WriteDataAsync(newFilePath, json); + + return new JsonResult(new + { + status = "OK", + message = $"Alarm '{fileName}' successfully updated.", + }); + } + + [HttpDelete("alarm/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult DeleteAlarm(string fileName) + { + var path = Path.Combine(Strings.AlarmsFolder, fileName + ".json"); + if (!System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to delete alarm '{fileName}', alarm does not exist."); + } + + // Delete geofence + System.IO.File.Delete(path); + + return new JsonResult(new + { + status = "OK", + message = $"Alarm '{fileName}' succuessfully deleted.", + }); + } + + #endregion + + #region Filters API + + [HttpGet("filters")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetFilters() + { + var files = Directory.GetFiles(Strings.FiltersFolder, "*.json"); + var filters = new List(); + foreach (var file in files) + { + try + { + var name = Path.GetFileNameWithoutExtension(file); + var filter = LoadFromFile(file); + filters.Add(new + { + id = name, + pokemon = filter.Pokemon?.Enabled ?? false, + raids = filter.Raids?.Enabled ?? false, + gyms = filter.Gyms?.Enabled ?? false, + quests = filter.Quests?.Enabled ?? false, + pokestops = filter.Pokestops?.Enabled ?? false, + weather = filter.Weather?.Enabled ?? false, + }); + } + catch (Exception ex) + { + _logger.Error($"Failed to prase filter: {file}\nError: {ex}"); + } + } + return new JsonResult(filters); + } + + [HttpGet("filter/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetFilter(string fileName) + { + var filePath = Path.Combine(Strings.FiltersFolder, fileName + ".json"); + if (!System.IO.File.Exists(filePath)) + { + return SendErrorResponse($"Filter '{fileName}' does not exist."); + } + var filter = LoadFromFile(filePath); + + return new JsonResult(new + { + status = "OK", + data = new + { + filter, + }, + }); + } + + [HttpPost("filter/new")] + [Produces(MediaTypeNames.Application.Json)] + public async Task CreateFilter() + { + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + + // Validate keys exist + if (!dict.ContainsKey("name") || + !dict.ContainsKey("filter")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var name = dict["name"].ToString(); + var filterJson = dict["filter"].ToString(); + var filter = filterJson.FromJson(); + + var path = Path.Combine(Strings.FiltersFolder, name + ".json"); + if (System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to create filter '{name}', filter already exists."); + } + + // Save json + var json = filter.ToJson(); + await WriteDataAsync(path, json); + + return new JsonResult(new + { + status = "OK", + message = $"Filter '{name}' succuessfully created.", + }); + } + + [HttpPut("filter/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task UpdateFilter(string fileName) + { + var path = Path.Combine(Strings.FiltersFolder, fileName + ".json"); + if (!System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to update filter '{fileName}', filter does not exist."); + } + + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + + // Validate keys exist + if (!dict.ContainsKey("name") || + !dict.ContainsKey("filter")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var newName = dict["name"].ToString(); + var filterJson = dict["filter"].ToString(); + var filter = filterJson.FromJson(); + + // TODO: Check if new filter already exists or not + var newFileName = $"{newName}.json"; + var newFilePath = Path.Combine(Strings.FiltersFolder, newFileName); + if (!string.Equals(fileName + ".json", newFileName)) + { + // Move file to new path + System.IO.File.Move( + Path.Combine(Strings.FiltersFolder, fileName + ".json"), + newFilePath + ); + } + + // Save json + var json = filter.ToJson(); + await WriteDataAsync(newFilePath, json); + + return new JsonResult(new + { + status = "OK", + message = $"Filter '{fileName}' succuessfully updated.", + }); + } + + [HttpDelete("filter/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult DeleteFilter(string fileName) + { + var path = Path.Combine(Strings.FiltersFolder, fileName + ".json"); + if (!System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to delete filter '{fileName}', filter does not exist."); + } + + // Delete geofence + System.IO.File.Delete(path); + + return new JsonResult(new + { + status = "OK", + message = $"Filter '{fileName}' succuessfully deleted.", + }); + } + + #endregion + + #region Embeds API + + [HttpGet("embeds")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetEmbeds() + { + var files = Directory.GetFiles(Strings.EmbedsFolder, "*.json"); + var embeds = new List(); + foreach (var file in files) + { + try + { + var name = Path.GetFileNameWithoutExtension(file); + var embed = LoadFromFile(file); + embeds.Add(new + { + id = name, + pokemon = embed.ContainsKey(EmbedMessageType.Pokemon), + pokemon_missing_stats = embed.ContainsKey(EmbedMessageType.PokemonMissingStats), + raids = embed.ContainsKey(EmbedMessageType.Raids), + eggs = embed.ContainsKey(EmbedMessageType.Eggs), + gyms = embed.ContainsKey(EmbedMessageType.Gyms), + pokestops = embed.ContainsKey(EmbedMessageType.Pokestops), + quests = embed.ContainsKey(EmbedMessageType.Quests), + lures = embed.ContainsKey(EmbedMessageType.Lures), + invasions = embed.ContainsKey(EmbedMessageType.Invasions), + nests = embed.ContainsKey(EmbedMessageType.Nests), + weather = embed.ContainsKey(EmbedMessageType.Weather), + }); + } + catch (Exception ex) + { + _logger.Error($"Failed to parse embed: {file}\nError: {ex}"); + } + } + return new JsonResult(embeds); + } + + [HttpGet("embed/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetEmbed(string fileName) + { + var filePath = Path.Combine(Strings.EmbedsFolder, fileName + ".json"); + if (!System.IO.File.Exists(filePath)) + { + return SendErrorResponse($"Embed '{fileName}' does not exist."); + } + var embed = LoadFromFile(filePath); + + var embedFiles = Directory.GetFiles(Strings.EmbedsFolder, "*.json") + .Select(f => Path.GetExtension(f)); + + return new JsonResult(new + { + status = "OK", + data = new + { + embed, + placeholders = GetDtsPlaceholders(), + }, + }); + } + + [HttpPost("embed/new")] + [Produces(MediaTypeNames.Application.Json)] + public async Task CreateEmbed() + { + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + + // Validate keys exist + if (!dict.ContainsKey("name") || + !dict.ContainsKey("embed")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var name = dict["name"].ToString(); + var embedJson = dict["embed"].ToString(); + var embed = embedJson.FromJson(); + + // Save json + var json = embed.ToJson(); + var path = Path.Combine(Strings.EmbedsFolder, name + ".json"); + if (System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to create embed '{name}', embed already exists."); + } + + await WriteDataAsync(path, json); + + return new JsonResult(new + { + status = "OK", + message = $"Embed '{name}' succuessfully created.", + }); + } + + [HttpPut("embed/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task UpdateEmbed(string fileName) + { + var path = Path.Combine(Strings.EmbedsFolder, fileName + ".json"); + if (!System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to update embed '{fileName}', embed does not exist."); + } + + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + + // Validate keys exist + if (!dict.ContainsKey("name") || + !dict.ContainsKey("embed")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var newName = dict["name"].ToString(); + + var embedJson = dict["embed"].ToString(); + var embed = embedJson.FromJson(); + + // TODO: Check if new embed already exists or not + var newFileName = $"{newName}.json"; + var newFilePath = Path.Combine(Strings.EmbedsFolder, newFileName); + if (!string.Equals(fileName + ".json", newFileName)) + { + // Move file to new path + System.IO.File.Move( + Path.Combine(Strings.EmbedsFolder, fileName + ".json"), + newFilePath + ); + } + + // Save json + var json = embed.ToJson(); + await WriteDataAsync(newFilePath, json); + + return new JsonResult(new + { + status = "OK", + message = $"Embed '{fileName}' succuessfully updated.", + }); + } + + [HttpDelete("embed/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult DeleteEmbed(string fileName) + { + var path = Path.Combine(Strings.EmbedsFolder, fileName + ".json"); + if (!System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to delete embed '{fileName}', embed does not exist."); + } + + // Delete geofence + System.IO.File.Delete(path); + + return new JsonResult(new + { + status = "OK", + message = $"Embed '{fileName}' succuessfully deleted.", + }); + } + + #endregion + + #region Geofences API + + [HttpGet("geofences")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetGeofences() + { + var files = Directory.GetFiles(Strings.GeofencesFolder); + var configs = files.Select(file => new { + id = Path.GetFileName(file), + }); + return new JsonResult(configs); + } + + [HttpGet("geofence/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetGeofence(string fileName) + { + var filePath = Path.Combine(Strings.GeofencesFolder, fileName); + if (!System.IO.File.Exists(filePath)) + { + return BadRequest($"Geofence '{fileName}' does not exist"); + } + var geofence = LoadFromFile(filePath); + + return new JsonResult(new + { + status = "OK", + data = new + { + name = Path.GetFileNameWithoutExtension(fileName), + geofence, + format = Path.GetExtension(fileName) + }, + }); + } + + [HttpPost("geofence/new")] + [Produces(MediaTypeNames.Application.Json)] + public async Task CreateGeofence() + { + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + // Validate keys exist + if (!dict.ContainsKey("name") || + !dict.ContainsKey("format") || + !dict.ContainsKey("geofence")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var name = dict["name"].ToString(); + var saveFormat = dict["format"].ToString(); + var geofenceData = dict["geofence"].ToString(); + + var fileName = name + saveFormat; + var path = Path.Combine(Strings.GeofencesFolder, fileName); + if (System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to create geofence '{fileName}', geofence already exists."); + } + + await SaveGeofence(name, name, geofenceData, saveFormat); + return new JsonResult(new + { + status = "OK", + message = $"Geofence '{name}' succuessfully created.", + }); + } + + [HttpPut("geofence/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task UpdateGeofence(string fileName) + { + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + // Validate keys exist + if (!dict.ContainsKey("name") || + !dict.ContainsKey("format") || + !dict.ContainsKey("geofence")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var name = dict["name"].ToString(); + var saveFormat = dict["format"].ToString(); + var geofenceData = dict["geofence"].ToString(); + + await SaveGeofence(fileName, name, geofenceData, saveFormat); + return new JsonResult(new + { + status = "OK", + message = $"Geofence '{name}' succuessfully updated.", + }); + } + + [HttpDelete("geofence/{fileName}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult DeleteGeofence(string fileName) + { + var path = Path.Combine(Strings.GeofencesFolder, fileName); + if (!System.IO.File.Exists(path)) + { + return SendErrorResponse($"Failed to delete geofence '{fileName}', geofence does not exist."); + } + + // Delete geofence + System.IO.File.Delete(path); + + return new JsonResult(new + { + status = "OK", + message = $"Geofence '{fileName}' succuessfully deleted.", + }); + } + + #endregion + + #region Discord Roles API + + [HttpGet("roles")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetDiscordRoles() + { + var roles = GetRoles(); + var result = new List(); + foreach (var (roleId, role) in roles) + { + result.Add(new + { + id = roleId, + name = role.Name, + permissions = role.Permissions, + moderator = role.IsModerator, + }); + } + return new JsonResult(result); + } + + [HttpGet("role/{name}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetDiscordRole(string name) + { + var roles = GetRoles(); + var (roleId, role) = roles.FirstOrDefault(role => + string.Equals(role.Value.Name, name, StringComparison.InvariantCultureIgnoreCase)); + if (role == null) + { + return SendErrorResponse($"Failed to get Discord role '{name}', role does not exist."); + } + return new JsonResult(new + { + status = "OK", + data = new + { + roleId = roleId.ToString(), + role, + }, + }); + } + + [HttpPost("role/new")] + [Produces(MediaTypeNames.Application.Json)] + public async Task CreateDiscordRole() + { + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + var roles = GetRoles(); + + var name = Convert.ToString(dict["name"]); + var roleId = Convert.ToUInt64(dict["roleId"].ToString()); + var permissions = dict["permissions"].ToString(); + var permissionsList = permissions.FromJson>(); + var roleConfig = new RoleConfig + { + Name = name, + IsModerator = Convert.ToBoolean(dict["moderator"].ToString()), + Permissions = permissionsList, + }; + + // TODO: Check if already exists + + if (!roles.ContainsKey(roleId)) + { + roles.Add(roleId, roleConfig); + } + else + { + roles[roleId] = roleConfig; + } + + var path = Strings.BasePath + "wwwroot/static/data/roles.json"; + await WriteDataAsync(path, roles); + return new JsonResult(new + { + status = "OK", + message = $"Discord role '{name}' succuessfully created.", + }); + } + + [HttpPut("role/{name}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task UpdateDiscordRole(string name) + { + var data = await Request.GetRawBodyStringAsync(); + var dict = data.FromJson>(); + // Validate keys exist + if (!dict.ContainsKey("name") || + !dict.ContainsKey("roleId") || + !dict.ContainsKey("permissions")) + { + return SendErrorResponse($"One or more required properties not specified."); + } + + var roles = GetRoles(); + var newName = Convert.ToString(dict["name"]); + var roleId = Convert.ToUInt64(dict["roleId"].ToString()); + var permissions = dict["permissions"].ToString(); + var permissionsList = permissions.FromJson>(); + var roleConfig = new RoleConfig + { + Name = newName, + IsModerator = Convert.ToBoolean(dict["moderator"].ToString()), + Permissions = permissionsList, + }; + + if (!roles.ContainsKey(roleId)) + { + roles.Add(roleId, roleConfig); + } + else + { + roles[roleId] = roleConfig; + } + + var path = Strings.BasePath + "wwwroot/static/data/roles.json"; + await WriteDataAsync(path, roles); + return new JsonResult(new + { + status = "OK", + message = $"Discord role '{name}' succuessfully updated.", + }); + } + + [HttpDelete("role/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task DeleteDiscordRole(ulong id) + { + var roles = GetRoles(); + if (!roles.ContainsKey(id)) + { + return SendErrorResponse($"Failed to delete Discord role '{id}', role does not exist."); + } + + roles.Remove(id); + + var path = Strings.BasePath + "wwwroot/static/data/roles.json"; + await WriteDataAsync(path, roles); + return new JsonResult(new + { + status = "OK", + message = $"Discord role '{id}' succuessfully deleted.", + }); + } + + #endregion + + #region Users API + + [HttpGet("users")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetUsers() + { + return new JsonResult(new { }); + } + + #endregion + + #region Settings API + + [HttpGet("settings")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetSettings() + { + return new JsonResult(new { }); + } + + #endregion + + #region Helper API + + [HttpGet("alarm/data")] + public IActionResult GetAlarmHelper() + { + var embedFiles = Directory.GetFiles(Strings.EmbedsFolder, "*.json"); + var filterFiles = Directory.GetFiles(Strings.FiltersFolder, "*.json"); + var geofenceFiles = Directory.GetFiles(Strings.GeofencesFolder); + return new JsonResult(new + { + status = "OK", + data = new + { + embeds = embedFiles.Select(file => Path.GetFileName(file)), + filters = filterFiles.Select(file => Path.GetFileName(file)), + geofences = geofenceFiles.Select(file => Path.GetFileName(file)), + }, + }); + } + + [HttpGet("discord/data")] + public IActionResult GetDiscordHelper() + { + var geofenceFiles = Directory.GetFiles(Strings.GeofencesFolder); + var validGeofences = new[] { ".json", ".txt" }; + var geofences = geofenceFiles.Where(f => validGeofences.Contains(Path.GetExtension(f))) + .Select(f => Path.GetFileName(f)); + + var alarms = Directory.GetFiles(Strings.AlarmsFolder, "*.json") + .Select(f => Path.GetFileName(f)); + var embeds = Directory.GetFiles(Strings.EmbedsFolder, "*.json") + .Select(f => Path.GetFileName(f)); + + var roles = GetRoles(); + var result = new List(); + foreach (var (roleId, role) in roles) + { + result.Add(new + { + id = roleId, + name = role.Name, + permissions = role.Permissions, + isModerator = role.IsModerator, + }); + } + + return new JsonResult(new + { + status = "OK", + data = new + { + allGeofences = geofences, + allAlarms = alarms, + allEmbeds = embeds, + allRoles = result, + allIconStyles = new List + { + "Default", + "Test", + }, + // TODO: Include icon styles + }, + }); + } + + + [HttpGet("config/data")] + public IActionResult GetConfigHelper() + { + var discords = Directory.GetFiles(Strings.DiscordsFolder, "*.json") + .Select(file => Path.GetFileName(file)); + + return new JsonResult(new + { + status = "OK", + data = new + { + discords, + }, + }); + } + + #endregion + + #region Helpers + + private static T LoadFromFile(string filePath) + { + var json = System.IO.File.ReadAllText(filePath); + var filter = json.FromJson(); + return filter; + } + + private static string LoadFromFile(string filePath) + { + var data = System.IO.File.ReadAllText(filePath); + return data; + } + + private static Dictionary> GetDtsPlaceholders() + { + var path = Strings.WwwRoot + "/static/data/dts_placeholders.json"; + if (!System.IO.File.Exists(path)) + { + return new Dictionary>(); + } + var placeholders = LoadFromFile>>(path); + return placeholders; + } + + private static Dictionary GetRoles() + { + var path = Strings.WwwRoot + "/static/data/roles.json"; + if (!System.IO.File.Exists(path)) + { + return new Dictionary(); + } + var roles = LoadFromFile>(path); + return roles; + } + + private static async Task WriteDataAsync(string path, T data) + { + var json = data.ToJson(); + await WriteDataAsync(path, json); + } + + private static async Task WriteDataAsync(string path, string data) + { + await System.IO.File.WriteAllTextAsync(path, data, Encoding.UTF8); + } + + private static async Task SaveGeofence(string fileName, string newName, string geofenceData, string geofenceType) + { + // TODO: Check if exists or not + var newFileName = $"{newName}{geofenceType}"; + var newFilePath = Path.Combine(Strings.GeofencesFolder, newFileName); + // TODO: Convert geofence to ini or geojson + if (!string.Equals(fileName + geofenceType, newFileName)) + { + // Move file to new path + System.IO.File.Move( + Path.Combine(Strings.GeofencesFolder, fileName), + newFilePath + ); + } + // Save json + await WriteDataAsync(newFilePath, geofenceData); + } + + #region Response Helpers + + private static IActionResult SendErrorResponse(string message) + { + return new JsonResult(new + { + status = "Error", + error = message, + }); + } + + #endregion + + #endregion + } + + public class DtsPlaceholder + { + [JsonPropertyName("placeholder")] + public string Placeholder { get; set; } + + [JsonPropertyName("description")] + public string Description { get; set; } + + [JsonPropertyName("example")] + public object Example { get; set; } + + // examples: String, Char, Boolean, Number, Array + [JsonPropertyName("type")] + public string Type { get; set; } + } + + public class RoleConfig + { + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("moderator")] + public bool IsModerator { get; set; } + + [JsonPropertyName("permissions")] + public IEnumerable Permissions { get; set; } + } +} \ No newline at end of file diff --git a/src/Controllers/DiscordAuthController.cs b/src/Controllers/DiscordAuthController.cs new file mode 100644 index 00000000..98e03800 --- /dev/null +++ b/src/Controllers/DiscordAuthController.cs @@ -0,0 +1,261 @@ +namespace WhMgr.Controllers +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Net.Http; + using System.Threading.Tasks; + + using Microsoft.AspNetCore.Http; + using Microsoft.AspNetCore.Mvc; + using Microsoft.Extensions.Logging; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Web.Auth.Discord.Models; + + [ApiController] + [Route("/auth/discord/")] + public class DiscordAuthController : ControllerBase + { + private readonly ILogger _logger; + + private readonly ulong _ownerId; + private readonly ulong _clientId; + private readonly string _clientSecret; + private readonly string _redirectUri; + private readonly IEnumerable _userIds; + + private const string BaseEndpoint = "https://discordapp.com/api"; + private const string AuthorizationEndpoint = BaseEndpoint + "/oauth2/authorize"; + private const string TokenEndpoint = BaseEndpoint + "/oauth2/token"; + private const string UserEndpoint = BaseEndpoint + "/users/@me"; + private const string UserGuildsEndpoint = BaseEndpoint + "/users/@me/guilds"; + private const string UserGuildMemberEndpoint = BaseEndpoint + "/guilds/{0}/members/{1}"; + private const string DefaultScope = "guilds%20identify%20email"; + + public DiscordAuthController(ILogger logger) + { + _logger = logger; + + // Load settings from Discord auth config + var discordAuthConfig = Strings.DiscordAuthFilePath.LoadFromFile(); + _ownerId = discordAuthConfig.OwnerId; + _clientId = discordAuthConfig?.ClientId ?? 0; + _clientSecret = discordAuthConfig?.ClientSecret; + _redirectUri = discordAuthConfig?.RedirectUri; + _userIds = discordAuthConfig?.UserIds; + } + + #region Routes + + [HttpGet("login")] + public IActionResult LoginAsync() + { + var url = $"{AuthorizationEndpoint}?client_id={_clientId}&scope={DefaultScope}&response_type=code&redirect_uri={_redirectUri}"; + return Redirect(url); + } + + [HttpGet("logout")] + public IActionResult LogoutAsync() + { + HttpContext.Session.Clear(); + HttpContext.Session = null; + // TODO: Fix destroying sessions + return Redirect("/auth/discord/login"); + } + + [HttpGet("callback")] + public async Task CallbackAsync() + { + var code = Request.Query["code"].ToString(); + if (string.IsNullOrEmpty(code)) + { + // Error + _logger.LogError($"Authentication code is empty"); + return null; + } + + var response = await SendAuthorize(code); + if (response == null) + { + // Error authorizing + _logger.LogError($"Failed to authenticate with Discord"); + return null; + } + + // Successful + var user = await GetUser(response.TokenType, response.AccessToken); + if (user == null) + { + // Failed to get user + _logger.LogError($"Failed to get user information"); + return null; + } + var guilds = await GetUserGuilds(response.TokenType, response.AccessToken); + if (guilds == null) + { + // Failed to get user guilds + _logger.LogError($"Failed to get guilds for user {user.Username} ({user.Id})"); + return null; + } + foreach (var guild in guilds) + { + // TODO: var guildMember = GetGuildMember(response.TokenType, response.AccessToken, guild.Id, user.Id); + //Console.WriteLine($"Guild member: {guildMember}"); + } + // TODO: Check users table for permissions + // Validate user is in guild or user id matches + if (!ulong.TryParse(user.Id, out var userId)) + { + _logger.Error($"Failed to parse user id: {user.Id}"); + return null; + } + var isValid = _userIds.Contains(userId) || _ownerId == userId; + if (!isValid) + { + _logger.LogError($"Unauthorized user tried to authenticate {user.Username} ({user.Id}"); + return Redirect("/auth/discord/login"); + } + // User authenticated successfully + _logger.LogInformation($"User {user.Username} ({user.Id}) authenticated successfully"); + HttpContext.Session.SetValue("is_valid", isValid); + HttpContext.Session.SetValue("user_id", user.Id); + HttpContext.Session.SetValue("email", user.Email); + HttpContext.Session.SetValue("username", $"{user.Username}#{user.Discriminator}"); + HttpContext.Session.SetValue("guild_ids", guilds.Select(guild => guild.Id)); + HttpContext.Session.SetValue("avatar_id", user.Avatar); + // Check previous page saved if we should redirect to it or the home page + var redirect = HttpContext.Session.GetValue("last_redirect"); + HttpContext.Session.Remove("last_redirect"); + + /* + var options = new CookieOptions + { + // Needed so that domain.com can access the cookie set by api.domain.com + Domain = "10.0.0.2:8008", + Expires = DateTime.UtcNow.AddHours(1), + }; + var obj = new + { + is_valid = isValid, + user_id = user.Id, + email = user.Email, + username = $"{user.Username}#{user.Discriminator}", + guild_ids = guilds.Select(guild => guild.Id), + avatar_id = user.Avatar, + }; + var json = obj.ToJson(); + Response.Cookies.Append("test_cookie", json, options); + */ + + return Redirect(string.IsNullOrEmpty(redirect) + ? "/dashboard" + : redirect + ); + } + + #endregion + + #region OAuth + + private async Task SendAuthorize(string authorizationCode) + { + try + { + /* + using var client = new HttpClient(); + client.DefaultRequestHeaders.Add("Content-Type", "application/x-www-form-urlencoded"); + var payload = new + { + client_id = _clientId.ToString(), + client_secret = _clientSecret, + grant_type = "authorization_code", + code = authorizationCode, + redirect_uri = _redirectUri, + scope = DefaultScope, + }; + var json = payload.ToJson(); + var response = await client.PostAsync(TokenEndpoint, new StringContent(json)); + var responseString = await response.Content.ReadAsStringAsync(); + */ + var nvc = new System.Collections.Specialized.NameValueCollection + { + { "client_id", _clientId.ToString() }, + { "client_secret", _clientSecret }, + { "grant_type", "authorization_code" }, + { "code", authorizationCode }, + { "redirect_uri", _redirectUri }, + { "scope", DefaultScope }, + }; + using var wc = new System.Net.WebClient(); + wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + var responseData = wc.UploadValues(TokenEndpoint, "POST", nvc); + var responseString = System.Text.Encoding.UTF8.GetString(responseData); + return responseString.FromJson(); + } + catch (Exception) + { + return null; + } + } + + private async Task GetUser(string tokenType, string token) + { + var response = await SendRequest(UserEndpoint, tokenType, token); + if (string.IsNullOrEmpty(response)) + { + _logger.Error($"Failed to get Discord user response"); + return null; + } + var user = response.FromJson(); + return user; + } + + private async Task> GetUserGuilds(string tokenType, string token) + { + var response = await SendRequest(UserGuildsEndpoint, tokenType, token); + if (string.IsNullOrEmpty(response)) + { + _logger.Error($"Failed to get Discord user guilds response"); + return null; + } + var guilds = response.FromJson>(); + // TODO: Loop guilds, call GetGuildMember, return roles list + return guilds; + } + + private async Task GetGuildMember(string tokenType, string token, string guildId, string userId) + { + var url = string.Format(UserGuildMemberEndpoint, guildId, userId); + var response = await SendRequest(url, tokenType, token); + if (string.IsNullOrEmpty(response)) + { + _logger.Error($"Failed to get Discord member response"); + return null; + } + var member = response.FromJson(); + return member; + } + + private static async Task SendRequest(string url, string tokenType, string token) + { + using var client = new HttpClient(); + client.DefaultRequestHeaders.Add("Conent-Type", "application/json"); + client.DefaultRequestHeaders.Add("Authorization", $"{tokenType} {token}"); + var response = await client.GetStringAsync(url); + return response; + + // TODO: Retry request x amount of times before failing + /* + using var wc = new WebClient(); + wc.Proxy = null; + wc.Headers[HttpRequestHeader.ContentType] = "application/json"; + wc.Headers[HttpRequestHeader.Authorization] = $"{tokenType} {token} "; + return wc.DownloadString(url); + */ + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Controllers/ManagementApiController.cs b/src/Controllers/ManagementApiController.cs new file mode 100644 index 00000000..485e2ed5 --- /dev/null +++ b/src/Controllers/ManagementApiController.cs @@ -0,0 +1,53 @@ +namespace WhMgr.Controllers +{ + using System; + using System.Net.Mime; + + using Microsoft.AspNetCore.Mvc; + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; + + using WhMgr.Extensions; + + [ApiController] + [Route("/api/v1/")] + public class ManagementApiController : ControllerBase + { + private readonly Microsoft.Extensions.Logging.ILogger _logger; + private readonly IHostApplicationLifetime _appLifetime; + + public ManagementApiController( + ILogger logger, + IHostApplicationLifetime appLifetime) + { + _logger = logger; + _appLifetime = appLifetime; + } + + [HttpGet("restart")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult Restart() + { + string status; + try + { + _appLifetime.StopApplication(); + Program.Restart(); + status = "OK"; + } + catch (Exception ex) + { + _logger.Error($"Failed to restart application: {ex}"); + status = "Error"; + } + + return new JsonResult(new + { + status, + message = status == "OK" + ? "Application successfully restarted." + : "Failed to restart application.", + }); + } + } +} \ No newline at end of file diff --git a/src/Controllers/SubscriptionApiController.cs b/src/Controllers/SubscriptionApiController.cs new file mode 100644 index 00000000..661276b2 --- /dev/null +++ b/src/Controllers/SubscriptionApiController.cs @@ -0,0 +1,899 @@ +namespace WhMgr.Controllers +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Net.Mime; + using System.Threading.Tasks; + + using Microsoft.AspNetCore.Mvc; + using Microsoft.Extensions.Logging; + + using WhMgr.Services.Subscriptions; + using WhMgr.Services.Subscriptions.Models; + using WhMgr.Web.Api.Responses; + + // TODO: Add csrf token validation + + [ApiController] + [Route("/api/v1/subscriptions/")] + public class SubscriptionApiController : ControllerBase + { + private readonly ILogger _logger; + private readonly ISubscriptionManagerService _subscriptionManager; + + public SubscriptionApiController( + ILogger logger, + ISubscriptionManagerService subscriptionManager) + { + _logger = logger; + _subscriptionManager = subscriptionManager; + } + + #region User Subscriptions + + //[HttpGet("/")] + [Produces(MediaTypeNames.Application.Json)] + public async Task GetUserSubscriptions() + { + var subscriptions = await _subscriptionManager.GetUserSubscriptionsAsync().ConfigureAwait(false); + var response = new SubscriptionsResponse> + { + Status = "OK", + Data = subscriptions, + }; + return new JsonResult(response); + } + + [HttpGet("{guildId}/{userId}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetUserSubscription(ulong guildId, ulong userId) + { + var subscription = _subscriptionManager.GetUserSubscriptions(guildId, userId); + var response = new SubscriptionsResponse + { + Status = "OK", + Data = subscription, + }; + return new JsonResult(response); + } + + // TODO: Delete user subscriptions + + #endregion + + #region Pokemon Subscriptions + + [HttpGet("pokemon/{guildId}/{userId}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetPokemonSubscriptions(ulong guildId, ulong userId) + { + var subscription = _subscriptionManager.GetUserSubscriptions(guildId, userId); + var response = new SubscriptionsResponse> + { + Status = subscription != null + ? "OK" + : "Error", + Data = subscription.Pokemon.ToList(), + }; + return new JsonResult(response); + } + + [HttpGet("pokemon/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task GetPokemonSubscription(int id) + { + var response = await GetSubscription(id); + return new JsonResult(response); + } + + [HttpPost("pokemon/create")] + [Produces(MediaTypeNames.Application.Json)] + public async Task PokemonCreate(PokemonSubscription pokemonSubscription) + { + if (pokemonSubscription == null) + { + return new JsonResult(new + { + status = "Error", + message = "Failed to create Pokemon subscription, data was null.", + }); + } + + // Check if guild_id and user_id not equal to 0 + if (pokemonSubscription.GuildId == 0 || pokemonSubscription.UserId == 0) + { + return new JsonResult(new + { + status = "Error", + message = "Both GuildId and UserId are required.", + }); + } + + var subscription = _subscriptionManager.GetUserSubscriptions(pokemonSubscription.GuildId, pokemonSubscription.UserId); + if (subscription == null) + { + // Subscription does not exist, create new + subscription = new Subscription + { + GuildId = pokemonSubscription.GuildId, + UserId = pokemonSubscription.UserId, + Status = NotificationStatusType.All, + }; + } + subscription.Pokemon.Add(pokemonSubscription); + var result = await _subscriptionManager.CreateSubscriptionAsync(subscription).ConfigureAwait(false); + dynamic response = result + ? new + { + status = "OK", + message = "Successfully created Pokemon subscription.", + data = pokemonSubscription, + } + : new + { + status = "Error", + message = "Failed to create Pokemon subscription.", + }; + return new JsonResult(response); + } + + [HttpPut("pokemon/update/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task PokemonUpdate(int id, PokemonSubscription pokemonSubscription) + { + var response = await UpdateSubscription(id, pokemonSubscription); + return new JsonResult(response); + } + + [HttpDelete("pokemon/delete/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task PokemonDelete(int id) + { + var response = await DeleteSubscription(id); + return new JsonResult(response); + } + + #endregion + + #region PvP Subscriptions + + [HttpGet("pvp/{guildId}/{userId}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetPvpSubscriptions(ulong guildId, ulong userId) + { + var subscription = _subscriptionManager.GetUserSubscriptions(guildId, userId); + var response = new SubscriptionsResponse> + { + Status = subscription != null + ? "OK" + : "Error", + Data = subscription.PvP.ToList(), + }; + return new JsonResult(response); + } + + [HttpGet("pvp/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task GetPvpSubscription(int id) + { + var response = await GetSubscription(id); + return new JsonResult(response); + } + + [HttpPost("pvp/create")] + [Produces(MediaTypeNames.Application.Json)] + public async Task PvpCreate(PvpSubscription pvpSubscription) + { + if (pvpSubscription == null) + { + return new JsonResult(new + { + status = "Error", + message = "Failed to create PvP subscription, data was null.", + }); + } + + // Check if guild_id and user_id not equal to 0 + if (pvpSubscription.GuildId == 0 || pvpSubscription.UserId == 0) + { + return new JsonResult(new + { + status = "Error", + message = "Both GuildId and UserId are required.", + }); + } + + var subscription = _subscriptionManager.GetUserSubscriptions(pvpSubscription.GuildId, pvpSubscription.UserId); + if (subscription == null) + { + // Subscription does not exist, create new + subscription = new Subscription + { + GuildId = pvpSubscription.GuildId, + UserId = pvpSubscription.UserId, + Status = NotificationStatusType.All, + }; + } + subscription.PvP.Add(pvpSubscription); + var result = await _subscriptionManager.CreateSubscriptionAsync(subscription).ConfigureAwait(false); + dynamic response = result + ? new + { + status = "OK", + message = "Successfully created PvP subscription.", + data = pvpSubscription, + } + : new + { + status = "Error", + message = "Failed to create PvP subscription.", + }; + return new JsonResult(response); + } + + [HttpPut("pvp/update/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task PvpUpdate(int id, PvpSubscription pvpSubscription) + { + var response = await UpdateSubscription(id, pvpSubscription); + return new JsonResult(response); + } + + [HttpDelete("pvp/delete/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task PvpDelete(int id) + { + var response = await DeleteSubscription(id); + return new JsonResult(response); + } + + #endregion + + #region Raid Subscriptions + + [HttpGet("raids/{guildId}/{userId}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetRaidSubscriptions(ulong guildId, ulong userId) + { + var subscription = _subscriptionManager.GetUserSubscriptions(guildId, userId); + var response = new SubscriptionsResponse> + { + Status = subscription != null + ? "OK" + : "Error", + Data = subscription.Raids.ToList(), + }; + return new JsonResult(response); + } + + [HttpGet("raid/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task GetRaidSubscription(int id) + { + var response = await GetSubscription(id); + return new JsonResult(response); + } + + [HttpPost("raid/create")] + [Produces(MediaTypeNames.Application.Json)] + public async Task RaidCreate(RaidSubscription raidSubscription) + { + if (raidSubscription == null) + { + return new JsonResult(new + { + status = "Error", + message = "Failed to create Raid subscription, data was null.", + }); + } + + // Check if guild_id and user_id not equal to 0 + if (raidSubscription.GuildId == 0 || raidSubscription.UserId == 0) + { + return new JsonResult(new + { + status = "Error", + message = "Both GuildId and UserId are required.", + }); + } + + var subscription = _subscriptionManager.GetUserSubscriptions(raidSubscription.GuildId, raidSubscription.UserId); + if (subscription == null) + { + // Subscription does not exist, create new + subscription = new Subscription + { + GuildId = raidSubscription.GuildId, + UserId = raidSubscription.UserId, + Status = NotificationStatusType.All, + }; + } + subscription.Raids.Add(raidSubscription); + var result = await _subscriptionManager.CreateSubscriptionAsync(subscription).ConfigureAwait(false); + dynamic response = result + ? new + { + status = "OK", + message = "Successfully created Raid subscription.", + data = raidSubscription, + } + : new + { + status = "Error", + message = "Failed to create Raid subscription.", + }; + return new JsonResult(response); + } + + [HttpPut("raid/update/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task RaidUpdate(int id, RaidSubscription raidSubscription) + { + var response = await UpdateSubscription(id, raidSubscription); + return new JsonResult(response); + } + + [HttpDelete("raid/delete/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task RaidDelete(int id) + { + var response = await DeleteSubscription(id); + return new JsonResult(response); + } + + #endregion + + #region Quest Subscriptions + + [HttpGet("quests/{guildId}/{userId}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetQuestSubscriptions(ulong guildId, ulong userId) + { + var subscription = _subscriptionManager.GetUserSubscriptions(guildId, userId); + var response = new SubscriptionsResponse> + { + Status = subscription != null + ? "OK" + : "Error", + Data = subscription.Quests.ToList(), + }; + return new JsonResult(response); + } + + [HttpGet("quest/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task GetQuestSubscription(int id) + { + var response = await GetSubscription(id); + return new JsonResult(response); + } + + [HttpPost("quest/create")] + [Produces(MediaTypeNames.Application.Json)] + public async Task QuestCreate(QuestSubscription questSubscription) + { + if (questSubscription == null) + { + return new JsonResult(new + { + status = "Error", + message = "Failed to create Quest subscription, data was null.", + }); + } + + // Check if guild_id and user_id not equal to 0 + if (questSubscription.GuildId == 0 || questSubscription.UserId == 0) + { + return new JsonResult(new + { + status = "Error", + message = "Both GuildId and UserId are required.", + }); + } + + var subscription = _subscriptionManager.GetUserSubscriptions(questSubscription.GuildId, questSubscription.UserId); + if (subscription == null) + { + // Subscription does not exist, create new + subscription = new Subscription + { + GuildId = questSubscription.GuildId, + UserId = questSubscription.UserId, + Status = NotificationStatusType.All, + }; + } + subscription.Quests.Add(questSubscription); + var result = await _subscriptionManager.CreateSubscriptionAsync(subscription).ConfigureAwait(false); + dynamic response = result + ? new + { + status = "OK", + message = "Successfully created Quest subscription.", + data = questSubscription, + } + : new + { + status = "Error", + message = "Failed to create Quest subscription.", + }; + return new JsonResult(response); + } + + [HttpPut("quest/update/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task QuestUpdate(int id, QuestSubscription questSubscription) + { + var response = await UpdateSubscription(id, questSubscription); + return new JsonResult(response); + } + + [HttpDelete("quest/delete/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task QuestDelete(int id) + { + var response = await DeleteSubscription(id); + return new JsonResult(response); + } + + #endregion + + #region Invasion Subscriptions + + [HttpGet("invasions/{guildId}/{userId}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetInvasionSubscriptions(ulong guildId, ulong userId) + { + var subscription = _subscriptionManager.GetUserSubscriptions(guildId, userId); + var response = new SubscriptionsResponse> + { + Status = subscription != null + ? "OK" + : "Error", + Data = subscription.Invasions.ToList(), + }; + return new JsonResult(response); + } + + [HttpGet("invasion/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task GetInvasionSubscription(int id) + { + var response = await GetSubscription(id); + return new JsonResult(response); + } + + [HttpPost("invasion/create")] + [Produces(MediaTypeNames.Application.Json)] + public async Task InvasionCreate(InvasionSubscription invasionSubscription) + { + if (invasionSubscription == null) + { + return new JsonResult(new + { + status = "Error", + message = "Failed to create Invasion subscription, data was null.", + }); + } + + // Check if guild_id and user_id not equal to 0 + if (invasionSubscription.GuildId == 0 || invasionSubscription.UserId == 0) + { + return new JsonResult(new + { + status = "Error", + message = "Both GuildId and UserId are required.", + }); + } + + var subscription = _subscriptionManager.GetUserSubscriptions(invasionSubscription.GuildId, invasionSubscription.UserId); + if (subscription == null) + { + // Subscription does not exist, create new + subscription = new Subscription + { + GuildId = invasionSubscription.GuildId, + UserId = invasionSubscription.UserId, + Status = NotificationStatusType.All, + }; + } + subscription.Invasions.Add(invasionSubscription); + var result = await _subscriptionManager.CreateSubscriptionAsync(subscription).ConfigureAwait(false); + dynamic response = result + ? new + { + status = "OK", + message = "Successfully created Invasion subscription.", + data = invasionSubscription, + } + : new + { + status = "Error", + message = "Failed to create Invasion subscription.", + }; + return new JsonResult(response); + } + + [HttpPut("invasion/update/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task InvasionUpdate(int id, InvasionSubscription invasionSubscription) + { + var response = await UpdateSubscription(id, invasionSubscription); + return new JsonResult(response); + } + + [HttpDelete("invasion/delete/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task InvasionDelete(int id) + { + var response = await DeleteSubscription(id); + return new JsonResult(response); + } + + #endregion + + #region Lure Subscriptions + + [HttpGet("lures/{guildId}/{userId}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetLureSubscriptions(ulong guildId, ulong userId) + { + var subscription = _subscriptionManager.GetUserSubscriptions(guildId, userId); + var response = new SubscriptionsResponse> + { + Status = subscription != null + ? "OK" + : "Error", + Data = subscription.Lures.ToList(), + }; + return new JsonResult(response); + } + + [HttpGet("lure/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task GetLureSubscription(int id) + { + var response = await GetSubscription(id); + return new JsonResult(response); + } + + [HttpPost("lure/create")] + [Produces(MediaTypeNames.Application.Json)] + public async Task LureCreate(LureSubscription lureSubscription) + { + if (lureSubscription == null) + { + return new JsonResult(new + { + status = "Error", + message = "Failed to create Lure subscription, data was null.", + }); + } + + // Check if guild_id and user_id not equal to 0 + if (lureSubscription.GuildId == 0 || lureSubscription.UserId == 0) + { + return new JsonResult(new + { + status = "Error", + message = "Both GuildId and UserId are required.", + }); + } + + var subscription = _subscriptionManager.GetUserSubscriptions(lureSubscription.GuildId, lureSubscription.UserId); + if (subscription == null) + { + // Subscription does not exist, create new + subscription = new Subscription + { + GuildId = lureSubscription.GuildId, + UserId = lureSubscription.UserId, + Status = NotificationStatusType.All, + }; + } + subscription.Lures.Add(lureSubscription); + var result = await _subscriptionManager.CreateSubscriptionAsync(subscription).ConfigureAwait(false); + dynamic response = result + ? new + { + status = "OK", + message = "Successfully created Lure subscription.", + data = lureSubscription, + } + : new + { + status = "Error", + message = "Failed to create Lure subscription.", + }; + return new JsonResult(response); + } + + [HttpPut("lure/update/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task LureUpdate(int id, LureSubscription lureSubscription) + { + var response = await UpdateSubscription(id, lureSubscription); + return new JsonResult(response); + } + + [HttpDelete("lure/delete/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task LureDelete(int id) + { + var response = await DeleteSubscription(id); + return new JsonResult(response); + } + + #endregion + + #region Gym Subscriptions + + [HttpGet("gyms/{guildId}/{userId}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetGymSubscriptions(ulong guildId, ulong userId) + { + var subscription = _subscriptionManager.GetUserSubscriptions(guildId, userId); + var response = new SubscriptionsResponse> + { + Status = subscription != null + ? "OK" + : "Error", + Data = subscription.Gyms.ToList(), + }; + return new JsonResult(response); + } + + [HttpGet("gym/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task GetGymSubscription(int id) + { + var response = await GetSubscription(id); + return new JsonResult(response); + } + + [HttpPost("gym/create")] + [Produces(MediaTypeNames.Application.Json)] + public async Task LureCreate(GymSubscription gymSubscription) + { + if (gymSubscription == null) + { + return new JsonResult(new + { + status = "Error", + message = "Failed to create Gym subscription, data was null.", + }); + } + + // Check if guild_id and user_id not equal to 0 + if (gymSubscription.GuildId == 0 || gymSubscription.UserId == 0) + { + return new JsonResult(new + { + status = "Error", + message = "Both GuildId and UserId are required.", + }); + } + + var subscription = _subscriptionManager.GetUserSubscriptions(gymSubscription.GuildId, gymSubscription.UserId); + if (subscription == null) + { + // Subscription does not exist, create new + subscription = new Subscription + { + GuildId = gymSubscription.GuildId, + UserId = gymSubscription.UserId, + Status = NotificationStatusType.All, + }; + } + subscription.Gyms.Add(gymSubscription); + var result = await _subscriptionManager.CreateSubscriptionAsync(subscription).ConfigureAwait(false); + dynamic response = result + ? new + { + status = "OK", + message = "Successfully created Gym subscription.", + data = gymSubscription, + } + : new + { + status = "Error", + message = "Failed to create Gym subscription.", + }; + return new JsonResult(response); + } + + [HttpPut("gym/update/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task GymUpdate(int id, GymSubscription gymSubscription) + { + var response = await UpdateSubscription(id, gymSubscription); + return new JsonResult(response); + } + + [HttpDelete("gym/delete/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task GymDelete(int id) + { + var response = await DeleteSubscription(id); + return new JsonResult(response); + } + + #endregion + + #region Location Subscriptions + + [HttpGet("locations/{guildId}/{userId}")] + [Produces(MediaTypeNames.Application.Json)] + public IActionResult GetLocationSubscriptions(ulong guildId, ulong userId) + { + var subscription = _subscriptionManager.GetUserSubscriptions(guildId, userId); + var response = new SubscriptionsResponse> + { + Status = subscription != null + ? "OK" + : "Error", + Data = subscription.Locations.ToList(), + }; + return new JsonResult(response); + } + + [HttpGet("location/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task GetLocationSubscription(int id) + { + var response = await GetSubscription(id); + return new JsonResult(response); + } + + [HttpPost("location/create")] + [Produces(MediaTypeNames.Application.Json)] + public async Task LocationCreate(LocationSubscription locationSubscription) + { + if (locationSubscription == null) + { + return new JsonResult(new + { + status = "Error", + message = "Failed to create Location subscription, data was null.", + }); + } + + // Check if guild_id and user_id not equal to 0 + if (locationSubscription.GuildId == 0 || locationSubscription.UserId == 0) + { + return new JsonResult(new + { + status = "Error", + message = "Both GuildId and UserId are required.", + }); + } + + var subscription = _subscriptionManager.GetUserSubscriptions(locationSubscription.GuildId, locationSubscription.UserId); + if (subscription == null) + { + // Subscription does not exist, create new + subscription = new Subscription + { + GuildId = locationSubscription.GuildId, + UserId = locationSubscription.UserId, + Status = NotificationStatusType.All, + }; + } + subscription.Locations.Add(locationSubscription); + var result = await _subscriptionManager.CreateSubscriptionAsync(subscription).ConfigureAwait(false); + dynamic response = result + ? new + { + status = "OK", + message = "Successfully created Location subscription.", + data = locationSubscription, + } + : new + { + status = "Error", + message = "Failed to create Location subscription.", + }; + return new JsonResult(response); + } + + [HttpPut("location/update/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task LocationUpdate(int id, LocationSubscription gymSubscription) + { + var response = await UpdateSubscription(id, gymSubscription); + return new JsonResult(response); + } + + [HttpDelete("location/delete/{id}")] + [Produces(MediaTypeNames.Application.Json)] + public async Task LocationDelete(int id) + { + var response = await DeleteSubscription(id); + return new JsonResult(response); + } + + #endregion + + + #region Generic Helpers + + private async Task GetSubscription(int id) where T : BaseSubscription + { + var subscription = await _subscriptionManager.FindByIdAsync(id); + var response = new SubscriptionsResponse + { + Status = subscription != null + ? "OK" + : "Error", + Data = subscription, + }; + return response; + } + + private async Task UpdateSubscription(int id, T updatedSubscription) where T : BaseSubscription + { + if (updatedSubscription == null) + { + return new JsonResult(new + { + status = "Error", + message = $"Failed to create {nameof(updatedSubscription)} subscription, data was null.", + }); + } + + // Check if guild_id and user_id not equal to 0 + if (updatedSubscription.GuildId == 0 || updatedSubscription.UserId == 0) + { + return new JsonResult(new + { + status = "Error", + message = "Both GuildId and UserId are required.", + }); + } + + var existingSubscription = await _subscriptionManager.FindByIdAsync(id); + if (existingSubscription == null) + { + // Subscription does not exist + return new JsonResult(new + { + status = "Error", + message = $"{nameof(updatedSubscription)} subscription with id {id} does not exist.", + }); + } + + var result = await _subscriptionManager.UpdateSubscriptionAsync(id, updatedSubscription); + var response = result + ? new + { + status = "OK", + message = $"Successfully updated {nameof(updatedSubscription)} subscription {id}.", + } + : new + { + status = "Error", + message = $"Failed to update {nameof(updatedSubscription)} subscription {id}.", + }; + return response; + } + + private async Task DeleteSubscription(int id) where T : BaseSubscription + { + var result = await _subscriptionManager.DeleteByIdAsync(id); + var response = result + ? new + { + status = "OK", + message = $"Successfully deleted {nameof(T)} subscription {id}.", + } + : new + { + status = "Error", + message = $"Failed to delete {nameof(T)} subscription {id}.", + }; + return response; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Controllers/WebhookController.cs b/src/Controllers/WebhookController.cs new file mode 100644 index 00000000..68a97f70 --- /dev/null +++ b/src/Controllers/WebhookController.cs @@ -0,0 +1,41 @@ +namespace WhMgr.Controllers +{ + using System.Collections.Generic; + using System.Threading; + + using Microsoft.AspNetCore.Mvc; + using Microsoft.Extensions.Logging; + + using WhMgr.Services.Webhook; + + [ApiController] + public class WebhookController : ControllerBase + { + private readonly ILogger _logger; + private readonly IWebhookProcessorService _webhookService; + + public WebhookController( + ILogger logger, + IWebhookProcessorService webhookService) + { + _logger = logger; + _webhookService = webhookService; + } + + [HttpGet("/")] + public IActionResult Index() + { + return Content($"{Strings.BotName} {Strings.BotVersion} is running..."); + } + + [HttpPost("/")] + public IActionResult HandleData(List data) + { + if (!ThreadPool.QueueUserWorkItem(async _ => await _webhookService.ParseDataAsync(data))) + { + return Unauthorized(); + } + return Ok(); + } + } +} \ No newline at end of file diff --git a/src/Data/Contexts/AppDbContext.cs b/src/Data/Contexts/AppDbContext.cs new file mode 100644 index 00000000..bb08190f --- /dev/null +++ b/src/Data/Contexts/AppDbContext.cs @@ -0,0 +1,152 @@ +namespace WhMgr.Data.Contexts +{ + using System.Collections.Generic; + + using Microsoft.EntityFrameworkCore; + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + + using WhMgr.Common; + using WhMgr.Extensions; + using WhMgr.Data.Factories; + using WhMgr.Services.Subscriptions.Models; + + public class AppDbContext : DbContext + { + public AppDbContext(DbContextOptions options) + : base(options) + { + // Migrate to latest + //var createSql = Database.GenerateCreateScript(); + //System.Console.WriteLine($"CreateSql: {createSql}"); + base.Database.Migrate(); + } + + public DbSet Subscriptions { get; set; } + + public DbSet Pokemon { get; set; } + + public DbSet Pvp { get; set; } + + public DbSet Raids { get; set; } + + public DbSet Quests { get; set; } + + public DbSet Gyms { get; set; } + + public DbSet Invasions { get; set; } + + public DbSet Lures { get; set; } + + public DbSet Locations { get; set; } + + public DbSet Metadata { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + // Handle json columns + modelBuilder.Entity() + .Property(p => p.PokemonId) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + modelBuilder.Entity() + .Property(p => p.Forms) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + /* + modelBuilder.Entity() + .Property(p => p.Costumes) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + */ + modelBuilder.Entity() + .Property(p => p.IVList) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + modelBuilder.Entity() + .Property(p => p.Areas) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + + modelBuilder.Entity() + .Property(p => p.PokemonId) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + modelBuilder.Entity() + .Property(p => p.Forms) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + modelBuilder.Entity() + .Property(p => p.League) + .HasConversion(x => x.ObjectToString(), x => x.StringToObject()); + modelBuilder.Entity() + .Property(p => p.Areas) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + + modelBuilder.Entity() + .Property(p => p.PokemonId) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + modelBuilder.Entity() + .Property(p => p.Forms) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + modelBuilder.Entity() + .Property(p => p.Areas) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + + modelBuilder.Entity() + .Property(p => p.Areas) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + + modelBuilder.Entity() + .Property(p => p.InvasionType) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + modelBuilder.Entity() + .Property(p => p.RewardPokemonId) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + modelBuilder.Entity() + .Property(p => p.Areas) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + + modelBuilder.Entity() + .Property(p => p.LureType) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + modelBuilder.Entity() + .Property(p => p.Areas) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + + modelBuilder.Entity() + .Property(p => p.PokemonIDs) + .HasConversion( + DbContextFactory.CreateJsonValueConverter>(), + DbContextFactory.CreateValueComparer()); + + base.OnModelCreating(modelBuilder); + } + } +} \ No newline at end of file diff --git a/src/Data/Contexts/ManualDbContext.cs b/src/Data/Contexts/ManualDbContext.cs new file mode 100644 index 00000000..abb0f6ff --- /dev/null +++ b/src/Data/Contexts/ManualDbContext.cs @@ -0,0 +1,22 @@ +namespace WhMgr.Data.Contexts +{ + using Microsoft.EntityFrameworkCore; + + using WhMgr.Data.Models; + + public class ManualDbContext : DbContext + { + public ManualDbContext(DbContextOptions options) + : base(options) + { + } + + public DbSet Nests { get; set; } + + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + } + } +} \ No newline at end of file diff --git a/src/Data/Contexts/MapDbContext.cs b/src/Data/Contexts/MapDbContext.cs new file mode 100644 index 00000000..2d04401c --- /dev/null +++ b/src/Data/Contexts/MapDbContext.cs @@ -0,0 +1,54 @@ +namespace WhMgr.Data.Contexts +{ + using System.Collections.Generic; + + using Microsoft.EntityFrameworkCore; + + using WhMgr.Common; + using WhMgr.Data.Factories; + using WhMgr.Data.Models; + using WhMgr.Services.Webhook.Models; + + public class MapDbContext : DbContext + { + public MapDbContext(DbContextOptions options) + : base(options) + { + } + + public DbSet Pokemon { get; set; } + + public DbSet Pokestops { get; set; } + + public DbSet Gyms { get; set; } + + public DbSet Weather { get; set; } + + public DbSet PokemonStatsIV { get; set; } + + public DbSet PokemonStatsShiny { get; set; } + + public DbSet PokemonStatsHundo { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity() + .HasNoKey(); + + modelBuilder.Entity() + .Property(p => p.PvpRankings) + .HasConversion(DbContextFactory.CreateJsonValueConverter>>()); + + modelBuilder.Entity() + .HasKey(p => new { p.Date, p.PokemonId }); + + modelBuilder.Entity() + .HasKey(p => new { p.Date, p.PokemonId }); + + modelBuilder.Entity() + .HasKey(p => new { p.Date, p.PokemonId }); + + base.OnModelCreating(modelBuilder); + } + } +} \ No newline at end of file diff --git a/src/Data/DataAccessLayer.cs b/src/Data/DataAccessLayer.cs deleted file mode 100644 index a976648d..00000000 --- a/src/Data/DataAccessLayer.cs +++ /dev/null @@ -1,57 +0,0 @@ -namespace WhMgr.Data -{ - using System.Collections.Generic; - - using ServiceStack.OrmLite; - using ServiceStack.Text; - - /// - /// Database connection class - /// - public static class DataAccessLayer - { - /// - /// Gets the connection factories available - /// - public static Dictionary Factories { get; } = new Dictionary(); - - /// - /// Gets or sets the database connection string to use - /// - public static string ConnectionString { get; set; } - - /// - /// Gets or sets the scanner database connection string to use - /// - public static string ScannerConnectionString { get; set; } - - /// - /// Creates a new connection factory - /// - /// Returns a new class - public static OrmLiteConnectionFactory CreateFactory() - { - return CreateFactory(ConnectionString); - } - - /// - /// Creates a new connection factory with the specified connection string - /// - /// Database connection string - /// Returns a new class - public static OrmLiteConnectionFactory CreateFactory(string connectionString) - { - if (string.IsNullOrEmpty(connectionString)) - return null; - - if (!Factories.ContainsKey(connectionString)) - { - var provider = MySqlDialect.Provider; - provider.StringSerializer = new JsonStringSerializer(); - Factories.Add(connectionString, new OrmLiteConnectionFactory(connectionString, provider)); - } - - return Factories[connectionString]; - } - } -} \ No newline at end of file diff --git a/src/Data/DatabaseMigrator.cs b/src/Data/DatabaseMigrator.cs deleted file mode 100644 index b14bd0d5..00000000 --- a/src/Data/DatabaseMigrator.cs +++ /dev/null @@ -1,241 +0,0 @@ -namespace WhMgr.Data -{ - using System; - using System.IO; - using System.Threading; - using System.Threading.Tasks; - - using ServiceStack.OrmLite; - - using WhMgr.Diagnostics; - - /// - /// Database migration class - /// - public class DatabaseMigrator - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("MIGRATOR", Program.LogLevel); - - private static readonly string CurrentDatabaseVersionPath = Path.Combine(Strings.AppFolder, "db_version.txt"); - - /// - /// Gets a value determining whether the migration has finished or not - /// - public bool Finished { get; private set; } - - /// - /// Gets the migrations folder path - /// - public string MigrationsFolder => Path.Combine - ( - Path.Combine(Directory.GetCurrentDirectory(), "../"), - Strings.MigrationsFolder - ); - - /// - /// Instantiates a new class - /// - public DatabaseMigrator() - { - // Create directory if not exists - var dir = Path.GetDirectoryName(CurrentDatabaseVersionPath); - if (!Directory.Exists(dir)) - { - Directory.CreateDirectory(dir); - } - - // Get current version from metadata table - var currentVersion = GetCurrentVersion(); - if (currentVersion == 0) - { - var result = SetCurrentVersion(currentVersion); - if (!result) - { - _logger.Error($"Failed to set current database version: {currentVersion}"); - Environment.Exit(-1); - } - } - - // Get newest version from migration files - var newestVersion = GetNewestDbVersion(); - _logger.Info($"Current: {currentVersion}, Latest: {newestVersion}"); - - // Attempt to migrate the database - if (currentVersion < newestVersion) - { - // Wait 30 seconds and let user know we are about to migrate the database and for them to make - // a backup until we handle backups and rollbacks. - _logger.Info("MIGRATION IS ABOUT TO START IN 30 SECONDS, PLEASE MAKE SURE YOU HAVE A BACKUP!!!"); - Thread.Sleep(30 * 1000); - } - Migrate(currentVersion, newestVersion).GetAwaiter().GetResult(); - } - - /// - /// Migrate the database from a specified version to the next version - /// - /// Database version to migrate from - /// Database version to migrate to - /// - private async Task Migrate(int fromVersion, int toVersion) - { - if (fromVersion < toVersion) - { - _logger.Info($"Migrating database to version {fromVersion + 1}"); - var sqlFile = Path.Combine(MigrationsFolder, (fromVersion + 1) + ".sql"); - - // Read SQL file and remove any new lines - var migrateSql = File.ReadAllText(sqlFile)?.Replace("\r", "").Replace("\n", ""); - - // If the migration file contains multiple queries, split them up - var sqlSplit = migrateSql.Split(';'); - - // Loop through the migration queries - foreach (var sql in sqlSplit) - { - // If the SQL query is null, skip... - if (string.IsNullOrEmpty(sql)) - continue; - - try - { - // Execute the SQL query - var result = await Execute(sql); - if (result != 0) - { - // Failed to execute query - _logger.Warn($"Failed to execute migration: {sql}"); - Environment.Exit(-1); - } - _logger.Debug($"Migration execution result: {result}"); - } - catch (Exception ex) - { - _logger.Error($"Migration failed: {ex}"); - Environment.Exit(-1); - } - } - - // Take a break - Thread.Sleep(2000); - - // Build query to update metadata table version key - var newVersion = fromVersion + 1; - try - { - // Execute update version SQL - var result = SetCurrentVersion(newVersion); - if (result) - { - // Success - } - _logger.Debug($"Result: {result}"); - } - catch (Exception ex) - { - _logger.Error($"Migration failed: {ex}"); - Environment.Exit(-1); - } - _logger.Info("Migration successful"); - await Migrate(newVersion, toVersion); - } - if (fromVersion == toVersion) - { - _logger.Info("Migration done"); - Finished = true; - } - await Task.CompletedTask; - } - - /// - /// Get newest database version from local migration file numbers - /// - /// Returns the latest version number - private int GetNewestDbVersion() - { - var current = 0; - var keepChecking = true; - while (keepChecking) - { - var path = Path.Combine(MigrationsFolder, (current + 1) + ".sql"); - if (File.Exists(path)) - current++; - else - keepChecking = false; - } - return current; - } - - /// - /// Set current database version - /// - /// Current database version to save - private static bool SetCurrentVersion(int version) - { - try - { - // Save current version - File.WriteAllText(CurrentDatabaseVersionPath, version.ToString()); - return true; - } - catch (Exception ex) - { - _logger.Error(ex); - return false; - } - } - - /// - /// Get the current saved database version - /// - /// Returns the current saved database version - private static int GetCurrentVersion() - { - if (!File.Exists(CurrentDatabaseVersionPath)) - { - // Last version that was in database - SetCurrentVersion(0); - } - using (var sr = new StreamReader(CurrentDatabaseVersionPath)) - { - var data = sr.ReadToEnd(); - if (string.IsNullOrEmpty(data)) - { - _logger.Error($"Failed to get latest database version from {CurrentDatabaseVersionPath}, returning default."); - return 0; - } - if (!int.TryParse(data, out var currentVersion)) - { - _logger.Error($"Failed to parse latest database version {data}"); - return 0; - } - return currentVersion; - } - } - - /// - /// Execute a raw SQL statement - /// - /// SQL statement to execute - /// Returns the result value from the statement - private static async Task Execute(string sql) - { - if (string.IsNullOrEmpty(DataAccessLayer.ConnectionString)) - return default; - - try - { - using (var db = DataAccessLayer.CreateFactory(DataAccessLayer.ConnectionString).Open()) - { - var query = await db.ExecuteSqlAsync(sql); - return query; - } - } - catch (MySql.Data.MySqlClient.MySqlException ex) - { - _logger.Error(ex); - } - return default; - } - } -} diff --git a/src/Data/Factories/DbContextFactory.cs b/src/Data/Factories/DbContextFactory.cs new file mode 100644 index 00000000..23a67417 --- /dev/null +++ b/src/Data/Factories/DbContextFactory.cs @@ -0,0 +1,87 @@ +namespace WhMgr.Data.Factories +{ + using System; + using System.Collections.Generic; + using System.Linq; + + using Microsoft.EntityFrameworkCore; + using Microsoft.EntityFrameworkCore.ChangeTracking; + using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + + using WhMgr.Data.Contexts; + using WhMgr.Extensions; + + /* + * Reference: https://docs.microsoft.com/en-us/ef/core/cli/dbcontext-creation?tabs=dotnet-core-cli + public class DbContextFactory2 : Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory where T : DbContext + { + public T CreateDbContext(string[] args) + { + var optionsBuilder = new DbContextOptionsBuilder(); + optionsBuilder.UseMySql(args[0], ServerVersion.AutoDetect(args[0])); + + return new T(optionsBuilder.Options); + } + } + */ + + public class DbContextFactory + { + public static ManualDbContext CreateManualContext(string connectionString)// where T : DbContext + { + try + { + var optionsBuilder = new DbContextOptionsBuilder(); + optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)); + + var ctx = new ManualDbContext(optionsBuilder.Options); + //ctx.ChangeTracker.AutoDetectChangesEnabled = false; + return ctx; + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex}"); + Environment.Exit(0); + } + return null; + } + + public static MapDbContext CreateMapContext(string connectionString)// where T : DbContext + { + try + { + var optionsBuilder = new DbContextOptionsBuilder(); + optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)); + + var ctx = new MapDbContext(optionsBuilder.Options); + //ctx.ChangeTracker.AutoDetectChangesEnabled = false; + return ctx; + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex}"); + Environment.Exit(0); + } + return null; + } + + public static ValueConverter CreateJsonValueConverter() + { + return new ValueConverter + ( + v => v.ToJson(), + v => v.FromJson() + ); + } + + public static ValueComparer> CreateValueComparer() + { + return new ValueComparer> + ( + (c1, c2) => c1.SequenceEqual(c2), + c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), + c => c.ToList() + ); + } + } +} \ No newline at end of file diff --git a/src/Data/MasterFile.cs b/src/Data/GameMaster.cs similarity index 61% rename from src/Data/MasterFile.cs rename to src/Data/GameMaster.cs index 76d611ca..8506ffb5 100644 --- a/src/Data/MasterFile.cs +++ b/src/Data/GameMaster.cs @@ -3,54 +3,50 @@ using System; using System.Collections.Generic; using System.IO; + using System.Text.Json.Serialization; - using Newtonsoft.Json; - using Newtonsoft.Json.Converters; - using POGOProtos.Rpc; using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + using WhMgr.Common; using WhMgr.Configuration; - using WhMgr.Data.Models; - using WhMgr.Diagnostics; - using WhMgr.Net.Models; + using WhMgr.Extensions; + using WhMgr.Services.Webhook.Models; - public class MasterFile + public class GameMaster { - const string MasterFileName = "masterfile.json"; - const string CpMultipliersFileName = "cpMultipliers.json"; - const string EmojisFileName = "emojis.json"; - const string RarityFileName = "rarity.json"; - const string EmbedColorsFileName = "embedColors.json"; - - private static readonly IEventLogger _logger = EventLogger.GetLogger("MASTER", Program.LogLevel); + public const string MasterFileName = "masterfile.json"; + public const string CpMultipliersFileName = "cpMultipliers.json"; + public const string EmojisFileName = "emojis.json"; + public const string RarityFileName = "rarity.json"; + public const string EmbedColorsFileName = "embedColors.json"; #region Properties - [JsonProperty("pokemon")] + [JsonPropertyName("pokemon")] public IReadOnlyDictionary Pokedex { get; set; } - //[JsonProperty("moves")] + //[JsonPropertyName("moves")] //public IReadOnlyDictionary Movesets { get; set; } - [JsonProperty("quest_conditions")] + [JsonPropertyName("quest_conditions")] public IReadOnlyDictionary QuestConditions { get; set; } - [JsonProperty("quest_types")] + [JsonPropertyName("quest_types")] public IReadOnlyDictionary QuestTypes { get; set; } - [JsonProperty("quest_reward_types")] + [JsonPropertyName("quest_reward_types")] public IReadOnlyDictionary QuestRewardTypes { get; set; } - [JsonProperty("throw_types")] + [JsonPropertyName("throw_types")] public IReadOnlyDictionary ThrowTypes { get; set; } - [JsonProperty("items")] + [JsonPropertyName("items")] public IReadOnlyDictionary Items { get; set; } - [JsonProperty("grunt_types")] + [JsonPropertyName("invasions")] public IReadOnlyDictionary GruntTypes { get; set; } - [JsonProperty("pokemon_types")] + [JsonPropertyName("types")] public IReadOnlyDictionary PokemonTypes { get; set; } [JsonIgnore] @@ -69,20 +65,19 @@ public class MasterFile /// Gets or sets the Discord embed colors to use for each message type /// [JsonIgnore] - public DiscordEmbedColorConfig DiscordEmbedColors { get; set; } + public DiscordEmbedColorsConfig DiscordEmbedColors { get; set; } #region Singletons - private static MasterFile _instance; - public static MasterFile Instance + private static GameMaster _instance; + public static GameMaster Instance { get { if (_instance == null) { - _instance = LoadInit(Path.Combine(Strings.DataFolder, MasterFileName)); + ReloadMasterFile(); } - return _instance; } } @@ -91,27 +86,43 @@ public static MasterFile Instance #endregion - public MasterFile() + public GameMaster() { CpMultipliers = LoadInit>(Path.Combine(Strings.DataFolder, CpMultipliersFileName)); PokemonRarity = LoadInit>>(Path.Combine(Strings.DataFolder, RarityFileName)); Emojis = new Dictionary(); CustomEmojis = LoadInit>(Path.Combine(Strings.DataFolder, EmojisFileName)); - DiscordEmbedColors = LoadInit(Path.Combine(Strings.DataFolder, EmbedColorsFileName)); + DiscordEmbedColors = LoadInit(Path.Combine(Strings.DataFolder, EmbedColorsFileName)); } - public static PokedexPokemon GetPokemon(uint pokemonId, int formId) + public static PokedexPokemon GetPokemon(uint pokemonId, uint formId = 0) { + if (pokemonId == 0) + return null; + if (!Instance.Pokedex.ContainsKey(pokemonId)) + { + Console.WriteLine($"[Warning] Pokemon {pokemonId} does not exist in {MasterFileName}, please use an updated version."); return null; + } var pkmn = Instance.Pokedex[pokemonId]; - var useForm = !pkmn.Attack.HasValue && formId > 0 && (pkmn.Forms?.ContainsKey(formId) ?? true); + var useForm = /*!pkmn.Attack.HasValue &&*/ formId > 0 && pkmn.Forms.ContainsKey(formId); var pkmnForm = useForm ? pkmn.Forms[formId] : pkmn; pkmnForm.Name = pkmn.Name; + // Check if Pokemon is form and Pokemon types provided, if not use normal Pokemon types as fallback + pkmnForm.Types = useForm && (pkmn.Forms[formId].Types?.Count ?? 0) > 0 + ? pkmn.Forms[formId].Types + : pkmn.Types; return pkmnForm; } + public static void ReloadMasterFile() + { + var path = Path.Combine(Strings.DataFolder, MasterFileName); + _instance = LoadInit(path); + } + public static T LoadInit(string filePath) { if (!File.Exists(filePath)) @@ -122,26 +133,26 @@ public static T LoadInit(string filePath) var data = File.ReadAllText(filePath); if (string.IsNullOrEmpty(data)) { - _logger.Error($"{filePath} database is empty."); + Console.WriteLine($"{filePath} database is empty."); return default; } - return (T)JsonConvert.DeserializeObject(data, typeof(T)); + return data.FromJson(); } } public class PokemonTypes { - [JsonProperty("immunes")] + [JsonPropertyName("immunes")] public List Immune { get; set; } - [JsonProperty("weaknesses")] + [JsonPropertyName("weaknesses")] public List Weaknesses { get; set; } - [JsonProperty("resistances")] + [JsonPropertyName("resistances")] public List Resistances { get; set; } - [JsonProperty("strengths")] + [JsonPropertyName("strengths")] public List Strengths { get; set; } public PokemonTypes() @@ -162,7 +173,7 @@ public class Emoji public ulong Id { get; set; } } - [JsonConverter(typeof(StringEnumConverter))] + [JsonConverter(typeof(JsonStringEnumConverter))] public enum PokemonRarity { Common, @@ -171,40 +182,40 @@ public enum PokemonRarity public class ItemModel { - [JsonProperty("name")] + [JsonPropertyName("name")] public string Name { get; set; } - - [JsonProperty("proto")] + + [JsonPropertyName("proto")] public string ProtoName { get; set; } - [JsonProperty("min_trainer_level")] + [JsonPropertyName("min_trainer_level")] public int MinimumTrainerLevel { get; set; } } public class QuestTypeModel { - [JsonProperty("prototext")] + [JsonPropertyName("prototext")] public string ProtoText { get; set; } - [JsonProperty("text")] + [JsonPropertyName("text")] public string Text { get; set; } } public class QuestConditionModel { - [JsonProperty("prototext")] + [JsonPropertyName("prototext")] public string ProtoText { get; set; } - [JsonProperty("text")] + [JsonPropertyName("text")] public string Text { get; set; } } public class QuestRewardTypeModel { - [JsonProperty("prototext")] + [JsonPropertyName("prototext")] public string ProtoText { get; set; } - [JsonProperty("text")] + [JsonPropertyName("text")] public string Text { get; set; } } -} \ No newline at end of file +} diff --git a/src/Data/Migrations/20210707002802_InitialCreate.Designer.cs b/src/Data/Migrations/20210707002802_InitialCreate.Designer.cs new file mode 100644 index 00000000..7bc93878 --- /dev/null +++ b/src/Data/Migrations/20210707002802_InitialCreate.Designer.cs @@ -0,0 +1,569 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WhMgr.Data.Contexts; + +namespace WhMgr.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20210707002802_InitialCreate")] + partial class InitialCreate + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 64) + .HasAnnotation("ProductVersion", "5.0.7"); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("max_level"); + + b.Property("MinimumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("min_level"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("PokemonIDs") + .HasColumnType("longtext") + .HasColumnName("pokemon_ids"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("gyms"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("InvasionType") + .HasColumnType("int") + .HasColumnName("grunt_type"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardPokemonId") + .HasColumnType("longtext") + .HasColumnName("reward_pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("invasions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("DistanceM") + .HasColumnType("int") + .HasColumnName("distance"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Latitude") + .HasColumnType("double") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double") + .HasColumnName("longitude"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("locations"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("LureType") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("lure_type"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("lures"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Metadata", b => + { + b.Property("Key") + .HasColumnType("varchar(255)") + .HasColumnName("key"); + + b.Property("Value") + .HasColumnType("longtext") + .HasColumnName("value"); + + b.HasKey("Key"); + + b.ToTable("metadata"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("FormsString") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("Gender") + .HasColumnType("longtext") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IVList") + .HasColumnType("longtext") + .HasColumnName("iv_list"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("int") + .HasColumnName("max_lvl"); + + b.Property("MinimumCP") + .HasColumnType("int") + .HasColumnName("min_cp"); + + b.Property("MinimumIV") + .HasColumnType("int") + .HasColumnName("min_iv"); + + b.Property("MinimumLevel") + .HasColumnType("int") + .HasColumnName("min_lvl"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.Property("_Size") + .HasColumnType("int unsigned") + .HasColumnName("size"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pokemon"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("Form") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("League") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("league"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MinimumPercent") + .HasColumnType("double") + .HasColumnName("min_percent"); + + b.Property("MinimumRank") + .HasColumnType("int") + .HasColumnName("min_rank"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pvp"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardKeyword") + .HasColumnType("longtext") + .HasColumnName("reward"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("quests"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("Form") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokemonId") + .HasColumnType("int unsigned") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("raids"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IconStyle") + .HasColumnType("longtext") + .HasColumnName("icon_style"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PhoneNumber") + .HasColumnType("longtext") + .HasColumnName("phone_number"); + + b.Property("Status") + .HasColumnType("tinyint unsigned") + .HasColumnName("status"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.ToTable("subscriptions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Gyms") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Invasions") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Locations") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Lures") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Pokemon") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("PvP") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Quests") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Raids") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Navigation("Gyms"); + + b.Navigation("Invasions"); + + b.Navigation("Locations"); + + b.Navigation("Lures"); + + b.Navigation("Pokemon"); + + b.Navigation("PvP"); + + b.Navigation("Quests"); + + b.Navigation("Raids"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Data/Migrations/20210707002802_InitialCreate.cs b/src/Data/Migrations/20210707002802_InitialCreate.cs new file mode 100644 index 00000000..9d6ae12c --- /dev/null +++ b/src/Data/Migrations/20210707002802_InitialCreate.cs @@ -0,0 +1,374 @@ +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace WhMgr.Migrations +{ + public partial class InitialCreate : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterDatabase() + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "metadata", + columns: table => new + { + key = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + value = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_metadata", x => x.key); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "subscriptions", + columns: table => new + { + id = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + status = table.Column(type: "tinyint unsigned", nullable: false), + location = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + icon_style = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + phone_number = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + guild_id = table.Column(type: "bigint unsigned", nullable: false), + user_id = table.Column(type: "bigint unsigned", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_subscriptions", x => x.id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "gyms", + columns: table => new + { + id = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + subscription_id = table.Column(type: "int", nullable: false), + name = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + min_level = table.Column(type: "smallint unsigned", nullable: false), + max_level = table.Column(type: "smallint unsigned", nullable: false), + pokemon_ids = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + location = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + guild_id = table.Column(type: "bigint unsigned", nullable: false), + user_id = table.Column(type: "bigint unsigned", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_gyms", x => x.id); + table.ForeignKey( + name: "FK_gyms_subscriptions_subscription_id", + column: x => x.subscription_id, + principalTable: "subscriptions", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "invasions", + columns: table => new + { + id = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + subscription_id = table.Column(type: "int", nullable: false), + pokestop_name = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + grunt_type = table.Column(type: "int", nullable: false), + reward_pokemon_id = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + city = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + location = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + guild_id = table.Column(type: "bigint unsigned", nullable: false), + user_id = table.Column(type: "bigint unsigned", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_invasions", x => x.id); + table.ForeignKey( + name: "FK_invasions_subscriptions_subscription_id", + column: x => x.subscription_id, + principalTable: "subscriptions", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "locations", + columns: table => new + { + id = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + subscription_id = table.Column(type: "int", nullable: false), + name = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + distance = table.Column(type: "int", nullable: false), + latitude = table.Column(type: "double", nullable: false), + longitude = table.Column(type: "double", nullable: false), + guild_id = table.Column(type: "bigint unsigned", nullable: false), + user_id = table.Column(type: "bigint unsigned", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_locations", x => x.id); + table.ForeignKey( + name: "FK_locations_subscriptions_subscription_id", + column: x => x.subscription_id, + principalTable: "subscriptions", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "lures", + columns: table => new + { + id = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + subscription_id = table.Column(type: "int", nullable: false), + pokestop_name = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + lure_type = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + city = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + location = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + guild_id = table.Column(type: "bigint unsigned", nullable: false), + user_id = table.Column(type: "bigint unsigned", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_lures", x => x.id); + table.ForeignKey( + name: "FK_lures_subscriptions_subscription_id", + column: x => x.subscription_id, + principalTable: "subscriptions", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "pokemon", + columns: table => new + { + id = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + subscription_id = table.Column(type: "int", nullable: false), + pokemon_id = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + form = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + min_cp = table.Column(type: "int", nullable: false), + min_iv = table.Column(type: "int", nullable: false), + iv_list = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + min_lvl = table.Column(type: "int", nullable: false), + max_lvl = table.Column(type: "int", nullable: false), + gender = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + size = table.Column(type: "int unsigned", nullable: false), + city = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + location = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + guild_id = table.Column(type: "bigint unsigned", nullable: false), + user_id = table.Column(type: "bigint unsigned", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_pokemon", x => x.id); + table.ForeignKey( + name: "FK_pokemon_subscriptions_subscription_id", + column: x => x.subscription_id, + principalTable: "subscriptions", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "pvp", + columns: table => new + { + id = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + subscription_id = table.Column(type: "int", nullable: false), + pokemon_id = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + form = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + league = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + min_rank = table.Column(type: "int", nullable: false), + min_percent = table.Column(type: "double", nullable: false), + city = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + location = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + guild_id = table.Column(type: "bigint unsigned", nullable: false), + user_id = table.Column(type: "bigint unsigned", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_pvp", x => x.id); + table.ForeignKey( + name: "FK_pvp_subscriptions_subscription_id", + column: x => x.subscription_id, + principalTable: "subscriptions", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "quests", + columns: table => new + { + id = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + subscription_id = table.Column(type: "int", nullable: false), + pokestop_name = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + reward = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + city = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + location = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + guild_id = table.Column(type: "bigint unsigned", nullable: false), + user_id = table.Column(type: "bigint unsigned", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_quests", x => x.id); + table.ForeignKey( + name: "FK_quests_subscriptions_subscription_id", + column: x => x.subscription_id, + principalTable: "subscriptions", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "raids", + columns: table => new + { + id = table.Column(type: "int", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + subscription_id = table.Column(type: "int", nullable: false), + pokemon_id = table.Column(type: "int unsigned", nullable: false), + form = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + city = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + location = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + guild_id = table.Column(type: "bigint unsigned", nullable: false), + user_id = table.Column(type: "bigint unsigned", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_raids", x => x.id); + table.ForeignKey( + name: "FK_raids_subscriptions_subscription_id", + column: x => x.subscription_id, + principalTable: "subscriptions", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_gyms_subscription_id", + table: "gyms", + column: "subscription_id"); + + migrationBuilder.CreateIndex( + name: "IX_invasions_subscription_id", + table: "invasions", + column: "subscription_id"); + + migrationBuilder.CreateIndex( + name: "IX_locations_subscription_id", + table: "locations", + column: "subscription_id"); + + migrationBuilder.CreateIndex( + name: "IX_lures_subscription_id", + table: "lures", + column: "subscription_id"); + + migrationBuilder.CreateIndex( + name: "IX_pokemon_subscription_id", + table: "pokemon", + column: "subscription_id"); + + migrationBuilder.CreateIndex( + name: "IX_pvp_subscription_id", + table: "pvp", + column: "subscription_id"); + + migrationBuilder.CreateIndex( + name: "IX_quests_subscription_id", + table: "quests", + column: "subscription_id"); + + migrationBuilder.CreateIndex( + name: "IX_raids_subscription_id", + table: "raids", + column: "subscription_id"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "gyms"); + + migrationBuilder.DropTable( + name: "invasions"); + + migrationBuilder.DropTable( + name: "locations"); + + migrationBuilder.DropTable( + name: "lures"); + + migrationBuilder.DropTable( + name: "metadata"); + + migrationBuilder.DropTable( + name: "pokemon"); + + migrationBuilder.DropTable( + name: "pvp"); + + migrationBuilder.DropTable( + name: "quests"); + + migrationBuilder.DropTable( + name: "raids"); + + migrationBuilder.DropTable( + name: "subscriptions"); + } + } +} diff --git a/src/Data/Migrations/20210707043736_AddMultiRaidSubSupport.Designer.cs b/src/Data/Migrations/20210707043736_AddMultiRaidSubSupport.Designer.cs new file mode 100644 index 00000000..8f77e466 --- /dev/null +++ b/src/Data/Migrations/20210707043736_AddMultiRaidSubSupport.Designer.cs @@ -0,0 +1,570 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WhMgr.Data.Contexts; + +namespace WhMgr.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20210707043736_AddMultiRaidSubSupport")] + partial class AddMultiRaidSubSupport + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 64) + .HasAnnotation("ProductVersion", "5.0.7"); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("max_level"); + + b.Property("MinimumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("min_level"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("PokemonIDs") + .HasColumnType("longtext") + .HasColumnName("pokemon_ids"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("gyms"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("InvasionType") + .HasColumnType("int") + .HasColumnName("grunt_type"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardPokemonId") + .HasColumnType("longtext") + .HasColumnName("reward_pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("invasions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("DistanceM") + .HasColumnType("int") + .HasColumnName("distance"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Latitude") + .HasColumnType("double") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double") + .HasColumnName("longitude"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("locations"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("LureType") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("lure_type"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("lures"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Metadata", b => + { + b.Property("Key") + .HasColumnType("varchar(255)") + .HasColumnName("key"); + + b.Property("Value") + .HasColumnType("longtext") + .HasColumnName("value"); + + b.HasKey("Key"); + + b.ToTable("metadata"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("FormsString") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("Gender") + .HasColumnType("longtext") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IVList") + .HasColumnType("longtext") + .HasColumnName("iv_list"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("int") + .HasColumnName("max_lvl"); + + b.Property("MinimumCP") + .HasColumnType("int") + .HasColumnName("min_cp"); + + b.Property("MinimumIV") + .HasColumnType("int") + .HasColumnName("min_iv"); + + b.Property("MinimumLevel") + .HasColumnType("int") + .HasColumnName("min_lvl"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.Property("_Size") + .HasColumnType("int unsigned") + .HasColumnName("size"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pokemon"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("Form") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("League") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("league"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MinimumPercent") + .HasColumnType("double") + .HasColumnName("min_percent"); + + b.Property("MinimumRank") + .HasColumnType("int") + .HasColumnName("min_rank"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pvp"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardKeyword") + .HasColumnType("longtext") + .HasColumnName("reward"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("quests"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("Form") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("raids"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IconStyle") + .HasColumnType("longtext") + .HasColumnName("icon_style"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PhoneNumber") + .HasColumnType("longtext") + .HasColumnName("phone_number"); + + b.Property("Status") + .HasColumnType("tinyint unsigned") + .HasColumnName("status"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.ToTable("subscriptions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Gyms") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Invasions") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Locations") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Lures") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Pokemon") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("PvP") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Quests") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Raids") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Navigation("Gyms"); + + b.Navigation("Invasions"); + + b.Navigation("Locations"); + + b.Navigation("Lures"); + + b.Navigation("Pokemon"); + + b.Navigation("PvP"); + + b.Navigation("Quests"); + + b.Navigation("Raids"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Data/Migrations/20210707043736_AddMultiRaidSubSupport.cs b/src/Data/Migrations/20210707043736_AddMultiRaidSubSupport.cs new file mode 100644 index 00000000..4cb3a942 --- /dev/null +++ b/src/Data/Migrations/20210707043736_AddMultiRaidSubSupport.cs @@ -0,0 +1,31 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace WhMgr.Migrations +{ + public partial class AddMultiRaidSubSupport : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "pokemon_id", + table: "raids", + type: "longtext", + nullable: false, + oldClrType: typeof(uint), + oldType: "int unsigned") + .Annotation("MySql:CharSet", "utf8mb4"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "pokemon_id", + table: "raids", + type: "int unsigned", + nullable: false, + oldClrType: typeof(string), + oldType: "longtext") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + } + } +} diff --git a/src/Data/Migrations/20210714054610_AddExRaidGymSubFilter.Designer.cs b/src/Data/Migrations/20210714054610_AddExRaidGymSubFilter.Designer.cs new file mode 100644 index 00000000..a97f80ac --- /dev/null +++ b/src/Data/Migrations/20210714054610_AddExRaidGymSubFilter.Designer.cs @@ -0,0 +1,578 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WhMgr.Data.Contexts; + +namespace WhMgr.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20210714054610_AddExRaidGymSubFilter")] + partial class AddExRaidGymSubFilter + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 64) + .HasAnnotation("ProductVersion", "5.0.7"); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("max_level"); + + b.Property("MinimumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("min_level"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("PokemonIDs") + .HasColumnType("longtext") + .HasColumnName("pokemon_ids"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("gyms"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("InvasionType") + .HasColumnType("int") + .HasColumnName("grunt_type"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardPokemonId") + .HasColumnType("longtext") + .HasColumnName("reward_pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("invasions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("DistanceM") + .HasColumnType("int") + .HasColumnName("distance"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Latitude") + .HasColumnType("double") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double") + .HasColumnName("longitude"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("locations"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("LureType") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("lure_type"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("lures"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Metadata", b => + { + b.Property("Key") + .HasColumnType("varchar(255)") + .HasColumnName("key"); + + b.Property("Value") + .HasColumnType("longtext") + .HasColumnName("value"); + + b.HasKey("Key"); + + b.ToTable("metadata"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("FormsString") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("Gender") + .HasColumnType("longtext") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IVList") + .HasColumnType("longtext") + .HasColumnName("iv_list"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("int") + .HasColumnName("max_lvl"); + + b.Property("MinimumCP") + .HasColumnType("int") + .HasColumnName("min_cp"); + + b.Property("MinimumIV") + .HasColumnType("int") + .HasColumnName("min_iv"); + + b.Property("MinimumLevel") + .HasColumnType("int") + .HasColumnName("min_lvl"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.Property("_Size") + .HasColumnType("int unsigned") + .HasColumnName("size"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pokemon"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("FormsString") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("League") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("league"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MinimumPercent") + .HasColumnType("double") + .HasColumnName("min_percent"); + + b.Property("MinimumRank") + .HasColumnType("int") + .HasColumnName("min_rank"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pvp"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardKeyword") + .HasColumnType("longtext") + .HasColumnName("reward"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("quests"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("FormsString") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("raids"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IconStyle") + .HasColumnType("longtext") + .HasColumnName("icon_style"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PhoneNumber") + .HasColumnType("longtext") + .HasColumnName("phone_number"); + + b.Property("Status") + .HasColumnType("tinyint unsigned") + .HasColumnName("status"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.ToTable("subscriptions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Gyms") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Invasions") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Locations") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Lures") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Pokemon") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("PvP") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Quests") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Raids") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Navigation("Gyms"); + + b.Navigation("Invasions"); + + b.Navigation("Locations"); + + b.Navigation("Lures"); + + b.Navigation("Pokemon"); + + b.Navigation("PvP"); + + b.Navigation("Quests"); + + b.Navigation("Raids"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Data/Migrations/20210714054610_AddExRaidGymSubFilter.cs b/src/Data/Migrations/20210714054610_AddExRaidGymSubFilter.cs new file mode 100644 index 00000000..05427117 --- /dev/null +++ b/src/Data/Migrations/20210714054610_AddExRaidGymSubFilter.cs @@ -0,0 +1,35 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace WhMgr.Migrations +{ + public partial class AddExRaidGymSubFilter : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "ex_eligible", + table: "raids", + type: "tinyint(1)", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "ex_eligible", + table: "gyms", + type: "tinyint(1)", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "ex_eligible", + table: "raids"); + + migrationBuilder.DropColumn( + name: "ex_eligible", + table: "gyms"); + } + } +} diff --git a/src/Data/Migrations/20210909003442_AddMultiInvasionSubSupport.Designer.cs b/src/Data/Migrations/20210909003442_AddMultiInvasionSubSupport.Designer.cs new file mode 100644 index 00000000..d7e0674e --- /dev/null +++ b/src/Data/Migrations/20210909003442_AddMultiInvasionSubSupport.Designer.cs @@ -0,0 +1,578 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WhMgr.Data.Contexts; + +namespace WhMgr.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20210909003442_AddMultiInvasionSubSupport")] + partial class AddMultiInvasionSubSupport + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 64) + .HasAnnotation("ProductVersion", "5.0.8"); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("max_level"); + + b.Property("MinimumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("min_level"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("PokemonIDs") + .HasColumnType("longtext") + .HasColumnName("pokemon_ids"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("gyms"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("InvasionType") + .HasColumnType("longtext") + .HasColumnName("grunt_type"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardPokemonId") + .HasColumnType("longtext") + .HasColumnName("reward_pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("invasions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("DistanceM") + .HasColumnType("int") + .HasColumnName("distance"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Latitude") + .HasColumnType("double") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double") + .HasColumnName("longitude"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("locations"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("LureType") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("lure_type"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("lures"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Metadata", b => + { + b.Property("Key") + .HasColumnType("varchar(255)") + .HasColumnName("key"); + + b.Property("Value") + .HasColumnType("longtext") + .HasColumnName("value"); + + b.HasKey("Key"); + + b.ToTable("metadata"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("FormsString") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("Gender") + .HasColumnType("longtext") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IVList") + .HasColumnType("longtext") + .HasColumnName("iv_list"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("int") + .HasColumnName("max_lvl"); + + b.Property("MinimumCP") + .HasColumnType("int") + .HasColumnName("min_cp"); + + b.Property("MinimumIV") + .HasColumnType("int") + .HasColumnName("min_iv"); + + b.Property("MinimumLevel") + .HasColumnType("int") + .HasColumnName("min_lvl"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.Property("_Size") + .HasColumnType("int unsigned") + .HasColumnName("size"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pokemon"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("FormsString") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("League") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("league"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MinimumPercent") + .HasColumnType("double") + .HasColumnName("min_percent"); + + b.Property("MinimumRank") + .HasColumnType("int") + .HasColumnName("min_rank"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pvp"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardKeyword") + .HasColumnType("longtext") + .HasColumnName("reward"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("quests"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("FormsString") + .HasColumnType("longtext") + .HasColumnName("form"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("raids"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IconStyle") + .HasColumnType("longtext") + .HasColumnName("icon_style"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PhoneNumber") + .HasColumnType("longtext") + .HasColumnName("phone_number"); + + b.Property("Status") + .HasColumnType("tinyint unsigned") + .HasColumnName("status"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.ToTable("subscriptions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Gyms") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Invasions") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Locations") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Lures") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Pokemon") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("PvP") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Quests") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Raids") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Navigation("Gyms"); + + b.Navigation("Invasions"); + + b.Navigation("Locations"); + + b.Navigation("Lures"); + + b.Navigation("Pokemon"); + + b.Navigation("PvP"); + + b.Navigation("Quests"); + + b.Navigation("Raids"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Data/Migrations/20210909003442_AddMultiInvasionSubSupport.cs b/src/Data/Migrations/20210909003442_AddMultiInvasionSubSupport.cs new file mode 100644 index 00000000..c89ebb86 --- /dev/null +++ b/src/Data/Migrations/20210909003442_AddMultiInvasionSubSupport.cs @@ -0,0 +1,33 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace WhMgr.Migrations +{ + public partial class AddMultiInvasionSubSupport : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "grunt_type", + table: "invasions", + type: "longtext", + nullable: true, + oldClrType: typeof(int), + oldType: "int") + .Annotation("MySql:CharSet", "utf8mb4"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "grunt_type", + table: "invasions", + type: "int", + nullable: false, + defaultValue: 0, + oldClrType: typeof(string), + oldType: "longtext", + oldNullable: true) + .OldAnnotation("MySql:CharSet", "utf8mb4"); + } + } +} diff --git a/src/Data/Migrations/20220109043031_ModifyFormsToList.Designer.cs b/src/Data/Migrations/20220109043031_ModifyFormsToList.Designer.cs new file mode 100644 index 00000000..93b3dcb0 --- /dev/null +++ b/src/Data/Migrations/20220109043031_ModifyFormsToList.Designer.cs @@ -0,0 +1,578 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WhMgr.Data.Contexts; + +namespace WhMgr.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20220109043031_ModifyFormsToList")] + partial class ModifyFormsToList + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 64) + .HasAnnotation("ProductVersion", "5.0.10"); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("max_level"); + + b.Property("MinimumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("min_level"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("PokemonIDs") + .HasColumnType("longtext") + .HasColumnName("pokemon_ids"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("gyms"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("InvasionType") + .HasColumnType("longtext") + .HasColumnName("grunt_type"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardPokemonId") + .HasColumnType("longtext") + .HasColumnName("reward_pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("invasions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("DistanceM") + .HasColumnType("int") + .HasColumnName("distance"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Latitude") + .HasColumnType("double") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double") + .HasColumnName("longitude"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("locations"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("LureType") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("lure_type"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("lures"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Metadata", b => + { + b.Property("Key") + .HasColumnType("varchar(255)") + .HasColumnName("key"); + + b.Property("Value") + .HasColumnType("longtext") + .HasColumnName("value"); + + b.HasKey("Key"); + + b.ToTable("metadata"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("Gender") + .HasColumnType("longtext") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IVList") + .HasColumnType("longtext") + .HasColumnName("iv_list"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("int") + .HasColumnName("max_lvl"); + + b.Property("MinimumCP") + .HasColumnType("int") + .HasColumnName("min_cp"); + + b.Property("MinimumIV") + .HasColumnType("int") + .HasColumnName("min_iv"); + + b.Property("MinimumLevel") + .HasColumnType("int") + .HasColumnName("min_lvl"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("Size") + .HasColumnType("tinyint unsigned") + .HasColumnName("size"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pokemon"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("League") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("league"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MinimumPercent") + .HasColumnType("double") + .HasColumnName("min_percent"); + + b.Property("MinimumRank") + .HasColumnType("int") + .HasColumnName("min_rank"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pvp"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardKeyword") + .HasColumnType("longtext") + .HasColumnName("reward"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("quests"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("city"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("raids"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IconStyle") + .HasColumnType("longtext") + .HasColumnName("icon_style"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PhoneNumber") + .HasColumnType("longtext") + .HasColumnName("phone_number"); + + b.Property("Status") + .HasColumnType("tinyint unsigned") + .HasColumnName("status"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.ToTable("subscriptions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Gyms") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Invasions") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Locations") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Lures") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Pokemon") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("PvP") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Quests") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Raids") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Navigation("Gyms"); + + b.Navigation("Invasions"); + + b.Navigation("Locations"); + + b.Navigation("Lures"); + + b.Navigation("Pokemon"); + + b.Navigation("PvP"); + + b.Navigation("Quests"); + + b.Navigation("Raids"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Data/Migrations/20220109043031_ModifyFormsToList.cs b/src/Data/Migrations/20220109043031_ModifyFormsToList.cs new file mode 100644 index 00000000..1c4c50e6 --- /dev/null +++ b/src/Data/Migrations/20220109043031_ModifyFormsToList.cs @@ -0,0 +1,59 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace WhMgr.Migrations +{ + public partial class ModifyFormsToList : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "form", + table: "raids", + newName: "forms"); + + migrationBuilder.RenameColumn( + name: "form", + table: "pvp", + newName: "forms"); + + migrationBuilder.RenameColumn( + name: "form", + table: "pokemon", + newName: "forms"); + + migrationBuilder.AlterColumn( + name: "size", + table: "pokemon", + type: "tinyint unsigned", + nullable: false, + oldClrType: typeof(uint), + oldType: "int unsigned"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "forms", + table: "raids", + newName: "form"); + + migrationBuilder.RenameColumn( + name: "forms", + table: "pvp", + newName: "form"); + + migrationBuilder.RenameColumn( + name: "forms", + table: "pokemon", + newName: "form"); + + migrationBuilder.AlterColumn( + name: "size", + table: "pokemon", + type: "int unsigned", + nullable: false, + oldClrType: typeof(byte), + oldType: "tinyint unsigned"); + } + } +} diff --git a/src/Data/Migrations/20220109043806_RenameCityToAreas.Designer.cs b/src/Data/Migrations/20220109043806_RenameCityToAreas.Designer.cs new file mode 100644 index 00000000..2db9b4ff --- /dev/null +++ b/src/Data/Migrations/20220109043806_RenameCityToAreas.Designer.cs @@ -0,0 +1,578 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WhMgr.Data.Contexts; + +namespace WhMgr.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20220109043806_RenameCityToAreas")] + partial class RenameCityToAreas + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 64) + .HasAnnotation("ProductVersion", "5.0.10"); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("max_level"); + + b.Property("MinimumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("min_level"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("PokemonIDs") + .HasColumnType("longtext") + .HasColumnName("pokemon_ids"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("gyms"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("InvasionType") + .HasColumnType("longtext") + .HasColumnName("grunt_type"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardPokemonId") + .HasColumnType("longtext") + .HasColumnName("reward_pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("invasions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("DistanceM") + .HasColumnType("int") + .HasColumnName("distance"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Latitude") + .HasColumnType("double") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double") + .HasColumnName("longitude"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("locations"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("LureType") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("lure_type"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("lures"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Metadata", b => + { + b.Property("Key") + .HasColumnType("varchar(255)") + .HasColumnName("key"); + + b.Property("Value") + .HasColumnType("longtext") + .HasColumnName("value"); + + b.HasKey("Key"); + + b.ToTable("metadata"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("Gender") + .HasColumnType("longtext") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IVList") + .HasColumnType("longtext") + .HasColumnName("iv_list"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("int") + .HasColumnName("max_lvl"); + + b.Property("MinimumCP") + .HasColumnType("int") + .HasColumnName("min_cp"); + + b.Property("MinimumIV") + .HasColumnType("int") + .HasColumnName("min_iv"); + + b.Property("MinimumLevel") + .HasColumnType("int") + .HasColumnName("min_lvl"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("Size") + .HasColumnType("tinyint unsigned") + .HasColumnName("size"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pokemon"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("League") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("league"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MinimumPercent") + .HasColumnType("double") + .HasColumnName("min_percent"); + + b.Property("MinimumRank") + .HasColumnType("int") + .HasColumnName("min_rank"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pvp"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardKeyword") + .HasColumnType("longtext") + .HasColumnName("reward"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("quests"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("raids"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IconStyle") + .HasColumnType("longtext") + .HasColumnName("icon_style"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PhoneNumber") + .HasColumnType("longtext") + .HasColumnName("phone_number"); + + b.Property("Status") + .HasColumnType("tinyint unsigned") + .HasColumnName("status"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.ToTable("subscriptions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Gyms") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Invasions") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Locations") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Lures") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Pokemon") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("PvP") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Quests") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Raids") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Navigation("Gyms"); + + b.Navigation("Invasions"); + + b.Navigation("Locations"); + + b.Navigation("Lures"); + + b.Navigation("Pokemon"); + + b.Navigation("PvP"); + + b.Navigation("Quests"); + + b.Navigation("Raids"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Data/Migrations/20220109043806_RenameCityToAreas.cs b/src/Data/Migrations/20220109043806_RenameCityToAreas.cs new file mode 100644 index 00000000..f12c89d1 --- /dev/null +++ b/src/Data/Migrations/20220109043806_RenameCityToAreas.cs @@ -0,0 +1,73 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace WhMgr.Migrations +{ + public partial class RenameCityToAreas : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "city", + table: "raids", + newName: "areas"); + + migrationBuilder.RenameColumn( + name: "city", + table: "quests", + newName: "areas"); + + migrationBuilder.RenameColumn( + name: "city", + table: "pvp", + newName: "areas"); + + migrationBuilder.RenameColumn( + name: "city", + table: "pokemon", + newName: "areas"); + + migrationBuilder.RenameColumn( + name: "city", + table: "lures", + newName: "areas"); + + migrationBuilder.RenameColumn( + name: "city", + table: "invasions", + newName: "areas"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "areas", + table: "raids", + newName: "city"); + + migrationBuilder.RenameColumn( + name: "areas", + table: "quests", + newName: "city"); + + migrationBuilder.RenameColumn( + name: "areas", + table: "pvp", + newName: "city"); + + migrationBuilder.RenameColumn( + name: "areas", + table: "pokemon", + newName: "city"); + + migrationBuilder.RenameColumn( + name: "areas", + table: "lures", + newName: "city"); + + migrationBuilder.RenameColumn( + name: "areas", + table: "invasions", + newName: "city"); + } + } +} diff --git a/src/Data/Migrations/20220314014357_AddPvpGenderSubSupport.Designer.cs b/src/Data/Migrations/20220314014357_AddPvpGenderSubSupport.Designer.cs new file mode 100644 index 00000000..3fc4d2ed --- /dev/null +++ b/src/Data/Migrations/20220314014357_AddPvpGenderSubSupport.Designer.cs @@ -0,0 +1,583 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WhMgr.Data.Contexts; + +namespace WhMgr.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20220314014357_AddPvpGenderSubSupport")] + partial class AddPvpGenderSubSupport + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 64) + .HasAnnotation("ProductVersion", "5.0.14"); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("max_level"); + + b.Property("MinimumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("min_level"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("PokemonIDs") + .HasColumnType("longtext") + .HasColumnName("pokemon_ids"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("gyms"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("InvasionType") + .HasColumnType("longtext") + .HasColumnName("grunt_type"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardPokemonId") + .HasColumnType("longtext") + .HasColumnName("reward_pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("invasions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("DistanceM") + .HasColumnType("int") + .HasColumnName("distance"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Latitude") + .HasColumnType("double") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double") + .HasColumnName("longitude"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("locations"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("LureType") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("lure_type"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("lures"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Metadata", b => + { + b.Property("Key") + .HasColumnType("varchar(255)") + .HasColumnName("key"); + + b.Property("Value") + .HasColumnType("longtext") + .HasColumnName("value"); + + b.HasKey("Key"); + + b.ToTable("metadata"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("Gender") + .HasColumnType("longtext") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IVList") + .HasColumnType("longtext") + .HasColumnName("iv_list"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("int") + .HasColumnName("max_lvl"); + + b.Property("MinimumCP") + .HasColumnType("int") + .HasColumnName("min_cp"); + + b.Property("MinimumIV") + .HasColumnType("int") + .HasColumnName("min_iv"); + + b.Property("MinimumLevel") + .HasColumnType("int") + .HasColumnName("min_lvl"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("Size") + .HasColumnType("tinyint unsigned") + .HasColumnName("size"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pokemon"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("League") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("league"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MinimumPercent") + .HasColumnType("double") + .HasColumnName("min_percent"); + + b.Property("MinimumRank") + .HasColumnType("int") + .HasColumnName("min_rank"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pvp"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardKeyword") + .HasColumnType("longtext") + .HasColumnName("reward"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("quests"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("raids"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IconStyle") + .HasColumnType("longtext") + .HasColumnName("icon_style"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PhoneNumber") + .HasColumnType("longtext") + .HasColumnName("phone_number"); + + b.Property("Status") + .HasColumnType("tinyint unsigned") + .HasColumnName("status"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.ToTable("subscriptions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Gyms") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Invasions") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Locations") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Lures") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Pokemon") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("PvP") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Quests") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Raids") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Navigation("Gyms"); + + b.Navigation("Invasions"); + + b.Navigation("Locations"); + + b.Navigation("Lures"); + + b.Navigation("Pokemon"); + + b.Navigation("PvP"); + + b.Navigation("Quests"); + + b.Navigation("Raids"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Data/Migrations/20220314014357_AddPvpGenderSubSupport.cs b/src/Data/Migrations/20220314014357_AddPvpGenderSubSupport.cs new file mode 100644 index 00000000..750a7d64 --- /dev/null +++ b/src/Data/Migrations/20220314014357_AddPvpGenderSubSupport.cs @@ -0,0 +1,24 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace WhMgr.Migrations +{ + public partial class AddPvpGenderSubSupport : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "gender", + table: "pvp", + type: "longtext", + nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "gender", + table: "pvp"); + } + } +} diff --git a/src/Data/Migrations/20220514090320_AddPokemonMaxCP.Designer.cs b/src/Data/Migrations/20220514090320_AddPokemonMaxCP.Designer.cs new file mode 100644 index 00000000..7436e214 --- /dev/null +++ b/src/Data/Migrations/20220514090320_AddPokemonMaxCP.Designer.cs @@ -0,0 +1,587 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WhMgr.Data.Contexts; + +namespace WhMgr.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20220514090320_AddPokemonMaxCP")] + partial class AddPokemonMaxCP + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 64) + .HasAnnotation("ProductVersion", "5.0.14"); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("max_level"); + + b.Property("MinimumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("min_level"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("PokemonIDs") + .HasColumnType("longtext") + .HasColumnName("pokemon_ids"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("gyms"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("InvasionType") + .HasColumnType("longtext") + .HasColumnName("grunt_type"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardPokemonId") + .HasColumnType("longtext") + .HasColumnName("reward_pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("invasions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("DistanceM") + .HasColumnType("int") + .HasColumnName("distance"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Latitude") + .HasColumnType("double") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double") + .HasColumnName("longitude"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("locations"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("LureType") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("lure_type"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("lures"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Metadata", b => + { + b.Property("Key") + .HasColumnType("varchar(255)") + .HasColumnName("key"); + + b.Property("Value") + .HasColumnType("longtext") + .HasColumnName("value"); + + b.HasKey("Key"); + + b.ToTable("metadata"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("Gender") + .HasColumnType("longtext") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IVList") + .HasColumnType("longtext") + .HasColumnName("iv_list"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumCP") + .HasColumnType("int") + .HasColumnName("max_cp"); + + b.Property("MaximumLevel") + .HasColumnType("int") + .HasColumnName("max_lvl"); + + b.Property("MinimumCP") + .HasColumnType("int") + .HasColumnName("min_cp"); + + b.Property("MinimumIV") + .HasColumnType("int") + .HasColumnName("min_iv"); + + b.Property("MinimumLevel") + .HasColumnType("int") + .HasColumnName("min_lvl"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("Size") + .HasColumnType("tinyint unsigned") + .HasColumnName("size"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pokemon"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("League") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("league"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MinimumPercent") + .HasColumnType("double") + .HasColumnName("min_percent"); + + b.Property("MinimumRank") + .HasColumnType("int") + .HasColumnName("min_rank"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pvp"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardKeyword") + .HasColumnType("longtext") + .HasColumnName("reward"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("quests"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("raids"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IconStyle") + .HasColumnType("longtext") + .HasColumnName("icon_style"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PhoneNumber") + .HasColumnType("longtext") + .HasColumnName("phone_number"); + + b.Property("Status") + .HasColumnType("tinyint unsigned") + .HasColumnName("status"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.ToTable("subscriptions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Gyms") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Invasions") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Locations") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Lures") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Pokemon") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("PvP") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Quests") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Raids") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Navigation("Gyms"); + + b.Navigation("Invasions"); + + b.Navigation("Locations"); + + b.Navigation("Lures"); + + b.Navigation("Pokemon"); + + b.Navigation("PvP"); + + b.Navigation("Quests"); + + b.Navigation("Raids"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Data/Migrations/20220514090320_AddPokemonMaxCP.cs b/src/Data/Migrations/20220514090320_AddPokemonMaxCP.cs new file mode 100644 index 00000000..a486511f --- /dev/null +++ b/src/Data/Migrations/20220514090320_AddPokemonMaxCP.cs @@ -0,0 +1,24 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace WhMgr.Migrations +{ + public partial class AddPokemonMaxCP : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "max_cp", + table: "pokemon", + type: "int", + nullable: false, + defaultValue: int.MaxValue); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "max_cp", + table: "pokemon"); + } + } +} diff --git a/src/Data/Migrations/20220610023521_UpdateDefaultColumnValues.Designer.cs b/src/Data/Migrations/20220610023521_UpdateDefaultColumnValues.Designer.cs new file mode 100644 index 00000000..646821ee --- /dev/null +++ b/src/Data/Migrations/20220610023521_UpdateDefaultColumnValues.Designer.cs @@ -0,0 +1,590 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WhMgr.Data.Contexts; + +namespace WhMgr.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20220610023521_UpdateDefaultColumnValues")] + partial class UpdateDefaultColumnValues + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 64) + .HasAnnotation("ProductVersion", "5.0.14"); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("max_level"); + + b.Property("MinimumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("min_level"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("PokemonIDs") + .HasColumnType("longtext") + .HasColumnName("pokemon_ids"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("gyms"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("InvasionType") + .HasColumnType("longtext") + .HasColumnName("grunt_type"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardPokemonId") + .HasColumnType("longtext") + .HasColumnName("reward_pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("invasions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("DistanceM") + .HasColumnType("int") + .HasColumnName("distance"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Latitude") + .HasColumnType("double") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double") + .HasColumnName("longitude"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("locations"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("LureType") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("lure_type"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("lures"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Metadata", b => + { + b.Property("Key") + .HasColumnType("varchar(255)") + .HasColumnName("key"); + + b.Property("Value") + .HasColumnType("longtext") + .HasColumnName("value"); + + b.HasKey("Key"); + + b.ToTable("metadata"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("varchar(1)") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IVList") + .HasColumnType("longtext") + .HasColumnName("iv_list"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumCP") + .HasColumnType("int") + .HasColumnName("max_cp"); + + b.Property("MaximumLevel") + .HasColumnType("int") + .HasColumnName("max_lvl"); + + b.Property("MinimumCP") + .HasColumnType("int") + .HasColumnName("min_cp"); + + b.Property("MinimumIV") + .HasColumnType("int") + .HasColumnName("min_iv"); + + b.Property("MinimumLevel") + .HasColumnType("int") + .HasColumnName("min_lvl"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("Size") + .HasColumnType("tinyint unsigned") + .HasColumnName("size"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pokemon"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("varchar(1)") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("League") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("league"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MinimumPercent") + .HasColumnType("double") + .HasColumnName("min_percent"); + + b.Property("MinimumRank") + .HasColumnType("int") + .HasColumnName("min_rank"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pvp"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardKeyword") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("reward"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("quests"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("raids"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IconStyle") + .HasColumnType("longtext") + .HasColumnName("icon_style"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PhoneNumber") + .HasColumnType("longtext") + .HasColumnName("phone_number"); + + b.Property("Status") + .HasColumnType("tinyint unsigned") + .HasColumnName("status"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.ToTable("subscriptions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Gyms") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Invasions") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Locations") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Lures") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Pokemon") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("PvP") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Quests") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Raids") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Navigation("Gyms"); + + b.Navigation("Invasions"); + + b.Navigation("Locations"); + + b.Navigation("Lures"); + + b.Navigation("Pokemon"); + + b.Navigation("PvP"); + + b.Navigation("Quests"); + + b.Navigation("Raids"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Data/Migrations/20220610023521_UpdateDefaultColumnValues.cs b/src/Data/Migrations/20220610023521_UpdateDefaultColumnValues.cs new file mode 100644 index 00000000..65964b84 --- /dev/null +++ b/src/Data/Migrations/20220610023521_UpdateDefaultColumnValues.cs @@ -0,0 +1,158 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace WhMgr.Migrations +{ + public partial class UpdateDefaultColumnValues : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "gender", + table: "pvp", + type: "varchar(1)", + nullable: false); + + migrationBuilder.AlterColumn( + name: "gender", + table: "pokemon", + type: "varchar(1)", + nullable: false, + defaultValue: '*'); + + migrationBuilder.AlterColumn( + name: "name", + table: "locations", + type: "longtext", + nullable: false, + defaultValue: null); + + migrationBuilder.AlterColumn( + name: "pokestop_name", + table: "quests", + type: "longtext", + nullable: true, + defaultValue: null); + + migrationBuilder.AlterColumn( + name: "pokestop_name", + table: "invasions", + type: "longtext", + nullable: true, + defaultValue: null); + + migrationBuilder.AlterColumn( + name: "pokestop_name", + table: "lures", + type: "longtext", + nullable: true, + defaultValue: null); + + migrationBuilder.AlterColumn( + name: "name", + table: "gyms", + type: "longtext", + nullable: true, + defaultValue: null); + + migrationBuilder.AlterColumn( + name: "max_cp", + table: "pokemon", + type: "int", + nullable: false, + defaultValue: int.MaxValue); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "gender", + table: "pvp", + type: "longtext", + nullable: false, + oldClrType: typeof(string), + oldType: "varchar(1)") + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "gender", + table: "pokemon", + type: "longtext", + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(1)") + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "name", + table: "locations", + type: "longtext", + nullable: true, + oldClrType: typeof(string), + oldType: "longtext") + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "pokestop_name", + table: "quests", + type: "longtext", + nullable: true, + defaultValue: "", + oldClrType: typeof(string), + oldType: "longtext", + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "pokestop_name", + table: "invasions", + type: "longtext", + nullable: true, + defaultValue: "", + oldClrType: typeof(string), + oldType: "longtext", + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "pokestop_name", + table: "lures", + type: "longtext", + nullable: true, + defaultValue: "", + oldClrType: typeof(string), + oldType: "longtext", + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "name", + table: "gyms", + type: "longtext", + nullable: true, + defaultValue: "", + oldClrType: typeof(string), + oldType: "longtext", + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "max_cp", + table: "pokemon", + type: "int", + nullable: false, + defaultValue: 0, + oldClrType: typeof(int), + oldType: "int", + oldNullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + } + } +} diff --git a/src/Data/Migrations/AppDbContextModelSnapshot.cs b/src/Data/Migrations/AppDbContextModelSnapshot.cs new file mode 100644 index 00000000..c4f7234a --- /dev/null +++ b/src/Data/Migrations/AppDbContextModelSnapshot.cs @@ -0,0 +1,587 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WhMgr.Data.Contexts; + +namespace WhMgr.Migrations +{ + [DbContext(typeof(AppDbContext))] + partial class AppDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 64) + .HasAnnotation("ProductVersion", "5.0.14"); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("max_level"); + + b.Property("MinimumLevel") + .HasColumnType("smallint unsigned") + .HasColumnName("min_level"); + + b.Property("Name") + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("PokemonIDs") + .HasColumnType("longtext") + .HasColumnName("pokemon_ids"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("gyms"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("InvasionType") + .HasColumnType("longtext") + .HasColumnName("grunt_type"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardPokemonId") + .HasColumnType("longtext") + .HasColumnName("reward_pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("invasions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("DistanceM") + .HasColumnType("int") + .HasColumnName("distance"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Latitude") + .HasColumnType("double") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double") + .HasColumnName("longitude"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("locations"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("LureType") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("lure_type"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("lures"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Metadata", b => + { + b.Property("Key") + .HasColumnType("varchar(255)") + .HasColumnName("key"); + + b.Property("Value") + .HasColumnType("longtext") + .HasColumnName("value"); + + b.HasKey("Key"); + + b.ToTable("metadata"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("varchar(1)") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IVList") + .HasColumnType("longtext") + .HasColumnName("iv_list"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MaximumCP") + .HasColumnType("int") + .HasColumnName("max_cp"); + + b.Property("MaximumLevel") + .HasColumnType("int") + .HasColumnName("max_lvl"); + + b.Property("MinimumCP") + .HasColumnType("int") + .HasColumnName("min_cp"); + + b.Property("MinimumIV") + .HasColumnType("int") + .HasColumnName("min_iv"); + + b.Property("MinimumLevel") + .HasColumnType("int") + .HasColumnName("min_lvl"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("Size") + .HasColumnType("tinyint unsigned") + .HasColumnName("size"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pokemon"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("varchar(1)") + .HasColumnName("gender"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("League") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("league"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("MinimumPercent") + .HasColumnType("double") + .HasColumnName("min_percent"); + + b.Property("MinimumRank") + .HasColumnType("int") + .HasColumnName("min_rank"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("pvp"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokestopName") + .HasColumnType("longtext") + .HasColumnName("pokestop_name"); + + b.Property("RewardKeyword") + .HasColumnType("longtext") + .HasColumnName("reward"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("quests"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("Areas") + .HasColumnType("longtext") + .HasColumnName("areas"); + + b.Property("Forms") + .HasColumnType("longtext") + .HasColumnName("forms"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IsExEligible") + .HasColumnType("tinyint(1)") + .HasColumnName("ex_eligible"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PokemonId") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("pokemon_id"); + + b.Property("SubscriptionId") + .HasColumnType("int") + .HasColumnName("subscription_id"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("SubscriptionId"); + + b.ToTable("raids"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasColumnName("id"); + + b.Property("GuildId") + .HasColumnType("bigint unsigned") + .HasColumnName("guild_id"); + + b.Property("IconStyle") + .HasColumnType("longtext") + .HasColumnName("icon_style"); + + b.Property("Location") + .HasColumnType("longtext") + .HasColumnName("location"); + + b.Property("PhoneNumber") + .HasColumnType("longtext") + .HasColumnName("phone_number"); + + b.Property("Status") + .HasColumnType("tinyint unsigned") + .HasColumnName("status"); + + b.Property("UserId") + .HasColumnType("bigint unsigned") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.ToTable("subscriptions"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.GymSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Gyms") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.InvasionSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Invasions") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LocationSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Locations") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.LureSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Lures") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PokemonSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Pokemon") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.PvpSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("PvP") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.QuestSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Quests") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.RaidSubscription", b => + { + b.HasOne("WhMgr.Services.Subscriptions.Models.Subscription", "Subscription") + .WithMany("Raids") + .HasForeignKey("SubscriptionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Subscription"); + }); + + modelBuilder.Entity("WhMgr.Services.Subscriptions.Models.Subscription", b => + { + b.Navigation("Gyms"); + + b.Navigation("Invasions"); + + b.Navigation("Locations"); + + b.Navigation("Lures"); + + b.Navigation("Pokemon"); + + b.Navigation("PvP"); + + b.Navigation("Quests"); + + b.Navigation("Raids"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Data/Models/Discord/DiscordEmbedAuthor.cs b/src/Data/Models/Discord/DiscordEmbedAuthor.cs deleted file mode 100644 index 90f1a168..00000000 --- a/src/Data/Models/Discord/DiscordEmbedAuthor.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace WhMgr.Data.Models.Discord -{ - using Newtonsoft.Json; - - public class DiscordEmbedAuthor - { - [JsonProperty("name")] - public string Name { get; set; } - - [JsonProperty("icon_url")] - public string IconUrl { get; set; } - } -} \ No newline at end of file diff --git a/src/Data/Models/Discord/DiscordEmbedFooter.cs b/src/Data/Models/Discord/DiscordEmbedFooter.cs deleted file mode 100644 index 38d39342..00000000 --- a/src/Data/Models/Discord/DiscordEmbedFooter.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace WhMgr.Data.Models.Discord -{ - using Newtonsoft.Json; - - public class DiscordEmbedFooter - { - [JsonProperty("text")] - public string Text { get; set; } - - [JsonProperty("icon_url")] - public string IconUrl { get; set; } - } -} \ No newline at end of file diff --git a/src/Data/Models/Discord/DiscordEmbedImage.cs b/src/Data/Models/Discord/DiscordEmbedImage.cs deleted file mode 100644 index bdfa016d..00000000 --- a/src/Data/Models/Discord/DiscordEmbedImage.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace WhMgr.Data.Models.Discord -{ - using Newtonsoft.Json; - - public class DiscordEmbedImage - { - [JsonProperty("url")] - public string Url { get; set; } - } -} \ No newline at end of file diff --git a/src/Data/Models/Discord/DiscordEmbedMessage.cs b/src/Data/Models/Discord/DiscordEmbedMessage.cs deleted file mode 100644 index 20ac738e..00000000 --- a/src/Data/Models/Discord/DiscordEmbedMessage.cs +++ /dev/null @@ -1,42 +0,0 @@ -namespace WhMgr.Data.Models.Discord -{ - using System; - using System.Collections.Generic; - - using Newtonsoft.Json; - - public class DiscordEmbedMessage - { - [JsonProperty("title")] - public string Title { get; set; } - - [JsonProperty("description")] - public string Description { get; set; } - - [JsonProperty("color")] - public int Color { get; set; } - - [JsonProperty("author")] - public DiscordEmbedAuthor Author { get; set; } - - [JsonProperty("fields")] - public List Fields { get; set; } - - [JsonProperty("footer")] - public DiscordEmbedFooter Footer { get; set; } - - [JsonProperty("thumbnail")] - public DiscordEmbedImage Thumbnail { get; set; } - - [JsonProperty("image")] - public DiscordEmbedImage Image { get; set; } - - [JsonProperty("url")] - public string Url { get; set; } - - public DiscordEmbedMessage() - { - Fields = new List(); - } - } -} \ No newline at end of file diff --git a/src/Data/Models/Discord/DiscordField.cs b/src/Data/Models/Discord/DiscordField.cs deleted file mode 100644 index d6d8482a..00000000 --- a/src/Data/Models/Discord/DiscordField.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace WhMgr.Data.Models.Discord -{ - using Newtonsoft.Json; - - public class DiscordField - { - [JsonProperty("name")] - public string Name { get; set; } - - [JsonProperty("value")] - public string Value { get; set; } - - [JsonProperty("inline")] - public bool Inline { get; set; } - } -} \ No newline at end of file diff --git a/src/Data/Models/Discord/DiscordWebhookMessage.cs b/src/Data/Models/Discord/DiscordWebhookMessage.cs deleted file mode 100644 index 9ab44405..00000000 --- a/src/Data/Models/Discord/DiscordWebhookMessage.cs +++ /dev/null @@ -1,36 +0,0 @@ -namespace WhMgr.Data.Models.Discord -{ - using System; - using System.Collections.Generic; - - using DSharpPlus.Entities; - using Newtonsoft.Json; - - public class DiscordWebhookMessage - { - [JsonProperty("content")] - public string Content { get; set; } - - [JsonProperty("username")] - public string Username { get; set; } - - [JsonProperty("avatar_url")] - public string AvatarUrl { get; set; } - - [JsonProperty("embeds")] - public List Embeds { get; set; } - - [JsonIgnore] - public bool HasEmbeds => Embeds?.Count > 0; - - public DiscordWebhookMessage() - { - Embeds = new List(); - } - - public string Build() - { - return JsonConvert.SerializeObject(this); - } - } -} \ No newline at end of file diff --git a/src/Data/Models/Nest.cs b/src/Data/Models/Nest.cs index 7693b91d..a76d89e2 100644 --- a/src/Data/Models/Nest.cs +++ b/src/Data/Models/Nest.cs @@ -1,31 +1,43 @@ namespace WhMgr.Data.Models { using System; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; - using ServiceStack.DataAnnotations; + using WhMgr.Services.Webhook.Models; - [Alias("nests")] - public class Nest + [Table("nests")] + public class Nest : IWebhookPoint { - [Alias("name")] + [ + Column("nest_id"), + Key, + ] + public long NestId { get; set; } + + [Column("name")] public string Name { get; set; } - [Alias("pokemon_avg")] - public int Average { get; set; } + [Column("pokemon_avg")] + public double Average { get; set; } - [Alias("pokemon_count")] - public int Count { get; set; } + [Column("pokemon_count")] + public double Count { get; set; } - [Alias("pokemon_id")] + [Column("pokemon_id")] public uint PokemonId { get; set; } - [Alias("lat")] + [Column("lat")] public double Latitude { get; set; } - [Alias("lon")] + [Column("lon")] public double Longitude { get; set; } - [Alias("updated")] - public DateTime LastUpdated { get; set; } + [Column("updated")] + public ulong LastUpdated { get; set; } + + // TODO: Check if updated within the last 2 weeks before posting? + [NotMapped] + public bool IsExpired { get; set; } } } \ No newline at end of file diff --git a/src/Data/Models/PokedexPokemon.cs b/src/Data/Models/PokedexPokemon.cs deleted file mode 100644 index 72224543..00000000 --- a/src/Data/Models/PokedexPokemon.cs +++ /dev/null @@ -1,92 +0,0 @@ -namespace WhMgr.Data.Models -{ - using System; - using System.Collections.Generic; - - using Newtonsoft.Json; - using POGOProtos.Rpc; - - public class PokedexPokemon - { - [JsonProperty("pokedex_id")] - public uint PokedexId { get; set; } - - [JsonProperty("name")] - public string Name { get; set; } - - [JsonProperty("forms")] - public Dictionary Forms { get; set; } - - [JsonProperty("default_form_id")] - public int? DefaultFormId { get; set; } - - [JsonProperty("default_form")] - public string DefaultForm { get; set; } - - [JsonProperty("evolutions")] - public List Evolutions { get; set; } - - [JsonProperty("form")] - public string Form { get; set; } - - [JsonProperty("types")] - public List Types { get; set; } - - [JsonProperty("attack")] - public int? Attack { get; set; } - - [JsonProperty("defense")] - public int? Defense { get; set; } - - [JsonProperty("stamina")] - public int? Stamina { get; set; } - - [JsonProperty("height")] - public double? Height { get; set; } - - [JsonProperty("weight")] - public double? Weight { get; set; } - - [JsonProperty("flee_rate")] - public double? FleeRate { get; set; } - - [JsonProperty("quick_moves")] - public List QuickMoves { get; set; } - - [JsonProperty("charged_moves")] - public List ChargedMoves { get; set; } - - [JsonProperty("candy_to_evolve")] - public int? Candy { get; set; } - - [JsonProperty("buddy_distance")] - public int? BuddyDistance { get; set; } - - [JsonProperty("legendary")] - public bool Legendary { get; set; } - - [JsonProperty("mythic")] - public bool Mythical { get; set; } - - [JsonProperty("buddy_distance_evolve")] - public int? BuddyDistanceEvolve { get; set; } - - [JsonProperty("third_move_stardust")] - public int ThirdMoveStardust { get; set; } - - [JsonProperty("third_move_candy")] - public int ThirdMoveCandy { get; set; } - - [JsonProperty("gym_defender_eligible")] - public bool GymDeployable { get; set; } - - public PokedexPokemon() - { - Forms = new Dictionary(); - Evolutions = new List(); - QuickMoves = new List(); - ChargedMoves = new List(); - Types = new List(); - } - } -} \ No newline at end of file diff --git a/src/Data/Models/PokemonGender.cs b/src/Data/Models/PokemonGender.cs deleted file mode 100644 index fd929eea..00000000 --- a/src/Data/Models/PokemonGender.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace WhMgr.Data.Models -{ - public enum PokemonGender - { - } -} diff --git a/src/Data/Models/PokemonStatsHundo.cs b/src/Data/Models/PokemonStatsHundo.cs new file mode 100644 index 00000000..f1dfd7f0 --- /dev/null +++ b/src/Data/Models/PokemonStatsHundo.cs @@ -0,0 +1,25 @@ +namespace WhMgr.Data.Models +{ + using System; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + + [Table("pokemon_hundo_stats")] + public class PokemonStatsHundo + { + [ + Column("date", TypeName = "date"), + Key, + ] + public DateTime Date { get; set; } + + [ + Column("pokemon_id"), + Key, + ] + public uint PokemonId { get; set; } + + [Column("count")] + public ulong Count { get; set; } + } +} \ No newline at end of file diff --git a/src/Data/Models/PokemonStatsIV.cs b/src/Data/Models/PokemonStatsIV.cs new file mode 100644 index 00000000..6ca95b5d --- /dev/null +++ b/src/Data/Models/PokemonStatsIV.cs @@ -0,0 +1,22 @@ +namespace WhMgr.Data.Models +{ + using System; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + + [Table("pokemon_iv_stats")] + public class PokemonStatsIV + { + [ + Column("date", TypeName = "date"), + Key, + ] + public DateTime Date { get; set; } + + [Column("pokemon_id")] + public uint PokemonId { get; set; } + + [Column("count")] + public ulong Count { get; set; } + } +} \ No newline at end of file diff --git a/src/Data/Models/PokemonStatsShiny.cs b/src/Data/Models/PokemonStatsShiny.cs new file mode 100644 index 00000000..a8f2fba5 --- /dev/null +++ b/src/Data/Models/PokemonStatsShiny.cs @@ -0,0 +1,22 @@ +namespace WhMgr.Data.Models +{ + using System; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + + [Table("pokemon_shiny_stats")] + public class PokemonStatsShiny + { + [ + Column("date", TypeName = "date"), + Key, + ] + public DateTime Date { get; set; } + + [Column("pokemon_id")] + public uint PokemonId { get; set; } + + [Column("count")] + public ulong Count { get; set; } + } +} \ No newline at end of file diff --git a/src/Data/Models/Pokestop.cs b/src/Data/Models/Pokestop.cs deleted file mode 100644 index 8374bae6..00000000 --- a/src/Data/Models/Pokestop.cs +++ /dev/null @@ -1,142 +0,0 @@ -namespace WhMgr.Data.Models -{ - using System; - using System.Collections.Generic; - using System.Linq; - - using ServiceStack.DataAnnotations; - using ServiceStack.OrmLite; - using Newtonsoft.Json; - using POGOProtos.Rpc; - using ItemId = POGOProtos.Rpc.Item; - using QuestRewardType = POGOProtos.Rpc.QuestRewardProto.Types.Type; - - using WhMgr.Diagnostics; - using WhMgr.Net.Models; - - [Alias("pokestop")] - public class Pokestop - { - private static Dictionary _pokestops; - private static readonly IEventLogger _logger = EventLogger.GetLogger("POKESTOP", Program.LogLevel); - - #region Database Properties - - [Alias("id")] - public string Id { get; set; } - - [Alias("name")] - public string Name { get; set; } - - [Alias("url")] - public string Url { get; set; } - - [Alias("lat")] - public double Latitude { get; set; } - - [Alias("lon")] - public double Longitude { get; set; } - - [Alias("lure_expire_timestamp")] - public long LureExpireTimestamp { get; set; } - - [Alias("enabled")] - public bool Enabled { get; set; } - - [Alias("quest_type")] - public QuestType QuestType { get; set; } - - [Alias("quest_timestamp")] - public long QuestTimestamp { get; set; } - - [Alias("quest_target")] - public int QuestTarget { get; set; } - - [Alias("quest_conditions")] - public string QuestConditionsJson { get; set; } - - private List _questConditions; - [Ignore] - public List QuestConditions - { - get - { - if (_questConditions == null && !string.IsNullOrEmpty(QuestConditionsJson)) - { - _questConditions = JsonConvert.DeserializeObject>(QuestConditionsJson); - } - - return _questConditions; - } - } - - [Alias("quest_rewards")] - public string QuestRewardsJson { get; set; } - - private List _questRewards; - [Ignore] - public List QuestRewards - { - get - { - if (_questRewards == null && !string.IsNullOrEmpty(QuestRewardsJson)) - { - _questRewards = JsonConvert.DeserializeObject>(QuestRewardsJson); - } - - return _questRewards; - } - } - - [Alias("quest_template")] - public string QuestTemplate { get; set; } - - [Alias("quest_pokemon_id")] - public int QuestPokemonId { get; set; } - - [Alias("quest_reward_type")] - public QuestRewardType QuestRewardType { get; set; } - - [Alias("quest_item_id")] - public ItemId QuestItemId { get; set; } - - [Alias("cell_id")] - public ulong CellId { get; set; } - - #endregion - - public static IReadOnlyDictionary Pokestops - { - get - { - if (_pokestops == null) - { - _pokestops = GetPokestops(DataAccessLayer.ScannerConnectionString); - } - return _pokestops; - } - } - - private static Dictionary GetPokestops(string connectionString = "") - { - if (string.IsNullOrEmpty(connectionString)) - return null; - - try - { - using (var db = DataAccessLayer.CreateFactory(connectionString).Open()) - { - var pokestops = db.LoadSelect(); - var dict = pokestops?.ToDictionary(x => x.Id, x => x); - return dict; - } - } - catch (Exception ex) - { - _logger.Error(ex); - } - - return null; - } - } -} \ No newline at end of file diff --git a/src/Data/PokedexPokemon.cs b/src/Data/PokedexPokemon.cs new file mode 100644 index 00000000..f50219f5 --- /dev/null +++ b/src/Data/PokedexPokemon.cs @@ -0,0 +1,110 @@ +namespace WhMgr.Data +{ + using System.Collections.Generic; + using System.Text.Json.Serialization; + + using static POGOProtos.Rpc.BelugaPokemonProto.Types; + + using WhMgr.Common; + + public class PokedexPokemon + { + [JsonPropertyName("pokedex_id")] + public uint PokedexId { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("forms")] + public Dictionary Forms { get; set; } + + /* + [JsonPropertyName("default_form_id")] + public int? DefaultFormId { get; set; } + + [JsonPropertyName("default_form")] + public string DefaultForm { get; set; } + */ + + [JsonPropertyName("evolutions")] + public List Evolutions { get; set; } + + [JsonPropertyName("form")] + public ushort? Form { get; set; } + + [JsonPropertyName("gender_requirement")] + public PokemonGender GenderRequirement { get; set; } + + [JsonPropertyName("types")] + public List Types { get; set; } + + [JsonPropertyName("attack")] + public int? Attack { get; set; } + + [JsonPropertyName("defense")] + public int? Defense { get; set; } + + [JsonPropertyName("stamina")] + public int? Stamina { get; set; } + + [JsonPropertyName("height")] + public double? Height { get; set; } + + [JsonPropertyName("weight")] + public double? Weight { get; set; } + + [JsonPropertyName("flee_rate")] + public double? FleeRate { get; set; } + + [JsonPropertyName("quick_moves")] + public List QuickMoves { get; set; } + + [JsonPropertyName("charged_moves")] + public List ChargedMoves { get; set; } + + [JsonPropertyName("candy_to_evolve")] + public int? Candy { get; set; } + + [JsonPropertyName("buddy_distance")] + public int? BuddyDistance { get; set; } + + [JsonPropertyName("legendary")] + public bool Legendary { get; set; } + + [JsonPropertyName("mythic")] + public bool Mythical { get; set; } + + [JsonPropertyName("buddy_distance_evolve")] + public int? BuddyDistanceEvolve { get; set; } + + [JsonPropertyName("third_move_stardust")] + public int ThirdMoveStardust { get; set; } + + [JsonPropertyName("third_move_candy")] + public int ThirdMoveCandy { get; set; } + + [JsonPropertyName("gym_defender_eligible")] + public bool GymDeployable { get; set; } + + [JsonPropertyName("gen_id")] + public uint GenerationId { get; set; } + + [JsonPropertyName("generation")] + public string Generation { get; set; } + + [JsonPropertyName("temp_evolutions")] + public Dictionary TempEvolutions { get; set; } + + [JsonPropertyName("little")] + public bool Little { get; set; } + + public PokedexPokemon() + { + Forms = new Dictionary(); + Evolutions = new List(); + QuickMoves = new List(); + ChargedMoves = new List(); + Types = new List(); + } + } +} \ No newline at end of file diff --git a/src/Data/PokedexPokemonEvolution.cs b/src/Data/PokedexPokemonEvolution.cs new file mode 100644 index 00000000..62611c0a --- /dev/null +++ b/src/Data/PokedexPokemonEvolution.cs @@ -0,0 +1,18 @@ +namespace WhMgr.Data +{ + using System.Text.Json.Serialization; + + using static POGOProtos.Rpc.BelugaPokemonProto.Types; + + public class PokedexPokemonEvolution + { + [JsonPropertyName("pokemon")] + public uint PokemonId { get; set; } + + [JsonPropertyName("form")] + public uint FormId { get; set; } + + [JsonPropertyName("gender_requirement")] + public PokemonGender GenderRequirement { get; set; } + } +} \ No newline at end of file diff --git a/src/Data/Subscriptions/Models/GymSubscription.cs b/src/Data/Subscriptions/Models/GymSubscription.cs deleted file mode 100644 index 6bc30058..00000000 --- a/src/Data/Subscriptions/Models/GymSubscription.cs +++ /dev/null @@ -1,55 +0,0 @@ -namespace WhMgr.Data.Subscriptions.Models -{ - using System.Collections.Generic; - using Newtonsoft.Json; - using ServiceStack.DataAnnotations; - - [ - JsonObject("gyms"), - Alias("gyms"), - ] - public class GymSubscription : SubscriptionItem - { - [ - Alias("subscription_id"), - ForeignKey(typeof(SubscriptionObject)), - ] - public int SubscriptionId { get; set; } - - [ - JsonProperty("name"), - Alias("name"), - //Unique, - ] - public string Name { get; set; } - - [ - JsonProperty("min_level"), - Alias("min_level"), - ] - public ushort MinimumLevel { get; set; } - - [ - JsonProperty("max_level"), - Alias("max_level"), - ] - public ushort MaximumLevel { get; set; } - - [ - JsonProperty("pokemon_ids"), - Alias("pokemon_ids"), - ] - public List PokemonIDs { get; set; } - - [ - JsonProperty("location"), - Alias("location"), - ] - public string Location { get; set; } - - public GymSubscription() - { - PokemonIDs = new List(); - } - } -} \ No newline at end of file diff --git a/src/Data/Subscriptions/Models/InvasionSubscription.cs b/src/Data/Subscriptions/Models/InvasionSubscription.cs deleted file mode 100644 index 278f75f8..00000000 --- a/src/Data/Subscriptions/Models/InvasionSubscription.cs +++ /dev/null @@ -1,66 +0,0 @@ -namespace WhMgr.Data.Subscriptions.Models -{ - using System; - using System.Collections.Generic; - using System.Linq; - - using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; - using Newtonsoft.Json; - using ServiceStack.DataAnnotations; - - [ - JsonObject("invasions"), - Alias("invasions"), - ] - public class InvasionSubscription : SubscriptionItem - { - [ - Alias("subscription_id"), - ForeignKey(typeof(SubscriptionObject)), - ] - public int SubscriptionId { get; set; } - - [ - JsonProperty("pokestop_name"), - Alias("pokestop_name"), - ] - public string PokestopName { get; set; } - - [ - JsonProperty("grunt_type"), - Alias("grunt_type"), - ] - public InvasionCharacter InvasionType { get; set; } - - [ - JsonIgnore, - Ignore, - ] - public List RewardPokemonId => RewardPokemonIdString?.Split(',')? - .Select(x => uint.Parse(x)) - .ToList(); - - [ - JsonProperty("reward_pokemon_id"), - Alias("reward_pokemon_id"), - ] - public string RewardPokemonIdString { get; set; } - - [ - JsonProperty("city"), - Alias("city"), - ] - public List Areas { get; set; } - - [ - JsonProperty("location"), - Alias("location"), - ] - public string Location { get; set; } - - public InvasionSubscription() - { - Areas = new List(); - } - } -} \ No newline at end of file diff --git a/src/Data/Subscriptions/Models/LocationSubscription.cs b/src/Data/Subscriptions/Models/LocationSubscription.cs deleted file mode 100644 index b56447df..00000000 --- a/src/Data/Subscriptions/Models/LocationSubscription.cs +++ /dev/null @@ -1,51 +0,0 @@ -namespace WhMgr.Data.Subscriptions.Models -{ - using Newtonsoft.Json; - using ServiceStack.DataAnnotations; - - [ - JsonObject("locations"), - Alias("locations"), - ] - public class LocationSubscription : SubscriptionItem - { - [ - Alias("subscription_id"), - ForeignKey(typeof(SubscriptionObject)), - ] - public int SubscriptionId { get; set; } - - [ - JsonProperty("name"), - Alias("name"), - ] - public string Name { get; set; } - - [ - JsonProperty("distance"), - Alias("distance"), - Default(0), - ] - public int DistanceM { get; set; } - - /// - /// Gets or sets the latitude to use with distance checks - /// - [ - JsonProperty("latitude"), - Alias("latitude"), - Default(0), - ] - public double Latitude { get; set; } - - /// - /// Gets or sets the longitude to use with distance checks - /// - [ - JsonProperty("longitude"), - Alias("longitude"), - Default(0), - ] - public double Longitude { get; set; } - } -} \ No newline at end of file diff --git a/src/Data/Subscriptions/Models/LureSubscription.cs b/src/Data/Subscriptions/Models/LureSubscription.cs deleted file mode 100644 index 8c62b92f..00000000 --- a/src/Data/Subscriptions/Models/LureSubscription.cs +++ /dev/null @@ -1,55 +0,0 @@ -namespace WhMgr.Data.Subscriptions.Models -{ - using System; - using System.Collections.Generic; - - using Newtonsoft.Json; - using ServiceStack.DataAnnotations; - - using WhMgr.Net.Models; - - [ - JsonObject("lures"), - Alias("lures"), - ] - public class LureSubscription : SubscriptionItem - { - [ - Alias("subscription_id"), - ForeignKey(typeof(SubscriptionObject)), - ] - public int SubscriptionId { get; set; } - - [ - JsonProperty("pokestop_name"), - Alias("pokestop_name"), - ] - public string PokestopName { get; set; } - - [ - JsonProperty("lure_type"), - Alias("lure_type"), - Required - ] - public PokestopLureType LureType { get; set; } - - [ - JsonProperty("city"), - Alias("city"), - Required - ] - public List Areas { get; set; } - - [ - JsonProperty("location"), - Alias("location"), - ] - public string Location { get; set; } - - public LureSubscription() - { - LureType = PokestopLureType.None; - Areas = new List(); - } - } -} \ No newline at end of file diff --git a/src/Data/Subscriptions/Models/PokemonSubscription.cs b/src/Data/Subscriptions/Models/PokemonSubscription.cs deleted file mode 100644 index fdffab88..00000000 --- a/src/Data/Subscriptions/Models/PokemonSubscription.cs +++ /dev/null @@ -1,153 +0,0 @@ -namespace WhMgr.Data.Subscriptions.Models -{ - using System; - using System.Collections.Generic; - using System.Linq; - - using Newtonsoft.Json; - using ServiceStack.DataAnnotations; - - using WhMgr.Net.Models; - - [ - JsonObject("pokemon"), - Alias("pokemon"), - ] - public class PokemonSubscription : SubscriptionItem - { - #region Properties - - [ - Alias("subscription_id"), - ForeignKey(typeof(SubscriptionObject)), - ] - public int SubscriptionId { get; set; } - - [ - JsonIgnore, - Ignore, - ] - public List PokemonId - { - get - { - try - { - return PokemonIdString?.Split(',')? - .Select(x => uint.Parse(x)) - .ToList(); - } - catch (Exception ex) - { - Console.WriteLine($"[Error] Failed to parse pokemon id string: {ex}"); - } - return new List(); - } - } - - [ - JsonProperty("pokemon_id"), - Alias("pokemon_id"), - Required, - ] - public string PokemonIdString { get; set; } - - [ - JsonIgnore, - Ignore, - ] - public List Forms => FormsString?.Split(',').ToList(); - - [ - JsonProperty("form"), - Alias("form"), - ] - public string FormsString { get; set; } - - [ - JsonProperty("min_cp"), - Alias("min_cp"), - ] - public int MinimumCP { get; set; } - - [ - JsonProperty("min_iv"), - Alias("min_iv"), - ] - public int MinimumIV { get; set; } - - [ - JsonProperty("iv_list"), - Alias("iv_list"), - ] - public List IVList { get; set; } - - [ - JsonProperty("min_lvl"), - Alias("min_lvl"), - ] - public int MinimumLevel { get; set; } - - [ - JsonProperty("max_lvl"), - Alias("max_lvl"), - ] - public int MaximumLevel { get; set; } - - [ - JsonProperty("gender"), - Alias("gender"), - ] - public string Gender { get; set; } - - [ - JsonIgnore, - Ignore, - ] - public PokemonSize Size => (PokemonSize)_Size; - - [ - JsonProperty("size"), - Alias("size"), - Default((uint)PokemonSize.All), - ] - public uint _Size { get; set; } - - [ - JsonProperty("city"), - Alias("city"), - ] - public List Areas { get; set; } - - [ - JsonProperty("location"), - Alias("location"), - ] - public string Location { get; set; } - - [ - JsonIgnore, - Ignore - ] - public bool HasStats => IVList?.Any() ?? false; - - #endregion - - #region Constructor - - public PokemonSubscription() - { - MinimumCP = 0; - MinimumIV = 0; - MinimumLevel = 0; - MaximumLevel = 35; - Gender = "*"; - _Size = (uint)PokemonSize.All; - FormsString = null; - Areas = new List(); - IVList = new List(); - } - - #endregion - } -} \ No newline at end of file diff --git a/src/Data/Subscriptions/Models/PvPLeague.cs b/src/Data/Subscriptions/Models/PvPLeague.cs deleted file mode 100644 index ff02667c..00000000 --- a/src/Data/Subscriptions/Models/PvPLeague.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace WhMgr.Data.Subscriptions.Models -{ - public enum PvPLeague - { - Other = 0, - Great = 1500, - Ultra = 2500, - Master = 99999 - } -} \ No newline at end of file diff --git a/src/Data/Subscriptions/Models/PvPSubscription.cs b/src/Data/Subscriptions/Models/PvPSubscription.cs deleted file mode 100644 index 6389975e..00000000 --- a/src/Data/Subscriptions/Models/PvPSubscription.cs +++ /dev/null @@ -1,105 +0,0 @@ -namespace WhMgr.Data.Subscriptions.Models -{ - using System; - using System.Collections.Generic; - using System.Linq; - - using Newtonsoft.Json; - using ServiceStack.DataAnnotations; - - [ - JsonObject("pvp"), - Alias("pvp"), - ] - public class PvPSubscription : SubscriptionItem - { - [ - Alias("subscription_id"), - ForeignKey(typeof(SubscriptionObject)), - ] - public int SubscriptionId { get; set; } - - [ - JsonIgnore, - Ignore, - ] - public List PokemonId - { - get - { - try - { - return PokemonIdString?.Split(',')? - .Select(x => uint.Parse(x)) - .ToList(); - } - catch (Exception ex) - { - Console.WriteLine($"[Error] Failed to parse pokemon id string: {ex}"); - } - return new List(); - } - } - - [ - JsonProperty("pokemon_id"), - Alias("pokemon_id"), - Required, - ] - public string PokemonIdString { get; set; } - - [ - JsonIgnore, - Ignore, - ] - public List Forms => FormsString?.Split(',').ToList(); - - [ - JsonProperty("form"), - Alias("form"), - Default(null), - ] - public string FormsString { get; set; } - - [ - JsonProperty("league"), - Alias("league"), - Required, - ] - public PvPLeague League { get; set; } - - [ - JsonProperty("min_rank"), - Alias("min_rank"), - Default(25), - ] - public int MinimumRank { get; set; } - - [ - JsonProperty("min_percent"), - Alias("min_percent"), - Default(90.0), - ] - public double MinimumPercent { get; set; } - - [ - JsonProperty("city"), - Alias("city"), - ] - public List Areas { get; set; } - - [ - JsonProperty("location"), - Alias("location"), - ] - public string Location { get; set; } - - public PvPSubscription() - { - League = PvPLeague.Great; - MinimumRank = 25; - MinimumPercent = 90; - Areas = new List(); - } - } -} \ No newline at end of file diff --git a/src/Data/Subscriptions/Models/QuestSubscription.cs b/src/Data/Subscriptions/Models/QuestSubscription.cs deleted file mode 100644 index 1539db0c..00000000 --- a/src/Data/Subscriptions/Models/QuestSubscription.cs +++ /dev/null @@ -1,51 +0,0 @@ -namespace WhMgr.Data.Subscriptions.Models -{ - using System; - using System.Collections.Generic; - - using Newtonsoft.Json; - using ServiceStack.DataAnnotations; - - [ - JsonObject("quests"), - Alias("quests"), - ] - public class QuestSubscription : SubscriptionItem - { - [ - Alias("subscription_id"), - ForeignKey(typeof(SubscriptionObject)), - ] - public int SubscriptionId { get; set; } - - [ - JsonProperty("pokestop_name"), - Alias("pokestop_name"), - ] - public string PokestopName { get; set; } - - [ - JsonProperty("reward"), - Alias("reward"), - Required, - ] - public string RewardKeyword { get; set; } - - [ - JsonProperty("city"), - Alias("city"), - ] - public List Areas { get; set; } - - [ - JsonProperty("location"), - Alias("location"), - ] - public string Location { get; set; } - - public QuestSubscription() - { - Areas = new List(); - } - } -} \ No newline at end of file diff --git a/src/Data/Subscriptions/Models/RaidSubscription.cs b/src/Data/Subscriptions/Models/RaidSubscription.cs deleted file mode 100644 index 91adcf4a..00000000 --- a/src/Data/Subscriptions/Models/RaidSubscription.cs +++ /dev/null @@ -1,51 +0,0 @@ -namespace WhMgr.Data.Subscriptions.Models -{ - using System; - using System.Collections.Generic; - - using Newtonsoft.Json; - using ServiceStack.DataAnnotations; - - [ - JsonObject("raids"), - Alias("raids"), - ] - public class RaidSubscription : SubscriptionItem - { - [ - Alias("subscription_id"), - ForeignKey(typeof(SubscriptionObject)), - ] - public int SubscriptionId { get; set; } - - [ - JsonProperty("pokemon_id"), - Alias("pokemon_id"), - Required, - ] - public uint PokemonId { get; set; } - - [ - JsonProperty("form"), - Alias("form"), - ] - public string Form { get; set; } - - [ - JsonProperty("city"), - Alias("city"), - ] - public List Areas { get; set; } - - [ - JsonProperty("location"), - Alias("location"), - ] - public string Location { get; set; } - - public RaidSubscription() - { - Areas = new List(); - } - } -} \ No newline at end of file diff --git a/src/Data/Subscriptions/Models/SubscriptionObject.cs b/src/Data/Subscriptions/Models/SubscriptionObject.cs deleted file mode 100644 index 5c0c484f..00000000 --- a/src/Data/Subscriptions/Models/SubscriptionObject.cs +++ /dev/null @@ -1,200 +0,0 @@ -namespace WhMgr.Data.Subscriptions.Models -{ - using System; - using System.Collections.Generic; - - using Newtonsoft.Json; - using ServiceStack.DataAnnotations; - - [Flags] - public enum NotificationStatusType : byte - { - None = 0x0, - Pokemon = 0x1, - PvP = 0x2, - Raids = 0x4, - Quests = 0x8, - Invasions = 0x10, - Lures = 0x20, - Gyms = 0x40, - All = Pokemon | PvP | Raids | Quests | Invasions | Lures | Gyms, - } - - /// - /// User subscription class - /// - [ - JsonObject("subscriptions"), - Alias("subscriptions") - ] - public class SubscriptionObject : SubscriptionItem - { - /// - /// Gets or sets a value determining whether the associated users - /// subscriptions are enabled or not - /// - [ - JsonProperty("status"), - Alias("status"), - Default((int)NotificationStatusType.All), - ] - public NotificationStatusType Status { get; set; } - - public bool IsEnabled(NotificationStatusType status) - { - return (Status & status) == status; - } - - public void EnableNotificationType(NotificationStatusType status) - { - Status |= status; - } - - public void DisableNotificationType(NotificationStatusType status) - { - Status &= (~status); - } - - /// - /// Gets or sets the Pokemon subscriptions - /// - [ - JsonProperty("pokemon"), - Alias("pokemon"), - Reference, - ] - public List Pokemon { get; set; } - - /// - /// Gets or sets the PvP Pokemon subscriptions - /// - [ - JsonProperty("pvp"), - Alias("pvp"), - Reference, - ] - public List PvP { get; set; } - - /// - /// Gets or sets the Raid subscriptions - /// - [ - JsonProperty("raids"), - Alias("raids"), - Reference, - ] - public List Raids { get; set; } - - /// - /// Gets or sets the Gym subscriptions to use with Raid subscriptions - /// - [ - JsonProperty("gyms"), - Alias("gyms"), - Reference, - ] - public List Gyms { get; set; } - - /// - /// Gets or sets the Quest subscriptions - /// - [ - JsonProperty("quests"), - Alias("quests"), - Reference, - ] - public List Quests { get; set; } - - /// - /// Gets or sets the Team Rocket Invasion subscriptions - /// - [ - JsonProperty("invasions"), - Alias("invasions"), - Reference, - ] - public List Invasions { get; set; } - - /// - /// Gets or sets the distance in meters a subscription should be within - /// to trigger - /// - [ - JsonProperty("lures"), - Alias("lures"), - Reference, - ] - public List Lures { get; set; } - - [ - JsonProperty("locations"), - Alias("locations"), - Reference, - ] - public List Locations { get; set; } - - [ - JsonProperty("location"), - Alias("location"), - Default(null), - ] - public string Location { get; set; } - - /// - /// Gets or sets the icon style to use for the subscription notification - /// - [ - JsonProperty("icon_style"), - Alias("icon_style"), - Default("Default"), - ] - public string IconStyle { get; set; } - - /// - /// Gets or sets the phone number to send ultra rare Pokemon notifications to - /// - [ - JsonProperty("phone_number"), - Alias("phone_number"), - ] - public string PhoneNumber { get; set; } - - /// - /// Gets the class associated with the subscription - /// - [ - JsonIgnore, - Ignore, - ] - public NotificationLimiter Limiter { get; } - - /// - /// Gets or sets a value determining whether the rate limit notification - /// has been sent to the user already - /// - [ - JsonIgnore, - Ignore, - ] - public bool RateLimitNotificationSent { get; set; } - - /// - /// Instantiates a new subscription object - /// - public SubscriptionObject() - { - Status = NotificationStatusType.All; - Pokemon = new List(); - PvP = new List(); - Raids = new List(); - Gyms = new List(); - Quests = new List(); - Invasions = new List(); - Lures = new List(); - Locations = new List(); - Limiter = new NotificationLimiter(); - IconStyle = "Default"; - PhoneNumber = string.Empty; - } - } -} \ No newline at end of file diff --git a/src/Data/Subscriptions/SubscriptionManager.cs b/src/Data/Subscriptions/SubscriptionManager.cs deleted file mode 100644 index 0baa8b72..00000000 --- a/src/Data/Subscriptions/SubscriptionManager.cs +++ /dev/null @@ -1,325 +0,0 @@ -namespace WhMgr.Data.Subscriptions -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Timers; - - using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; - using ServiceStack.OrmLite; - - using WhMgr.Configuration; - using WhMgr.Data.Subscriptions.Models; - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Net.Models; - - /// - /// User subscription manager class - /// - public class SubscriptionManager - { - #region Variables - - private static readonly IEventLogger _logger = EventLogger.GetLogger("MANAGER", Program.LogLevel); - - private readonly WhConfigHolder _whConfig; - private List _subscriptions; - private readonly OrmLiteConnectionFactory _connFactory; - private readonly Timer _reloadTimer; - - #endregion - - #region Properties - - /// - /// Gets all current user subscriptions - /// - public IReadOnlyList Subscriptions => _subscriptions; - - #endregion - - #region Constructor - - public SubscriptionManager(WhConfigHolder whConfig) - { - _logger.Trace($"SubscriptionManager::SubscriptionManager"); - - _whConfig = whConfig; - - if (_whConfig.Instance?.Database?.Main == null) - { - var err = "Main database is not configured in config.json file."; - _logger.Error(err); - throw new NullReferenceException(err); - } - - if (_whConfig.Instance?.Database?.Scanner == null) - { - var err = "Scanner database is not configured in config.json file."; - _logger.Error(err); - throw new NullReferenceException(err); - } - - if (_whConfig.Instance?.Database?.Nests == null) - { - _logger.Warn("Nest database is not configured in config.json file, nest alarms and commands will not work."); - } - - _connFactory = new OrmLiteConnectionFactory(_whConfig.Instance.Database.Main.ToString(), MySqlDialect.Provider); - - // Reload subscriptions every minute x 60 seconds to account for UI changes - _reloadTimer = new Timer(_whConfig.Instance.ReloadSubscriptionChangesMinutes * 60 * 1000); - _reloadTimer.Elapsed += (sender, e) => ReloadSubscriptions(); - _reloadTimer.Start(); - - ReloadSubscriptions(); - } - - #endregion - - #region User - - /// - /// Get user subscription from guild id and user id - /// - /// Discord guild id to lookup - /// Discord user id to lookup - /// Returns user subscription object - public SubscriptionObject GetUserSubscriptions(ulong guildId, ulong userId) - { - if (!IsDbConnectionOpen()) - { - throw new Exception("Not connected to database."); - } - - try - { - var conn = GetConnection(); - var where = conn? - .From() - .Where(x => x.GuildId == guildId && x.UserId == userId); - var query = conn?.LoadSelect(where); - var sub = query?.FirstOrDefault(); - return sub ?? new SubscriptionObject { UserId = userId, GuildId = guildId }; - } - catch (MySql.Data.MySqlClient.MySqlException ex) - { - _logger.Error(ex); - return GetUserSubscriptions(guildId, userId); - } - } - - /// - /// Get user subscriptions from subscribed Pokemon id - /// - /// Pokemon ID to lookup - /// Returns list of user subscription objects - public List GetUserSubscriptionsByPokemonId(uint pokeId) - { - return _subscriptions? - .Where(x => x.IsEnabled(NotificationStatusType.Pokemon) && - x.Pokemon != null && - x.Pokemon.Exists(y => y.PokemonId.Contains(pokeId)) - ) - .ToList(); - } - - /// - /// Get user subscriptions from subscribed PvP Pokemon id - /// - /// Pokemon ID to lookup - /// Returns list of user subscription objects - public List GetUserSubscriptionsByPvPPokemonId(uint pokeId) - { - return _subscriptions? - .Where(x => x.IsEnabled(NotificationStatusType.PvP) && - x.PvP != null && - x.PvP.Exists(y => y.PokemonId.Contains(pokeId)) - ) - .ToList(); - } - - /// - /// Get user subscriptions from subscribed Raid Pokemon id - /// - /// Pokemon ID to lookup - /// Returns list of user subscription objects - public List GetUserSubscriptionsByRaidBossId(uint pokeId) - { - return _subscriptions? - .Where(x => x.IsEnabled(NotificationStatusType.Raids) && - x.Raids != null && - x.Raids.Exists(y => y.PokemonId == pokeId) - ) - .ToList(); - } - - public List GetUserSubscriptionsByGymName(string name) - { - return _subscriptions? - .Where(x => x.IsEnabled(NotificationStatusType.Gyms) && - x.Gyms != null && - x.Gyms.Exists(y => string.Compare(y.Name, name, true) == 0 || y.Name.ToLower().Contains(name.ToLower())) - ) - .ToList(); - } - - /// - /// Get user subscriptions from subscribed Quest reward keyword - /// - /// Ques reward keyword - /// Returns list of user subscription objects - public List GetUserSubscriptionsByQuest(string pokestopName, string reward) - { - return _subscriptions? - .Where(x => x.IsEnabled(NotificationStatusType.Quests) && - x.Quests != null && - x.Quests.Exists(y => - reward.Contains(y.RewardKeyword) || - (y.PokestopName != null && (pokestopName.Contains(y.PokestopName) || string.Equals(pokestopName, y.PokestopName, StringComparison.OrdinalIgnoreCase))) - ) - ) - .ToList(); - } - - /// - /// Gets user subscriptions from subscribed Invasion encounter rewards - /// - /// Invasion encounter rewards - /// Returns list of user subscription objects - public List GetUserSubscriptionsByInvasion(string pokestopName, InvasionCharacter gruntType, List encounterRewards) - { - return _subscriptions? - .Where(x => x.IsEnabled(NotificationStatusType.Invasions) && - x.Invasions != null && - x.Invasions.Exists(y => - (y.RewardPokemonId?.Intersects(encounterRewards) ?? false) || - gruntType == y.InvasionType || - (!string.IsNullOrEmpty(y.PokestopName) && !string.IsNullOrEmpty(pokestopName) && pokestopName.Contains(y.PokestopName)) || string.Equals(pokestopName, y.PokestopName, StringComparison.OrdinalIgnoreCase) - ) - ) - .ToList(); - } - - - - /// - /// Gets user subscriptions from subscribed Pokestop lures - /// - /// Pokestop lure type - /// Returns list of user subscription objects - public List GetUserSubscriptionsByLureType(PokestopLureType lureType) - { - return _subscriptions? - .Where(x => x.IsEnabled(NotificationStatusType.Lures) && - x.Lures != null && - x.Lures.Exists(y => lureType == y.LureType)) - .ToList(); - } - - /// - /// Get all enabled user subscriptions - /// - /// Returns all enabled user subscription objects - public List GetUserSubscriptions() - { - try - { - if (!IsDbConnectionOpen()) - { - throw new Exception("Not connected to database."); - } - - var conn = GetConnection(); - var where = conn? - .From()? - .Where(x => x.Status != NotificationStatusType.None); - var results = conn? - .LoadSelect(where)? - .ToList(); - return results; - } - catch (OutOfMemoryException mex) - { - _logger.Debug($"-------------------OUT OF MEMORY EXCEPTION!"); - _logger.Error(mex); - Environment.FailFast($"Out of memory: {mex}"); - } - catch (Exception ex) - { - _logger.Error(ex); - } - - return null; - } - - /// - /// Reload all user subscriptions - /// - public void ReloadSubscriptions() - { - // TODO: Only reload based on last_changed timestamp in metadata table - - var subs = GetUserSubscriptions(); - if (subs == null) - return; - - _subscriptions = subs; - } - - #endregion - - #region Remove - - /// - /// Remove all user subscriptions based on guild id and user id - /// - /// Discord guild id to lookup - /// Discord user id to lookup - /// Returns true if all subscriptions were removed, otherwise false. - public static bool RemoveAllUserSubscriptions(ulong guildId, ulong userId) - { - _logger.Trace($"SubscriptionManager::RemoveAllUserSubscription [GuildId={guildId}, UserId={userId}]"); - - try - { - using (var conn = DataAccessLayer.CreateFactory().Open()) - { - conn.Delete(x => x.GuildId == guildId && x.UserId == userId); - conn.Delete(x => x.GuildId == guildId && x.UserId == userId); - conn.Delete(x => x.GuildId == guildId && x.UserId == userId); - conn.Delete(x => x.GuildId == guildId && x.UserId == userId); - conn.Delete(x => x.GuildId == guildId && x.UserId == userId); - conn.Delete(x => x.GuildId == guildId && x.UserId == userId); - conn.Delete(x => x.GuildId == guildId && x.UserId == userId); - conn.Delete(x => x.GuildId == guildId && x.UserId == userId); - } - - return true; - } - catch (Exception ex) - { - _logger.Error(ex); - } - - return false; - } - - #endregion - - #region Private Methods - - private System.Data.IDbConnection GetConnection() - { - return _connFactory.Open(); - } - - private bool IsDbConnectionOpen() - { - return _connFactory != null; - } - - #endregion - } -} diff --git a/src/Data/Subscriptions/SubscriptionProcessor.cs b/src/Data/Subscriptions/SubscriptionProcessor.cs deleted file mode 100644 index dae83d50..00000000 --- a/src/Data/Subscriptions/SubscriptionProcessor.cs +++ /dev/null @@ -1,1051 +0,0 @@ -using WhMgr.Geofence; - -namespace WhMgr.Data.Subscriptions -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Threading; - using System.Threading.Tasks; - - using DSharpPlus; - using DSharpPlus.Entities; - using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; - using ServiceStack.OrmLite; - - using WhMgr.Alarms.Filters; - using WhMgr.Configuration; - using WhMgr.Data.Subscriptions.Models; - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Localization; - using WhMgr.Net.Models; - using WhMgr.Net.Webhooks; - using Utils = WhMgr.Utilities.Utils; - - /// - /// Discord user subscription processing class. - /// - public class SubscriptionProcessor - { - #region Variables - - private static readonly IEventLogger _logger = EventLogger.GetLogger("SUBSCRIPTION", Program.LogLevel); - - // Contains all Discord clients by Guild ID - private readonly Dictionary _servers; - // Holds the WhConfg instance - private readonly WhConfigHolder _whConfig; - // WebhookController class - private readonly WebhookController _whm; - // Subscription notification processing queue - private readonly NotificationQueue _queue; - - #endregion - - #region Properties - - /// - /// Get subscription manager class - /// - public SubscriptionManager Manager { get; } - - #endregion - - #region Constructor - - /// - /// Instantiate a new class. - /// - /// Discord servers dictionary - /// Configuration file - /// Webhook controller class - public SubscriptionProcessor(Dictionary servers, WhConfigHolder config, WebhookController whm) - { - _logger.Trace($"SubscriptionProcessor::SubscriptionProcessor"); - - _servers = servers; - _whConfig = config; - _whm = whm; - _queue = new NotificationQueue(); - - Manager = new SubscriptionManager(_whConfig); - - ProcessQueue(); - } - - #endregion - - #region Public Methods - - public async Task ProcessPokemonSubscription(PokemonData pkmn) - { - if (!MasterFile.Instance.Pokedex.ContainsKey(pkmn.Id)) - return; - - // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below - var locationCache = new Dictionary(); - GeofenceItem GetGeofence(ulong guildId) - { - if (!locationCache.TryGetValue(guildId, out var geofence)) - { - geofence = _whm.GetGeofence(guildId, pkmn.Latitude, pkmn.Longitude); - locationCache.Add(guildId, geofence); - } - - return geofence; - } - - var subscriptions = Manager.GetUserSubscriptionsByPokemonId(pkmn.Id); - if (subscriptions == null) - { - _logger.Warn($"Failed to get subscriptions from database table."); - return; - } - - SubscriptionObject user; - DiscordMember member = null; - var pokemon = MasterFile.GetPokemon(pkmn.Id, pkmn.FormId); - var matchesIV = false; - var matchesLvl = false; - var matchesGender = false; - var matchesIVList = false; - for (var i = 0; i < subscriptions.Count; i++) - { - //var start = DateTime.Now; - try - { - user = subscriptions[i]; - - if (!_whConfig.Instance.Servers.ContainsKey(user.GuildId)) - continue; - - if (!_whConfig.Instance.Servers[user.GuildId].Subscriptions.Enabled) - continue; - - if (!_servers.ContainsKey(user.GuildId)) - continue; - - var client = _servers[user.GuildId]; - - try - { - member = await client.GetMemberById(user.GuildId, user.UserId); - } - catch (Exception ex) - { - _logger.Debug($"FAILED TO GET MEMBER BY ID {user.UserId}"); - _logger.Error(ex); - continue; - } - - if (member?.Roles == null) - continue; - - if (!member.HasSupporterRole(_whConfig.Instance.Servers[user.GuildId].DonorRoleIds)) - { - _logger.Debug($"User {member?.Username} ({user.UserId}) is not a supporter, skipping pokemon {pokemon.Name}..."); - // Automatically disable users subscriptions if not supporter to prevent issues - //user.Enabled = false; - //user.Save(false); - continue; - } - - var form = Translator.Instance.GetFormName(pkmn.FormId); - var pokemonSubscriptions = user.Pokemon.Where(x => - x.PokemonId.Contains(pkmn.Id) && (x.Forms?.Contains(form) ?? true) - ); - foreach (var pkmnSub in pokemonSubscriptions) - { - matchesIV = Filters.MatchesIV(pkmn.IV, pkmnSub.MinimumIV); - //var matchesCP = _whm.Filters.MatchesCpFilter(pkmn.CP, subscribedPokemon.MinimumCP); - matchesLvl = Filters.MatchesLvl(pkmn.Level, (uint)pkmnSub.MinimumLevel, (uint)pkmnSub.MaximumLevel); - matchesGender = Filters.MatchesGender(pkmn.Gender, pkmnSub.Gender); - matchesIVList = pkmnSub.IVList?.Select(x => x.Replace("\r", null)).Contains($"{pkmn.Attack}/{pkmn.Defense}/{pkmn.Stamina}") ?? false; - - if (!( - (!pkmnSub.HasStats && matchesIV && matchesLvl && matchesGender) || - (pkmnSub.HasStats && matchesIVList) - )) - continue; - - if (!(float.TryParse(pkmn.Height, out var height) && float.TryParse(pkmn.Weight, out var weight) && Filters.MatchesSize(pkmn.Id.GetSize(height, weight), pkmnSub.Size))) - { - // Pokemon doesn't match size - continue; - } - - var geofence = GetGeofence(user.GuildId); - if (geofence == null) - { - //_logger.Warn($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); - continue; - } - - var globalLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, user.Location, true) == 0); - var subscriptionLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, pkmnSub.Location, true) == 0); - var globalDistanceMatches = globalLocation?.DistanceM > 0 && globalLocation?.DistanceM > new Coordinates(globalLocation?.Latitude ?? 0, globalLocation?.Longitude ?? 0).DistanceTo(new Coordinates(pkmn.Latitude, pkmn.Longitude)); - var subscriptionDistanceMatches = subscriptionLocation?.DistanceM > 0 && subscriptionLocation?.DistanceM > new Coordinates(subscriptionLocation?.Latitude ?? 0, subscriptionLocation?.Longitude ?? 0).DistanceTo(new Coordinates(pkmn.Latitude, pkmn.Longitude)); - var geofenceMatches = pkmnSub.Areas.Select(x => x.ToLower()).Contains(geofence.Name.ToLower()); - - // If set distance does not match and no geofences match, then skip Pokemon... - if (!globalDistanceMatches && !subscriptionDistanceMatches && !geofenceMatches) - continue; - - var embed = pkmn.GeneratePokemonMessage(user.GuildId, client, _whConfig.Instance, null, geofence.Name); - //var end = DateTime.Now.Subtract(start); - //_logger.Debug($"Took {end} to process Pokemon subscription for user {user.UserId}"); - embed.Embeds.ForEach(x => _queue.Enqueue(new NotificationItem(user, member, x, pokemon.Name, geofence.Name, pkmn))); - - Statistics.Instance.SubscriptionPokemonSent++; - Thread.Sleep(5); - } - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - subscriptions.Clear(); - subscriptions = null; - member = null; - user = null; - pokemon = null; - - await Task.CompletedTask; - } - - public async Task ProcessPvPSubscription(PokemonData pkmn) - { - if (!MasterFile.Instance.Pokedex.ContainsKey(pkmn.Id)) - return; - - // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below - Dictionary locationCache = new Dictionary(); - - GeofenceItem GetGeofence(ulong guildId) - { - if (!locationCache.TryGetValue(guildId, out var geofence)) - { - geofence = _whm.GetGeofence(guildId, pkmn.Latitude, pkmn.Longitude); - locationCache.Add(guildId, geofence); - } - - return geofence; - } - - var subscriptions = Manager.GetUserSubscriptionsByPvPPokemonId(pkmn.Id); - if (subscriptions == null) - { - _logger.Warn($"Failed to get subscriptions from database table."); - return; - } - - SubscriptionObject user; - DiscordMember member = null; - var pokemon = MasterFile.GetPokemon(pkmn.Id, pkmn.FormId); - var matchesGreat = false; - var matchesUltra = false; - for (var i = 0; i < subscriptions.Count; i++) - { - //var start = DateTime.Now; - try - { - user = subscriptions[i]; - - if (!_whConfig.Instance.Servers.ContainsKey(user.GuildId)) - continue; - - if (!_whConfig.Instance.Servers[user.GuildId].Subscriptions.Enabled) - continue; - - if (!_servers.ContainsKey(user.GuildId)) - continue; - - var client = _servers[user.GuildId]; - - try - { - member = await client.GetMemberById(user.GuildId, user.UserId); - } - catch (Exception ex) - { - _logger.Debug($"FAILED TO GET MEMBER BY ID {user.UserId}"); - _logger.Error(ex); - continue; - } - - if (member?.Roles == null) - continue; - - if (!member.HasSupporterRole(_whConfig.Instance.Servers[user.GuildId].DonorRoleIds)) - { - _logger.Debug($"User {member?.Username} ({user.UserId}) is not a supporter, skipping pvp pokemon {pokemon.Name}..."); - // Automatically disable users subscriptions if not supporter to prevent issues - //user.Enabled = false; - //user.Save(false); - continue; - } - - var form = Translator.Instance.GetFormName(pkmn.FormId); - var pokemonSubscriptions = user.PvP.Where(x => - x.PokemonId.Contains(pkmn.Id) && (x.Forms?.Contains(form) ?? true) - ); - foreach (var pkmnSub in pokemonSubscriptions) - { - matchesGreat = pkmn.GreatLeague != null && (pkmn.GreatLeague?.Exists(x => pkmnSub.League == PvPLeague.Great && - (x.CP ?? 0) >= Strings.MinimumGreatLeagueCP && (x.CP ?? 0) <= Strings.MaximumGreatLeagueCP && - (x.Rank ?? 4096) <= pkmnSub.MinimumRank && - (x.Percentage ?? 0) * 100 >= pkmnSub.MinimumPercent) ?? false); - matchesUltra = pkmn.UltraLeague != null && (pkmn.UltraLeague?.Exists(x => pkmnSub.League == PvPLeague.Ultra && - (x.CP ?? 0) >= Strings.MinimumUltraLeagueCP && (x.CP ?? 0) <= Strings.MaximumUltraLeagueCP && - (x.Rank ?? 4096) <= pkmnSub.MinimumRank && - (x.Percentage ?? 0) * 100 >= pkmnSub.MinimumPercent) ?? false); - - // Check if Pokemon IV stats match any relevant great or ultra league ranks, if not skip. - if (!matchesGreat && !matchesUltra) - continue; - - var geofence = GetGeofence(user.GuildId); - if (geofence == null) - { - //_logger.Warn($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); - continue; - } - - var globalLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, user.Location, true) == 0); - var subscriptionLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, pkmnSub.Location, true) == 0); - var globalDistanceMatches = globalLocation?.DistanceM > 0 && globalLocation?.DistanceM > new Coordinates(globalLocation?.Latitude ?? 0, globalLocation?.Longitude ?? 0).DistanceTo(new Coordinates(pkmn.Latitude, pkmn.Longitude)); - var subscriptionDistanceMatches = subscriptionLocation?.DistanceM > 0 && subscriptionLocation?.DistanceM > new Coordinates(subscriptionLocation?.Latitude ?? 0, subscriptionLocation?.Longitude ?? 0).DistanceTo(new Coordinates(pkmn.Latitude, pkmn.Longitude)); - var geofenceMatches = pkmnSub.Areas.Select(x => x.ToLower()).Contains(geofence.Name.ToLower()); - - // If set distance does not match and no geofences match, then skip Pokemon... - if (!globalDistanceMatches && !subscriptionDistanceMatches && !geofenceMatches) - continue; - - var embed = pkmn.GeneratePokemonMessage(user.GuildId, client, _whConfig.Instance, null, geofence.Name); - //var end = DateTime.Now.Subtract(start); - //_logger.Debug($"Took {end} to process PvP subscription for user {user.UserId}"); - embed.Embeds.ForEach(x => _queue.Enqueue(new NotificationItem(user, member, x, pokemon.Name, geofence.Name))); - - Statistics.Instance.SubscriptionPokemonSent++; - Thread.Sleep(5); - } - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - subscriptions.Clear(); - subscriptions = null; - member = null; - user = null; - pokemon = null; - - await Task.CompletedTask; - } - - public async Task ProcessRaidSubscription(RaidData raid) - { - if (!MasterFile.Instance.Pokedex.ContainsKey(raid.PokemonId)) - return; - - // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below - Dictionary locationCache = new Dictionary(); - - GeofenceItem GetGeofence(ulong guildId) - { - if (!locationCache.TryGetValue(guildId, out var geofence)) - { - geofence = _whm.GetGeofence(guildId, raid.Latitude, raid.Longitude); - locationCache.Add(guildId, geofence); - } - - return geofence; - } - - var subscriptions = Manager.GetUserSubscriptionsByRaidBossId(raid.PokemonId); - if (subscriptions == null) - { - _logger.Warn($"Failed to get subscriptions from database table."); - return; - } - - SubscriptionObject user; - var pokemon = MasterFile.GetPokemon(raid.PokemonId, raid.Form); - for (int i = 0; i < subscriptions.Count; i++) - { - //var start = DateTime.Now; - try - { - user = subscriptions[i]; - - if (!_whConfig.Instance.Servers.ContainsKey(user.GuildId)) - continue; - - if (!_whConfig.Instance.Servers[user.GuildId].Subscriptions.Enabled) - continue; - - if (!_servers.ContainsKey(user.GuildId)) - continue; - - var client = _servers[user.GuildId]; - - var member = await client.GetMemberById(user.GuildId, user.UserId); - if (member == null) - { - _logger.Warn($"Failed to find member with id {user.UserId}."); - continue; - } - - if (!member.HasSupporterRole(_whConfig.Instance.Servers[user.GuildId].DonorRoleIds)) - { - _logger.Info($"User {user.UserId} is not a supporter, skipping raid boss {pokemon.Name}..."); - // Automatically disable users subscriptions if not supporter to prevent issues - //user.Enabled = false; - //user.Save(false); - continue; - } - - var form = Translator.Instance.GetFormName(raid.Form); - var subPkmn = user.Raids.FirstOrDefault(x => - x.PokemonId == raid.PokemonId && - (string.IsNullOrEmpty(x.Form) || (!string.IsNullOrEmpty(x.Form) && string.Compare(x.Form, form, true) == 0)) - ); - // Not subscribed to Pokemon - if (subPkmn == null) - { - //_logger.Debug($"Skipping notification for user {member.DisplayName} ({member.Id}) for raid boss {pokemon.Name}, raid is in city '{loc.Name}'."); - continue; - } - - var geofence = GetGeofence(user.GuildId); - if (geofence == null) - { - //_logger.Warn($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); - continue; - } - - var globalLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, user.Location, true) == 0); - var subscriptionLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, subPkmn.Location, true) == 0); - var globalDistanceMatches = globalLocation?.DistanceM > 0 && globalLocation?.DistanceM > new Coordinates(globalLocation?.Latitude ?? 0, globalLocation?.Longitude ?? 0).DistanceTo(new Coordinates(raid.Latitude, raid.Longitude)); - var subscriptionDistanceMatches = subscriptionLocation?.DistanceM > 0 && subscriptionLocation?.DistanceM > new Coordinates(subscriptionLocation?.Latitude ?? 0, subscriptionLocation?.Longitude ?? 0).DistanceTo(new Coordinates(raid.Latitude, raid.Longitude)); - var geofenceMatches = subPkmn.Areas.Select(x => x.ToLower()).Contains(geofence.Name.ToLower()); - - // If set distance does not match and no geofences match, then skip Raid Pokemon... - if (!globalDistanceMatches && !subscriptionDistanceMatches && !geofenceMatches) - continue; - - var embed = raid.GenerateRaidMessage(user.GuildId, client, _whConfig.Instance, null, geofence.Name); - //var end = DateTime.Now; - //_logger.Debug($"Took {end} to process raid subscription for user {user.UserId}"); - embed.Embeds.ForEach(x => _queue.Enqueue(new NotificationItem(user, member, x, pokemon.Name, geofence.Name))); - - Statistics.Instance.SubscriptionRaidsSent++; - Thread.Sleep(5); - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - subscriptions.Clear(); - subscriptions = null; - user = null; - - await Task.CompletedTask; - } - - public async Task ProcessGymSubscription(RaidData raid) - { - //if (!MasterFile.Instance.Pokedex.ContainsKey(raid.PokemonId)) - // return; - - // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below - Dictionary locationCache = new Dictionary(); - - GeofenceItem GetGeofence(ulong guildId) - { - if (!locationCache.TryGetValue(guildId, out var geofence)) - { - geofence = _whm.GetGeofence(guildId, raid.Latitude, raid.Longitude); - locationCache.Add(guildId, geofence); - } - - return geofence; - } - - var subscriptions = Manager.GetUserSubscriptionsByGymName(raid.GymName); - if (subscriptions == null) - { - _logger.Warn($"Failed to get subscriptions from database table."); - return; - } - - SubscriptionObject user; - var pokemon = MasterFile.GetPokemon(raid.PokemonId, raid.Form); - for (int i = 0; i < subscriptions.Count; i++) - { - //var start = DateTime.Now; - try - { - user = subscriptions[i]; - - if (!_whConfig.Instance.Servers.ContainsKey(user.GuildId)) - continue; - - if (!_whConfig.Instance.Servers[user.GuildId].Subscriptions.Enabled) - continue; - - if (!_servers.ContainsKey(user.GuildId)) - continue; - - var client = _servers[user.GuildId]; - - var member = await client.GetMemberById(user.GuildId, user.UserId); - if (member == null) - { - _logger.Warn($"Failed to find member with id {user.UserId}."); - continue; - } - - if (!member.HasSupporterRole(_whConfig.Instance.Servers[user.GuildId].DonorRoleIds)) - { - _logger.Info($"User {user.UserId} is not a supporter, skipping raid boss {pokemon.Name} for gym {raid.GymName}..."); - // Automatically disable users subscriptions if not supporter to prevent issues - //user.Enabled = false; - //user.Save(false); - continue; - } - - var geofence = GetGeofence(user.GuildId); - if (geofence == null) - { - //_logger.Warn($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); - continue; - } - - var gymSub = user.Gyms.FirstOrDefault(x => string.Compare(x.Name, raid.GymName, true) == 0); - if (gymSub == null) - continue; - - var checkLevel = gymSub.MinimumLevel > 0 && gymSub.MaximumLevel > 0; - var containsPokemon = gymSub.PokemonIDs?.Contains((uint)raid.PokemonId) ?? false; - if (!checkLevel && !containsPokemon) - continue; - - /* - // TODO: Gym distance location - var globalLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, user.Location, true) == 0); - var pokemonLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, subPkmn.Location, true) == 0); - var globalDistanceMatches = globalLocation.DistanceM > 0 && globalLocation.DistanceM > new Coordinates(globalLocation.Latitude, globalLocation.Longitude).DistanceTo(new Coordinates(raid.Latitude, raid.Longitude)); - var invasionDistanceMatches = pokemonLocation.DistanceM > 0 && pokemonLocation.DistanceM > new Coordinates(pokemonLocation.Latitude, pokemonLocation.Longitude).DistanceTo(new Coordinates(raid.Latitude, raid.Longitude)); - var geofenceMatches = subPkmn.Areas.Select(x => x.ToLower()).Contains(geofence.Name.ToLower()); - - // If set distance does not match and no geofences match, then skip Pokemon... - if (!globalDistanceMatches && !invasionDistanceMatches && !geofenceMatches) - continue; - */ - - var embed = raid.GenerateRaidMessage(user.GuildId, client, _whConfig.Instance, null, geofence.Name); - //var end = DateTime.Now; - //_logger.Debug($"Took {end} to process gym raid subscription for user {user.UserId}"); - embed.Embeds.ForEach(x => _queue.Enqueue(new NotificationItem(user, member, x, pokemon.Name, geofence.Name))); - - Statistics.Instance.SubscriptionRaidsSent++; - Thread.Sleep(5); - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - subscriptions.Clear(); - subscriptions = null; - user = null; - - await Task.CompletedTask; - } - - public async Task ProcessQuestSubscription(QuestData quest) - { - var reward = quest.Rewards.FirstOrDefault().Info; - var rewardKeyword = quest.GetReward(); - var questName = quest.GetQuestMessage(); - - // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below - Dictionary locationCache = new Dictionary(); - - GeofenceItem GetGeofence(ulong guildId) - { - if (!locationCache.TryGetValue(guildId, out var geofence)) - { - geofence = _whm.GetGeofence(guildId, quest.Latitude, quest.Longitude); - locationCache.Add(guildId, geofence); - } - - return geofence; - } - - var subscriptions = Manager.GetUserSubscriptionsByQuest(quest.PokestopName, rewardKeyword); - if (subscriptions == null) - { - _logger.Warn($"Failed to get subscriptions from database table."); - return; - } - - bool isSupporter; - SubscriptionObject user; - for (int i = 0; i < subscriptions.Count; i++) - { - //var start = DateTime.Now; - try - { - user = subscriptions[i]; - - if (!_whConfig.Instance.Servers.ContainsKey(user.GuildId)) - continue; - - if (!_whConfig.Instance.Servers[user.GuildId].Subscriptions.Enabled) - continue; - - if (!_servers.ContainsKey(user.GuildId)) - continue; - - var client = _servers[user.GuildId]; - - var member = await client.GetMemberById(user.GuildId, user.UserId); - if (member == null) - { - _logger.Warn($"Failed to find member with id {user.UserId}."); - continue; - } - - isSupporter = member.HasSupporterRole(_whConfig.Instance.Servers[user.GuildId].DonorRoleIds); - if (!isSupporter) - { - _logger.Info($"User {user.UserId} is not a supporter, skipping quest {questName}..."); - // Automatically disable users subscriptions if not supporter to prevent issues - //user.Enabled = false; - //user.Save(false); - continue; - } - - var subQuest = user.Quests.FirstOrDefault(x => rewardKeyword.ToLower().Contains(x.RewardKeyword.ToLower())); - // Not subscribed to quest - if (subQuest == null) - { - //_logger.Debug($"Skipping notification for user {member.DisplayName} ({member.Id}) for quest {questName} because the quest is in city '{loc.Name}'."); - continue; - } - - var geofence = GetGeofence(user.GuildId); - if (geofence == null) - { - //_logger.Warn($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); - continue; - } - - var globalLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, user.Location, true) == 0); - var subscriptionLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, subQuest.Location, true) == 0); - var globalDistanceMatches = globalLocation?.DistanceM > 0 && globalLocation?.DistanceM > new Coordinates(globalLocation?.Latitude ?? 0, globalLocation?.Longitude ?? 0).DistanceTo(new Coordinates(quest.Latitude, quest.Longitude)); - var subscriptionDistanceMatches = subscriptionLocation?.DistanceM > 0 && subscriptionLocation?.DistanceM > new Coordinates(subscriptionLocation?.Latitude ?? 0, subscriptionLocation?.Longitude ?? 0).DistanceTo(new Coordinates(quest.Latitude, quest.Longitude)); - var geofenceMatches = subQuest.Areas.Select(x => x.ToLower()).Contains(geofence.Name.ToLower()); - - // If set distance does not match and no geofences match, then skip Pokemon... - if (!globalDistanceMatches && !subscriptionDistanceMatches && !geofenceMatches) - continue; - - var embed = quest.GenerateQuestMessage(user.GuildId, client, _whConfig.Instance, null, geofence.Name); - //var end = DateTime.Now.Subtract(start); - //_logger.Debug($"Took {end} to process quest subscription for user {user.UserId}"); - embed.Embeds.ForEach(x => _queue.Enqueue(new NotificationItem(user, member, x, questName, geofence.Name))); - - Statistics.Instance.SubscriptionQuestsSent++; - Thread.Sleep(5); - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - subscriptions.Clear(); - subscriptions = null; - user = null; - - await Task.CompletedTask; - } - - public async Task ProcessInvasionSubscription(PokestopData pokestop) - { - // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below - Dictionary locationCache = new Dictionary(); - - GeofenceItem GetGeofence(ulong guildId) - { - if (!locationCache.TryGetValue(guildId, out var geofence)) - { - geofence = _whm.GetGeofence(guildId, pokestop.Latitude, pokestop.Longitude); - locationCache.Add(guildId, geofence); - } - - return geofence; - } - - var invasion = MasterFile.Instance.GruntTypes.ContainsKey(pokestop.GruntType) ? MasterFile.Instance.GruntTypes[pokestop.GruntType] : null; - var encounters = invasion?.GetEncounterRewards(); - if (encounters == null) - return; - - var subscriptions = Manager.GetUserSubscriptionsByInvasion(pokestop?.Name, pokestop?.GruntType ?? InvasionCharacter.CharacterUnset, encounters); - if (subscriptions == null) - { - _logger.Warn($"Failed to get subscriptions from database table."); - return; - } - - if (!MasterFile.Instance.GruntTypes.ContainsKey(pokestop.GruntType)) - { - //_logger.Error($"Failed to parse grunt type {pokestop.GruntType}, not in `grunttype.json` list."); - return; - } - - SubscriptionObject user; - for (int i = 0; i < subscriptions.Count; i++) - { - //var start = DateTime.Now; - try - { - user = subscriptions[i]; - - if (!_whConfig.Instance.Servers.ContainsKey(user.GuildId)) - continue; - - if (!_whConfig.Instance.Servers[user.GuildId].Subscriptions.Enabled) - continue; - - if (!_servers.ContainsKey(user.GuildId)) - continue; - - var client = _servers[user.GuildId]; - - var member = await client.GetMemberById(user.GuildId, user.UserId); - if (member == null) - { - _logger.Warn($"Failed to find member with id {user.UserId}."); - continue; - } - - if (!member.HasSupporterRole(_whConfig.Instance.Servers[user.GuildId].DonorRoleIds)) - { - _logger.Info($"User {user.UserId} is not a supporter, skipping Team Rocket invasion {pokestop.Name}..."); - // Automatically disable users subscriptions if not supporter to prevent issues - //user.Enabled = false; - //user.Save(false); - continue; - } - - var subInvasion = user.Invasions.FirstOrDefault(x => x.RewardPokemonId.Intersects(encounters)); - // Not subscribed to invasion - if (subInvasion == null) - { - //_logger.Debug($"Skipping notification for user {member.DisplayName} ({member.Id}) for raid boss {pokemon.Name}, raid is in city '{loc.Name}'."); - continue; - } - - var geofence = GetGeofence(user.GuildId); - if (geofence == null) - { - //_logger.Warn($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); - continue; - } - - var globalLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, user.Location, true) == 0); - var subscriptionLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, subInvasion.Location, true) == 0); - var globalDistanceMatches = globalLocation?.DistanceM > 0 && globalLocation?.DistanceM > new Coordinates(globalLocation?.Latitude ?? 0, globalLocation?.Longitude ?? 0).DistanceTo(new Coordinates(pokestop.Latitude, pokestop.Longitude)); - var subscriptionDistanceMatches = subscriptionLocation?.DistanceM > 0 && subscriptionLocation?.DistanceM > new Coordinates(subscriptionLocation?.Latitude ?? 0, subscriptionLocation?.Longitude ?? 0).DistanceTo(new Coordinates(pokestop.Latitude, pokestop.Longitude)); - var geofenceMatches = subInvasion.Areas.Select(x => x.ToLower()).Contains(geofence.Name.ToLower()); - - // If set distance does not match and no geofences match, then skip Pokemon... - if (!globalDistanceMatches && !subscriptionDistanceMatches && !geofenceMatches) - continue; - - var embed = pokestop.GeneratePokestopMessage(user.GuildId, client, _whConfig.Instance, null, geofence?.Name, false, true); - //var end = DateTime.Now.Subtract(start); - //_logger.Debug($"Took {end} to process invasion subscription for user {user.UserId}"); - embed.Embeds.ForEach(x => _queue.Enqueue(new NotificationItem(user, member, x, pokestop.Name, geofence.Name))); - - Statistics.Instance.SubscriptionInvasionsSent++; - Thread.Sleep(5); - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - subscriptions.Clear(); - subscriptions = null; - user = null; - - await Task.CompletedTask; - } - - public async Task ProcessLureSubscription(PokestopData pokestop) - { - // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below - Dictionary locationCache = new Dictionary(); - - GeofenceItem GetGeofence(ulong guildId) - { - if (!locationCache.TryGetValue(guildId, out var geofence)) - { - geofence = _whm.GetGeofence(guildId, pokestop.Latitude, pokestop.Longitude); - locationCache.Add(guildId, geofence); - } - - return geofence; - } - - var subscriptions = Manager.GetUserSubscriptionsByLureType(pokestop.LureType); - if (subscriptions == null) - { - _logger.Warn($"Failed to get subscriptions from database table."); - return; - } - - SubscriptionObject user; - for (int i = 0; i < subscriptions.Count; i++) - { - //var start = DateTime.Now; - try - { - user = subscriptions[i]; - - if (!_whConfig.Instance.Servers.ContainsKey(user.GuildId)) - continue; - - if (!_whConfig.Instance.Servers[user.GuildId].Subscriptions.Enabled) - continue; - - if (!_servers.ContainsKey(user.GuildId)) - continue; - - var client = _servers[user.GuildId]; - - var member = await client.GetMemberById(user.GuildId, user.UserId); - if (member == null) - { - _logger.Warn($"Failed to find member with id {user.UserId}."); - continue; - } - - if (!member.HasSupporterRole(_whConfig.Instance.Servers[user.GuildId].DonorRoleIds)) - { - _logger.Info($"User {user.UserId} is not a supporter, skipping Pokestop lure {pokestop.Name}..."); - // Automatically disable users subscriptions if not supporter to prevent issues - //user.Enabled = false; - //user.Save(false); - continue; - } - - var subLure = user.Lures.FirstOrDefault(x => x.LureType == pokestop.LureType); - // Not subscribed to lure - if (subLure == null) - { - //_logger.Debug($"Skipping notification for user {member.DisplayName} ({member.Id}) for Pokestop lure {pokemon.Name}, lure is in city '{loc.Name}'."); - continue; - } - - var geofence = GetGeofence(user.GuildId); - if (geofence == null) - { - //_logger.Warn($"Failed to lookup city from coordinates {pokestop.Latitude},{pokestop.Longitude} {pokestop.PokestopId} {pokestop.Name}, skipping..."); - continue; - } - - var globalLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, user.Location, true) == 0); - var subscriptionLocation = user.Locations?.FirstOrDefault(x => string.Compare(x.Name, subLure.Location, true) == 0); - var globalDistanceMatches = globalLocation?.DistanceM > 0 && globalLocation?.DistanceM > new Coordinates(globalLocation?.Latitude ?? 0, globalLocation?.Longitude ?? 0).DistanceTo(new Coordinates(pokestop.Latitude, pokestop.Longitude)); - var subscriptionDistanceMatches = subscriptionLocation?.DistanceM > 0 && subscriptionLocation?.DistanceM > new Coordinates(subscriptionLocation?.Latitude ?? 0, subscriptionLocation?.Longitude ?? 0).DistanceTo(new Coordinates(pokestop.Latitude, pokestop.Longitude)); - var geofenceMatches = subLure.Areas.Select(x => x.ToLower()).Contains(geofence.Name.ToLower()); - - // If set distance does not match and no geofences match, then skip Pokemon... - if (!globalDistanceMatches && !subscriptionDistanceMatches && !geofenceMatches) - continue; - - var embed = pokestop.GeneratePokestopMessage(user.GuildId, client, _whConfig.Instance, null, geofence.Name, true, false); - //var end = DateTime.Now.Subtract(start); - //_logger.Debug($"Took {end} to process lure subscription for user {user.UserId}"); - embed.Embeds.ForEach(x => _queue.Enqueue(new NotificationItem(user, member, x, pokestop.Name, geofence.Name))); - - Statistics.Instance.SubscriptionLuresSent++; - Thread.Sleep(5); - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - subscriptions.Clear(); - subscriptions = null; - user = null; - - await Task.CompletedTask; - } - - #endregion - - #region Private Methods - - private void ProcessQueue() - { - _logger.Trace($"SubscriptionProcessor::ProcessQueue"); - - new Thread(async () => - { - while (true) - { - if (_queue.Count == 0) - { - Thread.Sleep(50); - continue; - } - - if (_queue.Count > Strings.MaxQueueCountWarning) - { - _logger.Warn($"Subscription queue is {_queue.Count:N0} items long."); - } - - var item = _queue.Dequeue(); - if (item == null || item?.Subscription == null || item?.Member == null || item?.Embed == null) - continue; - - // Check if user is receiving messages too fast. - var maxNotificationsPerMinute = _whConfig.Instance.MaxNotificationsPerMinute; - if (item.Subscription.Limiter.IsLimited(maxNotificationsPerMinute)) - { - _logger.Warn($"{item.Member.Username} notifications rate limited, waiting {(60 - item.Subscription.Limiter.TimeLeft.TotalSeconds)} seconds...", item.Subscription.Limiter.TimeLeft.TotalSeconds.ToString("N0")); - // Send ratelimited notification to user if not already sent to adjust subscription settings to more reasonable settings. - if (!item.Subscription.RateLimitNotificationSent) - { - if (!_servers.ContainsKey(item.Subscription.GuildId)) - continue; - - var server = _servers[item.Subscription.GuildId].Guilds[item.Subscription.GuildId]; - var emoji = DiscordEmoji.FromName(_servers.FirstOrDefault().Value, ":no_entry:"); - var guildIconUrl = _servers.ContainsKey(item.Subscription.GuildId) ? _servers[item.Subscription.GuildId].Guilds[item.Subscription.GuildId]?.IconUrl : string.Empty; - // TODO: Localize - var rateLimitMessage = $"{emoji} Your notification subscriptions have exceeded {maxNotificationsPerMinute:N0}) per minute and are now being rate limited." + - $"Please adjust your subscriptions to receive a maximum of {maxNotificationsPerMinute:N0} notifications within a {NotificationLimiter.ThresholdTimeout} second time span."; - var eb = new DiscordEmbedBuilder - { - Title = "Rate Limited", - Description = rateLimitMessage, - Color = DiscordColor.Red, - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = $"{server?.Name} | {DateTime.Now}", - IconUrl = server?.IconUrl - } - }; - - await _servers[item.Subscription.GuildId].SendDirectMessage(item.Member, string.Empty, eb.Build()); - item.Subscription.RateLimitNotificationSent = true; - item.Subscription.Status = NotificationStatusType.None; - if (!item.Subscription.Update()) - { - _logger.Error($"Failed to disable {item.Subscription.UserId}'s subscriptions"); - } - } - continue; - } - - // Ratelimit is up, allow for ratelimiting again - item.Subscription.RateLimitNotificationSent = false; - - if (!_servers.ContainsKey(item.Subscription.GuildId)) - { - _logger.Error($"User subscription for guild that's not configured. UserId={item.Subscription.UserId} GuildId={item.Subscription.GuildId}"); - continue; - } - - // Send text message notification to user if a phone number is set - if (_whConfig.Instance.Twilio.Enabled && !string.IsNullOrEmpty(item.Subscription.PhoneNumber)) - { - // Check if user is in the allowed text message list or server owner - if (HasRole(item.Member, _whConfig.Instance.Twilio.RoleIds) || - _whConfig.Instance.Twilio.UserIds.Contains(item.Member.Id) || - _whConfig.Instance.Servers[item.Subscription.GuildId].OwnerId == item.Member.Id) - { - // Send text message (max 160 characters) - if (item.Pokemon != null && IsUltraRare(_whConfig.Instance.Twilio, item.Pokemon)) - { - var result = Utils.SendSmsMessage(StripEmbed(item), _whConfig.Instance.Twilio, item.Subscription.PhoneNumber); - if (!result) - { - _logger.Error($"Failed to send text message to phone number '{item.Subscription.PhoneNumber}' for user {item.Subscription.UserId}"); - } - } - } - } - - // Send direct message notification to user - var client = _servers[item.Subscription.GuildId]; - await client.SendDirectMessage(item.Member, item.Embed); - _logger.Info($"[WEBHOOK] Notified user {item.Member.Username} of {item.Description}."); - Thread.Sleep(10); - } - }) - { IsBackground = true }.Start(); - } - - private bool HasRole(DiscordMember member, List roleIds) - { - var memberRoles = member.Roles.Select(x => x.Id); - return roleIds.Any(x => memberRoles.Contains(x)); - } - - private bool IsUltraRare(TwilioConfig twilo, PokemonData pkmn) - { - // If no Pokemon are set, do not send text messages - if (twilo.PokemonIds.Count == 0) - return false; - - // Check if Pokemon is in list of allowed IDs - if (!twilo.PokemonIds.Contains(pkmn.Id)) - return false; - - // Send text message if Unown, Azelf, etc - if (pkmn.Id.IsRarePokemon()) - return true; - - // Send text message if 100% Gible, Deino, and Axew - if (Filters.MatchesIV(pkmn.IV, twilo.MinimumIV)) - return true; - - return false; - } - - private static string StripEmbed(NotificationItem item) - { - const int MAX_TEXT_LENGTH = 120; - var text = item.Embed.Description; - text = text.Replace("**", null); - text = text.Length > MAX_TEXT_LENGTH - ? text.Substring(0, Math.Min(text.Length, MAX_TEXT_LENGTH)) - : text; - // TODO: Construct text message instead of using embed description and url for google maps link - return $"{item.City}\n{text}\n{item.Embed.Url}"; - } - - #endregion - } -} diff --git a/src/Defaults.cs b/src/Defaults.cs new file mode 100644 index 00000000..86deaf33 --- /dev/null +++ b/src/Defaults.cs @@ -0,0 +1,252 @@ +namespace WhMgr +{ + using System.Collections.Generic; + using System.Text.Json.Serialization; + + using WeatherCondition = POGOProtos.Rpc.GameplayWeatherProto.Types.WeatherCondition; + + using WhMgr.Common; + + public class Defaults + { + // Default Pokemon settings + [JsonPropertyName("min_iv")] + public sbyte MinimumIV { get; set; } + + [JsonPropertyName("max_iv")] + public sbyte MaximumIV { get; set; } + + [JsonPropertyName("min_lvl")] + public sbyte MinimumLevel { get; set; } + + [JsonPropertyName("max_lvl")] + public sbyte MaximumLevel { get; set; } + + [JsonPropertyName("min_cp")] + public uint MinimumCP { get; set; } + + [JsonPropertyName("max_cp")] + public uint MaximumCP { get; set; } + + [JsonPropertyName("pvp")] + public IReadOnlyDictionary Pvp { get; set; } + + // Webhook and subscription queue settings + [JsonPropertyName("max_queue_batch_size")] + public ushort MaximumQueueBatchSize { get; set; } + + [JsonPropertyName("max_queue_size_warning")] + public ushort MaximumQueueSizeWarning { get; set; } + + [JsonPropertyName("max_queue_capacity")] + public ushort MaximumQueueCapacity { get; set; } + + + // Location map format strings + [JsonPropertyName("google_maps")] + public string GoogleMaps { get; set; } + + [JsonPropertyName("apple_maps")] + public string AppleMaps { get; set; } + + [JsonPropertyName("waze_maps")] + public string WazeMaps { get; set; } + + + // Emoji formats and list + [JsonPropertyName("emojis_list")] + public IReadOnlyList EmojisList { get; set; } + + [JsonPropertyName("emoji_schema")] + public string EmojiSchema { get; set; } + + [JsonPropertyName("type_emoji_schema")] + public string TypeEmojiSchema { get; set; } + + + [JsonPropertyName("pokemon_generation_ranges")] + public IReadOnlyDictionary PokemonGenerationRanges { get; set; } + + [JsonPropertyName("weather_boosts")] + public IReadOnlyDictionary> WeatherBoosts { get; set; } + + + [JsonPropertyName("all")] + public string All { get; set; } + + public Defaults() + { + MinimumIV = 0; + MaximumIV = 100; + MinimumLevel = 0; + MaximumLevel = 35; + MinimumCP = 0; + MaximumCP = 99999; + + MaximumQueueBatchSize = 25; + MaximumQueueSizeWarning = 100; + MaximumQueueCapacity = 4096; + + Pvp = new Dictionary + { + { + PvpLeague.Little, new PvpLeagueFilter + { + MinimumLeagueCP = 400, + MaximumLeagueCP = 500, + MinimumRank = 1, + MaximumRank = 25, + MinimumPercent = 90, + MaximumPercent = 100, + } + }, + { + PvpLeague.Great, new PvpLeagueFilter + { + MinimumLeagueCP = 1400, + MaximumLeagueCP = 1500, + MinimumRank = 1, + MaximumRank = 25, + MinimumPercent = 90, + MaximumPercent = 100, + } + }, + { + PvpLeague.Ultra, new PvpLeagueFilter + { + MinimumLeagueCP = 2400, + MaximumLeagueCP = 2500, + MinimumRank = 1, + MaximumRank = 25, + MinimumPercent = 90, + MaximumPercent = 100, + } + }, + }; + + GoogleMaps = "https://maps.google.com/maps?q={0},{1}"; + AppleMaps = "https://maps.apple.com/maps?daddr={0},{1}"; + WazeMaps = "https://waze.com/ul?ll={0},{1}&navigate=yes"; + + EmojiSchema = "<:{0}:{1}>"; + TypeEmojiSchema = "<:types_{0}:{1}>"; + + EmojisList = new List + { + // Team emojis + "neutral", + "valor", + "mystic", + "instinct", + + // Capture rate emojis + "capture_1", + "capture_2", + "capture_3", + + // Weather emojis + "weather_1", // Clear + "weather_2", // Rain + "weather_3", // PartlyCloudy/Overcast + "weather_4", // Cloudy + "weather_5", // Windy + "weather_6", // Snow + "weather_7", // Fog + + // Ex gym emoji + "ex", + + // AR fort emoji + "ar", + + // Type emojis + "types_fire", + "types_grass", + "types_ground", + "types_rock", + "types_water", + "types_ghost", + "types_ice", + "types_dragon", + "types_fairy", + "types_fighting", + "types_bug", + "types_psychic", + "types_electric", + "types_steel", + "types_dark", + "types_normal", + "types_flying", + "types_poison", + + // PVP league emojis + "league_great", + "league_ultra", + + // Gender emojis + "gender_male", + "gender_female", + "gender_less", + }; + + All = "All"; + + PokemonGenerationRanges = new Dictionary + { + { 1, new PokemonGenerationRange { Generation = 1, Start = 1, End = 151 } }, + { 2, new PokemonGenerationRange { Generation = 2, Start = 152, End = 251 } }, + { 3, new PokemonGenerationRange { Generation = 3, Start = 252, End = 385 } }, + { 4, new PokemonGenerationRange { Generation = 4, Start = 386, End = 493 } }, + { 5, new PokemonGenerationRange { Generation = 5, Start = 494, End = 649 } }, + { 6, new PokemonGenerationRange { Generation = 6, Start = 650, End = 721 } }, + { 7, new PokemonGenerationRange { Generation = 7, Start = 722, End = 809 } }, + { 8, new PokemonGenerationRange { Generation = 8, Start = 810, End = 898 } }, + }; + + WeatherBoosts = new Dictionary> + { + { WeatherCondition.None, new List { } }, + { WeatherCondition.Clear, new List { PokemonType.Fire, PokemonType.Grass, PokemonType.Ground } }, + { WeatherCondition.Rainy, new List { PokemonType.Water, PokemonType.Electric, PokemonType.Bug } }, + { WeatherCondition.PartlyCloudy, new List { PokemonType.Normal, PokemonType.Rock } }, + { WeatherCondition.Overcast, new List { PokemonType.Fairy, PokemonType.Fighting, PokemonType.Poison } }, + { WeatherCondition.Windy, new List { PokemonType.Dragon, PokemonType.Flying, PokemonType.Psychic } }, + { WeatherCondition.Snow, new List { PokemonType.Ice, PokemonType.Steel } }, + { WeatherCondition.Fog, new List { PokemonType.Dark, PokemonType.Ghost } } + }; + + Pvp = new Dictionary(); + } + } + + public class PvpLeagueFilter + { + [JsonPropertyName("min_rank")] + public sbyte MinimumRank { get; set; } + + [JsonPropertyName("max_rank")] + public sbyte MaximumRank { get; set; } + + [JsonPropertyName("min_percent")] + public double MinimumPercent { get; set; } + + [JsonPropertyName("max_percent")] + public double MaximumPercent { get; set; } + + [JsonPropertyName("min_league_cp")] + public ushort MinimumLeagueCP { get; set; } + + [JsonPropertyName("max_league_cp")] + public ushort MaximumLeagueCP { get; set; } + + public PvpLeagueFilter() + { + MinimumRank = 0; + MaximumRank = 100; + MinimumPercent = 0; + MaximumPercent = 100; + MinimumLeagueCP = 1400; + MaximumLeagueCP = 2500; + } + } +} \ No newline at end of file diff --git a/src/Diagnostics/BasicHealthCheck.cs b/src/Diagnostics/BasicHealthCheck.cs new file mode 100644 index 00000000..fc768c08 --- /dev/null +++ b/src/Diagnostics/BasicHealthCheck.cs @@ -0,0 +1,40 @@ +namespace WhMgr.Diagnostics +{ + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + + using Microsoft.Extensions.Diagnostics.HealthChecks; + + /// + /// Basic example health check class if others want to implement their own. + /// + public class BasicHealthCheck : IHealthCheck + { + public async Task CheckHealthAsync( + HealthCheckContext context, + CancellationToken cancellationToken = default) + { + // Description about health check or if degraded or unhealthy, explain error(s)/issue(s) + var description = "Test description about health check, or if degraded or unhealthy - explain errors/issues."; + + // Explanation about error + var exception = new Exception("Explaination about error."); + + // Extra key value pair data + var data = new Dictionary(); + + return await Task.FromResult + ( + new HealthCheckResult + ( + HealthStatus.Healthy, + description, + exception, + data + ) + ); + } + } +} \ No newline at end of file diff --git a/src/Diagnostics/EventLogger.cs b/src/Diagnostics/EventLogger.cs deleted file mode 100644 index abe0468a..00000000 --- a/src/Diagnostics/EventLogger.cs +++ /dev/null @@ -1,181 +0,0 @@ -namespace WhMgr.Diagnostics -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Threading; - - /// - /// Event logger diagnostics class - /// - public class EventLogger : IEventLogger - { - private const string DefaultLoggerName = "default"; - - #region Static Variables - - private static readonly Dictionary _instances = new Dictionary(); -#if Windows - private static readonly EventWaitHandle _waitHandle = new EventWaitHandle(true, EventResetMode.AutoReset, Strings.BotName + new Random().Next(10000, 90000)); -#endif - -#endregion - - #region Properties - - /// - /// Gets or sets the logger instance name - /// - public string Name { get; set; } - - /// - /// Gets or sets the event logging level to set - /// - public LogLevel Level { get; set; } - - /// - /// Gets or sets the log handler callback - /// - public Action LogHandler { get; set; } - - /// - /// Gets the event logger class by name - /// - /// - /// - public static EventLogger GetLogger(string name = null, LogLevel level = LogLevel.Trace) - { - var instanceName = (name ?? DefaultLoggerName).ToLower(); - if (_instances.ContainsKey(instanceName)) - { - return _instances[instanceName]; - } - - _instances.Add(instanceName, new EventLogger(instanceName, level)); - return _instances[instanceName]; - } - - #endregion - - #region Constructor(s) - - /// - /// Instantiate a new class - /// - public EventLogger() - : this(DefaultLoggerName, LogLevel.Trace) - { - } - - /// - /// Instantiate a new class by name - /// - /// Name to set - /// Logging level to set - public EventLogger(string name, LogLevel level) - { - Name = name; - Level = level; - LogHandler = new Action(DefaultLogHandler); - CreateLogsDirectory(); - } - - /// - /// Instantiate a new class by name and log handler - /// - /// Name to set - /// Logging level to set - /// Event logger handler callback - public EventLogger(string name, LogLevel level, Action logHandler) - { - Name = name; - Level = level; - LogHandler = logHandler; - CreateLogsDirectory(); - } - - #endregion - - #region Public Methods - - public void Trace(string format, params object[] args) - { - LogHandler(LogLevel.Trace, args.Length > 0 ? string.Format(format, args) : format); - } - - public void Debug(string format, params object[] args) - { - LogHandler(LogLevel.Debug, args.Length > 0 ? string.Format(format, args) : format); - } - - public void Info(string format, params object[] args) - { - LogHandler(LogLevel.Info, args.Length > 0 ? string.Format(format, args) : format); - } - - public void Warn(string format, params object[] args) - { - LogHandler(LogLevel.Warning, args.Length > 0 ? string.Format(format, args) : format); - } - - public void Error(string format, params object[] args) - { - LogHandler(LogLevel.Error, args.Length > 0 ? string.Format(format, args) : format); - } - - public void Error(Exception ex) - { - LogHandler(LogLevel.Error, ex?.ToString()); - } - - #endregion - - #region Private Methods - - private void DefaultLogHandler(LogLevel level, string message) - { - // Only log event logs that are higher or equal priority that the log level set - if (Level > level) - return; - - var msg = $"{DateTime.Now.ToShortTimeString()} [{level.ToString().ToUpper()}] [{Name.ToUpper()}] {message}"; - switch (level) - { - case LogLevel.Debug: - Console.ForegroundColor = ConsoleColor.Blue; - break; - case LogLevel.Error: - Console.ForegroundColor = ConsoleColor.Red; - break; - case LogLevel.Info: - Console.ForegroundColor = ConsoleColor.White; - break; - case LogLevel.Trace: - Console.ForegroundColor = ConsoleColor.Gray; - break; - case LogLevel.Warning: - Console.ForegroundColor = ConsoleColor.Yellow; - break; - } - Console.WriteLine(msg); - -#if Windows - _waitHandle.WaitOne(); -#endif - File.AppendAllText(Path.Combine(Strings.LogsFolder, $"{Program.ManagerName}_{DateTime.Now:yyyy-MM-dd}.log"), msg + Environment.NewLine); -#if Windows - _waitHandle.Set(); -#endif - } - - private static void CreateLogsDirectory() - { - if (Directory.Exists(Strings.LogsFolder)) - return; - - Directory.CreateDirectory(Strings.LogsFolder); - } - - #endregion - } -} \ No newline at end of file diff --git a/src/Diagnostics/IEventLogger.cs b/src/Diagnostics/IEventLogger.cs deleted file mode 100644 index 1d5c09f5..00000000 --- a/src/Diagnostics/IEventLogger.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace WhMgr.Diagnostics -{ - using System; - - /// - /// Event logger interface - /// - public interface IEventLogger - { - /// - /// Name of event logger instance - /// - string Name { get; } - - /// - /// Log level priority - /// - LogLevel Level { get; } - - void Trace(string format, params object[] args); - - void Debug(string format, params object[] args); - - void Info(string format, params object[] args); - - void Warn(string format, params object[] args); - - void Error(string format, params object[] args); - - void Error(Exception ex); - } -} \ No newline at end of file diff --git a/src/Diagnostics/LogLevel.cs b/src/Diagnostics/LogLevel.cs deleted file mode 100644 index 1c38f225..00000000 --- a/src/Diagnostics/LogLevel.cs +++ /dev/null @@ -1,43 +0,0 @@ -namespace WhMgr.Diagnostics -{ - /// - /// Defines logging severity levels. - /// - public enum LogLevel : uint - { - /// - /// Logs that contain the most detailed messages. These messages may contain sensitive application data. These messages are disabled by default and should never be enabled in a production environment. - /// - Trace = 0, - - /// - /// Logs that are used for interactive investigation during development. These logs should primarily contain information useful for debugging and have no long-term value. - /// - Debug, - - /// - /// Logs that track the general flow of the application. These logs should have long-term value. - /// - Info, - - /// - /// Logs that highlight an abnormal or unexpected event in the application flow, but do not otherwise cause the application execution to stop. - /// - Warning, - - /// - /// Logs that highlight when the current flow of execution is stopped due to a failure. These should indicate a failure in the current activity, not an application-wide failure. - /// - Error, - - /// - /// Logs that describe an unrecoverable application or system crash, or a catastrophic failure that requires immediate attention. - /// - Fatal, - - /// - /// Not used for writing log messages. Specifies that a logging category should not write any messages. - /// - None - } -} \ No newline at end of file diff --git a/src/Dockerfile b/src/Dockerfile new file mode 100644 index 00000000..1fbf55a3 --- /dev/null +++ b/src/Dockerfile @@ -0,0 +1,22 @@ +#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base +WORKDIR /app +EXPOSE 80 +EXPOSE 443 + +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build +WORKDIR /src +COPY ["src/WhMgr.csproj", "src/"] +RUN dotnet restore "src/WhMgr.csproj" +COPY . . +WORKDIR "/src/src" +RUN dotnet build "WhMgr.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "WhMgr.csproj" -c Release -o /app/publish + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "WhMgr.dll"] \ No newline at end of file diff --git a/src/Dockerfile.original b/src/Dockerfile.original new file mode 100644 index 00000000..2af6c6d6 --- /dev/null +++ b/src/Dockerfile.original @@ -0,0 +1,21 @@ +#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base +WORKDIR /app +EXPOSE 80 + +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build +WORKDIR /src +COPY ["WhMgr/WhMgr.csproj", "WhMgr/"] +RUN dotnet restore "WhMgr/WhMgr.csproj" +COPY . . +WORKDIR "/src/WhMgr" +RUN dotnet build "WhMgr.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "WhMgr.csproj" -c Release -o /app/publish + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "WhMgr.dll"] \ No newline at end of file diff --git a/src/Extensions/ChannelReaderExtensions.cs b/src/Extensions/ChannelReaderExtensions.cs new file mode 100644 index 00000000..01579da6 --- /dev/null +++ b/src/Extensions/ChannelReaderExtensions.cs @@ -0,0 +1,23 @@ +namespace WhMgr.Extensions +{ + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Channels; + using System.Threading.Tasks; + + public static class ChannelReaderExtensions + { + public static async Task> ReadMultipleAsync(this ChannelReader reader, int maxBatchSize, CancellationToken cancellationToken) + { + await reader.WaitToReadAsync(cancellationToken); + + var batch = new List(); + while (batch.Count < maxBatchSize && reader.TryRead(out T message)) + { + batch.Add(message); + } + return batch; + } + } +} \ No newline at end of file diff --git a/src/Extensions/CoordinatesDistanceExtensions.cs b/src/Extensions/CoordinateExtensions.cs similarity index 80% rename from src/Extensions/CoordinatesDistanceExtensions.cs rename to src/Extensions/CoordinateExtensions.cs index 591f0713..59cce04f 100644 --- a/src/Extensions/CoordinatesDistanceExtensions.cs +++ b/src/Extensions/CoordinateExtensions.cs @@ -2,18 +2,7 @@ { using System; - public class Coordinates - { - public double Latitude { get; } - - public double Longitude { get; } - - public Coordinates(double latitude, double longitude) - { - Latitude = latitude; - Longitude = longitude; - } - } + using WhMgr.Services.Geofence; public static class CoordinatesDistanceExtensions { @@ -26,7 +15,7 @@ public static class CoordinatesDistanceExtensions /// /// The Coordinate for the location to calculate the distance from. /// The Coordinate for the location to calculate the distance to. - public static double DistanceTo(this Coordinates from, Coordinates to) + public static double DistanceTo(this Coordinate from, Coordinate to) { if (double.IsNaN(from.Latitude) || double.IsNaN(from.Longitude) || double.IsNaN(to.Latitude) || double.IsNaN(to.Longitude)) diff --git a/src/Extensions/DateTimeExtensions.cs b/src/Extensions/DateTimeExtensions.cs index b1d927ad..7228e585 100644 --- a/src/Extensions/DateTimeExtensions.cs +++ b/src/Extensions/DateTimeExtensions.cs @@ -1,10 +1,13 @@ namespace WhMgr.Extensions { using System; + using System.Linq; using GeoTimeZone; using TimeZoneConverter; + using WhMgr.Services.Webhook.Models; + public static class DateTimeExtensions { public static TimeSpan GetTimeRemaining(this DateTime startTime, DateTime endTime) @@ -13,15 +16,73 @@ public static TimeSpan GetTimeRemaining(this DateTime startTime, DateTime endTim return remaining; } + public static DateTime ConvertTimeFromCoordinates(this DateTime date, IWebhookPoint coord) + { + return ConvertTimeFromCoordinates(date, coord.Latitude, coord.Longitude); + } + public static DateTime ConvertTimeFromCoordinates(this DateTime date, double lat, double lon) { var tzIana = TimeZoneLookup.GetTimeZone(lat, lon).Result; #if Windows - // Convert to Windows acceptable TimeZone - tzIana = TZConvert.IanaToWindows(tzIana); + // Convert to Windows standard time zone i.e. America/Los_Angeles -> Pacific Standard Time + tzIana = ConvertIanaToWindowsTimeZone(tzIana); #endif - var tzInfo = TimeZoneInfo.FindSystemTimeZoneById(tzIana); - var dt = DateTime.SpecifyKind(date, DateTimeKind.Utc); + return GetConvertedDateTime(date, tzIana); + } + + public static DateTime ConvertTimeFromTimeZone(this DateTime date, string timezone) + { + var result = ConvertIanaToWindowsTimeZone(timezone); + return GetConvertedDateTime(date, result); + } + + public static TimeZoneInfo GetTimeZoneInfoFromName(this string timezone, bool createUnknownTimeZone = false) + { + try + { + var tzInfo = TimeZoneInfo.FindSystemTimeZoneById(timezone); + return tzInfo; + } + catch (TimeZoneNotFoundException) + { + Console.WriteLine($"Failed to find timezone '{timezone}' on system, creating custom timezone using UTC offset or local timezone as fallback."); + } + + return createUnknownTimeZone + ? timezone.CreateCustomTimeZone() + : TimeZoneInfo.Local; + } + + public static TimeZoneInfo CreateCustomTimeZone(this string timezone, short offsetFromUtcH = 0, string? displayName = null, string? standardName = null) + { + var tzInfo = TimeZoneInfo.CreateCustomTimeZone( + timezone, + TimeSpan.FromHours(offsetFromUtcH), + displayName ?? timezone, + standardName ?? timezone + ); + return tzInfo; + } + + public static string ConvertIanaToWindowsTimeZone(this string timezone) + { + var result = timezone; + // Check if we were passed a Windows standard time zone, if so convert it to Iana + // standard. Below will trigger with the MasterFileDownloaderHostedService class + if (TZConvert.KnownIanaTimeZoneNames.Contains(result)) + { + // Converts Iana standard time zone to Windows time zone + // i.e. America/Los_Angeles -> Pacific Standard Time + result = TZConvert.IanaToWindows(result); + } + return result; + } + + private static DateTime GetConvertedDateTime(DateTime localDate, string timezone) + { + var tzInfo = timezone.GetTimeZoneInfoFromName(createUnknownTimeZone: true); + var dt = DateTime.SpecifyKind(localDate, DateTimeKind.Utc); var convertedTime = TimeZoneInfo.ConvertTimeFromUtc(dt, tzInfo); return convertedTime; } @@ -33,7 +94,20 @@ public static DateTime ConvertTimeFromCoordinates(this DateTime date, double lat /// Returns Unix timestamp public static double GetUnixTimestamp(this DateTime now) { - return now.Subtract(new DateTime(1970, 1, 1)).TotalSeconds; + return Math.Round(now.Subtract(new DateTime(1970, 1, 1)).TotalSeconds); + } + + public static DateTime FromUnix(this long unixSeconds) + { + var epochTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); + var localDateTime = epochTime.AddSeconds(unixSeconds);//.ToLocalTime(); + + return localDateTime; + } + + public static DateTime FromUnix(this ulong unixSeconds) + { + return FromUnix((long)unixSeconds); } } } \ No newline at end of file diff --git a/src/Extensions/DbContextExtensions.cs b/src/Extensions/DbContextExtensions.cs new file mode 100644 index 00000000..8fbda497 --- /dev/null +++ b/src/Extensions/DbContextExtensions.cs @@ -0,0 +1,34 @@ +namespace WhMgr.Extensions +{ + using Microsoft.EntityFrameworkCore; + using Microsoft.Extensions.DependencyInjection; + + using WhMgr.Configuration; + + public static class DbContextExtensions + { + public static void AddDatabase(this IServiceCollection services, DatabaseConfig dbConfig) + where T : DbContext + { + AddDatabase(services, dbConfig.ToString()); + } + + public static void AddDatabase(this IServiceCollection services, string connectionString) + where T : DbContext + { + services.AddDbContextFactory(options => + options.UseMySql( + connectionString, + ServerVersion.AutoDetect(connectionString) + ), ServiceLifetime.Singleton + ); + + services.AddDbContext(options => + options.UseMySql( + connectionString, + ServerVersion.AutoDetect(connectionString) + ), ServiceLifetime.Scoped + ); + } + } +} \ No newline at end of file diff --git a/src/Extensions/DictionaryExtensions.cs b/src/Extensions/DictionaryExtensions.cs deleted file mode 100644 index 8fd707f2..00000000 --- a/src/Extensions/DictionaryExtensions.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace WhMgr.Extensions -{ - using System; - using System.Collections.Generic; - using System.Linq; - - public static class DictionaryExtensions - { - public static IEnumerable> GroupWithCount(this Dictionary dict, int first = 25) - { - return (from entry in dict orderby entry.Value descending select entry).Take(first); - } - } -} \ No newline at end of file diff --git a/src/Extensions/DiscordEmbedExtensions.cs b/src/Extensions/DiscordEmbedExtensions.cs new file mode 100644 index 00000000..3d3751be --- /dev/null +++ b/src/Extensions/DiscordEmbedExtensions.cs @@ -0,0 +1,37 @@ +namespace WhMgr.Extensions +{ + using DSharpPlus.Entities; + + using WhMgr.Services.Discord.Models; + + public static class DiscordWebhookMessageExtensions + { + // Because DSharpPlus v4.x latest DiscordEmbed isn't compatible with raw webhooks + public static DiscordEmbed GenerateDiscordMessage(this DiscordEmbedMessage embed) + { + var eb = new DiscordEmbedBuilder + { + Author = new DiscordEmbedBuilder.EmbedAuthor + { + Name = embed.Author?.Name, + IconUrl = embed.Author?.IconUrl, + }, + Description = embed.Description, + //Fields = embed.Fields, + Footer = new DiscordEmbedBuilder.EmbedFooter + { + Text = embed.Footer?.Text, + IconUrl = embed.Footer?.IconUrl, + }, + ImageUrl = embed.Image?.Url, + Thumbnail = new DiscordEmbedBuilder.EmbedThumbnail + { + Url = embed.Thumbnail?.Url, + }, + Title = embed.Title, + Url = embed.Url, + }; + return eb.Build(); + } + } +} \ No newline at end of file diff --git a/src/Extensions/DiscordExtensions.cs b/src/Extensions/DiscordExtensions.cs index cee42eb2..ca94fa2d 100644 --- a/src/Extensions/DiscordExtensions.cs +++ b/src/Extensions/DiscordExtensions.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; + using System.Text.Json; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; @@ -11,12 +12,10 @@ using DSharpPlus.CommandsNext; using DSharpPlus.Entities; using DSharpPlus.Interactivity; - using WeatherCondition = POGOProtos.Rpc.GameplayWeatherProto.Types.WeatherCondition; + using WhMgr.Common; using WhMgr.Configuration; - using WhMgr.Diagnostics; using WhMgr.Localization; - using WhMgr.Net.Models; public static class DiscordExtensions { @@ -24,16 +23,14 @@ public static class DiscordExtensions public const string YesRegex = "[Yy][Ee]?[Ss]?"; //private const string NoRegex = "[Nn][Oo]?"; - private static readonly IEventLogger _logger = EventLogger.GetLogger("DISCORD_EXTENSIONS", Program.LogLevel); - #region Messages - public static async Task> RespondEmbed(this DiscordMessage msg, string message) + public static async Task> RespondEmbedAsync(this DiscordMessage msg, string message) { - return await msg.RespondEmbed(message, DiscordColor.Green); + return await msg.RespondEmbedAsync(message, DiscordColor.Green); } - public static async Task> RespondEmbed(this DiscordMessage discordMessage, string message, DiscordColor color) + public static async Task> RespondEmbedAsync(this DiscordMessage discordMessage, string message, DiscordColor color) { var messagesSent = new List(); var messages = message.SplitInParts(2048); @@ -51,12 +48,12 @@ public static async Task> RespondEmbed(this DiscordMessage return messagesSent; } - public static async Task> RespondEmbed(this CommandContext ctx, string message) + public static async Task> RespondEmbedAsync(this CommandContext ctx, string message) { - return await RespondEmbed(ctx, message, DiscordColor.Green); + return await RespondEmbedAsync(ctx, message, DiscordColor.Green); } - public static async Task> RespondEmbed(this CommandContext ctx, string message, DiscordColor color) + public static async Task> RespondEmbedAsync(this CommandContext ctx, string message, DiscordColor color) { var messagesSent = new List(); var messages = message.SplitInParts(2048); @@ -74,29 +71,29 @@ public static async Task> RespondEmbed(this CommandContext return messagesSent; } - public static async Task SendDirectMessage(this DiscordClient client, DiscordUser user, DiscordEmbed embed) + public static async Task SendDirectMessageAsync(this DiscordMember member, DiscordEmbed embed) { if (embed == null) return null; - return await client.SendDirectMessage(user, string.Empty, embed); + return await member.SendDirectMessageAsync(string.Empty, embed); } - public static async Task SendDirectMessage(this DiscordClient client, DiscordUser user, string message, DiscordEmbed embed) + public static async Task SendDirectMessageAsync(this DiscordMember member, string message, DiscordEmbed embed) { try { - var dm = await client.CreateDmAsync(user); + var dm = await member.CreateDmChannelAsync(); if (dm != null) { - var msg = await dm.SendMessageAsync(message, false, embed); + var msg = await dm.SendMessageAsync(message, embed); return msg; } } catch (Exception) { //_logger.Error(ex); - _logger.Error($"Failed to send DM to user {user.Username}."); + Console.WriteLine($"Failed to send DM to user {member.Username}."); } return null; @@ -104,9 +101,9 @@ public static async Task SendDirectMessage(this DiscordClient cl #endregion - private static readonly Dictionary<(ulong, ulong), Task> MemberTasks = new Dictionary<(ulong, ulong), Task>(); + private static readonly Dictionary<(ulong, ulong), Task> MemberTasks = new(); - public static async Task GetMemberById(this DiscordClient client, ulong guildId, ulong id) + public static async Task GetMemberByIdAsync(this DiscordClient client, ulong guildId, ulong id) { Task taskToAwait; var added = false; @@ -119,7 +116,7 @@ public static async Task GetMemberById(this DiscordClient client, } else { - taskToAwait = DoGetMemberById(client, guildId, id); + taskToAwait = DoGetMemberByIdAsync(client, guildId, id); MemberTasks.Add((guildId, id), taskToAwait); added = true; } @@ -138,8 +135,8 @@ public static async Task GetMemberById(this DiscordClient client, return result; } - private static async Task DoGetMemberById(DiscordClient client, ulong guildId, ulong id) - { + private static async Task DoGetMemberByIdAsync(DiscordClient client, ulong guildId, ulong id) + { if (!client.Guilds.ContainsKey(guildId)) return null; @@ -154,7 +151,7 @@ private static async Task DoGetMemberById(DiscordClient client, u DiscordMember member = null; try { - member = members?.FirstOrDefault(x => x.Id == id); + member = members?.FirstOrDefault(member => member.Key == id).Value; } catch { } if (member == null) @@ -172,28 +169,28 @@ private static async Task DoGetMemberById(DiscordClient client, u return member; } - public static async Task DonateUnlockFeaturesMessage(this CommandContext ctx, bool triggerTyping = true) + public static async Task DonateUnlockFeaturesMessageAsync(this CommandContext ctx, bool triggerTyping = true) { if (triggerTyping) { await ctx.TriggerTypingAsync(); } - var message = Translator.Instance.Translate("DONATE_MESSAGE", ctx.User.Username) ?? + var message = Translator.Instance.Translate("DONATE_MESSAGE", new { author = ctx.User.Username }) ?? $"{ctx.User.Username} This feature is only available to supporters, please $donate to unlock this feature and more.\r\n\r\n" + $"Donation information can be found by typing the `$donate` command.\r\n\r\n" + $"*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*"; - var eb = await ctx.RespondEmbed(message); + var eb = await ctx.RespondEmbedAsync(message); return eb.FirstOrDefault(); } - internal static async Task IsDirectMessageSupported(this CommandContext ctx, WhConfig config) + internal static async Task IsDirectMessageSupportedAsync(this CommandContext ctx, Config config) { - var exists = ctx.Client.Guilds.Keys.FirstOrDefault(x => config.Servers.ContainsKey(x)) > 0; + var exists = ctx.Client.Guilds.Keys.FirstOrDefault(guildId => config.Servers.ContainsKey(guildId)) > 0; //if (message?.Channel?.Guild == null) if (!exists) { - await ctx.Message.RespondEmbed(Translator.Instance.Translate("DIRECT_MESSAGE_NOT_SUPPORTED", ctx.Message.Author.Username), DiscordColor.Yellow); + await ctx.Message.RespondEmbedAsync(Translator.Instance.Translate("DIRECT_MESSAGE_NOT_SUPPORTED", new { author = ctx.Message.Author.Username }), DiscordColor.Yellow); return false; } @@ -214,7 +211,7 @@ public static ulong ContextToGuild(this CommandContext ctx, Dictionary IsSupporterOrHigher(this DiscordClient client, ulong userId, ulong guildId, WhConfig config) + public static async Task IsSupporterOrHigherAsync(this DiscordClient client, ulong userId, ulong guildId, Config config) { try { @@ -223,38 +220,38 @@ public static async Task IsSupporterOrHigher(this DiscordClient client, ul var server = config.Servers[guildId]; - var isAdmin = userId == server.OwnerId; + var isAdmin = userId == server.Bot.OwnerId; if (isAdmin) return true; - var isModerator = await IsModerator(client, userId, guildId, config); + var isModerator = await IsModeratorAsync(client, userId, guildId, config); if (isModerator) return true; - var isSupporter = client.HasSupporterRole(guildId, userId, server.DonorRoleIds); + var isSupporter = client.HasSupporterRole(guildId, userId, server.DonorRoleIds.Keys.ToList()); if (isSupporter) return true; } catch (Exception ex) { - _logger.Error(ex); + Console.WriteLine($"Error: {ex}"); } return false; } - public static async Task IsModerator(this DiscordClient client, ulong userId, ulong guildId, WhConfig config) + public static async Task IsModeratorAsync(this DiscordClient client, ulong userId, ulong guildId, Config config) { if (!config.Servers.ContainsKey(guildId)) return false; var server = config.Servers[guildId]; var moderatorRoleIds = server.ModeratorRoleIds; - var member = await client.GetMemberById(guildId, userId); + var member = await client.GetMemberByIdAsync(guildId, userId); if (member == null) return false; - var roleIds = member.Roles.Select(x => x.Id); + var roleIds = member.Roles.Select(role => role.Id); foreach (var modRoleId in moderatorRoleIds) { if (roleIds.Contains(modRoleId)) @@ -265,18 +262,18 @@ public static async Task IsModerator(this DiscordClient client, ulong user return false; } - public static async Task IsModeratorOrHigher(this DiscordClient client, ulong userId, ulong guildId, WhConfig config) + public static async Task IsModeratorOrHigherAsync(this DiscordClient client, ulong userId, ulong guildId, Config config) { if (!config.Servers.ContainsKey(guildId)) return false; var server = config.Servers[guildId]; - var isAdmin = IsAdmin(userId, server.OwnerId); + var isAdmin = IsAdmin(userId, server.Bot.OwnerId); if (isAdmin) return true; - var isModerator = await IsModerator(client, userId, guildId, config); + var isModerator = await IsModeratorAsync(client, userId, guildId, config); if (isModerator) return true; @@ -294,10 +291,10 @@ public static bool HasSupporterRole(this DiscordClient client, ulong guildId, ul return false; var guild = client.Guilds[guildId]; - var member = guild.Members.FirstOrDefault(x => x.Id == userId); + var member = guild.Members.FirstOrDefault(member => member.Key == userId).Value; if (member == null) { - _logger.Error($"Failed to get user with id {userId}."); + Console.WriteLine($"Failed to get user with id {userId}."); return false; } @@ -306,6 +303,8 @@ public static bool HasSupporterRole(this DiscordClient client, ulong guildId, ul public static bool HasSupporterRole(this DiscordMember member, List supporterRoleIds) { + return supporterRoleIds.Exists(roleId => HasRole(member, roleId)); + /* for (var i = 0; i < supporterRoleIds.Count; i++) { if (HasRole(member, supporterRoleIds[i])) @@ -313,16 +312,36 @@ public static bool HasSupporterRole(this DiscordMember member, List suppo return true; } } + return false; + */ + } + public static bool HasRoleAccess(this DiscordMember member, Dictionary> accessConfig, SubscriptionAccessType desiredAccessType) + { + // Loop all access configs + // Check if member has role for access type + foreach (var (donorRoleId, accessType) in accessConfig) + { + // Check if member has donor role + if (member.Roles.FirstOrDefault(role => role.Id == donorRoleId) == null) + continue; + + var donorRoleAccess = accessConfig[donorRoleId]; + // Check if donor role access config contains desired access type or no access type specified so include all + if (donorRoleAccess.Contains(desiredAccessType) || !donorRoleAccess.Any()) + { + return true; + } + } return false; } - public static async Task HasModeratorRole(this DiscordClient client, ulong guildId, ulong userId, ulong moderatorRoleId) + public static async Task HasModeratorRoleAsync(this DiscordClient client, ulong guildId, ulong userId, ulong moderatorRoleId) { - var member = await client.GetMemberById(guildId, userId); + var member = await client.GetMemberByIdAsync(guildId, userId); if (member == null) { - _logger.Error($"Failed to get moderator user with id {userId}."); + Console.WriteLine($"Failed to get moderator user with id {userId}."); return false; } @@ -338,7 +357,7 @@ public static bool HasRole(this DiscordMember member, ulong roleId) { try { - var role = member?.Roles.FirstOrDefault(x => x.Id == roleId); + var role = member?.Roles.FirstOrDefault(role => role.Id == roleId); return role != null; } catch @@ -357,12 +376,12 @@ public static bool HasRole(this DiscordGuild guild, DiscordMember member, string public static DiscordRole GetRoleFromName(this DiscordGuild guild, string roleName) { - return guild?.Roles.FirstOrDefault(x => string.Compare(x.Name, roleName, true) == 0); + return guild?.Roles.FirstOrDefault(role => string.Compare(role.Value.Name, roleName, true) == 0).Value; } #endregion - public static async Task> DeleteMessages(this DiscordClient client, ulong channelId) + public static async Task> DeleteMessagesAsync(this DiscordClient client, ulong channelId) { var deleted = 0L; DiscordChannel channel; @@ -372,13 +391,13 @@ public static async Task> DeleteMessages(this Discor } catch (DSharpPlus.Exceptions.NotFoundException) { - _logger.Debug($"Failed to get Discord channel {channelId}, skipping..."); + Console.WriteLine($"Failed to get Discord channel {channelId}, skipping..."); return null; } if (channel == null) { - _logger.Warn($"Failed to find channel by id {channelId}, skipping..."); + Console.WriteLine($"Failed to find channel by id {channelId}, skipping..."); return null; } @@ -406,9 +425,9 @@ public static async Task> DeleteMessages(this Discor { messages = await channel.GetMessagesAsync(); } - catch (Newtonsoft.Json.JsonReaderException ex) + catch (JsonException ex) { - _logger.Error(ex); + Console.WriteLine($"Error: {ex}"); continue; } } @@ -416,82 +435,63 @@ public static async Task> DeleteMessages(this Discor return Tuple.Create(channel, deleted); } - public static async Task Confirm(this CommandContext ctx, string message) + public static async Task ConfirmAsync(this CommandContext ctx, string message) { - await ctx.RespondEmbed(message); - var interactivity = ctx.Client.GetModule(); + await ctx.RespondEmbedAsync(message); + var interactivity = ctx.Client.GetExtension(); if (interactivity == null) { - _logger.Error("Interactivity model failed to load!"); + Console.WriteLine("Interactivity model failed to load!"); return false; } var m = await interactivity.WaitForMessageAsync( - x => x.Channel.Id == ctx.Channel.Id - && x.Author.Id == ctx.User.Id - && Regex.IsMatch(x.Content, ConfirmRegex), + msg => msg.Channel.Id == ctx.Channel.Id + && msg.Author.Id == ctx.User.Id + && Regex.IsMatch(msg.Content, ConfirmRegex), TimeSpan.FromMinutes(2)); - return Regex.IsMatch(m.Message.Content, YesRegex); + return Regex.IsMatch(m.Result.Content, YesRegex); } #region Colors - public static DiscordColor BuildPokemonIVColor(this string iv, DiscordEmbedColorConfig config) + public static DiscordColor BuildPokemonIVColor(this double iv, DiscordEmbedColorsConfig config) { - if (!double.TryParse(iv.Substring(0, iv.Length - 1), out var result)) - { - return DiscordColor.White; - } - var color = config.Pokemon.IV.FirstOrDefault(x => result >= x.Minimum && result <= x.Maximum); - return new DiscordColor(color.Color); + var color = config.Pokemon.IV.FirstOrDefault(value => iv >= value.Minimum && iv <= value.Maximum); + return color == null ? DiscordColor.White : new DiscordColor(color.Color); } - public static DiscordColor BuildPokemonPvPColor(this int rank, DiscordEmbedColorConfig config) + public static DiscordColor BuildPokemonPvPColor(this int rank, DiscordEmbedColorsConfig config) { if (rank <= 0) { return DiscordColor.White; } - var color = config.Pokemon.PvP.FirstOrDefault(x => rank >= x.Minimum && rank <= x.Maximum); - return new DiscordColor(color.Color); + var color = config.Pokemon.PvP.FirstOrDefault(value => rank >= value.Minimum && rank <= value.Maximum); + return color == null ? DiscordColor.White : new DiscordColor(color.Color); } - public static DiscordColor BuildRaidColor(this int level, DiscordEmbedColorConfig config) -{ + public static DiscordColor BuildRaidColor(this ushort level, DiscordEmbedColorsConfig config) + { if (level == 0) { return DiscordColor.White; } - string color; - switch (level) + string color = level switch { - case 1: - color = config.Raids.Level1; - break; - case 2: - color = config.Raids.Level2; - break; - case 3: - color = config.Raids.Level3; - break; - case 4: - color = config.Raids.Level4; - break; - case 5: - color = config.Raids.Level5; - break; - case 6: - color = config.Raids.Level6; - break; - default: - color = config.Raids.Ex; - break; - } + 1 => config.Raids.Level1, + 2 => config.Raids.Level2, + 3 => config.Raids.Level3, + 4 => config.Raids.Level4, + 5 => config.Raids.Level5, + 6 => config.Raids.Level6, + _ => config.Raids.Ex, + }; return new DiscordColor(color); } - public static DiscordColor BuildLureColor(this PokestopLureType lureType, DiscordEmbedColorConfig config) + public static DiscordColor BuildLureColor(this PokestopLureType lureType, DiscordEmbedColorsConfig config) { string color; switch (lureType) @@ -517,7 +517,7 @@ public static DiscordColor BuildLureColor(this PokestopLureType lureType, Discor return new DiscordColor(color); } - public static DiscordColor BuildWeatherColor(this WeatherCondition weather, DiscordEmbedColorConfig config) + public static DiscordColor BuildWeatherColor(this WeatherCondition weather, DiscordEmbedColorsConfig config) { var color = "#808080"; switch (weather) @@ -548,5 +548,30 @@ public static DiscordColor BuildWeatherColor(this WeatherCondition weather, Disc } #endregion + + public static async Task CanExecuteCommandAsync(this CommandContext ctx, Config config) + { + if (!await ctx.IsDirectMessageSupportedAsync(config)) + return false; + + var guildId = ctx.Guild?.Id ?? ctx.Client.Guilds.FirstOrDefault(guild => config.Servers.ContainsKey(guild.Key)).Key; + if (guildId == 0 || !config.Servers.ContainsKey(guildId)) + return false; + + if (!config.Servers[guildId].Subscriptions.Enabled) + { + await ctx.RespondEmbedAsync(Translator.Instance.Translate("MSG_SUBSCRIPTIONS_NOT_ENABLED").FormatText(new { author = ctx.User.Username }), DiscordColor.Red); + return false; + } + + var isSupporter = await ctx.Client.IsSupporterOrHigherAsync(ctx.User.Id, guildId, config); + if (!isSupporter) + { + await ctx.DonateUnlockFeaturesMessageAsync(); + return false; + } + + return true; + } } } \ No newline at end of file diff --git a/src/Extensions/DiscordInteractivityExtensions.cs b/src/Extensions/DiscordInteractivityExtensions.cs deleted file mode 100644 index 90c7b799..00000000 --- a/src/Extensions/DiscordInteractivityExtensions.cs +++ /dev/null @@ -1,69 +0,0 @@ -namespace WhMgr.Extensions -{ - using System; - using System.Linq; - using System.Threading.Tasks; - - using DSharpPlus.CommandsNext; - using DSharpPlus.Entities; - using DSharpPlus.Interactivity; - - static class DiscordInteractivityExtensions - { - public static async Task GetSubscriptionTypeSelection(this CommandContext ctx) - { - var msg = $@" -Select the type of subscription to create: -:one: Pokemon Subscription -:two: PvP Subscription -:three: Raid Subscription -:four: Quest Subscription -:five: Invasion Subscription -:six: Gym Subscription -"; - var message = ctx.RespondEmbed(msg, DiscordColor.Blurple).GetAwaiter().GetResult().FirstOrDefault(); - await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":one:")); - await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":two:")); - await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":three:")); - await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":four:")); - await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":five:")); - await message.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":six:")); - - var interactivity = ctx.Client.GetInteractivityModule(); - // TODO: Configurable subscription timeout - var resultReact = await interactivity.WaitForMessageReactionAsync(x => !string.IsNullOrEmpty(x.Name), message, ctx.User, TimeSpan.FromMinutes(3)); - if (resultReact == null) - { - await ctx.RespondEmbed($"Invalid result", DiscordColor.Red); - return 0; - } - - await message.DeleteAsync(); - switch (resultReact.Emoji.Name.ToLower()) - { - case "1⃣": return 1; - case "2⃣": return 2; - case "3⃣": return 3; - case "4⃣": return 4; - case "5⃣": return 5; - case "6⃣": return 6; - default: return 0; - } - } - - public static async Task WaitForUserChoice(this CommandContext ctx, bool allowNull = false) - { - var interactivity = ctx.Client.GetInteractivityModule(); - // TODO: Configurable subscription timeout - var result = await interactivity.WaitForMessageAsync(x => x.Author.Id == ctx.User.Id && (allowNull && string.IsNullOrEmpty(x.Content)) || (!allowNull && !string.IsNullOrEmpty(x.Content)), TimeSpan.FromMinutes(3)); - var content = result?.Message.Content; - try - { - // Bot can't delete user messages in DMs - await result.Message?.DeleteAsync(); - } - catch { } - return content; - } - } -} \ No newline at end of file diff --git a/src/Extensions/GenericsExtensions.cs b/src/Extensions/GenericsExtensions.cs index 05ed7b32..1851b864 100644 --- a/src/Extensions/GenericsExtensions.cs +++ b/src/Extensions/GenericsExtensions.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; + using System.IO; using System.Linq; public static class GenericsExtensions @@ -139,5 +140,42 @@ public static bool Intersects(this List list1, List list2) } return false; } + + public static T LoadFromFile(this string filePath) + { + if (!File.Exists(filePath)) + { + throw new FileNotFoundException($"{filePath} file not found.", filePath); + } + + var data = File.ReadAllText(filePath); + if (string.IsNullOrEmpty(data)) + { + Console.WriteLine($"{filePath} masterfile is empty."); + return default; + } + + return data.FromJson(); + } + + public static Dictionary Merge(this Dictionary locales1, Dictionary locales2, bool updateValues = false) + { + var result = locales1; + foreach (var (key, value) in locales2) + { + if (!result.ContainsKey(key)) + { + result.Add(key, value); + continue; + } + + // Key already exists, check if values are the same + if (result[key] != value && updateValues) + { + result[key] = value; + } + } + return result; + } } } \ No newline at end of file diff --git a/src/Extensions/HttpContextSessionExtensions.cs b/src/Extensions/HttpContextSessionExtensions.cs new file mode 100644 index 00000000..f9bde920 --- /dev/null +++ b/src/Extensions/HttpContextSessionExtensions.cs @@ -0,0 +1,36 @@ +namespace WhMgr.Extensions +{ + using System; + using System.Text; + + using Microsoft.AspNetCore.Http; + + public static class HttpContextSessionExtensions + { + public static string TryGetValue(this ISession session, string key) + { + if (!session.TryGetValue(key, out var value)) + return null; + + if (value == null) + return null; + + return Encoding.UTF8.GetString(value); + } + + public static T GetValue(this ISession session, string key) + { + var json = TryGetValue(session, key); + if (string.IsNullOrEmpty(json)) + return default; + var obj = json.FromJson(); + return obj; + } + + public static void SetValue(this ISession session, string key, T value) + { + var json = value.ToJson(); + session.SetString(key, json); + } + } +} \ No newline at end of file diff --git a/src/Extensions/HttpRequestExtensions.cs b/src/Extensions/HttpRequestExtensions.cs new file mode 100644 index 00000000..a5775fbd --- /dev/null +++ b/src/Extensions/HttpRequestExtensions.cs @@ -0,0 +1,57 @@ +namespace WhMgr.Extensions +{ + using System; + using System.IO; + using System.Text; + using System.Threading.Tasks; + + using Microsoft.AspNetCore.Http; + + public static class HttpRequestExtensions + { + /// + /// Retrieve the raw body as a string and deserialize as type from the Request.Body stream + /// + /// Serialized type + /// Request instance to apply to + /// Optional - Encoding, defaults to UTF8 + /// + public static async Task GetRawBodyAsync(this HttpRequest request, Encoding encoding = null) + { + var json = await GetRawBodyStringAsync(request, encoding); + if (string.IsNullOrEmpty(json)) + { + return default; + } + var obj = json.FromJson(); + return obj; + } + + /// + /// Retrieve the raw body as a string from the Request.Body stream + /// + /// Request instance to apply to + /// Optional - Encoding, defaults to UTF8 + /// + public static async Task GetRawBodyStringAsync(this HttpRequest request, Encoding encoding = null) + { + if (encoding == null) + encoding = Encoding.UTF8; + + using var reader = new StreamReader(request.Body, encoding); + return await reader.ReadToEndAsync(); + } + + /// + /// Retrieves the raw body as a byte array from the Request.Body stream + /// + /// + /// + public static async Task GetRawBodyBytesAsync(this HttpRequest request) + { + using var ms = new MemoryStream(2048); + await request.Body.CopyToAsync(ms); + return ms.ToArray(); + } + } +} \ No newline at end of file diff --git a/src/Extensions/IntegerExtensions.cs b/src/Extensions/IntegerExtensions.cs deleted file mode 100644 index cf730f26..00000000 --- a/src/Extensions/IntegerExtensions.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace WhMgr.Extensions -{ - using System; - - public static class IntegerExtensions - { - /* - public static char NumberToAlphabet(this int num) - { - return Convert.ToChar(num + 64); - } - */ - - public static DateTime FromUnix(this long unixSeconds) - { - var epochTime = new DateTime(1970,1,1,0,0,0,0,DateTimeKind.Utc); - var localDateTime = epochTime.AddSeconds(unixSeconds);//.ToLocalTime(); - - return localDateTime; - } - } -} diff --git a/src/Extensions/JsonExtensions.cs b/src/Extensions/JsonExtensions.cs new file mode 100644 index 00000000..b130c080 --- /dev/null +++ b/src/Extensions/JsonExtensions.cs @@ -0,0 +1,25 @@ +namespace WhMgr.Extensions +{ + using System.Text.Json; + using System.Text.Json.Serialization; + + public static class JsonExtensions + { + private static readonly JsonSerializerOptions _jsonOptions = new() + { + PropertyNameCaseInsensitive = true, + AllowTrailingCommas = true, + WriteIndented = true, + ReadCommentHandling = JsonCommentHandling.Skip, + //PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + //IgnoreReadOnlyProperties = true, + //DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + }; + + public static T FromJson(this string json) => + JsonSerializer.Deserialize(json, _jsonOptions); + + public static string ToJson(this T obj) => + JsonSerializer.Serialize(obj, _jsonOptions); + } +} \ No newline at end of file diff --git a/src/Extensions/LoggingExtensions.cs b/src/Extensions/LoggingExtensions.cs new file mode 100644 index 00000000..252f8803 --- /dev/null +++ b/src/Extensions/LoggingExtensions.cs @@ -0,0 +1,85 @@ +namespace WhMgr.Extensions +{ + using System; + + using Microsoft.Extensions.Logging; + + public static partial class LoggingExtensions + { + // Current log level + private static readonly LogLevel _logLevel = Startup.Config.LogLevel; + + public static void Trace(this ILogger logger, string message, params object[] args) + { + if (!IsLogLevel(_logLevel, LogLevel.Trace)) + return; + + logger.LogTrace(message, args); + } + + public static void Debug(this ILogger logger, string message, params object[] args) + { + if (!IsLogLevel(_logLevel, LogLevel.Debug)) + return; + + logger.LogDebug(message, args); + } + + public static void Error(this ILogger logger, string message, params object[] args) + { + if (!IsLogLevel(_logLevel, LogLevel.Error)) + return; + + logger.LogError(message, args); + } + + public static void Error(this ILogger logger, Exception error, string message, params object[] args) + { + if (!IsLogLevel(_logLevel, LogLevel.Error)) + return; + + logger.LogError(error, message, args); + } + + public static void Warning(this ILogger logger, string message, params object[] args) + { + if (!IsLogLevel(_logLevel, LogLevel.Warning)) + return; + + logger.LogWarning(message, args); + } + + public static void Information(this ILogger logger, string message, params object[] args) + { + if (!IsLogLevel(_logLevel, LogLevel.Information)) + return; + + logger.LogInformation(message, args); + } + + public static void Critical(this ILogger logger, string message, params object[] args) + { + if (!IsLogLevel(_logLevel, LogLevel.Critical)) + return; + + logger.LogCritical(message, args); + } + + public static void Critical(this ILogger logger, Exception error, string message, params object[] args) + { + if (!IsLogLevel(_logLevel, LogLevel.Critical)) + return; + + logger.LogCritical(error, message, args); + } + + private static bool IsLogLevel(LogLevel logLevel, LogLevel expectedLogLevel) + { + /* + if (Startup.Config.LogLevel < LogLevel.Debug || Startup.Config.LogLevel == LogLevel.None) + return; + */ + return logLevel <= expectedLogLevel && logLevel != LogLevel.None; + } + } +} \ No newline at end of file diff --git a/src/Extensions/PokemonExtensions.cs b/src/Extensions/PokemonExtensions.cs index 1d1645da..c502d237 100644 --- a/src/Extensions/PokemonExtensions.cs +++ b/src/Extensions/PokemonExtensions.cs @@ -4,242 +4,165 @@ using System.Collections.Generic; using System.Linq; - using POGOProtos.Rpc; using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; using WeatherCondition = POGOProtos.Rpc.GameplayWeatherProto.Types.WeatherCondition; + using WhMgr.Common; using WhMgr.Data; - using WhMgr.Data.Models; - using WhMgr.Data.Subscriptions.Models; - using WhMgr.Net.Models; public static class PokemonExtensions { - public static int MaxCpAtLevel(this uint id, int level) + public static int GetCpAtLevel(this uint id, int level, int statValue = 10) { - if (!MasterFile.Instance.Pokedex.ContainsKey(id) || id == 0) + if (!GameMaster.Instance.Pokedex.ContainsKey(id) || id == 0) return 0; - var pkmn = MasterFile.Instance.Pokedex[id]; - var multiplier = MasterFile.Instance.CpMultipliers[level]; - var maxAtk = ((pkmn.Attack + 15) * multiplier) ?? 0; - var maxDef = ((pkmn.Defense + 15) * multiplier) ?? 0; - var maxSta = ((pkmn.Stamina + 15) * multiplier) ?? 0; - - return (int)Math.Max(10, Math.Floor(Math.Sqrt(maxAtk * maxAtk * maxDef * maxSta) / 10)); - } - - public static int MinCpAtLevel(this uint id, int level) - { - if (!MasterFile.Instance.Pokedex.ContainsKey(id) || id == 0) - return 0; - - var pkmn = MasterFile.Instance.Pokedex[id]; - var multiplier = MasterFile.Instance.CpMultipliers[level]; - var minAtk = ((pkmn.Attack + 10) * multiplier) ?? 0; - var minDef = ((pkmn.Defense + 10) * multiplier) ?? 0; - var minSta = ((pkmn.Stamina + 10) * multiplier) ?? 0; - - return (int)Math.Max(10, Math.Floor(Math.Sqrt(minAtk * minAtk * minDef * minSta) / 10)); + var pkmn = GameMaster.Instance.Pokedex[id]; + var multiplier = GameMaster.Instance.CpMultipliers[level]; + var maxAtk = ((pkmn.Attack + statValue) * multiplier) ?? 0; + var maxDef = ((pkmn.Defense + statValue) * multiplier) ?? 0; + var maxSta = ((pkmn.Stamina + statValue) * multiplier) ?? 0; + var cp = Convert.ToInt32(Math.Max(10, Math.Floor(Math.Sqrt(maxAtk * maxAtk * maxDef * maxSta) / 10))); + return cp; } public static bool IsCommonPokemon(this uint pokeId) { - return MasterFile.Instance.PokemonRarity[PokemonRarity.Common].Contains(pokeId); + return GameMaster.Instance.PokemonRarity[PokemonRarity.Common].Contains(pokeId); } public static bool IsRarePokemon(this uint pokeId) { - return MasterFile.Instance.PokemonRarity[PokemonRarity.Rare].Contains(pokeId); + return GameMaster.Instance.PokemonRarity[PokemonRarity.Rare].Contains(pokeId); } - public static PokemonSize GetSize(this uint id, float height, float weight) + public static PokemonSize GetSize(this uint id, double height, double weight) { - if (!MasterFile.Instance.Pokedex.ContainsKey(id)) + if (!GameMaster.Instance.Pokedex.ContainsKey(id)) return PokemonSize.Normal; - var stats = MasterFile.Instance.Pokedex[id]; + var stats = GameMaster.Instance.Pokedex[id]; var weightRatio = weight / Convert.ToDouble(stats?.Weight ?? 0); var heightRatio = height / Convert.ToDouble(stats?.Height ?? 0); var size = heightRatio + weightRatio; - if (size < 1.5) return PokemonSize.Tiny; + if (size < 1.5) return PokemonSize.Tiny; if (size <= 1.75) return PokemonSize.Small; - if (size < 2.25) return PokemonSize.Normal; - if (size <= 2.5) return PokemonSize.Large; + if (size < 2.25) return PokemonSize.Normal; + if (size <= 2.5) return PokemonSize.Large; return PokemonSize.Big; } public static string GetPokemonGenderIcon(this Gender gender) { - switch (gender) + return gender switch { - case Gender.Male: - return "♂"; //♂ \u2642 - case Gender.Female: - return "♀"; //♀ \u2640 - default: - return "⚲"; //⚲ - } + Gender.Male => "♂", //♂ \u2642 + Gender.Female => "♀", //♀ \u2640 + _ => "⚲", //⚲ + }; } public static List GetStrengths(this PokemonType type) { - if (MasterFile.Instance.PokemonTypes.ContainsKey(type)) + if (GameMaster.Instance.PokemonTypes.ContainsKey(type)) { - return MasterFile.Instance.PokemonTypes[type].Strengths; + return GameMaster.Instance.PokemonTypes[type].Strengths; } return new List(); } public static List GetWeaknesses(this PokemonType type) { - if (MasterFile.Instance.PokemonTypes.ContainsKey(type)) + if (GameMaster.Instance.PokemonTypes.ContainsKey(type)) { - return MasterFile.Instance.PokemonTypes[type].Weaknesses; + return GameMaster.Instance.PokemonTypes[type].Weaknesses; } return new List(); - } + } public static string GetTypeEmojiIcons(this PokemonType pokemonType) { return GetTypeEmojiIcons(new List { pokemonType }); } - public static string GetTypeEmojiIcons(this List pokemonTypes) + public static string GetTypeEmojiIcons(this IEnumerable pokemonTypes) { var list = new List(); foreach (var type in pokemonTypes) { - var emojiKey = $"types_{type.ToString().ToLower()}"; - //if (!MasterFile.Instance.Emojis.ContainsKey(emojiKey)) - // continue; - - var emojiId = MasterFile.Instance.Emojis[emojiKey]; - var emojiName = string.IsNullOrEmpty(MasterFile.Instance.CustomEmojis[emojiKey]) - ? emojiId > 0 - ? string.Format(Strings.TypeEmojiSchema, type.ToString().ToLower(), emojiId) - : type.ToString() - : MasterFile.Instance.CustomEmojis[emojiKey]; + var emojiName = type.GetEmojiIcon("types", true); if (!list.Contains(emojiName)) { list.Add(emojiName); } } - return string.Join(" ", list); } - public static string GetEmojiIcon(this T type, string keyPrefix, bool asString, string emojiSchema = Strings.EmojiSchema) + public static string GetEmojiIcon(this T type, string keyPrefix, bool asString, string defaultValue = null) { - var key = $"{keyPrefix}_"; - if (asString) - key += type.ToString().ToLower(); - else - key += Convert.ToInt32(type); - var emojiId = MasterFile.Instance.Emojis.ContainsKey(key) ? MasterFile.Instance.Emojis[key] : 0; - var emojiName = string.IsNullOrEmpty(MasterFile.Instance.CustomEmojis[key]) - ? emojiId > 0 - ? string.Format(emojiSchema, key, emojiId) - : type.ToString() - : MasterFile.Instance.CustomEmojis[key]; - return emojiName; - } + var value = asString ? type.ToString().ToLower() : Convert.ToInt32(type).ToString(); + var key = string.IsNullOrEmpty(keyPrefix) ? value : $"{keyPrefix}_{value}"; + var emojiId = GameMaster.Instance.Emojis.ContainsKey(key) + ? GameMaster.Instance.Emojis[key] + : 0; - /* - public static string GetWeatherEmojiIcon(this WeatherCondition weather) - { - var key = $"weather_{Convert.ToInt32(weather)}"; - var emojiId = MasterFile.Instance.Emojis[key]; - var emojiName = emojiId > 0 ? string.Format(Strings.EmojiSchema, key, emojiId) : weather.ToString(); - return emojiName; - } + if (emojiId == 0) + { + Console.WriteLine($"Emoji '{key}' does not exist! Using fallback text."); + } - public static string GetCaptureRateEmojiIcon(this CaptureRateType type) - { - var key = $"capture_{Convert.ToInt32(type)}"; - var emojiId = MasterFile.Instance.Emojis[key]; - var emojiName = string.IsNullOrEmpty(MasterFile.Instance.CustomEmojis[key]) + // Check if custom emoji list contains specified emoji string or if custom emoji is not overwritten. + var emojiName = !GameMaster.Instance.CustomEmojis.ContainsKey(key) || string.IsNullOrEmpty(GameMaster.Instance.CustomEmojis[key]) + // Check if we retrieved Discord emoji successfully ? emojiId > 0 - ? string.Format(Strings.EmojiSchema, key, emojiId) + // Construct Discord emoji string + ? string.Format(Strings.Defaults.EmojiSchema, key, emojiId) + // Fallback to text instead of emoji : type.ToString() - : MasterFile.Instance.CustomEmojis[key]; - return emojiName; + // Custom emoji is set which overwrites Discord emojis + : GameMaster.Instance.CustomEmojis[key] ?? type.ToString(); + var result = !string.IsNullOrEmpty(emojiName) + ? emojiName + : defaultValue; + return result; } - public static string GetLeagueEmojiIcon(this PvPLeague league) - { - var key = $"league_{league.ToString().ToLower()}"; - var emojiId = MasterFile.Instance.Emojis[key]; - var emojiName = string.IsNullOrEmpty(MasterFile.Instance.CustomEmojis[key]) - ? emojiId > 0 - ? string.Format(Strings.EmojiSchema, key, emojiId) - : league.ToString() - : MasterFile.Instance.CustomEmojis[key]; - return emojiName; - } - - public static string GetGenderEmojiIcon(this Gender gender) - { - var key = $"gender_{gender.ToString().ToLower()}"; - var emojiId = MasterFile.Instance.Emojis[key]; - var emojiName = string.IsNullOrEmpty(MasterFile.Instance.CustomEmojis[key]) - ? emojiId > 0 - ? string.Format(Strings.EmojiSchema, key, emojiId) - : gender.ToString() - : MasterFile.Instance.CustomEmojis[key]; - return emojiName; - } - */ - public static string GetWeaknessEmojiIcons(this List pokemonTypes) { if (pokemonTypes == null || pokemonTypes?.Count == 0) return string.Empty; - var list = new List(); - foreach (var type in pokemonTypes) + var list = new List(); + pokemonTypes.ForEach(type => { - var weaknesses = type.ToString().StringToObject().GetWeaknesses().Distinct(); - foreach (var weakness in weaknesses) - { - var typeKey = $"types_{weakness.ToString().ToLower()}"; - var emojiId = MasterFile.Instance.Emojis[typeKey]; - var emojiName = string.IsNullOrEmpty(MasterFile.Instance.CustomEmojis[typeKey]) - ? emojiId > 0 - ? string.Format(Strings.TypeEmojiSchema, weakness.ToString().ToLower(), emojiId) - : weakness.ToString() - : MasterFile.Instance.CustomEmojis[typeKey]; - if (!list.Contains(emojiName)) - { - list.Add(emojiName); - } - } - } - - return string.Join(" ", list); + list.AddRange(type.ToString().StringToObject().GetWeaknesses().Distinct()); + }); + var emojis = list.GetTypeEmojiIcons(); + return emojis; } - public static uint PokemonIdFromName(this string name) + public static uint PokemonIdFromName(this string nameOrId) { - if (string.IsNullOrEmpty(name)) + if (string.IsNullOrEmpty(nameOrId)) return 0; - var pkmn = int.TryParse(name, out var id) - ? MasterFile.Instance.Pokedex.FirstOrDefault(x => x.Key == id) - : MasterFile.Instance.Pokedex.FirstOrDefault(x => string.Compare(x.Value.Name, name, true) == 0); + var pkmn = uint.TryParse(nameOrId, out var id) + ? GameMaster.Instance.Pokedex.FirstOrDefault(pokemon => pokemon.Key == id) + : GameMaster.Instance.Pokedex.FirstOrDefault(pokemon => string.Compare(pokemon.Value.Name, nameOrId, true) == 0); if (pkmn.Key > 0) return pkmn.Key; - foreach (var p in MasterFile.Instance.Pokedex) - if (p.Value.Name.ToLower().Contains(name.ToLower())) + foreach (var p in GameMaster.Instance.Pokedex) + if (p.Value.Name.ToLower().Contains(nameOrId.ToLower())) return p.Key; - if (!uint.TryParse(name, out var pokeId)) + if (!uint.TryParse(nameOrId, out var pokeId)) return 0; - if (MasterFile.Instance.Pokedex.ContainsKey(pokeId)) + if (GameMaster.Instance.Pokedex.ContainsKey(pokeId)) return pokeId; return 0; @@ -256,25 +179,23 @@ public static PokemonValidation ValidatePokemon(this IEnumerable pokemon var pokeId = pokeIdStr.PokemonIdFromName(); if (pokeId == 0) { - if (poke.Contains("-")) - { - //Has form - var formSplit = poke.Split('-'); - if (formSplit.Length != 2) - continue; - - pokeIdStr = formSplit[0]; - pokeId = pokeIdStr.PokemonIdFromName(); - form = formSplit[1]; - } - else + if (!poke.Contains("-")) { invalid.Add(poke); continue; } + + //Has form + var formSplit = poke.Split('-'); + if (formSplit.Length != 2) + continue; + + pokeIdStr = formSplit[0]; + pokeId = pokeIdStr.PokemonIdFromName(); + form = formSplit[1]; } - if (!MasterFile.Instance.Pokedex.ContainsKey(pokeId)) + if (!GameMaster.Instance.Pokedex.ContainsKey(pokeId)) { invalid.Add(poke); continue; @@ -292,16 +213,17 @@ public static PokemonValidation ValidatePokemon(this IEnumerable pokemon public static bool IsWeatherBoosted(this PokedexPokemon pkmn, WeatherCondition weather) { var types = pkmn?.Types; - var isBoosted = types?.Exists(x => Strings.WeatherBoosts[weather].Contains(x)) ?? false; + var boosts = Strings.Defaults.WeatherBoosts[weather]; + var isBoosted = types?.Exists(type => boosts.Contains(type)) ?? false; return isBoosted; } } public class PokemonValidation { - public Dictionary Valid { get; set; } + public IReadOnlyDictionary Valid { get; set; } - public List Invalid { get; set; } + public IReadOnlyList Invalid { get; set; } public PokemonValidation() { @@ -309,50 +231,51 @@ public PokemonValidation() Invalid = new List(); } - public static PokemonValidation Validate(string pokemonList, uint maxPokemonId)// = 999) + public static PokemonValidation Validate(string pokemonList, int maxPokemonId)// = 999) { if (string.IsNullOrEmpty(pokemonList)) return null; pokemonList = pokemonList.Replace(" ", ""); + var generations = Strings.Defaults.PokemonGenerationRanges; PokemonValidation validation; - if (pokemonList.Contains("-") && uint.TryParse(pokemonList.Split('-')[0], out var startRange) && uint.TryParse(pokemonList.Split('-')[1], out var endRange)) + if (pokemonList.Contains("-") && int.TryParse(pokemonList.Split('-')[0], out var startRange) && int.TryParse(pokemonList.Split('-')[1], out var endRange)) { - //If `poke` param is a range + // If `poke` param is a range var range = GetListFromRange(startRange, endRange); validation = range.ValidatePokemon(); } - else if (Strings.PokemonGenerationRanges.Select(x => "gen" + x.Key).ToList().Contains(pokemonList)) + else if (generations.Select(gen => "gen" + gen.Key).ToList().Contains(pokemonList)) { - //If `poke` is pokemon generation - if (!int.TryParse(pokemonList.Replace("gen", ""), out var gen) || !Strings.PokemonGenerationRanges.ContainsKey(gen)) + // If `poke` is pokemon generation + if (!int.TryParse(pokemonList.Replace("gen", ""), out var gen) || !generations.ContainsKey(gen)) { - var keys = Strings.PokemonGenerationRanges.Keys.ToList(); + var keys = generations.Keys.ToList(); var minValue = keys[0]; - var maxValue = keys[keys.Count - 1]; + var maxValue = keys[^1]; return null; } - var genRange = Strings.PokemonGenerationRanges[gen]; - var range = GetListFromRange((uint)genRange.Start, (uint)genRange.End); + var genRange = generations[gen]; + var range = GetListFromRange(genRange.Start, genRange.End); validation = range.ValidatePokemon(); } - else if (string.Compare(pokemonList, Strings.All, true) == 0) + else if (string.Compare(pokemonList, Strings.Defaults.All, true) == 0) { var list = GetListFromRange(1, maxPokemonId); validation = list.ValidatePokemon(); } else { - //If `poke` param is a list + // If `poke` param is a list validation = pokemonList.Replace(" ", "").Split(',').ValidatePokemon(); } return validation; } - public static List GetListFromRange(uint startRange, uint endRange) + public static List GetListFromRange(int startRange, int endRange) { var list = new List(); for (; startRange <= endRange; startRange++) @@ -362,4 +285,4 @@ public static List GetListFromRange(uint startRange, uint endRange) return list; } } -} +} \ No newline at end of file diff --git a/src/Extensions/PvpExtensions.cs b/src/Extensions/PvpExtensions.cs new file mode 100644 index 00000000..d23a3f8b --- /dev/null +++ b/src/Extensions/PvpExtensions.cs @@ -0,0 +1,126 @@ +namespace WhMgr.Extensions +{ + using System; + using System.Collections.Generic; + using System.Linq; + + using DSharpPlus.Entities; + + using WhMgr.Common; + using WhMgr.Configuration; + using WhMgr.Data; + using WhMgr.Localization; + using WhMgr.Services.Webhook.Models; + + public static class PvpExtensions + { + /// + /// Build Pokemon evolution IDs list + /// + /// + /// + public static List GetPokemonEvolutionIds(this PokedexPokemon pkmn, bool includeBasePokemon = true) + { + var pokemonIds = includeBasePokemon + ? new List { includeBasePokemon ? pkmn.PokedexId : 0 } + : new List(); + + if ((pkmn?.Evolutions?.Count ?? 0) == 0) + return pokemonIds; + + void GetEvolutionIds(List evolutions) + { + foreach (var evolution in evolutions) + { + pokemonIds.Add(evolution.PokemonId); + var pokemon = GameMaster.GetPokemon(evolution.PokemonId, evolution.FormId); + if (pokemon == null) + continue; + + if (pokemon.Evolutions?.Count > 0) + { + GetEvolutionIds(pokemon.Evolutions); + } + } + } + + GetEvolutionIds(pkmn.Evolutions); + pokemonIds = pokemonIds.Distinct().ToList(); + return pokemonIds; + } + + public static Dictionary> GetLeagueRanks(this PokemonData pokemon) + { + var dict = new Dictionary>(); + if (!pokemon.HasPvpRankings) + { + return dict; + } + + var validPvpLeagues = Startup.Config.PvpLeagues; + // Loop all available PvP leagues for Pokemon + foreach (var (pokemonPvpLeague, pokemonPvpRanks) in pokemon.PvpRankings) + { + // Skip if Pokemon's PvP ranking league is not allowed and/or not set in config + if (!validPvpLeagues.ContainsKey(pokemonPvpLeague)) + continue; + + // Loop all PvP rankings for league + foreach (var pvp in pokemonPvpRanks) + { + var pvpConfig = validPvpLeagues[pokemonPvpLeague]; + var withinCpRange = pvp.CP >= pvpConfig.MinimumCP && pvp.CP <= pvpConfig.MaximumCP; + var withinRankRange = pvp.Rank >= pvpConfig.MinimumRank && pvp.Rank <= pvpConfig.MaximumRank; + if (pvp.Rank == 0 || (!withinCpRange && !withinRankRange)) + continue; + + if (!GameMaster.Instance.Pokedex.ContainsKey(pvp.PokemonId)) + { + Console.WriteLine($"Pokemon database does not contain pokemon id {pvp.PokemonId}"); + continue; + } + if (pvp.Rank.HasValue && pvp.Rank.Value <= pvpConfig.MaximumRank && + pvp.Percentage.HasValue && + pvp.Level.HasValue && + pvp.CP.HasValue && pvp.CP <= pvpConfig.MaximumCP) + { + pvp.Percentage = Math.Round(pvp.Percentage.Value, 2); + if (dict.ContainsKey(pokemonPvpLeague)) + { + dict[pokemonPvpLeague].Add(pvp); + } + else + { + dict.Add(pokemonPvpLeague, new List { pvp }); + } + } + } + } + // TODO: dict.Sort((a, b) => a.Rank.Value.CompareTo(b.Rank.Value)); + return dict; + } + + public static DiscordColor GetPvPColor(this DiscordEmbedColorsConfig config, Dictionary> rankings) + { + const ushort maxRank = 25; + var matchedRank = rankings?.FirstOrDefault(league => + { + return league.Value?.Exists(leagueConfig => + leagueConfig.Rank > 0 && + leagueConfig.Rank <= maxRank && + leagueConfig.CP >= Strings.Defaults.Pvp[league.Key].MinimumLeagueCP && + leagueConfig.CP <= Strings.Defaults.Pvp[league.Key].MaximumLeagueCP + ) ?? false; + }).Value?.FirstOrDefault(); + var color = config.Pokemon.PvP.FirstOrDefault(pvp => + (matchedRank?.Rank ?? 0) >= pvp.Minimum && + (matchedRank?.Rank ?? 0) <= pvp.Maximum + ); + if (color == null) + { + return DiscordColor.White; + } + return new DiscordColor(color.Color); + } + } +} \ No newline at end of file diff --git a/src/Extensions/QuestExtensions.cs b/src/Extensions/QuestExtensions.cs index a7bcd547..040656cf 100644 --- a/src/Extensions/QuestExtensions.cs +++ b/src/Extensions/QuestExtensions.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; + using System.Web; using POGOProtos.Rpc; using AlignmentId = POGOProtos.Rpc.PokemonDisplayProto.Types.Alignment; @@ -11,12 +12,15 @@ using QuestConditionType = POGOProtos.Rpc.QuestConditionProto.Types.ConditionType; using QuestRewardType = POGOProtos.Rpc.QuestRewardProto.Types.Type; - using WhMgr.Data.Models; + using WhMgr.Common; using WhMgr.Localization; - using WhMgr.Net.Models; + using WhMgr.Services.Webhook.Models; + using WhMgr.Services.Webhook.Models.Quests; public static class QuestExtensions { + #region Quest Message + public static string GetQuestMessage(this QuestData quest) { return GetQuestMessage(quest.Type, quest.Target); @@ -24,9 +28,16 @@ public static string GetQuestMessage(this QuestData quest) public static string GetQuestMessage(this QuestType type, int target) { - return Translator.Instance.Translate("quest_" + Convert.ToInt32(type), target); + return Translator.Instance.Translate("quest_" + Convert.ToInt32(type)).FormatText(new + { + amount = target, + }); } + #endregion + + #region Quest Conditions + public static string GetConditions(this QuestData quest) { return GetConditions(quest.Conditions); @@ -59,28 +70,127 @@ public static string GetConditions(this List conditions) public static string GetCondition(this QuestConditionMessage condition) { + var throwTypes = new[] + { + HoloActivityType.ActivityCatchFirstThrow, + HoloActivityType.ActivityCatchNiceThrow, + HoloActivityType.ActivityCatchGreatThrow, + HoloActivityType.ActivityCatchExcellentThrow, + }; var conditionKey = "quest_condition_" + Convert.ToInt32(condition.Type); switch (condition.Type) { case QuestConditionType.WithPokemonCategory: - return string.Join(", ", condition.Info.PokemonIds?.Select(x => Translator.Instance.GetPokemonName(x)).ToList()); + if (condition.Info.PokemonIds?.Any() ?? false) + { + var pokemon = condition.Info.PokemonIds.Select(Translator.Instance.GetPokemonName); + return Translator.Instance.Translate(conditionKey + "_formatted").FormatText(new + { + pokemon = string.Join(", ", pokemon), + }); + } + return Translator.Instance.Translate(conditionKey); case QuestConditionType.WithPokemonType: - return string.Join(", ", condition.Info.PokemonTypeIds?.Select(x => Convert.ToString((PokemonType)x))) + "-type"; - case QuestConditionType.WithQuestContext: - break; + if (condition.Info.PokemonTypeIds?.Any() ?? false) + { + var types = condition.Info.PokemonTypeIds.Select(typeId => Convert.ToString((PokemonType)typeId)); + return Translator.Instance.Translate(conditionKey + "_formatted").FormatText(new + { + types = string.Join(", ", types), + }); + } + return Translator.Instance.Translate(conditionKey); case QuestConditionType.WithRaidLevel: - return Translator.Instance.Translate(conditionKey, string.Join(", ", condition.Info.RaidLevels)); - case QuestConditionType.WithSuperEffectiveCharge: + if (condition.Info.RaidLevels?.Any() ?? false) + { + return Translator.Instance.Translate(conditionKey + "_formatted").FormatText(new + { + levels = string.Join(", ", condition.Info.RaidLevels), + }); + } + return Translator.Instance.Translate(conditionKey); case QuestConditionType.WithThrowType: - return Translator.Instance.GetThrowName(condition.Info.ThrowTypeId); case QuestConditionType.WithThrowTypeInARow: - return Translator.Instance.Translate(conditionKey, Translator.Instance.GetThrowName(condition.Info.ThrowTypeId)); + if (throwTypes.Contains(condition.Info.ThrowTypeId)) + { + return Translator.Instance.Translate(conditionKey + "_formatted").FormatText(new + { + throw_type = Translator.Instance.GetThrowName(condition.Info.ThrowTypeId), + }); + } + return Translator.Instance.Translate(conditionKey); + case QuestConditionType.WithPokemonAlignment: + if (condition.Info.AlignmentIds?.Any() ?? false) + { + var alignments = condition.Info.AlignmentIds.Select(alignmentId => Translator.Instance.GetAlignmentName((AlignmentId)alignmentId)); + return Translator.Instance.Translate(conditionKey + "_formatted").FormatText(new + { + alignments = string.Join(", ", alignments), + }); + } + return Translator.Instance.Translate(conditionKey); + case QuestConditionType.WithInvasionCharacter: + if (condition.Info.CharacterCategoryIds?.Any() ?? false) + { + var categories = condition.Info.CharacterCategoryIds.Select(categoryId => Translator.Instance.GetCharacterCategoryName((CharacterCategory)categoryId)); + return Translator.Instance.Translate(conditionKey + "_formatted").FormatText(new + { + categories = string.Join(", ", categories), + }); + } + return Translator.Instance.Translate(conditionKey); + case QuestConditionType.WithTempEvoPokemon: // Mega evo + if (condition.Info.RaidPokemonEvolutions?.Any() ?? false) + { + var evolutions = condition.Info.RaidPokemonEvolutions.Select(evolutionId => Translator.Instance.GetEvolutionName((TemporaryEvolutionId)evolutionId)); + return Translator.Instance.Translate(conditionKey + "_formatted").FormatText(new + { + evolutions = string.Join(", ", evolutions), + }); + } + return Translator.Instance.Translate(conditionKey); + case QuestConditionType.WithPokemonLevel: + if (condition.Info.MaxLevel > 0) + { + return Translator.Instance.Translate(conditionKey + "_formatted").FormatText(new + { + must_be_max_level = condition.Info.MaxLevel, + }); + } + return Translator.Instance.Translate(conditionKey); + case QuestConditionType.WithMaxCp: + if (condition.Info.MaxCp > 0) + { + return Translator.Instance.Translate(conditionKey + "_formatted").FormatText(new + { + max_cp = condition.Info.MaxCp, + }); + } + return Translator.Instance.Translate(conditionKey); + case QuestConditionType.WithGblRank: + if (condition.Info.GblRank > 0) + { + return Translator.Instance.Translate(conditionKey + "_formatted").FormatText(new + { + rank = condition.Info.GblRank, + }); + } + return Translator.Instance.Translate(conditionKey); + case QuestConditionType.WithEncounterType: + //if (condition.Info.EncounterType?.Any() ?? false) + //{ + // return Translator.Instance.Translate(conditionKey + "_formatted", new { encounter_type = string.Join(", ", condition.Info.EncounterType) }); + //} + //return Translator.Instance.Translate(conditionKey); + case QuestConditionType.WithLuckyPokemon: + case QuestConditionType.WithQuestContext: case QuestConditionType.WithBadgeType: case QuestConditionType.WithCurveBall: case QuestConditionType.WithDailyCaptureBonus: case QuestConditionType.WithDailySpinBonus: case QuestConditionType.WithDaysInARow: case QuestConditionType.WithItem: + case QuestConditionType.WithSuperEffectiveCharge: case QuestConditionType.WithNewFriend: case QuestConditionType.WithPlayerLevel: case QuestConditionType.WithUniquePokestop: @@ -91,40 +201,43 @@ public static string GetCondition(this QuestConditionMessage condition) case QuestConditionType.WithUniquePokemon: case QuestConditionType.WithNpcCombat: case QuestConditionType.WithPvpCombat: + case QuestConditionType.WithCombatType: case QuestConditionType.WithLocation: case QuestConditionType.WithDistance: case QuestConditionType.WithBuddy: + case QuestConditionType.WithSingleDay: + case QuestConditionType.WithUniquePokemonTeam: + case QuestConditionType.WithLegendaryPokemon: + case QuestConditionType.WithGeotargetedPoi: + case QuestConditionType.WithFriendLevel: + case QuestConditionType.WithSticker: + case QuestConditionType.WithBuddyInterestingPoi: default: return Translator.Instance.Translate(conditionKey); - case QuestConditionType.WithPokemonAlignment: - return string.Join(", ", condition.Info.AlignmentIds?.Select(x => Translator.Instance.GetAlignmentName((AlignmentId)x))); - case QuestConditionType.WithInvasionCharacter: - return string.Join(", ", condition.Info.CharacterCategoryIds?.Select(x => Translator.Instance.GetCharacterCategoryName((CharacterCategory)x))); - case QuestConditionType.WithTempEvoPokemon: // Mega evo - return string.Join(", ", condition.Info.RaidPokemonEvolutions?.Select(x => Translator.Instance.GetEvolutionName((TemporaryEvolutionId)x))); } - - return null; } + #endregion + + #region Quest Reward + public static string GetReward(this QuestData quest) { - return GetReward(quest.Rewards?.FirstOrDefault()); + var encoded = GetReward(quest.Rewards?.FirstOrDefault()); + var decoded = HttpUtility.HtmlDecode(encoded); + return decoded; } public static string GetReward(this QuestRewardMessage reward) { - return GetReward(reward.Type, reward.Info); - } - - public static string GetReward(this Pokestop pokestop) - { - return pokestop.QuestRewards?.FirstOrDefault()?.GetReward(); + var encoded = GetReward(reward.Type, reward.Info); + var decoded = HttpUtility.HtmlDecode(encoded); + return decoded; } public static string GetReward(this QuestRewardType type, QuestReward info) { - var rewardKey = "quest_reward_" + Convert.ToInt32(type); + var rewardKey = $"quest_reward_{Convert.ToInt32(type)}_formatted"; switch (type) { case QuestRewardType.AvatarClothing: @@ -132,31 +245,70 @@ public static string GetReward(this QuestRewardType type, QuestReward info) return Translator.Instance.Translate(rewardKey); case QuestRewardType.Candy: var name = Translator.Instance.GetPokemonName(info.Ditto ? 132 : info.PokemonId); - return Translator.Instance.Translate(rewardKey, info.Amount, name); + return Translator.Instance.Translate(rewardKey).FormatText(new + { + amount = info.Amount, + pokemon = name, + }); case QuestRewardType.Experience: - return Translator.Instance.Translate(rewardKey, info.Amount); + return Translator.Instance.Translate(rewardKey).FormatText(new + { + amount = info.Amount, + }); case QuestRewardType.Item: var itemName = Translator.Instance.GetItem(info.Item); - return Translator.Instance.Translate(rewardKey, info.Amount, itemName); + return Translator.Instance.Translate(rewardKey).FormatText(new + { + amount = info.Amount, + item = itemName, + }); case QuestRewardType.PokemonEncounter: var formName = info.FormId > 0 ? Translator.Instance.GetFormName(info.FormId) : null; + // TODO: Localize **SHINY** var pkmnName = (info.Shiny ? $"**SHINY** " : "") + Translator.Instance.GetPokemonName(info.Ditto ? 132 : info.PokemonId); return $"{pkmnName} {formName}"; case QuestRewardType.Stardust: - return Translator.Instance.Translate(rewardKey, info.Amount); + return Translator.Instance.Translate(rewardKey).FormatText(new + { + amount = info.Amount, + }); case QuestRewardType.MegaResource: - return Translator.Instance.Translate(rewardKey, info.PokemonId, info.Amount); - case QuestRewardType.XlCandy: // TODO: By PokemonId? - return Translator.Instance.Translate(rewardKey, info.Amount); + return Translator.Instance.Translate(rewardKey).FormatText(new + { + pokemon = Translator.Instance.GetPokemonName(info.PokemonId), + amount = info.Amount, + }); + case QuestRewardType.XlCandy: + if (info.PokemonId > 0) + { + return Translator.Instance.Translate(rewardKey).FormatText(new + { + pokemon = Translator.Instance.GetPokemonName(info.PokemonId), + amount = info.Amount, + }); + } + return Translator.Instance.Translate(rewardKey).FormatText(new + { + amount = info.Amount, + }); case QuestRewardType.Sticker: - return Translator.Instance.Translate(rewardKey, info.StickerId, info.Amount); + return Translator.Instance.Translate(rewardKey).FormatText(new + { + sticker_id = info.StickerId, + amount = info.Amount, + }); case QuestRewardType.Pokecoin: - return Translator.Instance.Translate(rewardKey, info.Amount); + return Translator.Instance.Translate(rewardKey).FormatText(new + { + amount = info.Amount, + }); case QuestRewardType.LevelCap: return type.ToString(); } return "Unknown"; } + + #endregion } -} +} \ No newline at end of file diff --git a/src/Extensions/QueueExtensions.cs b/src/Extensions/QueueExtensions.cs new file mode 100644 index 00000000..84aa52c2 --- /dev/null +++ b/src/Extensions/QueueExtensions.cs @@ -0,0 +1,15 @@ +namespace WhMgr.Extensions +{ + using System.Collections.Generic; + + public static class QueueExtensions + { + public static IEnumerable DequeueChunk(this Queue queue, int chunkSize) + { + for (var i = 0; i < chunkSize && queue.Count > 0; i++) + { + yield return queue.Dequeue(); + } + } + } +} \ No newline at end of file diff --git a/src/Extensions/ReflectionExtensions.cs b/src/Extensions/ReflectionExtensions.cs new file mode 100644 index 00000000..d248eacb --- /dev/null +++ b/src/Extensions/ReflectionExtensions.cs @@ -0,0 +1,19 @@ +namespace WhMgr.Extensions +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Reflection; + + public static class ReflectionExtensions + { + public static IDictionary AsDictionary(this object source, BindingFlags bindingAttr = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance) + { + return source.GetType().GetProperties(bindingAttr).ToDictionary + ( + propInfo => propInfo.Name.ToCamelCase(), + propInfo => propInfo.GetValue(source, null) + ); + } + } +} \ No newline at end of file diff --git a/src/Extensions/SqlExtensions.cs b/src/Extensions/SqlExtensions.cs deleted file mode 100644 index 6b328836..00000000 --- a/src/Extensions/SqlExtensions.cs +++ /dev/null @@ -1,36 +0,0 @@ -namespace WhMgr.Extensions -{ - using ServiceStack.OrmLite; - - using WhMgr.Data; - - public static class SqlExtensions - { - public static bool Remove(this int id) - { - using (var conn = DataAccessLayer.CreateFactory().Open()) - { - var result = conn.DeleteById(id); - return result == 1; - } - } - - public static bool Save(this T obj, bool references = true) - { - using (var conn = DataAccessLayer.CreateFactory().Open()) - { - var inserted = conn.Save(obj, references); - return inserted; - } - } - - public static bool Update(this T obj) - { - using (var conn = DataAccessLayer.CreateFactory().Open()) - { - var result = conn.Update(obj); - return result == 1; - } - } - } -} \ No newline at end of file diff --git a/src/Extensions/StaticMapExtensions.cs b/src/Extensions/StaticMapExtensions.cs new file mode 100644 index 00000000..f4a941b7 --- /dev/null +++ b/src/Extensions/StaticMapExtensions.cs @@ -0,0 +1,58 @@ +namespace WhMgr.Extensions +{ + using System; + using System.Threading.Tasks; + + using WhMgr.Common; + using WhMgr.Configuration; + using WhMgr.Services.Cache; + using WhMgr.Services.StaticMap; + using WhMgr.Services.Webhook.Models; + + public static class StaticMapExtensions + { + public static string GenerateStaticMap(this StaticMapConfig config, StaticMapType mapType, IWebhookPoint coord, string imageUrl, IMapDataCache cache = null, PokemonTeam? team = null, string polygonPath = null) + { + var url = GenerateStaticMapAsync(config, mapType, coord, imageUrl, cache, team, polygonPath).Result; + return url; + } + + public static async Task GenerateStaticMapAsync(this StaticMapConfig config, StaticMapType mapType, IWebhookPoint coord, string imageUrl, IMapDataCache cache = null, PokemonTeam? team = null, string polygonPath = null) + { + if (!(config?.Enabled ?? false)) + { + return string.Empty; + } + + if (string.IsNullOrEmpty(config.Url)) + { + return string.Empty; + } + + var staticMap = new StaticMapGenerator(new StaticMapOptions + { + BaseUrl = config.Url, + MapType = mapType, + TemplateType = config.Type, + Latitude = coord.Latitude, + Longitude = coord.Longitude, + SecondaryImageUrl = imageUrl, + Gyms = config.IncludeNearbyGyms && cache != null + // Fetch nearby gyms from MapDataCache + ? await cache?.GetGymsNearby(coord.Latitude, coord.Longitude) + : new(), + Pokestops = config.IncludeNearbyPokestops && cache != null + // Fetch nearby pokestops from MapDataCache + ? await cache?.GetPokestopsNearby(coord.Latitude, coord.Longitude) + : new(), + Team = team, + PolygonPath = polygonPath, + Pregenerate = config.Pregenerate, + Regeneratable = true, + }); + + var url = staticMap.GenerateLink(); + return url ?? string.Empty; + } + } +} \ No newline at end of file diff --git a/src/Extensions/StringExtensions.cs b/src/Extensions/StringExtensions.cs index 35530581..19e4d0f0 100644 --- a/src/Extensions/StringExtensions.cs +++ b/src/Extensions/StringExtensions.cs @@ -4,40 +4,14 @@ using System.Collections.Generic; using System.Linq; - using WhMgr.Diagnostics; + using HandlebarsDotNet; public static class StringExtensions { - private static readonly IEventLogger _logger = EventLogger.GetLogger("STRING_EXTENSIONS", Program.LogLevel); - - public static string FormatText(this string text, params object[] args) + public static string FormatText(this string text, dynamic args) { - try - { - var msg = text; - for (var i = 0; i < args.Length; i++) - { - if (string.IsNullOrEmpty(msg)) - continue; - - if (args == null) - continue; - - if (args[i] == null) - { - msg = msg.Replace("{" + i + "}", null); - continue; - } - - msg = msg.Replace("{" + i + "}", args[i].ToString()); - } - return msg; - } - catch (Exception ex) - { - _logger.Error(ex); - return string.Format(text, args); - } + var template = Handlebars.Compile(text); + return template(args); } public static IEnumerable SplitInParts(this string s, int partLength) @@ -61,5 +35,12 @@ public static List RemoveSpaces(this string value) .Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries) .ToList(); } + + public static string ToCamelCase(this string value) + { + var first = value[0].ToString().ToLower(); + var last = string.Concat(value.Skip(1)); + return first + last; + } } } \ No newline at end of file diff --git a/src/Extensions/TimeSpanExtensions.cs b/src/Extensions/TimeSpanExtensions.cs index b337b64b..5f230c7b 100644 --- a/src/Extensions/TimeSpanExtensions.cs +++ b/src/Extensions/TimeSpanExtensions.cs @@ -16,7 +16,7 @@ public static string ToReadableString(this TimeSpan span, bool shortForm = false ); if (formatted.EndsWith(", ", StringComparison.Ordinal)) - formatted = formatted.Substring(0, formatted.Length - 2); + formatted = formatted[0..^2]; if (string.IsNullOrEmpty(formatted)) formatted = "0 seconds"; diff --git a/src/Geofence/Location.cs b/src/Geofence/Location.cs deleted file mode 100644 index ee7ede5a..00000000 --- a/src/Geofence/Location.cs +++ /dev/null @@ -1,282 +0,0 @@ -namespace WhMgr.Geofence -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Net; - using System.Text; - - using NetTopologySuite.Geometries; - using Newtonsoft.Json; - using Newtonsoft.Json.Linq; - - using SmartFormat; - - using WhMgr.Configuration; - using WhMgr.Diagnostics; - - /// - /// NominatimReverseLookup class - /// - public partial class NominatimReverseLookup - { - [JsonProperty("place_id")] - public long PlaceId { get; set; } - - [JsonProperty("licence")] - public string Licence { get; set; } - - [JsonProperty("osm_type")] - public string OsmType { get; set; } - - [JsonProperty("osm_id")] - public long OsmId { get; set; } - - [JsonProperty("lat")] - public decimal Lat { get; set; } - - [JsonProperty("lon")] - public decimal Lon { get; set; } - - [JsonProperty("place_rank")] - public long PlaceRank { get; set; } - - [JsonProperty("category")] - public string Category { get; set; } - - [JsonProperty("type")] - public string Type { get; set; } - - [JsonProperty("importance")] - public long Importance { get; set; } - - [JsonProperty("addresstype")] - public string Addresstype { get; set; } - - [JsonProperty("name")] - public string Name { get; set; } - - [JsonProperty("display_name")] - public string DisplayName { get; set; } - - [JsonProperty("address")] - public NominatimAddress Address { get; set; } - - [JsonProperty("boundingbox")] - public decimal[] Boundingbox { get; set; } - } - - /// - /// NominatimAddress class - /// - public partial class NominatimAddress - { - [JsonProperty("house_number")] - public string HouseNumber { get; set; } - - [JsonProperty("road")] - public string Road { get; set; } - - [JsonProperty("neighbourhood")] - public string Neighbourhood { get; set; } - - [JsonProperty("suburb")] - public string Suburb { get; set; } - - [JsonProperty("town")] - private string Town { set { City = value; } } - - [JsonProperty("city")] - public string City { get; set; } - - [JsonProperty("state")] - public string State { get; set; } - - [JsonProperty("postcode")] - public string Postcode { get; set; } - - [JsonProperty("country")] - public string Country { get; set; } - - [JsonProperty("country_code")] - public string CountryCode { get; set; } - } - - public class LocationCache : Dictionary<(double, double), Location> - { - } - - /// - /// Geocoordinate location - /// - public class Location - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("LOCATION", Program.LogLevel); - private static readonly LocationCache _cache = new LocationCache(); - - /// - /// Gets or sets the address for the location - /// - public string Address { get; private set; } - - /// - /// Gets the city of the address - /// - public string City { get; } - - /// - /// Gets the geocoordinate latitude - /// - public double Latitude { get; } - - /// - /// Gets the geocoordinate longitude - /// - public double Longitude { get; } - - /// - /// Instantiates a new class - /// - /// Geocoordinate latitude - /// Geocoordinate longitude - public Location(double lat, double lng) - { - Latitude = lat; - Longitude = lng; - } - - /// - /// Instantiates a new class - /// - /// Address of geocoordinates - /// City of address - /// Geocoordinate latitude - /// Geocoordinate longitude - public Location(string address, string city, double lat, double lng) - { - Address = address; - City = city; - Latitude = lat; - Longitude = lng; - } - - /// - /// Gets the geolocation lookup of the current object. - /// - /// Config that includes the Google Maps key and OSM Nominatim endpoint - /// Returns a object containing the address - public Location GetAddress(WhConfig config) - { - var key = (Latitude, Longitude); - // Check if cache already contains lat/lon tuple key, if so return it. - if (_cache.ContainsKey(key)) - { - return _cache[key]; - } - - // Check if we want any reverse geocoding address - Location location = null; - if (!string.IsNullOrEmpty(config.GoogleMapsKey)) - { - location = GetGoogleAddress(City, Latitude, Longitude, config.GoogleMapsKey); - } - - if (!string.IsNullOrEmpty(config.NominatimEndpoint)) - { - location = GetNominatimAddress(City, Latitude, Longitude, config.NominatimEndpoint, config.NominatimSchema); - } - - // Check if lat/lon tuple key has not been cached already, if not add it. - if (!_cache.ContainsKey(key)) - { - _cache.Add(key, location); - } - return location; - } - - /// - /// Returns the string representation of class - /// - /// - public override string ToString() - { - return $"{Latitude}, {Longitude}"; - } - - public static implicit operator Coordinate(Location location) => new Coordinate(location.Longitude, location.Latitude); - - public static implicit operator Point(Location location) => new Point(location.Longitude, location.Latitude); - - /// - /// Queries Google Maps geolocation lookup endpoint - /// - /// Geofence specific city to associate with the returned address - /// Latitude to lookup - /// Longitude to lookup - /// Google Maps key - /// - private Location GetGoogleAddress(string city, double lat, double lng, string gmapsKey) - { - var apiKey = string.IsNullOrEmpty(gmapsKey) ? string.Empty : $"&key={gmapsKey}"; - var url = $"https://maps.googleapis.com/maps/api/geocode/json?latlng={lat},{lng}&sensor=true{apiKey}"; - var unknown = "Unknown"; - try - { - var request = (HttpWebRequest)WebRequest.Create(url); - var response = request.GetResponse(); - using (var responseStream = response.GetResponseStream()) - { - var reader = new StreamReader(responseStream, Encoding.UTF8); - var data = reader.ReadToEnd(); - var parseJson = JObject.Parse(data); - var status = Convert.ToString(parseJson["status"]); - if (string.Compare(status, "OK", true) != 0) - return null; - - var result = parseJson["results"].FirstOrDefault(); - var address = Convert.ToString(result["formatted_address"]); - //var area = Convert.ToString(result["address_components"][2]["long_name"]); - return new Location(address, city ?? unknown, lat, lng); - } - } - catch (Exception ex) - { - _logger.Error(ex); - } - return null; - } - - /// - /// Queries OpenStreetMaps Nominatim geolocation lookup endpoint - /// - /// Geofence specific city to associate with the returned address - /// Latitude to lookup - /// Longitude to lookup - /// Nominatim endpoint - /// Nominatim schema - /// - private Location GetNominatimAddress(string city, double lat, double lng, string endpoint, string nominatimSchema) - { - var unknown = "Unknown"; - var url = $"{endpoint}/reverse?format=jsonv2&lat={lat}&lon={lng}"; - try - { - using (var wc = new WebClient()) - { - wc.Proxy = null; - wc.Headers.Add("User-Agent", Strings.BotName); - var json = wc.DownloadString(url); - dynamic obj = JsonConvert.DeserializeObject(json); - var location_string = Smart.Format(nominatimSchema, obj); - return new Location(location_string, city ?? unknown, Convert.ToDouble(obj.Lat), Convert.ToDouble(obj.Lon)); - } - } - catch (Exception ex) - { - _logger.Error(ex); - } - return null; - } - } -} \ No newline at end of file diff --git a/src/HostedServices/MasterFileDownloadHostedService.cs b/src/HostedServices/MasterFileDownloadHostedService.cs new file mode 100644 index 00000000..68b662e4 --- /dev/null +++ b/src/HostedServices/MasterFileDownloadHostedService.cs @@ -0,0 +1,80 @@ +namespace WhMgr.HostedServices +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Threading; + using System.Threading.Tasks; + + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; + + using WhMgr.Data; + using WhMgr.Extensions; + using WhMgr.Utilities; + + public class MasterFileDownloaderHostedService : IHostedService, IDisposable + { + private readonly ILogger _logger; + private readonly Dictionary _tzMidnightTimers; + + public MasterFileDownloaderHostedService( + ILogger logger) + { + _tzMidnightTimers = new Dictionary(); + _logger = logger; + } + + public void Dispose() + { + _tzMidnightTimers.Clear(); + + GC.SuppressFinalize(this); + } + + public Task StartAsync(CancellationToken cancellationToken) + { + _logger.Debug($"Starting masterfile.json downloader hosted service..."); + + var localZone = TimeZoneInfo.Local; + var timezone = localZone.StandardName.ConvertIanaToWindowsTimeZone(); + + var midnightTimer = new MidnightTimer(0, timezone); + midnightTimer.TimeReached += OnMidnightTimerTimeReached; + midnightTimer.Start(); + + _tzMidnightTimers.Add(timezone, midnightTimer); + return Task.CompletedTask; + } + + public Task StopAsync(CancellationToken cancellationToken) + { + _logger.Debug($"Stopping masterfile.json downloader hosted service..."); + + foreach (var (_, midnightTimer) in _tzMidnightTimers) + { + midnightTimer.Stop(); + midnightTimer.Dispose(); + } + return Task.CompletedTask; + } + + private void OnMidnightTimerTimeReached(object sender, TimeReachedEventArgs e) + { + _logger.Debug($"Downloading latest masterfile.json..."); + + var data = NetUtils.Get(Strings.LatestGameMasterFileUrl); + if (string.IsNullOrEmpty(data)) + { + _logger.Error($"Latest masterfile.json downloaded but contents were empty..."); + return; + } + + var filePath = Path.Combine(Strings.DataFolder, GameMaster.MasterFileName); + File.WriteAllText(filePath, data); + _logger.Information($"Latest masterfile.json downloaded to '{filePath}', reloading masterfile.json with latest version..."); + + GameMaster.ReloadMasterFile(); + } + } +} \ No newline at end of file diff --git a/src/HostedServices/MidnightTimer.cs b/src/HostedServices/MidnightTimer.cs new file mode 100644 index 00000000..8ea0ef25 --- /dev/null +++ b/src/HostedServices/MidnightTimer.cs @@ -0,0 +1,244 @@ +//namespace DandTSoftware.Timers +namespace WhMgr.HostedServices +{ + using System; + using System.Timers; + + using WhMgr.Extensions; + + /// + /// Midnight timer event arguments + /// + public class TimeReachedEventArgs : EventArgs + { + /// + /// Gets the current midnight time + /// + public DateTime Time { get; } + + /// + /// Gets the time zone is in + /// + public string TimeZone { get; } + + public TimeReachedEventArgs(DateTime time, string timeZone) + { + Time = time; + TimeZone = timeZone; + } + } + + /// + /// Provides the means to detect when midnight is reached. + /// + public class MidnightTimer : IDisposable + { + #region Variables + + private bool _disposed; + private static Timer _timer; + + #endregion + + #region Properties + + /// + /// Gets how many minutes after midnight are added to delay the timer + /// + public int MinutesAfterMidnight { get; } + + /// + /// Gets the time zone used to check if midnight + /// + public string TimeZone { get; } + + #endregion + + #region Events + + /// + /// Occurs whens midnight occurs, subscribe to this + /// + public event EventHandler TimeReached; + + /// + /// Standard Event/Delegate handler, if its not null, fire the event + /// + /// + private void OnTimeReached(string timeZone) + { + var midnight = GetMidnight(MinutesAfterMidnight, timeZone); + TimeReached?.Invoke(this, new TimeReachedEventArgs(midnight, timeZone)); + } + + #endregion + + #region Constructors + + /// + /// Creates an instance of the Midnight Timer, which will fire after a set number of minutes after midnight + /// + /// How many Minutes after midnight do we start the timer? between 0 and 59 + /// Time zone to use when checking if midnight + public MidnightTimer(int minutesAfterMidnight, string timeZone) + { + // Check if the supplied minutes is between 0 and 59 mins after midnight + if (minutesAfterMidnight < 0 || minutesAfterMidnight > 59) + { + // If it is outside of this range, throw an exception + throw new ArgumentException("Minutes after midnight is less than 0 or more than 60!"); + } + + // Set the properties value + MinutesAfterMidnight = minutesAfterMidnight; + TimeZone = timeZone; + } + + #endregion + + #region Public Methods + + /// + /// Starts the Timer to fire a certain amount of Minutes AFTER midnight, every night (based on server time). + /// + public void Start() + { + var now = DateTime.Now.ConvertTimeFromTimeZone(TimeZone); + + // Subtract the current time, from midnigh (tomorrow). + // This will return a value, which will be used to set the Timer interval + var midnight = GetMidnight(MinutesAfterMidnight, TimeZone); + var ts = midnight.Subtract(now); + + // We only want the Hours, Minuters and Seconds until midnight + var tsMidnight = new TimeSpan(ts.Hours, ts.Minutes, ts.Seconds); + + // Create the timer + if (tsMidnight.TotalMilliseconds > 0) + { + _timer = new Timer(tsMidnight.TotalMilliseconds); + + // Set the event handler + _timer.Elapsed += OnTimerElapsed; + + // Start the timer + _timer.Start(); + } + } + + /// + /// Stops the timer + /// + public void Stop() + { + // Sanity checking + if (_timer != null) + { + // Stop the orginal timer + _timer.Stop(); + _timer.Elapsed -= OnTimerElapsed; + _timer.Dispose(); + } + } + + /// + /// Restarts the timer + /// + public void Restart() + { + // Stop the timer + Stop(); + + // (Re)Start the timer + Start(); + } + + #endregion + + #region Private Methods + + /// + /// Obtains a of midnight in the local time zone + /// + /// Number of minutes after midnight to delay the timer by + /// Returns the midnight date and time in the local time zone + private static DateTime GetMidnight(int minutesAfterMidnight) + { + // Lets work out the next occuring midnight + // Add 1 day and use hours 0, min 0 and second 0 (remember this is 24 hour time) + + // Thanks to Yashar for this code/fix + var tomorrow = DateTime.Now.AddDays(1); + + // Return a datetime for Tomorrow, but with how many minutes after midnight + return new DateTime(tomorrow.Year, tomorrow.Month, tomorrow.Day, 0, minutesAfterMidnight, 0); + } + + /// + /// Obtains a of midnight in the specified time zone + /// + /// Number of minutes after midnight to delay the timer by + /// The time zone to convert the time to in order to check if it's midnight + /// Returns the midnight date and time in the specified time zone + private static DateTime GetMidnight(int minutesAfterMidnight, string timeZone) + { + return GetMidnight(minutesAfterMidnight).ConvertTimeFromTimeZone(timeZone); + } + + #endregion + + #region Event Handlers + + /// + /// Executes when the timer has elasped + /// + /// + /// + private void OnTimerElapsed(object sender, ElapsedEventArgs e) + { + // Stop the orginal timer + Stop(); + + // now raise an event that the timer has elapsed + OnTimeReached(TimeZone); // swapped order thanks to Jeremy + + // reset the timer + Start(); + } + + #endregion + + #region Disposing + + /// + /// Dispose of the timer (also stops the timer) + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (_disposed) return; + + if (disposing) + { + // free managed resources + // Pass to Stop to unsubscribe the event handler of Windows System Time Changes + Stop(); + _timer.Dispose(); + } + + // free native resources if there are any. + //if (nativeResource != IntPtr.Zero) + //{ + //} + + _disposed = true; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/HostedServices/QuestPurgeHostedService.cs b/src/HostedServices/QuestPurgeHostedService.cs new file mode 100644 index 00000000..af81cb5e --- /dev/null +++ b/src/HostedServices/QuestPurgeHostedService.cs @@ -0,0 +1,155 @@ +namespace WhMgr.HostedServices +{ + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + + using Microsoft.Extensions.Hosting; + //using Microsoft.Extensions.Logging; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Services.Discord; + + public class QuestPurgeHostedService : IHostedService, IDisposable + { + #region Variables + + private readonly Microsoft.Extensions.Logging.ILogger _logger; + private readonly ConfigHolder _config; + private readonly Dictionary _tzMidnightTimers; + private readonly IDiscordClientService _discordService; + + #endregion + + #region Constructor + + public QuestPurgeHostedService( + Microsoft.Extensions.Logging.ILogger logger, + ConfigHolder config, + IDiscordClientService discordService) + { + _logger = logger; + _config = config; + _discordService = discordService; + _tzMidnightTimers = new Dictionary(); + } + + #endregion + + #region Public Interface Implementation + + public Task StartAsync(CancellationToken cancellationToken) + { + _logger.Information($"Starting quest purge Hosted service..."); + + foreach (var (guildId, guildConfig) in _config.Instance.Servers) + { + // Check if quest purge is enabled for guild + if (!(guildConfig.QuestsPurge?.Enabled ?? false)) + continue; + + // If so, loop available channels + foreach (var (timezone, questChannelIds) in guildConfig.QuestsPurge.ChannelIds) + { + // Check if duplicate timezone exists + if (_tzMidnightTimers.ContainsKey(timezone)) + { + _logger.Warning($"Midnight timer already configured for timezone '{timezone}'"); + continue; + } + + _logger.Information($"Starting midnight timer for timezone {timezone}"); + // Create and start midnight timer for timezone + var midnightTimer = new MidnightTimer(0, timezone); + midnightTimer.TimeReached += OnMidnightTimerTimeReached; + midnightTimer.Start(); + + // Add to cache list + _tzMidnightTimers.Add(timezone, midnightTimer); + } + } + return Task.CompletedTask; + } + + public Task StopAsync(CancellationToken cancellationToken) + { + _logger.Information($"Stopping quest purge hosted service..."); + foreach (var (timezone, midnightTimer) in _tzMidnightTimers) + { + _logger.Information($"Stopping midnight timer for timezone {timezone}"); + midnightTimer.Stop(); + midnightTimer.Dispose(); + } + return Task.CompletedTask; + } + + public async void Dispose() + { + _logger.Debug($"Disposing..."); + await _discordService.Stop(); + _tzMidnightTimers.Clear(); + + GC.SuppressFinalize(this); + } + + #endregion + + #region Private Methods + + private async void OnMidnightTimerTimeReached(object sender, TimeReachedEventArgs e) + { + _logger.Information($"Quest purge midnight timer reached {e.Time} for timezone {e.TimeZone}"); + foreach (var (guildId, guildConfig) in _config.Instance.Servers) + { + if (!(guildConfig.QuestsPurge?.Enabled ?? false)) + continue; + + if (!(guildConfig.QuestsPurge?.ChannelIds.ContainsKey(e.TimeZone) ?? false)) + continue; + + var channelIds = guildConfig.QuestsPurge.ChannelIds[e.TimeZone]; + _logger.Information($"Clearing quest channels {string.Join(", ", channelIds)} for guild {guildId}"); + await ClearQuestChannels(channelIds); + } + } + + private async Task ClearQuestChannels(List channelIds) + { + if (channelIds?.Count == 0) + { + _logger.Warning($"Clear quest channels list was empty"); + return; + } + + // Loop all specified channel ids + foreach (var channelId in channelIds) + { + // Loop all provided Discord clients + foreach (var (serverId, serverClient) in _discordService.DiscordClients) + { + try + { + // Get Discord channel if available + _logger.Information($"Deleting messages in channel {channelId}"); + var channel = await serverClient.GetChannelAsync(channelId).ConfigureAwait(false); + if (channel == null) + continue; + + // Delete all Discord channel messages + _logger.Information($"Deleting messages for channel: {channelId} (GuildId: {serverId})"); + await serverClient.DeleteMessagesAsync(channelId).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.Error($"Failed to delete messages in channel {channelId}: {ex}"); + } + } + } + _logger.Information($"Completed deleting messages for channel(s) {string.Join(", ", channelIds)}"); + } + + #endregion + } +} \ No newline at end of file diff --git a/src/HostedServices/StatisticReportsHostedService.cs b/src/HostedServices/StatisticReportsHostedService.cs new file mode 100644 index 00000000..1edcb23e --- /dev/null +++ b/src/HostedServices/StatisticReportsHostedService.cs @@ -0,0 +1,450 @@ +namespace WhMgr.HostedServices +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + + using DSharpPlus; + using Microsoft.EntityFrameworkCore; + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; + + using WhMgr.Configuration; + using WhMgr.Data.Factories; + using WhMgr.Extensions; + using WhMgr.Localization; + using WhMgr.Services.Discord; + + public class StatisticReportsHostedService : IHostedService, IDisposable + { + // TODO: Make 'StatisticDataFormat' and 'StatHours' configurable + private const string StatisticDateFormat = "yyyy/MM/dd"; + private const uint StatHours = 24; // Number of hours to check back and find data for statistics + private const ushort MaxDatabaseTimeoutS = 30; + + #region Variables + + private readonly ILogger _logger; + private readonly Dictionary _tzMidnightTimers; + private readonly ConfigHolder _config; + private readonly IDiscordClientService _discordService; + + #endregion + + #region Constructor + + public StatisticReportsHostedService( + ILogger logger, + ConfigHolder config, + IDiscordClientService discordService) + { + _logger = logger; + _tzMidnightTimers = new Dictionary(); + _config = config; + _discordService = discordService; + } + + #endregion + + #region Public Methods + + public Task StartAsync(CancellationToken cancellationToken) + { + _logger.Debug($"Starting daily statistic reporting hosted service..."); + + var localZone = TimeZoneInfo.Local; + var timezone = localZone.StandardName.ConvertIanaToWindowsTimeZone(); + + var midnightTimer = new MidnightTimer(0, timezone); + midnightTimer.TimeReached += OnMidnightTimerTimeReached; + midnightTimer.Start(); + + _tzMidnightTimers.Add(timezone, midnightTimer); + return Task.CompletedTask; + } + + public Task StopAsync(CancellationToken cancellationToken) + { + _logger.Debug($"Stopping daily statistic reporting hosted service..."); + + foreach (var (_, midnightTimer) in _tzMidnightTimers) + { + midnightTimer.Stop(); + midnightTimer.Dispose(); + } + return Task.CompletedTask; + } + + public void Dispose() + { + _tzMidnightTimers.Clear(); + + GC.SuppressFinalize(this); + } + + #endregion + + private async void OnMidnightTimerTimeReached(object sender, TimeReachedEventArgs e) + { + _logger.LogInformation($"Midnight timer triggered, starting statistics reporting..."); + + foreach (var (guildId, guildConfig) in _config.Instance.Servers) + { + if (!_discordService.DiscordClients.ContainsKey(guildId)) + { + continue; + } + + var client = _discordService.DiscordClients[guildId]; + var dailyStatsConfig = guildConfig.DailyStats; + if (dailyStatsConfig?.ShinyStats?.Enabled ?? false) + { + _logger.Information($"Starting daily shiny stats posting for guild '{guildId}'..."); + await PostShinyStatsAsync(guildId, _config.Instance, client); + _logger.Information($"Finished daily shiny stats posting for guild '{guildId}'."); + } + + if (dailyStatsConfig?.IVStats?.Enabled ?? false) // TODO: Rename to HundoStats + { + _logger.Information($"Starting daily hundo stats posting for guild '{guildId}'..."); + await PostHundoStatsAsync(guildId, _config.Instance, client); + _logger.Information($"Finished daily hundo stats posting for guild '{guildId}'."); + } + + // TODO: Implement custom IV statistics reporting + + _logger.Information($"Finished daily stats posting for guild '{guildId}'..."); + } + + _logger.Information($"Finished daily stats reporting for all guilds."); + } + + public static async Task PostShinyStatsAsync(ulong guildId, Config config, DiscordClient client) + { + if (!config.Servers.ContainsKey(guildId)) + { + // Guild not configured + Console.WriteLine(Translator.Instance.Translate("ERROR_NOT_IN_DISCORD_SERVER")); + return; + } + + var server = config.Servers[guildId]; + var statsConfig = server.DailyStats?.ShinyStats; + if (!(statsConfig?.Enabled ?? false)) + { + // Shiny statistics reporting not enabled + Console.WriteLine($"Skipping shiny stats posting for guild '{guildId}', reporting not enabled."); + return; + } + + if (!client.Guilds.ContainsKey(guildId)) + { + // Discord client not in specified guild + Console.WriteLine($"Discord client is not in guild '{guildId}'"); + return; + } + + var guild = client.Guilds[guildId]; + var channelId = statsConfig?.ChannelId ?? 0; + if (!guild.Channels.ContainsKey(channelId) || channelId == 0) + { + // Discord channel does not exist in guild + Console.WriteLine($"Channel with ID '{channelId}' does not exist in guild '{guild.Name}' ({guildId})"); + return; + } + + var statsChannel = await client.GetChannelAsync(channelId); + if (statsChannel == null) + { + Console.WriteLine($"Failed to get channel id {channelId} to post shiny stats, are you sure it exists?"); + return; + } + + if (statsConfig?.ClearMessages ?? false) + { + Console.WriteLine($"Starting shiny statistics channel message clearing for channel '{channelId}' in guild '{guildId}'..."); + await client.DeleteMessagesAsync(channelId); + } + + var stats = await GetShinyStatsAsync(config.Database.Scanner.ToString()); + if ((stats?.Count ?? 0) == 0) + { + Console.WriteLine($"Failed to get shiny stats from database, returned 0 entries."); + return; + } + + var sorted = stats.Keys.ToList(); + sorted.Sort(); + if (sorted.Count > 0) + { + var date = DateTime.Now.Subtract(TimeSpan.FromHours(StatHours)).ToLongDateString(); + await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_TITLE").FormatText(new { date })); + await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_NEWLINE")); + } + + foreach (var pokemonId in sorted) + { + if (pokemonId == 0) + continue; + + var pkmnName = Translator.Instance.GetPokemonName(pokemonId); + var pkmnStats = stats[pokemonId]; + var chance = pkmnStats.Shiny == 0 || pkmnStats.Total == 0 + ? 0 + : Convert.ToInt32(pkmnStats.Total / pkmnStats.Shiny); + var message = chance == 0 + ? "SHINY_STATS_MESSAGE" + : "SHINY_STATS_MESSAGE_WITH_RATIO"; + await statsChannel.SendMessageAsync(Translator.Instance.Translate(message).FormatText(new + { + pokemon = pkmnName, + id = pokemonId, + shiny = pkmnStats.Shiny.ToString("N0"), + total = pkmnStats.Total.ToString("N0"), + chance, + })); + Thread.Sleep(500); + } + + var total = stats[0]; + var totalRatio = total.Shiny == 0 || total.Total == 0 + ? 0 + : Convert.ToInt32(total.Total / total.Shiny); + + await statsChannel.SendMessageAsync(Translator.Instance.Translate("SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO").FormatText(new + { + shiny = total.Shiny.ToString("N0"), + total = total.Total.ToString("N0"), + chance = totalRatio, + })); + } + + public static async Task PostHundoStatsAsync(ulong guildId, Config config, DiscordClient client) + { + if (!config.Servers.ContainsKey(guildId)) + { + // Guild not configured + Console.WriteLine(Translator.Instance.Translate("ERROR_NOT_IN_DISCORD_SERVER")); + return; + } + + var server = config.Servers[guildId]; + var statsConfig = server.DailyStats?.IVStats; // TODO: Rename IVStats to HundoStats + if (!(statsConfig?.Enabled ?? false)) + { + // Hundo statistics reporting not enabled + Console.WriteLine($"Skipping hundo stats posting for guild '{guildId}', reporting not enabled."); + return; + } + + if (!client.Guilds.ContainsKey(guildId)) + { + // Discord client not in specified guild + Console.WriteLine($"Discord client is not in guild '{guildId}'"); + return; + } + + var guild = client.Guilds[guildId]; + var channelId = statsConfig.ChannelId; + if (!guild.Channels.ContainsKey(channelId)) + { + // Discord channel does not exist in guild + Console.WriteLine($"Channel with ID '{channelId}' does not exist in guild '{guild.Name}' ({guildId})"); + return; + } + + var statsChannel = await client.GetChannelAsync(channelId); + if (statsChannel == null) + { + Console.WriteLine($"Failed to get channel id {channelId} to post hundo stats, are you sure it exists?"); + return; + } + + if (statsConfig?.ClearMessages ?? false) + { + Console.WriteLine($"Starting hundo statistics channel message clearing for channel '{channelId}' in guild '{guildId}'..."); + await client.DeleteMessagesAsync(channelId); + } + + var stats = await GetHundoStatsAsync(config.Database.Scanner.ToString()); + if ((stats?.Count ?? 0) == 0) + { + Console.WriteLine($"Failed to get hundo stats from database, returned 0 entries."); + return; + } + + var sorted = stats.Keys.ToList(); + sorted.Sort(); + if (sorted.Count > 0) + { + var date = DateTime.Now.Subtract(TimeSpan.FromHours(StatHours)).ToLongDateString(); + await statsChannel.SendMessageAsync(Translator.Instance.Translate("HUNDO_STATS_TITLE").FormatText(new { date })); + await statsChannel.SendMessageAsync(Translator.Instance.Translate("HUNDO_STATS_NEWLINE")); + } + + foreach (var pokemonId in sorted) + { + if (pokemonId == 0) + continue; + + //var pkmn = GameMaster.Instance.Pokedex[pokemon]; + var pkmnName = Translator.Instance.GetPokemonName(pokemonId); + var pkmnStats = stats[pokemonId]; + var chance = pkmnStats.Count == 0 || pkmnStats.Total == 0 + ? 0 + : Convert.ToInt32(pkmnStats.Total / pkmnStats.Count); + var message = chance == 0 + ? "HUNDO_STATS_MESSAGE" + : "HUNDO_STATS_MESSAGE_WITH_RATIO"; + await statsChannel.SendMessageAsync(Translator.Instance.Translate(message).FormatText(new + { + pokemon = pkmnName, + id = pokemonId, + count = pkmnStats.Count.ToString("N0"), + total = pkmnStats.Total.ToString("N0"), + chance, + })); + Thread.Sleep(500); + } + + var total = stats[0]; + var totalRatio = total.Count == 0 || total.Total == 0 + ? 0 + : Convert.ToInt32(total.Total / total.Count); + + await statsChannel.SendMessageAsync(Translator.Instance.Translate("HUNDO_STATS_TOTAL_MESSAGE_WITH_RATIO").FormatText(new + { + count = total.Count.ToString("N0"), + total = total.Total.ToString("N0"), + chance = totalRatio, + })); + } + + internal static async Task> GetShinyStatsAsync(string connectionString) + { + var list = new Dictionary + { + // Index 0 will hold our overall shiny statistics for the day + { 0, new ShinyPokemonStats { PokemonId = 0 } } + }; + try + { + using var ctx = DbContextFactory.CreateMapContext(connectionString); + ctx.Database.SetCommandTimeout(MaxDatabaseTimeoutS); // 30 seconds timeout + var yesterday = DateTime.Now.Subtract(TimeSpan.FromHours(StatHours)).ToString(StatisticDateFormat); + var pokemonShiny = (await ctx.PokemonStatsShiny.ToListAsync()) + .Where(stat => stat.Date.ToString(StatisticDateFormat) == yesterday) + .ToList(); + var pokemonIV = (await ctx.PokemonStatsIV.ToListAsync()) + .Where(stat => stat.Date.ToString(StatisticDateFormat) == yesterday)? + .ToDictionary(stat => stat.PokemonId); + + for (var i = 0; i < pokemonShiny.Count; i++) + { + var curPkmn = pokemonShiny[i]; + if (curPkmn.PokemonId > 0) + { + if (!list.ContainsKey(curPkmn.PokemonId)) + { + list.Add(curPkmn.PokemonId, new ShinyPokemonStats { PokemonId = curPkmn.PokemonId }); + } + + list[curPkmn.PokemonId].PokemonId = curPkmn.PokemonId; + list[curPkmn.PokemonId].Shiny += Convert.ToUInt64(curPkmn.Count); + list[curPkmn.PokemonId].Total += pokemonIV.ContainsKey(curPkmn.PokemonId) + ? Convert.ToUInt64(pokemonIV[curPkmn.PokemonId].Count) + : 0; + } + } + list.Values.ToList().ForEach(stat => + { + list[0].Shiny += stat.Shiny; + list[0].Total += stat.Total; + }); + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex}"); + } + return list; + } + + internal static async Task> GetHundoStatsAsync(string connectionString) + { + var list = new Dictionary + { + // Index 0 will hold our overall statistics for the day + { 0, new HundoPokemonStats { PokemonId = 0 } } + }; + try + { + using var ctx = DbContextFactory.CreateMapContext(connectionString); + ctx.Database.SetCommandTimeout(MaxDatabaseTimeoutS); + var yesterday = DateTime.Now.Subtract(TimeSpan.FromHours(StatHours)).ToString(StatisticDateFormat); + var pokemonHundo = (await ctx.PokemonStatsHundo.ToListAsync()) + .Where(stat => stat.Date.ToString(StatisticDateFormat) == yesterday) + .ToList(); + var pokemonIV = (await ctx.PokemonStatsIV.ToListAsync()) + .Where(stat => stat.Date.ToString(StatisticDateFormat) == yesterday)? + .ToDictionary(stat => stat.PokemonId); + + for (var i = 0; i < pokemonHundo.Count; i++) + { + var curPkmn = pokemonHundo[i]; + if (curPkmn.PokemonId > 0) + { + if (!list.ContainsKey(curPkmn.PokemonId)) + { + list.Add(curPkmn.PokemonId, new HundoPokemonStats { PokemonId = curPkmn.PokemonId }); + } + + list[curPkmn.PokemonId].PokemonId = curPkmn.PokemonId; + list[curPkmn.PokemonId].Count += Convert.ToUInt64(curPkmn.Count); + list[curPkmn.PokemonId].Total += pokemonIV.ContainsKey(curPkmn.PokemonId) + ? Convert.ToUInt64(pokemonIV[curPkmn.PokemonId].Count) + : 0; + } + } + list.Values.ToList().ForEach(stat => + { + list[0].Count += stat.Count; + list[0].Total += stat.Total; + }); + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex}"); + } + return list; + } + } + + internal class ShinyPokemonStats + { + public uint PokemonId { get; set; } + + public ulong Shiny { get; set; } + + public ulong Total { get; set; } + } + + internal class IvPokemonStats + { + public uint PokemonId { get; set; } + + public ulong Count { get; set; } + + public ulong Total { get; set; } + } + + internal class HundoPokemonStats + { + public uint PokemonId { get; set; } + + public ulong Count { get; set; } + + public ulong Total { get; set; } + } +} \ No newline at end of file diff --git a/src/HostedServices/TaskQueue/DefaultBackgroundTaskQueue.cs b/src/HostedServices/TaskQueue/DefaultBackgroundTaskQueue.cs new file mode 100644 index 00000000..8dda6095 --- /dev/null +++ b/src/HostedServices/TaskQueue/DefaultBackgroundTaskQueue.cs @@ -0,0 +1,65 @@ +namespace WhMgr.HostedServices.TaskQueue +{ + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Channels; + using System.Threading.Tasks; + + using WhMgr.Extensions; + + public class DefaultBackgroundTaskQueue : IBackgroundTaskQueue + { + private readonly int _capacity; + private Channel> _queue; + + public uint Count => Convert.ToUInt32(_queue?.Reader?.Count ?? 0); + + public DefaultBackgroundTaskQueue(int capacity = 4096) + { + _capacity = capacity; + _queue = CreateQueue(_capacity); + } + + public async ValueTask EnqueueAsync(Func workItem) + { + if (workItem is null) + { + throw new ArgumentNullException(nameof(workItem)); + } + await _queue.Writer.WriteAsync(workItem); + } + + public async ValueTask> DequeueAsync( + CancellationToken cancellationToken) + { + var workItem = await _queue.Reader.ReadAsync(cancellationToken); + return workItem; + } + + public async Task>> DequeueMultipleAsync( + int maxBatchSize, + CancellationToken cancellationToken) + { + var workItems = await _queue.Reader.ReadMultipleAsync(maxBatchSize, cancellationToken); + return workItems; + } + + public void ClearQueue() + { + // Clear queue items + _queue = CreateQueue(_capacity); + } + + private static Channel> CreateQueue(int capacity) + { + var options = new BoundedChannelOptions(capacity) + { + FullMode = BoundedChannelFullMode.DropOldest, + Capacity = capacity, + }; + var queue = Channel.CreateBounded>(options); + return queue; + } + } +} \ No newline at end of file diff --git a/src/HostedServices/TaskQueue/IBackgroundTaskQueue.cs b/src/HostedServices/TaskQueue/IBackgroundTaskQueue.cs new file mode 100644 index 00000000..e30b36b0 --- /dev/null +++ b/src/HostedServices/TaskQueue/IBackgroundTaskQueue.cs @@ -0,0 +1,45 @@ +namespace WhMgr.HostedServices.TaskQueue +{ + using System; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + + public interface IBackgroundTaskQueue + { + /// + /// Gets a value determining the length of the background task item queue + /// + uint Count { get; } + + /// + /// Schedules a task which needs to be processed. + /// + /// Task item to be executed + /// + ValueTask EnqueueAsync(Func workItem); + + /// + /// Attempts to remove and return the object at the beginning of the queue. + /// + /// Task cancellation token. + /// + ValueTask> DequeueAsync( + CancellationToken cancellationToken); + + /// + /// + /// + /// + /// + /// + Task>> DequeueMultipleAsync( + int maxBatchSize, + CancellationToken cancellationToken); + + /// + /// + /// + void ClearQueue(); + } +} \ No newline at end of file diff --git a/src/Utilities/FileWatcher.cs b/src/IO/FileWatcher.cs similarity index 63% rename from src/Utilities/FileWatcher.cs rename to src/IO/FileWatcher.cs index 1e2c24ab..aa79bdf0 100644 --- a/src/Utilities/FileWatcher.cs +++ b/src/IO/FileWatcher.cs @@ -1,6 +1,7 @@ -namespace WhMgr.Utilities +namespace WhMgr.IO { using System; + using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -19,7 +20,7 @@ public class FileWatcher public string FilePath { get; } /// - /// Trigged upon file change + /// Fired upon file change /// public event EventHandler Changed; @@ -33,13 +34,41 @@ public FileWatcher(string filePath) _fsw = new FileSystemWatcher { - Path = Directory.Exists(FilePath) ? FilePath : Path.GetDirectoryName(FilePath), + Path = Directory.Exists(FilePath) + ? FilePath + : Path.GetDirectoryName(FilePath), + // Reload on last modified time or size change NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size, + // Filter change based on file path or file name Filter = File.Exists(FilePath) ? Path.GetFileName(FilePath) : null }; _fsw.Changed += OnFileSystemChanged; } + /// + /// Instantiate a new class + /// + /// File paths to watch for changes + public FileWatcher(List filePaths) + { + foreach (var filePath in filePaths) + { + //FilePath = filePath; + + _fsw = new FileSystemWatcher + { + Path = Directory.Exists(FilePath) + ? FilePath + : Path.GetDirectoryName(FilePath), + // Reload on last modified time or size change + NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size, + // Filter change based on file path or file name + Filter = File.Exists(FilePath) ? Path.GetFileName(FilePath) : null + }; + _fsw.Changed += OnFileSystemChanged; + } + } + private async void OnFileSystemChanged(object sender, FileSystemEventArgs e) { _changeCancellationSource?.Cancel(); diff --git a/src/Localization/Language.cs b/src/Localization/Language.cs index d15255c5..05faed29 100644 --- a/src/Localization/Language.cs +++ b/src/Localization/Language.cs @@ -6,7 +6,7 @@ using System.Globalization; using System.IO; - using Newtonsoft.Json; + using WhMgr.Extensions; public class Language : IEnumerable> where TDictionary : IDictionary, new() @@ -70,9 +70,8 @@ public Language() : this(default) { CurrentCulture = new CultureInfo(DefaultLanguage); - LocaleDirectory = Strings.LocaleFolder; - - _map = LoadCountry(CurrentCulture.TwoLetterISOLanguageName); + LocaleDirectory = Path.Combine(Strings.BasePath, Strings.LocaleFolder); + //_map = LoadCountry(CurrentCulture.TwoLetterISOLanguageName); } /// @@ -216,7 +215,7 @@ private TDictionary LoadCountry(string localeCode) var path = Path.Combine(LocaleDirectory, localeCode + ".json"); var data = File.ReadAllText(path); - var obj = JsonConvert.DeserializeObject(data); + var obj = data.FromJson(); return obj; } diff --git a/src/Localization/Translator.cs b/src/Localization/Translator.cs index ed19dd16..d2f97689 100644 --- a/src/Localization/Translator.cs +++ b/src/Localization/Translator.cs @@ -2,38 +2,100 @@ { using System; using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Threading.Tasks; + using Microsoft.Extensions.Logging; using ActivityType = POGOProtos.Rpc.HoloActivityType; using AlignmentType = POGOProtos.Rpc.PokemonDisplayProto.Types.Alignment; using CharacterCategory = POGOProtos.Rpc.EnumWrapper.Types.CharacterCategory; + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; using ItemId = POGOProtos.Rpc.Item; using TemporaryEvolutionId = POGOProtos.Rpc.HoloTemporaryEvolutionId; - using WeatherCondition = POGOProtos.Rpc.GameplayWeatherProto.Types.WeatherCondition; - using WhMgr.Diagnostics; + using WhMgr.Common; + using WhMgr.Extensions; + using WhMgr.Utilities; public class Translator : Language> { - private static readonly IEventLogger _logger = EventLogger.GetLogger("LOCALE"); + private static readonly ILogger _logger = + new Logger(LoggerFactory.Create(x => x.AddConsole())); + + private const string SourceLocaleUrl = "https://raw.githubusercontent.com/WatWowMap/pogo-translations/master/static/locales/"; + private static readonly string _appLocalesFolder = Directory.GetCurrentDirectory() + $"/../{Strings.LocaleFolder}"; + private static readonly string _binLocalesFolder = Directory.GetCurrentDirectory() + $"/{Strings.BasePath}/{Strings.LocaleFolder}"; #region Singleton private static Translator _instance; - - public static Translator Instance + + public static Translator Instance => + _instance ??= new Translator { + LocaleDirectory = _binLocalesFolder, + //CurrentCulture = + }; + + #endregion + + #region Static Methods + + public static async Task CreateLocaleFilesAsync() { - get + // Copy any missing base locale files to bin directory + await CopyLocaleFilesAsync(); + + var files = GetBaseLocaleFileNames(); + foreach (var file in files) { - if (_instance == null) + // Replace locale prefix + var localeFile = Path.GetFileName(file).Replace("_", null); + var locale = Path.GetFileNameWithoutExtension(localeFile); + + var url = SourceLocaleUrl + localeFile; + var json = await NetUtils.GetAsync(url); + if (json == null) { - _instance = new Translator(); + _logger.LogWarning($"Failed to fetch locales from {url}, skipping..."); + return; } - return _instance; + + _logger.LogInformation($"Creating locale {locale}..."); + var remote = json.FromJson>(); + foreach (var (key, _) in remote) + { + // Make locale variables compliant with Handlebars/Mustache templating + remote[key] = remote[key].Replace("%", "{") + .Replace("}", "}}"); + } + + if (locale != "en") + { + // Include en as fallback first + var enTransFallback = File.ReadAllText( + Path.Combine(_appLocalesFolder, "_en.json") + ); + var fallbackTranslations = enTransFallback.FromJson>(); + remote = remote.Merge(fallbackTranslations, updateValues: true); + } + + var appTranslationsData = File.ReadAllText(Path.Combine(_appLocalesFolder, file)); + var appTranslations = appTranslationsData.FromJson>(); + remote = remote.Merge(appTranslations, updateValues: true); + + File.WriteAllText( + Path.Combine(_binLocalesFolder, localeFile), + remote.ToJson() + ); + _logger.LogInformation($"{locale} file saved."); } } #endregion + #region Public Methods + public override string Translate(string value) { try @@ -42,8 +104,8 @@ public override string Translate(string value) } catch (Exception ex) { - _logger.Error($"Failed to find locale translation for key '{value}'"); - _logger.Error(ex); + Console.WriteLine($"Failed to find locale translation for key '{value}'"); + Console.WriteLine(ex); } return value; } @@ -59,8 +121,8 @@ public string Translate(string value, params object[] args) } catch (Exception ex) { - _logger.Error($"Failed to find locale translation for key '{value}' and arguments: '{string.Join(",", args)}'"); - _logger.Error(ex); + Console.WriteLine($"Failed to find locale translation for key '{value}' and arguments: '{string.Join(",", args)}'"); + Console.WriteLine(ex); } return value; } @@ -70,19 +132,19 @@ public string GetPokemonName(uint pokeId) return Translate($"poke_{pokeId}"); } - public string GetFormName(int formId, bool includeNormal = false) + public string GetFormName(uint formId, bool includeNormal = false) { if (formId == 0) return null; var form = Translate("form_" + formId); - // TODO: Localize - if (!includeNormal && string.Compare(form, "Normal", true) == 0) + var normal = Translate("NORMAL"); + if (!includeNormal && string.Compare(form, normal, true) == 0) return string.Empty; return form; } - public string GetCostumeName(int costumeId) + public string GetCostumeName(uint costumeId) { if (costumeId == 0) return null; @@ -91,7 +153,7 @@ public string GetCostumeName(int costumeId) return costume; } - public string GetEvolutionName(int evoId) + public string GetEvolutionName(uint evoId) { if (evoId == 0) return null; @@ -100,10 +162,10 @@ public string GetEvolutionName(int evoId) return evo; } - public string GetMoveName(int moveId) + public string GetMoveName(uint moveId) { if (moveId == 0) - return "Unknown"; // TODO: Localize + return Translate("UNKNOWN"); return Translate($"move_{moveId}"); } @@ -137,5 +199,46 @@ public string GetEvolutionName(TemporaryEvolutionId evolution) { return Translate($"evo_{(int)evolution}"); } + + public string GetGruntType(InvasionCharacter gruntType) + { + return Translate($"grunt_{(int)gruntType}"); + } + + #endregion + + #region Private Methods + + private static async Task CopyLocaleFilesAsync() + { + // Copy base locale files from app directory to bin directory if they do not exist + var files = GetBaseLocaleFileNames(); + foreach (var file in files) + { + // Replace locale prefix + var localeFile = Path.GetFileName(file); + var localeBin = Path.Combine(_binLocalesFolder, localeFile); + if (File.Exists(localeBin)) + continue; + + _logger.LogDebug($"Copying base locale '{localeFile}' to {localeBin}..."); + var baseLocalePath = Path.Combine(_appLocalesFolder, file); + File.Copy(baseLocalePath, localeBin); + } + + await Task.CompletedTask; + } + + private static List GetBaseLocaleFileNames(string extension = "*.json", string prefix = "_") + { + // Get a list of locale file names that have prefix '_' + var files = Directory.GetFiles(_appLocalesFolder, extension) + .Select(fileName => Path.GetFileName(fileName)) + .Where(fileName => fileName.StartsWith(prefix)) + .ToList(); + return files; + } + + #endregion } -} +} \ No newline at end of file diff --git a/src/MidnightTimer.cs b/src/MidnightTimer.cs deleted file mode 100644 index 95bff177..00000000 --- a/src/MidnightTimer.cs +++ /dev/null @@ -1,222 +0,0 @@ -namespace DandTSoftware.Timers -{ - using System; - using System.Timers; - - /// - /// Midnight Timer Delegate for the event - /// - /// - public delegate void TimeReachedEventHandler(DateTime time); - - /// - /// Provides the means to detect when midnight is reached. - /// - public class MidnightTimer : IDisposable - { - #region Static Variables - - private bool _disposed; - - /// - /// Internal Timer - /// - private static Timer s_timer; // renamed from m_ to s_ to represent static - - /// - /// How many Minutes after midnight are added to the timer - /// - private static int s_MinutesAfterMidnight; - - /// - /// Occurs whens midnight occurs, subscribe to this - /// - public event TimeReachedEventHandler TimeReached; - - #endregion - - #region Constructors - - /// - /// Creates an instance of the Midnight Timer - /// - public MidnightTimer() - { - } - - /// - /// Creates an instance of the Midnight Timer, which will fire after a set number of minutes after midnight - /// - /// How many Minutes after midnight do we start the timer? between 0 and 59 - public MidnightTimer(int MinutesAfterMidnight) : this() - { - // Check if the supplied m is between 0 and 59 mins after midnight - if ((MinutesAfterMidnight < 0) || (MinutesAfterMidnight > 59)) - { - // if it is outside of this range, throw a exception - throw new ArgumentException("Minutes after midnight is less than 0 or more than 60!"); - } - - // Set the internal value - s_MinutesAfterMidnight = MinutesAfterMidnight; - } - - #endregion - - #region Public Methods - - /// - /// Starts the Timer to fire a certain amount of Minutes AFTER midnight, every night (based on server time). - /// - public void Start() - { - // Subtract the current time, from midnigh (tomorrow). - // This will return a value, which will be used to set the Timer interval - var ts = this.GetMidnight(s_MinutesAfterMidnight).Subtract(DateTime.Now); - - // We only want the Hours, Minuters and Seconds until midnight - var tsMidnight = new TimeSpan(ts.Hours, ts.Minutes, ts.Seconds); - - // Create the Timer - s_timer = new Timer(tsMidnight.TotalMilliseconds); - - // Set the event handler - s_timer.Elapsed += Timer_Elapsed; - - // Hook into when Windows Time changes - Thanks to Nicole1982 for the suggestion & BruceN for the help - Microsoft.Win32.SystemEvents.TimeChanged += WindowsTimeChangeHandler; - - // Start the timer - s_timer.Start(); - } - - /// - /// Stops the timer - /// - public void Stop() - { - // sanity checking - if (s_timer != null) - { - // Stop the orginal timer - s_timer.Stop(); - - // As this is a static event, clean it up - Microsoft.Win32.SystemEvents.TimeChanged -= WindowsTimeChangeHandler; - } - } - - /// - /// Restarts the timer - /// - public void Restart() - { - // Stop the timer - Stop(); - - // (Re)Start - Start(); - } - - #endregion - - #region Hanlders - - /// - /// Standard Event/Delegate handler, if its not null, fire the event - /// - private void OnTimeReached() - { - // Fire the event - TimeReached?.Invoke(GetMidnight(s_MinutesAfterMidnight)); - } - - /// - /// Handles Windows Time Changes which cause the timer to stop/start aka Reset - /// - /// - /// - private void WindowsTimeChangeHandler(object sender, EventArgs e) - { - // Please see https://connect.microsoft.com/VisualStudio/feedback/details/776003/systemevent-timechanged-is-fired-twice - // The event is fired twice.. I assume 'once' for the change from the old system time and 'once' when the time has been changed. - // i.e Event is fired when Systerm time has Changed and is Changing - - // Restart the timer -> note as above, this is called twice - Restart(); - } - - /// - /// Executes when the timer has elasped - /// - /// - /// - private void Timer_Elapsed(object sender, ElapsedEventArgs e) - { - // Stop the orginal timer - s_timer.Stop(); // swapped order thanks to Jeremy - - // now raise a event that the timer has elapsed - OnTimeReached(); // swapped order thanks to Jeremy - - // reset the timer - Start(); - } - - #endregion - - #region Private Methods - - /// - /// Obtains a DateTime of Midngiht - /// - /// How many minuets after midnight to add? - /// - private DateTime GetMidnight(int MinutesAfterMidnight) - { - // Lets work out the next occuring midnight - // Add 1 day and use hours 0, min 0 and second 0 (remember this is 24 hour time) - - // Thanks to Yashar for this code/fix - var tomorrow = DateTime.Now.AddDays(1); - - // Return a datetime for Tomorrow, but with how many minutes after midnight - return new DateTime(tomorrow.Year, tomorrow.Month, tomorrow.Day, 0, MinutesAfterMidnight, 0); - } - - #endregion - - #region Disposing - - /// - /// Dispose of the timer (also stops the timer) - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (_disposed) return; - - if (disposing) - { - // free managed resources - // Pass to Stop to unsubscribe the event handler of Windows System Time Changes - Stop(); - s_timer.Dispose(); - } - - // free native resources if there are any. - //if (nativeResource != IntPtr.Zero) - //{ - //} - - _disposed = true; - } - - #endregion - } -} \ No newline at end of file diff --git a/src/Net/Configuration/HttpServerConfig.cs b/src/Net/Configuration/HttpServerConfig.cs deleted file mode 100644 index 9d2c136b..00000000 --- a/src/Net/Configuration/HttpServerConfig.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace WhMgr.Net.Configuration -{ - public class HttpServerConfig - { - public string Host { get; set; } - - public ushort Port { get; set; } - - public int DespawnTimerMinimum { get; set; } - - public bool CheckForDuplicates { get; set; } - - public HttpServerConfig() - { - Host = "*"; - Port = 8008; - DespawnTimerMinimum = 5; - CheckForDuplicates = true; - } - } -} \ No newline at end of file diff --git a/src/Net/DataReceivedEventArgs.cs b/src/Net/DataReceivedEventArgs.cs deleted file mode 100644 index 2a37d80c..00000000 --- a/src/Net/DataReceivedEventArgs.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace WhMgr.Net -{ - using System; - - public sealed class DataReceivedEventArgs : EventArgs - { - public T Data { get; } - - public DataReceivedEventArgs(T data) - { - Data = data; - } - } -} \ No newline at end of file diff --git a/src/Net/HttpServer.cs b/src/Net/HttpServer.cs deleted file mode 100644 index 9e3168bc..00000000 --- a/src/Net/HttpServer.cs +++ /dev/null @@ -1,908 +0,0 @@ -namespace WhMgr.Net -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Net; - using System.Text; - using System.Threading; - - using Newtonsoft.Json; - using POGOProtos.Rpc; - using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; - - using WhMgr.Comparers; - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Net.Models; - using WhMgr.Net.Configuration; - - /// - /// HTTP listener class - /// - public class HttpServer - { - #region Variables - - private static readonly IEventLogger _logger = EventLogger.GetLogger("HTTP", Program.LogLevel); - private static readonly object _lock = new object(); - private readonly Dictionary _processedPokemon; - private readonly Dictionary _processedRaids; - private readonly Dictionary _processedGyms; - private readonly Dictionary _processedPokestops; - private readonly Dictionary _processedQuests; - private readonly Dictionary _processedWeather; - private readonly System.Timers.Timer _clearCacheTimer; - private HttpListener _server; - private bool _initialized = false; - private readonly int _despawnTimerMinimumMinutes = 5; - private static string _endpoint; - private readonly bool _checkForDuplicates; - - #endregion - - #region Properties - - /// - /// HTTP listening interface/host address - /// - public string Host { get; } - - /// - /// Http listening port - /// - public ushort Port { get; } - - /// - /// Logs incoming webhook data if set to true - /// - public bool IsDebug { get; set; } - - /// - /// Skips webhook raid eggs - /// - public bool SkipEggs { get; set; } - - #endregion - - #region Events - - /// - /// Trigged when a Pokemon webhook payload is received. - /// - public event EventHandler> PokemonReceived; - - private void OnPokemonReceived(PokemonData pokemon) => PokemonReceived?.Invoke(this, new DataReceivedEventArgs(pokemon)); - - /// - /// Trigged when a Raid or Raid Egg webhook payload is received. - /// - public event EventHandler> RaidReceived; - - private void OnRaidReceived(RaidData raid) => RaidReceived?.Invoke(this, new DataReceivedEventArgs(raid)); - - /// - /// Trigged when a Field Research Quest webhook payload is received. - /// - public event EventHandler> QuestReceived; - - private void OnQuestReceived(QuestData quest) => QuestReceived?.Invoke(this, new DataReceivedEventArgs(quest)); - - /// - /// Trigged when a Pokestop webhook (lure/invasion) payload is received. - /// - public event EventHandler> PokestopReceived; - - private void OnPokestopReceived(PokestopData pokestop) => PokestopReceived?.Invoke(this, new DataReceivedEventArgs(pokestop)); - - /// - /// Trigged when a Gym webhook payload is received. - /// - public event EventHandler> GymReceived; - - private void OnGymReceived(GymData gym) => GymReceived?.Invoke(this, new DataReceivedEventArgs(gym)); - - /// - /// Trigged when a Gym Details webhook payload is received. - /// - public event EventHandler> GymDetailsReceived; - - private void OnGymDetailsReceived(GymDetailsData gymDetails) => GymDetailsReceived?.Invoke(this, new DataReceivedEventArgs(gymDetails)); - - /// - /// Trigged when a Weather webhook payload is received. - /// - public event EventHandler> WeatherReceived; - - private void OnWeatherReceived(WeatherData weather) => WeatherReceived?.Invoke(this, new DataReceivedEventArgs(weather)); - - #endregion - - #region Constructor - - /// - /// Instantiates a new class. - /// - /// Http server config - public HttpServer(HttpServerConfig httpConfig) - { - // If no host is set use wildcard for all host interfaces - Host = httpConfig.Host ?? "*"; - Port = httpConfig.Port; - _processedPokemon = new Dictionary(); - _processedRaids = new Dictionary(); - _processedGyms = new Dictionary(); - _processedPokestops = new Dictionary(); - _processedQuests = new Dictionary(); - _processedWeather = new Dictionary(); - _despawnTimerMinimumMinutes = httpConfig.DespawnTimerMinimum; - _clearCacheTimer = new System.Timers.Timer { Interval = 60000 * 15 }; - _clearCacheTimer.Elapsed += (sender, e) => OnClearCache(); - _checkForDuplicates = httpConfig.CheckForDuplicates; - - Initialize(); - } - - #endregion - - #region Public Methods - - /// - /// Starts the HTTP listener server - /// - public void Start() - { - _logger.Trace($"Start"); - - if (!_initialized) - { - _logger.Error("HTTP listener not initalized, make sure you run as administrator or root."); - return; - } - - if (_server.IsListening) - { - _logger.Debug($"Already listening, failed to start..."); - return; - } - - try - { - _logger.Info($"Starting..."); - _server.Start(); - } - catch (HttpListenerException ex) - { - if (ex.ErrorCode == 5) - { - _logger.Warn("You need to run the following command in order to not have to run as Administrator or root every start:"); - _logger.Warn($"netsh http add urlacl url={_endpoint} user={Environment.UserDomainName}\\{Environment.UserName} listen=yes"); - } - else - { - throw; - } - } - - if (_server.IsListening) - { - _logger.Debug($"Listening on port {Port}..."); - } - - _logger.Info($"Starting HttpServer request handler..."); - var requestThread = new Thread(RequestHandler) { IsBackground = true }; - requestThread.Start(); - - // Start the cache cleaner - _clearCacheTimer.Start(); - } - - /// - /// Attempts to stop the HTTP listener server - /// - public void Stop() - { - _logger.Trace($"Stop"); - - if (!_server.IsListening) - { - _logger.Debug($"Not running, failed to stop..."); - return; - } - - _logger.Info($"Stopping..."); - _server.Stop(); - - // Stop the cache cleaner - _clearCacheTimer.Stop(); - } - - #endregion - - #region Data Parsing Methods - - private void RequestHandler() - { - while (_server.IsListening) - { - var context = _server.GetContext(); - var response = context.Response; - - if (context.Request?.InputStream == null) - continue; - - // Read from the POST data input stream of the request - using (var sr = new StreamReader(context.Request.InputStream)) - { - try - { - // Read to the end of the stream as a string - var data = sr.ReadToEnd(); - ParseData(data); - } - catch (HttpListenerException hle) - { - _logger.Error(hle); - - //Disconnected, reconnect. - HandleDisconnect(); - } - } - - try - { - // Convert the default response message to UTF8 encoded bytes - var buffer = Encoding.UTF8.GetBytes(Strings.DefaultResponseMessage); - response.ContentLength64 = buffer.Length; - if (response?.OutputStream != null) - { - // Write the response buffer to the output stream - response.OutputStream.Write(buffer, 0, buffer.Length); - } - // Close the response - context.Response.Close(); - } - catch (Exception ex) - { - _logger.Error(ex); - } - - Thread.Sleep(10); - } - } - - private void ParseData(string data) - { - if (string.IsNullOrEmpty(data)) - return; - - try - { - if (IsDebug) - { - lock (_lock) - { - File.AppendAllText(Strings.DebugLogFileName, data + Environment.NewLine); - } - } - - var messages = JsonConvert.DeserializeObject>(data); - // If we fail to deserialize webhook payload, skip - if (messages == null) - return; - - for (var i = 0; i < messages.Count; i++) - { - var message = messages[i]; - switch (message.Type) - { - case PokemonData.WebHookHeader: - ParsePokemon(message.Message); - break; - case GymData.WebhookHeader: - ParseGym(message.Message); - break; - case GymDetailsData.WebhookHeader: - ParseGymDetails(message.Message); - break; - case RaidData.WebHookHeader: - ParseRaid(message.Message); - break; - case QuestData.WebHookHeader: - ParseQuest(message.Message); - break; - case PokestopData.WebhookHeader: - case PokestopData.WebhookHeaderInvasion: - ParsePokestop(message.Message); - break; - case WeatherData.WebhookHeader: - ParseWeather(message.Message); - break; - } - } - } - catch (Exception ex) - { - _logger.Error(ex); - _logger.Debug(Convert.ToString(data)); - } - } - - private void ParsePokemon(dynamic message) - { - try - { - PokemonData pokemon = JsonConvert.DeserializeObject(Convert.ToString(message)); - if (pokemon == null) - { - _logger.Error($"Failed to parse Pokemon webhook object: {message}"); - return; - } - - pokemon.SetDespawnTime(); - - // Only process Pokemon with despawn timers that meet a specific minimum - if (pokemon.SecondsLeft.TotalMinutes < _despawnTimerMinimumMinutes) - return; - - if (_checkForDuplicates) - { - lock (_processedPokemon) - { - if (_processedPokemon.ContainsKey(pokemon.EncounterId) && (pokemon.IsMissingStats || !pokemon.IsMissingStats && !_processedPokemon[pokemon.EncounterId].IsMissingStats)) - return; - if (!_processedPokemon.ContainsKey(pokemon.EncounterId)) - _processedPokemon.Add(pokemon.EncounterId, new ScannedPokemon(pokemon)); - if (!pokemon.IsMissingStats && _processedPokemon[pokemon.EncounterId].IsMissingStats) - _processedPokemon[pokemon.EncounterId] = new ScannedPokemon(pokemon); - } - } - - OnPokemonReceived(pokemon); - } - catch (Exception ex) - { - _logger.Error(ex); - _logger.Debug(Convert.ToString(message)); - } - } - - private void ParseRaid(dynamic message) - { - try - { - RaidData raid = JsonConvert.DeserializeObject(Convert.ToString(message)); - if (raid == null) - { - _logger.Error($"Failed to parse Pokemon webhook object: {message}"); - return; - } - - /* - if (SkipEggs && raid.PokemonId == 0) - { - _logger.Debug($"Level {raid.Level} Egg, skipping..."); - return; - } - */ - - raid.SetTimes(); - - if (_checkForDuplicates) - { - lock (_processedRaids) - { - if (_processedRaids.ContainsKey(raid.GymId)) - { - if (_processedRaids[raid.GymId].PokemonId == raid.PokemonId && - _processedRaids[raid.GymId].FormId == raid.Form && - _processedRaids[raid.GymId].CostumeId == raid.Costume && - _processedRaids[raid.GymId].Level == raid.Level && - !_processedRaids[raid.GymId].IsExpired) - { - // Processed raid already - return; - } - - _processedRaids[raid.GymId] = new ScannedRaid(raid); - } - else - { - _processedRaids.Add(raid.GymId, new ScannedRaid(raid)); - } - } - } - - OnRaidReceived(raid); - } - catch (Exception ex) - { - _logger.Error(ex.StackTrace); - _logger.Debug(Convert.ToString(message)); - } - } - - private void ParseQuest(dynamic message) - { - try - { - QuestData quest = JsonConvert.DeserializeObject(Convert.ToString(message)); - if (quest == null) - { - _logger.Error($"Failed to parse Quest webhook object: {message}"); - return; - } - - if (_checkForDuplicates) - { - lock (_processedQuests) - { - if (_processedQuests.ContainsKey(quest.PokestopId)) - { - if (_processedQuests[quest.PokestopId].Type == quest.Type && - _processedQuests[quest.PokestopId].Rewards.ScrambledEquals(quest.Rewards, new QuestRewardEqualityComparer()) && - _processedQuests[quest.PokestopId].Conditions.ScrambledEquals(quest.Conditions, new QuestConditionEqualityComparer())) - { - // Processed quest already - return; - } - - _processedQuests[quest.PokestopId] = new ScannedQuest(quest); - } - else - { - _processedQuests.Add(quest.PokestopId, new ScannedQuest(quest)); - } - } - } - - OnQuestReceived(quest); - } - catch (Exception ex) - { - _logger.Error(ex); - _logger.Debug(Convert.ToString(message)); - } - } - - private void ParsePokestop(dynamic message) - { - try - { - PokestopData pokestop = JsonConvert.DeserializeObject(Convert.ToString(message)); - if (pokestop == null) - { - _logger.Error($"Failed to parse pokestop webhook object: {message}"); - return; - } - - pokestop.SetTimes(); - - if (_checkForDuplicates) - { - lock (_processedPokestops) - { - if (_processedPokestops.ContainsKey(pokestop.PokestopId)) - { - var processedLureAlready = _processedPokestops[pokestop.PokestopId].LureType == pokestop.LureType && _processedPokestops[pokestop.PokestopId].LureExpireTime == pokestop.LureExpireTime; - var processedInvasionAlready = _processedPokestops[pokestop.PokestopId].GruntType == pokestop.GruntType && _processedPokestops[pokestop.PokestopId].InvasionExpireTime == pokestop.InvasionExpireTime; - if (processedLureAlready || processedInvasionAlready) - { - //_logger.Debug($"PROCESSED LURE OR INVASION ALREADY: Id: {pokestop.PokestopId} Name: {pokestop.Name} Lure: {pokestop.LureType} Expires: {pokestop.LureExpireTime} Grunt: {pokestop.GruntType} Expires: {pokestop.InvasionExpireTime}"); - // Processed pokestop lure or invasion already - return; - } - - _processedPokestops[pokestop.PokestopId] = new ScannedPokestop(pokestop); - } - else - { - _processedPokestops.Add(pokestop.PokestopId, new ScannedPokestop(pokestop)); - } - } - } - - OnPokestopReceived(pokestop); - } - catch (Exception ex) - { - _logger.Error(ex); - _logger.Debug(Convert.ToString(message)); - } - } - - private void ParseGym(dynamic message) - { - try - { - GymData gym = JsonConvert.DeserializeObject(Convert.ToString(message)); - if (gym == null) - { - _logger.Error($"Failed to parse gym webhook object: {message}"); - return; - } - - OnGymReceived(gym); - } - catch (Exception ex) - { - _logger.Error(ex); - _logger.Debug(Convert.ToString(message)); - } - } - - private void ParseGymDetails(dynamic message) - { - try - { - GymDetailsData gymDetails = JsonConvert.DeserializeObject(Convert.ToString(message)); - if (gymDetails == null) - { - _logger.Error($"Failed to parse gym details webhook object: {message}"); - return; - } - - if (_checkForDuplicates) - { - lock (_processedGyms) - { - if (_processedGyms.ContainsKey(gymDetails.GymId)) - { - if (gymDetails.Team == gymDetails.Team && - gymDetails.SlotsAvailable == gymDetails.SlotsAvailable && - gymDetails.InBattle == gymDetails.InBattle) - { - // Gym already processed - return; - } - - _processedGyms[gymDetails.GymId] = new ScannedGym(gymDetails); - } - else - { - _processedGyms.Add(gymDetails.GymId, new ScannedGym(gymDetails)); - } - } - } - - OnGymDetailsReceived(gymDetails); - } - catch (Exception ex) - { - _logger.Error(ex); - _logger.Debug(Convert.ToString(message)); - } - } - - private void ParseWeather(dynamic message) - { - try - { - WeatherData weather = JsonConvert.DeserializeObject(Convert.ToString(message)); - if (weather == null) - { - _logger.Error($"Failed to parse weather webhook object: {message}"); - return; - } - - if (_checkForDuplicates) - { - lock (_processedWeather) - { - if (_processedWeather.ContainsKey(weather.Id)) - { - if (_processedWeather[weather.Id].GameplayCondition == weather.GameplayCondition && - _processedWeather[weather.Id].CloudLevel == weather.CloudLevel && - _processedWeather[weather.Id].FogLevel == weather.FogLevel && - _processedWeather[weather.Id].RainLevel == weather.RainLevel && - _processedWeather[weather.Id].Severity == weather.Severity && - _processedWeather[weather.Id].SnowLevel == weather.SnowLevel && - _processedWeather[weather.Id].WindLevel == weather.WindLevel && - _processedWeather[weather.Id].SpecialEffectLevel == weather.SpecialEffectLevel && - _processedWeather[weather.Id].WarnWeather == weather.WarnWeather && - _processedWeather[weather.Id].WindDirection == weather.WindDirection) - { - // Processed weather already - return; - } - - _processedWeather[weather.Id] = weather; - } - else - { - _processedWeather.Add(weather.Id, weather); - } - } - } - - OnWeatherReceived(weather); - } - catch (Exception ex) - { - _logger.Error(ex); - _logger.Debug(Convert.ToString(message)); - } - } - - #endregion - - #region Private Methods - - private void Initialize() - { - _logger.Trace("Initialize"); - try - { - _server = CreateListener(); - _endpoint = $"http://{Host}:{Port}/"; - if (!_server.Prefixes.Contains(_endpoint)) - { - _server.Prefixes.Add(_endpoint); - } - _initialized = true; - } - catch (Exception ex) - { - _logger.Error(ex); - } - } - - private HttpListener CreateListener() - { - return new HttpListener(); - } - - private void HandleDisconnect() - { - _logger.Warn("!!!!! HTTP listener disconnected, handling reconnect..."); - _logger.Warn("Stopping existing listeners..."); - Stop(); - - _logger.Warn("Disposing of old listener objects..."); - _server.Close(); - _server = null; - - _logger.Warn("Initializing..."); - Initialize(); - - //if (_requestThread != null) - //{ - // _logger.Info($"Exiting HttpServer main thread..."); - // _requestThread.Abort(); - // _requestThread = null; - //} - - _logger.Warn("Starting back up..."); - Start(); - - _logger.Debug("Disconnect handled."); - } - - private void OnClearCache() - { - //List expiredEncounters; - lock (_processedPokemon) - { - var expiredEncounters = _processedPokemon.Where(pair => pair.Value.IsExpired).Select(pair => pair.Key).ToList(); - foreach (var encounterId in expiredEncounters) - { - // Spawn expired, remove from cache - _processedPokemon.Remove(encounterId); - } - } - - //List expiredRaids; - lock (_processedRaids) - { - var expiredRaids = _processedRaids.Where(pair => pair.Value.IsExpired).Select(pair => pair.Key).ToList(); - foreach (var gymId in expiredRaids) - { - // Gym expired, remove from cache - _processedRaids.Remove(gymId); - } - } - - //List expiredQuests; - lock (_processedQuests) - { - var expiredQuests = _processedQuests.Where(pair => pair.Value.IsExpired).Select(pair => pair.Key).ToList(); - foreach (var pokestopId in expiredQuests) - { - // Quest expired, remove from cache - _processedQuests.Remove(pokestopId); - } - } - - //List expiredPokestops; - lock (_processedPokestops) - { - var expiredPokestops = _processedPokestops.Where(pair => pair.Value.IsExpired).Select(pair => pair.Key).ToList(); - foreach (var pokestopId in expiredPokestops) - { - // Pokestop lure or invasion expired, remove from cache - _processedPokestops.Remove(pokestopId); - } - } - - // Log expired ones outside lock so that we don't hog too much time on _processedPokemon, _processedRaids, _processedQuests, and _processedPokestops - /* - foreach (var encounterId in expiredEncounters) - _logger.Debug($"Removed expired Pokemon spawn {encounterId} from cache"); - - foreach (var gymId in expiredRaids) - _logger.Debug($"Removed expired Raid for Gym {gymId} from cache"); - - foreach (var pokestopId in expiredQuests) - _logger.Debug($"Removed expired Quest for Pokestop {pokestopId} from cache"); - - foreach (var pokestopId in expiredPokestops) - _logger.Debug($"Removed expired Pokestop lure or invasion {pokestopId} from cache"); - */ - } - - #endregion - - private class WebhookMessage - { - [JsonProperty("type")] - public string Type { get; set; } - - [JsonProperty("message")] - public dynamic Message { get; set; } - } - - #region Cache Structs - - private struct ScannedPokemon - { - public double Latitude { get; } - - public double Longitude { get; } - - public bool IsMissingStats { get; } - - public DateTime DespawnTime { get; } - - public bool IsExpired - { - get - { - var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); - return now > DespawnTime; - } - } - - public ScannedPokemon(PokemonData pokemon) - { - Latitude = pokemon.Latitude; - Longitude = pokemon.Longitude; - IsMissingStats = pokemon.IsMissingStats; - DespawnTime = pokemon.DespawnTime; - } - } - - private struct ScannedRaid - { - public double Latitude { get; } - - public double Longitude { get; } - - public string Level { get; } - - public uint PokemonId { get; } - - public int FormId { get; } - - public int CostumeId { get; } - - public DateTime ExpireTime { get; } - - public bool IsExpired - { - get - { - var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); - return now > ExpireTime; - } - } - - public ScannedRaid(RaidData raid) - { - Latitude = raid.Latitude; - Longitude = raid.Longitude; - Level = raid.Level; - PokemonId = raid.PokemonId; - FormId = raid.Form; - CostumeId = raid.Costume; - ExpireTime = raid.EndTime; - } - } - - private struct ScannedQuest - { - public double Latitude { get; } - - public double Longitude { get; } - - public QuestType Type { get; } - - public List Rewards { get; } - - public List Conditions { get; } - - public DateTime Added { get; } - - public bool IsExpired - { - get - { - var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); - return now.Day != Added.Day; - } - } - - public ScannedQuest(QuestData quest) - { - Latitude = quest.Latitude; - Longitude = quest.Longitude; - Type = quest.Type; - Rewards = quest.Rewards; - Conditions = quest.Conditions; - Added = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); - } - } - - private struct ScannedPokestop - { - public double Latitude { get; } - - public double Longitude { get; } - - public PokestopLureType LureType { get; } - - public DateTime LureExpireTime { get; } - - public InvasionCharacter GruntType { get; } - - public DateTime InvasionExpireTime { get; } - - public bool IsExpired - { - get - { - var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); - return now > LureExpireTime || now > InvasionExpireTime; - } - } - - public ScannedPokestop(PokestopData pokestop) - { - Latitude = pokestop.Latitude; - Longitude = pokestop.Longitude; - LureType = pokestop.LureType; - LureExpireTime = pokestop.LureExpireTime; - GruntType = pokestop.GruntType; - InvasionExpireTime = pokestop.InvasionExpireTime; - } - } - - private struct ScannedGym - { - public PokemonTeam Team { get; } - - public int SlotsAvailable { get; } - - public bool InBattle { get; } - - public ScannedGym(GymDetailsData gym) - { - Team = gym.Team; - SlotsAvailable = gym.SlotsAvailable; - InBattle = gym.InBattle; - } - } - - #endregion - } -} \ No newline at end of file diff --git a/src/Net/Models/DiscordEmbedNotification.cs b/src/Net/Models/DiscordEmbedNotification.cs deleted file mode 100644 index f801a8ee..00000000 --- a/src/Net/Models/DiscordEmbedNotification.cs +++ /dev/null @@ -1,26 +0,0 @@ -namespace WhMgr.Net.Models -{ - using System; - using System.Collections.Generic; - - using DSharpPlus.Entities; - - public class DiscordEmbedNotification - { - public string Username { get; set; } - - public string IconUrl { get; set; } - - public string Description { get; set; } - - public List Embeds { get; set; } - - public DiscordEmbedNotification(string username, string iconUrl, string description, List embeds) - { - Username = username; - IconUrl = iconUrl; - Description = description; - Embeds = embeds; - } - } -} \ No newline at end of file diff --git a/src/Net/Models/GymData.cs b/src/Net/Models/GymData.cs deleted file mode 100644 index 11008888..00000000 --- a/src/Net/Models/GymData.cs +++ /dev/null @@ -1,48 +0,0 @@ -namespace WhMgr.Net.Models -{ - using Newtonsoft.Json; - - /// - /// RealDeviceMap Gym webhook model class. - /// - public sealed class GymData - { - public const string WebhookHeader = "gym"; - - [JsonProperty("gym_id")] - public string GymId { get; set; } - - [JsonProperty("gym_name")] - public string GymName { get; set; } - - [JsonProperty("url")] - public string Url { get; set; } - - [JsonProperty("latitude")] - public double Latitude { get; set; } - - [JsonProperty("longitude")] - public double Longitude { get; set; } - - [JsonProperty("enabled")] - public bool Enabled { get; set; } - - [JsonProperty("team_id")] - public PokemonTeam Team { get; set; } = PokemonTeam.Neutral; - - [JsonProperty("last_modified")] - public ulong LastModified { get; set; } - - [JsonProperty("slots_available")] - public ushort SlotsAvailable { get; set; } - - [JsonProperty("sponsor_id")] - public bool SponsorId { get; set; } - - [JsonProperty("guard_pokemon_id")] - public int GuardPokemonId { get; set; } - - [JsonProperty("raid_active_until")] - public ulong RaidActiveUntil { get; set; } - } -} \ No newline at end of file diff --git a/src/Net/Models/GymDetailsData.cs b/src/Net/Models/GymDetailsData.cs deleted file mode 100644 index 6f58cbf8..00000000 --- a/src/Net/Models/GymDetailsData.cs +++ /dev/null @@ -1,226 +0,0 @@ -namespace WhMgr.Net.Models -{ - using System; - using System.Collections.Generic; - using System.Linq; - - using DSharpPlus; - using DSharpPlus.Entities; - using Newtonsoft.Json; - using ServiceStack.DataAnnotations; - using ServiceStack.OrmLite; - - using WhMgr.Alarms.Alerts; - using WhMgr.Alarms.Models; - using WhMgr.Configuration; - using WhMgr.Data; - using WhMgr.Diagnostics; - using WhMgr.Geofence; - using WhMgr.Services; - using WhMgr.Utilities; - - /// - /// RealDeviceMap Gym Details webhook model class. - /// - [Alias("gym")] - public sealed class GymDetailsData - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("GYMDETAILSDATA", Program.LogLevel); - - public const string WebhookHeader = "gym_details"; - - #region Properties - - [ - JsonProperty("id"), - Alias("id") - ] - public string GymId { get; set; } - - [ - JsonProperty("name"), - Alias("name") - ] - public string GymName { get; set; } = "Unknown"; - - [ - JsonProperty("url"), - Alias("name") - ] - public string Url { get; set; } - - [ - JsonProperty("latitude"), - Alias("lat") - ] - public double Latitude { get; set; } - - [ - JsonProperty("longitude"), - Alias("lon") - ] - public double Longitude { get; set; } - - [ - JsonProperty("team"), - Alias("team_id") - ] - public PokemonTeam Team { get; set; } = PokemonTeam.Neutral; - - [ - JsonProperty("slots_available"), - Alias("availble_slots") // TODO: Typflo - ] - public ushort SlotsAvailable { get; set; } - - [ - JsonProperty("sponsor_id"), - Alias("sponsor_id") - ] - public bool SponsorId { get; set; } - - [ - JsonProperty("in_battle"), - Alias("in_battle") - ] - public bool InBattle { get; set; } - - #endregion - - public DiscordEmbedNotification GenerateGymMessage(ulong guildId, DiscordClient client, WhConfig whConfig, AlarmObject alarm, GymDetailsData oldGym, string city) - { - var server = whConfig.Servers[guildId]; - var alertType = AlertMessageType.Gyms; - var alert = alarm?.Alerts[alertType] ?? server.DmAlerts?[alertType] ?? AlertMessage.Defaults[alertType]; - var properties = GetProperties(client.Guilds[guildId], whConfig, city, oldGym); - var eb = new DiscordEmbedBuilder - { - Title = DynamicReplacementEngine.ReplaceText(alert.Title, properties), - Url = DynamicReplacementEngine.ReplaceText(alert.Url, properties), - ImageUrl = DynamicReplacementEngine.ReplaceText(alert.ImageUrl, properties), - ThumbnailUrl = DynamicReplacementEngine.ReplaceText(alert.IconUrl, properties), - Description = DynamicReplacementEngine.ReplaceText(alert.Content, properties), - Color = Team == PokemonTeam.Mystic ? DiscordColor.Blue : - Team == PokemonTeam.Valor ? DiscordColor.Red : - Team == PokemonTeam.Instinct ? DiscordColor.Yellow : - DiscordColor.LightGray, - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = DynamicReplacementEngine.ReplaceText(alert.Footer?.Text, properties), - IconUrl = DynamicReplacementEngine.ReplaceText(alert.Footer?.IconUrl, properties) - } - }; - var username = DynamicReplacementEngine.ReplaceText(alert.Username, properties); - var iconUrl = DynamicReplacementEngine.ReplaceText(alert.AvatarUrl, properties); - var description = DynamicReplacementEngine.ReplaceText(alarm?.Description, properties); - return new DiscordEmbedNotification(username, iconUrl, description, new List { eb.Build() }); - } - - private IReadOnlyDictionary GetProperties(DiscordGuild guild, WhConfig whConfig, string city, GymDetailsData oldGym) - { - var exEmojiId = MasterFile.Instance.Emojis["ex"]; - var exEmoji = string.IsNullOrEmpty(MasterFile.Instance.CustomEmojis["ex"]) ? exEmojiId > 0 - ? string.Format(Strings.EmojiSchema, "ex", exEmojiId): "EX" - : MasterFile.Instance.CustomEmojis["ex"]; - var teamEmojiId = MasterFile.Instance.Emojis[Team.ToString().ToLower()]; - var teamEmoji = string.IsNullOrEmpty(MasterFile.Instance.CustomEmojis[Team.ToString().ToLower()]) - ? teamEmojiId > 0 - ? string.Format(Strings.EmojiSchema, Team.ToString().ToLower(), teamEmojiId) - : Team.ToString() - : MasterFile.Instance.CustomEmojis[Team.ToString().ToLower()]; - var oldTeamEmojiId = MasterFile.Instance.Emojis[oldGym?.Team.ToString().ToLower()]; - var oldTeamEmoji = string.IsNullOrEmpty(MasterFile.Instance.CustomEmojis[oldGym?.Team.ToString().ToLower()]) - ? oldTeamEmojiId > 0 - ? string.Format(Strings.EmojiSchema, oldGym?.Team.ToString().ToLower(), oldTeamEmojiId) - : oldGym?.Team.ToString() - : MasterFile.Instance.CustomEmojis[oldGym.Team.ToString().ToLower()]; - - var gmapsLink = string.Format(Strings.GoogleMaps, Latitude, Longitude); - var appleMapsLink = string.Format(Strings.AppleMaps, Latitude, Longitude); - var wazeMapsLink = string.Format(Strings.WazeMaps, Latitude, Longitude); - var scannerMapsLink = string.Format(whConfig.Urls.ScannerMap, Latitude, Longitude); - var gymImageUrl = $"https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/ICONS/ICONS/gym/{Convert.ToInt32(Team)}.png"; // TODO: Build gym image url - var staticMapLink = StaticMap.GetUrl(whConfig.Urls.StaticMap, whConfig.StaticMaps["gyms"], Latitude, Longitude, gymImageUrl); - //var staticMapLink = string.Format(whConfig.Urls.StaticMap, Latitude, Longitude);//whConfig.Urls.StaticMap.Gyms.Enabled ? string.Format(whConfig.Urls.StaticMap.Gyms.Url, Latitude, Longitude) : string.Empty - var gmapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, gmapsLink); - var appleMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, appleMapsLink); - var wazeMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, wazeMapsLink); - var scannerMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, scannerMapsLink); - var address = new Location(null, city, Latitude, Longitude).GetAddress(whConfig); - //var staticMapLocationLink = string.IsNullOrEmpty(whConfig.ShortUrlApiUrl) ? staticMapLink : NetUtil.CreateShortUrl(whConfig.ShortUrlApiUrl, staticMapLink); - - const string defaultMissingValue = "?"; - var dict = new Dictionary - { - //Main properties - { "gym_id", GymId }, - { "gym_name", GymName }, - { "gym_url", Url }, - { "gym_team", Team.ToString() }, - { "gym_team_id", Convert.ToInt32(Team).ToString() }, - { "gym_team_emoji", teamEmoji }, - { "old_gym_team", oldGym.Team.ToString() }, - { "old_gym_team_id", Convert.ToInt32(oldGym.Team).ToString() }, - { "old_gym_team_emoji", oldTeamEmoji }, - { "team_changed", Convert.ToString(oldGym?.Team != Team) }, - { "in_battle", Convert.ToString(InBattle) }, - { "under_attack", Convert.ToString(InBattle) }, - { "is_ex", Convert.ToString(SponsorId) }, - { "ex_emoji", exEmoji }, - { "slots_available", SlotsAvailable == 0 - ? "Full" - : SlotsAvailable == 6 - ? "Empty" - : SlotsAvailable.ToString("N0") }, - - //Location properties - { "geofence", city ?? defaultMissingValue }, - { "lat", Latitude.ToString() }, - { "lng", Longitude.ToString() }, - { "lat_5", Latitude.ToString("0.00000") }, - { "lng_5", Longitude.ToString("0.00000") }, - - //Location links - { "tilemaps_url", staticMapLink }, - { "gmaps_url", gmapsLocationLink }, - { "applemaps_url", appleMapsLocationLink }, - { "wazemaps_url", wazeMapsLocationLink }, - { "scanmaps_url", scannerMapsLocationLink }, - - { "address", address?.Address }, - - // Discord Guild properties - { "guild_name", guild?.Name }, - { "guild_img_url", guild?.IconUrl }, - - { "date_time", DateTime.Now.ToString() }, - - //Misc properties - { "br", "\r\n" } - }; - return dict; - } - - internal static Dictionary GetGyms(string connectionString = "") - { - if (string.IsNullOrEmpty(connectionString)) - return null; - - try - { - using (var db = DataAccessLayer.CreateFactory(connectionString).Open()) - { - var gyms = db.LoadSelect(); - var dict = gyms?.ToDictionary(x => x.GymId, x => x); - return dict; - } - } - catch (Exception ex) - { - _logger.Error(ex); - } - - return null; - } - } -} \ No newline at end of file diff --git a/src/Net/Models/PVPRank.cs b/src/Net/Models/PVPRank.cs deleted file mode 100644 index 20728435..00000000 --- a/src/Net/Models/PVPRank.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace WhMgr.Net.Models -{ - using Newtonsoft.Json; - - /// - /// PVP Pokemon rank class. - /// - public sealed class PVPRank - { - [JsonProperty("rank")] - public int? Rank { get; set; } - - [JsonProperty("percentage")] - public double? Percentage { get; set; } - - [JsonProperty("pokemon")] - public uint PokemonId { get; set; } - - [JsonProperty("form")] - public int FormId { get; set; } - - [JsonProperty("level")] - public double? Level { get; set; } - - [JsonProperty("cp")] - public int? CP { get; set; } - } -} \ No newline at end of file diff --git a/src/Net/Models/PokemonData.cs b/src/Net/Models/PokemonData.cs deleted file mode 100644 index 153ca8c3..00000000 --- a/src/Net/Models/PokemonData.cs +++ /dev/null @@ -1,767 +0,0 @@ -namespace WhMgr.Net.Models -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Text; - - using DSharpPlus; - using DSharpPlus.Entities; - using Newtonsoft.Json; - using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; - using WeatherCondition = POGOProtos.Rpc.GameplayWeatherProto.Types.WeatherCondition; - using ServiceStack.DataAnnotations; - - using WhMgr.Alarms.Alerts; - using WhMgr.Alarms.Models; - using WhMgr.Configuration; - using WhMgr.Data; - using WhMgr.Data.Models; - using WhMgr.Data.Subscriptions.Models; - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Geofence; - using WhMgr.Localization; - using WhMgr.Services; - using WhMgr.Utilities; - - /// - /// RealDeviceMap Pokemon webhook and database model class. - /// - [Alias("pokemon")] - public sealed class PokemonData - { - public const string WebHookHeader = "pokemon"; - public const int MaximumRankPVP = 500; - - #region Variables - - private static readonly IEventLogger _logger = EventLogger.GetLogger("POKEMONDATA", Program.LogLevel); - - #endregion - - #region Properties - - [ - JsonProperty("pokemon_id"), - Alias("pokemon_id") - ] - public uint Id { get; set; } - - [ - JsonProperty("cp"), - Alias("cp") - ] - public string CP { get; set; } - - [ - JsonIgnore, - Ignore - ] - public string IV - { - get - { - if (!int.TryParse(Stamina, out int sta) || - !int.TryParse(Attack, out int atk) || - !int.TryParse(Defense, out int def)) - { - return "?"; - } - - return Math.Round((sta + atk + def) * 100.0 / 45.0, 1) + "%"; - } - } - - [ - JsonIgnore, - Ignore - ] - public string IVRounded - { - get - { - if (!int.TryParse(Stamina, out int sta) || - !int.TryParse(Attack, out int atk) || - !int.TryParse(Defense, out int def)) - { - return "?"; - } - - return Math.Round((double)(sta + atk + def) * 100 / 45) + "%"; - } - } - - [ - JsonProperty("individual_stamina"), - Alias("sta_iv") - ] - public string Stamina { get; set; } - - [ - JsonProperty("individual_attack"), - Alias("atk_iv") - ] - public string Attack { get; set; } - - [ - JsonProperty("individual_defense"), - Alias("def_iv") - ] - public string Defense { get; set; } - - [ - JsonProperty("gender"), - Alias("gender") - ] - public Gender Gender { get; set; } - - [ - JsonProperty("costume"), - Alias("costume") - ] - public int Costume { get; set; } - - [ - JsonProperty("pokemon_level"), - Alias("level") - ] - public string Level { get; set; } - - [ - JsonProperty("latitude"), - Alias("lat") - ] - public double Latitude { get; set; } - - [ - JsonProperty("longitude"), - Alias("lon") - ] - public double Longitude { get; set; } - - [ - JsonProperty("move_1"), - Alias("move_1") - ] - public string FastMove { get; set; } - - [ - JsonProperty("move_2"), - Alias("move_2") - ] - public string ChargeMove { get; set; } - - [ - JsonProperty("height"), - Alias("size") - ] - public string Height { get; set; } - - [ - JsonProperty("weight"), - Alias("weight") - ] - public string Weight { get; set; } - - [ - JsonProperty("encounter_id"), - Alias("id") - ] - public string EncounterId { get; set; } - - [ - JsonProperty("spawnpoint_id"), - Alias("spawn_id") - ] - public string SpawnpointId { get; set; } - - [ - JsonProperty("disappear_time"), - Alias("expire_timestamp") - ] - public long DisappearTime { get; set; } - - [ - JsonProperty("disappear_time_verified"), - Alias("expire_timestamp_verified") - ] - public bool DisappearTimeVerified { get; set; } - - [ - JsonProperty("first_seen"), - Alias("first_seen_timestamp") - ] - public long FirstSeen { get; set; } - - [ - JsonProperty("last_modified_time"), - Alias("changed") - ] - public long LastModified { get; set; } - - [ - JsonProperty("pokestop_id"), - Alias("pokestop_id") - ] - public string PokestopId { get; set; } - - [ - JsonProperty("weather"), - Alias("weather") - ] - public WeatherCondition? Weather { get; set; } - - [ - JsonProperty("form"), - Alias("form") - ] - public int FormId { get; set; } - - [ - JsonProperty("shiny"), - Alias("shiny") - ] - public bool? Shiny { get; set; } - - [ - JsonProperty("username"), - Alias("username") - ] - public string Username { get; set; } - - [ - JsonProperty("updated"), - Alias("updated") - ] - public long Updated { get; set; } - - [ - JsonIgnore, - Ignore - ] - public DateTime DespawnTime { get; private set; } - - [ - JsonIgnore, - Ignore - ] - public TimeSpan SecondsLeft { get; private set; } - - [ - JsonIgnore, - Ignore - ] - public DateTime FirstSeenTime { get; set; } - - [ - JsonIgnore, - Ignore - ] - public DateTime LastModifiedTime { get; set; } - - [ - JsonIgnore, - Ignore - ] - public DateTime UpdatedTime { get; set; } - - [ - JsonIgnore, - Ignore - ] - public PokemonSize? Size - { - get - { - if (float.TryParse(Height, out var height) && float.TryParse(Weight, out var weight)) - { - return Id.GetSize(height, weight); - } - return null; - } - } - - [ - JsonIgnore, - Ignore - ] - public bool IsDitto => Id == 132; - - [ - JsonProperty("display_pokemon_id"), - Alias("display_pokemon_id") - ] - public uint? DisplayPokemonId { get; set; } - - #region PvP - - [ - JsonIgnore, - Ignore - ] - public bool MatchesGreatLeague => GreatLeague?.Exists(x => - // Check if stat rank is less than or equal to the max great league rank stat desired - x.Rank <= MaximumRankPVP && - // Check if stat CP is greater than or equal to min great league CP - x.CP >= Strings.MinimumGreatLeagueCP && - // Check if stat CP is less than or equal to max great league CP - x.CP <= Strings.MaximumGreatLeagueCP - ) ?? false; - - [ - JsonIgnore, - Ignore - ] - public bool MatchesUltraLeague => UltraLeague?.Exists(x => - // Check if stat rank is less than or equal to the max ultra league rank stat desired - x.Rank <= MaximumRankPVP && - // Check if stat CP is greater than or equal to min ultra league CP - x.CP >= Strings.MinimumUltraLeagueCP && - // Check if stat CP is less than or equal to max ultra league CP - x.CP <= Strings.MaximumUltraLeagueCP - ) ?? false; - - - [ - JsonProperty("pvp_rankings_great_league"), - Ignore - ] - public List GreatLeague { get; set; } - - [ - JsonProperty("pvp_rankings_ultra_league"), - Ignore - ] - public List UltraLeague { get; set; } - - #endregion - - #region Catch Rates - - [ - JsonProperty("capture_1"), - Alias("capture_1") - ] - public double? CatchRate1 { get; set; } - - [ - JsonProperty("capture_2"), - Alias("capture_2") - ] - public double? CatchRate2 { get; set; } - - [ - JsonProperty("capture_3"), - Alias("capture_3") - ] - public double? CatchRate3 { get; set; } - - #endregion - - [ - JsonProperty("is_event"), - Ignore] - public bool? IsEvent { get; set; } - - [ - JsonIgnore, - Ignore - ] - public bool IsMissingStats => string.IsNullOrEmpty(Level); - - #endregion - - #region Constructor - - /// - /// Instantiate a new class. - /// - public PokemonData() - { - GreatLeague = new List(); - UltraLeague = new List(); - } - - #endregion - - #region Public Methods - - /// - /// Set despawn times because .NET doesn't support Unix timestamp deserialization to class by default. - /// - public void SetDespawnTime() - { - DespawnTime = DisappearTime - .FromUnix() - .ConvertTimeFromCoordinates(Latitude, Longitude); - - SecondsLeft = DespawnTime - .Subtract(DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude)); - - FirstSeenTime = FirstSeen - .FromUnix() - .ConvertTimeFromCoordinates(Latitude, Longitude); - - LastModifiedTime = LastModified - .FromUnix() - .ConvertTimeFromCoordinates(Latitude, Longitude); - - UpdatedTime = Updated - .FromUnix() - .ConvertTimeFromCoordinates(Latitude, Longitude); - } - - /// - /// Generate a Discord embed Pokemon message - /// - /// Guild the notification is for - /// Discord client - /// Webhook config - /// Webhook alarm - /// City the Pokemon was found in - /// DiscordEmbedNotification object to send - public DiscordEmbedNotification GeneratePokemonMessage(ulong guildId, DiscordClient client, WhConfig whConfig, AlarmObject alarm, string city) - { - // If IV has value then use alarmText if not null otherwise use default. If no stats use default missing stats alarmText - var server = whConfig.Servers[guildId]; - var alertType = IsMissingStats ? AlertMessageType.PokemonMissingStats : AlertMessageType.Pokemon; - var alert = alarm?.Alerts[alertType] ?? server.DmAlerts?[alertType] ?? AlertMessage.Defaults[alertType]; - var pokemonImageUrl = IconFetcher.Instance.GetPokemonIcon(server.IconStyle, Id, FormId, 0, Gender, Costume, false); - var properties = GetProperties(new MessageProperties - { - Guild = client.Guilds[guildId], - Config = whConfig, - City = city, - ImageUrl = pokemonImageUrl, - }); - var eb = new DiscordEmbedBuilder - { - Title = DynamicReplacementEngine.ReplaceText(alert.Title, properties), - Url = DynamicReplacementEngine.ReplaceText(alert.Url, properties), - ImageUrl = DynamicReplacementEngine.ReplaceText(alert.ImageUrl, properties), - ThumbnailUrl = DynamicReplacementEngine.ReplaceText(alert.IconUrl, properties), - Description = DynamicReplacementEngine.ReplaceText(alert.Content, properties), - Color = MatchesGreatLeague || MatchesUltraLeague - ? GetPvPColor(GreatLeague, UltraLeague, MasterFile.Instance.DiscordEmbedColors) - : IV.BuildPokemonIVColor(MasterFile.Instance.DiscordEmbedColors), - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = DynamicReplacementEngine.ReplaceText(alert.Footer?.Text, properties), - IconUrl = DynamicReplacementEngine.ReplaceText(alert.Footer?.IconUrl, properties) - } - }; - var username = DynamicReplacementEngine.ReplaceText(alert.Username, properties); - var iconUrl = DynamicReplacementEngine.ReplaceText(alert.AvatarUrl, properties); - var description = DynamicReplacementEngine.ReplaceText(alarm?.Description, properties); - return new DiscordEmbedNotification(username, iconUrl, description, new List { eb.Build() }); - } - - public static double GetIV(string attack, string defense, string stamina) - { - if (!int.TryParse(attack, out int atk) || - !int.TryParse(defense, out int def) || - !int.TryParse(stamina, out int sta)) - { - return -1; - } - - return Math.Round((double)(sta + atk + def) * 100 / 45); - } - - #endregion - - #region Private Methods - - private IReadOnlyDictionary GetProperties(MessageProperties properties)// DiscordGuild guild, WhConfig whConfig, string city, string pokemonImageUrl) - { - var pkmnInfo = MasterFile.GetPokemon(Id, FormId); - var pkmnName = Translator.Instance.GetPokemonName(Id); - var form = Translator.Instance.GetFormName(FormId); - var costume = Translator.Instance.GetCostumeName(Costume); - var gender = Gender.GetPokemonGenderIcon(); - var genderEmoji = Gender.GetEmojiIcon("gender", true); - var level = Level; - var size = Size?.ToString(); - var weather = Weather?.ToString(); - var hasWeather = Weather.HasValue && Weather != WeatherCondition.None; - var isWeatherBoosted = pkmnInfo?.IsWeatherBoosted(Weather ?? WeatherCondition.None); - var weatherEmoji = Weather != WeatherCondition.None ? Weather.GetEmojiIcon("weather", false) : null; - var move1 = int.TryParse(FastMove, out var fastMoveId) ? Translator.Instance.GetMoveName(fastMoveId) : "Unknown"; - var move2 = int.TryParse(ChargeMove, out var chargeMoveId) ? Translator.Instance.GetMoveName(chargeMoveId) : "Unknown"; - var type1 = pkmnInfo?.Types?[0]; - var type2 = pkmnInfo?.Types?.Count > 1 ? pkmnInfo.Types?[1] : PokemonType.None; - var type1Emoji = pkmnInfo?.Types?[0].GetTypeEmojiIcons(); - var type2Emoji = pkmnInfo?.Types?.Count > 1 ? pkmnInfo?.Types?[1].GetTypeEmojiIcons() : string.Empty; - var typeEmojis = $"{type1Emoji} {type2Emoji}"; - var catchPokemon = IsDitto ? Translator.Instance.GetPokemonName(DisplayPokemonId ?? Id) : pkmnName; - var isShiny = Shiny ?? false; - var height = double.TryParse(Height, out var realHeight) ? Math.Round(realHeight).ToString() : ""; - var weight = double.TryParse(Weight, out var realWeight) ? Math.Round(realWeight).ToString() : ""; - - var gmapsLink = string.Format(Strings.GoogleMaps, Latitude, Longitude); - var appleMapsLink = string.Format(Strings.AppleMaps, Latitude, Longitude); - var wazeMapsLink = string.Format(Strings.WazeMaps, Latitude, Longitude); - var scannerMapsLink = string.Format(properties.Config.Urls.ScannerMap, Latitude, Longitude); - var staticMapLink = StaticMap.GetUrl(properties.Config.Urls.StaticMap, properties.Config.StaticMaps["pokemon"], Latitude, Longitude, properties.ImageUrl); - var gmapsLocationLink = UrlShortener.CreateShortUrl(properties.Config.ShortUrlApiUrl, gmapsLink); - var appleMapsLocationLink = UrlShortener.CreateShortUrl(properties.Config.ShortUrlApiUrl, appleMapsLink); - var wazeMapsLocationLink = UrlShortener.CreateShortUrl(properties.Config.ShortUrlApiUrl, wazeMapsLink); - var scannerMapsLocationLink = UrlShortener.CreateShortUrl(properties.Config.ShortUrlApiUrl, scannerMapsLink); - var address = new Location(null, properties.City, Latitude, Longitude).GetAddress(properties.Config); - //var staticMapLocationLink = string.IsNullOrEmpty(whConfig.ShortUrlApiUrl) ? staticMapLink : NetUtil.CreateShortUrl(whConfig.ShortUrlApiUrl, staticMapLink); - var pokestop = Pokestop.Pokestops.ContainsKey(PokestopId) ? Pokestop.Pokestops[PokestopId] : null; - - var greatLeagueEmoji = PvPLeague.Great.GetEmojiIcon("league", true); - var ultraLeagueEmoji = PvPLeague.Ultra.GetEmojiIcon("league", true); - var pvpStats = GetPvP(); - - const string defaultMissingValue = "?"; - var dict = new Dictionary - { - // Main properties - { "pkmn_id", Convert.ToString(Id) }, - { "pkmn_id_3", Id.ToString("D3") }, - { "pkmn_name", pkmnName }, - { "pkmn_img_url", properties.ImageUrl }, - { "form", form }, - { "form_id", Convert.ToString(FormId) }, - { "form_id_3", FormId.ToString("D3") }, - { "costume", costume ?? defaultMissingValue }, - { "costume_id", Convert.ToString(Costume) }, - { "costume_id_3", Costume.ToString("D3") }, - { "cp", CP ?? defaultMissingValue }, - { "lvl", level ?? defaultMissingValue }, - { "gender", gender }, - { "gender_emoji", genderEmoji }, - { "size", size ?? defaultMissingValue }, - { "move_1", move1 ?? defaultMissingValue }, - { "move_2", move2 ?? defaultMissingValue }, - { "moveset", $"{move1}/{move2}" }, - { "type_1", type1?.ToString() ?? defaultMissingValue }, - { "type_2", type2?.ToString() ?? defaultMissingValue }, - { "type_1_emoji", type1Emoji }, - { "type_2_emoji", type2Emoji }, - { "types", $"{type1} | {type2}" }, - { "types_emoji", typeEmojis }, - { "atk_iv", Attack ?? defaultMissingValue }, - { "def_iv", Defense ?? defaultMissingValue }, - { "sta_iv", Stamina ?? defaultMissingValue }, - { "iv", IV ?? defaultMissingValue }, - { "iv_rnd", IVRounded ?? defaultMissingValue }, - { "is_shiny", Convert.ToString(isShiny) }, - - // Catch rate properties - { "has_capture_rates", Convert.ToString(CatchRate1.HasValue && CatchRate2.HasValue && CatchRate3.HasValue) }, - { "capture_1", CatchRate1.HasValue ? Math.Round(CatchRate1.Value * 100).ToString() : string.Empty }, - { "capture_2", CatchRate2.HasValue ? Math.Round(CatchRate2.Value * 100).ToString() : string.Empty }, - { "capture_3", CatchRate3.HasValue ? Math.Round(CatchRate3.Value * 100).ToString() : string.Empty }, - { "capture_1_emoji", CaptureRateType.PokeBall.GetEmojiIcon("capture", false) }, - { "capture_2_emoji", CaptureRateType.GreatBall.GetEmojiIcon("capture", false) }, - { "capture_3_emoji", CaptureRateType.UltraBall.GetEmojiIcon("capture", false) }, - - // PvP stat properties - { "is_great", Convert.ToString(MatchesGreatLeague) }, - { "is_ultra", Convert.ToString(MatchesUltraLeague) }, - { "is_pvp", Convert.ToString(MatchesGreatLeague || MatchesUltraLeague) }, - //{ "great_league_stats", greatLeagueStats }, - //{ "ultra_league_stats", ultraLeagueStats }, - { "great_league_emoji", greatLeagueEmoji }, - { "ultra_league_emoji", ultraLeagueEmoji }, - { "pvp_stats", pvpStats }, - - // Other properties - { "height", height ?? defaultMissingValue }, - { "weight", weight ?? defaultMissingValue }, - { "is_ditto", Convert.ToString(IsDitto) }, - { "original_pkmn_id", Convert.ToString(DisplayPokemonId) }, - { "original_pkmn_id_3", (DisplayPokemonId ?? 0).ToString("D3") }, - { "original_pkmn_name", catchPokemon }, - { "is_weather_boosted", Convert.ToString(isWeatherBoosted) }, - { "has_weather", Convert.ToString(hasWeather) }, - { "weather", weather ?? defaultMissingValue }, - { "weather_emoji", weatherEmoji ?? defaultMissingValue }, - { "username", Username ?? defaultMissingValue }, - { "spawnpoint_id", SpawnpointId ?? defaultMissingValue }, - { "encounter_id", EncounterId ?? defaultMissingValue }, - - // Time properties - { "despawn_time", DespawnTime.ToString("hh:mm:ss tt") }, - { "despawn_time_24h", DespawnTime.ToString("HH:mm:ss") }, - { "despawn_time_verified", DisappearTimeVerified ? "" : "~" }, - { "is_despawn_time_verified", Convert.ToString(DisappearTimeVerified) }, - { "time_left", SecondsLeft.ToReadableString(true) ?? defaultMissingValue }, - - // Location properties - { "geofence", properties.City ?? defaultMissingValue }, - { "lat", Convert.ToString(Latitude) }, - { "lng", Convert.ToString(Longitude) }, - { "lat_5", Latitude.ToString("0.00000") }, - { "lng_5", Longitude.ToString("0.00000") }, - - // Location links - { "tilemaps_url", staticMapLink }, - { "gmaps_url", gmapsLocationLink }, - { "applemaps_url", appleMapsLocationLink }, - { "wazemaps_url", wazeMapsLocationLink }, - { "scanmaps_url", scannerMapsLocationLink }, - - { "address", address?.Address }, - - // Pokestop properties - { "near_pokestop", Convert.ToString(pokestop != null) }, - { "pokestop_id", PokestopId ?? defaultMissingValue }, - { "pokestop_name", pokestop?.Name ?? defaultMissingValue }, - { "pokestop_url", pokestop?.Url ?? defaultMissingValue }, - - // Discord Guild properties - { "guild_name", properties.Guild?.Name }, - { "guild_img_url", properties.Guild?.IconUrl }, - - // Event properties - { "is_event", Convert.ToString(IsEvent.HasValue && IsEvent.Value) }, - - { "date_time", DateTime.Now.ToString() }, - - // Misc properties - { "br", "\r\n" } - }; - return dict; - } - - private DiscordColor GetPvPColor(List greatLeague, List ultraLeague, DiscordEmbedColorConfig config) - { - if (greatLeague != null) - greatLeague.Sort((x, y) => (x.Rank ?? 0).CompareTo(y.Rank ?? 0)); - - if (ultraLeague != null) - ultraLeague.Sort((x, y) => (x.Rank ?? 0).CompareTo(y.Rank ?? 0)); - - var greatRank = greatLeague.FirstOrDefault(x => x.Rank > 0 && x.Rank <= 25 && x.CP >= Strings.MinimumGreatLeagueCP && x.CP <= Strings.MaximumGreatLeagueCP); - var ultraRank = ultraLeague.FirstOrDefault(x => x.Rank > 0 && x.Rank <= 25 && x.CP >= Strings.MinimumUltraLeagueCP && x.CP <= Strings.MaximumUltraLeagueCP); - var color = config.Pokemon.PvP.FirstOrDefault(x => ((greatRank?.Rank ?? 0) >= x.Minimum && (greatRank?.Rank ?? 0) <= x.Maximum) || ((ultraRank?.Rank ?? 0) >= x.Minimum && (ultraRank?.Rank ?? 0) <= x.Maximum)); - if (color == null) - { - return DiscordColor.White; - } - return new DiscordColor(color.Color); - } - - #endregion - - #region PvP - - private string GetPvP() - { - var great = GetGreatLeague(); - var ultra = GetUltraLeague(); - if (!string.IsNullOrEmpty(great) || !string.IsNullOrEmpty(ultra)) - { - var header = "__**PvP Rank Statistics**__\r\n"; - return header + great + ultra; - } - return null; - } - - private string GetGreatLeague() - { - var sb = new StringBuilder(); - if (GreatLeague != null) - { - var rankText = Translator.Instance.Translate("PVP_RANK"); - var cpText = Translator.Instance.Translate("PVP_CP"); - for (var i = 0; i < GreatLeague.Count; i++) - { - var pvp = GreatLeague[i]; - var withinCpRange = pvp.CP >= Strings.MinimumGreatLeagueCP && pvp.CP <= Strings.MaximumGreatLeagueCP; - var withinRankRange = pvp.Rank <= MaximumRankPVP; - if (pvp.Rank == 0 || (!withinCpRange && !withinRankRange)) - continue; - - if (!MasterFile.Instance.Pokedex.ContainsKey(pvp.PokemonId)) - { - _logger.Error($"Pokemon database doesn't contain pokemon id {pvp.PokemonId}"); - continue; - } - var name = Translator.Instance.GetPokemonName(pvp.PokemonId); - var form = Translator.Instance.GetFormName(pvp.FormId); - var pkmnName = string.IsNullOrEmpty(form) ? name : $"{name} ({form})"; // TODO: Localize `Normal` text - if (pvp.Rank.HasValue && pvp.Rank.Value <= MaximumRankPVP && pvp.Percentage.HasValue && pvp.Level.HasValue && pvp.CP.HasValue && pvp.CP <= Strings.MaximumGreatLeagueCP) - { - sb.AppendLine($"{rankText} #{pvp.Rank.Value} {pkmnName} {pvp.CP.Value}{cpText} @ L{pvp.Level.Value} {Math.Round(pvp.Percentage.Value * 100, 2)}%"); - } - } - } - var result = sb.ToString(); - if (!string.IsNullOrEmpty(result)) - { - var greatLeagueText = Translator.Instance.Translate("PVP_GREAT_LEAGUE"); - var greatLeagueEmoji = PvPLeague.Great.GetEmojiIcon("league", true); - result = greatLeagueEmoji + $" **{greatLeagueText}:**\r\n" + result; - } - return result; - } - - private string GetUltraLeague() - { - var sb = new StringBuilder(); - if (UltraLeague != null) - { - var rankText = Translator.Instance.Translate("PVP_RANK"); - var cpText = Translator.Instance.Translate("PVP_CP"); - for (var i = 0; i < UltraLeague.Count; i++) - { - var pvp = UltraLeague[i]; - var withinCpRange = pvp.CP >= Strings.MinimumUltraLeagueCP && pvp.CP <= Strings.MaximumUltraLeagueCP; - var withinRankRange = pvp.Rank <= MaximumRankPVP; - if (pvp.Rank == 0 || (!withinCpRange && !withinRankRange)) - continue; - - if (!MasterFile.Instance.Pokedex.ContainsKey(pvp.PokemonId)) - { - _logger.Warn($"Pokemon database doesn't contain pokemon id {pvp.PokemonId}"); - continue; - } - var name = Translator.Instance.GetPokemonName(pvp.PokemonId); - var form = Translator.Instance.GetFormName(pvp.FormId); - var pkmnName = string.IsNullOrEmpty(form) ? name : $"{name} ({form})"; // TODO: Localize `Normal` text - if (pvp.Rank.HasValue && pvp.Rank.Value <= MaximumRankPVP && pvp.Percentage.HasValue && pvp.Level.HasValue && pvp.CP.HasValue && pvp.CP <= Strings.MaximumUltraLeagueCP) - { - sb.AppendLine($"{rankText} #{pvp.Rank.Value} {pkmnName} {pvp.CP.Value}{cpText} @ L{pvp.Level.Value} {Math.Round(pvp.Percentage.Value * 100, 2)}%"); - } - } - } - var result = sb.ToString(); - if (!string.IsNullOrEmpty(result)) - { - var ultraLeagueText = Translator.Instance.Translate("PVP_ULTRA_LEAGUE"); - var ultraLeagueEmoji = PvPLeague.Ultra.GetEmojiIcon("league", true); - result = ultraLeagueEmoji + $" **{ultraLeagueText}:**\r\n" + result; - } - return result; - } - - #endregion - } - - public class MessageProperties - { - public DiscordGuild Guild { get; set; } - - public WhConfig Config { get; set; } - - public string City { get; set; } - - public string ImageUrl { get; set; } - } - - /// - /// Pokemon capture rate - /// - public enum CaptureRateType - { - PokeBall = 1, - GreatBall, - UltraBall, - } -} \ No newline at end of file diff --git a/src/Net/Models/PokestopData.cs b/src/Net/Models/PokestopData.cs deleted file mode 100644 index 6585fb42..00000000 --- a/src/Net/Models/PokestopData.cs +++ /dev/null @@ -1,273 +0,0 @@ -namespace WhMgr.Net.Models -{ - using System; - using System.Collections.Generic; - - using DSharpPlus; - using DSharpPlus.Entities; - using Newtonsoft.Json; - using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; - - using WhMgr.Alarms.Alerts; - using WhMgr.Alarms.Models; - using WhMgr.Commands; - using WhMgr.Configuration; - using WhMgr.Data; - using WhMgr.Data.Models; - using WhMgr.Extensions; - using WhMgr.Geofence; - using WhMgr.Localization; - using WhMgr.Services; - using WhMgr.Utilities; - - /// - /// RealDeviceMap Pokestop (lure/invasion) webhook model class. - /// - public sealed class PokestopData - { - public const string WebhookHeader = "pokestop"; - public const string WebhookHeaderInvasion = "invasion"; - - #region Properties - - [JsonProperty("pokestop_id")] - public string PokestopId { get; set; } - - [JsonProperty("latitude")] - public double Latitude { get; set; } - - [JsonProperty("longitude")] - public double Longitude { get; set; } - - [JsonProperty("name")] - public string Name { get; set; } = "Unknown"; - - [JsonProperty("url")] - public string Url { get; set; } - - [JsonProperty("enabled")] - public bool Enabled { get; set; } - - [JsonProperty("lure_expiration")] - public long LureExpire { get; set; } - - [JsonIgnore] - public DateTime LureExpireTime { get; set; } - - [JsonProperty("lure_id")] - public PokestopLureType LureType { get; set; } - - [JsonProperty("incident_expire_timestamp")] - public long IncidentExpire { get; set; } - - [JsonIgnore] - public DateTime InvasionExpireTime { get; set; } - - [JsonProperty("grunt_type")] - public InvasionCharacter GruntType { get; set; } - - [JsonProperty("last_modified")] - public ulong LastModified { get; set; } - - [JsonProperty("updated")] - public ulong Updated { get; set; } - - [JsonIgnore] - public bool HasLure => LureExpire > 0 && LureType != PokestopLureType.None && LureExpireTime > DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); - - [JsonIgnore] - public bool HasInvasion => IncidentExpire > 0 && InvasionExpireTime > DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); - - #endregion - - #region Constructor - - /// - /// Instantiate a new class. - /// - public PokestopData() - { - SetTimes(); - } - - #endregion - - #region Public Methods - - /// - /// Set expire times because .NET doesn't support Unix timestamp deserialization to class by default. - /// - public void SetTimes() - { - LureExpireTime = LureExpire - .FromUnix() - .ConvertTimeFromCoordinates(Latitude, Longitude); - - InvasionExpireTime = IncidentExpire - .FromUnix() - .ConvertTimeFromCoordinates(Latitude, Longitude); - } - - public DiscordEmbedNotification GeneratePokestopMessage(ulong guildId, DiscordClient client, WhConfig whConfig, AlarmObject alarm, string city, bool useLure, bool useInvasion) - { - var server = whConfig.Servers[guildId]; - var alertType = useInvasion ? AlertMessageType.Invasions : useLure ? AlertMessageType.Lures : AlertMessageType.Pokestops; - var alert = alarm?.Alerts[alertType] ?? server.DmAlerts?[alertType] ?? AlertMessage.Defaults[alertType]; - var properties = GetProperties(client.Guilds[guildId], whConfig, city, useLure, useInvasion); - var eb = new DiscordEmbedBuilder - { - Title = DynamicReplacementEngine.ReplaceText(alert.Title, properties), - Url = DynamicReplacementEngine.ReplaceText(alert.Url, properties), - ImageUrl = DynamicReplacementEngine.ReplaceText(alert.ImageUrl, properties), - ThumbnailUrl = DynamicReplacementEngine.ReplaceText(alert.IconUrl, properties), - Description = DynamicReplacementEngine.ReplaceText(alert.Content, properties), - Color = useInvasion - ? new DiscordColor(MasterFile.Instance.DiscordEmbedColors.Pokestops.Invasions) - : useLure - ? LureType.BuildLureColor(MasterFile.Instance.DiscordEmbedColors) - : DiscordColor.CornflowerBlue, - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = DynamicReplacementEngine.ReplaceText(alert.Footer?.Text, properties), - IconUrl = DynamicReplacementEngine.ReplaceText(alert.Footer?.IconUrl, properties) - } - }; - var username = DynamicReplacementEngine.ReplaceText(alert.Username, properties); - var iconUrl = DynamicReplacementEngine.ReplaceText(alert.AvatarUrl, properties); - var description = DynamicReplacementEngine.ReplaceText(alarm?.Description, properties); - return new DiscordEmbedNotification(username, iconUrl, description, new List { eb.Build() }); - } - - #endregion - - #region Private Methods - - private IReadOnlyDictionary GetProperties(DiscordGuild guild, WhConfig whConfig, string city, bool useLure, bool useInvasion) - { - var lureImageUrl = IconFetcher.Instance.GetLureIcon(whConfig.Servers[guild.Id].IconStyle, LureType); - var invasionImageUrl = IconFetcher.Instance.GetInvasionIcon(whConfig.Servers[guild.Id].IconStyle, GruntType); - var imageUrl = useInvasion ? invasionImageUrl : useLure ? lureImageUrl : Url; - var gmapsLink = string.Format(Strings.GoogleMaps, Latitude, Longitude); - var appleMapsLink = string.Format(Strings.AppleMaps, Latitude, Longitude); - var wazeMapsLink = string.Format(Strings.WazeMaps, Latitude, Longitude); - var scannerMapsLink = string.Format(whConfig.Urls.ScannerMap, Latitude, Longitude); - var staticMapLink = StaticMap.GetUrl(whConfig.Urls.StaticMap, useInvasion ? whConfig.StaticMaps["invasions"] : useLure ? whConfig.StaticMaps["lures"] : /* TODO: */"", Latitude, Longitude, imageUrl); - var gmapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, gmapsLink); - var appleMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, appleMapsLink); - var wazeMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, wazeMapsLink); - var scannerMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, scannerMapsLink); - var address = new Location(null, city, Latitude, Longitude).GetAddress(whConfig); - //var staticMapLocationLink = string.IsNullOrEmpty(whConfig.ShortUrlApiUrl) ? staticMapLink : NetUtil.CreateShortUrl(whConfig.ShortUrlApiUrl, staticMapLink); - var invasion = MasterFile.Instance.GruntTypes.ContainsKey(GruntType) ? MasterFile.Instance.GruntTypes[GruntType] : null; - var leaderString = Translator.Instance.Translate("grunt_" + Convert.ToInt32(GruntType)); - var pokemonType = MasterFile.Instance.GruntTypes.ContainsKey(GruntType) ? GetPokemonTypeFromString(invasion?.Type) : PokemonType.None; - var invasionTypeEmoji = pokemonType == PokemonType.None - ? leaderString - : pokemonType.GetTypeEmojiIcons(); - var invasionEncounters = GruntType > 0 ? invasion.GetPossibleInvasionEncounters() : string.Empty; - - var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); - var lureExpireTimeLeft = now.GetTimeRemaining(LureExpireTime).ToReadableStringNoSeconds(); - var invasionExpireTimeLeft = now.GetTimeRemaining(InvasionExpireTime).ToReadableStringNoSeconds(); - - const string defaultMissingValue = "?"; - var dict = new Dictionary - { - //Main properties - { "has_lure", Convert.ToString(HasLure) }, - { "lure_type", LureType.ToString() }, - { "lure_expire_time", LureExpireTime.ToLongTimeString() }, - { "lure_expire_time_24h", LureExpireTime.ToString("HH:mm:ss") }, - { "lure_expire_time_left", lureExpireTimeLeft }, - { "has_invasion", Convert.ToString(HasInvasion) }, - { "grunt_type", invasion?.Type }, - { "grunt_type_emoji", invasionTypeEmoji }, - { "grunt_gender", invasion?.Grunt }, - { "invasion_expire_time", InvasionExpireTime.ToLongTimeString() }, - { "invasion_expire_time_24h", InvasionExpireTime.ToString("HH:mm:ss") }, - { "invasion_expire_time_left", invasionExpireTimeLeft }, - { "invasion_encounters", $"**Encounter Reward Chance:**\r\n" + invasionEncounters }, - - //Location properties - { "geofence", city ?? defaultMissingValue }, - { "lat", Latitude.ToString() }, - { "lng", Longitude.ToString() }, - { "lat_5", Latitude.ToString("0.00000") }, - { "lng_5", Longitude.ToString("0.00000") }, - - //Location links - { "tilemaps_url", staticMapLink }, - { "gmaps_url", gmapsLocationLink }, - { "applemaps_url", appleMapsLocationLink }, - { "wazemaps_url", wazeMapsLocationLink }, - { "scanmaps_url", scannerMapsLocationLink }, - - //Pokestop properties - { "pokestop_id", PokestopId ?? defaultMissingValue }, - { "pokestop_name", Name ?? defaultMissingValue }, - { "pokestop_url", Url ?? defaultMissingValue }, - { "lure_img_url", lureImageUrl }, - { "invasion_img_url", invasionImageUrl }, - - { "address", address?.Address }, - - // Discord Guild properties - { "guild_name", guild?.Name }, - { "guild_img_url", guild?.IconUrl }, - - { "date_time", DateTime.Now.ToString() }, - - //Misc properties - { "br", "\r\n" } - }; - return dict; - } - - #endregion - - public static PokemonType GetPokemonTypeFromString(string pokemonType) - { - var type = pokemonType.ToLower(); - if (type.Contains("bug")) - return PokemonType.Bug; - else if (type.Contains("dark")) - return PokemonType.Dark; - else if (type.Contains("dragon")) - return PokemonType.Dragon; - else if (type.Contains("electric")) - return PokemonType.Electric; - else if (type.Contains("fairy")) - return PokemonType.Fairy; - else if (type.Contains("fighting") || type.Contains("fight")) - return PokemonType.Fighting; - else if (type.Contains("fire")) - return PokemonType.Fire; - else if (type.Contains("flying") || type.Contains("fly")) - return PokemonType.Flying; - else if (type.Contains("ghost")) - return PokemonType.Ghost; - else if (type.Contains("grass")) - return PokemonType.Grass; - else if (type.Contains("ground")) - return PokemonType.Ground; - else if (type.Contains("ice")) - return PokemonType.Ice; - //else if (type.Contains("tierii") || type.Contains("none") || type.Contains("tier2") || type.Contains("t2")) - // return PokemonType.None; - else if (type.Contains("normal")) - return PokemonType.Normal; - else if (type.Contains("poison")) - return PokemonType.Poison; - else if (type.Contains("psychic")) - return PokemonType.Psychic; - else if (type.Contains("rock")) - return PokemonType.Rock; - else if (type.Contains("steel")) - return PokemonType.Steel; - else if (type.Contains("water")) - return PokemonType.Water; - else - return PokemonType.None; - } - } -} \ No newline at end of file diff --git a/src/Net/Models/QuestData.cs b/src/Net/Models/QuestData.cs deleted file mode 100644 index e848061c..00000000 --- a/src/Net/Models/QuestData.cs +++ /dev/null @@ -1,290 +0,0 @@ -namespace WhMgr.Net.Models -{ - using System; - using System.Collections.Generic; - - using DSharpPlus; - using DSharpPlus.Entities; - using Newtonsoft.Json; - using POGOProtos.Rpc; - using ItemId = POGOProtos.Rpc.Item; - using ActivityType = POGOProtos.Rpc.HoloActivityType; - using QuestConditionType = POGOProtos.Rpc.QuestConditionProto.Types.ConditionType; - using QuestRewardType = POGOProtos.Rpc.QuestRewardProto.Types.Type; - - using WhMgr.Alarms.Alerts; - using WhMgr.Alarms.Models; - using WhMgr.Configuration; - using WhMgr.Data; - using WhMgr.Extensions; - using WhMgr.Geofence; - using WhMgr.Services; - using WhMgr.Utilities; - - /// - /// RealDeviceMap Quest webhook model class. - /// - public sealed class QuestData - { - public const string WebHookHeader = "quest"; - - //private static readonly IEventLogger _logger = EventLogger.GetLogger("QUESTDATA", Program.LogLevel); - - #region Properties - - [JsonProperty("pokestop_id")] - public string PokestopId { get; set; } - - [JsonProperty("latitude")] - public double Latitude { get; set; } - - [JsonProperty("longitude")] - public double Longitude { get; set; } - - [JsonProperty("pokestop_name")] - public string PokestopName { get; set; } - - [JsonProperty("pokestop_url")] - public string PokestopUrl { get; set; } - - [JsonProperty("type")] - public QuestType Type { get; set; } - - [JsonProperty("target")] - public int Target { get; set; } - - [JsonProperty("template")] - public string Template { get; set; } - - [JsonProperty("updated")] - public long Updated { get; set; } - - [JsonProperty("rewards")] - public List Rewards { get; set; } - - [JsonProperty("conditions")] - public List Conditions { get; set; } - - [JsonIgnore] - public bool IsDitto => Rewards?[0]?.Info?.Ditto ?? false; - - [JsonIgnore] - public bool IsShiny => Rewards?[0]?.Info?.Shiny ?? false; - - #endregion - - /// - /// Instantiate a new class. - /// - public QuestData() - { - Rewards = new List(); - Conditions = new List(); - } - - /// - /// Generates a Discord embed message for a Pokestop Quest - /// - /// Discord Guild ID related to the data - /// Discord client to use - /// Config to use - /// Alarm to use - /// City to specify - /// - public DiscordEmbedNotification GenerateQuestMessage(ulong guildId, DiscordClient client, WhConfig whConfig, AlarmObject alarm, string city) - { - var server = whConfig.Servers[guildId]; - var alertType = AlertMessageType.Quests; - var alert = alarm?.Alerts[alertType] ?? server.DmAlerts?[alertType] ?? AlertMessage.Defaults[alertType]; - var properties = GetProperties(client.Guilds[guildId], whConfig, city, IconFetcher.Instance.GetQuestIcon(whConfig.Servers[guildId].IconStyle, this)); - var eb = new DiscordEmbedBuilder - { - Title = DynamicReplacementEngine.ReplaceText(alert.Title, properties), - Url = DynamicReplacementEngine.ReplaceText(alert.Url, properties), - ImageUrl = DynamicReplacementEngine.ReplaceText(alert.ImageUrl, properties), - ThumbnailUrl = DynamicReplacementEngine.ReplaceText(alert.IconUrl, properties), - Description = DynamicReplacementEngine.ReplaceText(alert.Content, properties), - Color = new DiscordColor(MasterFile.Instance.DiscordEmbedColors.Pokestops.Quests), - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = DynamicReplacementEngine.ReplaceText(alert.Footer?.Text, properties), - IconUrl = DynamicReplacementEngine.ReplaceText(alert.Footer?.IconUrl, properties) - } - }; - var username = DynamicReplacementEngine.ReplaceText(alert.Username, properties); - var iconUrl = DynamicReplacementEngine.ReplaceText(alert.AvatarUrl, properties); - var description = DynamicReplacementEngine.ReplaceText(alarm?.Description, properties); - return new DiscordEmbedNotification(username, iconUrl, description, new List { eb.Build() }); - } - - private IReadOnlyDictionary GetProperties(DiscordGuild guild, WhConfig whConfig, string city, string questRewardImageUrl) - { - var questMessage = this.GetQuestMessage(); - var questConditions = this.GetConditions(); - var questReward = this.GetReward(); - var gmapsLink = string.Format(Strings.GoogleMaps, Latitude, Longitude); - var appleMapsLink = string.Format(Strings.AppleMaps, Latitude, Longitude); - var wazeMapsLink = string.Format(Strings.WazeMaps, Latitude, Longitude); - var scannerMapsLink = string.Format(whConfig.Urls.ScannerMap, Latitude, Longitude); - var staticMapLink = StaticMap.GetUrl(whConfig.Urls.StaticMap, whConfig.StaticMaps["quests"], Latitude, Longitude, questRewardImageUrl); - var gmapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, gmapsLink); - var appleMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, appleMapsLink); - var wazeMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, wazeMapsLink); - var scannerMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, scannerMapsLink); - var address = new Location(null, city, Latitude, Longitude).GetAddress(whConfig); - //var staticMapLocationLink = string.IsNullOrEmpty(whConfig.ShortUrlApiUrl) ? staticMapLink : NetUtil.CreateShortUrl(whConfig.ShortUrlApiUrl, staticMapLink); - - const string defaultMissingValue = "?"; - var dict = new Dictionary - { - //Main properties - { "quest_task", questMessage }, - { "quest_conditions", questConditions }, - { "quest_reward", questReward }, - { "quest_reward_img_url", questRewardImageUrl }, - { "has_quest_conditions", Convert.ToString(!string.IsNullOrEmpty(questConditions)) }, - { "is_ditto", Convert.ToString(IsDitto) }, - { "is_shiny", Convert.ToString(IsShiny) }, - - //Location properties - { "geofence", city ?? defaultMissingValue }, - { "lat", Latitude.ToString() }, - { "lng", Longitude.ToString() }, - { "lat_5", Latitude.ToString("0.00000") }, - { "lng_5", Longitude.ToString("0.00000") }, - - //Location links - { "tilemaps_url", staticMapLink }, - { "gmaps_url", gmapsLocationLink }, - { "applemaps_url", appleMapsLocationLink }, - { "wazemaps_url", wazeMapsLocationLink }, - { "scanmaps_url", scannerMapsLocationLink }, - - { "address", address?.Address }, - - //Pokestop properties - { "pokestop_id", PokestopId ?? defaultMissingValue }, - { "pokestop_name", PokestopName ?? defaultMissingValue }, - { "pokestop_url", PokestopUrl ?? defaultMissingValue }, - - // Discord Guild properties - { "guild_name", guild?.Name }, - { "guild_img_url", guild?.IconUrl }, - - { "date_time", DateTime.Now.ToString() }, - - //Misc properties - { "br", "\r\n" } - }; - return dict; - } - } - - public sealed class QuestConditionMessage - { - [JsonProperty("type")] - public QuestConditionType Type { get; set; } - - [JsonProperty("info")] - public QuestCondition Info { get; set; } - - public QuestConditionMessage() - { - Type = QuestConditionType.Unset; - } - } - - public sealed class QuestCondition - { - [JsonProperty("pokemon_ids")] - public List PokemonIds { get; set; } - - [JsonProperty("category_name")] - public string CategoryName { get; set; } - - [JsonProperty("pokemon_type_ids")] - public List PokemonTypeIds { get; set; } - - [JsonProperty("throw_type_id")] - public ActivityType ThrowTypeId { get; set; } - - [JsonProperty("hit")] - public bool Hit { get; set; } - - [JsonProperty("raid_levels")] - public List RaidLevels { get; set; } - - [JsonProperty("alignment_ids")] - public List AlignmentIds { get; set; } - - [JsonProperty("character_category_ids")] - public List CharacterCategoryIds { get; set; } - - [JsonProperty("raid_pokemon_evolutions")] - public List RaidPokemonEvolutions { get; set; } - - public QuestCondition() - { - ThrowTypeId = ActivityType.ActivityUnknown; - } - } - - public sealed class QuestRewardMessage - { - [JsonProperty("type")] - public QuestRewardType Type { get; set; } - - [JsonProperty("info")] - public QuestReward Info { get; set; } - - public QuestRewardMessage() - { - Type = QuestRewardType.Unset; - } - } - - public sealed class QuestReward - { - [JsonProperty("pokemon_id")] - public uint PokemonId { get; set; } - - [JsonProperty("costume_id")] - public int CostumeId { get; set; } - - [JsonProperty("form_id")] - public int FormId { get; set; } - - [JsonProperty("gender_id")] - public int GenderId { get; set; } - - [JsonProperty("ditto")] - public bool Ditto { get; set; } - - [JsonProperty("shiny")] - public bool Shiny { get; set; } - - [JsonProperty("amount")] - public int Amount { get; set; } - - [JsonProperty("item_id")] - public ItemId Item { get; set; } - - [JsonProperty("raid_levels")] - public List RaidLevels { get; set; } - - [JsonProperty("mega_resource")] - public QuestMegaResource MegaResource { get; set; } - - [JsonProperty("sticker_id")] - public string StickerId { get; set; } - - // TODO: Pokemon alignment - } - - public sealed class QuestMegaResource - { - public ushort PokemonId { get; set; } - - public int Amount { get; set; } - } -} \ No newline at end of file diff --git a/src/Net/Models/RaidData.cs b/src/Net/Models/RaidData.cs deleted file mode 100644 index 5d7c2235..00000000 --- a/src/Net/Models/RaidData.cs +++ /dev/null @@ -1,309 +0,0 @@ -namespace WhMgr.Net.Models -{ - using System; - using System.Collections.Generic; - - using DSharpPlus; - using DSharpPlus.Entities; - using Newtonsoft.Json; - using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; - - using WhMgr.Alarms.Alerts; - using WhMgr.Alarms.Models; - using WhMgr.Configuration; - using WhMgr.Data; - using WhMgr.Data.Models; - using WhMgr.Extensions; - using WhMgr.Geofence; - using WhMgr.Localization; - using WhMgr.Services; - using WhMgr.Utilities; - - /// - /// RealDeviceMap Raid/Egg webhook model class. - /// - public sealed class RaidData - { - public const string WebHookHeader = "raid"; - - #region Properties - - [JsonProperty("gym_id")] - public string GymId { get; set; } - - [JsonProperty("gym_name")] - public string GymName { get; set; } - - [JsonProperty("gym_url")] - public string GymUrl { get; set; } - - [JsonProperty("pokemon_id")] - public uint PokemonId { get; set; } - - [JsonProperty("team_id")] - public PokemonTeam Team { get; set; } = PokemonTeam.Neutral; - - [JsonProperty("level")] - public string Level { get; set; } - - [JsonProperty("cp")] - public string CP { get; set; } - - [JsonProperty("move_1")] - public int FastMove { get; set; } - - [JsonProperty("move_2")] - public int ChargeMove { get; set; } - - [JsonProperty("latitude")] - public double Latitude { get; set; } - - [JsonProperty("longitude")] - public double Longitude { get; set; } - - [JsonProperty("start")] - public long Start { get; set; } - - [JsonProperty("end")] - public long End { get; set; } - - [JsonProperty("ex_raid_eligible")] - public bool IsExEligible { get; set; } - - [JsonProperty("sponsor_id")] - public bool SponsorId { get; set; } - - [JsonProperty("form")] - public int Form { get; set; } - - [JsonProperty("costume")] - public int Costume { get; set; } - - [JsonProperty("evolution")] - public int Evolution { get; set; } - - [JsonProperty("gender")] - public Gender Gender { get; set; } - - [JsonIgnore] - public DateTime StartTime { get; private set; } - - [JsonIgnore] - public DateTime EndTime { get; private set; } - - [JsonIgnore] - public bool IsEgg => PokemonId == 0; - - [JsonIgnore] - public List Weaknesses - { - get - { - if (MasterFile.Instance.Pokedex.ContainsKey(PokemonId) && !IsEgg) - { - var list = new List(); - var types = MasterFile.GetPokemon(PokemonId, Form)?.Types; - if (types != null) - { - MasterFile.GetPokemon(PokemonId, Form)?.Types?.ForEach(x => list.AddRange(x.GetWeaknesses())); - } - return list; - } - - return null; - } - } - - [JsonIgnore] - public bool IsMissingStats => FastMove == 0 || ChargeMove == 0; - - #endregion - - /// - /// Instantiate a new class. - /// - public RaidData() - { - SetTimes(); - } - - /// - /// Set expire times because .NET doesn't support Unix timestamp deserialization to class by default. - /// - public void SetTimes() - { - StartTime = Start - .FromUnix() - .ConvertTimeFromCoordinates(Latitude, Longitude); - - EndTime = End - .FromUnix() - .ConvertTimeFromCoordinates(Latitude, Longitude); - } - - /// - /// Generate a Discord embed Raid message - /// - /// Guild the notification is for - /// Discord client - /// Webhook config - /// Webhook alarm - /// City the Raid was found in - /// DiscordEmbedNotification object to send - public DiscordEmbedNotification GenerateRaidMessage(ulong guildId, DiscordClient client, WhConfig whConfig, AlarmObject alarm, string city) - { - var server = whConfig.Servers[guildId]; - var alertType = PokemonId > 0 ? AlertMessageType.Raids : AlertMessageType.Eggs; - var alert = alarm?.Alerts[alertType] ?? server.DmAlerts?[alertType] ?? AlertMessage.Defaults[alertType]; - var raidImageUrl = IsEgg ? - IconFetcher.Instance.GetRaidEggIcon(server.IconStyle, Convert.ToInt32(Level), false, IsExEligible) : - IconFetcher.Instance.GetPokemonIcon(server.IconStyle, PokemonId, Form, Evolution, Gender, Costume, false); - var properties = GetProperties(client.Guilds[guildId], whConfig, city, raidImageUrl); - var eb = new DiscordEmbedBuilder - { - Title = DynamicReplacementEngine.ReplaceText(alert.Title, properties), - Url = DynamicReplacementEngine.ReplaceText(alert.Url, properties), - ImageUrl = DynamicReplacementEngine.ReplaceText(alert.ImageUrl, properties), - ThumbnailUrl = DynamicReplacementEngine.ReplaceText(alert.IconUrl, properties), - Description = DynamicReplacementEngine.ReplaceText(alert.Content, properties), - Color = (IsExEligible ? 0 /*ex*/ : int.Parse(Level)).BuildRaidColor(MasterFile.Instance.DiscordEmbedColors), - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = DynamicReplacementEngine.ReplaceText(alert.Footer?.Text, properties), - IconUrl = DynamicReplacementEngine.ReplaceText(alert.Footer?.IconUrl, properties) - } - }; - var username = DynamicReplacementEngine.ReplaceText(alert.Username, properties); - var iconUrl = DynamicReplacementEngine.ReplaceText(alert.AvatarUrl, properties); - var description = DynamicReplacementEngine.ReplaceText(alarm?.Description, properties); - return new DiscordEmbedNotification(username, iconUrl, description, new List { eb.Build() }); - } - - private IReadOnlyDictionary GetProperties(DiscordGuild guild, WhConfig whConfig, string city, string raidImageUrl) - { - var pkmnInfo = MasterFile.GetPokemon(PokemonId, Form); - var name = IsEgg ? "Egg" /*TODO: Localize*/ : Translator.Instance.GetPokemonName(PokemonId); - var form = Translator.Instance.GetFormName(Form); - var costume = Translator.Instance.GetCostumeName(Costume); - var evo = Translator.Instance.GetEvolutionName(Evolution); - var gender = Gender.GetPokemonGenderIcon(); - var level = Level; - var move1 = Translator.Instance.GetMoveName(FastMove); - var move2 = Translator.Instance.GetMoveName(ChargeMove); - var types = pkmnInfo?.Types; - var type1 = types?[0]; - var type2 = types?.Count > 1 ? types?[1] : PokemonType.None; - var type1Emoji = types?[0].GetTypeEmojiIcons(); - var type2Emoji = pkmnInfo?.Types?.Count > 1 ? types?[1].GetTypeEmojiIcons() : string.Empty; - var typeEmojis = $"{type1Emoji} {type2Emoji}"; - var weaknesses = Weaknesses == null ? string.Empty : string.Join(", ", Weaknesses); - var weaknessesEmoji = types?.GetWeaknessEmojiIcons(); - var perfectRange = PokemonId.MaxCpAtLevel(20); - var boostedRange = PokemonId.MaxCpAtLevel(25); - var worstRange = PokemonId.MinCpAtLevel(20); - var worstBoosted = PokemonId.MinCpAtLevel(25); - var exEmojiId = MasterFile.Instance.Emojis["ex"]; - var exEmoji = exEmojiId > 0 ? $"<:ex:{exEmojiId}>" : "EX"; - var teamEmojiId = MasterFile.Instance.Emojis[Team.ToString().ToLower()]; - var teamEmoji = teamEmojiId > 0 ? $"<:{Team.ToString().ToLower()}:{teamEmojiId}>" : Team.ToString(); - - var gmapsLink = string.Format(Strings.GoogleMaps, Latitude, Longitude); - var appleMapsLink = string.Format(Strings.AppleMaps, Latitude, Longitude); - var wazeMapsLink = string.Format(Strings.WazeMaps, Latitude, Longitude); - var scannerMapsLink = string.Format(whConfig.Urls.ScannerMap, Latitude, Longitude); - var staticMapLink = StaticMap.GetUrl(whConfig.Urls.StaticMap, whConfig.StaticMaps["raids"], Latitude, Longitude, raidImageUrl, Team); - var gmapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, gmapsLink); - var appleMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, appleMapsLink); - var wazeMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, wazeMapsLink); - var scannerMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, scannerMapsLink); - var address = new Location(null, city, Latitude, Longitude).GetAddress(whConfig); - //var staticMapLocationLink = string.IsNullOrEmpty(whConfig.ShortUrlApiUrl) ? staticMapLink : NetUtil.CreateShortUrl(whConfig.ShortUrlApiUrl, staticMapLink); - - var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); - var startTimeLeft = now.GetTimeRemaining(StartTime).ToReadableStringNoSeconds(); - var endTimeLeft = now.GetTimeRemaining(EndTime).ToReadableStringNoSeconds(); - - const string defaultMissingValue = "?"; - var dict = new Dictionary - { - //Raid boss properties - { "pkmn_id", PokemonId.ToString() }, - { "pkmn_id_3", PokemonId.ToString("D3") }, - { "pkmn_name", name }, - { "pkmn_img_url", raidImageUrl }, - { "evolution", evo }, - { "evolution_id", Convert.ToInt32(Evolution).ToString() }, - { "evolution_id_3", Evolution.ToString("D3") }, - { "form", form }, - { "form_id", Form.ToString() }, - { "form_id_3", Form.ToString("D3") }, - { "costume", costume }, - { "costume_id", Costume.ToString() }, - { "costume_id_3", Costume.ToString("D3") }, - { "is_egg", Convert.ToString(IsEgg) }, - { "is_ex", Convert.ToString(IsExEligible) }, - { "ex_emoji", exEmoji }, - { "team", Team.ToString() }, - { "team_id", Convert.ToInt32(Team).ToString() }, - { "team_emoji", teamEmoji }, - { "cp", CP ?? defaultMissingValue }, - { "lvl", level ?? defaultMissingValue }, - { "gender", gender ?? defaultMissingValue }, - { "move_1", move1 ?? defaultMissingValue }, - { "move_2", move2 ?? defaultMissingValue }, - { "moveset", $"{move1}/{move2}" }, - { "type_1", type1?.ToString() ?? defaultMissingValue }, - { "type_2", type2?.ToString() ?? defaultMissingValue }, - { "type_1_emoji", type1Emoji }, - { "type_2_emoji", type2Emoji }, - { "types", $"{type1}/{type2}" }, - { "types_emoji", typeEmojis }, - { "weaknesses", weaknesses }, - { "weaknesses_emoji", weaknessesEmoji }, - { "perfect_cp", perfectRange.ToString() }, - { "perfect_cp_boosted", boostedRange.ToString() }, - { "worst_cp", worstRange.ToString() }, - { "worst_cp_boosted", worstBoosted.ToString() }, - - //Time properties - { "start_time", StartTime.ToLongTimeString() }, - { "start_time_24h", StartTime.ToString("HH:mm:ss") }, - { "start_time_left", startTimeLeft }, - { "end_time", EndTime.ToLongTimeString() }, - { "end_time_24h", EndTime.ToString("HH:mm:ss") }, - { "end_time_left", endTimeLeft }, - - //Location properties - { "geofence", city ?? defaultMissingValue }, - { "lat", Latitude.ToString() }, - { "lng", Longitude.ToString() }, - { "lat_5", Latitude.ToString("0.00000") }, - { "lng_5", Longitude.ToString("0.00000") }, - - //Location links - { "tilemaps_url", staticMapLink }, - { "gmaps_url", gmapsLocationLink }, - { "applemaps_url", appleMapsLocationLink }, - { "wazemaps_url", wazeMapsLocationLink }, - { "scanmaps_url", scannerMapsLocationLink }, - - { "address", address?.Address }, - - //Gym properties - { "gym_id", GymId }, - { "gym_name", GymName }, - { "gym_url", GymUrl }, - - // Discord Guild properties - { "guild_name", guild?.Name }, - { "guild_img_url", guild?.IconUrl }, - - { "date_time", DateTime.Now.ToString() }, - - //Misc properties - { "br", "\r\n" } - }; - return dict; - } - } -} diff --git a/src/Net/Models/TeamRocketInvasion.cs b/src/Net/Models/TeamRocketInvasion.cs deleted file mode 100644 index 20863f2d..00000000 --- a/src/Net/Models/TeamRocketInvasion.cs +++ /dev/null @@ -1,130 +0,0 @@ -namespace WhMgr.Net.Models -{ - using System; - using System.Collections.Generic; - using System.Linq; - - using Newtonsoft.Json; - - using WhMgr.Data; - using WhMgr.Diagnostics; - - public class TeamRocketInvasion - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("TR-INVASION", Program.LogLevel); - - [JsonProperty("type")] - public string Type { get; set; } - - [JsonProperty("grunt")] - public string Grunt { get; set; } - - [JsonProperty("second_reward")] - public bool? SecondReward { get; set; } - - [JsonProperty("encounters")] - public TeamRocketEncounters Encounters { get; set; } - - [JsonIgnore] - public bool HasEncounter => Encounters?.First?.Count > 0 || Encounters?.Second?.Count > 0 || Encounters?.Third?.Count > 0; - - public TeamRocketInvasion() - { - Encounters = new TeamRocketEncounters(); - } - - public string GetPossibleInvasionEncounters() - { - var toInt = new Func(x => - { - var val = x.Split('_')[0]; - if (!uint.TryParse(val, out var result)) - { - Console.Error.WriteLine($"Failed to parse {val} as integer"); - } - return result; - }); - var first = string.Join(", ", Encounters.First.Select(x => MasterFile.GetPokemon(toInt(x), 0)?.Name)); - var second = string.Join(", ", Encounters.Second.Select(x => MasterFile.GetPokemon(toInt(x), 0)?.Name)); - //var third = string.Join(", ", invasion.Encounters.Third.Select(x => Database.Instance.Pokemon[x].Name)); - var msg = string.Empty; - if (SecondReward ?? false) - { - //85%/15% Rate - msg += $"85% - {first}\r\n"; - msg += $"15% - {second}\r\n"; - } - else - { - //100% Rate - msg += $"100% - {first}\r\n"; - } - return msg; - } - - public List GetEncounterRewards() - { - var list = new List(); - if (Encounters == null) - return list; - - if (SecondReward ?? false) - { - //85%/15% Rate - for (var i = 0; i < Encounters.Second.Count; i++) - { - var mon = Encounters.Second[i]; - var id = ParsePokemonId(mon); - if (id == 0) - continue; - - list.Add(id); - } - } - else - { - //100% Rate - for (var i = 0; i < Encounters.First.Count; i++) - { - var mon = Encounters.First[i]; - var id = ParsePokemonId(mon); - if (id == 0) - continue; - - list.Add(id); - } - } - return list; - } - - private static uint ParsePokemonId(string value) - { - var split = value.Split('_'); - if (!uint.TryParse(split[0], out var id)) - { - _logger.Error($"Failed to parse grunttype {split[0]}"); - return 0; - } - return id; - } - } - - public class TeamRocketEncounters - { - [JsonProperty("first")] - public List First { get; set; } - - [JsonProperty("second")] - public List Second { get; set; } - - [JsonProperty("third")] - public List Third { get; set; } - - public TeamRocketEncounters() - { - First = new List(); - Second = new List(); - Third = new List(); - } - } -} \ No newline at end of file diff --git a/src/Net/Models/WeatherData.cs b/src/Net/Models/WeatherData.cs deleted file mode 100644 index ffa53b5f..00000000 --- a/src/Net/Models/WeatherData.cs +++ /dev/null @@ -1,222 +0,0 @@ -namespace WhMgr.Net.Models -{ - using System; - using System.Collections.Generic; - using System.IO; - - using DSharpPlus; - using DSharpPlus.Entities; - using Newtonsoft.Json; - using WeatherCondition = POGOProtos.Rpc.GameplayWeatherProto.Types.WeatherCondition; - using ServiceStack.DataAnnotations; - - using WhMgr.Alarms.Alerts; - using WhMgr.Alarms.Models; - using WhMgr.Configuration; - using WhMgr.Data; - using WhMgr.Extensions; - using WhMgr.Geofence; - using WhMgr.Localization; - using WhMgr.Osm.Models; - using WhMgr.Services; - using WhMgr.Utilities; - - public enum WeatherSeverity - { - None = 0, - Moderate, - Extreme - } - - /// - /// RealDeviceMap Weather webhook model class. - /// - [Alias("weather")] - public sealed class WeatherData - { - public const string WebhookHeader = "weather"; - - #region Properties - - [JsonProperty("s2_cell_id")] - public long Id { get; set; } - - [JsonProperty("latitude")] - public double Latitude { get; set; } - - [JsonProperty("longitude")] - public double Longitude { get; set; } - - [JsonProperty("polygon")] - public MultiPolygon Polygon { get; set; } - - [JsonProperty("gameplay_condition")] - public WeatherCondition GameplayCondition { get; set; } - - [JsonProperty("wind_direction")] - public int WindDirection { get; set; } - - [JsonProperty("cloud_level")] - public ushort CloudLevel { get; set; } - - [JsonProperty("rain_level")] - public ushort RainLevel { get; set; } - - [JsonProperty("wind_level")] - public ushort WindLevel { get; set; } - - [JsonProperty("snow_level")] - public ushort SnowLevel { get; set; } - - [JsonProperty("fog_level")] - public ushort FogLevel { get; set; } - - [JsonProperty("special_effect_level")] - public ushort SpecialEffectLevel { get; set; } - - [JsonProperty("severity")] - public WeatherSeverity? Severity { get; set; } - - [JsonProperty("warn_weather")] - public bool? WarnWeather { get; set; } - - [JsonProperty("updated")] - public long Updated { get; set; } - - [JsonIgnore] - public DateTime UpdatedTime { get; set; } - - #endregion - - #region Constructor - - /// - /// Instantiate a new class. - /// - public WeatherData() - { - SetTimes(); - } - - #endregion - - #region Public Methods - - public void SetTimes() - { - UpdatedTime = Updated - .FromUnix() - .ConvertTimeFromCoordinates(Latitude, Longitude); - } - - public DiscordEmbedNotification GenerateWeatherMessage(ulong guildId, DiscordClient client, WhConfig whConfig, AlarmObject alarm, string city) - { - var server = whConfig.Servers[guildId]; - var alertType = AlertMessageType.Weather; - var alert = alarm?.Alerts[alertType] ?? server.DmAlerts?[alertType] ?? AlertMessage.Defaults[alertType]; - var weatherImageUrl = IconFetcher.Instance.GetWeatherIcon(server.IconStyle, GameplayCondition); - var properties = GetProperties(client.Guilds[guildId], whConfig, city, weatherImageUrl); - var eb = new DiscordEmbedBuilder - { - Title = DynamicReplacementEngine.ReplaceText(alert.Title, properties), - Url = DynamicReplacementEngine.ReplaceText(alert.Url, properties), - ImageUrl = DynamicReplacementEngine.ReplaceText(alert.ImageUrl, properties), - ThumbnailUrl = DynamicReplacementEngine.ReplaceText(alert.IconUrl, properties), - Description = DynamicReplacementEngine.ReplaceText(alert.Content, properties), - Color = GameplayCondition.BuildWeatherColor(MasterFile.Instance.DiscordEmbedColors), - Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = DynamicReplacementEngine.ReplaceText(alert.Footer?.Text, properties), - IconUrl = DynamicReplacementEngine.ReplaceText(alert.Footer?.IconUrl, properties) - } - }; - var username = DynamicReplacementEngine.ReplaceText(alert.Username, properties); - var iconUrl = DynamicReplacementEngine.ReplaceText(alert.AvatarUrl, properties); - var description = DynamicReplacementEngine.ReplaceText(alarm?.Description, properties); - return new DiscordEmbedNotification(username, iconUrl, description, new List { eb.Build() }); - } - - #endregion - - #region Private Methods - - private IReadOnlyDictionary GetProperties(DiscordGuild guild, WhConfig whConfig, string city, string weatherImageUrl) - { - var weather = Translator.Instance.GetWeather(GameplayCondition); - var weatherEmoji = GameplayCondition != WeatherCondition.None ? GameplayCondition.GetEmojiIcon("weather", false) : string.Empty; - var hasWeather = GameplayCondition != WeatherCondition.None; - var gmapsLink = string.Format(Strings.GoogleMaps, Latitude, Longitude); - var appleMapsLink = string.Format(Strings.AppleMaps, Latitude, Longitude); - var wazeMapsLink = string.Format(Strings.WazeMaps, Latitude, Longitude); - var scannerMapsLink = string.Format(whConfig.Urls.ScannerMap, Latitude, Longitude); - var staticMapLink = StaticMap.GetUrl(whConfig.Urls.StaticMap, whConfig.StaticMaps["weather"], Latitude, Longitude, weatherImageUrl, PokemonTeam.All, null, Polygon); - var gmapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, gmapsLink); - var appleMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, appleMapsLink); - var wazeMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, wazeMapsLink); - var scannerMapsLocationLink = UrlShortener.CreateShortUrl(whConfig.ShortUrlApiUrl, scannerMapsLink); - var address = new Location(null, city, Latitude, Longitude).GetAddress(whConfig); - //var staticMapLocationLink = string.IsNullOrEmpty(whConfig.ShortUrlApiUrl) ? staticMapLink : NetUtil.CreateShortUrl(whConfig.ShortUrlApiUrl, staticMapLink); - - const string defaultMissingValue = "?"; - var dict = new Dictionary - { - //Main properties - { "id", Id.ToString() }, - { "weather_condition", weather }, - { "has_weather", Convert.ToString(hasWeather) }, - { "weather", weather ?? defaultMissingValue }, - { "weather_emoji", weatherEmoji ?? defaultMissingValue }, - { "weather_img_url", weatherImageUrl }, - - { "wind_direction", WindDirection.ToString() }, - { "wind_level", WindLevel.ToString() }, - { "raid_level", RainLevel.ToString() }, - { "cloud_level", CloudLevel.ToString() }, - { "fog_level", FogLevel.ToString() }, - { "snow_level", SnowLevel.ToString() }, - { "warn_weather", Convert.ToString(WarnWeather ?? false) }, - { "special_effect_level", SpecialEffectLevel.ToString() }, - { "severity", Severity.ToString() }, - - //Location properties - { "geofence", city ?? defaultMissingValue }, - { "lat", Latitude.ToString() }, - { "lng", Longitude.ToString() }, - { "lat_5", Latitude.ToString("0.00000") }, - { "lng_5", Longitude.ToString("0.00000") }, - - //Location links - { "tilemaps_url", staticMapLink }, - { "gmaps_url", gmapsLocationLink }, - { "applemaps_url", appleMapsLocationLink }, - { "wazemaps_url", wazeMapsLocationLink }, - { "scanmaps_url", scannerMapsLocationLink }, - - { "address", address?.Address }, - - // Discord Guild properties - { "guild_name", guild?.Name }, - { "guild_img_url", guild?.IconUrl }, - - { "date_time", DateTime.Now.ToString() }, - - //Misc properties - { "br", "\r\n" } - }; - return dict; - } - - public static MultiPolygon FixWeatherPolygon(MultiPolygon multiPolygon) - { - var newMultiPolygon = new MultiPolygon(); - if (multiPolygon.Count == 0 || multiPolygon == null) - return newMultiPolygon; - - multiPolygon.ForEach(x => newMultiPolygon.Add(new Polygon { x[1], x[0] })); - newMultiPolygon.Add(newMultiPolygon[newMultiPolygon.Count - 1]); - return newMultiPolygon; - } - - #endregion - } -} \ No newline at end of file diff --git a/src/Net/Webhooks/AlarmEventTriggeredEventArgs.cs b/src/Net/Webhooks/AlarmEventTriggeredEventArgs.cs deleted file mode 100644 index 12afb342..00000000 --- a/src/Net/Webhooks/AlarmEventTriggeredEventArgs.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace WhMgr.Net.Webhooks -{ - using System; - - using WhMgr.Alarms.Models; - - public sealed class AlarmEventTriggeredEventArgs : EventArgs - { - public AlarmObject Alarm { get; } - - public T Data { get; } - - public ulong GuildId { get; } - - public AlarmEventTriggeredEventArgs(T data, AlarmObject alarm, ulong guildId) - { - Data = data; - Alarm = alarm; - GuildId = guildId; - } - } -} \ No newline at end of file diff --git a/src/Net/Webhooks/WebhookController.cs b/src/Net/Webhooks/WebhookController.cs deleted file mode 100644 index 9a1d97e8..00000000 --- a/src/Net/Webhooks/WebhookController.cs +++ /dev/null @@ -1,1157 +0,0 @@ -namespace WhMgr.Net.Webhooks -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Threading; - - using Newtonsoft.Json; - using WeatherCondition = POGOProtos.Rpc.GameplayWeatherProto.Types.WeatherCondition; - - using WhMgr.Alarms; - using WhMgr.Alarms.Filters; - using WhMgr.Alarms.Models; - using WhMgr.Configuration; - using WhMgr.Diagnostics; - using WhMgr.Extensions; - using WhMgr.Geofence; - using WhMgr.Localization; - using WhMgr.Net; - using WhMgr.Net.Configuration; - using WhMgr.Net.Models; - using WhMgr.Utilities; - - /// - /// Webhook controller class to manage and filter Discord channel notifications. - /// - public class WebhookController - { - #region Variables - - private static readonly IEventLogger _logger = EventLogger.GetLogger("WHM", Program.LogLevel); - - private readonly object _geofencesLock = new object(); - private readonly HttpServer _http; - private readonly Dictionary _alarms; - private readonly WhConfigHolder _config; - private readonly Dictionary _weather; - private Dictionary _gyms; - - #endregion - - #region Properties - - /// - /// Gyms cache - /// - public IReadOnlyDictionary Gyms - { - get - { - if (_gyms == null) - { - _gyms = GymDetailsData.GetGyms(Data.DataAccessLayer.ScannerConnectionString); - } - return _gyms; - } - } - - /// - /// Weather cells cache - /// - public IReadOnlyDictionary Weather => _weather; - - #endregion - - #region Events - - #region Alarms - - /// - /// Triggered upon a Pokemon matching an alarm filter - /// - public event EventHandler> PokemonAlarmTriggered; - private void OnPokemonAlarmTriggered(PokemonData pkmn, AlarmObject alarm, ulong guildId) - { - PokemonAlarmTriggered?.Invoke(this, new AlarmEventTriggeredEventArgs(pkmn, alarm, guildId)); - } - - /// - /// Triggered upon a raid matching an alarm filter - /// - public event EventHandler> RaidAlarmTriggered; - private void OnRaidAlarmTriggered(RaidData raid, AlarmObject alarm, ulong guildId) - { - RaidAlarmTriggered?.Invoke(this, new AlarmEventTriggeredEventArgs(raid, alarm, guildId)); - } - - /// - /// Triggered upon a field research quest matching an alarm filter - /// - public event EventHandler> QuestAlarmTriggered; - private void OnQuestAlarmTriggered(QuestData quest, AlarmObject alarm, ulong guildId) - { - QuestAlarmTriggered?.Invoke(this, new AlarmEventTriggeredEventArgs(quest, alarm, guildId)); - } - - /// - /// Triggered upon a gym matching an alarm filter - /// - public event EventHandler> GymAlarmTriggered; - private void OnGymAlarmTriggered(GymData gym, AlarmObject alarm, ulong guildId) - { - GymAlarmTriggered?.Invoke(this, new AlarmEventTriggeredEventArgs(gym, alarm, guildId)); - } - - /// - /// Triggered upon a gym's details matching an alarm filter - /// - public event EventHandler> GymDetailsAlarmTriggered; - private void OnGymDetailsAlarmTriggered(GymDetailsData gymDetails, AlarmObject alarm, ulong guildId) - { - GymDetailsAlarmTriggered?.Invoke(this, new AlarmEventTriggeredEventArgs(gymDetails, alarm, guildId)); - } - - /// - /// Triggered upon a pokestop matching an alarm filter - /// - public event EventHandler> PokestopAlarmTriggered; - private void OnPokestopAlarmTriggered(PokestopData pokestop, AlarmObject alarm, ulong guildId) - { - PokestopAlarmTriggered?.Invoke(this, new AlarmEventTriggeredEventArgs(pokestop, alarm, guildId)); - } - - /// - /// Triggered upon a weather cell matching an alarm filter - /// - public event EventHandler> WeatherAlarmTriggered; - private void OnWeatherAlarmTriggered(WeatherData weather, AlarmObject alarm, ulong guildId) - { - WeatherAlarmTriggered?.Invoke(this, new AlarmEventTriggeredEventArgs(weather, alarm, guildId)); - } - - #endregion - - #region Subscriptions - - /// - /// Triggered upon a Pokemon matching a subscribers subscription filter - /// - public event EventHandler PokemonSubscriptionTriggered; - - private void OnPokemonSubscriptionTriggered(PokemonData pkmn) - { - PokemonSubscriptionTriggered?.Invoke(this, pkmn); - } - - /// - /// Triggered upon a raid matching a subscribers subscription filter - /// - public event EventHandler RaidSubscriptionTriggered; - private void OnRaidSubscriptionTriggered(RaidData raid) - { - RaidSubscriptionTriggered?.Invoke(this, raid); - } - - /// - /// Triggered upon a field research quest matching a subscribers subscription filter - /// - public event EventHandler QuestSubscriptionTriggered; - private void OnQuestSubscriptionTriggered(QuestData quest) - { - QuestSubscriptionTriggered?.Invoke(this, quest); - } - - /// - /// Triggered upon a pokestop matching a subscribers subscription filter - /// - public event EventHandler InvasionSubscriptionTriggered; - private void OnInvasionSubscriptionTriggered(PokestopData pokestop) - { - InvasionSubscriptionTriggered?.Invoke(this, pokestop); - } - - public event EventHandler LureSubscriptionTriggered; - private void OnLureSubscriptionTriggered(PokestopData pokestop) - { - LureSubscriptionTriggered?.Invoke(this, pokestop); - } - - #endregion - - #endregion - - #region Constructor - - /// - /// Instantiate a new class. - /// - /// configuration class. - public WebhookController(WhConfigHolder config) - { - _logger.Trace($"WebhookManager::WebhookManager [Config={config}, Port={config.Instance.WebhookPort}, Servers={config.Instance.Servers.Count:N0}]"); - - _gyms = new Dictionary(); - _weather = new Dictionary(); - _alarms = new Dictionary(); - - _config = config; - _config.Reloaded += OnConfigReloaded; - - LoadGeofences(); - LoadAlarms(); - - _http = new HttpServer(new HttpServerConfig - { - Host = _config.Instance.ListeningHost, - Port = _config.Instance.WebhookPort, - DespawnTimerMinimum = _config.Instance.DespawnTimeMinimumMinutes, - CheckForDuplicates = _config.Instance.CheckForDuplicates, - }); - _http.PokemonReceived += OnPokemonReceived; - _http.RaidReceived += OnRaidReceived; - _http.QuestReceived += OnQuestReceived; - _http.PokestopReceived += OnPokestopReceived; - _http.GymReceived += OnGymReceived; - _http.GymDetailsReceived += OnGymDetailsReceived; - _http.WeatherReceived += OnWeatherReceived; - _http.IsDebug = _config.Instance.Debug; - - new Thread(() => { - LoadAlarmsOnChange(); - LoadGeofencesOnChange(); - }).Start(); - } - - #endregion - - #region Public Methods - - /// - /// Start webhook HTTP listener - /// - public void Start() - { - _http?.Start(); - } - - /// - /// Stop webhook HTTP listener - /// - public void Stop() - { - _http?.Stop(); - } - - public List GetServerGeofences(ulong guildId) - { - var server = _config.Instance.Servers[guildId]; - - return server.Geofences; - } - - #endregion - - #region HttpServer Events - - private void OnPokemonReceived(object sender, DataReceivedEventArgs e) - { - var pkmn = e.Data; - if (DateTime.UtcNow.ConvertTimeFromCoordinates(pkmn.Latitude, pkmn.Longitude) > pkmn.DespawnTime) - { - _logger.Debug($"Pokemon {pkmn.Id} already despawned at {pkmn.DespawnTime}"); - return; - } - - // Check if Pokemon is in event Pokemon list - if (_config.Instance.EventPokemonIds.Contains(pkmn.Id) && _config.Instance.EventPokemonIds.Count > 0) - { - // Skip Pokemon if no IV stats. - if (pkmn.IsMissingStats) - return; - - var iv = PokemonData.GetIV(pkmn.Attack, pkmn.Defense, pkmn.Stamina); - // Skip Pokemon if IV is greater than 0%, less than 90%, and does not match any PvP league stats. - if (iv > 0 && iv < _config.Instance.EventMinimumIV && !pkmn.MatchesGreatLeague && !pkmn.MatchesUltraLeague) - return; - } - - ProcessPokemon(pkmn); - OnPokemonSubscriptionTriggered(pkmn); - } - - private void OnRaidReceived(object sender, DataReceivedEventArgs e) - { - var raid = e.Data; - if (DateTime.UtcNow.ConvertTimeFromCoordinates(raid.Latitude, raid.Longitude) > raid.EndTime) - { - _logger.Debug($"Raid boss {raid.PokemonId} already despawned at {raid.EndTime}"); - return; - } - - ProcessRaid(raid); - OnRaidSubscriptionTriggered(raid); - } - - private void OnQuestReceived(object sender, DataReceivedEventArgs e) - { - var quest = e.Data; - ProcessQuest(quest); - OnQuestSubscriptionTriggered(quest); - } - - private void OnPokestopReceived(object sender, DataReceivedEventArgs e) - { - var pokestop = e.Data; - if (pokestop.HasLure || pokestop.HasInvasion) - { - ProcessPokestop(pokestop); - OnInvasionSubscriptionTriggered(pokestop); - OnLureSubscriptionTriggered(pokestop); - } - } - - private void OnGymReceived(object sender, DataReceivedEventArgs e) - { - var gym = e.Data; - ProcessGym(gym); - } - - private void OnGymDetailsReceived(object sender, DataReceivedEventArgs e) - { - var gymDetails = e.Data; - ProcessGymDetails(gymDetails); - } - - private void OnWeatherReceived(object sender, DataReceivedEventArgs e) - { - var weather = e.Data; - ProcessWeather(weather); - } - - #endregion - - private void OnConfigReloaded() - { - // Reload stuff after config changes - LoadGeofences(); - LoadAlarms(); - } - - #region Geofence Initialization - - private void LoadGeofences() - { - foreach (var (serverId, serverConfig) in _config.Instance.Servers) - { - serverConfig.Geofences.Clear(); - - var geofenceFiles = serverConfig.GeofenceFiles; - var geofences = new List(); - - if (geofenceFiles != null && geofenceFiles.Any()) - { - foreach (var file in geofenceFiles) - { - var filePath = Path.Combine(Strings.GeofenceFolder, file); - - try - { - var fileGeofences = GeofenceItem.FromFile(filePath); - - geofences.AddRange(fileGeofences); - - _logger.Info($"Successfully loaded {fileGeofences.Count} geofences from {file}"); - } - catch (Exception ex) - { - _logger.Error($"Could not load Geofence file {file} (for server {serverId}):"); - _logger.Error(ex); - } - } - } - - serverConfig.Geofences.AddRange(geofences); - } - } - - private void LoadGeofencesOnChange() - { - _logger.Trace($"WebhookManager::LoadGeofencesOnChange"); - - var geofencesFolder = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), Strings.GeofenceFolder)); - var fileWatcher = new FileWatcher(geofencesFolder); - - fileWatcher.Changed += (sender, e) => { - try - { - _logger.Debug("Reloading Geofences"); - - LoadGeofences(); - LoadAlarms(); // Reload alarms after geofences too - } - catch (Exception ex) - { - _logger.Error("Error while reloading geofences:"); - _logger.Error(ex); - } - }; - fileWatcher.Start(); - } - - #endregion - - #region Alarms Initialization - - private void LoadAlarms() - { - _alarms.Clear(); - - foreach (var (serverId, serverConfig) in _config.Instance.Servers) - { - var alarms = LoadAlarms(serverId, serverConfig.AlarmsFile); - - _alarms.Add(serverId, alarms); - } - } - - private AlarmList LoadAlarms(ulong forGuildId, string alarmsFilePath) - { - _logger.Trace($"WebhookManager::LoadAlarms [AlarmsFilePath={alarmsFilePath}]"); - - var alarmsFolder = Path.Combine(Directory.GetCurrentDirectory(), Strings.AlarmsFolder); - var alarmPath = Path.Combine(alarmsFolder, alarmsFilePath); - if (!File.Exists(alarmPath)) - { - _logger.Error($"Failed to load file alarms file '{alarmPath}'..."); - return null; - } - - var alarmData = File.ReadAllText(alarmPath); - if (string.IsNullOrEmpty(alarmData)) - { - _logger.Error($"Failed to load '{alarmPath}', file is empty..."); - return null; - } - - var alarms = JsonConvert.DeserializeObject(alarmData); - if (alarms == null) - { - _logger.Error($"Failed to deserialize the alarms file '{alarmPath}', make sure you don't have any json syntax errors."); - return null; - } - - _logger.Info($"Alarms file {alarmPath} was loaded successfully."); - - foreach (var alarm in alarms.Alarms) - { - if (alarm.Geofences != null) - { - foreach (var geofenceName in alarm.Geofences) - { - lock (_geofencesLock) - { - // First try and find loaded geofences for this server by name or filename (so we don't have to parse already loaded files again) - var server = _config.Instance.Servers[forGuildId]; - var geofences = server.Geofences.Where(g => g.Name.Equals(geofenceName, StringComparison.OrdinalIgnoreCase) || - g.Filename.Equals(geofenceName, StringComparison.OrdinalIgnoreCase)).ToList(); - - if (geofences.Any()) - { - alarm.GeofenceItems.AddRange(geofences); - } - else - { - // Try and load from a file instead - var filePath = Path.Combine(Strings.GeofenceFolder, geofenceName); - - if (!File.Exists(filePath)) - { - _logger.Warn($"Could not find Geofence file \"{geofenceName}\" for alarm \"{alarm.Name}\""); - continue; - } - - var fileGeofences = GeofenceItem.FromFile(filePath); - - alarm.GeofenceItems.AddRange(fileGeofences); - _logger.Info($"Successfully loaded {fileGeofences.Count} geofences from {geofenceName}"); - } - } - } - } - - alarm.LoadAlerts(); - alarm.LoadFilters(); - } - - return alarms; - } - - private void LoadAlarmsOnChange() - { - _logger.Trace($"WebhookManager::LoadAlarmsOnChange"); - - var alarmsFolder = Path.Combine(Directory.GetCurrentDirectory(), Strings.AlarmsFolder); - foreach (var (guildId, guildConfig) in _config.Instance.Servers) - { - var alarmsFile = guildConfig.AlarmsFile; - var path = Path.GetFullPath(Path.Combine(alarmsFolder, alarmsFile)); - var fileWatcher = new FileWatcher(path); - - fileWatcher.Changed += (sender, e) => { - try - { - _logger.Debug("Reloading Alarms"); - _alarms[guildId] = LoadAlarms(guildId, path); - } - catch (Exception ex) - { - _logger.Error("Error while reloading alarms:"); - _logger.Error(ex); - } - }; - fileWatcher.Start(); - } - } - - #endregion - - #region Data Processing - - private void ProcessPokemon(PokemonData pkmn) - { - if (pkmn == null) - return; - - Statistics.Instance.TotalReceivedPokemon++; - if (pkmn.IsMissingStats) - Statistics.Instance.TotalReceivedPokemonMissingStats++; - else - Statistics.Instance.TotalReceivedPokemonWithStats++; - - foreach (var (guildId, alarms) in _alarms) - { - if (alarms == null) - continue; - - if (!alarms.EnablePokemon) - continue; - - if (alarms.Alarms?.Count == 0) - continue; - - var pokemonAlarms = alarms.Alarms?.FindAll(x => x.Filters?.Pokemon?.Pokemon != null && x.Filters.Pokemon.Enabled); - if (pokemonAlarms == null) - continue; - - for (var i = 0; i < pokemonAlarms.Count; i++) - { - var alarm = pokemonAlarms[i]; - if (alarm.Filters.Pokemon == null) - continue; - - if (!alarm.Filters.Pokemon.Enabled) - { - //_logger.Info($"[{alarm.Name}] Skipping pokemon {pkmn.Id}: Pokemon filter not enabled."); - continue; - } - - var geofence = GeofenceService.GetGeofence(alarm.GeofenceItems, new Location(pkmn.Latitude, pkmn.Longitude)); - if (geofence == null) - { - //_logger.Info($"[{alarm.Name}] Skipping pokemon {pkmn.Id}: not in geofence."); - continue; - } - - if ((alarm.Filters.Pokemon.IsEvent && !(pkmn.IsEvent.HasValue && pkmn.IsEvent.Value)) || - (!alarm.Filters.Pokemon.IsEvent && pkmn.IsEvent.HasValue && pkmn.IsEvent.Value)) - { - // Pokemon does not have event flag indicating it was checked with event account and event filter is set, skip. - // or Pokemon has event but filter is set to not include them - continue; - } - - if (alarm.Filters.Pokemon.FilterType == FilterType.Exclude && alarm.Filters.Pokemon.Pokemon.Contains(pkmn.Id)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: filter {alarm.Filters.Pokemon.FilterType}."); - continue; - } - - if (alarm.Filters.Pokemon.FilterType == FilterType.Include && alarm.Filters.Pokemon.Pokemon?.Count > 0 && !alarm.Filters.Pokemon.Pokemon.Contains(pkmn.Id)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: filter {alarm.Filters.Pokemon.FilterType}."); - continue; - } - - var formName = Translator.Instance.GetFormName(pkmn.FormId)?.ToLower(); - if (alarm.Filters.Pokemon.FilterType == FilterType.Exclude && alarm.Filters.Pokemon.Forms.Select(x => x.ToLower()).Contains(formName)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id} with form {pkmn.FormId} ({formName}): filter {alarm.Filters.Pokemon.FilterType}."); - continue; - } - - if (alarm.Filters.Pokemon.FilterType == FilterType.Include && alarm.Filters.Pokemon.Forms?.Count > 0 && !alarm.Filters.Pokemon.Forms.Select(x => x.ToLower()).Contains(formName)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id} with form {pkmn.FormId} ({formName}): filter {alarm.Filters.Pokemon.FilterType}."); - continue; - } - - var costumeName = Translator.Instance.GetCostumeName(pkmn.Costume)?.ToLower(); - if (alarm.Filters.Pokemon.FilterType == FilterType.Exclude && alarm.Filters.Pokemon.Costumes.Select(x => x.ToLower()).Contains(costumeName)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id} with costume {pkmn.Costume} ({costumeName}): filter {alarm.Filters.Pokemon.FilterType}."); - continue; - } - - if (alarm.Filters.Pokemon.FilterType == FilterType.Include && alarm.Filters.Pokemon.Costumes?.Count > 0 && !alarm.Filters.Pokemon.Costumes.Select(x => x.ToLower()).Contains(costumeName)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id} with costume {pkmn.Costume} ({costumeName}): filter {alarm.Filters.Pokemon.FilterType}."); - continue; - } - - if (alarm.Filters.Pokemon.IgnoreMissing && pkmn.IsMissingStats) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: IgnoreMissing=true."); - continue; - } - - if (!Filters.MatchesIV(pkmn.IV, alarm.Filters.Pokemon.MinimumIV, alarm.Filters.Pokemon.MaximumIV)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: MinimumIV={alarm.Filters.Pokemon.MinimumIV} and MaximumIV={alarm.Filters.Pokemon.MaximumIV} and IV={pkmn.IV}."); - continue; - } - - if (!Filters.MatchesCP(pkmn.CP, alarm.Filters.Pokemon.MinimumCP, alarm.Filters.Pokemon.MaximumCP)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: MinimumCP={alarm.Filters.Pokemon.MinimumCP} and MaximumCP={alarm.Filters.Pokemon.MaximumCP} and CP={pkmn.CP}."); - continue; - } - - if (!Filters.MatchesLvl(pkmn.Level, alarm.Filters.Pokemon.MinimumLevel, alarm.Filters.Pokemon.MaximumLevel)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: MinimumLevel={alarm.Filters.Pokemon.MinimumLevel} and MaximumLevel={alarm.Filters.Pokemon.MaximumLevel} and Level={pkmn.Level}."); - continue; - } - - var skipGreatLeague = alarm.Filters.Pokemon.IsPvpGreatLeague && - !(pkmn.MatchesGreatLeague && pkmn.GreatLeague.Exists(x => - Filters.MatchesPvPRank(x.Rank ?? 4096, alarm.Filters.Pokemon.MinimumRank, alarm.Filters.Pokemon.MaximumRank) - && x.CP >= Strings.MinimumGreatLeagueCP && x.CP <= Strings.MaximumGreatLeagueCP)); - if (skipGreatLeague) - continue; - - var skipUltraLeague = alarm.Filters.Pokemon.IsPvpUltraLeague && - !(pkmn.MatchesUltraLeague && pkmn.UltraLeague.Exists(x => - Filters.MatchesPvPRank(x.Rank ?? 4096, alarm.Filters.Pokemon.MinimumRank, alarm.Filters.Pokemon.MaximumRank) - && x.CP >= Strings.MinimumUltraLeagueCP && x.CP <= Strings.MaximumUltraLeagueCP)); - if (skipUltraLeague) - continue; - - //if (!Filters.MatchesGender(pkmn.Gender, alarm.Filters.Pokemon.Gender.ToString())) - //{ - // //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: DesiredGender={alarm.Filters.Pokemon.Gender} and Gender={pkmn.Gender}."); - // continue; - //} - - if ((alarm.Filters?.Pokemon?.IgnoreMissing ?? false) && !(float.TryParse(pkmn.Height, out var height) && float.TryParse(pkmn.Weight, out var weight) && Filters.MatchesSize(pkmn.Id.GetSize(height, weight), alarm.Filters?.Pokemon?.Size))) - { - continue; - } - - OnPokemonAlarmTriggered(pkmn, alarm, guildId); - } - } - } - - private void ProcessRaid(RaidData raid) - { - if (raid == null) - return; - - if (raid.IsEgg) - Statistics.Instance.TotalReceivedEggs++; - else - Statistics.Instance.TotalReceivedRaids++; - - foreach (var (guildId, alarms) in _alarms) - { - if (alarms == null) - continue; - - if (!alarms.EnableRaids) - continue; - - if (alarms.Alarms?.Count == 0) - continue; - - var raidAlarms = alarms.Alarms.FindAll(x => (x.Filters.Raids?.Enabled ?? false) || (x.Filters.Eggs?.Enabled ?? false)); - for (var i = 0; i < raidAlarms.Count; i++) - { - var alarm = raidAlarms[i]; - var geofence = GeofenceService.GetGeofence(alarm.GeofenceItems, new Location(raid.Latitude, raid.Longitude)); - if (geofence == null) - { - //_logger.Info($"[{alarm.Name}] Skipping raid Pokemon={raid.PokemonId}, Level={raid.Level}: not in geofence."); - continue; - } - - if (raid.IsEgg) - { - if (alarm.Filters.Eggs == null) - continue; - - if (!alarm.Filters.Eggs.Enabled) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping level {raid.Level} raid egg: raids filter not enabled."); - continue; - } - - if (!int.TryParse(raid.Level, out var level)) - { - _logger.Warn($"[{alarm.Name}] [{geofence.Name}] Failed to parse '{raid.Level}' as raid level."); - continue; - } - - if (!(level >= alarm.Filters.Eggs.MinimumLevel && level <= alarm.Filters.Eggs.MaximumLevel)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping level {raid.Level} raid egg: '{raid.Level}' does not meet the MinimumLevel={alarm.Filters.Eggs.MinimumLevel} and MaximumLevel={alarm.Filters.Eggs.MaximumLevel} filters."); - continue; - } - - if (alarm.Filters.Eggs.OnlyEx && !raid.IsExEligible) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping level {raid.Level} raid egg: only ex {alarm.Filters.Eggs.OnlyEx}."); - continue; - } - - if (alarm.Filters.Eggs.Team != PokemonTeam.All && alarm.Filters.Eggs.Team != raid.Team) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping level {raid.Level} raid egg: '{raid.Team}' does not meet Team={alarm.Filters.Eggs.Team} filter."); - continue; - } - - OnRaidAlarmTriggered(raid, alarm, guildId); - } - else - { - if (alarm.Filters.Raids == null) - continue; - - if (!alarm.Filters.Raids.Enabled) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.PokemonId}: raids filter not enabled."); - continue; - } - - if (!int.TryParse(raid.Level, out var level)) - { - _logger.Warn($"[{alarm.Name}] [{geofence.Name}] Failed to parse '{raid.Level}' as raid level."); - continue; - } - - if (!(level >= alarm.Filters.Raids.MinimumLevel && level <= alarm.Filters.Raids.MaximumLevel)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping level {raid.Level} raid {raid.PokemonId}: '{raid.Level}' does not meet the MinimumLevel={alarm.Filters.Raids.MinimumLevel} and MaximumLevel={alarm.Filters.Raids.MaximumLevel} filters."); - continue; - } - - if (alarm.Filters.Raids.FilterType == FilterType.Exclude && alarm.Filters.Raids.Pokemon.Contains(raid.PokemonId)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.PokemonId}: filter {alarm.Filters.Raids.FilterType}."); - continue; - } - - if (alarm.Filters.Raids.FilterType == FilterType.Include && (!alarm.Filters.Raids.Pokemon.Contains(raid.PokemonId) && alarm.Filters.Raids.Pokemon?.Count > 0)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.PokemonId}: filter {alarm.Filters.Raids.FilterType}."); - continue; - } - - var formName = Translator.Instance.GetFormName(raid.Form)?.ToLower(); - if (alarm.Filters.Raids.FilterType == FilterType.Exclude && alarm.Filters.Raids.Forms.Select(x => x.ToLower()).Contains(formName)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.Id} with form {raid.Form} ({formName}): filter {alarm.Filters.Raids.FilterType}."); - continue; - } - - if (alarm.Filters.Raids.FilterType == FilterType.Include && alarm.Filters.Raids.Forms?.Count > 0 && !alarm.Filters.Raids.Forms.Select(x => x.ToLower()).Contains(formName)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.Id} with form {raid.Form} ({formName}): filter {alarm.Filters.Raids.FilterType}."); - continue; - } - - var costumeName = Translator.Instance.GetCostumeName(raid.Costume)?.ToLower(); - if (alarm.Filters.Raids.FilterType == FilterType.Exclude && alarm.Filters.Raids.Costumes.Select(x => x.ToLower()).Contains(costumeName)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.Id} with costume {raid.Costume} ({costumeName}): filter {alarm.Filters.Raids.FilterType}."); - continue; - } - - if (alarm.Filters.Raids.FilterType == FilterType.Include && alarm.Filters.Raids.Costumes?.Count > 0 && !alarm.Filters.Raids.Costumes.Select(x => x.ToLower()).Contains(costumeName)) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.Id} with costume {raid.Costume} ({costumeName}): filter {alarm.Filters.Raids.FilterType}."); - continue; - } - - if (alarm.Filters.Raids.OnlyEx && !raid.IsExEligible) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.PokemonId}: only ex {alarm.Filters.Raids.OnlyEx}."); - continue; - } - - if (alarm.Filters.Raids.Team != PokemonTeam.All && alarm.Filters.Raids.Team != raid.Team) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.PokemonId}: '{raid.Team}' does not meet Team={alarm.Filters.Raids.Team} filter."); - continue; - } - - if (alarm.Filters.Raids.IgnoreMissing && raid.IsMissingStats) - { - _logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.PokemonId}: IgnoreMissing=true."); - continue; - } - - OnRaidAlarmTriggered(raid, alarm, guildId); - } - } - } - } - - private void ProcessQuest(QuestData quest) - { - if (quest == null) - return; - - Statistics.Instance.TotalReceivedQuests++; - - foreach (var (guildId, alarms) in _alarms) - { - if (alarms == null) - continue; - - if (!alarms.EnableQuests) - continue; - - if (alarms.Alarms?.Count == 0) - continue; - - var rewardKeyword = quest.GetReward(); - var questAlarms = alarms.Alarms.FindAll(x => x.Filters?.Quests?.RewardKeywords != null && x.Filters.Quests.Enabled); - for (var i = 0; i < questAlarms.Count; i++) - { - var alarm = questAlarms[i]; - if (alarm.Filters.Quests == null) - continue; - - if (!alarm.Filters.Quests.Enabled) - { - //_logger.Info($"[{alarm.Name}] Skipping quest PokestopId={quest.PokestopId}, Type={quest.Type}: quests filter not enabled."); - continue; - } - - var geofence = GeofenceService.GetGeofence(alarm.GeofenceItems, new Location(quest.Latitude, quest.Longitude)); - if (geofence == null) - { - //_logger.Info($"[{alarm.Name}] Skipping quest PokestopId={quest.PokestopId}, Type={quest.Type}: not in geofence."); - continue; - } - - var contains = alarm.Filters.Quests.RewardKeywords.Select(x => x.ToLower()).FirstOrDefault(x => rewardKeyword.ToLower().Contains(x.ToLower())) != null; - if (alarm.Filters.Quests.FilterType == FilterType.Exclude && contains) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping quest PokestopId={quest.PokestopId}, Type={quest.Type}: filter {alarm.Filters.Quests.FilterType}."); - continue; - } - - if (!(alarm.Filters.Quests.FilterType == FilterType.Include && (contains || alarm.Filters.Quests?.RewardKeywords.Count == 0))) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping quest PokestopId={quest.PokestopId}: filter {alarm.Filters.Quests.FilterType}."); - continue; - } - - if (!contains && alarm.Filters?.Quests?.RewardKeywords?.Count > 0) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping quest PokestopId={quest.PokestopId}, Type={quest.Type}: rewards does not match reward keywords."); - continue; - } - - if (alarm.Filters.Quests.IsShiny && !quest.IsShiny) - { - //_logger.Info($"[{alarm.Name}] [{geofence.Name}] Skipping quest PokestopId={quest.PokestopId}, Type={quest.Type}: filter IsShiny={alarm.Filters.Quests.IsShiny} Quest={quest.IsShiny}."); - continue; - } - - OnQuestAlarmTriggered(quest, alarm, guildId); - } - } - } - - private void ProcessPokestop(PokestopData pokestop) - { - //Skip if Pokestop filter is not defined. - if (pokestop == null) - return; - - Statistics.Instance.TotalReceivedPokestops++; - - foreach (var (guildId, alarms) in _alarms) - { - if (alarms == null) - continue; - - //Skip if EnablePokestops is disabled in the config. - if (!alarms.EnablePokestops) - continue; - - //Skip if alarms list is null or empty. - if (alarms.Alarms?.Count == 0) - continue; - - var pokestopAlarms = alarms.Alarms.FindAll(x => x.Filters?.Pokestops != null && x.Filters.Pokestops.Enabled); - for (var i = 0; i < pokestopAlarms.Count; i++) - { - var alarm = pokestopAlarms[i]; - if (alarm.Filters.Pokestops == null) - continue; - - if (!alarm.Filters.Pokestops.Enabled) - { - //_logger.Info($"[{alarm.Name}] Skipping pokestop PokestopId={pokestop.PokestopId}, Name={pokestop.Name}: pokestop filter not enabled."); - continue; - } - - if (!alarm.Filters.Pokestops.Lured && pokestop.HasLure) - { - //_logger.Info($"[{alarm.Name}] Skipping pokestop PokestopId={pokestop.PokestopId}, Name={pokestop.Name}: lure filter not enabled."); - continue; - } - - if (!alarm.Filters.Pokestops.LureTypes.Select(x => x.ToLower()).Contains(pokestop.LureType.ToString().ToLower()) && alarm.Filters.Pokestops?.LureTypes?.Count > 0) - { - //_logger.Info($"[{alarm.Name}] Skipping pokestop PokestopId={pokestop.PokestopId}, Name={pokestop.Name}, LureType={pokestop.LureType}: lure type not included."); - continue; - } - - if (!alarm.Filters.Pokestops.Invasions && pokestop.HasInvasion) - { - //_logger.Info($"[{alarm.Name}] Skipping pokestop PokestopId={pokestop.PokestopId}, Name={pokestop.Name}: invasion filter not enabled."); - continue; - } - - var geofence = GeofenceService.GetGeofence(alarm.GeofenceItems, new Location(pokestop.Latitude, pokestop.Longitude)); - if (geofence == null) - { - //_logger.Info($"[{alarm.Name}] Skipping pokestop PokestopId={pokestop.PokestopId}, Name={pokestop.Name} because not in geofence."); - continue; - } - - OnPokestopAlarmTriggered(pokestop, alarm, guildId); - } - } - } - - private void ProcessGym(GymData gym) - { - if (gym == null) - return; - - Statistics.Instance.TotalReceivedGyms++; - - foreach (var (guildId, alarms) in _alarms) - { - if (alarms == null) - continue; - - if (!alarms.EnableGyms) - continue; - - if (alarms.Alarms?.Count == 0) - continue; - - var gymAlarms = alarms.Alarms?.FindAll(x => x.Filters?.Gyms != null && x.Filters.Gyms.Enabled); - for (var i = 0; i < gymAlarms.Count; i++) - { - var alarm = gymAlarms[i]; - if (alarm.Filters.Gyms == null) - continue; - - if (!alarm.Filters.Gyms.Enabled) - { - //_logger.Info($"[{alarm.Name}] Skipping gym GymId={gym.GymId}, GymName={gym.GymName}: gym filter not enabled."); - continue; - } - - var geofence = GeofenceService.GetGeofence(alarm.GeofenceItems, new Location(gym.Latitude, gym.Longitude)); - if (geofence == null) - { - //_logger.Info($"[{alarm.Name}] Skipping gym GymId={gym.GymId}, GymName={gym.GymName} because not in geofence."); - continue; - } - - OnGymAlarmTriggered(gym, alarm, guildId); - } - } - } - - private void ProcessGymDetails(GymDetailsData gymDetails) - { - if (gymDetails == null) - return; - - Statistics.Instance.TotalReceivedGyms++; - - foreach (var (guildId, alarms) in _alarms) - { - if (alarms == null) - continue; - - if (!alarms.EnableGyms) //GymDetails - continue; - - if (alarms.Alarms?.Count == 0) - continue; - - var gymDetailsAlarms = alarms.Alarms?.FindAll(x => x.Filters?.Gyms != null && x.Filters.Gyms.Enabled); - for (var i = 0; i < gymDetailsAlarms.Count; i++) - { - var alarm = gymDetailsAlarms[i]; - if (alarm.Filters.Gyms == null) - continue; - - if (!alarm.Filters.Gyms.Enabled) - { - //_logger.Info($"[{alarm.Name}] Skipping gym GymId={gym.GymId}, Name={gym.Name}: gym filter not enabled."); - continue; - } - - var geofence = GeofenceService.GetGeofence(alarm.GeofenceItems, new Location(gymDetails.Latitude, gymDetails.Longitude)); - if (geofence == null) - { - //_logger.Info($"[{alarm.Name}] Skipping gym details GymId={gymDetails.GymId}, GymName={gymDetails.GymName}: not in geofence."); - continue; - } - - if ((alarm.Filters?.Gyms?.UnderAttack ?? false) && !gymDetails.InBattle) - { - //_logger.Info($"[{alarm.Name}] Skipping gym details GymId={gymDetails.GymId}, GymName{gymDetails.GymName}, not under attack."); - continue; - } - - if (alarm.Filters?.Gyms?.Team != gymDetails.Team && alarm.Filters?.Gyms?.Team != PokemonTeam.All) - { - //_logger.Info($"[{alarm.Name}] Skipping gym details GymId={gymDetails.GymId}, GymName{gymDetails.GymName}, not specified team {alarm.Filters.Gyms.Team}."); - continue; - } - - if (!_gyms.ContainsKey(gymDetails.GymId)) - { - _gyms.Add(gymDetails.GymId, gymDetails); - //OnGymDetailsAlarmTriggered(gymDetails, alarm, guildId); - //continue; - } - - /* - var oldGym = _gyms[gymDetails.GymId]; - var changed = oldGym.Team != gymDetails.Team || gymDetails.InBattle; - if (!changed) - return; - */ - - OnGymDetailsAlarmTriggered(gymDetails, alarm, guildId); - } - } - } - - private void ProcessWeather(WeatherData weather) - { - if (weather == null) - return; - - Statistics.Instance.TotalReceivedWeathers++; - - foreach (var (guildId, alarms) in _alarms) - { - if (alarms == null) - continue; - - if (!alarms.EnableWeather) - continue; - - if (alarms.Alarms?.Count == 0) - continue; - - var weatherAlarms = alarms.Alarms.FindAll(x => x.Filters?.Weather != null && x.Filters.Weather.Enabled); - for (var i = 0; i < weatherAlarms.Count; i++) - { - var alarm = weatherAlarms[i]; - if (alarm.Filters.Weather == null) - continue; - - if (!alarm.Filters.Weather.Enabled) - { - //_logger.Info($"[{alarm.Name}] Skipping pokestop PokestopId={pokestop.PokestopId}, Name={pokestop.Name}: pokestop filter not enabled."); - continue; - } - - var geofence = GeofenceService.GetGeofence(alarm.GeofenceItems, new Location(weather.Latitude, weather.Longitude)); - if (geofence == null) - { - //_logger.Info($"[{alarm.Name}] Skipping gym details GymId={gymDetails.GymId}, GymName={gymDetails.GymName}: not in geofence."); - continue; - } - - if (!alarm.Filters.Weather.WeatherTypes.Contains(weather.GameplayCondition)) - { - // Weather is not in list of accepted ones to send alarms for - continue; - } - - if (!_weather.ContainsKey(weather.Id)) - { - _weather.Add(weather.Id, weather.GameplayCondition); - OnWeatherAlarmTriggered(weather, alarm, guildId); - continue; - } - - var oldWeather = _weather[weather.Id]; - // If previous weather and current weather are the same then don't report it. - if (oldWeather == weather.GameplayCondition) - continue; - - OnWeatherAlarmTriggered(weather, alarm, guildId); - } - } - } - - #endregion - - public void SetGym(string id, GymDetailsData gymDetails) - { - _gyms[id] = gymDetails; - } - - public void SetWeather(long id, WeatherCondition type) - { - _weather[id] = type; - } - - #region Geofence Utilities - - /// - /// Get the geofence the provided location falls within. - /// - /// The guild ID in which to look for Geofences - /// Latitude geocoordinate - /// Longitude geocoordinate - /// Returns a object the provided location falls within. - public GeofenceItem GetGeofence(ulong guildId, double latitude, double longitude) - { - var server = _config.Instance.Servers[guildId]; - - return GeofenceService.GetGeofence(server.Geofences, new Location(latitude, longitude)); - } - - #endregion - } -} diff --git a/src/NotificationQueue.cs b/src/NotificationQueue.cs deleted file mode 100644 index 2f77f5f9..00000000 --- a/src/NotificationQueue.cs +++ /dev/null @@ -1,69 +0,0 @@ -namespace WhMgr -{ - using System; - using System.Collections.Generic; - - using DSharpPlus.Entities; - using WhMgr.Data.Subscriptions.Models; - using WhMgr.Net.Models; - - /// - /// Notification queue wrapper class - /// - public sealed class NotificationQueue : Queue - { - } - - /// - /// Notification queue item class - /// - public class NotificationItem - { - /// - /// Gets or sets the subscription associated with the notification - /// - public SubscriptionObject Subscription { get; set; } - - /// - /// Gets or sets the Discord member to receive the notification - /// - public DiscordMember Member { get; } - - /// - /// Gets or sets the Discord embed message to send - /// - public DiscordEmbed Embed { get; } - - /// - /// Gets or sets the optional description of the message - /// - public string Description { get; set; } - - /// - /// Gets or sets the geofence city - /// - public string City { get; set; } - - /// - /// Gets or sets the Pokemon data object to read from for text message alerts - /// - public PokemonData Pokemon { get; set; } - - /// - /// - /// - /// - /// - /// - /// - public NotificationItem(SubscriptionObject subscription, DiscordMember member, DiscordEmbed embed, string description, string city, PokemonData pokemon = null) - { - Subscription = subscription; - Member = member; - Embed = embed; - Description = description; - City = city; - Pokemon = pokemon; - } - } -} \ No newline at end of file diff --git a/src/Osm/Models/OsmFeature.cs b/src/Osm/Models/OsmFeature.cs index 06a8bb45..9db51431 100644 --- a/src/Osm/Models/OsmFeature.cs +++ b/src/Osm/Models/OsmFeature.cs @@ -1,19 +1,19 @@ namespace WhMgr.Osm.Models { - using Newtonsoft.Json; + using System.Text.Json.Serialization; public class OsmFeature { - [JsonProperty("geometry")] + [JsonPropertyName("geometry")] public OsmFeatureGeometry Geometry { get; set; } - [JsonProperty("type")] + [JsonPropertyName("type")] public string Type { get; set; } - [JsonProperty("id")] + [JsonPropertyName("id")] public long Id { get; set; } - [JsonProperty("properties")] + [JsonPropertyName("properties")] public OsmFeatureProperties Properties { get; set; } } } \ No newline at end of file diff --git a/src/Osm/Models/OsmFeatureCollection.cs b/src/Osm/Models/OsmFeatureCollection.cs index b731b5ee..f4220d88 100644 --- a/src/Osm/Models/OsmFeatureCollection.cs +++ b/src/Osm/Models/OsmFeatureCollection.cs @@ -1,15 +1,14 @@ namespace WhMgr.Osm.Models { - using System; using System.Collections.Generic; - - using Newtonsoft.Json; + using System.Text.Json.Serialization; public class OsmFeatureCollection { - [JsonProperty("type")] + [JsonPropertyName("type")] public string Type { get; set; } + [JsonPropertyName("features")] public List Features { get; set; } } } \ No newline at end of file diff --git a/src/Osm/Models/OsmFeatureGeometry.cs b/src/Osm/Models/OsmFeatureGeometry.cs index 8b153137..3ead1381 100644 --- a/src/Osm/Models/OsmFeatureGeometry.cs +++ b/src/Osm/Models/OsmFeatureGeometry.cs @@ -2,15 +2,14 @@ { using System; using System.Collections.Generic; - - using Newtonsoft.Json; + using System.Text.Json.Serialization; public class OsmFeatureGeometry { - [JsonProperty("type")] + [JsonPropertyName("type")] public string Type { get; set; } - [JsonProperty("coordinates")] + [JsonPropertyName("coordinates")] public List Coordinates { get; set; } } diff --git a/src/Osm/Models/OsmFeatureProperties.cs b/src/Osm/Models/OsmFeatureProperties.cs index 23f177e0..8e3e60af 100644 --- a/src/Osm/Models/OsmFeatureProperties.cs +++ b/src/Osm/Models/OsmFeatureProperties.cs @@ -1,25 +1,25 @@ namespace WhMgr.Osm.Models { - using Newtonsoft.Json; + using System.Text.Json.Serialization; public class OsmFeatureProperties { - [JsonProperty("name")] + [JsonPropertyName("name")] public string Name { get; set; } - [JsonProperty("fill")] + [JsonPropertyName("fill")] public string Fill { get; set; } - [JsonProperty("fill-opacity")] + [JsonPropertyName("fill-opacity")] public double FillOpacity { get; set; } - [JsonProperty("stroke")] + [JsonPropertyName("stroke")] public string Stroke { get; set; } - [JsonProperty("stroke-opacity")] + [JsonPropertyName("stroke-opacity")] public double StrokeOpacity { get; set; } - [JsonProperty("stroke-width")] + [JsonPropertyName("stroke-width")] public double StrokeWidth { get; set; } } } \ No newline at end of file diff --git a/src/Osm/OsmManager.cs b/src/Osm/OsmManager.cs index 467d3d9f..08533dec 100644 --- a/src/Osm/OsmManager.cs +++ b/src/Osm/OsmManager.cs @@ -5,38 +5,35 @@ using System.IO; using System.Linq; - using Newtonsoft.Json; - - using WhMgr.Diagnostics; + using WhMgr.Extensions; using WhMgr.Osm.Models; public class OsmManager { - private static readonly IEventLogger _logger = EventLogger.GetLogger("OSM", Program.LogLevel); - public OsmFeatureCollection Nests { get; private set; } public OsmManager() { - LoadNests(); + Nests = LoadNests(); } - private void LoadNests() + private static OsmFeatureCollection LoadNests() { - if (!File.Exists(Strings.OsmNestFilePath)) + var path = Path.Combine(Strings.BasePath, Strings.OsmNestFilePath); + if (!File.Exists(path)) { - _logger.Warn($"{Strings.OsmNestFilePath} does not exist, failed to load nests."); - return; + Console.WriteLine($"{path} does not exist, failed to load nests."); + return null; } - var data = File.ReadAllText(Strings.OsmNestFilePath); - var obj = JsonConvert.DeserializeObject(data); + var data = File.ReadAllText(path); + var obj = data.FromJson(); if (obj == null) { - _logger.Warn($"Failed to deserialize file data from {Strings.OsmNestFilePath} for nests collection."); - return; + Console.WriteLine($"Failed to deserialize file data from {path} for nests collection."); + return null; } - Nests = obj; + return obj; } public List GetNest(string name) @@ -46,18 +43,22 @@ public List GetNest(string name) return Nests .Features? - .Where(x => string.Compare(name, x?.Properties?.Name, true) == 0)? + .Where(nest => string.Compare(name, nest?.Properties?.Name, true) == 0)? .ToList(); } public static string MultiPolygonToLatLng(List coordinates, bool reverseCoordinates) { + if (coordinates == null) + { + return null; + } var sb = new System.Text.StringBuilder(); //sb.Append("["); for (var i = 0; i < coordinates.Count; i++) { var multipolygon = coordinates[i]; - sb.Append("["); + sb.Append('['); for (var j = 0; j < multipolygon.Count; j++) { var polygon = multipolygon[j]; @@ -72,11 +73,11 @@ public static string MultiPolygonToLatLng(List coordinates, bool r sb.Append($"[{lat},{lng}]"); if (j != multipolygon.Count - 1) - sb.Append(","); + sb.Append(','); } - sb.Append("]"); + sb.Append(']'); if (i != coordinates.Count - 1) - sb.Append(","); + sb.Append(','); } //sb.Append("]"); return sb.ToString(); diff --git a/src/Program.cs b/src/Program.cs index 2a18820c..8d5542bb 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -1,82 +1,117 @@ -using WhMgr.Configuration; - namespace WhMgr { using System; - using System.Diagnostics; using System.IO; + using System.Threading; using System.Threading.Tasks; - using WhMgr.Diagnostics; + using CommandLine; + using Microsoft.AspNetCore.Hosting; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; + + using WhMgr.Configuration; - class Program + public class Options { - /// - /// Gets or sets the manager name - /// - public static string ManagerName { get; set; } = "Main"; + [Option('c', "config", Required = false, HelpText = "Set config file to use.")] + public string ConfigFileName { get; set; } - /// - /// Gets or sets the global log level to use - /// - public static LogLevel LogLevel { get; set; } = LogLevel.Trace; + [Option('n', "name", Required = false, HelpText = "Set name of instance.")] + public string InstanceName { get; set; } + } - /// - /// Main entry point - /// - /// Command line arguments - static void Main(string[] args) => MainAsync(args).GetAwaiter().GetResult(); + public class Program + { + private static CancellationTokenSource _cts = new(); + private static string[] _args; + private static bool _restartRequest; - /// - /// Asynchronous main entry point - /// - /// Command line arguments - /// - static async Task MainAsync(string[] args) + public static void Main(string[] args) { - // Parse command line arguments if given - var arguments = CommandLine.ParseArgs(new string[] { "--", "-" }, args); - var configFilePath = string.Empty; - var managerName = string.Empty; - // Loop through the parsed command line arguments and set the key values associated with each argument provided - foreach (var (key, value) in arguments) + _args = args; + + Start(); + while (_restartRequest) { - switch (key.ToLower()) - { - case "config": - case "c": - configFilePath = value?.ToString() ?? Strings.ConfigFileName; - break; - case "name": - case "n": - managerName = value?.ToString() ?? "Default"; - break; - } + _restartRequest = false; + Console.WriteLine("Restarting application..."); + Start(); } + //CreateHostBuilder(args).Build().Run(); + } - configFilePath = Path.Combine(Environment.CurrentDirectory, string.IsNullOrEmpty(configFilePath) ? Strings.ConfigFileName : configFilePath); - ManagerName = managerName; - var logger = EventLogger.GetLogger(managerName); - logger.Info(Strings.BannerAsciiText); - logger.Info($"Version: {Strings.Version}"); - logger.Info($".NET Runtime Version: {System.Reflection.Assembly.GetExecutingAssembly().ImageRuntimeVersion}\n"); - var whConfig = WhConfig.Load(configFilePath); - if (whConfig == null) + public static void Restart() + { + _restartRequest = true; + _cts.Cancel(); + } + + private static void Start() + { + try + { + _cts = new CancellationTokenSource(); + CreateHostBuilder(_args).Build() + .RunAsync(_cts.Token) + .ConfigureAwait(false) + .GetAwaiter() + .GetResult(); + } + catch (OperationCanceledException ex) { - logger.Error($"Failed to load config {configFilePath}."); - return; + Console.WriteLine(ex); } - whConfig.FileName = configFilePath; - whConfig.LoadDiscordServers(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + var arguments = Parser.Default.ParseArguments(args) + .WithParsed(options => + { + var instanceName = options.InstanceName ?? $"{Strings.BotName}_{Guid.NewGuid()}"; + var configFileName = options.ConfigFileName ?? Strings.ConfigFileName; + var configPath = Path.Combine(Strings.ConfigsFolder, configFileName); + var config = Config.Load(configPath); + if (config == null) + { + Console.WriteLine($"Failed to load config {configPath}."); + return; + } + // TODO: >.> Need to implement ConfigHolder in Startup instead of just Config + //var holder = new ConfigHolder(config); + config.FileName = configPath; + config.LoadDiscordServers(); + Startup.Config = config; - LogLevel = whConfig.LogLevel; + webBuilder.UseStartup(); + webBuilder.UseUrls($"http://{config.ListeningHost}:{config.WebhookPort}"); - // Start bot - var bot = new Bot(new WhConfigHolder(whConfig)); - await bot.Start(); + // Allow safe shutdown of 10 seconds before sigkill + webBuilder.UseShutdownTimeout(TimeSpan.FromSeconds(10)); - // Keep the process alive - Process.GetCurrentProcess().WaitForExit(); - } + // Configure Sentry monitoring and reporting + if (config.EnableSentry) + { + webBuilder.UseSentry(options => + { + options.Dsn = "https://cece44d9799f4009b67ed0702208c0c9@o1113124.ingest.sentry.io/6143193"; + //options.ServerName = Strings.BotName; + options.Release = Strings.BotVersion; + options.AutoSessionTracking = true; + options.MaxBreadcrumbs = 200; + options.TracesSampleRate = 0.1; + options.HttpProxy = null; + options.DecompressionMethods = System.Net.DecompressionMethods.None; + options.MaxQueueItems = 100; + options.ShutdownTimeout = TimeSpan.FromSeconds(5); + options.ConfigureScope(scope => scope.SetTag("Started", DateTime.Now.ToString())); + }); + } + }); + }); } } \ No newline at end of file diff --git a/src/Queues/NotificationItem.cs b/src/Queues/NotificationItem.cs new file mode 100644 index 00000000..fe3f1245 --- /dev/null +++ b/src/Queues/NotificationItem.cs @@ -0,0 +1,43 @@ +namespace WhMgr.Queues +{ + using DSharpPlus.Entities; + + using WhMgr.Services.Subscriptions.Models; + using WhMgr.Services.Webhook.Models; + + /// + /// Notification queue item class + /// + public class NotificationItem + { + /// + /// Gets or sets the subscription associated with the notification + /// + public Subscription Subscription { get; set; } + + /// + /// Gets or sets the Discord member to receive the notification + /// + public DiscordMember Member { get; set; } + + /// + /// Gets or sets the Discord embed message to send + /// + public DiscordEmbed Embed { get; set; } + + /// + /// Gets or sets the optional description of the message + /// + public string Description { get; set; } + + /// + /// Gets or sets the geofence city + /// + public string City { get; set; } + + /// + /// Gets or sets the Pokemon data object to read from for text message alerts + /// + public PokemonData Pokemon { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Alarms/AlarmControllerService.cs b/src/Services/Alarms/AlarmControllerService.cs new file mode 100644 index 00000000..fa5a3878 --- /dev/null +++ b/src/Services/Alarms/AlarmControllerService.cs @@ -0,0 +1,891 @@ +namespace WhMgr.Services.Alarms +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + + using DSharpPlus; + using Microsoft.Extensions.Hosting; + //using Microsoft.Extensions.Logging; + + using WhMgr.Common; + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.HostedServices.TaskQueue; + using WhMgr.Localization; + using WhMgr.Services.Alarms.Filters; + using WhMgr.Services.Alarms.Filters.Models; + using WhMgr.Services.Alarms.Models; + using WhMgr.Services.Cache; + using WhMgr.Services.Discord; + using WhMgr.Services.Geofence; + using WhMgr.Services.Webhook.Models; + using WhMgr.Services.Webhook.Queue; + + public class AlarmControllerService : BackgroundService, IAlarmControllerService + { + private readonly Microsoft.Extensions.Logging.ILogger _logger; + private readonly IReadOnlyDictionary _alarms; + private readonly IDiscordClientService _discordService; + private readonly ConfigHolder _config; + private readonly IMapDataCache _mapDataCache; + private readonly IStaticsticsService _statsService; + private readonly IBackgroundTaskQueue _taskQueue; + private readonly IWebhookQueueManager _webhookQueueManager; + + public AlarmControllerService( + Microsoft.Extensions.Logging.ILogger logger, + IReadOnlyDictionary alarms, + IDiscordClientService discordService, + ConfigHolder config, + IMapDataCache mapDataCache, + IStaticsticsService statsService, + IBackgroundTaskQueue taskQueue, + IWebhookQueueManager webhookQueueManager) + { + _logger = logger; + _alarms = alarms; + _discordService = discordService; + _config = config; + _mapDataCache = mapDataCache; + _statsService = statsService; + _taskQueue = (DefaultBackgroundTaskQueue)taskQueue; + _webhookQueueManager = webhookQueueManager; + _logger.Information($"Alarms {_alarms?.Keys?.Count():N0}"); + } + + public void ProcessPokemonAlarms(PokemonData pokemon) + { + if (pokemon == null) + return; + + _statsService.TotalPokemonReceived++; + if (pokemon.IsMissingStats) + _statsService.TotalPokemonMissingStatsReceived++; + else + _statsService.TotalPokemonWithStatsReceived++; + + foreach (var (guildId, alarms) in _alarms.Where(alarm => alarm.Value?.EnablePokemon ?? false)) + { + var pokemonAlarms = alarms?.Alarms?.FindAll(alarm => alarm.Filters?.Pokemon?.Pokemon != null && alarm.Filters.Pokemon.Enabled); + if (pokemonAlarms == null) + continue; + + for (var i = 0; i < pokemonAlarms.Count; i++) + { + var alarm = pokemonAlarms[i]; + var geofences = GeofenceService.GetGeofences(alarm.GeofenceItems, new Coordinate(pokemon)); + if (geofences == null) + { + //_logger.LogDebug($"[{alarm.Name}] Skipping pokemon {pkmn.Id}: not in geofence."); + continue; + } + + if ((alarm.Filters.Pokemon.IsEvent && !(pokemon.IsEvent.HasValue && pokemon.IsEvent.Value)) || + (!alarm.Filters.Pokemon.IsEvent && pokemon.IsEvent.HasValue && pokemon.IsEvent.Value)) + { + // Pokemon does not have event flag indicating it was checked with event account and event filter is set, skip. + // or Pokemon has event but filter is set to not include them + continue; + } + + if (!PokemonMatchesFilter(pokemon, alarm.Filters.Pokemon)) + { + // Does not match pokemon metadata filter + continue; + } + + if (alarm.Filters.Pokemon.IgnoreMissing && pokemon.IsMissingStats) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: IgnoreMissing=true."); + continue; + } + + var pvpPokemonFilters = alarm.Filters.Pokemon.Pvp; + //if (pokemon.HasPvpRankings && alarm.Filters.Pokemon.Pvp.Count > 0) + // Check alarm PVP filter only if set + if ((pvpPokemonFilters?.Count ?? 0) > 0) + { + var pvpFilterLeagues = pvpPokemonFilters?.Keys.ToList(); + var pvpMatches = pvpFilterLeagues?.Exists(league => + { + // Check if webhook Pokemon contains Pokemon alarm PvP league filter + if (!(pokemon.PvpRankings?.ContainsKey(league) ?? false)) + { + return false; + } + // Check if alarm filter contains PvP league + if (!(alarm.Filters.Pokemon.Pvp?.ContainsKey(league) ?? false)) + { + return false; + } + var filterRanking = pvpPokemonFilters[league]; + var pokemonRankings = pokemon.PvpRankings[league]; + // Check if any alarm filter matches Pokemon PVP rank for each available league + var result = pokemonRankings.Exists(rank => + { + //var percentage = Math.Round(Convert.ToDouble(rank.Percentage) * 100.0, 2); + var matches = + ( + Filters.Filters.MatchesPvPRank(rank.Rank ?? 0, filterRanking.MinimumRank, filterRanking.MaximumRank) + || + Filters.Filters.MatchesPvPRank(rank.CompetitionRank, filterRanking.MinimumRank, filterRanking.MaximumRank) + || + Filters.Filters.MatchesPvPRank(rank.DenseRank, filterRanking.MinimumRank, filterRanking.MaximumRank) + || + Filters.Filters.MatchesPvPRank(rank.OrdinalRank, filterRanking.MinimumRank, filterRanking.MaximumRank) + ) + && + Filters.Filters.MatchesCP((uint)rank.CP, filterRanking.MinimumCP, filterRanking.MaximumCP) + && + Filters.Filters.MatchesGender(rank.Gender, filterRanking.Gender); + // TODO: Reimplement rank product stat percentage filtering (filter.MinimumPercent <= rank.Percentage && filter.MaximumPercent >= rank.Percentage); + return matches; + }); + return result; + }) ?? false; + + // Skip Pokemon if PVP filter does not match and that there are PVP filters defined + if (!pvpMatches) + continue; + } + else + { + // Otherwise check based on general Pokemon filtering + + if (!Filters.Filters.MatchesIV(pokemon.IV, alarm.Filters.Pokemon.MinimumIV, alarm.Filters.Pokemon.MaximumIV)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: MinimumIV={alarm.Filters.Pokemon.MinimumIV} and MaximumIV={alarm.Filters.Pokemon.MaximumIV} and IV={pkmn.IV}."); + continue; + } + + if (!Filters.Filters.MatchesCP(pokemon.CP, alarm.Filters.Pokemon.MinimumCP, alarm.Filters.Pokemon.MaximumCP)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: MinimumCP={alarm.Filters.Pokemon.MinimumCP} and MaximumCP={alarm.Filters.Pokemon.MaximumCP} and CP={pkmn.CP}."); + continue; + } + + if (!Filters.Filters.MatchesLvl(pokemon.Level, alarm.Filters.Pokemon.MinimumLevel, alarm.Filters.Pokemon.MaximumLevel)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: MinimumLevel={alarm.Filters.Pokemon.MinimumLevel} and MaximumLevel={alarm.Filters.Pokemon.MaximumLevel} and Level={pkmn.Level}."); + continue; + } + + if (!Filters.Filters.MatchesGender(pokemon.Gender, alarm.Filters.Pokemon.Gender)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping pokemon {pkmn.Id}: DesiredGender={alarm.Filters.Pokemon.Gender} and Gender={pkmn.Gender}."); + continue; + } + } + + if ((alarm.Filters?.Pokemon?.IgnoreMissing ?? false) && !(pokemon.Height != null && pokemon.Weight != null && Filters.Filters.MatchesSize(pokemon.PokemonId.GetSize(pokemon.Height ?? 0, pokemon.Weight ?? 0), alarm.Filters?.Pokemon?.Size))) + { + continue; + } + + foreach (var geofence in geofences) + { + var taskItem = new AlarmTaskItem + { + GuildId = guildId, + Alarm = alarm, + Data = pokemon, + City = geofence.Name, + }; + if (!ThreadPool.QueueUserWorkItem(async _ => await EnqueueEmbedAsync(taskItem))) + { + _logger.Error($"Failed to queue Pokemon alarm: {alarm.Name} for Pokemon {pokemon.PokemonId} ({pokemon.EncounterId}) from geofence {geofence.Name}"); + continue; + } + _logger.Information($"Pokemon Found [Geofence: {geofence.Name} Alarm: {alarm.Name}, Pokemon: {pokemon.PokemonId}, Despawn: {pokemon.DespawnTime}]"); + } + } + } + } + + public void ProcessRaidAlarms(RaidData raid) + { + if (raid == null) + return; + + if (raid.IsEgg) + _statsService.TotalEggsReceived++; + else + _statsService.TotalRaidsReceived++; + + foreach (var (guildId, alarms) in _alarms.Where(alarm => alarm.Value?.EnableRaids ?? false)) + { + var raidAlarms = alarms?.Alarms?.FindAll(alarm => (alarm.Filters.Raids?.Enabled ?? false) || (alarm.Filters.Eggs?.Enabled ?? false)); + if (raidAlarms == null) + continue; + + for (var i = 0; i < raidAlarms.Count; i++) + { + var alarm = raidAlarms[i]; + var geofences = GeofenceService.GetGeofences(alarm.GeofenceItems, new Coordinate(raid)); + if (geofences == null) + { + //_logger.LogWarning($"[{alarm.Name}] Skipping raid Pokemon={raid.PokemonId}, Level={raid.Level}: not in geofence."); + continue; + } + + if (raid.Level == 0) + { + _logger.Warning($"[{alarm.Name}] Failed to parse '{raid.Level}' as raid level."); + continue; + } + + if (raid.IsEgg) + { + if (alarm.Filters.Eggs == null) + continue; + + if (!alarm.Filters.Eggs.Enabled) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping level {raid.Level} raid egg: raids filter not enabled."); + continue; + } + + if (!(raid.Level >= alarm.Filters.Eggs.MinimumLevel && raid.Level <= alarm.Filters.Eggs.MaximumLevel)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping level {raid.Level} raid egg: '{raid.Level}' does not meet the MinimumLevel={alarm.Filters.Eggs.MinimumLevel} and MaximumLevel={alarm.Filters.Eggs.MaximumLevel} filters."); + continue; + } + + if (alarm.Filters.Eggs.OnlyEx && !raid.IsExEligible) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping level {raid.Level} raid egg: only ex {alarm.Filters.Eggs.OnlyEx}."); + continue; + } + + if (alarm.Filters.Eggs.Team != PokemonTeam.All && alarm.Filters.Eggs.Team != raid.Team) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping level {raid.Level} raid egg: '{raid.Team}' does not meet Team={alarm.Filters.Eggs.Team} filter."); + continue; + } + + if (!PowerLevelMatchesFilter(raid, alarm.Filters.Eggs.PowerLevel)) + { + // Power level does not match + continue; + } + } + else + { + if (alarm.Filters.Raids == null) + continue; + + if (!alarm.Filters.Raids.Enabled) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.PokemonId}: raids filter not enabled."); + continue; + } + + if (!(raid.Level >= alarm.Filters.Raids.MinimumLevel && raid.Level <= alarm.Filters.Raids.MaximumLevel)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping level {raid.Level} raid {raid.PokemonId}: '{raid.Level}' does not meet the MinimumLevel={alarm.Filters.Raids.MinimumLevel} and MaximumLevel={alarm.Filters.Raids.MaximumLevel} filters."); + continue; + } + + if (!PokemonMatchesFilter(raid, alarm.Filters.Raids)) + { + // Does not match pokemon metadata filter + continue; + } + + if (alarm.Filters.Raids.OnlyEx && !raid.IsExEligible) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.PokemonId}: only ex {alarm.Filters.Raids.OnlyEx}."); + continue; + } + + if (alarm.Filters.Raids.Team != PokemonTeam.All && alarm.Filters.Raids.Team != raid.Team) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.PokemonId}: '{raid.Team}' does not meet Team={alarm.Filters.Raids.Team} filter."); + continue; + } + + if (!PowerLevelMatchesFilter(raid, alarm.Filters.Raids.PowerLevel)) + { + // Power level does not match + continue; + } + + if (alarm.Filters.Raids.IgnoreMissing && raid.IsMissingStats) + { + _logger.Information($"[{alarm.Name}] Skipping raid boss {raid.PokemonId}: IgnoreMissing=true."); + continue; + } + } + + foreach (var geofence in geofences) + { + var taskItem = new AlarmTaskItem + { + GuildId = guildId, + Alarm = alarm, + Data = raid, + City = geofence.Name, + }; + if (!ThreadPool.QueueUserWorkItem(async _ => await EnqueueEmbedAsync(taskItem))) + { + _logger.Error($"Failed to queue Raid alarm: {alarm.Name} for Raid {raid.PokemonId} ({raid.Level}) from geofence {geofence.Name}"); + continue; + } + _logger.Information($"Raid Found [Geofence: {geofence.Name} Alarm: {alarm.Name}, Raid: {raid.PokemonId}, Level: {raid.Level}, StartTime: {raid.StartTime}]"); + } + } + } + } + + public void ProcessQuestAlarms(QuestData quest) + { + if (quest == null) + return; + + _statsService.TotalQuestsReceived++; + + foreach (var (guildId, alarms) in _alarms.Where(alarm => alarm.Value?.EnableQuests ?? false)) + { + var questAlarms = alarms?.Alarms?.FindAll(alarm => alarm.Filters?.Quests != null && alarm.Filters.Quests.Enabled); + if (questAlarms == null) + continue; + + var rewardKeyword = quest.GetReward(); + for (var i = 0; i < questAlarms.Count; i++) + { + var alarm = questAlarms[i]; + var geofences = GeofenceService.GetGeofences(alarm.GeofenceItems, new Coordinate(quest)); + if (geofences == null) + { + //_logger.LogDebug($"[{alarm.Name}] Skipping quest PokestopId={quest.PokestopId}, Type={quest.Type}: not in geofence."); + continue; + } + + var contains = alarm.Filters.Quests.RewardKeywords.Select(keyword => keyword.ToLower()).FirstOrDefault(keyword => rewardKeyword.ToLower().Contains(keyword.ToLower())) != null; + if (alarm.Filters.Quests.FilterType == FilterType.Exclude && contains) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping quest PokestopId={quest.PokestopId}, Type={quest.Type}: filter {alarm.Filters.Quests.FilterType}."); + continue; + } + + if (!(alarm.Filters.Quests.FilterType == FilterType.Include && (contains || alarm.Filters.Quests?.RewardKeywords.Count == 0))) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping quest PokestopId={quest.PokestopId}: filter {alarm.Filters.Quests.FilterType}."); + continue; + } + + if (!contains && alarm.Filters?.Quests?.RewardKeywords?.Count > 0) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping quest PokestopId={quest.PokestopId}, Type={quest.Type}: rewards does not match reward keywords."); + continue; + } + + if (alarm.Filters.Quests.IsShiny && !quest.IsShiny) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping quest PokestopId={quest.PokestopId}, Type={quest.Type}: filter IsShiny={alarm.Filters.Quests.IsShiny} Quest={quest.IsShiny}."); + continue; + } + + foreach (var geofence in geofences) + { + var taskItem = new AlarmTaskItem + { + GuildId = guildId, + Alarm = alarm, + Data = quest, + City = geofence.Name, + }; + if (!ThreadPool.QueueUserWorkItem(async _ => await EnqueueEmbedAsync(taskItem))) + { + _logger.Error($"Failed to queue Quest alarm: {alarm.Name} for Quest {quest.PokestopId} ({quest.PokestopName}) from geofence {geofence.Name}"); + continue; + } + _logger.Information($"Quest Found [Geofence: {geofence.Name} Alarm: {alarm.Name}, PokestopId: {quest.PokestopId}, Name: {quest.PokestopName}, Template: {quest.Template}]"); + } + } + } + } + + public void ProcessPokestopAlarms(PokestopData pokestop) + { + if (pokestop == null) + return; + + _statsService.TotalPokestopsReceived++; + if (pokestop.HasLure) + _statsService.TotalLuresReceived++; + + foreach (var (guildId, alarms) in _alarms.Where(alarm => alarm.Value?.EnablePokestops ?? false)) + { + var pokestopAlarms = alarms?.Alarms?.FindAll(alarm => alarm.Filters?.Pokestops != null && alarm.Filters.Pokestops.Enabled); + if (pokestopAlarms == null) + continue; + + for (var i = 0; i < pokestopAlarms.Count; i++) + { + var alarm = pokestopAlarms[i]; + + var hasLure = alarm.Filters.Pokestops.Lured && pokestop.HasLure; + var hasLureType = alarm.Filters.Pokestops.LureTypes.Select(lure => lure.ToLower()).Contains(pokestop.LureType.ToString().ToLower()) + && alarm.Filters.Pokestops.LureTypes.Count > 0; + + if (!(hasLure && hasLureType)) + { + // Does not meet lure filtering + continue; + } + if (!PowerLevelMatchesFilter(pokestop, alarm.Filters.Pokestops.PowerLevel)) + { + // Power level does not match + continue; + } + + var geofences = GeofenceService.GetGeofences(alarm.GeofenceItems, new Coordinate(pokestop)); + if (geofences == null) + { + //_logger.LogDebug($"[{alarm.Name}] Skipping pokestop PokestopId={pokestop.PokestopId}, Name={pokestop.Name} because not in geofence."); + continue; + } + + foreach (var geofence in geofences) + { + var taskItem = new AlarmTaskItem + { + GuildId = guildId, + Alarm = alarm, + Data = pokestop, + City = geofence.Name, + }; + if (!ThreadPool.QueueUserWorkItem(async _ => await EnqueueEmbedAsync(taskItem))) + { + _logger.Error($"Failed to queue Pokestop alarm: {alarm.Name} for Pokestop {pokestop.FortId} ({pokestop.FortName}) from geofence {geofence.Name}"); + continue; + } + _logger.Information($"Pokestop Found [Geofence: {geofence.Name} Alarm: {alarm.Name}, PokestopId: {pokestop.FortId}, Name: {pokestop.FortName}, LureType: {pokestop.LureType}"); + } + } + } + } + + public void ProcessInvasionAlarms(IncidentData incident) + { + if (incident == null) + return; + + _statsService.TotalInvasionsReceived++; + + foreach (var (guildId, alarms) in _alarms.Where(alarm => alarm.Value?.EnableInvasions ?? false)) + { + var invasionAlarms = alarms?.Alarms?.FindAll(alarm => alarm.Filters?.Invasions != null && alarm.Filters.Invasions.Enabled); + if (invasionAlarms == null) + continue; + + for (var i = 0; i < invasionAlarms.Count; i++) + { + var alarm = invasionAlarms[i]; + var matchesInvasionType = alarm.Filters.Invasions.InvasionTypes.ContainsKey(incident.Character) + && alarm.Filters.Invasions.InvasionTypes[incident.Character]; + + if (!matchesInvasionType) + continue; + + var geofences = GeofenceService.GetGeofences(alarm.GeofenceItems, new Coordinate(incident)); + if (geofences == null) + { + //_logger.LogDebug($"[{alarm.Name}] Skipping pokestop PokestopId={pokestop.PokestopId}, Name={pokestop.Name} because not in geofence."); + continue; + } + + foreach (var geofence in geofences) + { + var taskItem = new AlarmTaskItem + { + GuildId = guildId, + Alarm = alarm, + Data = incident, + City = geofence.Name, + }; + if (!ThreadPool.QueueUserWorkItem(async _ => await EnqueueEmbedAsync(taskItem))) + { + _logger.Error($"Failed to queue Invasion alarm: {alarm.Name} for Pokestop {incident.PokestopId} ({incident.PokestopName}) from geofence {geofence.Name}"); + continue; + } + _logger.Information($"Invasion Found [Geofence: {geofence.Name} Alarm: {alarm.Name}, PokestopId: {incident.PokestopId}, Name: {incident.PokestopName}, GruntType: {incident.Character}"); + } + } + } + } + + public void ProcessGymAlarms(GymDetailsData gym) + { + if (gym == null) + return; + + _statsService.TotalGymsReceived++; + + foreach (var (guildId, alarms) in _alarms.Where(alarm => alarm.Value?.EnableGyms ?? false)) + { + var gymAlarms = alarms?.Alarms?.FindAll(alarm => alarm.Filters?.Gyms != null && alarm.Filters.Gyms.Enabled); + if (gymAlarms == null) + continue; + + for (var i = 0; i < gymAlarms.Count; i++) + { + var alarm = gymAlarms[i]; + var geofences = GeofenceService.GetGeofences(alarm.GeofenceItems, new Coordinate(gym)); + if (geofences == null) + { + //_logger.LogDebug($"[{alarm.Name}] Skipping gym details GymId={gym.GymId}, GymName={gym.GymName}: not in geofence."); + continue; + } + + if ((alarm.Filters?.Gyms?.UnderAttack ?? false) && !gym.InBattle) + { + //_logger.LogDebug($"[{alarm.Name}] Skipping gym details GymId={gym.GymId}, GymName{gym.GymName}, not under attack."); + continue; + } + + if (alarm.Filters?.Gyms?.Team != gym.Team && alarm.Filters?.Gyms?.Team != PokemonTeam.All) + { + //_logger.LogDebug($"[{alarm.Name}] Skipping gym details GymId={gym.GymId}, GymName{gym.GymName}, not specified team {alarm.Filters.Gyms.Team}."); + continue; + } + + if (!PowerLevelMatchesFilter(gym, alarm.Filters.Gyms?.PowerLevel)) + { + // Power level does not match + continue; + } + + var oldGym = _mapDataCache.GetGym(gym.FortId).ConfigureAwait(false).GetAwaiter().GetResult(); + if (oldGym != null) + { + var changed = oldGym.Team != gym.Team + || gym.InBattle + || oldGym.SlotsAvailable != gym.SlotsAvailable; + if (!changed) + continue; + } + + /* + var oldGym = _gyms[gym.GymId]; + var changed = oldGym.Team != gym.Team || gym.InBattle; + if (!changed) + return; + */ + + foreach (var geofence in geofences) + { + var taskItem = new AlarmTaskItem + { + GuildId = guildId, + Alarm = alarm, + Data = gym, + City = geofence.Name, + }; + if (!ThreadPool.QueueUserWorkItem(async _ => await EnqueueEmbedAsync(taskItem))) + { + _logger.Error($"Failed to queue Gym alarm: {alarm.Name} for Gym {gym.FortId} ({gym.FortName}) from geofence {geofence.Name}"); + continue; + } + _logger.Information($"Gym Found [Geofence: {geofence.Name} Alarm: {alarm.Name}, GymId: {gym.FortId}, Name: {gym.FortName}, Team: {gym.Team}, InBattle: {gym.InBattle}"); + } + + // Update map data cache with gym + _mapDataCache.UpdateGym(gym); + } + } + } + + public void ProcessWeatherAlarms(WeatherData weather) + { + if (weather == null) + return; + + _statsService.TotalWeatherReceived++; + + foreach (var (guildId, alarms) in _alarms.Where(alarm => alarm.Value?.EnableWeather ?? false)) + { + var weatherAlarms = alarms?.Alarms?.FindAll(alarm => alarm.Filters?.Weather != null && alarm.Filters.Weather.Enabled); + if (weatherAlarms == null) + continue; + + for (var i = 0; i < weatherAlarms.Count; i++) + { + var alarm = weatherAlarms[i]; + var geofences = GeofenceService.GetGeofences(alarm.GeofenceItems, new Coordinate(weather)); + if (geofences == null) + { + //_logger.LogDebug($"[{alarm.Name}] Skipping gym details GymId={gymDetails.GymId}, GymName={gymDetails.GymName}: not in geofence."); + continue; + } + + if (!alarm.Filters.Weather.WeatherTypes.Contains(weather.GameplayCondition)) + { + // Weather is not in list of accepted ones to send alarms for + continue; + } + + var oldWeather = _mapDataCache.GetWeather(weather.Id).ConfigureAwait(false).GetAwaiter().GetResult(); + var changed = oldWeather.GameplayCondition != weather.GameplayCondition + || oldWeather.Severity != weather.Severity; + if (!changed) + continue; + + /* + if (!_weather.ContainsKey(weather.Id)) + { + _weather.Add(weather.Id, weather.GameplayCondition); + OnWeatherAlarmTriggered(weather, alarm, guildId); + continue; + } + + var oldWeather = _weather[weather.Id]; + // If previous weather and current weather are the same then don't report it. + if (oldWeather == weather.GameplayCondition) + continue; + */ + + foreach (var geofence in geofences) + { + var taskItem = new AlarmTaskItem + { + GuildId = guildId, + Alarm = alarm, + Data = weather, + City = geofence.Name, + }; + if (!ThreadPool.QueueUserWorkItem(async _ => await EnqueueEmbedAsync(taskItem))) + { + _logger.Error($"Failed to queue Weather alarm: {alarm.Name} for Gym {weather.Id} ({weather.GameplayCondition}) from geofence {geofence.Name}"); + continue; + } + _logger.Information($"Weather Found [Geofence: {geofence.Name} Alarm: {alarm.Name}, Id: {weather.Id}, Name: {weather.GameplayCondition}, Severity: {weather.Severity}"); + } + + // Update map data cache with weather + _mapDataCache.UpdateWeather(weather); + } + } + } + + public void ProcessAccountAlarms(AccountData account) + { + if (account == null) + return; + + //_statsService.TotalAccountsReceived++; + /* + foreach (var (guildId, alarms) in _alarms)//.Where(alarm => alarm.Value?.EnableAccounts ?? false)) + { + var accountAlarms = alarms?.Alarms?.FindAll(alarm => alarm.Filters?.Weather != null && alarm.Filters.Accounts.Enabled); + if (accountAlarms == null) + continue; + + for (var i = 0; i < accountAlarms.Count; i++) + { + var alarm = accountAlarms[i]; + if (!alarm.Filters.Account.WeatherTypes.Contains(account.Username)) + { + // Weather is not in list of accepted ones to send alarms for + continue; + } + + var taskItem = new AlarmTaskItem + { + GuildId = guildId, + Alarm = alarm, + Data = account, + }; + if (!ThreadPool.QueueUserWorkItem(async _ => await EnqueueEmbedAsync(taskItem))) + { + _logger.Error($"Failed to queue Account alarm: {alarm.Name} for Account {account.Username}"); + continue; + } + _logger.Information($"Account Found [Alarm: {alarm.Name}, Username: {account.Username}, Warning: {account.IsWarned}, Banned: {account.IsBanned}"); + } + } + */ + } + + private static bool PokemonMatchesFilter(IWebhookPokemon pkmn, IWebhookFilterPokemonDetails details) + { + if (details.FilterType == FilterType.Exclude && details.Pokemon.Contains(pkmn.PokemonId)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.PokemonId}: filter {alarm.Filters.Raids.FilterType}."); + return false; + } + + if (details.FilterType == FilterType.Include && (!details.Pokemon.Contains(pkmn.PokemonId) && details.Pokemon?.Count > 0)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.PokemonId}: filter {alarm.Filters.Raids.FilterType}."); + return false; + } + + var formName = Translator.Instance.GetFormName(pkmn.FormId)?.ToLower(); + if (details.FilterType == FilterType.Exclude && details.Forms.Select(form => form.ToLower()).Contains(formName)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.Id} with form {raid.Form} ({formName}): filter {alarm.Filters.Raids.FilterType}."); + return false; + } + + if (details.FilterType == FilterType.Include && details.Forms?.Count > 0 && !details.Forms.Select(form => form.ToLower()).Contains(formName)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.Id} with form {raid.Form} ({formName}): filter {alarm.Filters.Raids.FilterType}."); + return false; + } + + var costumeName = Translator.Instance.GetCostumeName(pkmn.CostumeId)?.ToLower(); + if (details.FilterType == FilterType.Exclude && details.Costumes.Select(costume => costume.ToLower()).Contains(costumeName)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.Id} with costume {raid.Costume} ({costumeName}): filter {alarm.Filters.Raids.FilterType}."); + return false; + } + + if (details.FilterType == FilterType.Include && details.Costumes?.Count > 0 && !details.Costumes.Select(costume => costume.ToLower()).Contains(costumeName)) + { + //_logger.LogDebug($"[{alarm.Name}] [{geofence.Name}] Skipping raid boss {raid.Id} with costume {raid.Costume} ({costumeName}): filter {alarm.Filters.Raids.FilterType}."); + return false; + } + + return true; + } + + private static bool PowerLevelMatchesFilter(IWebhookPowerLevel fort, WebhookFilterGymLevel powerLevelFilter) + { + if (powerLevelFilter != null) + { + if (!Filters.Filters.MatchesGymPowerLevel(fort.PowerUpLevel, powerLevelFilter?.MinimumLevel ?? 0, powerLevelFilter?.MaximumLevel ?? 0)) + { + return false; + } + + if (!Filters.Filters.MatchesGymPowerPoints(fort.PowerUpPoints, powerLevelFilter?.MinimumPoints ?? 0, powerLevelFilter?.MaximumPoints ?? 0)) + { + return false; + } + } + + return true; + } + + #region Background Service + + public override async Task StopAsync(CancellationToken stoppingToken) + { + _logger.Information( + $"{nameof(AlarmControllerService)} is stopping."); + + await base.StopAsync(stoppingToken); + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + _logger.Information( + $"{nameof(AlarmControllerService)} is now running in the background."); + + await BackgroundProcessing(stoppingToken); + } + + private async Task BackgroundProcessing(CancellationToken stoppingToken) + { + while (!stoppingToken.IsCancellationRequested) + { + try + { + //var workItem = await _taskQueue.DequeueAsync(stoppingToken); + //await workItem(stoppingToken); + var workItems = await _taskQueue.DequeueMultipleAsync(Strings.Defaults.MaximumQueueBatchSize, stoppingToken); + foreach (var workItem in workItems) + { + await workItem(stoppingToken); + } + } + catch (OperationCanceledException) + { + // Prevent throwing if stoppingToken was signaled + } + catch (Exception ex) + { + _logger.Error(ex, "Error occurred executing task work item."); + } + Thread.Sleep(10); + } + + _logger.Error("Exited background processing..."); + } + + private async Task EnqueueEmbedAsync(AlarmTaskItem taskItem) + { + //CheckQueueLength(); + + await _taskQueue.EnqueueAsync(async token => + await ProcessWorkItemAsync(taskItem, token)); + } + + private async Task ProcessWorkItemAsync( + AlarmTaskItem taskItem, + CancellationToken stoppingToken) + { + if (string.IsNullOrEmpty(taskItem.Alarm.Webhook)) + return stoppingToken; + + if (!_discordService.DiscordClients.ContainsKey(taskItem.GuildId)) + return stoppingToken; + + if (!_config.Instance.Servers.ContainsKey(taskItem.GuildId)) + return stoppingToken; + + CheckQueueLength(); + + // Queue embed + //_logger.Information($"[{taskItem.City}] Found {taskItem.Data.GetType().Name} [Alarm={taskItem.Alarm.Name}, GuildId={taskItem.GuildId}]"); + + try + { + var client = _discordService.DiscordClients[taskItem.GuildId]; + var eb = await taskItem.Data.GenerateEmbedMessageAsync(new AlarmMessageSettings + { + GuildId = taskItem.GuildId, + Client = client, + Config = _config, + Alarm = taskItem.Alarm, + City = taskItem.City, + MapDataCache = _mapDataCache, + }).ConfigureAwait(false); + var json = eb.Build(); + if (json == null) + { + _logger.Error($"Failed to convert embed notification to JSON string, skipping"); + return stoppingToken; + } + //WhMgr.Utilities.NetUtils.SendWebhook(taskItem.Alarm.Webhook, json); + await _webhookQueueManager.SendWebhook(taskItem.Alarm.Webhook, json).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.Error($"Error: {ex}"); + } + + return stoppingToken; + } + + private void CheckQueueLength() + { + if (_taskQueue.Count > Strings.Defaults.MaximumQueueSizeWarning) + { + _logger.Warning($"Alarm controller queue is {_taskQueue.Count:N0} items long."); + } + else if (_taskQueue.Count >= Strings.Defaults.MaximumQueueCapacity) + { + _logger.Error($"Queue has filled to maximum capacity '{Strings.Defaults.MaximumQueueCapacity}', oldest queued items will start to drop off to make room."); + _taskQueue.ClearQueue(); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Alarms/AlarmMessageSettings.cs b/src/Services/Alarms/AlarmMessageSettings.cs new file mode 100644 index 00000000..25fae3b0 --- /dev/null +++ b/src/Services/Alarms/AlarmMessageSettings.cs @@ -0,0 +1,25 @@ +namespace WhMgr.Services.Alarms +{ + using DSharpPlus; + + using WhMgr.Configuration; + using WhMgr.Services.Alarms.Models; + using WhMgr.Services.Cache; + + public class AlarmMessageSettings + { + public ulong GuildId { get; set; } + + public DiscordClient Client { get; set; } + + public ConfigHolder Config { get; set; } + + public ChannelAlarm Alarm { get; set; } + + public string ImageUrl { get; set; } + + public string City { get; set; } + + public IMapDataCache MapDataCache { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Alarms/Embeds/EmbedMessage.cs b/src/Services/Alarms/Embeds/EmbedMessage.cs new file mode 100644 index 00000000..12ea9f0f --- /dev/null +++ b/src/Services/Alarms/Embeds/EmbedMessage.cs @@ -0,0 +1,298 @@ +namespace WhMgr.Services.Alarms.Embeds +{ + using System.Collections.Generic; + + public class EmbedMessage : Dictionary + { + public static readonly EmbedMessage Defaults = new() + { + { + EmbedMessageType.Pokemon, new EmbedMessageSettings + { + AvatarUrl = "{{pkmn_img_url}}", + ContentList = new List + { + "{{pkmn_name}} {{form}}{{gender}} {{iv}} ({{atk_iv}}/{{def_iv}}/{{sta_iv}}) L{{lvl}}", + "**Despawn:** {{despawn_time}} ({{time_left}} left){{despawn_time_verified}}", + "**Details:** CP: {{cp}} IV: {{iv}} LV: {{lvl}}", + "**Size:** {{size}} | {{types_emoji}}{{#if has_weather}} | {{weather_emoji}}{{#if is_weather_boosted}} (Boosted){{/if}}{{/if}}", + "**Moveset:** {{moveset}}", + "{{#if near_pokestop}}**Near Pokestop:** [{{pokestop_name}}]({{pokestop_url}})", + "{{/if}}{{#if is_ditto}}**Catch Pokemon:** {{original_pkmn_name}}", + "{{/if}}{{#if has_capture_rates}}{{capture_1_emoji}} {{capture_1}}% {{capture_2_emoji}} {{capture_2}}% {{capture_3_emoji}} {{capture_3}}%", + "{{/if}}{{#if is_event}}Go Fest Spawn", + "{{/if}}{{#if has_pvp}}{{#each pvp}}**{{@key}}**", + "{{#each this}}", + "#{{rank}} {{getPokemonName pokemonId}} {{getFormName formId}} {{cp}}CP @ L{{level}} {{formatPercentage percentage}}%", + "{{/each}}{{/each}}{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + }, + IconUrl = "{{pkmn_img_url}}", + Title = "{{geofence}}", + Url = "{{gmaps_url}}", + Username = "{{form}} {{pkmn_name}}{{gender}}", + ImageUrl = "{{tilemaps_url}}", + Footer = new EmbedMessageFooter + { + Text = "{{guild_name}} | {{date_time}}", + IconUrl = "{{guild_img_url}}" + } + } + }, + { + EmbedMessageType.PokemonMissingStats, new EmbedMessageSettings + { + AvatarUrl = "{{pkmn_img_url}}", + ContentList = new List + { + "{{pkmn_name}} {{form}}{{gender}}", + "**Despawn:** {{despawn_time}} ({{time_left}} left){{despawn_time_verified}}", + "**Types:** {{types_emoji}}", + "{{#if near_pokestop}}**Near Pokestop:** [{{pokestop_name}}]({{pokestop_url}})", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**", + }, + IconUrl = "{{pkmn_img_url}}", + Title = "{{geofence}}", + Url = "{{gmaps_url}}", + Username = "{{form}} {{pkmn_name}}{{gender}}", + ImageUrl = "{{tilemaps_url}}", + Footer = new EmbedMessageFooter + { + Text = "{{guild_name}} | {{date_time}}", + IconUrl = "{{guild_img_url}}" + } + } + }, + { + EmbedMessageType.Gyms, new EmbedMessageSettings + { + AvatarUrl = "{{gym_url}}", + ContentList = new List + { + "{{#if team_changed}}Gym changed from {{old_gym_team_emoji}} {{old_gym_team}} to {{gym_team_emoji}} {{gym_team}}", + "{{/if}}{{#if in_battle}}Gym is under attack!", + "{{/if}}**Slots Available:** {{slots_available}}", + "{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}{{#if is_ex}}{{ex_gym_emoji}} Gym!", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**", + }, + IconUrl = "{{gym_url}}", + Title = "{{geofence}}: {{gym_name}}", + Url = "{{gmaps_url}}", + Username = "{{gym_name}}", + ImageUrl = "{{tilemaps_url}}", + Footer = new EmbedMessageFooter + { + Text = "{{guild_name}} | {{date_time}}", + IconUrl = "{{guild_img_url}}" + } + } + }, + { + EmbedMessageType.Raids, new EmbedMessageSettings + { + AvatarUrl = "{{pkmn_img_url}}", + ContentList = new List + { + "{{evolution}} {{form}} {{pkmn_name}}{{gender}} {{costume}} Raid Ends: {{end_time}} ({{end_time_left}} left)", + "**Perfect CP:** {{perfect_cp}} / :white_sun_rain_cloud: {{perfect_cp_boosted}}", + "**Worst CP:** {{worst_cp}} / :white_sun_rain_cloud: {{worst_cp_boosted}}", + "**Types:** {{types_emoji}} | **Level:** {{lvl}} | **Team:** {{team_emoji}}", + "**Moveset:** {{moveset}}", + "**Weaknesses:** {{weaknesses_emoji}}", + "{{#if is_ex}}{{ex_emoji}} Gym!", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**", + }, + IconUrl = "{{pkmn_img_url}}", + Title = "{{geofence}}: {{gym_name}}", + Url = "{{gmaps_url}}", + Username = "{{form}} {{pkmn_name}}{{gender}} {{costume}} Raid", + ImageUrl = "{{tilemaps_url}}", + Footer = new EmbedMessageFooter + { + Text = "{{guild_name}} | {{date_time}}", + IconUrl = "{{guild_img_url}}" + } + } + }, + { + EmbedMessageType.Eggs, new EmbedMessageSettings + { + AvatarUrl = "{{pkmn_img_url}}", + ContentList = new List + { + "Hatches: {{start_time}} ({{start_time_left}})", + "**Ends:** {{end_time}} ({{end_time_left}} left)", + "**Team:** {{team_emoji}}", + "{{#if is_ex}}{{ex_emoji}} Gym!", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**", + }, + IconUrl = "{{pkmn_img_url}}", + Title = "{{geofence}}: {{gym_name}}", + Url = "{{gmaps_url}}", + Username = "Level {{lvl}} Egg", + ImageUrl = "{{tilemaps_url}}", + Footer = new EmbedMessageFooter + { + Text = "{{guild_name}} | {{date_time}}", + IconUrl = "{{guild_img_url}}" + } + } + }, + { + EmbedMessageType.Pokestops, new EmbedMessageSettings + { + AvatarUrl = "{{pokestop_url}}", + ContentList = new List + { + "{{#if has_lure}}**Lure Expires** {{lure_expire_time}} ({{lure_expire_time_left}} left)", + "**Lure Type:** {{lure_type}}", + "{{/if}}{{#if has_invasion}}**Expires:** {{invasion_expire_time}} ({{invasion_expire_time_left}} left)", + "**Type:** {{grunt_type_emoji}} | **Gender:** {{grunt_gender}}", + "**Encounter Reward Chance:**", + "{{#each invasion_encounters}}", + "{{chance}} - {{pokemon}}", + "{{/each}}", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + }, + IconUrl = "{{pokestop_url}}", + Title = "{{geofence}}: {{pokestop_name}}", + Url = "{{gmaps_url}}", + Username = "{{pokestop_name}}", + ImageUrl = "{{tilemaps_url}}", + Footer = new EmbedMessageFooter + { + Text = "{{guild_name}} | {{date_time}}", + IconUrl = "{{guild_img_url}}" + } + } + }, + { + EmbedMessageType.Quests, new EmbedMessageSettings + { + AvatarUrl = "{{quest_reward_img_url}}", + ContentList = new List + { + "**Quest:** {{quest_task}}", + "{{#if has_quest_conditions}}**Condition(s):** {{quest_conditions}}", + "{{/if}}**Reward:** {{quest_reward}}", + "{{#if is_ar}}{{ar_emoji}}**AR Quest Required!**", + "{{/if}}", + "**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**", + }, + IconUrl = "{{pokestop_url}}", + Title = "{{geofence}}: {{pokestop_name}}", + Url = "{{gmaps_url}}", + Username = "{{quest_task}}", + ImageUrl = "{{tilemaps_url}}", + Footer = new EmbedMessageFooter + { + Text = "{{guild_name}} | {{date_time}}", + IconUrl = "{{guild_img_url}}" + } + } + }, + { + EmbedMessageType.Invasions, new EmbedMessageSettings + { + AvatarUrl = "{{invasion_img_url}}", + ContentList = new List + { + "{{#if has_invasion}}**Expires:** {{invasion_expire_time}} ({{invasion_expire_time_left}} left)", + "**Type:** {{grunt_type_emoji}} | **Gender:** {{grunt_gender}}", + "**Encounter Reward Chance:**", + "{{#each invasion_encounters}}", + "{{chance}} - {{pokemon}}", + "{{/each}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**", + }, + IconUrl = "{{pokestop_url}}", + Title = "{{geofence}}: {{pokestop_name}}", + Url = "{{gmaps_url}}", + Username = "{{pokestop_name}}", + ImageUrl = "{{tilemaps_url}}", + Footer = new EmbedMessageFooter + { + Text = "{{guild_name}} | {{date_time}}", + IconUrl = "{{guild_img_url}}" + } + } + }, + { + EmbedMessageType.Lures, new EmbedMessageSettings + { + AvatarUrl = "{{lure_img_url}}", + ContentList = new List + { + "{{#if has_lure}}**Lure Expires:** {{lure_expire_time}} ({{lure_expire_time_left}} left)", + "**Lure Type:** {{lure_type}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**", + }, + IconUrl = "{{pokestop_url}}", + Title = "{{geofence}}: {{pokestop_name}}", + Url = "{{gmaps_url}}", + Username = "{{pokestop_name}}", + ImageUrl = "{{tilemaps_url}}", + Footer = new EmbedMessageFooter + { + Text = "{{guild_name}} | {{date_time}}", + IconUrl = "{{guild_img_url}}" + } + } + }, + { + EmbedMessageType.Nests, new EmbedMessageSettings + { + AvatarUrl = "{{pkmn_img_url}}", + ContentList = new List + { + "**Pokemon:** {{pkmn_name}}", + "**Average Spawns:** {{avg_spawns}}/h | **Types:** {{types_emojis}}", + "**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**", + }, + IconUrl = "{{pkmn_img_url}}", + Title = "{{geofence}}: {{nest_name}}", + Url = "{{gmaps_url}}", + Username = "", + ImageUrl = "{{tilemaps_url}}", + Footer = new EmbedMessageFooter + { + Text = "{{guild_name}} | {{date_time}}", + IconUrl = "{{guild_img_url}}" + } + } + }, + { + EmbedMessageType.Weather, new EmbedMessageSettings + { + AvatarUrl = "{{weather_img_url}}", + ContentList = new List + { + "**Weather Condition:** {{weather_emoji}} {{weather_condition}}", + "**Weather Cell ID:** #{{id}}", + }, + IconUrl = "{{weather_img_url}}", + Title = "{{geofence}}", + Url = "{{gmaps_url}}", + Username = "Weather", + ImageUrl = "{{tilemaps_url}}", + Footer = new EmbedMessageFooter + { + Text = "{{guild_name}} | {{date_time}}", + IconUrl = "{{guild_img_url}}" + } + } + } + }; + } +} \ No newline at end of file diff --git a/src/Services/Alarms/Embeds/EmbedMessageFooter.cs b/src/Services/Alarms/Embeds/EmbedMessageFooter.cs new file mode 100644 index 00000000..06ed6916 --- /dev/null +++ b/src/Services/Alarms/Embeds/EmbedMessageFooter.cs @@ -0,0 +1,21 @@ +namespace WhMgr.Services.Alarms.Embeds +{ + using System.Text.Json.Serialization; + /// + /// Discord alert message footer + /// + public class EmbedMessageFooter + { + /// + /// Gets or sets the Discord message footer text + /// + [JsonPropertyName("text")] + public string Text { get; set; } + + /// + /// Gets or sets the Discord message footer icon url + /// + [JsonPropertyName("iconUrl")] + public string IconUrl { get; set; } + } +} \ No newline at end of file diff --git a/src/Alarms/Alerts/AlertMessageSettings.cs b/src/Services/Alarms/Embeds/EmbedMessageSettings.cs similarity index 56% rename from src/Alarms/Alerts/AlertMessageSettings.cs rename to src/Services/Alarms/Embeds/EmbedMessageSettings.cs index 4dea46d0..e73bac1e 100644 --- a/src/Alarms/Alerts/AlertMessageSettings.cs +++ b/src/Services/Alarms/Embeds/EmbedMessageSettings.cs @@ -1,76 +1,62 @@ -namespace WhMgr.Alarms.Alerts +namespace WhMgr.Services.Alarms.Embeds { - using Newtonsoft.Json; + using System.Collections.Generic; + using System.Text.Json.Serialization; /// /// Discord alert message settings /// - public class AlertMessageSettings + public class EmbedMessageSettings { /// /// Gets or sets the Discord message content within the embed message. /// - [JsonProperty("content")] - public string Content { get; set; } + [JsonPropertyName("content")] + public List ContentList { get; set; } + + [JsonIgnore] + public string Content => string.Join("\n", ContentList); /// /// Gets or sets the Discord message icon url (left side) /// - [JsonProperty("iconUrl")] + [JsonPropertyName("iconUrl")] public string IconUrl { get; set; } /// /// Gets or sets the Discord message author icon avatar url /// - [JsonProperty("avatarUrl")] + [JsonPropertyName("avatarUrl")] public string AvatarUrl { get; set; } /// /// Gets or sets the Discord message title /// - [JsonProperty("title")] + [JsonPropertyName("title")] public string Title { get; set; } /// /// Gets or sets the Discord message title url /// - [JsonProperty("url")] + [JsonPropertyName("url")] public string Url { get; set; } /// /// Gets or sets the Discord author username /// - [JsonProperty("username")] + [JsonPropertyName("username")] public string Username { get; set; } /// /// Gets or sets the Discord message image url (bottom preview) /// - [JsonProperty("imageUrl")] + [JsonPropertyName("imageUrl")] public string ImageUrl { get; set; } /// /// Gets or sets the Discord message footer text and icon url /// - [JsonProperty("footer")] - public AlertMessageFooter Footer { get; set; } - } - - /// - /// Discord alert message footer - /// - public class AlertMessageFooter - { - /// - /// Gets or sets the Discord message footer text - /// - [JsonProperty("text")] - public string Text { get; set; } - - /// - /// Gets or sets the Discord message footer icon url - /// - [JsonProperty("iconUrl")] - public string IconUrl { get; set; } + [JsonPropertyName("footer")] + public EmbedMessageFooter Footer { get; set; } } } \ No newline at end of file diff --git a/src/Alarms/Alerts/AlertMessageType.cs b/src/Services/Alarms/Embeds/EmbedMessageType.cs similarity index 86% rename from src/Alarms/Alerts/AlertMessageType.cs rename to src/Services/Alarms/Embeds/EmbedMessageType.cs index bbb11825..fd9dbaa0 100644 --- a/src/Alarms/Alerts/AlertMessageType.cs +++ b/src/Services/Alarms/Embeds/EmbedMessageType.cs @@ -1,9 +1,9 @@ -namespace WhMgr.Alarms.Alerts +namespace WhMgr.Services.Alarms.Embeds { /// /// Discord alert message type /// - public enum AlertMessageType + public enum EmbedMessageType { /// /// Pokemon alert @@ -34,7 +34,7 @@ public enum AlertMessageType /// Pokestop alert /// Pokestops, - + /// /// Field research quest alert /// @@ -58,6 +58,11 @@ public enum AlertMessageType /// /// Weather cell alert /// - Weather + Weather, + + /// + /// + /// + Account, } } \ No newline at end of file diff --git a/src/Alarms/Filters/FilterType.cs b/src/Services/Alarms/Filters/FilterType.cs similarity index 64% rename from src/Alarms/Filters/FilterType.cs rename to src/Services/Alarms/Filters/FilterType.cs index ed667035..f9e3cfcd 100644 --- a/src/Alarms/Filters/FilterType.cs +++ b/src/Services/Alarms/Filters/FilterType.cs @@ -1,19 +1,18 @@ -namespace WhMgr.Alarms.Filters +namespace WhMgr.Services.Alarms.Filters { - using Newtonsoft.Json; - using Newtonsoft.Json.Converters; + using System.Text.Json.Serialization; /// /// Filter type /// - [JsonConverter(typeof(StringEnumConverter))] + [JsonConverter(typeof(JsonStringEnumConverter))] public enum FilterType { /// /// Include filter type /// Include = 0, - + /// /// Exclude filter type /// diff --git a/src/Services/Alarms/Filters/Filters.cs b/src/Services/Alarms/Filters/Filters.cs new file mode 100644 index 00000000..c06c7860 --- /dev/null +++ b/src/Services/Alarms/Filters/Filters.cs @@ -0,0 +1,132 @@ +namespace WhMgr.Services.Alarms.Filters +{ + using System; + + using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; + + using WhMgr.Common; + + public static class Filters + { + public static bool MatchesIV(string iv, uint minimumIV, uint maximumIV) + { + var matchesIV = false; + var missing = iv == "?" || string.IsNullOrEmpty(iv); + if (!missing) + { + if (!double.TryParse(iv.Replace("%", ""), out double resultIV)) + { + Console.WriteLine($"Failed to parse pokemon IV value '{iv}', skipping filter check."); + return false; + } + + matchesIV |= Math.Round(resultIV) >= minimumIV && Math.Round(resultIV) <= maximumIV; + } + + matchesIV |= (missing && minimumIV == 0); + + return matchesIV; + } + + public static bool MatchesCP(uint? cp, uint minimumCP, uint maximumCP) + { + var matchesCP = false; + var missing = cp == null; + if (!missing) + { + matchesCP |= cp >= minimumCP && cp <= maximumCP; + } + matchesCP |= (missing && minimumCP == 0); + return matchesCP; + } + + public static bool MatchesLvl(ushort? lvl, uint minimumLvl, uint maximumLvl) + { + var matchesLvl = false; + var missing = lvl == null; + if (!missing) + { + matchesLvl |= lvl >= minimumLvl && lvl <= maximumLvl; + } + matchesLvl |= (missing && minimumLvl == 0); + return matchesLvl; + } + + public static bool MatchesPvPRank(uint rank, uint minimumRank, uint maximumRank) + { + var matchesRank = false; + var missing = rank == 0; + if (!missing) + { + matchesRank |= rank >= minimumRank && rank <= maximumRank; + } + + matchesRank |= (missing && minimumRank == 0); + + return matchesRank; + } + + public static bool MatchesGender(Gender gender, Gender desiredGender) + { + return gender == desiredGender || + gender == Gender.Unset || + gender == Gender.Less; + } + + public static bool MatchesGender(Gender gender, char desiredGender) + { + if (desiredGender == '*' || gender == Gender.Less || gender == Gender.Unset) + return true; + + if ((desiredGender == 'm' || desiredGender == 'M') && gender == Gender.Male) + return true; + + if ((desiredGender == 'f' || desiredGender == 'F') && gender == Gender.Female) + return true; + + return false; + } + + /// + /// Check whether a Pokemon's size matches the filter size or if the filter size + /// value is PokemonSize.All return true, otherwise return false. + /// + /// The calculated Pokemon size + /// The expected filter size + /// + public static bool MatchesSize(PokemonSize pkmnSize, PokemonSize? filterSize) + { + // Check if filter size set and if Pokemon size matches filter size + return (filterSize.HasValue && pkmnSize == filterSize.Value) || + // Otherwise check if filter size is All + filterSize == PokemonSize.All || + // Lastly check if no filter size set, if not return true + !filterSize.HasValue || + filterSize == null; + } + + /// + /// Check whether a Pokemon's size matches the filter size or if the filter size + /// value is PokemonSize.All return true, otherwise return false. + /// + /// The calculated Pokemon size + /// The expected filter size + /// + public static bool MatchesSize(PokemonSize pkmnSize, PokemonSize filterSize) + { + // Check if filter size set and if Pokemon size matches filter size, otherwise + // if set to All return true + return pkmnSize == filterSize || filterSize == PokemonSize.All; + } + + public static bool MatchesGymPowerLevel(uint level, uint minLevel, uint maxLevel) + { + return level >= minLevel && level <= maxLevel; + } + + public static bool MatchesGymPowerPoints(uint points, uint minPoints, uint maxPoints) + { + return points >= minPoints && points <= maxPoints; + } + } +} \ No newline at end of file diff --git a/src/Services/Alarms/Filters/Models/IWebhookFilterPokemonDetails.cs b/src/Services/Alarms/Filters/Models/IWebhookFilterPokemonDetails.cs new file mode 100644 index 00000000..17a48413 --- /dev/null +++ b/src/Services/Alarms/Filters/Models/IWebhookFilterPokemonDetails.cs @@ -0,0 +1,15 @@ +namespace WhMgr.Services.Alarms.Filters.Models +{ + using System.Collections.Generic; + + public interface IWebhookFilterPokemonDetails + { + List Pokemon { get; } + + List Forms { get; } + + List Costumes { get; } + + FilterType FilterType { get; } + } +} \ No newline at end of file diff --git a/src/Services/Alarms/Filters/Models/WebhookFilter.cs b/src/Services/Alarms/Filters/Models/WebhookFilter.cs new file mode 100644 index 00000000..057c5cbd --- /dev/null +++ b/src/Services/Alarms/Filters/Models/WebhookFilter.cs @@ -0,0 +1,58 @@ +namespace WhMgr.Services.Alarms.Filters.Models +{ + using System.Text.Json.Serialization; + + /// + /// Main filter object + /// + public class WebhookFilter + { + /// + /// Pokemon filters + /// + [JsonPropertyName("pokemon")] + public WebhookFilterPokemon Pokemon { get; set; } + + /// + /// Raid filters + /// + [JsonPropertyName("raids")] + public WebhookFilterRaid Raids { get; set; } + + /// + /// Raid egg filters + /// + [JsonPropertyName("eggs")] + public WebhookFilterEgg Eggs { get; set; } + + /// + /// Field research quest filters + /// + [JsonPropertyName("quests")] + public WebhookFilterQuest Quests { get; set; } + + /// + /// Pokestop filters + /// + [JsonPropertyName("pokestops")] + public WebhookFilterPokestop Pokestops { get; set; } + + /// + /// Invasion filters + /// + [JsonPropertyName("invasions")] + public WebhookFilterInvasion Invasions { get; set; } + + /// + /// Gym filters + /// + [JsonPropertyName("gyms")] + public WebhookFilterGym Gyms { get; set; } + + /// + /// Weather cell filters + /// + [JsonPropertyName("weather")] + public WebhookFilterWeather Weather { get; set; } + } +} \ No newline at end of file diff --git a/src/Alarms/Filters/Models/FilterEggObject.cs b/src/Services/Alarms/Filters/Models/WebhookFilterEgg.cs similarity index 58% rename from src/Alarms/Filters/Models/FilterEggObject.cs rename to src/Services/Alarms/Filters/Models/WebhookFilterEgg.cs index 24fb98d4..54efa847 100644 --- a/src/Alarms/Filters/Models/FilterEggObject.cs +++ b/src/Services/Alarms/Filters/Models/WebhookFilterEgg.cs @@ -1,53 +1,59 @@ -namespace WhMgr.Alarms.Filters.Models +namespace WhMgr.Services.Alarms.Filters.Models { - using Newtonsoft.Json; + using System.Text.Json.Serialization; - using WhMgr.Net.Models; + using WhMgr.Common; /// /// Raid egg filters /// - public class FilterEggObject + public class WebhookFilterEgg { /// /// Enable egg filter /// - [JsonProperty("enabled")] + [JsonPropertyName("enabled")] public bool Enabled { get; set; } /// /// Minimum raid egg level /// - [JsonProperty("min_lvl")] + [JsonPropertyName("min_lvl")] public uint MinimumLevel { get; set; } /// /// Maximum raid egg level /// - [JsonProperty("max_lvl")] + [JsonPropertyName("max_lvl")] public uint MaximumLevel { get; set; } /// /// Only ex-eligible raids /// - [JsonProperty("onlyEx")] + [JsonPropertyName("only_ex")] public bool OnlyEx { get; set; } /// /// Pokemon Go Team /// - [JsonProperty("team")] + [JsonPropertyName("team")] public PokemonTeam Team { get; set; } + /// + /// Gets or sets the Gym power level filtering options + /// + [JsonPropertyName("power_level")] + public WebhookFilterGymLevel PowerLevel { get; set; } = new(); + /// /// Instantiate a new raid egg filter class. /// - public FilterEggObject() + public WebhookFilterEgg() { MinimumLevel = 1; - MaximumLevel = 6; + MaximumLevel = 8; Team = PokemonTeam.All; } } -} +} \ No newline at end of file diff --git a/src/Services/Alarms/Filters/Models/WebhookFilterGym.cs b/src/Services/Alarms/Filters/Models/WebhookFilterGym.cs new file mode 100644 index 00000000..bca0b2ec --- /dev/null +++ b/src/Services/Alarms/Filters/Models/WebhookFilterGym.cs @@ -0,0 +1,36 @@ +namespace WhMgr.Services.Alarms.Filters.Models +{ + using System.Text.Json.Serialization; + + using WhMgr.Common; + + /// + /// Gym filters + /// + public class WebhookFilterGym + { + /// + /// Enable gym filter + /// + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } + + /// + /// Filter only Gyms under attack + /// + [JsonPropertyName("under_attack")] + public bool UnderAttack { get; set; } + + /// + /// Filter by Pokemon Go Team + /// + [JsonPropertyName("team")] + public PokemonTeam Team { get; set; } + + /// + /// Gets or sets the Gym power level filtering options + /// + [JsonPropertyName("power_level")] + public WebhookFilterGymLevel PowerLevel { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Alarms/Filters/Models/WebhookFilterGymLevel.cs b/src/Services/Alarms/Filters/Models/WebhookFilterGymLevel.cs new file mode 100644 index 00000000..30ea2c86 --- /dev/null +++ b/src/Services/Alarms/Filters/Models/WebhookFilterGymLevel.cs @@ -0,0 +1,27 @@ +namespace WhMgr.Services.Alarms.Filters.Models +{ + using System.Text.Json.Serialization; + + public class WebhookFilterGymLevel + { + [JsonPropertyName("min_level")] + public uint MinimumLevel { get; set; } + + [JsonPropertyName("max_level")] + public uint MaximumLevel { get; set; } + + [JsonPropertyName("min_points")] + public uint MinimumPoints { get; set; } + + [JsonPropertyName("max_points")] + public uint MaximumPoints { get; set; } + + public WebhookFilterGymLevel() + { + MinimumLevel = 1; + MaximumLevel = 3; + MinimumPoints = 10; + MaximumPoints = 250; + } + } +} \ No newline at end of file diff --git a/src/Services/Alarms/Filters/Models/WebhookFilterInvasion.cs b/src/Services/Alarms/Filters/Models/WebhookFilterInvasion.cs new file mode 100644 index 00000000..f13824a0 --- /dev/null +++ b/src/Services/Alarms/Filters/Models/WebhookFilterInvasion.cs @@ -0,0 +1,20 @@ +namespace WhMgr.Services.Alarms.Filters.Models +{ + using System.Collections.Generic; + using System.Text.Json.Serialization; + + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + + public class WebhookFilterInvasion + { + public bool Enabled { get; set; } + + /// + /// Gets or sets the Invasion types to report + /// + [JsonPropertyName("invasion_types")] + public Dictionary InvasionTypes { get; set; } = new(); + + // TODO: Filter by invasion reward + } +} \ No newline at end of file diff --git a/src/Alarms/Filters/Models/FilterPokemonObject.cs b/src/Services/Alarms/Filters/Models/WebhookFilterPokemon.cs similarity index 64% rename from src/Alarms/Filters/Models/FilterPokemonObject.cs rename to src/Services/Alarms/Filters/Models/WebhookFilterPokemon.cs index 40a7025c..06f4d8d4 100644 --- a/src/Alarms/Filters/Models/FilterPokemonObject.cs +++ b/src/Services/Alarms/Filters/Models/WebhookFilterPokemon.cs @@ -1,138 +1,123 @@ -namespace WhMgr.Alarms.Filters.Models +namespace WhMgr.Services.Alarms.Filters.Models { - using System; using System.Collections.Generic; + using System.Text.Json.Serialization; - using Newtonsoft.Json; - - using WhMgr.Net.Models; + using WhMgr.Common; /// /// Pokemon filters /// - public class FilterPokemonObject + public class WebhookFilterPokemon : IWebhookFilterPokemonDetails { /// /// Gets or sets a value determining whether to enable the pokemon filter /// - [JsonProperty("enabled")] + [JsonPropertyName("enabled")] public bool Enabled { get; set; } /// /// Gets or sets the list of pokemon pokedex IDs to filter against /// - //TODO: Allow pokemon names and ids for pokemon filter. - [JsonProperty("pokemon")] + [JsonPropertyName("pokemon")] public List Pokemon { get; set; } /// /// Gets or sets the list of pokemon Form strings to filter against /// - [JsonProperty("forms")] + [JsonPropertyName("forms")] public List Forms { get; set; } /// /// Gets or sets the list of Pokemon costume strings to filter against /// - [JsonProperty("costumes")] + [JsonPropertyName("costumes")] public List Costumes { get; set; } /// /// Gets or sets the minimum IV value to report /// - [JsonProperty("min_iv")] + [JsonPropertyName("min_iv")] public uint MinimumIV { get; set; } /// /// Gets or sets the maximum IV value to report /// - [JsonProperty("max_iv")] + [JsonPropertyName("max_iv")] public uint MaximumIV { get; set; } /// /// Gets or sets the minimum CP value to report /// - [JsonProperty("min_cp")] + [JsonPropertyName("min_cp")] public uint MinimumCP { get; set; } /// /// Gets or sets the maximum CP value to report /// - [JsonProperty("max_cp")] + [JsonPropertyName("max_cp")] public uint MaximumCP { get; set; } /// /// Gets or sets the minimum level value to report /// - [JsonProperty("min_lvl")] + [JsonPropertyName("min_lvl")] public uint MinimumLevel { get; set; } /// /// Gets or sets the maximum level value to report /// - [JsonProperty("max_lvl")] + [JsonPropertyName("max_lvl")] public uint MaximumLevel { get; set; } /// /// Gets or sets the Pokemon gender to filter by /// - [JsonProperty("gender")] + [JsonPropertyName("gender")] public char Gender { get; set; } /// /// Gets or sets the Pokemon size to filter by /// - [JsonProperty("size")] + [JsonPropertyName("size")] public PokemonSize? Size { get; set; } /// - /// Gets or sets a value determining to filter only great league PvP eligible Pokemon - /// - [JsonProperty("great_league")] - public bool IsPvpGreatLeague { get; set; } - - /// - /// Gets or sets a value determining to filter only ultra league PvP eligible Pokemon - /// - [JsonProperty("ultra_league")] - public bool IsPvpUltraLeague { get; set; } - - /// - /// Gets or sets the minimum PvP rank to report + /// Gets or sets the Pokemon eligible PvP ranking filtering /// - [JsonProperty("min_rank")] - public uint MinimumRank { get; set; } + [JsonPropertyName("pvp")] + public Dictionary Pvp { get; set; } /// - /// Gets or sets the maximum PvP rank to report + /// Gets or sets a value determining if webhook Pokemon filter has PvP ranking filters /// - [JsonProperty("max_rank")] - public uint MaximumRank { get; set; } + [JsonPropertyName("has_pvp")] + public bool HasPvpRankings { get; set; } //TODO: Filter by move? /// /// Gets or sets the Pokemon filter type /// - [JsonProperty("type")] + [JsonPropertyName("type")] public FilterType FilterType { get; set; } /// /// Gets or sets a value determining whether a Pokemon was checked with an event account /// - [JsonProperty("is_event")] + [JsonPropertyName("is_event")] public bool IsEvent { get; set; } /// /// Gets or sets a value determining whether to ignore Pokemon missing stats /// - [JsonProperty("ignoreMissing")] + [JsonPropertyName("ignore_missing")] public bool IgnoreMissing { get; set; } /// /// Instantiate a new class. /// - public FilterPokemonObject() + public WebhookFilterPokemon() { Pokemon = new List(); Forms = new List(); @@ -142,11 +127,10 @@ public FilterPokemonObject() MinimumCP = 0; MaximumCP = 999999; MinimumLevel = 0; - MaximumLevel = 100; //Support for when they increase level cap. :wink: - MinimumRank = 0; - MaximumRank = 4096; + MaximumLevel = 100; // Support for when they increase level cap. :wink: + Pvp = new Dictionary(); Gender = '*'; - Size = null; + Size = PokemonSize.All; } } } \ No newline at end of file diff --git a/src/Services/Alarms/Filters/Models/WebhookFilterPokemonPvp.cs b/src/Services/Alarms/Filters/Models/WebhookFilterPokemonPvp.cs new file mode 100644 index 00000000..89bb39fa --- /dev/null +++ b/src/Services/Alarms/Filters/Models/WebhookFilterPokemonPvp.cs @@ -0,0 +1,62 @@ +namespace WhMgr.Services.Alarms.Filters.Models +{ + using System.Text.Json.Serialization; + + using static POGOProtos.Rpc.BelugaPokemonProto.Types; + + public class WebhookFilterPokemonPvp + { + /// + /// Gets or sets the minimum PvP rank to report + /// + [JsonPropertyName("min_rank")] + public ushort MinimumRank { get; set; } + + /// + /// Gets or sets the maximum PvP rank to report + /// + [JsonPropertyName("max_rank")] + public ushort MaximumRank { get; set; } + + /// + /// + /// + [JsonPropertyName("min_percent")] + public double MinimumPercent { get; set; } + + /// + /// + /// + [JsonPropertyName("max_percent")] + public double MaximumPercent { get; set; } + + /// + /// + /// + [JsonPropertyName("min_cp")] + public uint MinimumCP { get; set; } + + /// + /// + /// + [JsonPropertyName("max_cp")] + public uint MaximumCP { get; set; } + + /// + /// Gender requirement filter for PVP rank + /// + [JsonPropertyName("gender")] + public char Gender { get; set; } + + public WebhookFilterPokemonPvp() + { + MinimumCP = 0; + MaximumCP = 999999; + MinimumRank = 1; + MaximumRank = 100; + MinimumPercent = 0; + MaximumPercent = 100; + Gender = '*'; + } + } +} \ No newline at end of file diff --git a/src/Services/Alarms/Filters/Models/WebhookFilterPokestop.cs b/src/Services/Alarms/Filters/Models/WebhookFilterPokestop.cs new file mode 100644 index 00000000..f054a818 --- /dev/null +++ b/src/Services/Alarms/Filters/Models/WebhookFilterPokestop.cs @@ -0,0 +1,36 @@ +namespace WhMgr.Services.Alarms.Filters.Models +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + + /// + /// Pokemon filters + /// + public class WebhookFilterPokestop + { + /// + /// Gets or sets a value determining whether to enable the pokestop filter + /// + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } + + /// + /// Gets or sets a value determining whether to only report lured Pokestops + /// + [JsonPropertyName("lured")] + public bool Lured { get; set; } + + /// + /// Gets or sets the Pokestop lure types to report + /// + [JsonPropertyName("lure_types")] + public List LureTypes { get; set; } = new(); + + /// + /// Gets or sets the Pokestop power level filtering options + /// + [JsonPropertyName("power_level")] + public WebhookFilterGymLevel PowerLevel { get; set; } + } +} \ No newline at end of file diff --git a/src/Alarms/Filters/Models/FilterQuestObject.cs b/src/Services/Alarms/Filters/Models/WebhookFilterQuest.cs similarity index 74% rename from src/Alarms/Filters/Models/FilterQuestObject.cs rename to src/Services/Alarms/Filters/Models/WebhookFilterQuest.cs index 4a9c9dec..644bf848 100644 --- a/src/Alarms/Filters/Models/FilterQuestObject.cs +++ b/src/Services/Alarms/Filters/Models/WebhookFilterQuest.cs @@ -1,42 +1,41 @@ -namespace WhMgr.Alarms.Filters.Models +namespace WhMgr.Services.Alarms.Filters.Models { using System.Collections.Generic; - - using Newtonsoft.Json; + using System.Text.Json.Serialization; /// /// Field research quest filters /// - public class FilterQuestObject + public class WebhookFilterQuest { /// /// Enable field research quest filter /// - [JsonProperty("enabled")] + [JsonPropertyName("enabled")] public bool Enabled { get; set; } /// /// Field research quest filter type /// - [JsonProperty("type")] + [JsonPropertyName("type")] public FilterType FilterType { get; set; } /// /// Field research quest reward keywords /// - [JsonProperty("rewards")] + [JsonPropertyName("rewards")] public List RewardKeywords { get; set; } /// /// Only shiny field research quest rewards /// - [JsonProperty("isShiny")] + [JsonPropertyName("is_shiny")] public bool IsShiny { get; set; } /// /// Instantiate a new class. /// - public FilterQuestObject() + public WebhookFilterQuest() { RewardKeywords = new List(); FilterType = FilterType.Include; diff --git a/src/Alarms/Filters/Models/FilterRaidObject.cs b/src/Services/Alarms/Filters/Models/WebhookFilterRaid.cs similarity index 71% rename from src/Alarms/Filters/Models/FilterRaidObject.cs rename to src/Services/Alarms/Filters/Models/WebhookFilterRaid.cs index 01f58b8f..d87024e9 100644 --- a/src/Alarms/Filters/Models/FilterRaidObject.cs +++ b/src/Services/Alarms/Filters/Models/WebhookFilterRaid.cs @@ -1,88 +1,91 @@ -namespace WhMgr.Alarms.Filters.Models +namespace WhMgr.Services.Alarms.Filters.Models { - using System; using System.Collections.Generic; + using System.Text.Json.Serialization; - using Newtonsoft.Json; - - using WhMgr.Net.Models; + using WhMgr.Common; /// /// Raid boss filters /// - public class FilterRaidObject + public class WebhookFilterRaid : IWebhookFilterPokemonDetails { /// /// Gets or sets a value determining whether to enable the raid boss filter /// - [JsonProperty("enabled")] + [JsonPropertyName("enabled")] public bool Enabled { get; set; } /// /// Gets or sets the minimum raid level /// - [JsonProperty("min_lvl")] + [JsonPropertyName("min_lvl")] public uint MinimumLevel { get; set; } /// /// Gets or sets the maximum raid level /// - [JsonProperty("max_lvl")] + [JsonPropertyName("max_lvl")] public uint MaximumLevel { get; set; } /// /// Gets or sets the Raid boss pokedex ID list to filter against /// - //TODO: Allow pokemon names and ids for raid filter. - [JsonProperty("pokemon")] + [JsonPropertyName("pokemon")] public List Pokemon { get; set; } /// /// Gets or sets the list of Raid Boss Pokemon Form strings to filter against /// - [JsonProperty("forms")] + [JsonPropertyName("forms")] public List Forms { get; set; } /// /// Gets or sets the list of Raid Boss Pokemon costume strings to filter against /// - [JsonProperty("costumes")] + [JsonPropertyName("costumes")] public List Costumes { get; set; } /// /// Gets or sets the Raid boss filter type /// - [JsonProperty("type")] + [JsonPropertyName("type")] public FilterType FilterType { get; set; } /// /// Gets or sets a value determining whether to only report ex-eligible raids /// - [JsonProperty("onlyEx")] + [JsonPropertyName("only_ex")] public bool OnlyEx { get; set; } /// /// Gets or sets the Gym team control filter /// - [JsonProperty("team")] + [JsonPropertyName("team")] public PokemonTeam Team { get; set; } + /// + /// Gets or sets the Gym power level filtering options + /// + [JsonPropertyName("power_level")] + public WebhookFilterGymLevel PowerLevel { get; set; } + /// /// Gets or sets a value determining whether to ignore raids missing stats /// - [JsonProperty("ignoreMissing")] + [JsonPropertyName("ignore_missing")] public bool IgnoreMissing { get; set; } /// /// Instantiate a new class /// - public FilterRaidObject() + public WebhookFilterRaid() { Pokemon = new List(); Forms = new List(); Costumes = new List(); MinimumLevel = 1; - MaximumLevel = 5; + MaximumLevel = 8; Team = PokemonTeam.All; } } diff --git a/src/Alarms/Filters/Models/FilterWeatherObject.cs b/src/Services/Alarms/Filters/Models/WebhookFilterWeather.cs similarity index 58% rename from src/Alarms/Filters/Models/FilterWeatherObject.cs rename to src/Services/Alarms/Filters/Models/WebhookFilterWeather.cs index eb9303a9..8a2d666d 100644 --- a/src/Alarms/Filters/Models/FilterWeatherObject.cs +++ b/src/Services/Alarms/Filters/Models/WebhookFilterWeather.cs @@ -1,26 +1,25 @@ -namespace WhMgr.Alarms.Filters.Models +namespace WhMgr.Services.Alarms.Filters.Models { - using System; using System.Collections.Generic; + using System.Text.Json.Serialization; - using Newtonsoft.Json; - using WeatherCondition = POGOProtos.Rpc.GameplayWeatherProto.Types.WeatherCondition; + using WhMgr.Common; /// /// Weather filters /// - public class FilterWeatherObject + public class WebhookFilterWeather { /// /// Enable weather filter /// - [JsonProperty("enabled")] + [JsonPropertyName("enabled")] public bool Enabled { get; set; } /// /// Filter by in-game weather type /// - [JsonProperty("types")] - public List WeatherTypes { get; set; } + [JsonPropertyName("types")] + public List WeatherTypes { get; set; } = new(); } } \ No newline at end of file diff --git a/src/Services/Alarms/IAlarmControllerService.cs b/src/Services/Alarms/IAlarmControllerService.cs new file mode 100644 index 00000000..26800514 --- /dev/null +++ b/src/Services/Alarms/IAlarmControllerService.cs @@ -0,0 +1,23 @@ +namespace WhMgr.Services.Alarms +{ + using WhMgr.Services.Webhook.Models; + + public interface IAlarmControllerService + { + void ProcessPokemonAlarms(PokemonData pokemon); + + void ProcessRaidAlarms(RaidData raid); + + void ProcessQuestAlarms(QuestData quest); + + void ProcessPokestopAlarms(PokestopData pokestop); + + void ProcessInvasionAlarms(IncidentData incident); + + void ProcessGymAlarms(GymDetailsData gym); + + void ProcessWeatherAlarms(WeatherData weather); + + void ProcessAccountAlarms(AccountData account); + } +} \ No newline at end of file diff --git a/src/Services/Alarms/Models/AlarmTaskItem.cs b/src/Services/Alarms/Models/AlarmTaskItem.cs new file mode 100644 index 00000000..ae231998 --- /dev/null +++ b/src/Services/Alarms/Models/AlarmTaskItem.cs @@ -0,0 +1,15 @@ +namespace WhMgr.Services.Alarms.Models +{ + using WhMgr.Services.Webhook.Models; + + public class AlarmTaskItem + { + public ulong GuildId { get; set; } + + public ChannelAlarm Alarm { get; set; } + + public IWebhookData Data { get; set; } + + public string City { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Alarms/Models/ChannelAlarm.cs b/src/Services/Alarms/Models/ChannelAlarm.cs new file mode 100644 index 00000000..a2df8c20 --- /dev/null +++ b/src/Services/Alarms/Models/ChannelAlarm.cs @@ -0,0 +1,86 @@ +namespace WhMgr.Services.Alarms.Models +{ + using System.Collections.Generic; + using System.IO; + using System.Text.Json.Serialization; + + using WhMgr.Data; + using WhMgr.Services.Alarms.Embeds; + using WhMgr.Services.Alarms.Filters.Models; + using WhMgr.Services.Geofence; + + public class ChannelAlarm : IChannelAlarm + { + /// + /// Gets the Area geofences for the alarm + /// + [JsonIgnore] + public List GeofenceItems { get; private set; } + + /// + /// Gets the Discord alert messages for the alarm + /// + [JsonIgnore] + public EmbedMessage Embeds { get; private set; } + + /// + /// Gets the Alarm filters for the alarm + /// + [JsonIgnore] + public WebhookFilter Filters { get; private set; } + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("description")] + public string Description { get; set; } + + [JsonPropertyName("filters")] + public string FiltersFile { get; set; } + + [JsonPropertyName("embeds")] + public string EmbedsFile { get; set; } + + [JsonPropertyName("geofences")] + public List Geofences { get; set; } + + [JsonPropertyName("webhook")] + public string Webhook { get; set; } + + /// + /// Instantiate a new class + /// + public ChannelAlarm() + { + GeofenceItems = new List(); + Embeds = LoadEmbeds(); + Filters = LoadFilters(); + } + + /// + /// Load embeds from the `/embeds` folder + /// + /// Returns parsed alert message + public EmbedMessage LoadEmbeds() + { + if (string.IsNullOrEmpty(EmbedsFile)) + return null; + + var path = Path.Combine(Strings.EmbedsFolder, EmbedsFile); + return Embeds = GameMaster.LoadInit(path); + } + + /// + /// Load alarm filters from the `/Filters` folder + /// + /// Returns parsed filters object + public WebhookFilter LoadFilters() + { + if (string.IsNullOrEmpty(FiltersFile)) + return null; + + var path = Path.Combine(Strings.FiltersFolder, FiltersFile); + return Filters = GameMaster.LoadInit(path); + } + } +} \ No newline at end of file diff --git a/src/Services/Alarms/Models/ChannelAlarmsManifest.cs b/src/Services/Alarms/Models/ChannelAlarmsManifest.cs new file mode 100644 index 00000000..d0c925d1 --- /dev/null +++ b/src/Services/Alarms/Models/ChannelAlarmsManifest.cs @@ -0,0 +1,133 @@ +namespace WhMgr.Services.Alarms.Models +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Text.Json.Serialization; + + using Microsoft.Extensions.Logging; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Services.Geofence; + + public class ChannelAlarmsManifest + { + //private readonly ILogger _logger; + private static readonly object _geofencesLock = new(); + + [JsonPropertyName("enablePokemon")] + public bool EnablePokemon { get; set; } + + [JsonPropertyName("enableRaids")] + public bool EnableRaids { get; set; } + + [JsonPropertyName("enableQuests")] + public bool EnableQuests { get; set; } + + [JsonPropertyName("enablePokestops")] + public bool EnablePokestops { get; set; } + + [JsonPropertyName("enableInvasions")] + public bool EnableInvasions { get; set; } + + [JsonPropertyName("enableGyms")] + public bool EnableGyms { get; set; } + + [JsonPropertyName("enableWeather")] + public bool EnableWeather { get; set; } + + [JsonPropertyName("alarms")] + public List Alarms { get; set; } + + public ChannelAlarmsManifest() + { + //_logger = LoggerFactory.Create(configure => configure.AddConsole()) + // .CreateLogger(); + Alarms = new List(); + } + + public static Dictionary LoadAlarms(Dictionary servers) + { + var alarms = new Dictionary(); + foreach (var (serverId, serverConfig) in servers) + { + var serverAlarms = LoadAlarms(serverId, serverConfig.AlarmsFile, servers); + alarms.Add(serverId, serverAlarms); + } + return alarms; + } + + private static ChannelAlarmsManifest LoadAlarms(ulong forGuildId, string alarmsFilePath, Dictionary servers) + { + Console.WriteLine($"ChannelAlarms::LoadAlarms [ForGuildId={forGuildId}, AlarmsFilePath={alarmsFilePath}]"); + + var alarmsFolder = Path.Combine(Directory.GetCurrentDirectory(), Strings.AlarmsFolder); + var alarmPath = Path.Combine(alarmsFolder, alarmsFilePath); + if (!File.Exists(alarmPath)) + { + Console.WriteLine($"Failed to load file alarms file '{alarmPath}' file does not exist..."); + return null; + } + + var alarmData = File.ReadAllText(alarmPath); + if (string.IsNullOrEmpty(alarmData)) + { + Console.WriteLine($"Failed to load '{alarmPath}', file is empty..."); + return null; + } + + var alarms = alarmData.FromJson(); + if (alarms == null) + { + Console.WriteLine($"Failed to deserialize the alarms file '{alarmPath}', make sure you don't have any json syntax errors."); + return null; + } + + Console.WriteLine($"Alarms file {alarmPath} was loaded successfully."); + foreach (var alarm in alarms.Alarms) + { + if (alarm.Geofences != null) + { + foreach (var geofenceName in alarm.Geofences) + { + lock (_geofencesLock) + { + // First try and find loaded geofences for this server by name or filename (so we don't have to parse already loaded files again) + var server = servers[forGuildId]; + var geofences = server.Geofences.Where(g => g.Name.Equals(geofenceName, StringComparison.OrdinalIgnoreCase) || + g.Filename.Equals(geofenceName, StringComparison.OrdinalIgnoreCase)).ToList(); + + if (geofences.Any()) + { + alarm.GeofenceItems.AddRange(geofences); + } + else + { + // Try and load from a file instead + var filePath = Path.Combine(Strings.GeofencesFolder, geofenceName); + + if (!File.Exists(filePath)) + { + Console.WriteLine($"Could not find Geofence file \"{geofenceName}\" for alarm \"{alarm.Name}\""); + continue; + } + + var fileGeofences = Geofence.FromFile(filePath); + + alarm.GeofenceItems.AddRange(fileGeofences); + Console.WriteLine($"Successfully loaded {fileGeofences.Count} geofences from {geofenceName}"); + } + } + } + } + + alarm.LoadEmbeds(); + alarm.LoadFilters(); + } + + return alarms; + } + } +} \ No newline at end of file diff --git a/src/Services/Alarms/Models/IChannelAlarm.cs b/src/Services/Alarms/Models/IChannelAlarm.cs new file mode 100644 index 00000000..ed19c6ea --- /dev/null +++ b/src/Services/Alarms/Models/IChannelAlarm.cs @@ -0,0 +1,19 @@ +namespace WhMgr.Services.Alarms.Models +{ + using System.Collections.Generic; + + public interface IChannelAlarm + { + string Name { get; } + + string Description { get; } + + string FiltersFile { get; } + + string EmbedsFile { get; } + + List Geofences { get; } + + string Webhook { get; } + } +} \ No newline at end of file diff --git a/src/Services/Cache/IMapDataCache.cs b/src/Services/Cache/IMapDataCache.cs new file mode 100644 index 00000000..bf3c21a0 --- /dev/null +++ b/src/Services/Cache/IMapDataCache.cs @@ -0,0 +1,34 @@ +namespace WhMgr.Services.Cache +{ + using System.Collections.Generic; + using System.Threading.Tasks; + + using WhMgr.Services.Webhook.Models; + + public interface IMapDataCache + { + Task> GetPokestopsNearby(double latitude, double longitude, double radiusM = 500); + + Task GetPokestop(string id); + + Task> GetGymsNearby(double latitude, double longitude, double radiusM = 500); + + Task GetGym(string id); + + Task GetWeather(long id); + + bool ContainsPokestop(string id); + + bool ContainsGym(string id); + + bool ContainsWeather(long id); + + void UpdatePokestop(PokestopData pokestop); + + void UpdateGym(GymDetailsData gym); + + void UpdateWeather(WeatherData weather); + + //Task LoadMapData(); + } +} \ No newline at end of file diff --git a/src/Services/Cache/MapDataCache.cs b/src/Services/Cache/MapDataCache.cs new file mode 100644 index 00000000..4b393ba2 --- /dev/null +++ b/src/Services/Cache/MapDataCache.cs @@ -0,0 +1,231 @@ +namespace WhMgr.Services.Cache +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading.Tasks; + + using Microsoft.EntityFrameworkCore; + //using Microsoft.Extensions.Logging; + + using WhMgr.Data.Contexts; + using WhMgr.Extensions; + using WhMgr.Services.Geofence; + using WhMgr.Services.Icons; + using WhMgr.Services.Webhook.Models; + + public class MapDataCache : IMapDataCache + { + private readonly Microsoft.Extensions.Logging.ILogger _logger; + private readonly IDbContextFactory _dbFactory; + + private Dictionary _pokestops; + private Dictionary _gyms; + private Dictionary _weather; + + public MapDataCache( + Microsoft.Extensions.Logging.ILogger logger, + IDbContextFactory dbFactory) + { + _logger = logger; + _dbFactory = dbFactory; + } + + #region Pokestops + + /// + /// Get Pokestop from map data cache by id + /// + /// + /// + public async Task GetPokestop(string id) + { + if (string.IsNullOrEmpty(id) || string.Compare(id, "None", true) == 0) + { + return null; + } + if (_pokestops == null) + { + await LoadMapData().ConfigureAwait(false); + } + if (!(_pokestops?.ContainsKey(id) ?? false)) + { + return null; + } + var pokestop = _pokestops[id]; + return pokestop; + } + + public bool ContainsPokestop(string id) => + _pokestops?.ContainsKey(id) ?? false; + + public void UpdatePokestop(PokestopData pokestop) + { + if (ContainsPokestop(pokestop.FortId)) + { + _pokestops[pokestop.FortId] = pokestop; + } + else + { + _pokestops.Add(pokestop.FortId, pokestop); + } + } + + #endregion + + #region Gyms + + /// + /// Get Gym from map data cache by id + /// + /// + /// + public async Task GetGym(string id) + { + if (string.IsNullOrEmpty(id)) + { + return null; + } + if (_gyms == null) + { + await LoadMapData().ConfigureAwait(false); + } + if (!(_gyms?.ContainsKey(id) ?? false)) + { + return null; + } + var gym = _gyms[id]; + return gym; + } + + public bool ContainsGym(string id) => + _gyms?.ContainsKey(id) ?? false; + + public void UpdateGym(GymDetailsData gym) + { + if (ContainsGym(gym.FortId)) + { + _gyms[gym.FortId] = gym; + } + else + { + _gyms.Add(gym.FortId, gym); + } + } + + #endregion + + #region Weather + + /// + /// Get Weather from map data cache by id + /// + /// + /// + public async Task GetWeather(long id) + { + if (id == 0) + { + return null; + } + if (_weather == null) + { + await LoadMapData().ConfigureAwait(false); + } + if (!(_weather?.ContainsKey(id) ?? false)) + { + return null; + } + var weather = _weather[id]; + return weather; + } + + public bool ContainsWeather(long id) => + _weather?.ContainsKey(id) ?? false; + + public void UpdateWeather(WeatherData weather) + { + if (ContainsWeather(weather.Id)) + { + _weather[weather.Id] = weather; + } + else + { + _weather.Add(weather.Id, weather); + } + } + + #endregion + + /// + /// Load pokestops gyms, and weather map data + /// + /// + private async Task LoadMapData() + { + if (_pokestops != null && _gyms != null && _weather != null) + { + // Already cached + _logger.Debug($"Map data already cached"); + return; + } + + using var ctx = _dbFactory.CreateDbContext(); + //_pokestops = await ctx.Pokestops.Include(pokestop => pokestop.Incidents).ToDictionaryAsync(key => key.PokestopId, value => value); + _pokestops = await ctx.Pokestops.ToDictionaryAsync(key => key.FortId, value => value); + _gyms = await ctx.Gyms.ToDictionaryAsync(key => key.FortId, value => value); + _weather = await ctx.Weather.ToDictionaryAsync(key => key.Id, value => value); + } + + public async Task> GetPokestopsNearby(double latitude, double longitude, double radiusM = 100) + { + if (_pokestops == null) + { + await LoadMapData().ConfigureAwait(false); + } + + var nearby = _pokestops.Values.Where(stop => IsWithinRadius(stop.Latitude, stop.Longitude, latitude, longitude, radiusM)) + .Select(stop => new + { + id = stop.FortId, + lat = stop.Latitude, + lon = stop.Longitude, + lure_id = Convert.ToInt32(stop.LureType), + lure = stop.LureType, + marker = //x.HasInvasion + //? UIconService.Instance.GetInvasionIcon("Default", stop.GruntType) + UIconService.Instance.GetPokestopIcon("Default", stop.LureType), // TODO: Get icon style + }).ToList(); + return nearby; + } + + public async Task> GetGymsNearby(double latitude, double longitude, double radiusM = 100) + { + if (_gyms == null) + { + await LoadMapData().ConfigureAwait(false); + } + + var nearby = _gyms.Values.Where(gym => IsWithinRadius(gym.Latitude, gym.Longitude, latitude, longitude, radiusM)) + .Select(gym => new + { + id = gym.FortId, + lat = gym.Latitude, + lon = gym.Longitude, + team_id = Convert.ToInt32(gym.Team), + team = gym.Team, + marker = UIconService.Instance.GetGymIcon("Default", gym.Team), // TODO: Get icon style + }).ToList(); + return nearby; + } + + private static bool IsWithinRadius(double lat, double lon, double mapLat, double mapLon, double radiusM = 100) + { + var coord = new Coordinate(lat, lon); + var mapCoord = new Coordinate(mapLat, mapLon); + var distance = coord.DistanceTo(mapCoord); + var isWithinRadius = distance <= radiusM; + return isWithinRadius; + } + } +} \ No newline at end of file diff --git a/src/Services/Discord/DiscordClientFactory.cs b/src/Services/Discord/DiscordClientFactory.cs new file mode 100644 index 00000000..40d843ed --- /dev/null +++ b/src/Services/Discord/DiscordClientFactory.cs @@ -0,0 +1,161 @@ +namespace WhMgr.Services.Discord +{ + using System; + using System.Linq; + using System.Threading.Tasks; + + using DSharpPlus; + using DSharpPlus.CommandsNext; + using DSharpPlus.Entities; + using DSharpPlus.Interactivity; + using DSharpPlus.Interactivity.Extensions; + + using WhMgr.Commands.Discord; + using WhMgr.Configuration; + using WhMgr.Extensions; + + public class DiscordClientFactory + { + public static DiscordClient CreateDiscordClient(DiscordServerConfig config, IServiceProvider services) + { + if (string.IsNullOrEmpty(config?.Bot?.Token)) + { + throw new NullReferenceException("DiscordClient bot token must be set!"); + } + config.Subscriptions?.LoadDmEmbeds(); + var client = new DiscordClient(new DiscordConfiguration + { + AutoReconnect = true, + AlwaysCacheMembers = true, + // REVIEW: Hmm maybe we should compress the whole stream instead of just payload. + GatewayCompressionLevel = GatewayCompressionLevel.Payload, + Token = config.Bot?.Token, + TokenType = TokenType.Bot, + MinimumLogLevel = config.LogLevel, + Intents = DiscordIntents.DirectMessages + | DiscordIntents.DirectMessageTyping + | DiscordIntents.GuildEmojis + | DiscordIntents.GuildMembers + | DiscordIntents.GuildMessages + | DiscordIntents.GuildMessageTyping + | DiscordIntents.GuildPresences + | DiscordIntents.Guilds + | DiscordIntents.GuildWebhooks, + ReconnectIndefinitely = true, + }); + + // Configure Discord interactivity module + client.UseInteractivity(new InteractivityConfiguration + { + PollBehaviour = DSharpPlus.Interactivity.Enums.PollBehaviour.KeepEmojis, + Timeout = TimeSpan.FromSeconds(30), + PaginationBehaviour = DSharpPlus.Interactivity.Enums.PaginationBehaviour.WrapAround, + }); + + // Discord commands configuration + var commands = client.UseCommandsNext + ( + new CommandsNextConfiguration + { + StringPrefixes = new[] { config.Bot?.CommandPrefix?.ToString() }, + EnableDms = true, + // If command prefix is null, allow for mention prefix + EnableMentionPrefix = string.IsNullOrEmpty(config.Bot?.CommandPrefix), + // Use DSharpPlus's built-in help formatter + EnableDefaultHelp = true, + CaseSensitive = false, + IgnoreExtraArguments = true, + Services = services, + } + ); + // Register available Discord command handler classes + commands.RegisterCommands(); + commands.RegisterCommands(); + commands.RegisterCommands(); + commands.RegisterCommands(); + if (config.Subscriptions?.Enabled ?? false) + { + commands.RegisterCommands(); + } + if (config.GeofenceRoles?.Enabled ?? false) + { + // Add assignable Discord roles and listing command + commands.RegisterCommands(); + } + else + { + // Add basic area listing command + commands.RegisterCommands(); + } + /* + commands.RegisterCommands(); + commands.RegisterCommands(); + commands.RegisterCommands(); + commands.RegisterCommands(); + */ + commands.CommandExecuted += Commands_CommandExecuted; + commands.CommandErrored += Commands_CommandErrored; + return client; + } + + private static async Task Commands_CommandExecuted(CommandsNextExtension commands, CommandExecutionEventArgs e) + { + // let's log the name of the command and user + Console.WriteLine($"{e.Context.User.Username} successfully executed '{e.Command.QualifiedName}'", DateTime.Now); + + // since this method is not async, let's return + // a completed task, so that no additional work + // is done + await Task.CompletedTask; + } + + private static async Task Commands_CommandErrored(CommandsNextExtension commands, CommandErrorEventArgs e) + { + Console.WriteLine($"{e.Context.User.Username} tried executing '{e.Command?.QualifiedName ?? e.Context.Message.Content}' but it errored: {e.Exception.GetType()}: {e.Exception.Message ?? ""}", DateTime.Now); + + // let's check if the error is a result of lack of required permissions + if (e.Exception is DSharpPlus.CommandsNext.Exceptions.ChecksFailedException) + { + // The user lacks required permissions, + var emoji = DiscordEmoji.FromName(e.Context.Client, ":no_entry:"); + + // let's wrap the response into an embed + var embed = new DiscordEmbedBuilder + { + Title = "Access denied", + Description = $"{emoji} You do not have the permissions required to execute this command.", + Color = new DiscordColor(0xFF0000) // red + }; + await e.Context.RespondAsync(embed: embed); + } + else if (e.Exception is ArgumentException) + { + var config = (ConfigHolder)commands.Services.GetService(typeof(ConfigHolder)); + var arguments = e.Command.Overloads[0]; + // The user lacks required permissions, + var emoji = DiscordEmoji.FromName(e.Context.Client, ":x:"); + + var guildId = e.Context.Guild?.Id ?? e.Context.Client.Guilds.FirstOrDefault(guild => config.Instance.Servers.ContainsKey(guild.Key)).Key; + var prefix = config.Instance.Servers.ContainsKey(guildId) ? config.Instance.Servers[guildId].Bot.CommandPrefix : "!"; + var example = $"Command Example: ```{prefix}{e.Command.Name} {string.Join(" ", arguments.Arguments.Select(arg => arg.IsOptional ? $"[{arg.Name}]" : arg.Name))}```\r\n*Parameters in brackets are optional.*"; + + // let's wrap the response into an embed + var embed = new DiscordEmbedBuilder + { + Title = $"{emoji} Invalid Argument(s)", + Description = $"{string.Join(Environment.NewLine, arguments.Arguments.Select(arg => $"Parameter **{arg.Name}** expects type **{arg.Type.ToHumanReadableString()}.**"))}.\r\n\r\n{example}", + Color = new DiscordColor(0xFF0000) // red + }; + await e.Context.RespondAsync(embed: embed); + } + else if (e.Exception is DSharpPlus.CommandsNext.Exceptions.CommandNotFoundException) + { + Console.WriteLine($"User {e.Context.User.Username} tried executing command {e.Context.Message.Content} but command does not exist."); + } + else + { + Console.WriteLine($"User {e.Context.User.Username} tried executing command {e.Command?.Name} and unknown error occurred.\r\n: {e.Exception}"); + } + } + } +} \ No newline at end of file diff --git a/src/Services/Discord/DiscordClientService.cs b/src/Services/Discord/DiscordClientService.cs new file mode 100644 index 00000000..73c251f1 --- /dev/null +++ b/src/Services/Discord/DiscordClientService.cs @@ -0,0 +1,400 @@ +namespace WhMgr.Services.Discord +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Threading.Tasks; + + using DSharpPlus; + using DSharpPlus.Entities; + using DSharpPlus.EventArgs; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Logging; + + using WhMgr.Configuration; + using WhMgr.Data; + using WhMgr.Osm; + using WhMgr.Services.Subscriptions; + + // TODO: Convert to HostedService + public class DiscordClientService : IDiscordClientService + { + public const uint DiscordAccessValidationInterval = 5 * 60000; // Every 5 minutes + + private readonly ILogger _logger; + private readonly Dictionary _discordClients; + private readonly ConfigHolder _config; + private readonly ISubscriptionManagerService _subscriptionManager; + private readonly IServiceProvider _serviceProvider; + private readonly System.Timers.Timer _accessValidator; + + public IReadOnlyDictionary DiscordClients => + _discordClients; + + public bool Initialized { get; private set; } + + public DiscordClientService( + ILogger logger, + ConfigHolder config, + ISubscriptionManagerService subscriptionManager, + IServiceProvider serviceProvider) + { + _logger = logger; + _config = config; + _subscriptionManager = subscriptionManager; + _serviceProvider = serviceProvider; + + _discordClients = new Dictionary(); + _accessValidator = new System.Timers.Timer(DiscordAccessValidationInterval); + _accessValidator.Elapsed += async (sender, e) => await ValidateDiscordMemberAccess(); + } + + #region Public Methods + + public async Task Start() + { + _logger.LogTrace($"Initializing Discord clients..."); + + var subManager = _serviceProvider.GetService(); + + // Build the dependency collection which will contain our objects that can be globally used within each command module + var servicesCol = new ServiceCollection() + .AddSingleton(typeof(ConfigHolder), _config) + .AddSingleton(typeof(OsmManager), new OsmManager()) + .AddSingleton(typeof(IServiceProvider), _serviceProvider) + .AddSingleton(subManager) + .AddSingleton(LoggerFactory.Create(configure => configure.AddConsole())); + var services = servicesCol.BuildServiceProvider(); + await InitializeDiscordClients(services); + + // Start validating Discord member access + _accessValidator.Start(); + } + + public async Task Stop() + { + _logger.LogTrace($"Stopping Discord clients..."); + + foreach (var (guildId, discordClient) in _discordClients) + { + await discordClient.DisconnectAsync(); + _logger.LogDebug($"Discord client for guild {guildId} disconnected."); + } + } + + #endregion + + private async Task InitializeDiscordClients(ServiceProvider services) + { + foreach (var (guildId, guildConfig) in _config.Instance.Servers) + { + _logger.LogDebug($"Configured Discord server {guildId}"); + var client = DiscordClientFactory.CreateDiscordClient(guildConfig, services); + client.Ready += Client_Ready; + client.GuildAvailable += Client_GuildAvailable; + if ((guildConfig.GeofenceRoles?.Enabled ?? false) && + (guildConfig.GeofenceRoles?.AutoRemove ?? false)) + { + client.GuildMemberUpdated += Client_GuildMemberUpdated; + } + //client.MessageCreated += Client_MessageCreated; + client.ClientErrored += Client_ClientErrored; + + if (!_discordClients.ContainsKey(guildId)) + { + _discordClients.Add(guildId, client); + await client.ConnectAsync(); + _logger.LogDebug($"Discord client for guild {guildId} connecting..."); + } + + // Wait 3 seconds between initializing each Discord client + await Task.Delay(3 * 1000); + } + + _logger.LogInformation($"Discord clients all initialized"); + Initialized = true; + } + + private async Task ValidateDiscordMemberAccess() + { + // Check if any Discord clients configured + if (_discordClients.Count == 0) + return; + + // Build list of role ids from dictionary of guilds + var validRoleIdsPerGuild = _config.Instance.Servers.Values + .ToList() + .Aggregate(new List(), (x, y) => x.Concat(y.DonorRoleIds.Keys.ToList()) + .ToList()); + // Check if subscriptions fetched yet from database + var subscriptions = _subscriptionManager.Subscriptions; + if (subscriptions == null) + return; + + // Loop all available subscriptions + foreach (var subscription in subscriptions) + { + if (!_discordClients.Any(client => client.Value.Guilds.ContainsKey(subscription.GuildId))) + continue; + + // Check if configured Discord clients configured with subscription Discord guild + var discordClient = _discordClients.FirstOrDefault(client => client.Value.Guilds.ContainsKey(subscription.GuildId)); + if (discordClient.Value == null) + continue; + + // Get guild for subscription + var guild = discordClient.Value.Guilds[subscription.GuildId]; + if (guild == null) + continue; + + // Check if guild contains subscription user id + if (!guild.Members.ContainsKey(subscription.UserId)) + continue; + + // Get member for subscriptions + var member = await guild.GetMemberAsync(subscription.UserId); + if (member == null) + continue; + + // Check if guild configured + if (!_config.Instance.Servers.ContainsKey(guild.Id)) + continue; + + // Get members existing role ids + var memberRoleIds = member.Roles.Select(role => role.Id).ToList(); + + // Check if member roles contains any of the valid roles for the guild + var isValid = validRoleIdsPerGuild.Exists(roleId => memberRoleIds.Contains(roleId)); + if (!isValid) + { + // Disable all subscriptions + await _subscriptionManager.SetSubscriptionStatusAsync(subscription.Id, Subscriptions.Models.NotificationStatusType.None); + _logger.LogInformation($"Disabled all subscriptions for user {member.Username} ({member.Id})..."); + } + } + } + + #region Discord Events + + private Task Client_Ready(DiscordClient client, ReadyEventArgs e) + { + _logger.LogInformation($"------------------------------------------"); + _logger.LogInformation($"[DISCORD] Connected."); + _logger.LogInformation($"[DISCORD] ----- Current Application"); + _logger.LogInformation($"[DISCORD] Name: {client.CurrentApplication.Name}"); + _logger.LogInformation($"[DISCORD] Description: {client.CurrentApplication.Description}"); + var owners = string.Join(", ", client.CurrentApplication.Owners.Select(owner => $"{owner.Username}#{owner.Discriminator}")); + _logger.LogInformation($"[DISCORD] Owner: {owners}"); + _logger.LogInformation($"[DISCORD] ----- Current User"); + _logger.LogInformation($"[DISCORD] Id: {client.CurrentUser.Id}"); + _logger.LogInformation($"[DISCORD] Name: {client.CurrentUser.Username}#{client.CurrentUser.Discriminator}"); + _logger.LogInformation($"[DISCORD] Email: {client.CurrentUser.Email}"); + _logger.LogInformation($"------------------------------------------"); + + return Task.CompletedTask; + } + + private async Task Client_GuildAvailable(DiscordClient client, GuildCreateEventArgs e) + { + // If guild is in configured servers list then attempt to create emojis needed + if (!_config.Instance.Servers.ContainsKey(e.Guild.Id)) + return; + + // Create default emojis + await CreateEmojisAsync(e.Guild.Id); + + // Set custom bot status if guild is in config server list, otherwise set to bot version by default + var status = _config.Instance.Servers[e.Guild.Id].Bot?.Status; + var botStatus = string.IsNullOrEmpty(status) + ? $"v{Strings.BotVersion}" + : status; + await client.UpdateStatusAsync(new DiscordActivity(botStatus, ActivityType.Playing), UserStatus.Online); + } + + private async Task Client_GuildMemberUpdated(DiscordClient client, GuildMemberUpdateEventArgs e) + { + if (!_config.Instance.Servers.ContainsKey(e.Guild.Id)) + return; + + var server = _config.Instance.Servers[e.Guild.Id]; + var donorRoleIds = server.DonorRoleIds.Keys.ToList(); + var hasBefore = e.RolesBefore.FirstOrDefault(role => donorRoleIds.Contains(role.Id)) != null; + var hasAfter = e.RolesAfter.FirstOrDefault(role => donorRoleIds.Contains(role.Id)) != null; + + // Check if donor role was removed + if (hasBefore && !hasAfter) + { + _logger.LogInformation($"Member {e.Member.Username} ({e.Member.Id}) donor role removed, removing any city roles..."); + // If so, remove all city/geofence/area roles + var areaRoles = server.Geofences.Select(geofence => geofence.Name.ToLower()); + foreach (var roleName in areaRoles) + { + var role = e.Guild.Roles.FirstOrDefault(role => role.Value.Name == roleName).Value; + if (role == null) + { + _logger.LogError($"Failed to get role by name {roleName}"); + continue; + } + await e.Member.RevokeRoleAsync(role, "No longer a supporter/donor"); + } + _logger.LogInformation($"All city roles removed from member {e.Member.Username} ({e.Member.Id})"); + } + else if (!hasBefore && hasAfter) + { + // Send thanks for becoming a donor message and include instructions to setting up subscriptions + _logger.LogInformation($"Member {e.Member.Username} ({e.Member.Id}) donor role added..."); + var eb = new DiscordEmbedBuilder + { + // TODO: Localize + Title = $"Welcome to {e.Guild?.Name} {e.Member.Username}#{e.Member.Discriminator}!", + Description = $"Thank you for joining {e.Guild?.Name}! Please look around and get familar, you can get " + + "exclusive access to Pokemon, PvP, Raids, Quests, Invasions, Lures, and Gyms by typing `$donate` in the #bot " + + "channel then following the upgrade link.\n\n" + + $"To see different city sections type `{server.Bot?.CommandPrefix}feedme city1,city2` in the #bot channel.\n" + + $"Type `{server.Bot?.CommandPrefix}help for more information.", + Footer = new DiscordEmbedBuilder.EmbedFooter + { + Text = $"{e.Guild?.Name} {DateTime.Now}", + IconUrl = e.Guild?.IconUrl, + }, + }; + await e.Member.SendMessageAsync(eb.Build()); + } + } + + /* + private async Task Client_MessageCreated(DiscordClient client, MessageCreateEventArgs e) + { + // Ignore bot messages + if (e.Author.Id == client.CurrentUser.Id || e.Author.IsBot) + return; + + // Bot not configured for guild + if (!_config.Instance.Servers.ContainsKey(e.Guild?.Id ?? 0)) + return; + + var guildConfig = _config.Instance.Servers[e.Guild.Id]; + if (guildConfig.Bot.ChannelIds.Count > 0 && !guildConfig.Bot.ChannelIds.Contains(e.Channel.Id)) + return; + + await Task.CompletedTask; + } + */ + + private async Task Client_ClientErrored(DiscordClient client, ClientErrorEventArgs e) + { + _logger.LogError(e.Exception.ToString()); + + await Task.CompletedTask; + } + + #endregion + + #region Discord Emojis + + private async Task CreateEmojisAsync(ulong guildId) + { + if (!_discordClients.ContainsKey(guildId)) + { + _logger.LogWarning($"Discord client not ready yet to create emojis for guild {guildId}"); + return; + } + + var server = _config.Instance.Servers[guildId]; + var client = _discordClients[guildId]; + // Check if bot guilds contains emoji guild id + if (!(client.Guilds?.ContainsKey(server.Bot.EmojiGuildId) ?? false)) + { + _logger.LogWarning($"Bot not in emoji server {server.Bot.EmojiGuildId}"); + return; + } + + var guild = client.Guilds[server.Bot.EmojiGuildId]; + foreach (var emoji in Strings.Defaults.EmojisList) + { + try + { + // Fetch all guild emojis + var emojis = await guild.GetEmojisAsync(); + + // Get emoji from available guild emojis by name + var emojiExists = emojis.FirstOrDefault(discordEmoji => string.Compare(discordEmoji.Name, emoji, true) == 0); + + // Check if emoji exists, if so skip + if (emojiExists != null) + continue; + + _logger.LogDebug($"Emoji {emoji} doesn't exist, creating..."); + + // Check if emoji exists at path to upload to Discord + var emojiPath = Path.Combine(Strings.EmojisFolder, emoji + ".png"); + if (!File.Exists(emojiPath)) + { + _logger.LogWarning($"Unable to find emoji file at {emojiPath}, skipping..."); + continue; + } + + // Create steam of emoji file data + using var fs = new FileStream(emojiPath, FileMode.Open, FileAccess.Read); + + // Create emoji for Discord guild + await guild.CreateEmojiAsync(emoji, fs, null, $"Missing `{emoji}` emoji."); + + _logger.LogInformation($"Emoji {emoji} created successfully."); + } + catch (Exception ex) + { + _logger.LogError(ex.ToString()); + } + } + + await CacheGuildEmojisListAsync(); + } + + private async Task CacheGuildEmojisListAsync() + { + foreach (var (guildId, serverConfig) in _config.Instance.Servers) + { + var emojiGuildId = serverConfig.Bot.EmojiGuildId; + if (!_discordClients.ContainsKey(guildId)) + continue; + + var guild = _discordClients[guildId]; + if (!guild.Guilds.ContainsKey(emojiGuildId)) + continue; + + var emojiGuild = guild.Guilds[emojiGuildId]; + var emojis = await emojiGuild.GetEmojisAsync(); + foreach (var name in Strings.Defaults.EmojisList) + { + var emoji = emojis.FirstOrDefault(emoji => string.Compare(emoji.Name, name, true) == 0); + if (emoji == null) + continue; + + if (!GameMaster.Instance.Emojis.ContainsKey(emoji.Name)) + { + GameMaster.Instance.Emojis.Add(emoji.Name, emoji.Id); + } + } + } + + _logger.LogDebug($"Cached {GameMaster.Instance.Emojis.Count:N0} emojis:"); + foreach (var (emojiName, emojiId) in GameMaster.Instance.Emojis) + { + _logger.LogDebug($"- {emojiName} ({emojiId})"); + } + + _logger.LogDebug($"Emojis overwritten by custom unicode emojis:"); + foreach (var (emojiName, emojiUnicode) in GameMaster.Instance.CustomEmojis) + { + if (string.IsNullOrEmpty(emojiUnicode)) + continue; + + _logger.LogDebug($"- {emojiName} ({emojiUnicode})"); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Discord/IDiscordClientService.cs b/src/Services/Discord/IDiscordClientService.cs new file mode 100644 index 00000000..514f01ff --- /dev/null +++ b/src/Services/Discord/IDiscordClientService.cs @@ -0,0 +1,18 @@ +namespace WhMgr.Services.Discord +{ + using System.Collections.Generic; + using System.Threading.Tasks; + + using DSharpPlus; + + public interface IDiscordClientService + { + IReadOnlyDictionary DiscordClients { get; } + + bool Initialized { get; } + + Task Start(); + + Task Stop(); + } +} \ No newline at end of file diff --git a/src/Services/Discord/Models/DiscordEmbedAuthor.cs b/src/Services/Discord/Models/DiscordEmbedAuthor.cs new file mode 100644 index 00000000..794c0c2d --- /dev/null +++ b/src/Services/Discord/Models/DiscordEmbedAuthor.cs @@ -0,0 +1,13 @@ +namespace WhMgr.Services.Discord.Models +{ + using System.Text.Json.Serialization; + + public class DiscordEmbedAuthor + { + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("icon_url")] + public string IconUrl { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Discord/Models/DiscordEmbedFooter.cs b/src/Services/Discord/Models/DiscordEmbedFooter.cs new file mode 100644 index 00000000..56440f37 --- /dev/null +++ b/src/Services/Discord/Models/DiscordEmbedFooter.cs @@ -0,0 +1,13 @@ +namespace WhMgr.Services.Discord.Models +{ + using System.Text.Json.Serialization; + + public class DiscordEmbedFooter + { + [JsonPropertyName("text")] + public string Text { get; set; } + + [JsonPropertyName("icon_url")] + public string IconUrl { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Discord/Models/DiscordEmbedImage.cs b/src/Services/Discord/Models/DiscordEmbedImage.cs new file mode 100644 index 00000000..dd5c45f4 --- /dev/null +++ b/src/Services/Discord/Models/DiscordEmbedImage.cs @@ -0,0 +1,10 @@ +namespace WhMgr.Services.Discord.Models +{ + using System.Text.Json.Serialization; + + public class DiscordEmbedImage + { + [JsonPropertyName("url")] + public string Url { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Discord/Models/DiscordEmbedMessage.cs b/src/Services/Discord/Models/DiscordEmbedMessage.cs new file mode 100644 index 00000000..c4e1efe2 --- /dev/null +++ b/src/Services/Discord/Models/DiscordEmbedMessage.cs @@ -0,0 +1,32 @@ +namespace WhMgr.Services.Discord.Models +{ + using System.Collections.Generic; + using System.Text.Json.Serialization; + + public class DiscordEmbedMessage : DiscordEmbedImage + { + [JsonPropertyName("title")] + public string Title { get; set; } + + [JsonPropertyName("description")] + public string Description { get; set; } + + [JsonPropertyName("color")] + public int Color { get; set; } + + [JsonPropertyName("author")] + public DiscordEmbedAuthor Author { get; set; } + + [JsonPropertyName("fields")] + public List Fields { get; set; } = new(); + + [JsonPropertyName("footer")] + public DiscordEmbedFooter Footer { get; set; } + + [JsonPropertyName("thumbnail")] + public DiscordEmbedImage Thumbnail { get; set; } + + [JsonPropertyName("image")] + public DiscordEmbedImage Image { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Discord/Models/DiscordField.cs b/src/Services/Discord/Models/DiscordField.cs new file mode 100644 index 00000000..a6371526 --- /dev/null +++ b/src/Services/Discord/Models/DiscordField.cs @@ -0,0 +1,16 @@ +namespace WhMgr.Services.Discord.Models +{ + using System.Text.Json.Serialization; + + public class DiscordField + { + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("value")] + public string Value { get; set; } + + [JsonPropertyName("inline")] + public bool Inline { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Discord/Models/DiscordWebhookMessage.cs b/src/Services/Discord/Models/DiscordWebhookMessage.cs new file mode 100644 index 00000000..779cd0ad --- /dev/null +++ b/src/Services/Discord/Models/DiscordWebhookMessage.cs @@ -0,0 +1,37 @@ +namespace WhMgr.Services.Discord.Models +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + + using WhMgr.Extensions; + + public class DiscordWebhookMessage + { + [JsonPropertyName("content")] + public string Content { get; set; } + + [JsonPropertyName("username")] + public string Username { get; set; } + + [JsonPropertyName("avatar_url")] + public string AvatarUrl { get; set; } + + [JsonPropertyName("embeds")] + public List Embeds { get; set; } + + [JsonIgnore] + public bool HasEmbeds => Embeds?.Count > 0; + + public DiscordWebhookMessage() + { + Embeds = new List(); + } + + public string Build() + { + var json = this.ToJson(); + return json; + } + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Coordinate.cs b/src/Services/Geofence/Coordinate.cs new file mode 100644 index 00000000..0d554cb7 --- /dev/null +++ b/src/Services/Geofence/Coordinate.cs @@ -0,0 +1,49 @@ +namespace WhMgr.Services.Geofence +{ + using System.Text.Json.Serialization; + + using NetTopologySuite.Geometries; + using NetTopCoordinate = NetTopologySuite.Geometries.Coordinate; + + using WhMgr.Services.Webhook.Models; + + public class Coordinate + { + [JsonPropertyName("lat")] + public double Latitude { get; set; } + + [JsonPropertyName("lon")] + public double Longitude { get; set; } + + public Coordinate(double lat, double lon) + { + Latitude = lat; + Longitude = lon; + } + + public Coordinate(IWebhookPoint location) + { + Latitude = location.Latitude; + Longitude = location.Longitude; + } + + /// + /// Returns the string representation of class + /// + /// + public override string ToString() + { + return $"{Latitude},{Longitude}"; + } + + #region Operator Overrides + + public static implicit operator NetTopCoordinate(Coordinate location) => + new(location.Longitude, location.Latitude); + + public static implicit operator Point(Coordinate location) => + new(location.Longitude, location.Latitude); + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Geocoding/Cache/AddressMemoryCache.cs b/src/Services/Geofence/Geocoding/Cache/AddressMemoryCache.cs new file mode 100644 index 00000000..412a16c7 --- /dev/null +++ b/src/Services/Geofence/Geocoding/Cache/AddressMemoryCache.cs @@ -0,0 +1,8 @@ +namespace WhMgr.Services.Geofence.Geocoding.Cache +{ + using System.Collections.Generic; + + public class AddressMemoryCache : Dictionary<(double, double), string> + { + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Geocoding/Google/Geometry/GoogleCoordinate.cs b/src/Services/Geofence/Geocoding/Google/Geometry/GoogleCoordinate.cs new file mode 100644 index 00000000..5da63343 --- /dev/null +++ b/src/Services/Geofence/Geocoding/Google/Geometry/GoogleCoordinate.cs @@ -0,0 +1,13 @@ +namespace WhMgr.Services.Geofence.Geocoding.Google.Geometry +{ + using System.Text.Json.Serialization; + + public class GoogleCoordinate + { + [JsonPropertyName("lat")] + public double Latitude { get; set; } + + [JsonPropertyName("lng")] + public double Longitude { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Geocoding/Google/Geometry/GoogleGeometry.cs b/src/Services/Geofence/Geocoding/Google/Geometry/GoogleGeometry.cs new file mode 100644 index 00000000..c27521b6 --- /dev/null +++ b/src/Services/Geofence/Geocoding/Google/Geometry/GoogleGeometry.cs @@ -0,0 +1,19 @@ +namespace WhMgr.Services.Geofence.Geocoding.Google.Geometry +{ + using System.Text.Json.Serialization; + + public class GoogleGeometry + { + [JsonPropertyName("bounds")] + public GoogleGeometryBounds Bounds { get; set; } + + [JsonPropertyName("location")] + public GoogleCoordinate Location { get; set; } + + [JsonPropertyName("location_type")] + public string LocationType { get; set; } + + [JsonPropertyName("viewport")] + public GoogleGeometryBounds ViewPort { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Geocoding/Google/Geometry/GoogleGeometryBounds.cs b/src/Services/Geofence/Geocoding/Google/Geometry/GoogleGeometryBounds.cs new file mode 100644 index 00000000..485bc766 --- /dev/null +++ b/src/Services/Geofence/Geocoding/Google/Geometry/GoogleGeometryBounds.cs @@ -0,0 +1,13 @@ +namespace WhMgr.Services.Geofence.Geocoding.Google.Geometry +{ + using System.Text.Json.Serialization; + + public class GoogleGeometryBounds + { + [JsonPropertyName("northeast")] + public GoogleCoordinate NorthEast { get; set; } + + [JsonPropertyName("southwest")] + public GoogleCoordinate SouthWest { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Geocoding/Google/GoogleAddressComponent.cs b/src/Services/Geofence/Geocoding/Google/GoogleAddressComponent.cs new file mode 100644 index 00000000..868c64ce --- /dev/null +++ b/src/Services/Geofence/Geocoding/Google/GoogleAddressComponent.cs @@ -0,0 +1,18 @@ +namespace WhMgr.Services.Geofence.Geocoding.Google +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + + public class GoogleAddressComponent + { + [JsonPropertyName("long_name")] + public string LongName { get; set; } + + [JsonPropertyName("short_name")] + public string ShortName { get; set; } + + [JsonPropertyName("types")] + public List Types { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Geocoding/Google/GoogleAddressResult.cs b/src/Services/Geofence/Geocoding/Google/GoogleAddressResult.cs new file mode 100644 index 00000000..ba68340f --- /dev/null +++ b/src/Services/Geofence/Geocoding/Google/GoogleAddressResult.cs @@ -0,0 +1,26 @@ +namespace WhMgr.Services.Geofence.Geocoding.Google +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + + using WhMgr.Services.Geofence.Geocoding.Google.Geometry; + + public class GoogleAddressResult + { + [JsonPropertyName("address_components")] + public List AddressComponents { get; set; } + + [JsonPropertyName("formatted_address")] + public string FormattedAddress { get; set; } + + [JsonPropertyName("geometry")] + public GoogleGeometry Geometry { get; set; } + + [JsonPropertyName("place_id")] + public string PlaceId { get; set; } + + [JsonPropertyName("types")] + public List Types { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Geocoding/Google/GoogleReverseLookup.cs b/src/Services/Geofence/Geocoding/Google/GoogleReverseLookup.cs new file mode 100644 index 00000000..49df66ea --- /dev/null +++ b/src/Services/Geofence/Geocoding/Google/GoogleReverseLookup.cs @@ -0,0 +1,17 @@ +namespace WhMgr.Services.Geofence.Geocoding.Google +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + + // TODO: Add more Google entity models? + // https://github.com/Necrobot-Private/NecroBot/tree/master/PoGo.NecroBot.Logic/Model/Google/GoogleObjects + public class GoogleReverseLookup + { + [JsonPropertyName("results")] + public List Results { get; set; } + + [JsonPropertyName("status")] + public string Status { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Geocoding/IReverseGeocodingLookup.cs b/src/Services/Geofence/Geocoding/IReverseGeocodingLookup.cs new file mode 100644 index 00000000..2c22d078 --- /dev/null +++ b/src/Services/Geofence/Geocoding/IReverseGeocodingLookup.cs @@ -0,0 +1,9 @@ +namespace WhMgr.Services.Geofence.Geocoding +{ + using System.Threading.Tasks; + + public interface IReverseGeocodingLookup + { + Task GetAddressAsync(Coordinate coord); + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Geocoding/Nominatim/NominatimAddress.cs b/src/Services/Geofence/Geocoding/Nominatim/NominatimAddress.cs new file mode 100644 index 00000000..1836b43f --- /dev/null +++ b/src/Services/Geofence/Geocoding/Nominatim/NominatimAddress.cs @@ -0,0 +1,43 @@ +namespace WhMgr.Services.Geofence.Geocoding.Nominatim +{ + using System.Text.Json.Serialization; + + /// + /// NominatimAddress class + /// + public partial class NominatimAddress + { + [JsonPropertyName("house_number")] + public string HouseNumber { get; set; } + + [JsonPropertyName("road")] + public string Road { get; set; } + + [JsonPropertyName("neighbourhood")] + public string Neighbourhood { get; set; } + + [JsonPropertyName("suburb")] + public string Suburb { get; set; } + + [JsonPropertyName("town")] + public string Town { set { City = value; } } + + [JsonPropertyName("city")] + public string City { get; set; } + + [JsonPropertyName("county")] + public string County { get; set; } + + [JsonPropertyName("state")] + public string State { get; set; } + + [JsonPropertyName("postcode")] + public string Postcode { get; set; } + + [JsonPropertyName("country")] + public string Country { get; set; } + + [JsonPropertyName("country_code")] + public string CountryCode { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Geocoding/Nominatim/NominatimReverseLookup.cs b/src/Services/Geofence/Geocoding/Nominatim/NominatimReverseLookup.cs new file mode 100644 index 00000000..f369d1fc --- /dev/null +++ b/src/Services/Geofence/Geocoding/Nominatim/NominatimReverseLookup.cs @@ -0,0 +1,55 @@ +namespace WhMgr.Services.Geofence.Geocoding.Nominatim +{ + using System.Text.Json.Serialization; + + /// + /// NominatimReverseLookup class + /// + public partial class NominatimReverseLookup + { + [JsonPropertyName("place_id")] + public long PlaceId { get; set; } + + [JsonPropertyName("licence")] + public string Licence { get; set; } + + [JsonPropertyName("osm_type")] + public string OsmType { get; set; } + + [JsonPropertyName("osm_id")] + public long OsmId { get; set; } + + [JsonPropertyName("lat")] + public string Latitude { get; set; } + + [JsonPropertyName("lon")] + public string Longitude { get; set; } + + [JsonPropertyName("place_rank")] + public long PlaceRank { get; set; } + + [JsonPropertyName("category")] + public string Category { get; set; } + + [JsonPropertyName("type")] + public string Type { get; set; } + + [JsonPropertyName("importance")] + public double Importance { get; set; } + + [JsonPropertyName("addresstype")] + public string AddressType { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("display_name")] + public string DisplayName { get; set; } + + [JsonPropertyName("address")] + public NominatimAddress Address { get; set; } + + [JsonPropertyName("boundingbox")] + public string[] BoundingBox { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Geofence/Geocoding/ReverseGeocodingLookup.cs b/src/Services/Geofence/Geocoding/ReverseGeocodingLookup.cs new file mode 100644 index 00000000..473e4993 --- /dev/null +++ b/src/Services/Geofence/Geocoding/ReverseGeocodingLookup.cs @@ -0,0 +1,283 @@ +namespace WhMgr.Services.Geofence.Geocoding +{ + using System; + using System.IO; + using System.Net.Http; + using System.Text; + using System.Threading.Tasks; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Services.Geofence.Geocoding.Cache; + using WhMgr.Services.Geofence.Geocoding.Google; + using WhMgr.Services.Geofence.Geocoding.Nominatim; + + public class ReverseGeocodingLookup : IReverseGeocodingLookup + { + // TODO: Rename to .cache + private const string CacheFolder = "cache"; + + private static readonly AddressMemoryCache _cache = new(); + private static IReverseGeocodingLookup _instance; + + #region Properties + + /// + /// Gets a singleton instance of + /// + public static IReverseGeocodingLookup Instance => + _instance ??= new ReverseGeocodingLookup(Startup.Config.ReverseGeocoding); + + /// + /// Gets or sets a value used for configuring reverse geocoding lookups. + /// + public ReverseGeocodingConfig Config { get; set; } + + #endregion + + public ReverseGeocodingLookup(ReverseGeocodingConfig config) + { + Config = config; + } + + #region Public Methods + + /// + /// Returns the location address from reverse geocoding lookup from geocoordinates. + /// + /// + /// + public async Task GetAddressAsync(Coordinate coord) + { + return Config.Provider switch + { + ReverseGeocodingProvider.GMaps => await GetGoogleAddress(coord), + ReverseGeocodingProvider.Osm => await GetNominatimAddress(coord), + _ => null, + }; + } + + #endregion + + + + /// + /// Queries OpenStreetMaps Nominatim geolocation lookup endpoint + /// + /// Latitude and longitude coordinates + /// + /// + private async Task GetNominatimAddress(Coordinate coord, string format = "jsonv2") + { + if (string.IsNullOrEmpty(Config.Nominatim?.Endpoint)) + { + return null; + } + + var key = (coord.Latitude, coord.Longitude); + NominatimReverseLookup data = null; + if (Config.CacheToDisk) + { + data = LoadFromDisk(key); + } + else + { + if (_cache.ContainsKey(key)) + { + return _cache[key]; + } + } + + if (data == null) + { + var sb = new StringBuilder(); + sb.Append(Config.Nominatim.Endpoint); + sb.Append("/reverse"); + sb.Append($"?format={format}"); + sb.Append($"&lat={coord.Latitude}"); + sb.Append($"&lon={coord.Longitude}"); + var url = sb.ToString(); + try + { + var json = await GetData(url); + var obj = json.FromJson(); + if (obj == null) + { + return null; + } + data = obj; + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex}"); + } + } + + var parsedAddress = TemplateRenderer.Parse(Config.Nominatim?.Schema, data); + if (Config.CacheToDisk) + { + if (data != null) + { + SaveToDisk(key, data); + } + } + else + { + if (!_cache.ContainsKey(key)) + { + _cache.Add(key, parsedAddress); + } + } + return parsedAddress; + } + + /// + /// Queries Google Maps geolocation lookup endpoint + /// + /// Geofence specific city to associate with the returned address + /// Latitude to lookup + /// Longitude to lookup + /// Google Maps key + /// + private async Task GetGoogleAddress(Coordinate coord) + { + if (string.IsNullOrEmpty(Config.GoogleMaps?.Key)) + { + return null; + } + + var key = (coord.Latitude, coord.Longitude); + GoogleReverseLookup data = null; + if (Config.CacheToDisk) + { + data = LoadFromDisk(key); + } + else + { + if (_cache.ContainsKey(key)) + { + return _cache[key]; + } + } + + if (data == null) + { + var sb = new StringBuilder(); + sb.Append(Strings.GoogleMapsReverseGeocodingApiUrl); + sb.Append($"?latlng={coord.ToString()}"); + sb.Append("&sensor=true"); + sb.Append($"&key={Config.GoogleMaps.Key}"); + var url = sb.ToString(); + try + { + var json = await GetData(url); + var obj = json.FromJson(); + if (string.Compare(obj.Status, "OK", true) != 0) + return null; + + data = obj; + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex}"); + } + } + + var parsedAddress = TemplateRenderer.Parse(Config.GoogleMaps?.Schema, data); + if (Config.CacheToDisk) + { + if (data != null) + { + SaveToDisk(key, data); + } + } + else + { + if (!_cache.ContainsKey(key)) + { + _cache.Add(key, parsedAddress); + } + } + return parsedAddress; + } + + /// + /// Get raw json data from HTTP GET request to provided url address + /// + /// Url address + /// Returns json string of HTTP request + private static async Task GetData(string url) + { + try + { + using var client = new HttpClient(); + client.DefaultRequestHeaders.Add("UserAgent", $"{Strings.BotName} v{Strings.BotVersion}"); + var responseData = await client.GetStringAsync(url); + return responseData; + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex}"); + } + return null; + } + + #region Caching Methods + + private static string GetProviderCacheFolderName(ReverseGeocodingProvider provider) + { + return provider switch + { + ReverseGeocodingProvider.GMaps => "gmaps", + ReverseGeocodingProvider.Osm => "osm", + _ => null, + }; + } + + private void SaveToDisk((double, double) key, T data) + { + var (lat, lon) = key; + var fileName = $"{lat},{lon}.json"; + var providerFolder = Path.Combine( + CacheFolder, + GetProviderCacheFolderName(Config.Provider) + ); + + // Create cache folder for provider if it does not exist + if (!Directory.Exists(providerFolder)) + { + Directory.CreateDirectory(providerFolder); + } + + // Write and serialize address data to disk if cache file does not exist + var filePath = Path.Combine(providerFolder, fileName); + if (!File.Exists(filePath)) + { + var json = data.ToJson(); + using var sw = new StreamWriter(filePath, false, Encoding.UTF8, ushort.MaxValue); + sw.WriteLine(json); + } + } + + private T LoadFromDisk((double, double) key) + { + var (lat, lon) = key; + var fileName = $"{lat},{lon}.json"; + var providerFolder = Path.Combine( + CacheFolder, + GetProviderCacheFolderName(Config.Provider) + ); + + // Read and deserialize address data from disk if cache file exists + var filePath = Path.Combine(providerFolder, fileName); + if (!File.Exists(filePath)) + return default; + + using var sr = new StreamReader(filePath, Encoding.UTF8); + var json = sr.ReadToEnd(); + return json.FromJson(); + } + + #endregion + } +} diff --git a/src/Services/Geofence/Geocoding/ReverseGeocodingProvider.cs b/src/Services/Geofence/Geocoding/ReverseGeocodingProvider.cs new file mode 100644 index 00000000..e094e1a7 --- /dev/null +++ b/src/Services/Geofence/Geocoding/ReverseGeocodingProvider.cs @@ -0,0 +1,11 @@ +namespace WhMgr.Services.Geofence.Geocoding +{ + using System.Text.Json.Serialization; + + [JsonConverter(typeof(JsonStringEnumConverter))] + public enum ReverseGeocodingProvider + { + Osm, // OpenStreetMap, + GMaps, // GoogleMaps, + } +} \ No newline at end of file diff --git a/src/Geofence/GeofenceItem.cs b/src/Services/Geofence/Geofence.cs similarity index 79% rename from src/Geofence/GeofenceItem.cs rename to src/Services/Geofence/Geofence.cs index 37dab80b..f8b2b7b8 100644 --- a/src/Geofence/GeofenceItem.cs +++ b/src/Services/Geofence/Geofence.cs @@ -1,20 +1,16 @@ -using NetTopologySuite.Features; -using NetTopologySuite.Geometries; -using NetTopologySuite.IO; -using Newtonsoft.Json; -using WhMgr.Utilities; - -namespace WhMgr.Geofence +namespace WhMgr.Services.Geofence { using System; using System.Collections.Generic; - using System.Linq; using System.IO; + using System.Linq; + using System.Text.Json; + + using NetTopologySuite.Features; + using NetTopologySuite.Geometries; + using NetTopologySuite.IO; - /// - /// Geofence class - /// - public class GeofenceItem + public class Geofence { private const string DefaultName = "Unnamed"; @@ -24,7 +20,7 @@ public class GeofenceItem /// Gets or sets the name of the geofence /// public string Name { get; set; } - + /// /// The filename from which this geofence originated /// @@ -34,7 +30,7 @@ public class GeofenceItem /// Gets the FeatureCollection containing the geometry which represents this geofence /// public IFeature Feature { get; } - + /// /// Gets the geometry representing the smallest possible bounding box which contains all points of this geofence /// @@ -54,7 +50,7 @@ public class GeofenceItem /// Instantiates a new class by name /// /// Name of geofence - public GeofenceItem(string name = default) + public Geofence(string name = default) { Name = name ?? DefaultName; Priority = 0; @@ -66,7 +62,7 @@ public GeofenceItem(string name = default) /// Instantiates a new class from a GeoJSON feature. /// If the feature has a "name" attribute, this geofence's name will be set from that. /// - public GeofenceItem(IFeature feature) + public Geofence(IFeature feature) { Name = feature.Attributes["name"]?.ToString() ?? DefaultName; Feature = feature; @@ -87,9 +83,9 @@ public GeofenceItem(IFeature feature) /// /// Name of geofence /// Location polygons of geofence - public GeofenceItem(string name, List coordinates) : this(name) + public Geofence(string name, List coordinates) : this(name) { - Feature = GeoUtils.LocationsToFeature(coordinates); + Feature = GeometryUtils.CoordinatesToFeature(coordinates); BBox = Feature.Geometry.Envelope; } @@ -97,7 +93,7 @@ public GeofenceItem(string name, List coordinates) : this(name) #region Static Methods - public static List FromFile(string filePath) + public static List FromFile(string filePath) { if (Path.GetExtension(filePath).Equals(".json", StringComparison.OrdinalIgnoreCase)) return FromJsonFile(filePath); @@ -105,23 +101,20 @@ public static List FromFile(string filePath) return FromIniFile(filePath); } - private static List FromJsonFile(string filePath) + private static List FromJsonFile(string filePath) { FeatureCollection featureCollection; - // Read the JSON from the file and deserialize it into a GeoJSON FeatureCollection var jsonText = File.ReadAllText(filePath); - var serializer = GeoJsonSerializer.Create(); - - using (var stringReader = new StringReader(jsonText)) - using (var jsonReader = new JsonTextReader(stringReader)) - featureCollection = serializer.Deserialize(jsonReader); + var reader = new GeoJsonReader(); + featureCollection = reader.Read(jsonText); if (featureCollection == null) throw new JsonException($"Geofence file \"{filePath}\" contained invalid JSON or the JSON did not represent a FeatureCollection"); // Turn each Feature in the FeatureCollection into a GeofenceItem - return featureCollection.Select(feature => new GeofenceItem(feature) { + return featureCollection.Select(feature => new Geofence(feature) + { Filename = Path.GetFileName(filePath) }).ToList(); } @@ -131,12 +124,12 @@ private static List FromJsonFile(string filePath) /// /// File path of geofence to load /// Returns a geofence object of the file path - private static List FromIniFile(string filePath) + private static List FromIniFile(string filePath) { - var list = new List(); + var list = new List(); // Read all lines of the file and remove all null, empty, or whitespace lines var lines = File.ReadAllLines(filePath).Where(line => !string.IsNullOrWhiteSpace(line)).ToArray(); - var locations = new List(); + var locations = new List(); string name = ""; // Loop through each new line of the file @@ -159,7 +152,7 @@ private static List FromIniFile(string filePath) if (!double.TryParse(coordinates[1], out var lng)) continue; - locations.Add(new Location(lat, lng)); + locations.Add(new Coordinate(lat, lng)); // If we have reached the end of the file or the start of another // geofence, add the current to the list of geofences @@ -167,13 +160,14 @@ private static List FromIniFile(string filePath) if (isEnd) { - var geofence = new GeofenceItem(name, locations) { + var geofence = new Geofence(name, locations) + { Filename = Path.GetFileName(filePath) }; list.Add(geofence); name = ""; - locations = new List(); + locations = new List(); } } diff --git a/src/Geofence/GeofenceService.cs b/src/Services/Geofence/GeofenceService.cs similarity index 70% rename from src/Geofence/GeofenceService.cs rename to src/Services/Geofence/GeofenceService.cs index 90e5aa46..dbcaa164 100644 --- a/src/Geofence/GeofenceService.cs +++ b/src/Services/Geofence/GeofenceService.cs @@ -1,11 +1,11 @@ -namespace WhMgr.Geofence +namespace WhMgr.Services.Geofence { using System.Collections.Generic; using System.Linq; - public static class GeofenceService + public class GeofenceService : IGeofenceService { - public static IEnumerable GetGeofences(IEnumerable geofences, Location point) + public static IEnumerable GetGeofences(IEnumerable geofences, Coordinate point) { // Order descending by priority so that when we iterate forwards using FirstOrDefault, higher-priority // geofences are discovered first. Filters initially by bounding box (which is very fast) and then by @@ -16,7 +16,7 @@ public static IEnumerable GetGeofences(IEnumerable g return possibleContaining.Where(g => g.Feature.Geometry.Contains(point)); } - public static GeofenceItem GetGeofence(IEnumerable geofences, Location point) + public static Geofence GetGeofence(IEnumerable geofences, Coordinate point) => GetGeofences(geofences, point).FirstOrDefault(); } } \ No newline at end of file diff --git a/src/Utilities/GeoUtils.cs b/src/Services/Geofence/GeometryUtils.cs similarity index 53% rename from src/Utilities/GeoUtils.cs rename to src/Services/Geofence/GeometryUtils.cs index 853d603f..2e756774 100644 --- a/src/Utilities/GeoUtils.cs +++ b/src/Services/Geofence/GeometryUtils.cs @@ -1,23 +1,24 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using NetTopologySuite.Features; -using NetTopologySuite.Geometries; -using Location = WhMgr.Geofence.Location; - -namespace WhMgr.Utilities +namespace WhMgr.Services.Geofence { - public class GeoUtils + using System; + using System.Collections.Generic; + using System.Linq; + + using NetTopologySuite.Features; + using NetTopologySuite.Geometries; + using NetTopCoordinate = NetTopologySuite.Geometries.Coordinate; + + public class GeometryUtils { /// - /// Creates a Feature containing a Polygon created using the provided Locations + /// Creates a Feature containing a Polygon created using the provided Coordinates /// - public static Feature LocationsToFeature(IEnumerable locations, IAttributesTable attributes = default) + public static Feature CoordinatesToFeature(IEnumerable coordinates, IAttributesTable attributes = default) { - var coordinateList = locations.Select(c => (Coordinate) c).ToList(); + var coordinateList = coordinates.Select(c => (NetTopCoordinate)c).ToList(); - if (coordinateList.Count < 3) - throw new ArgumentException("At least three locations are required", nameof(locations)); + if (coordinateList?.Count < 3) + throw new ArgumentException("At least three locations are required", nameof(coordinates)); if (!coordinateList.First().Equals2D(coordinateList.Last(), double.Epsilon)) // A closed linear ring requires the same point at the start and end of the list diff --git a/src/Services/Geofence/IGeofenceService.cs b/src/Services/Geofence/IGeofenceService.cs new file mode 100644 index 00000000..040acef6 --- /dev/null +++ b/src/Services/Geofence/IGeofenceService.cs @@ -0,0 +1,6 @@ +namespace WhMgr.Services.Geofence +{ + public interface IGeofenceService + { + } +} \ No newline at end of file diff --git a/src/Services/IconFetcher.cs b/src/Services/IconFetcher.cs deleted file mode 100644 index 1d4a6246..00000000 --- a/src/Services/IconFetcher.cs +++ /dev/null @@ -1,181 +0,0 @@ -namespace WhMgr.Services -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Text; - - using Newtonsoft.Json; - using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; - using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; - using QuestRewardType = POGOProtos.Rpc.QuestRewardProto.Types.Type; - using WeatherCondition = POGOProtos.Rpc.GameplayWeatherProto.Types.WeatherCondition; - using ServiceStack; - - using WhMgr.Net.Models; - using WhMgr.Utilities; - - class IconFetcher - { - private static readonly IconSet _availablePokemonForms = new IconSet(); - private static IReadOnlyDictionary _iconStyles; - - #region Singleton - - private static IconFetcher _instance; - - public static IconFetcher Instance - { - get - { - if (_instance == null) - { - _instance = new IconFetcher(); - } - return _instance; - } - } - - #endregion - - public string GetPokemonIcon(string style, uint pokemonId, int form = 0, int evolution = 0, Gender gender = Gender.Unset, int costume = 0, bool shiny = false) - { - if (!_availablePokemonForms.ContainsKey(style)) - { - return _iconStyles[style] + "pokemon/0.png"; // Substitute Pokemon - } - var evolutionSuffixes = (evolution > 0 ? new [] { "-e" + evolution, string.Empty } : new [] { string.Empty }).ToList(); - var formSuffixes = (form > 0 ? new [] { "-f" + form, string.Empty } : new [] { string.Empty }).ToList(); - var costumeSuffixes = (costume > 0 ? new [] { "-c" + costume, string.Empty } : new [] { string.Empty }).ToList(); - var genderSuffixes = (gender > 0 ? new [] { "-g" + (int)gender, string.Empty } : new [] { string.Empty }).ToList(); - var shinySuffixes = (shiny ? new [] { "-shiny", string.Empty } : new [] { string.Empty }).ToList(); - foreach (var evolutionSuffix in evolutionSuffixes) - { - foreach (var formSuffix in formSuffixes) - { - foreach (var costumeSuffix in costumeSuffixes) - { - foreach (var genderSuffix in genderSuffixes) - { - foreach (var shinySuffix in shinySuffixes) - { - var result = $"{pokemonId}{evolutionSuffix}{formSuffix}{costumeSuffix}{genderSuffix}{shinySuffix}"; - if (_availablePokemonForms[style].Contains(result)) - { - return _iconStyles[style] + $"pokemon/{result}.png"; - } - } - } - } - } - } - return _iconStyles[style] + "pokemon/0.png"; // Substitute Pokemon - } - - public string GetRaidEggIcon(string style, int level, bool hatched = false, bool ex = false) - { - var sb = new StringBuilder(); - sb.Append("raid/"); - sb.Append(level); - if (hatched) sb.Append("-hatched"); - if (ex) sb.Append("-ex"); - sb.Append(".png"); - return _iconStyles[style] + sb.ToString(); - } - - public string GetQuestIcon(string style, QuestData quest) - { - var sb = new StringBuilder(); - sb.Append("reward/"); - var questRewardType = quest.Rewards[0].Type; - switch (questRewardType) - { - case QuestRewardType.Candy: - case QuestRewardType.Item: - sb.Append((int)questRewardType); - sb.Append("-i"); - sb.Append((int)quest.Rewards[0].Info.Item); - sb.Append("-a"); - sb.Append(quest.Rewards?[0]?.Info?.Amount ?? 1); - sb.Append(".png"); - break; - case QuestRewardType.PokemonEncounter: - return Instance.GetPokemonIcon - ( - style, - quest.IsDitto ? 132 : quest.Rewards[0].Info.PokemonId, - quest.Rewards?[0].Info.FormId ?? 0, - 0, //quest.Rewards?[0].Info.EvolutionId ?? 0, - Gender.Unset, - quest.Rewards?[0].Info.CostumeId ?? 0, - quest.Rewards?[0].Info.Shiny ?? false - ); - case QuestRewardType.Stardust: - sb.Append((int)questRewardType); - sb.Append("-a"); - sb.Append(quest.Rewards[0].Info.Amount); - sb.Append(".png"); - break; - case QuestRewardType.AvatarClothing: - case QuestRewardType.Experience: - case QuestRewardType.Quest: - sb.Append((int)questRewardType); - sb.Append(".png"); - break; - case QuestRewardType.Unset: - default: - return null; - } - return _iconStyles[style] + sb.ToString(); - } - - public string GetLureIcon(string style, PokestopLureType lureType) - { - return _iconStyles[style] + "reward/2-i" + (int)lureType + "-a1.png"; - } - - public string GetInvasionIcon(string style, InvasionCharacter gruntType) - { - return _iconStyles[style] + "invasion/" + (int)gruntType + ".png"; - } - - public string GetWeatherIcon(string style, WeatherCondition weatherType) - { - return _iconStyles[style] + "weather/" + (int)weatherType + ".png"; - } - - public void SetIconStyles(IReadOnlyDictionary iconStyles) - { - _iconStyles = iconStyles; - BuildAvailableFormsLists(); - } - - private void BuildAvailableFormsLists() - { - // Get available forms from remote icons repo to build form list for each icon style - foreach (var style in _iconStyles) - { - // Check if style already checked, if so skip - if (_availablePokemonForms.ContainsKey(style.Key)) - continue; - - // Get the remote form index file from the icon repository - var formsListJson = NetUtil.Get(style.Value + "pokemon/index.json"); - if (string.IsNullOrEmpty(formsListJson)) - { - // Failed to get form list, add empty form set and skip to the next style - _availablePokemonForms.Add(style.Key, new HashSet()); - continue; - } - // Deserialize json list to hash set - var formsList = JsonConvert.DeserializeObject>(formsListJson); - // Add style and form list - _availablePokemonForms.Add(style.Key, formsList); - } - } - } - - class IconSet : Dictionary> - { - } -} \ No newline at end of file diff --git a/src/Services/Icons/IUIconService.cs b/src/Services/Icons/IUIconService.cs new file mode 100644 index 00000000..7aa970d9 --- /dev/null +++ b/src/Services/Icons/IUIconService.cs @@ -0,0 +1,36 @@ +namespace WhMgr.Services.Icons +{ + using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + using QuestRewardType = POGOProtos.Rpc.QuestRewardProto.Types.Type; + + using WhMgr.Common; + using WhMgr.Services.Webhook.Models; + + public interface IUIconService + { + string GetPokemonIcon(string style, uint pokemonId, uint formId = 0, uint evolutionId = 0, Gender gender = 0, uint costumeId = 0, bool shiny = false); + + string GetTypeIcon(string style, PokemonType type); + + string GetPokestopIcon(string style, PokestopLureType lure, bool invasionActive = false, bool questActive = false, bool ar = false); + + string GetRewardIcon(string style, QuestRewardType rewardType, uint id = 0, uint amount = 0); + + string GetRewardIcon(string style, QuestData quest); + + string GetInvasionIcon(string style, InvasionCharacter gruntType); + + string GetGymIcon(string style, PokemonTeam team = PokemonTeam.Neutral, uint trainerCount = 0, bool inBattle = false, bool ex = false, bool ar = false); + + string GetEggIcon(string style, uint level, bool hatched = false, bool ex = false); + + string GetTeamIcon(string style, PokemonTeam team = PokemonTeam.Neutral); + + string GetWeatherIcon(string style, WeatherCondition weatherCondition); + + string GetNestIcon(string style, PokemonType type); + + string GetMiscellaneousIcon(string style, string fileName); + } +} \ No newline at end of file diff --git a/src/Services/Icons/IconStyleCollection.cs b/src/Services/Icons/IconStyleCollection.cs new file mode 100644 index 00000000..db387c13 --- /dev/null +++ b/src/Services/Icons/IconStyleCollection.cs @@ -0,0 +1,10 @@ +namespace WhMgr.Services.Icons +{ + using System.Collections.Generic; + + using WhMgr.Configuration; + + public class IconStyleCollection : Dictionary> + { + } +} \ No newline at end of file diff --git a/src/Services/Icons/IconType.cs b/src/Services/Icons/IconType.cs new file mode 100644 index 00000000..0d8cd160 --- /dev/null +++ b/src/Services/Icons/IconType.cs @@ -0,0 +1,22 @@ +namespace WhMgr.Services.Icons +{ + using System.Text.Json.Serialization; + + [JsonConverter(typeof(JsonStringEnumConverter))] + public enum IconType + { + Base = 0, + Pokemon, + Raid, + Egg, + Gym, + Pokestop, + Reward, + Invasion, + Type, + Nest, + Team, + Weather, + Misc, + } +} \ No newline at end of file diff --git a/src/Services/Icons/Models/BaseIndexManifest.cs b/src/Services/Icons/Models/BaseIndexManifest.cs new file mode 100644 index 00000000..453c6b62 --- /dev/null +++ b/src/Services/Icons/Models/BaseIndexManifest.cs @@ -0,0 +1,42 @@ +namespace WhMgr.Services.Icons.Models +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + + public class BaseIndexManifest + { + [JsonPropertyName("gym")] + public HashSet Gyms { get; set; } = new(); + + [JsonPropertyName("invasion")] + public HashSet Invasions { get; set; } = new(); + + [JsonPropertyName("misc")] + public HashSet Miscellaneous { get; set; } = new(); + + [JsonPropertyName("nest")] + public HashSet Nests { get; set; } = new(); + + [JsonPropertyName("pokemon")] + public HashSet Pokemon { get; set; } = new(); + + [JsonPropertyName("pokestop")] + public HashSet Pokestops { get; set; } = new(); + + [JsonPropertyName("raid")] + public BaseIndexRaidManifest Raids { get; set; } = new(); + + [JsonPropertyName("reward")] + public BaseIndexRewardManifest Rewards { get; set; } = new(); + + [JsonPropertyName("team")] + public HashSet Teams { get; set; } = new(); + + [JsonPropertyName("type")] + public HashSet Types { get; set; } = new(); + + [JsonPropertyName("weather")] + public HashSet Weather { get; set; } = new(); + } +} \ No newline at end of file diff --git a/src/Services/Icons/Models/BaseIndexRaidManifest.cs b/src/Services/Icons/Models/BaseIndexRaidManifest.cs new file mode 100644 index 00000000..1eddaf20 --- /dev/null +++ b/src/Services/Icons/Models/BaseIndexRaidManifest.cs @@ -0,0 +1,12 @@ +namespace WhMgr.Services.Icons.Models +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + + public class BaseIndexRaidManifest + { + [JsonPropertyName("egg")] + public HashSet Eggs { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Icons/Models/BaseIndexRewardManifest.cs b/src/Services/Icons/Models/BaseIndexRewardManifest.cs new file mode 100644 index 00000000..0b687de7 --- /dev/null +++ b/src/Services/Icons/Models/BaseIndexRewardManifest.cs @@ -0,0 +1,8 @@ +namespace WhMgr.Services.Icons.Models +{ + using System.Collections.Generic; + + public class BaseIndexRewardManifest : Dictionary + { + } +} \ No newline at end of file diff --git a/src/Services/Icons/UIconService.cs b/src/Services/Icons/UIconService.cs new file mode 100644 index 00000000..eee9521a --- /dev/null +++ b/src/Services/Icons/UIconService.cs @@ -0,0 +1,710 @@ +namespace WhMgr.Services.Icons +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Text; + using System.Threading.Tasks; + + using WhMgr.Common; + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Services.Icons.Models; + using WhMgr.Services.Webhook.Models; + using WhMgr.Utilities; + + using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + using QuestRewardType = POGOProtos.Rpc.QuestRewardProto.Types.Type; + + /// + /// + /// + public class UIconService : IUIconService + { + // TODO: Get file names instead of specifying icon formats + private const string DefaultIconFormat = "png"; + private const string IndexJson = "index.json"; + //private const string BaseUrl = "https://raw.githubusercontent.com/WatWowMap/wwm-uicons/main/"; + + #region Variables + + private static IUIconService _instance; + + private readonly IconStyleCollection _iconStyles; + private readonly Dictionary _questRewardTypes; + + #endregion + + #region Properties + + public static IUIconService Instance => + _instance ??= new UIconService( + Startup.Config.IconStyles, + GetQuestRewardTypeNames(), + DefaultIconFormat + ); + + /// + /// + /// + public string IconFormat { get; private set; } = DefaultIconFormat; + + #endregion + + #region Constructor(s) + + /// + /// + /// + /// + /// + /// + public UIconService(IconStyleCollection icons, Dictionary questRewardTypes, string iconFormat = DefaultIconFormat) + { + if (icons == null) + { + throw new ArgumentNullException(nameof(icons), "Icons collection cannot be null"); + } + + _iconStyles = new IconStyleCollection(); + _questRewardTypes = questRewardTypes; + + IconFormat = iconFormat; + + FetchIcons(icons).ConfigureAwait(false).GetAwaiter().GetResult(); + } + + #endregion + + #region Public Methods + + #region Get Icon Methods + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public string GetPokemonIcon(string style, uint pokemonId, uint formId = 0, uint evolutionId = 0, Gender gender = 0, uint costumeId = 0, bool shiny = false) + { + if (!IsStyleSelected(style, IconType.Pokemon)) + return GetDefaultIcon(_iconStyles[style][IconType.Pokemon].Path); + + var iconStyle = _iconStyles[style][IconType.Pokemon]; + var baseUrl = iconStyle.Path; + var evolutionSuffixes = (evolutionId > 0 ? new[] { "_e" + evolutionId, string.Empty } : new[] { string.Empty }).ToList(); + var formSuffixes = (formId > 0 ? new[] { "_f" + formId, string.Empty } : new[] { string.Empty }).ToList(); + var costumeSuffixes = (costumeId > 0 ? new[] { "_c" + costumeId, string.Empty } : new[] { string.Empty }).ToList(); + var genderSuffixes = (gender > 0 ? new[] { "_g" + (int)gender, string.Empty } : new[] { string.Empty }).ToList(); + var shinySuffixes = (shiny ? new[] { "_s", string.Empty } : new[] { string.Empty }).ToList(); + foreach (var evolutionSuffix in evolutionSuffixes) + { + foreach (var formSuffix in formSuffixes) + { + foreach (var costumeSuffix in costumeSuffixes) + { + foreach (var genderSuffix in genderSuffixes) + { + foreach (var shinySuffix in shinySuffixes) + { + var result = $"{pokemonId}{evolutionSuffix}{formSuffix}{costumeSuffix}{genderSuffix}{shinySuffix}.{IconFormat}"; + if (iconStyle.IndexList.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + } + } + } + } + } + return GetDefaultIcon(baseUrl); // Substitute Pokemon + } + + /// + /// + /// + /// + /// + public string GetTypeIcon(string style, PokemonType type) + { + if (!IsStyleSelected(style, IconType.Type)) + return GetDefaultIcon(_iconStyles[style][IconType.Type].Path); + + var iconStyle = _iconStyles[style][IconType.Type]; + var baseUrl = iconStyle.Path; + var typeId = (uint)type; + var result = $"{typeId}.{IconFormat}"; + if (iconStyle.IndexList.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + return GetDefaultIcon(baseUrl); + } + + /// + /// + /// + /// + /// + /// + /// + public string GetPokestopIcon(string style, PokestopLureType lure, bool invasionActive = false, bool questActive = false, bool ar = false) + { + if (!IsStyleSelected(style, IconType.Pokestop)) + return GetDefaultIcon(_iconStyles[style][IconType.Pokestop].Path); + + var iconStyle = _iconStyles[style][IconType.Pokestop]; + var baseUrl = iconStyle.Path; + var lureId = (uint)lure; + var invasionSuffixes = (invasionActive ? new[] { "_i", string.Empty } : new[] { string.Empty }).ToList(); + var questSuffixes = (questActive ? new[] { "_q", string.Empty } : new[] { string.Empty }).ToList(); + var arSuffixes = (ar ? new[] { "_ar", string.Empty } : new[] { string.Empty }).ToList(); + foreach (var invasionSuffix in invasionSuffixes) + { + foreach (var questSuffix in questSuffixes) + { + foreach (var arSuffix in arSuffixes) + { + var result = $"{lureId}{questSuffix}{invasionSuffix}{arSuffix}.{IconFormat}"; + if (iconStyle.IndexList.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + } + } + } + return GetDefaultIcon(baseUrl); + } + + /// + /// + /// + /// + /// + /// + /// + public string GetRewardIcon(string style, QuestRewardType rewardType, uint id = 0, uint amount = 0) + { + if (!IsStyleSelected(style, IconType.Reward)) + return GetDefaultIcon(_iconStyles[style][IconType.Reward].Path); + + var category = _questRewardTypes[rewardType]; + var iconStyle = _iconStyles[style][IconType.Reward]; + var baseUrl = $"{iconStyle.Path}/{category}"; + var amountSuffixes = (amount > 1 ? new[] { "_a" + amount } : new[] { string.Empty }).ToList(); + foreach (var amountSuffix in amountSuffixes) + { + var idString = id > 0 ? id.ToString() : string.Empty; + var result = $"{idString}{amountSuffix}.{IconFormat}"; + if (!iconStyle.BaseIndexList.Rewards.ContainsKey(category)) + continue; + + if (category == _questRewardTypes[QuestRewardType.PokemonEncounter]) + { + if (iconStyle.BaseIndexList.Pokemon.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + } + else + { + var dict = (Dictionary)iconStyle.BaseIndexList.Rewards; + if (dict.ContainsKey(category)) + { + string json = Convert.ToString(dict[category]); + var list = json.FromJson>(); + if (list.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + } + } + /* + var list = category == "pokemon_encounter" + ? iconStyle.BaseIndexList.Pokemon + : iconStyle.BaseIndexList.Rewards[category]; + if (list.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + */ + } + return GetDefaultIcon(baseUrl); + } + + /// + /// + /// + /// + /// + /// + public string GetRewardIcon(string style, QuestData quest) + { + if (!IsStyleSelected(style, IconType.Reward)) + return GetDefaultIcon(_iconStyles[style][IconType.Reward].Path); + + var reward = quest.Rewards.FirstOrDefault(); + var category = _questRewardTypes[reward.Type]; + var iconStyle = _iconStyles[style][IconType.Reward]; + var baseUrl = $"{iconStyle.Path}/{category}"; + + bool appendExt; + var sb = new StringBuilder(); + //sb.Append("reward/"); + switch (reward.Type) + { + case QuestRewardType.Candy: + case QuestRewardType.Item: + return GetRewardIcon(style, reward.Type, (uint)reward.Info.Item, (uint)(reward?.Info?.Amount ?? 0)); + case QuestRewardType.MegaResource: + return GetRewardIcon(style, reward.Type, reward.Info.PokemonId, (uint)(reward?.Info?.Amount ?? 0)); + case QuestRewardType.PokemonEncounter: + return GetPokemonIcon + ( + style, + quest.IsDitto ? 132 : reward.Info.PokemonId, + reward?.Info.FormId ?? 0, + 0, //reward.Info.EvolutionId ?? 0, + Gender.Unset, + reward?.Info.CostumeId ?? 0, + reward?.Info.Shiny ?? false + ); + case QuestRewardType.Stardust: + sb.Append(reward.Info.Amount); + appendExt = true; + break; + case QuestRewardType.LevelCap: + case QuestRewardType.Incident: + case QuestRewardType.XlCandy: + case QuestRewardType.AvatarClothing: + case QuestRewardType.Experience: + case QuestRewardType.Quest: + case QuestRewardType.Sticker: + sb.Append((int)reward.Type); + appendExt = true; + break; + case QuestRewardType.Unset: + default: + return null; + } + if (appendExt) + { + sb.Append('.'); + sb.Append(DefaultIconFormat); + } + var result = sb.ToString(); + var dict = (Dictionary)iconStyle.BaseIndexList.Rewards; + var json = Convert.ToString(dict[category]); + var list = System.Text.Json.JsonSerializer.Deserialize>(json); + if (list.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + return GetDefaultIcon(baseUrl); + } + + /// + /// + /// + /// + /// + public string GetInvasionIcon(string style, InvasionCharacter gruntType) + { + if (!IsStyleSelected(style, IconType.Invasion)) + return GetDefaultIcon(_iconStyles[style][IconType.Invasion].Path); + + var iconStyle = _iconStyles[style][IconType.Invasion]; + var baseUrl = iconStyle.Path; + var gruntTypeId = (uint)gruntType; + var result = $"{gruntTypeId}.{IconFormat}"; + if (iconStyle.IndexList.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + return GetDefaultIcon(baseUrl); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public string GetGymIcon(string style, PokemonTeam team = PokemonTeam.Neutral, uint trainerCount = 0, bool inBattle = false, bool ex = false, bool ar = false) + { + if (!IsStyleSelected(style, IconType.Gym)) + return GetDefaultIcon(_iconStyles[style][IconType.Gym].Path); + + var iconStyle = _iconStyles[style][IconType.Gym]; + var baseUrl = iconStyle.Path; + var teamId = (uint)team; + var trainerSuffixes = (trainerCount > 0 ? new[] { "_t" + trainerCount, string.Empty } : new[] { string.Empty }).ToList(); + var inBattleSuffixes = (inBattle ? new[] { "_b", string.Empty } : new[] { string.Empty }).ToList(); + var exSuffixes = (ex ? new[] { "_ex", string.Empty } : new[] { string.Empty }).ToList(); + var arSuffixes = (ar ? new[] { "_ar", string.Empty } : new[] { string.Empty }).ToList(); + foreach (var trainerSuffix in trainerSuffixes) + { + foreach (var inBattleSuffix in inBattleSuffixes) + { + foreach (var exSuffix in exSuffixes) + { + foreach (var arSuffix in arSuffixes) + { + var result = $"{teamId}{trainerSuffix}{inBattleSuffix}{exSuffix}{arSuffix}.{IconFormat}"; + if (iconStyle.IndexList.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + } + } + } + } + return GetDefaultIcon(baseUrl); + } + + /// + /// + /// + /// + /// + /// + /// + public string GetEggIcon(string style, uint level, bool hatched = false, bool ex = false) + { + if (!IsStyleSelected(style, IconType.Egg)) + return GetDefaultIcon(_iconStyles[style][IconType.Egg].Path); + + var iconStyle = _iconStyles[style][IconType.Egg]; + var baseUrl = iconStyle.Path; + var hatchedSuffixes = (hatched ? new[] { "_h", string.Empty } : new[] { string.Empty }).ToList(); + var exSuffixes = (ex ? new[] { "_ex", string.Empty } : new[] { string.Empty }).ToList(); + foreach (var hatchedSuffix in hatchedSuffixes) + { + foreach (var exSuffix in exSuffixes) + { + var result = $"{level}{hatchedSuffix}{exSuffix}.{IconFormat}"; + if (iconStyle.IndexList.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + } + } + return GetDefaultIcon(baseUrl); + } + + /// + /// + /// + /// + /// + public string GetTeamIcon(string style, PokemonTeam team = PokemonTeam.Neutral) + { + if (!IsStyleSelected(style, IconType.Team)) + return GetDefaultIcon(_iconStyles[style][IconType.Team].Path); + + var iconStyle = _iconStyles[style][IconType.Team]; + var baseUrl = iconStyle.Path; + var teamId = (uint)team; + var result = $"{teamId}.{IconFormat}"; + if (iconStyle.IndexList.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + return GetDefaultIcon(baseUrl); + } + + /// + /// + /// + /// + /// + public string GetWeatherIcon(string style, WeatherCondition weatherCondition) + { + if (!IsStyleSelected(style, IconType.Weather)) + return GetDefaultIcon(_iconStyles[style][IconType.Weather].Path); + + var iconStyle = _iconStyles[style][IconType.Weather]; + var baseUrl = iconStyle.Path; + var weatherId = (uint)weatherCondition; + var result = $"{weatherId}.{IconFormat}"; + if (iconStyle.IndexList.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + return GetDefaultIcon(baseUrl); + } + + /// + /// + /// + /// + /// + public string GetNestIcon(string style, PokemonType type) + { + if (!IsStyleSelected(style, IconType.Nest)) + return GetDefaultIcon(_iconStyles[style][IconType.Nest].Path); + + var iconStyle = _iconStyles[style][IconType.Nest]; + var baseUrl = iconStyle.Path; + var typeId = (uint)type; + var result = $"{typeId}.{IconFormat}"; + if (iconStyle.IndexList.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + return GetDefaultIcon(baseUrl); + } + + /// + /// + /// + /// + /// + public string GetMiscellaneousIcon(string style, string fileName) + { + if (!IsStyleSelected(style, IconType.Misc)) + return GetDefaultIcon(_iconStyles[style][IconType.Misc].Path); + + var iconStyle = _iconStyles[style][IconType.Misc]; + var baseUrl = iconStyle.Path; + var result = $"{fileName}.{IconFormat}"; + if (iconStyle.IndexList.Contains(result)) + { + return $"{baseUrl}/{result}"; + } + return GetDefaultIcon(baseUrl); + } + + #endregion + + public static Dictionary GetQuestRewardTypeNames() + { + return new Dictionary + { + { QuestRewardType.Unset, "unset" }, + { QuestRewardType.Experience, "experience" }, + { QuestRewardType.Item, "item" }, + { QuestRewardType.Stardust, "stardust" }, + { QuestRewardType.Candy, "candy" }, + { QuestRewardType.AvatarClothing, "avatar_clothing" }, + { QuestRewardType.Quest, "quest" }, + { QuestRewardType.PokemonEncounter, "pokemon_encounter" }, + { QuestRewardType.Pokecoin, "pokecoin" }, + { QuestRewardType.XlCandy, "xl_candy" }, + { QuestRewardType.LevelCap, "level_cap" }, + { QuestRewardType.Sticker, "sticker" }, + { QuestRewardType.MegaResource, "mega_resource" }, + { QuestRewardType.Incident, "incident" }, + }; + } + + #endregion + + #region Private Methods + + private async Task FetchIcons(IconStyleCollection icons) + { + foreach (var (styleName, styleConfig) in icons) + { + await BuildIndexManifests(styleName, styleConfig); + } + } + + private async Task BuildIndexManifests(string styleName, Dictionary iconStyles) + { + // Get available forms from remote icons repo to build form list for each icon style + var keys = iconStyles.Keys.ToList(); + for (var i = 0; i < keys.Count; i++) + { + var iconType = keys[i]; + var styleConfig = iconStyles[iconType]; + if (!_iconStyles.ContainsKey(styleName)) + { + // Style not in global icon styles + _iconStyles.Add(styleName, new Dictionary()); + } + // Check if style icon type already checked, if so skip + //if (_iconStyles[styleName].ContainsKey(iconType)) + // continue; + + // Get the remote form index file from the icon repository + var indexPath = Path.Combine( + styleConfig.Path, + IndexJson + ); + var formsListJson = await NetUtils.GetAsync(indexPath); + if (string.IsNullOrEmpty(formsListJson)) + { + // Failed to get form list, skip... + Console.WriteLine("Failed to download index.json or index was empty"); + continue; + } + try + { + // Deserialize json list to hash set + if (iconType == IconType.Base) + { + var manifest = formsListJson.FromJson(); + styleConfig.BaseIndexList = manifest; + // Set all iconTypes to Base manifest values + foreach (var iconTypeValue in Enum.GetValues(typeof(IconType))) + { + var iconTypeBase = (IconType)iconTypeValue; + if (iconTypeBase == IconType.Base) + continue; + + if (!iconStyles.ContainsKey(iconTypeBase)) + { + iconStyles.Add(iconTypeBase, styleConfig); + } + var indexConfig = iconStyles[iconTypeBase]; + dynamic indexBase = null; + switch (iconTypeBase) + { + case IconType.Egg: + indexBase = manifest.Raids?.Eggs; + break; + case IconType.Gym: + indexBase = manifest.Gyms; + break; + case IconType.Invasion: + indexBase = manifest.Invasions; + break; + case IconType.Misc: + indexBase = manifest.Miscellaneous; + break; + case IconType.Nest: + indexBase = manifest.Nests; + break; + case IconType.Pokemon: + indexBase = manifest.Pokemon; + break; + case IconType.Pokestop: + indexBase = manifest.Pokestops; + break; + case IconType.Raid: + indexBase = manifest.Raids; + break; + case IconType.Reward: + indexBase = manifest.Rewards; + break; + case IconType.Team: + indexBase = manifest.Teams; + break; + case IconType.Type: + indexBase = manifest.Types; + break; + case IconType.Weather: + indexBase = manifest.Weather; + break; + } + var config = new IconStyleConfig + { + Name = styleConfig.Name, + Path = Path.Combine( + styleConfig.Path, + GetSubFolder(iconTypeBase) + ), + IndexList = indexBase, + BaseIndexList = manifest, + }; + _iconStyles[styleName].Add(iconTypeBase, config); + } + } + else + { + if (iconType == IconType.Reward) + { + var formsList = formsListJson.FromJson(); + styleConfig.IndexList = formsList; + if (!_iconStyles[styleName].ContainsKey(iconType)) + { + _iconStyles[styleName].Add(iconType, styleConfig); + } + else + { + _iconStyles[styleName][iconType] = styleConfig; + } + } + else + { + var formsList = formsListJson.FromJson>(); + // Add style and form list + styleConfig.IndexList = formsList; + if (!_iconStyles[styleName].ContainsKey(iconType)) + { + _iconStyles[styleName].Add(iconType, styleConfig); + } + else + { + _iconStyles[styleName][iconType] = styleConfig; + } + } + } + } + catch (Exception ex) + { + //Console.WriteLine($"Failed to parse {IndexJson} for style {styleName}: {formsListJson}\nError: {ex}"); + Console.WriteLine($"Failed to parse {IndexJson} for style {styleName}\nError: {ex.Message}"); + } + } + } + + private bool IsStyleSelected(string styleName, IconType iconType) + { + if (!_iconStyles.ContainsKey(styleName)) + { + // Style does not exist or styles not loaded + return false; + } + + if (!_iconStyles[styleName].ContainsKey(iconType) && iconType == IconType.Base) + { + // Style does not contain icon type style config + return false; + } + + return true; + } + + private static string GetSubFolder(IconType type) + { + return type switch + { + IconType.Egg => "raid/egg", + IconType.Gym + or IconType.Invasion + or IconType.Misc + or IconType.Nest + or IconType.Pokemon + or IconType.Pokestop + or IconType.Raid + or IconType.Reward + or IconType.Team + or IconType.Type + or IconType.Weather => type.ToString().ToLower(), + _ => string.Empty, + }; + } + + private string GetDefaultIcon(string baseUrl) + { + if (string.IsNullOrEmpty(baseUrl)) + { + return $"0.{IconFormat}"; + } + return $"{baseUrl}/0.{IconFormat}"; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/NotificationLimiter.cs b/src/Services/NotificationLimiter.cs similarity index 96% rename from src/NotificationLimiter.cs rename to src/Services/NotificationLimiter.cs index 50648cf8..73e6dc00 100644 --- a/src/NotificationLimiter.cs +++ b/src/Services/NotificationLimiter.cs @@ -1,4 +1,4 @@ -namespace WhMgr +namespace WhMgr.Services { using System; @@ -53,12 +53,11 @@ public virtual bool IsLimited(int maxNotificationsPerMinute = 15) if (Count >= maxNotificationsPerMinute) { - //Limited + // Rate Limited return true; } Count++; - return false; } diff --git a/src/Services/Pvp/PvpRank.cs b/src/Services/Pvp/PvpRank.cs new file mode 100644 index 00000000..43b7b14e --- /dev/null +++ b/src/Services/Pvp/PvpRank.cs @@ -0,0 +1,37 @@ +namespace WhMgr.Services.Pvp +{ + using System.Text.Json.Serialization; + + public class PvpRank + { + [JsonPropertyName("cp")] + public uint CP { get; set; } + + [JsonPropertyName("rank")] + public ushort Rank { get; set; } + + [JsonPropertyName("pokemon")] + public ushort Pokemon { get; set; } + + [JsonPropertyName("form")] + public ushort Form { get; set; } + + [JsonPropertyName("evolution")] + public ushort Evolution { get; set; } + + [JsonPropertyName("level")] + public double Level { get; set; } + + [JsonPropertyName("value")] + public double Value { get; set; } + + [JsonPropertyName("percentage")] + public double Percentage { get; set; } + + [JsonPropertyName("cap")] + public ushort LevelCap { get; set; } + + [JsonIgnore] + public bool IsCapped { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Pvp/PvpRankCalculator.cs b/src/Services/Pvp/PvpRankCalculator.cs new file mode 100644 index 00000000..7aaff3f6 --- /dev/null +++ b/src/Services/Pvp/PvpRankCalculator.cs @@ -0,0 +1,287 @@ +namespace WhMgr.Services.Pvp +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Runtime.Caching; + + using POGOProtos.Rpc; + using static POGOProtos.Rpc.BelugaPokemonProto.Types; + + using WhMgr.Data; + + /// + /// PvpRankCalculator + /// + /// + /// https://github.com/WatWowMap/Chuck/blob/master/src/services/pvp.js + /// https://github.com/WatWowMap/Chuck/blob/master/src/services/pvp-core.js + /// + public class PvpRankCalculator + { + #region Variables + + private static readonly List<(string, ushort)> _availableLeagues = new() + { + ("little", 500), + ("great", 1500), + ("ultra", 2500), + //("master", 9999), + }; + private static readonly List _availableLevelCaps = new() + { + 40, + 41, + 50, + 51, + }; + + private static readonly MemoryCache _cache = MemoryCache.Default; + + #endregion + + #region Singleton + + private static PvpRankCalculator _instance; + public static PvpRankCalculator Instance => + _instance ??= new PvpRankCalculator(); + + #endregion + + #region Public Methods + + public Dictionary> QueryPvpRank(uint pokemonId, uint formId, uint costumeId, ushort atk, ushort def, ushort sta, double level, PokemonGender gender) + { + if (!GameMaster.Instance.Pokedex.ContainsKey(pokemonId)) + { + // Pokemon not found in gamemaster + return null; + } + var masterPokemon = GameMaster.Instance.Pokedex[pokemonId]; + if (!masterPokemon.Attack.HasValue) + { + // No base attack specified + return null; + } + var masterForm = formId > 0 ? masterPokemon.Forms[formId] ?? masterPokemon : masterPokemon; + var baseEntry = new PvpRank + { + Pokemon = (ushort)pokemonId, + Form = Convert.ToUInt16(formId > 0 ? formId : 0), + }; + + var results = new Dictionary>(); + void pushAllEntries(PokedexPokemon stats, ushort evolution) + { + Dictionary> allRanks = CalculateAllRanks(stats); + foreach ((string leagueName, Dictionary combinationIndex) in allRanks) + { + foreach ((ushort levelCap, StatCombination combinations) in combinationIndex) + { + var ivEntry = combinations[atk][def][sta]; + if (level > ivEntry.Level) + { + continue; + } + var entry = new PvpRank + { + Pokemon = baseEntry.Pokemon, + Form = baseEntry.Form, + LevelCap = levelCap, + Value = ivEntry.Value, + CP = ivEntry.CP, + Level = ivEntry.Level, + Percentage = ivEntry.Percentage, + Rank = ivEntry.Rank, + }; + if (evolution > 0) + { + entry.Evolution = evolution; + } + /* + if (combinations.Maxed) + { + entry.IsCapped = true; + } + */ + if (!results.ContainsKey(leagueName)) + { + results.Add(leagueName, new List()); + } + results[leagueName].Add(entry); + } + } + } + pushAllEntries(masterForm.Attack.HasValue ? masterForm : masterPokemon, 0); + var canEvolve = true; + if (costumeId > 0) + { + // Get Pokemon costume name from protos + var costumeName = Convert.ToString((PokemonDisplayProto.Types.Costume)costumeId); + canEvolve = !costumeName.EndsWith("_NOEVOLVE") && !costumeName.EndsWith("_NO_EVOLVE"); + } + if (canEvolve && masterForm.Evolutions.Count > 0) + { + foreach (var evolution in masterForm.Evolutions) + { + if (evolution.GenderRequirement > 0 && gender != evolution.GenderRequirement) + { + // Gender doesn't match + continue; + } + + // Reset costume since we know it can't evolve + var evolvedRanks = QueryPvpRank(evolution.PokemonId, evolution.FormId, 0, atk, def, sta, level, gender); + foreach (var (leagueName, result) in evolvedRanks) + { + if (results.ContainsKey(leagueName)) + { + results[leagueName].AddRange(result); + } + else + { + results.Add(leagueName, result); + } + } + } + } + if (masterForm.TempEvolutions?.Count > 0) + { + foreach (var (tempEvoId, tempEvo) in masterForm.TempEvolutions) + { + pushAllEntries(tempEvo.Attack.HasValue ? tempEvo : masterPokemon.TempEvolutions[tempEvoId], (ushort)tempEvoId); + } + } + return results; + } + + #endregion + + #region Public Static Methods + + public static double CalculateStatProduct(PokedexPokemon stats, ushort atk, ushort def, ushort sta, double level) + { + var multiplier = GameMaster.Instance.CpMultipliers[level]; + var hp = Math.Floor((sta + stats.Stamina ?? 0) * multiplier); + if (hp < 10) hp = 10; + return (atk + stats.Attack ?? 0) * multiplier * + (def + stats.Defense ?? 0) * multiplier * + hp; + } + + public static uint CalculateCP(PokedexPokemon stats, ushort atk, ushort def, ushort sta, double level) + { + var multiplier = GameMaster.Instance.CpMultipliers[level]; + var attack = (double)(stats.Attack + atk); + var defense = (double)(stats.Defense + def); + var stamina = (double)(stats.Stamina + sta); + var cp = Math.Floor(multiplier * multiplier * attack * Math.Sqrt(defense * stamina) / 10); + return Convert.ToUInt32(cp < 10 ? 10 : cp); + } + + #endregion + + #region Private Static Methods + + private static PvpRank CalculatePvPStat(PokedexPokemon stats, ushort atk, ushort def, ushort sta, ushort cpCap, double levelCap) + { + var bestCP = cpCap; + double lowest = 1; + var highest = levelCap; + for (var mid = Math.Ceiling(lowest + highest) / 2; lowest < highest; mid = Math.Ceiling(lowest + highest) / 2) + { + var cp = CalculateCP(stats, atk, def, sta, mid); + if (cp <= cpCap) + { + lowest = mid; + bestCP = (ushort)cp; + } + else + { + highest = mid - .5; + } + } + return new PvpRank + { + Value = (uint)CalculateStatProduct(stats, atk, def, sta, lowest), + Level = lowest, + CP = bestCP, + }; + } + + private static (StatCombination, List) CalculateRanks(PokedexPokemon stats, ushort cpCap, double levelCap) + { + var combinations = new StatCombination(); + var sortedRanks = new List(); + for (ushort a = 0; a <= 15; a++) + { + var atkStats = new List>(); + for (ushort d = 0; d <= 15; d++) + { + var defStats = new List(); + for (ushort s = 0; s <= 15; s++) + { + var currentStat = CalculatePvPStat(stats, a, d, s, cpCap, levelCap); + defStats.Add(currentStat); + sortedRanks.Add(currentStat); + } + atkStats.Add(defStats); + } + combinations.Add(atkStats); + } + sortedRanks.Sort((a, b) => Convert.ToInt32(b.Value - a.Value)); + var best = sortedRanks.FirstOrDefault()?.Value; + for (int i = 0, j = 0; i < sortedRanks.Count; i++) + { + var entry = sortedRanks[i]; + entry.Percentage = Math.Round((double)(entry.Value / best), 5); + if (entry.Value < sortedRanks[j].Value) + { + j = i; + } + entry.Rank = Convert.ToUInt16(j + 1); + } + return (combinations, sortedRanks); + } + + private static Dictionary> CalculateAllRanks(PokedexPokemon stats) + { + var key = $"{stats.Attack},{stats.Defense},{stats.Stamina}"; + //if (_cache.Cache.TryGetValue(key, out Dictionary> value)) + if (_cache.Contains(key)) + { + return _cache.Get(key) as Dictionary>; + } + + var result = new Dictionary>(); + foreach (var (leagueName, cpCap) in _availableLeagues) + { + var combinationIndex = new Dictionary(); + foreach (var levelCap in _availableLevelCaps) + { + if (CalculateCP(stats, 15, 15, 15, levelCap) <= cpCap) + continue; // Not viable cp + + (StatCombination combinations, List _) = CalculateRanks(stats, cpCap, levelCap); + combinationIndex[levelCap] = combinations; + + if (CalculateCP(stats, 0, 0, 0, levelCap + 0.5) > cpCap) + { + // TODO: combinations.Maxed = true; + break; + } + } + result[leagueName] = combinationIndex; + } + // Set PVP ranking cache + // TODO: return _cache.Cache.Set(key, result);//, TimeSpan.FromMinutes(5)); + if (!_cache.Contains(key)) + { + _cache.Set(new CacheItem(key, result), new CacheItemPolicy()); + } + return result; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Pvp/StatCombination.cs b/src/Services/Pvp/StatCombination.cs new file mode 100644 index 00000000..64cba7d1 --- /dev/null +++ b/src/Services/Pvp/StatCombination.cs @@ -0,0 +1,6 @@ +namespace WhMgr.Services.Pvp +{ + using System.Collections.Generic; + + public class StatCombination : List>> { } +} \ No newline at end of file diff --git a/src/Services/PvpRankCalculator.cs b/src/Services/PvpRankCalculator.cs deleted file mode 100644 index 5196d866..00000000 --- a/src/Services/PvpRankCalculator.cs +++ /dev/null @@ -1,219 +0,0 @@ -/* -namespace WhMgr -{ - using System; - using System.Collections.Generic; - using System.Threading.Tasks; - - using WhMgr.Data; - using WhMgr.Extensions; - using WhMgr.Net.Models; - - public class PvpRankCalculator - { - #region Public Methods - - public async Task CalculateBestPvPStat(int pokemonId, int formId, int atk, int def, int sta, int cap) - { - var bestStat = 0d; - var level = 0d; - for (var i = 1d; i <= 40; i += .5) - { - var pkmn = MasterFile.GetPokemon(pokemonId, formId); - var cp = PokemonExtensions.GetCP(pkmn.Attack ?? 0 + atk, pkmn.Defense ?? 0 + def, pkmn.Stamina ?? 0 + sta, MasterFile.Instance.CpMultipliers[i]); - if (cp <= cap) - { - var stat = CalculatePvPStat(pokemonId, formId, atk, def, sta, i); - if (stat > bestStat) - { - bestStat = stat; - level = i; - } - } - else if (cp > cap) - { - i = 41; - } - } - return await Task.FromResult(new BestPvPStat - { - Value = bestStat, - Level = level, - Attack = atk, - Defense = def, - Stamina = sta - }); - } - - //public async Task> CalculateTopRanks(int pokemonId, int formId, int cap, int topRanks) - //{ - // var bestStat = new BestPvPStat(); - // var arrayToSort = new List(); - // for (var a = 0; a <= 15; a++) - // { - // for (var d = 0; d <= 15; d++) - // { - // for (var s = 0; s <= 15; s++) - // { - // var currentStat = await CalculateBestPvPStat(pokemonId, formId, a, d, s, cap); - // if (currentStat.Value > bestStat.Value) - // { - // bestStat = new BestPvPStat { Attack = a, Defense = d, Stamina = s, Value = currentStat.Value, Level = currentStat.Level }; - // } - // arrayToSort.Add(currentStat); - // } - // } - // } - - // arrayToSort.Sort((x, y) => (int)(y.Value - x.Value)); - // var best = arrayToSort[0].Value; - // for (var i = 0; i < arrayToSort.Count; i++) - // { - // var rank = i + 1; - // if (rank > topRanks || rank == 0) - // continue; - // var percent = PrecisionRound((arrayToSort[i].Value / best) * 100, 2); - // arrayToSort[i].Percent = percent; - // arrayToSort[i].Rank = rank; - // //Console.WriteLine($"{arrayToSort[i].Attack}/{arrayToSort[i].Defense}/{arrayToSort[i].Stamina} L{arrayToSort[i].Level} Value={arrayToSort[i].Value} Rank #{arrayToSort[i].Rank} Percent: {percent}%"); - // } - - // return await Task.FromResult(arrayToSort.FindAll(x => x.Rank <= topRanks)); - //} - - public async Task> CalculatePossibleCPs(int pokemonId, int formId, int atk, int def, int sta, double level, PokemonGender gender, int minCP, int maxCP) - { - var possibleCPs = new List(); - if (!string.IsNullOrEmpty(MasterFile.Instance.Pokedex[pokemonId].GenderRequirement) && MasterFile.Instance.Pokedex[pokemonId].GenderRequirement != gender.ToString()) - { - return possibleCPs; - } - - for (var i = level; i <= 40; i += .5) - { - var pkmn = MasterFile.GetPokemon(pokemonId, formId); - var currentCP = PokemonExtensions.GetCP(pkmn.Attack ?? 0 + atk, pkmn.Defense ?? 0 + def, pkmn.Stamina ?? 0 + sta, MasterFile.Instance.CpMultipliers[i]); - if (currentCP >= minCP && currentCP <= maxCP) - { - possibleCPs.Add(new PvPCP - { - PokemonId = pokemonId, - FormId = formId, - Attack = atk, - Defense = def, - Stamina = sta, - Level = i, - CP = currentCP - }); - if (currentCP > maxCP) - i = 41; - } - } - - if (MasterFile.Instance.Pokedex[pokemonId].Evolutions.Count == 0) - { - return possibleCPs; - } - - for (var i = 0; i < MasterFile.Instance.Pokedex[pokemonId].Evolutions.Count; i++) - { - int evolvedForm; - if (formId > 0) - { - if (!MasterFile.Instance.Pokedex[pokemonId].Forms.ContainsKey(formId)) - { - evolvedForm = MasterFile.Instance.Pokedex[int.Parse(MasterFile.Instance.Pokedex[pokemonId].Evolutions[i])].DefaultForm ?? 0; - } - else - { - evolvedForm = MasterFile.Instance.Pokedex[pokemonId].Forms[formId].EvolvedForm ?? 0; - } - } - else if (MasterFile.Instance.Pokedex[pokemonId].EvolvedForm.HasValue) - { - evolvedForm = MasterFile.Instance.Pokedex[pokemonId].EvolvedForm ?? 0; - } - else - { - evolvedForm = formId; - } - - possibleCPs.AddRange(await CalculatePossibleCPs(int.Parse(MasterFile.Instance.Pokedex[pokemonId].Evolutions[i]), evolvedForm, atk, def, sta, level, gender, minCP, maxCP)); - } - return await Task.FromResult(possibleCPs); - } - - public async Task> GetRank(int pokemonId, int formId, int maxCP, BestPvPStat bestPvPStat) - { - try - { - var isUltra = maxCP > 1500; - var myStat = isUltra ? - (PvPRank)MasterFile.Instance.UltraPvPLibrary[pokemonId][formId][bestPvPStat.Attack][bestPvPStat.Defense][bestPvPStat.Stamina] : - (PvPRank)MasterFile.Instance.GreatPvPLibrary[pokemonId][formId][bestPvPStat.Attack][bestPvPStat.Defense][bestPvPStat.Stamina]; - var rank = myStat?.Rank ?? 4096; - var percent = myStat?.Percent ?? 0; - - return await Task.FromResult(new KeyValuePair(rank, percent)); - } - catch (Exception) - { - return await Task.FromResult(new KeyValuePair(4096, 0)); - } - } - - #endregion - - private double CalculatePvPStat(int pokemonId, int formId, int atk, int def, int sta, double level) - { - var cpMultiplier = MasterFile.Instance.CpMultipliers[level]; - var pkmn = MasterFile.GetPokemon(pokemonId, formId); - var attack = Convert.ToInt32((atk + pkmn.Attack) * cpMultiplier); - var defense = Convert.ToInt32((def + pkmn.Defense) * cpMultiplier); - var stamina = Convert.ToInt32((sta + pkmn.Stamina) * cpMultiplier); - var product = Math.Round(attack * defense * Math.Floor(Convert.ToDouble(stamina))); - return product; - } - - //private double PrecisionRound(double number, int precision) - //{ - // var factor = Math.Pow(10, precision); - // return Math.Round(number * factor) / factor; - //} - } - - public class PvPCP - { - public int PokemonId { get; set; } - - public int FormId { get; set; } - - public int Attack { get; set; } - - public int Defense { get; set; } - - public int Stamina { get; set; } - - public double Level { get; set; } - - public int CP { get; set; } - } - - public class BestPvPStat - { - public double Value { get; set; } - - public double Level { get; set; } - - public double Percent { get; set; } - - public int Rank { get; set; } - - public int Attack { get; set; } - - public int Defense { get; set; } - - public int Stamina { get; set; } - } -} -*/ \ No newline at end of file diff --git a/src/Services/StaticMap/IStaticMapGenerator.cs b/src/Services/StaticMap/IStaticMapGenerator.cs new file mode 100644 index 00000000..0a24376d --- /dev/null +++ b/src/Services/StaticMap/IStaticMapGenerator.cs @@ -0,0 +1,7 @@ +namespace WhMgr.Services.StaticMap +{ + public interface IStaticMapGenerator + { + string GenerateLink(); + } +} \ No newline at end of file diff --git a/src/Services/StaticMap/StaticMapGenerator.cs b/src/Services/StaticMap/StaticMapGenerator.cs new file mode 100644 index 00000000..4d10cf7b --- /dev/null +++ b/src/Services/StaticMap/StaticMapGenerator.cs @@ -0,0 +1,90 @@ +namespace WhMgr.Services.StaticMap +{ + using System; + using System.Text; + + using WhMgr.Common; + using WhMgr.Extensions; + using WhMgr.Utilities; + + public class StaticMapGenerator : IStaticMapGenerator + { + private readonly StaticMapOptions _options; + + public StaticMapGenerator(StaticMapOptions options) + { + _options = options; + } + + public string GenerateLink() + { + var payload = new + { + url = _options.BaseUrl, + lat = _options.Latitude, + lon = _options.Longitude, + latitude = _options.Latitude, + longitude = _options.Longitude, + pokestops = _options.Pokestops, + gyms = _options.Gyms, + url2 = _options.SecondaryImageUrl, + team = _options.Team, + team_id = Convert.ToInt32(_options.Team ?? PokemonTeam.Neutral), + regeneratable = _options.Regeneratable, + pregenerated = _options.Pregenerate, + path = _options.PolygonPath, + }; + var url = BuildUrl(_options.Pregenerate); + if (_options.Pregenerate) + { + var payloadJson = payload.ToJson(); + var result = NetUtils.Post(url, payloadJson); + var responseUrl = $"{_options.BaseUrl}/{_options.TemplateType.ToString().ToLower()}/pregenerated/{result}"; + return responseUrl; + } + return url; + } + + private string BuildUrl(bool pregenerate) + { + var sb = new StringBuilder(); + sb.Append(_options.BaseUrl); + sb.Append('/'); + sb.Append(_options.TemplateType.ToString().ToLower()); + sb.Append('/'); + sb.Append(_options.MapType.ToString().ToLower()); + sb.Append('?'); + sb.Append($"lat={_options.Latitude}"); + sb.Append('&'); + sb.Append($"lon={_options.Longitude}"); + sb.Append('&'); + sb.Append($"url2={_options.SecondaryImageUrl}"); + + if (pregenerate) + { + sb.Append('&'); + sb.Append($"pregenerate={_options.Pregenerate.ToString().ToLower()}"); + sb.Append('&'); + sb.Append($"regeneratable={_options.Regeneratable.ToString().ToLower()}"); + } + else + { + if (_options.Team != PokemonTeam.All) + { + sb.Append('&'); + sb.Append($"team={_options.Team}"); + sb.Append('&'); + sb.Append($"team_id={Convert.ToInt32(_options.Team)}"); + } + if (!string.IsNullOrEmpty(_options.PolygonPath)) + { + sb.Append('&'); + sb.Append($"polygon={_options.PolygonPath}"); + } + } + + var url = sb.ToString(); + return url; + } + } +} \ No newline at end of file diff --git a/src/Services/StaticMap/StaticMapOptions.cs b/src/Services/StaticMap/StaticMapOptions.cs new file mode 100644 index 00000000..bf50905c --- /dev/null +++ b/src/Services/StaticMap/StaticMapOptions.cs @@ -0,0 +1,34 @@ +namespace WhMgr.Services.StaticMap +{ + using System; + using System.Collections.Generic; + + using WhMgr.Common; + + public class StaticMapOptions + { + public string BaseUrl { get; set; } + + public StaticMapType MapType { get; set; } = StaticMapType.Pokemon; + + public StaticMapTemplateType TemplateType { get; set; } = StaticMapTemplateType.StaticMap; + + public double Latitude { get; set; } + + public double Longitude { get; set; } + + public string SecondaryImageUrl { get; set; } + + public PokemonTeam? Team { get; set; } = PokemonTeam.All; + + public string PolygonPath { get; set; } + + public List Gyms { get; set; } = new(); + + public List Pokestops { get; set; } = new(); + + public bool Pregenerate { get; set; } = true; + + public bool Regeneratable { get; set; } = true; + } +} \ No newline at end of file diff --git a/src/Services/StaticMap/StaticMapTemplateType.cs b/src/Services/StaticMap/StaticMapTemplateType.cs new file mode 100644 index 00000000..a9ce1d01 --- /dev/null +++ b/src/Services/StaticMap/StaticMapTemplateType.cs @@ -0,0 +1,11 @@ +namespace WhMgr.Services.StaticMap +{ + using System.Text.Json.Serialization; + + [JsonConverter(typeof(JsonStringEnumConverter))] + public enum StaticMapTemplateType + { + StaticMap, + MultiStaticMap, + } +} \ No newline at end of file diff --git a/src/Services/StaticMap/StaticMapType.cs b/src/Services/StaticMap/StaticMapType.cs new file mode 100644 index 00000000..ad41ddcc --- /dev/null +++ b/src/Services/StaticMap/StaticMapType.cs @@ -0,0 +1,17 @@ +namespace WhMgr.Services.StaticMap +{ + using System.Text.Json.Serialization; + + [JsonConverter(typeof(JsonStringEnumConverter))] + public enum StaticMapType + { + Pokemon, + Raids, + Gyms, + Quests, + Invasions, + Lures, + Weather, + Nests, + } +} \ No newline at end of file diff --git a/src/Services/StatisticsService.cs b/src/Services/StatisticsService.cs new file mode 100644 index 00000000..b0fd4dee --- /dev/null +++ b/src/Services/StatisticsService.cs @@ -0,0 +1,32 @@ +namespace WhMgr.Services +{ + public abstract class IStaticsticsService + { + public virtual ulong TotalPokemonReceived { get; set; } + public virtual ulong TotalPokemonMissingStatsReceived { get; set; } + public virtual ulong TotalPokemonWithStatsReceived { get; set; } + public virtual ulong TotalRaidsReceived { get; set; } + public virtual ulong TotalEggsReceived { get; set; } + public virtual ulong TotalPokestopsReceived { get; set; } + public virtual ulong TotalQuestsReceived { get; set; } + public virtual ulong TotalInvasionsReceived { get; set; } + public virtual ulong TotalLuresReceived { get; set; } + public virtual ulong TotalGymsReceived { get; set; } + public virtual ulong TotalWeatherReceived { get; set; } + + + public virtual ulong TotalPokemonSubscriptionsSent { get; set; } + public virtual ulong TotalPvpSubscriptionsSent { get; set; } + public virtual ulong TotalRaidSubscriptionsSent { get; set; } + public virtual ulong TotalQuestSubscriptionsSent { get; set; } + public virtual ulong TotalInvasionSubscriptionsSent { get; set; } + public virtual ulong TotalLureSubscriptionsSent { get; set; } + public virtual ulong TotalGymSubscriptionsSent { get; set; } + + // TODO: 100%, 0%, and maybe PvP rank 1 stats + } + + public class StatisticsService : IStaticsticsService + { + } +} \ No newline at end of file diff --git a/src/Services/StripeService.cs b/src/Services/StripeService.cs deleted file mode 100644 index 3d432df8..00000000 --- a/src/Services/StripeService.cs +++ /dev/null @@ -1,203 +0,0 @@ -namespace WhMgr.Services -{ - using System; - using System.Collections.Generic; - using System.Linq; - - using Stripe; - - using WhMgr.Diagnostics; - - /// - /// Stripe service class - /// - public class StripeService - { - #region Variables - - private static readonly IEventLogger _logger = EventLogger.GetLogger("STRIPE", Program.LogLevel); - - private readonly RequestOptions _requestOptions; - private readonly CustomerService _customerService; - private string _lastCustomerId; - private static List _customers; - - #endregion - - #region Constructor - - /// - /// Instantiates a new class with the provided API key - /// - /// Stripe API key - public StripeService(string apiKey) - { - _customerService = new CustomerService(); - _requestOptions = new RequestOptions { ApiKey = apiKey }; - StripeConfiguration.ApiKey = apiKey; - } - - #endregion - - #region Public Methods - - /// - /// Gets a customer based on guild id and user id - /// - /// Guild Id to filter by - /// User Id to filter by - /// Customer in guild id and user id - public Customer GetCustomer(ulong guildId, ulong userId) - { - var customers = GetAllCustomers(); - var customerObj = customers.FirstOrDefault(x => - ulong.TryParse(x.Metadata["user_server_discord_id"], out var discordGuildId) && discordGuildId == guildId && - ulong.TryParse(x.Metadata["user_discord_id"], out var discordUserId) && discordUserId == userId - ); - return customerObj; - } - - /// - /// Get a list of all Stripe customers - /// - /// Returns a list of all Stripe customers - public List GetAllCustomers() - { - if (_customers == null || _customers?.Count == 0) - { - var list = new List(); - List result; - while ((result = GetCustomers()).Count > 0) - { - list.AddRange(result); - } - _customers = list; - } - - return _customers; - } - - /// - /// Gets a list of Stripe customers with a maximum limit of 100 - /// - /// Maximum limit (default: 100) - /// Returns a list of Stripe customers - public List GetCustomers(int limit = 100) - { - StripeList customers; - if (string.IsNullOrEmpty(_lastCustomerId)) - { - customers = _customerService.List(new CustomerListOptions { Limit = limit }, _requestOptions); - } - else - { - customers = _customerService.List(new CustomerListOptions { Limit = limit, StartingAfter = _lastCustomerId }, _requestOptions); - } - _lastCustomerId = customers?.LastOrDefault()?.Id; - return customers?.Data; - } - - /// - /// Gets Stripe customer data by guild id and user id - /// - /// Guild Id to filter by - /// User Id to filter by - /// Returns the customer data relating to the provided guild id and user id - public CustomerData GetCustomerData(ulong guildId, ulong userId) - { - var customer = GetCustomer(guildId, userId); - var expires = GetExpireDate(customer); - var roleName = GetSubscriptionData(customer, "role_name"); - var serverName = GetSubscriptionData(customer, "server_name"); - return new CustomerData - { - GuildId = guildId, - UserId = userId, - ExpireDate = expires, - RoleName = roleName, - ServerName = serverName - }; - } - - #endregion - - #region Private Methods - - /// - /// Gets the expiration date for the Stripe customer - /// - /// Stripe customer - /// Returns subscription expiration date - private DateTime? GetExpireDate(Customer customer) - { - if (customer?.Subscriptions?.Data?.Count > 0) - { - var latestSubscription = customer.Subscriptions.Data[customer.Subscriptions.Data.Count - 1]; - return latestSubscription.CurrentPeriodEnd; - } - return null; - } - - /// - /// Get expiration date from customer from metdata key - /// - /// Customer class to get expiration date from - /// Expiration metadata key - /// Returns expiration date as string - private string GetSubscriptionData(Customer customer, string metadataKey) - { - if (customer == null) - { - _logger.Error($"Failed to get subscription for customer."); - return null; - } - - var subscriptions = customer?.Subscriptions?.Data; - if (subscriptions.Count > 0) - { - //customer.subscriptions.data[0].items.data[0].plan.metadata - var latestSubscription = subscriptions[subscriptions.Count - 1]; - var items = latestSubscription.Items.Data; - if (items.Count > 0) - { - var serverName = items[items.Count - 1].Plan.Metadata[metadataKey]; - return serverName; - } - } - return null; - } - - #endregion - } - - /// - /// Customer data metadata - /// - public class CustomerData - { - /// - /// Gets or sets the customer User ID - /// - public ulong UserId { get; set; } - - /// - /// Gets or sets the customer Guild ID - /// - public ulong GuildId { get; set; } - - /// - /// Gets or sets the customer's subscription expiration date - /// - public DateTime? ExpireDate { get; set; } - - /// - /// Gets or sets the Discord server name - /// - public string ServerName { get; set; } - - /// - /// Gets or sets the purchased Discord server role name - /// - public string RoleName { get; set; } - } -} \ No newline at end of file diff --git a/src/Services/Subscriptions/ISubscriptionManagerService.cs b/src/Services/Subscriptions/ISubscriptionManagerService.cs new file mode 100644 index 00000000..2698c689 --- /dev/null +++ b/src/Services/Subscriptions/ISubscriptionManagerService.cs @@ -0,0 +1,57 @@ +namespace WhMgr.Services.Subscriptions +{ + using System.Collections.Generic; + using System.Threading.Tasks; + + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + + using WhMgr.Common; + using WhMgr.Services.Subscriptions.Models; + + public interface ISubscriptionManagerService + { + IReadOnlyList Subscriptions { get; } + + Task SetSubscriptionStatusAsync(int subscriptionId, NotificationStatusType status); + + Task> GetUserSubscriptionsAsync(); + + Subscription GetUserSubscriptions(ulong guildId, ulong userId); + + + Task CreateSubscriptionAsync(TEntity subscription) where TEntity : BaseSubscription; + + Task UpdateSubscriptionAsync(int id, TEntity subscription) where TEntity : BaseSubscription; + + TEntity FindById(int id) where TEntity : BaseSubscription; + + Task FindByIdAsync(int id) where TEntity : BaseSubscription; + + bool DeleteById(int id) where TEntity : BaseSubscription; + + Task DeleteByIdAsync(int id) where TEntity : BaseSubscription; + + + List GetSubscriptionsByPokemonId(uint pokemonId); + + List GetSubscriptionsByPvpPokemonId(uint pokemonId); + + List GetSubscriptionsByPvpPokemonId(List pokemonId); + + List GetSubscriptionsByRaidPokemonId(uint pokemonId); + + List GetSubscriptionsByQuest(string pokestopName, string reward); + + List GetSubscriptionsByInvasion(string pokestopName, InvasionCharacter gruntType, List encounters); + + List GetSubscriptionsByLure(string pokestopName, PokestopLureType lure); + + List GetSubscriptionsByGymName(string name); + + Task RemoveAllUserSubscriptionsAsync(int subscriptionId); + + Task ReloadSubscriptionsAsync(bool skipCheck = false, ushort reloadM = 5); + + Task SaveAsync(Subscription subscription); + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/ISubscriptionProcessorService.cs b/src/Services/Subscriptions/ISubscriptionProcessorService.cs new file mode 100644 index 00000000..1ebfd32b --- /dev/null +++ b/src/Services/Subscriptions/ISubscriptionProcessorService.cs @@ -0,0 +1,23 @@ +namespace WhMgr.Services.Subscriptions +{ + using System.Threading.Tasks; + + using WhMgr.Services.Webhook.Models; + + public interface ISubscriptionProcessorService + { + Task ProcessPokemonSubscriptionAsync(PokemonData pokemon); + + Task ProcessPvpSubscriptionAsync(PokemonData pokemon); + + Task ProcessRaidSubscriptionAsync(RaidData raid); + + Task ProcessQuestSubscriptionAsync(QuestData quest); + + Task ProcessInvasionSubscriptionAsync(IncidentData pokestop); + + Task ProcessLureSubscriptionAsync(PokestopData pokestop); + + Task ProcessGymSubscriptionAsync(RaidData raid); + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/Models/BasePokemonSubscription.cs b/src/Services/Subscriptions/Models/BasePokemonSubscription.cs new file mode 100644 index 00000000..f4d092f9 --- /dev/null +++ b/src/Services/Subscriptions/Models/BasePokemonSubscription.cs @@ -0,0 +1,41 @@ +namespace WhMgr.Services.Subscriptions.Models +{ + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + + /// + /// Base Pokemon subscription class + /// + public abstract class BasePokemonSubscription : BaseSubscription + { + [ + JsonPropertyName("pokemon_id"), + Column("pokemon_id"), + Required, + ] + public List PokemonId { get; set; } = new(); + + [ + JsonPropertyName("forms"), + Column("forms"), + ] + public List Forms { get; set; } = new(); + + /* + [ + JsonPropertyName("costumes"), + Column("costumes"), + ] + public List Costumes { get; set; } = new(); + */ + + public BasePokemonSubscription() + { + PokemonId = new List(); + Forms = new List(); + //Costumes = new List(); + } + } +} diff --git a/src/Data/Subscriptions/Models/SubscriptionItem.cs b/src/Services/Subscriptions/Models/BaseSubscription.cs similarity index 56% rename from src/Data/Subscriptions/Models/SubscriptionItem.cs rename to src/Services/Subscriptions/Models/BaseSubscription.cs index 5901b36a..97f63de7 100644 --- a/src/Data/Subscriptions/Models/SubscriptionItem.cs +++ b/src/Services/Subscriptions/Models/BaseSubscription.cs @@ -1,21 +1,21 @@ -namespace WhMgr.Data.Subscriptions.Models +namespace WhMgr.Services.Subscriptions.Models { - using Newtonsoft.Json; - using ServiceStack.DataAnnotations; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; /// /// Base subscription object all subscription items inherit from /// - public abstract class SubscriptionItem + public abstract class BaseSubscription { /// /// Gets or sets the unique primary key Id for the subscription item /// [ - JsonIgnore,//JsonProperty("id"), - Alias("id"), - PrimaryKey, - AutoIncrement + JsonPropertyName("id"), + Column("id"), + Key, ] public int Id { get; set; } @@ -23,9 +23,9 @@ public abstract class SubscriptionItem /// Gets or sets the guild Id for the subscription item /// [ - JsonProperty("guild_id"), - Alias("guild_id"), - Required + JsonPropertyName("guild_id"), + Column("guild_id"), + Required, ] public virtual ulong GuildId { get; set; } @@ -33,9 +33,9 @@ public abstract class SubscriptionItem /// Gets or sets the user id for the subscription id /// [ - JsonProperty("user_id"), - Alias("user_id"), - Required + JsonPropertyName("user_id"), + Column("user_id"), + Required, ] public virtual ulong UserId { get; set; } } diff --git a/src/Services/Subscriptions/Models/GymSubscription.cs b/src/Services/Subscriptions/Models/GymSubscription.cs new file mode 100644 index 00000000..10d699eb --- /dev/null +++ b/src/Services/Subscriptions/Models/GymSubscription.cs @@ -0,0 +1,64 @@ +namespace WhMgr.Services.Subscriptions.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + + [Table("gyms")] + public class GymSubscription : BaseSubscription + { + [ + JsonPropertyName("subscription_id"), + Column("subscription_id"), + //ForeignKey(typeof(Subscription)), + ForeignKey("subscription_id"), + ] + public int SubscriptionId { get; set; } + + [JsonIgnore] + public Subscription Subscription { get; set; } + + [ + JsonPropertyName("name"), + Column("name"), + DefaultValue(null), + ] + public string Name { get; set; } + + [ + JsonPropertyName("min_level"), + Column("min_level"), + DefaultValue(0), + ] + public ushort MinimumLevel { get; set; } + + [ + JsonPropertyName("max_level"), + Column("max_level"), + DefaultValue(8), + ] + public ushort MaximumLevel { get; set; } + + [ + JsonPropertyName("pokemon_ids"), + Column("pokemon_ids"), + ] + public List PokemonIDs { get; set; } = new(); + + [ + JsonPropertyName("ex_eligible"), + Column("ex_eligible"), + DefaultValue(false), + ] + public bool IsExEligible { get; set; } + + [ + JsonPropertyName("location"), + Column("location"), + DefaultValue(null), + ] + public string Location { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/Models/InvasionSubscription.cs b/src/Services/Subscriptions/Models/InvasionSubscription.cs new file mode 100644 index 00000000..dc47845f --- /dev/null +++ b/src/Services/Subscriptions/Models/InvasionSubscription.cs @@ -0,0 +1,59 @@ + +namespace WhMgr.Services.Subscriptions.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + + [Table("invasions")] + public class InvasionSubscription : BaseSubscription + { + [ + JsonPropertyName("subscription_id"), + Column("subscription_id"), + //ForeignKey(typeof(Subscription)), + ForeignKey("subscription_id"), + ] + public int SubscriptionId { get; set; } + + [JsonIgnore] + public Subscription Subscription { get; set; } + + [ + JsonPropertyName("pokestop_name"), + Column("pokestop_name"), + DefaultValue(null), + ] + public string PokestopName { get; set; } + + [ + JsonPropertyName("grunt_type"), + Column("grunt_type"), + ] + public List InvasionType { get; set; } = new(); + + [ + JsonPropertyName("reward_pokemon_id"), + Column("reward_pokemon_id"), + ] + public List RewardPokemonId { get; set; } = new(); + + [ + JsonPropertyName("areas"), + Column("areas"), + ] + public List Areas { get; set; } = new(); + + [ + JsonPropertyName("location"), + Column("location"), + DefaultValue(null), + ] + public string Location { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/Models/LocationSubscription.cs b/src/Services/Subscriptions/Models/LocationSubscription.cs new file mode 100644 index 00000000..231b84a1 --- /dev/null +++ b/src/Services/Subscriptions/Models/LocationSubscription.cs @@ -0,0 +1,57 @@ +namespace WhMgr.Services.Subscriptions.Models +{ + using System; + using System.ComponentModel; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + + [Table("locations")] + public class LocationSubscription : BaseSubscription + { + [ + JsonPropertyName("subscription_id"), + Column("subscription_id"), + //ForeignKey(typeof(Subscription)), + ForeignKey("subscription_id"), + ] + public int SubscriptionId { get; set; } + + [JsonIgnore] + public Subscription Subscription { get; set; } + + [ + JsonPropertyName("name"), + Column("name"), + Required, + ] + public string Name { get; set; } + + [ + JsonPropertyName("distance"), + Column("distance"), + DefaultValue(0), + ] + public int DistanceM { get; set; } + + /// + /// Gets or sets the latitude to use with distance checks + /// + [ + JsonPropertyName("latitude"), + Column("latitude"), + DefaultValue(0), + ] + public double Latitude { get; set; } + + /// + /// Gets or sets the longitude to use with distance checks + /// + [ + JsonPropertyName("longitude"), + Column("longitude"), + DefaultValue(0), + ] + public double Longitude { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/Models/LureSubscription.cs b/src/Services/Subscriptions/Models/LureSubscription.cs new file mode 100644 index 00000000..0b3356e0 --- /dev/null +++ b/src/Services/Subscriptions/Models/LureSubscription.cs @@ -0,0 +1,53 @@ +namespace WhMgr.Services.Subscriptions.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + + using WhMgr.Common; + + [Table("lures")] + public class LureSubscription : BaseSubscription + { + [ + JsonPropertyName("subscription_id"), + Column("subscription_id"), + //ForeignKey(typeof(Subscription)), + ForeignKey("subscription_id"), + ] + public int SubscriptionId { get; set; } + + [JsonIgnore] + public Subscription Subscription { get; set; } + + [ + JsonPropertyName("pokestop_name"), + Column("pokestop_name"), + DefaultValue(null), + ] + public string PokestopName { get; set; } + + [ + JsonPropertyName("lure_type"), + Column("lure_type"), + Required, + ] + public List LureType { get; set; } = new(); + + [ + JsonPropertyName("areas"), + Column("areas"), + ] + public List Areas { get; set; } = new(); + + [ + JsonPropertyName("location"), + Column("location"), + DefaultValue(null), + ] + public string Location { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/Models/Metadata.cs b/src/Services/Subscriptions/Models/Metadata.cs new file mode 100644 index 00000000..85e6c780 --- /dev/null +++ b/src/Services/Subscriptions/Models/Metadata.cs @@ -0,0 +1,22 @@ +namespace WhMgr.Services.Subscriptions.Models +{ + using System.ComponentModel; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + + [Table("metadata")] + public class Metadata + { + [ + Column("key"), + Key + ] + public string Key { get; set; } + + [ + Column("value"), + DefaultValue(null) + ] + public string Value { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/Models/NotificationStatusType.cs b/src/Services/Subscriptions/Models/NotificationStatusType.cs new file mode 100644 index 00000000..dd1a00ef --- /dev/null +++ b/src/Services/Subscriptions/Models/NotificationStatusType.cs @@ -0,0 +1,24 @@ +namespace WhMgr.Services.Subscriptions.Models +{ + using System; + + [Flags] + public enum NotificationStatusType : byte + { + None = 0x0, + Pokemon = 0x1, + PvP = 0x2, + Raids = 0x4, + Quests = 0x8, + Invasions = 0x10, + Lures = 0x20, + Gyms = 0x40, + All = Pokemon + | PvP + | Raids + | Quests + | Invasions + | Lures + | Gyms, + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/Models/PokemonSubscription.cs b/src/Services/Subscriptions/Models/PokemonSubscription.cs new file mode 100644 index 00000000..35f784ef --- /dev/null +++ b/src/Services/Subscriptions/Models/PokemonSubscription.cs @@ -0,0 +1,124 @@ +namespace WhMgr.Services.Subscriptions.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + using System.Text.Json.Serialization; + + using WhMgr.Common; + + [Table("pokemon")] + public class PokemonSubscription : BasePokemonSubscription + { + #region Properties + + [ + JsonPropertyName("subscription_id"), + Column("subscription_id"), + //ForeignKey(typeof(Subscription)), + ForeignKey("subscription_id"), + ] + public int SubscriptionId { get; set; } + + [JsonIgnore] + public Subscription Subscription { get; set; } + + [ + JsonPropertyName("min_cp"), + Column("min_cp"), + DefaultValue(0), + ] + public int MinimumCP { get; set; } + + [ + JsonPropertyName("max_cp"), + Column("max_cp"), + DefaultValue(int.MaxValue), + ] + public int MaximumCP { get; set; } + + [ + JsonPropertyName("min_iv"), + Column("min_iv"), + DefaultValue(0), + ] + public int MinimumIV { get; set; } + + // TODO: Maximum IV (maybe) + + [ + JsonPropertyName("iv_list"), + Column("iv_list"), + ] + public List IVList { get; set; } = new(); + + [ + JsonPropertyName("min_lvl"), + Column("min_lvl"), + DefaultValue(0), + ] + public int MinimumLevel { get; set; } + + [ + JsonPropertyName("max_lvl"), + Column("max_lvl"), + DefaultValue(35), + ] + public int MaximumLevel { get; set; } + + // TODO: Moves + + [ + JsonPropertyName("gender"), + Column("gender"), + DefaultValue('*'), + ] + public char Gender { get; set; } + + [ + JsonPropertyName("size"), + Column("size"), + DefaultValue((uint)PokemonSize.All), + ] + public PokemonSize Size { get; set; } + + [ + JsonPropertyName("areas"), + Column("areas"), + ] + public List Areas { get; set; } = new(); + + [ + JsonPropertyName("location"), + Column("location"), + DefaultValue(null), + ] + public string Location { get; set; } + + [ + JsonIgnore, + NotMapped + ] + public bool HasIVStats => IVList?.Any() ?? false; + + #endregion + + #region Constructor + + public PokemonSubscription() + { + MinimumCP = 0; + MaximumCP = int.MaxValue; + MinimumIV = 0; + MinimumLevel = 0; + MaximumLevel = 35; + Gender = '*'; + Size = PokemonSize.All; + PokemonId = new List(); + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/Models/PvpSubscriptions.cs b/src/Services/Subscriptions/Models/PvpSubscriptions.cs new file mode 100644 index 00000000..4ddd52ac --- /dev/null +++ b/src/Services/Subscriptions/Models/PvpSubscriptions.cs @@ -0,0 +1,98 @@ +namespace WhMgr.Services.Subscriptions.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + + using WhMgr.Common; + using WhMgr.Configuration; + using WhMgr.Services.Alarms.Filters; + using WhMgr.Services.Webhook.Models; + + [Table("pvp")] + public class PvpSubscription : BasePokemonSubscription + { + [ + JsonPropertyName("subscription_id"), + Column("subscription_id"), + //ForeignKey(typeof(Subscription)) + ForeignKey("subscription_id"), + ] + public int SubscriptionId { get; set; } + + [JsonIgnore] + public Subscription Subscription { get; set; } + + [ + JsonPropertyName("gender"), + Column("gender"), + DefaultValue('*'), + Required, + ] + public char Gender { get; set; } + + [ + JsonPropertyName("league"), + Column("league"), + Required, + ] + public PvpLeague League { get; set; } + + [ + JsonPropertyName("min_rank"), + Column("min_rank"), + DefaultValue(25), + ] + public int MinimumRank { get; set; } + + [ + JsonPropertyName("min_percent"), + Column("min_percent"), + DefaultValue(90.0), + ] + public double MinimumPercent { get; set; } + + [ + JsonPropertyName("areas"), + Column("areas"), + ] + public List Areas { get; set; } = new(); + + [ + JsonPropertyName("location"), + Column("location"), + DefaultValue(null), + ] + public string Location { get; set; } + + public PvpSubscription() + { + Gender = '*'; + League = PvpLeague.Other; + } + + #region Public Methods + + public bool RankExists(List rankData, PvpLeague league, PvpLeagueConfig config) + { + return rankData?.Exists(rank => RankExists(rank, league, config.MinimumCP, config.MaximumCP)) ?? false; + } + + public bool RankExists(PvpRankData rankData, PvpLeague league, ushort minLeagueCP, ushort maxLeagueCP) + { + var cp = rankData.CP ?? Strings.Defaults.MinimumCP; + var rank = rankData.Rank ?? 4096; + var matchesGender = Filters.MatchesGender(rankData.Gender, string.IsNullOrEmpty(Gender.ToString()) ? '*' : Gender); + var matchesLeague = League == league; + var matchesCP = Filters.MatchesCP(cp, minLeagueCP, maxLeagueCP); + var matchesRank = rank <= MinimumRank; + //var matchesPercentage = (x.Percentage ?? 0) * 100 >= pkmnSub.MinimumPercent; + return matchesLeague && matchesCP && matchesRank && matchesGender; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/Models/QuestSubscriptions.cs b/src/Services/Subscriptions/Models/QuestSubscriptions.cs new file mode 100644 index 00000000..a78153ce --- /dev/null +++ b/src/Services/Subscriptions/Models/QuestSubscriptions.cs @@ -0,0 +1,51 @@ +namespace WhMgr.Services.Subscriptions.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + + [Table("quests")] + public class QuestSubscription : BaseSubscription + { + [ + JsonPropertyName("subscription_id"), + Column("subscription_id"), + //ForeignKey(typeof(Subscription)), + ForeignKey("subscription_id"), + ] + public int SubscriptionId { get; set; } + + [JsonIgnore] + public Subscription Subscription { get; set; } + + [ + JsonPropertyName("pokestop_name"), + Column("pokestop_name"), + DefaultValue(null), + ] + public string PokestopName { get; set; } + + [ + JsonPropertyName("reward"), + Column("reward"), + Required, + ] + public string RewardKeyword { get; set; } + + [ + JsonPropertyName("areas"), + Column("areas"), + ] + public List Areas { get; set; } = new(); + + [ + JsonPropertyName("location"), + Column("location"), + DefaultValue(null), + ] + public string Location { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/Models/RaidSubscription.cs b/src/Services/Subscriptions/Models/RaidSubscription.cs new file mode 100644 index 00000000..79240af9 --- /dev/null +++ b/src/Services/Subscriptions/Models/RaidSubscription.cs @@ -0,0 +1,43 @@ +namespace WhMgr.Services.Subscriptions.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + + [Table("raids")] + public class RaidSubscription : BasePokemonSubscription + { + [ + JsonPropertyName("subscription_id"), + Column("subscription_id"), + //ForeignKey(typeof(Subscription)), + ForeignKey("subscription_id"), + ] + public int SubscriptionId { get; set; } + + [JsonIgnore] + public Subscription Subscription { get; set; } + + [ + JsonPropertyName("ex_eligible"), + Column("ex_eligible"), + DefaultValue(false), + ] + public bool IsExEligible { get; set; } + + [ + JsonPropertyName("areas"), + Column("areas"), + ] + public List Areas { get; set; } = new(); + + [ + JsonPropertyName("location"), + Column("location"), + DefaultValue(null), + ] + public string Location { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/Models/Subscription.cs b/src/Services/Subscriptions/Models/Subscription.cs new file mode 100644 index 00000000..293d8a74 --- /dev/null +++ b/src/Services/Subscriptions/Models/Subscription.cs @@ -0,0 +1,195 @@ +namespace WhMgr.Services.Subscriptions.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq; + using System.Text.Json.Serialization; + + using WhMgr.Extensions; + using WhMgr.Services.Geofence; + + /// + /// User subscription class + /// + [Table("subscriptions")] + public class Subscription : BaseSubscription + { + /// + /// Gets or sets a value determining whether the associated users + /// subscriptions are enabled or not + /// + [ + JsonPropertyName("status"), + Column("status"), + DefaultValue((int)NotificationStatusType.All), + ] + public NotificationStatusType Status { get; set; } + + /// + /// Gets or sets the Pokemon subscriptions + /// + [ + JsonPropertyName("pokemon"), + Column("pokemon"), + //Reference, + ] + public ICollection Pokemon { get; set; } + + /// + /// Gets or sets the PvP Pokemon subscriptions + /// + [ + JsonPropertyName("pvp"), + Column("pvp"), + //Reference, + ] + public ICollection PvP { get; set; } + + /// + /// Gets or sets the Raid subscriptions + /// + [ + JsonPropertyName("raids"), + Column("raids"), + //Reference, + ] + public ICollection Raids { get; set; } + + /// + /// Gets or sets the Gym subscriptions to use with Raid subscriptions + /// + [ + JsonPropertyName("gyms"), + Column("gyms"), + //Reference, + ] + public ICollection Gyms { get; set; } + + /// + /// Gets or sets the Quest subscriptions + /// + [ + JsonPropertyName("quests"), + Column("quests"), + //Reference, + ] + public ICollection Quests { get; set; } + + /// + /// Gets or sets the Team Rocket Invasion subscriptions + /// + [ + JsonPropertyName("invasions"), + Column("invasions"), + //Reference, + ] + public ICollection Invasions { get; set; } + + /// + /// Gets or sets the distance in meters a subscription should be within + /// to trigger + /// + [ + JsonPropertyName("lures"), + Column("lures"), + //Reference, + ] + public ICollection Lures { get; set; } + + [ + JsonPropertyName("locations"), + Column("locations"), + //Reference, + ] + public ICollection Locations { get; set; } + + [ + JsonPropertyName("location"), + Column("location"), + DefaultValue(null), + ] + public string Location { get; set; } + + /// + /// Gets or sets the icon style to use for the subscription notification + /// + [ + JsonPropertyName("icon_style"), + Column("icon_style"), + DefaultValue("Default"), + ] + public string IconStyle { get; set; } + + /// + /// Gets or sets the phone number to send ultra rare Pokemon notifications to + /// + [ + JsonPropertyName("phone_number"), + Column("phone_number"), + DefaultValue(null), + ] + public string PhoneNumber { get; set; } + + /// + /// Gets the class associated with the subscription + /// + [ + JsonIgnore, + NotMapped, + ] + public NotificationLimiter Limiter { get; } + + /// + /// Instantiates a new subscription object + /// + public Subscription() + { + Status = NotificationStatusType.All; + Limiter = new NotificationLimiter(); + IconStyle = "Default"; + PhoneNumber = string.Empty; + } + + #region Notification Status Methods + + public bool IsEnabled(NotificationStatusType status) + { + return (Status & status) == status; + } + + public void EnableNotificationType(NotificationStatusType status) + { + Status |= status; + } + + public void DisableNotificationType(NotificationStatusType status) + { + Status &= (~status); + } + + #endregion + + public bool IsNearby(Coordinate coord, bool checkGeofence = false, string webhookGeofenceName = null, List areas = null, string geofenceName = null) + { + var globalLocation = Locations?.FirstOrDefault(location => string.Compare(location.Name, Location, true) == 0); + var webhookLocation = Locations?.FirstOrDefault(location => string.Compare(location.Name, webhookGeofenceName, true) == 0); + var globalDistanceMatches = globalLocation?.DistanceM > 0 + && globalLocation?.DistanceM > new Coordinate(globalLocation?.Latitude ?? 0, globalLocation?.Longitude ?? 0).DistanceTo(coord); + var webhookDistanceMatches = webhookLocation?.DistanceM > 0 + && webhookLocation?.DistanceM > new Coordinate(webhookLocation?.Latitude ?? 0, webhookLocation?.Longitude ?? 0).DistanceTo(coord); + + // Skip if set distance does not match and no geofences match... + var matchesLocation = globalDistanceMatches || webhookDistanceMatches; + if (checkGeofence) + { + var geofenceNameLower = geofenceName.ToLower(); + var matchesGeofence = areas?.Select(area => area.ToLower()) + .Contains(geofenceNameLower) ?? false; + return matchesGeofence || matchesLocation; + } + return matchesLocation; + } + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/SubscriptionManagerService.cs b/src/Services/Subscriptions/SubscriptionManagerService.cs new file mode 100644 index 00000000..cb756076 --- /dev/null +++ b/src/Services/Subscriptions/SubscriptionManagerService.cs @@ -0,0 +1,345 @@ +namespace WhMgr.Services.Subscriptions +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Timers; + using System.Threading.Tasks; + + using Microsoft.EntityFrameworkCore; + //using Microsoft.Extensions.Logging; + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + + using WhMgr.Common; + using WhMgr.Data.Contexts; + using WhMgr.Extensions; + using WhMgr.Services.Subscriptions.Models; + + public class SubscriptionManagerService : ISubscriptionManagerService + { + private readonly Microsoft.Extensions.Logging.ILogger _logger; + private readonly IDbContextFactory _dbFactory; + private List _subscriptions; + private readonly Timer _timer; + + public IReadOnlyList Subscriptions => _subscriptions; + + public SubscriptionManagerService( + Microsoft.Extensions.Logging.ILogger logger, + IDbContextFactory dbFactory) + { + _logger = logger; + _dbFactory = dbFactory; + + _timer = new Timer(60 * 1000); // every minute TODO: Use config value + _timer.Elapsed += async (_, _) => await ReloadSubscriptionsAsync(); + _timer.Start(); + + Task.Run(async () => await ReloadSubscriptionsAsync(skipCheck: true)); + } + + #region Get Subscriptions + + public async Task> GetUserSubscriptionsAsync() + { + using var ctx = _dbFactory.CreateDbContext(); + _subscriptions = await ctx.Subscriptions.Where(s => s.Status != NotificationStatusType.None) + // Include Pokemon subscriptions + .Include(s => s.Pokemon) + // Include PvP subscriptions + .Include(s => s.PvP) + // Include Raid subscriptions + .Include(s => s.Raids) + // Include Quest subscriptions + .Include(s => s.Quests) + // Include Invasion subscriptions + .Include(s => s.Invasions) + // Include Lure subscriptions + .Include(s => s.Lures) + // Include Gym subscriptions + .Include(s => s.Gyms) + // Include Location subscriptions + .Include(s => s.Locations) + .ToListAsync(); + return _subscriptions; + } + + public Subscription GetUserSubscriptions(ulong guildId, ulong userId) + { + return _subscriptions?.FirstOrDefault(sub => sub.GuildId == guildId && sub.UserId == userId); + } + + #region Get By Subscription Type + + public List GetSubscriptionsByPokemonId(uint pokemonId) + { + return _subscriptions? + .Where(sub => sub.IsEnabled(NotificationStatusType.Pokemon) && + sub.Pokemon != null && + sub.Pokemon.Any(poke => poke.PokemonId.Contains(pokemonId)) + ) + .ToList(); + } + + public List GetSubscriptionsByPvpPokemonId(uint pokemonId) + { + return GetSubscriptionsByPvpPokemonId(new List { pokemonId }); + } + + public List GetSubscriptionsByPvpPokemonId(List pokemonIds) + { + return _subscriptions? + .Where(sub => sub.IsEnabled(NotificationStatusType.PvP) && + sub.PvP != null && + sub.PvP.Any(pvp => pvp.PokemonId.Exists(pokeId => pokemonIds.Contains(pokeId))) + ) + .ToList(); + } + + public List GetSubscriptionsByRaidPokemonId(uint pokemonId) + { + return _subscriptions? + .Where(sub => sub.IsEnabled(NotificationStatusType.Raids) && + sub.Raids != null && + sub.Raids.Any(raid => raid.PokemonId.Contains(pokemonId)) + ) + .ToList(); + } + + public List GetSubscriptionsByQuest(string pokestopName, string reward) + { + return _subscriptions? + .Where(sub => sub.IsEnabled(NotificationStatusType.Quests) && + sub.Quests != null && + sub.Quests.Any(quest => + // Check if quest contains quest subscription reward keyword + reward.Contains(quest.RewardKeyword) + // Otherwise check if pokestop name is set and contains or matches quest + // subscriptions desired pokestop name + || ( + ( + !string.IsNullOrEmpty(quest.PokestopName) + && (pokestopName.Contains(quest.PokestopName) + ) + || string.Equals(pokestopName, quest.PokestopName, StringComparison.OrdinalIgnoreCase) + ) + ) + ) + ).ToList(); + } + + public List GetSubscriptionsByInvasion(string pokestopName, InvasionCharacter gruntType, List encounterRewards) + { + return _subscriptions? + .Where(sub => sub.IsEnabled(NotificationStatusType.Invasions) && + sub.Invasions != null && + sub.Invasions.Any(invasion => + { + var subPokestopName = invasion.PokestopName; + var rewardMatches = invasion.RewardPokemonId.Intersects(encounterRewards); + var typeMatches = invasion.InvasionType.Contains(gruntType) && gruntType != InvasionCharacter.CharacterUnset; + var pokestopMatches = !string.IsNullOrWhiteSpace(subPokestopName) && !string.IsNullOrWhiteSpace(pokestopName) && + ( + pokestopName.Contains(subPokestopName) + || string.Equals(pokestopName, subPokestopName, StringComparison.OrdinalIgnoreCase) + ); + return rewardMatches || typeMatches || pokestopMatches; + }) + ) + .ToList(); + } + + public List GetSubscriptionsByLure(string pokestopName, PokestopLureType lureType) + { + return _subscriptions? + .Where(sub => sub.IsEnabled(NotificationStatusType.Lures) && + sub.Lures != null && + sub.Lures.Any(lure => + lure.LureType?.Contains(lureType) ?? false + || ( + !string.IsNullOrWhiteSpace(lure.PokestopName) & + !string.IsNullOrWhiteSpace(pokestopName) + && ( + pokestopName.Contains(lure.PokestopName) + || string.Equals(pokestopName, lure.PokestopName, StringComparison.OrdinalIgnoreCase) + ) + ) + ) + ) + .ToList(); + } + + public List GetSubscriptionsByGymName(string name) + { + return _subscriptions? + .Where(sub => sub.IsEnabled(NotificationStatusType.Gyms) && + sub.Gyms != null && + sub.Gyms.Any(gym => + string.Equals(name, gym.Name, StringComparison.OrdinalIgnoreCase) + || gym.Name.ToLower().Contains(name.ToLower()) + ) + ) + .ToList(); + } + + #endregion + + #endregion + + #region General Subscription Management + + public async Task CreateSubscriptionAsync(TEntity subscription) where TEntity : BaseSubscription + { + using var ctx = _dbFactory.CreateDbContext(); + ctx.Add(subscription); + var result = await ctx.SaveChangesAsync(); + return result == 1; + } + + public async Task UpdateSubscriptionAsync(int id, TEntity subscription) where TEntity : BaseSubscription + { + // TODO: UpdateSubscriptionAsync + await Task.CompletedTask; + return true; + } + + public TEntity FindById(int id) where TEntity : BaseSubscription + { + using var ctx = _dbFactory.CreateDbContext(); + var result = ctx.Find(id); + return result; + } + + public async Task FindByIdAsync(int id) where TEntity : BaseSubscription + { + using var ctx = _dbFactory.CreateDbContext(); + var result = await ctx.FindAsync(id); + return result; + } + + public bool DeleteById(int id) where TEntity : BaseSubscription + { + using var ctx = _dbFactory.CreateDbContext(); + ctx.Remove(id); + var result = ctx.SaveChanges(); + return result == 1; + } + + public async Task DeleteByIdAsync(int id) where TEntity : BaseSubscription + { + using var ctx = _dbFactory.CreateDbContext(); + ctx.Remove(id); + var result = await ctx.SaveChangesAsync(); + return result == 1; + } + + #endregion + + // TODO: Return amount deleted + public async Task RemoveAllUserSubscriptionsAsync(int subscriptionId) + { + using (var ctx = _dbFactory.CreateDbContext()) + { + var subscription = await ctx.Subscriptions.FindAsync(subscriptionId); + if (subscription == null) + { + _logger.Error($"Failed to get user subscription in order to disable or remove all subscriptions for '{subscriptionId}'"); + return; + } + + try + { + ctx.RemoveRange(subscription.Pokemon); + ctx.RemoveRange(subscription.PvP); + ctx.RemoveRange(subscription.Raids); + ctx.RemoveRange(subscription.Quests); + ctx.RemoveRange(subscription.Lures); + ctx.RemoveRange(subscription.Invasions); + ctx.RemoveRange(subscription.Gyms); + ctx.RemoveRange(subscription.Locations); + ctx.Remove(subscription); + await ctx.SaveChangesAsync(); + } + catch (Exception ex) + { + _logger.Error($"Failed to delete user subscriptions for '{subscriptionId}': {ex}"); + } + } + } + + public async Task SetSubscriptionStatusAsync(int subscriptionId, NotificationStatusType status) + { + using var ctx = _dbFactory.CreateDbContext(); + var subscription = await ctx.Subscriptions.FindAsync(subscriptionId); + if (subscription == null) + { + // Failed to find subscription by id + _logger.Error($"Failed to find subscription by id in order to set subscription status to: {status}"); + return; + } + subscription.Status = status; + await ctx.SaveChangesAsync(true); + + await ReloadSubscriptionsAsync(skipCheck: true); + } + + public async Task SaveAsync(Subscription subscription) + { + // Save subscription changes + try + { + using (var ctx = _dbFactory.CreateDbContext()) + { + ctx.Update(subscription); + await ctx.SaveChangesAsync(true); + } + return true; + } + catch (Exception ex) + { + _logger.Error($"Failed to save subscription with id {subscription.Id} (UserId: {subscription.UserId}, GuildId: {subscription.GuildId}): {ex}"); + return false; + } + } + + /// + /// Reload all user subscriptions + /// + public async Task ReloadSubscriptionsAsync(bool skipCheck = false, ushort reloadM = 5) + { + try + { + // Only reload based on last_changed timestamp in metadata table + var lastModifiedTimestamp = GetLastModifiedTimestamp(); + var utcNow = DateTime.UtcNow.GetUnixTimestamp(); + var reloadMinutesMs = reloadM * 60 * 60; + var delta = utcNow - lastModifiedTimestamp; + + // Check if last_modified was set within the last x minutes + if (!skipCheck && delta > reloadMinutesMs) + return; + + // Updated, reload subscriptions + var subs = await GetUserSubscriptionsAsync(); + if (subs == null) + return; + + _subscriptions = subs; + + _logger.Information("User subscriptions list reloaded."); + } + catch (Exception ex) + { + _logger.Error($"Failed to reload user subscriptions: {ex}"); + } + } + + private ulong GetLastModifiedTimestamp() + { + using var ctx = _dbFactory.CreateDbContext(); + var lastModified = ctx.Metadata.Find("LAST_MODIFIED"); + var result = Convert.ToUInt64(Math.Round(double.TryParse(lastModified?.Value, out var value) ? value : 0)); + return result; + } + } +} \ No newline at end of file diff --git a/src/Services/Subscriptions/SubscriptionProcessorService.cs b/src/Services/Subscriptions/SubscriptionProcessorService.cs new file mode 100644 index 00000000..6d69351c --- /dev/null +++ b/src/Services/Subscriptions/SubscriptionProcessorService.cs @@ -0,0 +1,1380 @@ +namespace WhMgr.Services.Subscriptions +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + + using DSharpPlus; + using DSharpPlus.Entities; + //using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Hosting; + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + + using WhMgr.Common; + using WhMgr.Configuration; + using WhMgr.Data; + using WhMgr.Extensions; + using WhMgr.HostedServices.TaskQueue; + using WhMgr.Localization; + using WhMgr.Queues; + using WhMgr.Services.Alarms; + using WhMgr.Services.Alarms.Filters; + using WhMgr.Services.Cache; + using WhMgr.Services.Discord; + using WhMgr.Services.Geofence; + using WhMgr.Services.Subscriptions.Models; + using WhMgr.Services.Webhook.Models; + + public class SubscriptionProcessorService : BackgroundService, ISubscriptionProcessorService + { + private readonly Microsoft.Extensions.Logging.ILogger _logger; + private readonly ISubscriptionManagerService _subscriptionManager; + private readonly ConfigHolder _config; + private readonly IDiscordClientService _discordService; + private readonly IMapDataCache _mapDataCache; + private readonly IStaticsticsService _statsService; + private readonly IBackgroundTaskQueue _taskQueue; + private readonly Dictionary _rateLimitedMessagesSent; // subscription_id -> rateLimitedMessageSent + + // TODO: Add BenchmarkTimes property in config + public bool BenchmarkTimes { get; set; } + + public SubscriptionProcessorService( + Microsoft.Extensions.Logging.ILogger logger, + ISubscriptionManagerService subscriptionManager, + ConfigHolder config, + IDiscordClientService discordService, + IMapDataCache mapDataCache, + IStaticsticsService statsService, + IBackgroundTaskQueue taskQueue) + { + _logger = logger; + _subscriptionManager = subscriptionManager; + _config = config; + _discordService = discordService; + _mapDataCache = mapDataCache; + _statsService = statsService; + _taskQueue = (DefaultBackgroundTaskQueue)taskQueue; + _rateLimitedMessagesSent = new(); + } + + #region Subscription Processing + + public async Task ProcessPokemonSubscriptionAsync(PokemonData pokemon) + { + if (!IsValidPokedexPokemon(pokemon.PokemonId)) + return; + + // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below + var locationCache = new Dictionary(); + var pkmnCoord = new Coordinate(pokemon); + Geofence GetGeofence(ulong guildId) + { + if (!locationCache.TryGetValue(guildId, out var geofence)) + { + var geofences = _config.Instance.Servers[guildId].Geofences; + geofence = GeofenceService.GetGeofence(geofences, pkmnCoord); + locationCache.Add(guildId, geofence); + } + return geofence; + } + + var subscriptions = _subscriptionManager.GetSubscriptionsByPokemonId(pokemon.PokemonId); + if (subscriptions == null || subscriptions?.Count == 0) + { + //_logger.Warning($"Failed to get subscriptions from database table."); + return; + } + + Subscription user; + DiscordMember member = null; + var pkmn = GameMaster.GetPokemon(pokemon.PokemonId, pokemon.FormId); + var matchesIV = false; + var matchesCP = false; + var matchesLvl = false; + var matchesGender = false; + var matchesIVList = false; + for (var i = 0; i < subscriptions.Count; i++) + { + try + { + var start = DateTime.Now; + user = subscriptions[i]; + + // Skip if user's guild is not configured or connected + if (!DiscordExists(user.GuildId, _config.Instance.Servers, _discordService.DiscordClients)) + continue; + + var client = _discordService.DiscordClients[user.GuildId]; + + try + { + member = await client.GetMemberByIdAsync(user.GuildId, user.UserId); + } + catch (Exception ex) + { + _logger.Debug($"FAILED TO GET MEMBER BY ID {user.UserId}"); + _logger.Error(ex.ToString()); + continue; + } + + // Check donor role access for Pokemon + if (!IsSubscriberValid(member, _config.Instance.Servers[user.GuildId].DonorRoleIds, SubscriptionAccessType.Pokemon)) + { + _logger.Debug($"User {member?.Username} ({user.UserId}) is not a supporter, skipping pokemon {pkmn.Name}..."); + continue; + } + + var form = Translator.Instance.GetFormName(pokemon.FormId); + var pokemonSubscriptions = GetFilteredPokemonSubscriptions((HashSet)user.Pokemon, pokemon.PokemonId, form); + if (pokemonSubscriptions == null) + continue; + + foreach (var pkmnSub in pokemonSubscriptions) + { + matchesIV = Filters.MatchesIV(pokemon.IV, (uint)pkmnSub.MinimumIV, 100); + matchesCP = Filters.MatchesCP(pokemon.CP, (uint)pkmnSub.MinimumCP, (uint)pkmnSub.MaximumCP); + matchesLvl = Filters.MatchesLvl(pokemon.Level, (uint)pkmnSub.MinimumLevel, (uint)pkmnSub.MaximumLevel); + matchesGender = Filters.MatchesGender(pokemon.Gender, pkmnSub.Gender); + matchesIVList = IvListMatches(pkmnSub.IVList, pokemon); + + if (!matchesCP) + continue; + + // If no IV list specified check whole IV value, otherwise ignore whole IV value and only check IV list. + if (!( + (!pkmnSub.HasIVStats && matchesIV && matchesLvl && matchesGender) || + (pkmnSub.HasIVStats && matchesIVList) + )) + continue; + + var pokemonSize = pokemon.PokemonId.GetSize(pokemon.Height ?? 0, pokemon.Weight ?? 0); + if (!pokemon.IsMissingStats && pkmn.Height != null && pkmn.Weight != null + && !Filters.MatchesSize(pokemonSize, pkmnSub.Size)) + { + // Pokemon doesn't match size + continue; + } + + var geofence = GetGeofence(user.GuildId); + if (geofence == null) + { + //_logger.LogWarning($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); + continue; + } + + // Skip if not nearby or within set global location, individual subscription locations, or geofence does not match + if (!user.IsNearby(pkmnCoord, true, pkmnSub.Location, pkmnSub.Areas, geofence.Name.ToLower())) + continue; + + var embed = await pokemon.GenerateEmbedMessageAsync(new AlarmMessageSettings + { + GuildId = user.GuildId, + Client = client, + Config = _config, + Alarm = null, + City = geofence.Name, + MapDataCache = _mapDataCache, + }).ConfigureAwait(false); + + embed.Embeds.ForEach(async item => await EnqueueEmbedAsync(new NotificationItem + { + Subscription = user, + Member = member, + Embed = item.GenerateDiscordMessage(), + Description = pkmn.Name, + City = geofence.Name, + Pokemon = pokemon, + })); + + _statsService.TotalPokemonSubscriptionsSent++; + Thread.Sleep(5); + } + + if (BenchmarkTimes) + { + var end = DateTime.Now.Subtract(start); + _logger.Debug($"Took {end} to process Pokemon subscription for user {user.UserId}"); + } + } + catch (Exception ex) + { + _logger.Error(ex.ToString()); + } + } + + subscriptions.Clear(); + subscriptions = null; + member = null; + user = null; + pokemon = null; + + await Task.CompletedTask; + } + + public async Task ProcessPvpSubscriptionAsync(PokemonData pokemon) + { + if (!IsValidPokedexPokemon(pokemon.PokemonId)) + return; + + // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below + var locationCache = new Dictionary(); + var pkmnCoord = new Coordinate(pokemon); + Geofence GetGeofence(ulong guildId) + { + if (!locationCache.TryGetValue(guildId, out var geofence)) + { + var geofences = _config.Instance.Servers[guildId].Geofences; + geofence = GeofenceService.GetGeofence(geofences, pkmnCoord); + locationCache.Add(guildId, geofence); + } + return geofence; + } + + var pkmn = GameMaster.GetPokemon(pokemon.PokemonId, pokemon.FormId); + var evolutionIds = pkmn.GetPokemonEvolutionIds(); + // PvP subscriptions support for evolutions not just base evo + // Get evolution ids from masterfile for incoming pokemon, check if subscriptions for evo/base + var subscriptions = _subscriptionManager.GetSubscriptionsByPvpPokemonId(evolutionIds); + if (subscriptions == null || subscriptions?.Count == 0) + { + //_logger.Warning($"Failed to get subscriptions from database table."); + return; + } + + Subscription user; + DiscordMember member = null; + for (var i = 0; i < subscriptions.Count; i++) + { + try + { + var start = DateTime.Now; + user = subscriptions[i]; + + // Skip if user's guild is not configured or connected + if (!DiscordExists(user.GuildId, _config.Instance.Servers, _discordService.DiscordClients)) + continue; + + var client = _discordService.DiscordClients[user.GuildId]; + + try + { + member = await client.GetMemberByIdAsync(user.GuildId, user.UserId); + } + catch (Exception ex) + { + _logger.Debug($"FAILED TO GET MEMBER BY ID {user.UserId}"); + _logger.Error($"Error: {ex}"); + continue; + } + + // Check donor role access for PvP + if (!IsSubscriberValid(member, _config.Instance.Servers[user.GuildId].DonorRoleIds, SubscriptionAccessType.PvP)) + { + _logger.Debug($"User {member?.Username} ({user.UserId}) is not a supporter, skipping pvp pokemon {pkmn.Name}..."); + continue; + } + + var form = Translator.Instance.GetFormName(pokemon.FormId); + var pokemonSubscriptions = GetFilteredPokemonSubscriptions((HashSet)user.PvP, pokemon.PokemonId, form, evolutionIds); + if (pokemonSubscriptions == null) + continue; + + var validPvpLeagues = Startup.Config.PvpLeagues; + foreach (var pkmnSub in pokemonSubscriptions) + { + // TODO: Combine filtered and matchesAny + + // Filter Pokemon PvP rankings based on user subscription settings + var filtered = pokemon.PvpRankings?.Where(pvp => + { + (PvpLeague pokemonPvpLeague, List ranks) = pvp; + + // Skip if PvP subscription's league does not match set Pokemon rank league + if (pokemonPvpLeague != pkmnSub.League) + return false; + + // Only return PvP subscriptions that are equal to the Pokemon's rank + return ranks.Exists(rank => pkmnSub.PokemonId.Contains(rank.PokemonId)); + }).ToList(); + + // Skip any pvp ranks that do not match evolutions + if (filtered.Count == 0) + continue; + + // Check if PvP ranks match any relevant great or ultra league ranks, if not skip. + var matchesAny = filtered.Any(pvp => + { + (PvpLeague league, List ranks) = pvp; + + // Check if league set in config + if (!validPvpLeagues.ContainsKey(league)) + return false; + + return pkmnSub.RankExists(ranks, league, validPvpLeagues[league]); + }); + + // Skip if no relevent ranks for set PvP leagues. + if (!matchesAny) + continue; + + var geofence = GetGeofence(user.GuildId); + if (geofence == null) + { + //_logger.Warn($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); + continue; + } + + // Skip if not nearby or within set global location, individual subscription locations, or geofence does not match + if (!user.IsNearby(pkmnCoord, true, pkmnSub.Location, pkmnSub.Areas, geofence.Name.ToLower())) + continue; + + var embed = await pokemon.GenerateEmbedMessageAsync(new AlarmMessageSettings + { + GuildId = user.GuildId, + Client = client, + Config = _config, + Alarm = null, + City = geofence.Name, + MapDataCache = _mapDataCache, + }).ConfigureAwait(false); + embed.Embeds.ForEach(async item => await EnqueueEmbedAsync(new NotificationItem + { + Subscription = user, + Member = member, + Embed = item.GenerateDiscordMessage(), + Description = pkmn.Name, + City = geofence.Name, + })); + + _statsService.TotalPvpSubscriptionsSent++; + Thread.Sleep(5); + } + + if (BenchmarkTimes) + { + var end = DateTime.Now.Subtract(start); + _logger.Debug($"Took {end} to process PvP subscription for user {user.UserId}"); + } + } + catch (Exception ex) + { + _logger.Error($"Error: {ex}"); + } + } + + subscriptions.Clear(); + subscriptions = null; + member = null; + user = null; + pokemon = null; + + await Task.CompletedTask; + } + + public async Task ProcessRaidSubscriptionAsync(RaidData raid) + { + if (!IsValidPokedexPokemon(raid.PokemonId)) + return; + + // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below + var locationCache = new Dictionary(); + var raidCoord = new Coordinate(raid); + Geofence GetGeofence(ulong guildId) + { + if (!locationCache.TryGetValue(guildId, out var geofence)) + { + var geofences = _config.Instance.Servers[guildId].Geofences; + geofence = GeofenceService.GetGeofence(geofences, raidCoord); + locationCache.Add(guildId, geofence); + } + return geofence; + } + + var subscriptions = _subscriptionManager.GetSubscriptionsByRaidPokemonId(raid.PokemonId); + if (subscriptions == null || subscriptions?.Count == 0) + { + //_logger.Warning($"Failed to get subscriptions from database table."); + return; + } + + Subscription user; + var pokemon = GameMaster.GetPokemon(raid.PokemonId, raid.FormId); + for (var i = 0; i < subscriptions.Count; i++) + { + try + { + var start = DateTime.Now; + user = subscriptions[i]; + + // Skip if user's guild is not configured or connected + if (!DiscordExists(user.GuildId, _config.Instance.Servers, _discordService.DiscordClients)) + continue; + + var client = _discordService.DiscordClients[user.GuildId]; + + var member = await client.GetMemberByIdAsync(user.GuildId, user.UserId); + if (member == null) + { + _logger.Warning($"Failed to find member with id {user.UserId}."); + continue; + } + + if (!IsSubscriberValid(member, _config.Instance.Servers[user.GuildId].DonorRoleIds, SubscriptionAccessType.Raids)) + { + _logger.Information($"User {user.UserId} is not a supporter, skipping raid boss {pokemon.Name}..."); + continue; + } + + var pokemonSubscriptions = GetFilteredPokemonSubscriptions((HashSet)user.Raids, raid.PokemonId, raid.FormId.ToString()); + if (pokemonSubscriptions == null) + continue; + + foreach (var subRaid in pokemonSubscriptions) + { + var geofence = GetGeofence(user.GuildId); + if (geofence == null) + { + //_logger.Warn($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); + continue; + } + + if (!raid.IsExEligible && subRaid.IsExEligible) + { + // Skip raids that are not ex eligible when we only want ex eligible raids + continue; + } + + // Skip if not nearby or within set global location, individual subscription locations, or geofence does not match + if (!user.IsNearby(raidCoord, true, subRaid.Location, subRaid.Areas, geofence.Name.ToLower())) + continue; + + var embed = await raid.GenerateEmbedMessageAsync(new AlarmMessageSettings + { + GuildId = user.GuildId, + Client = client, + Config = _config, + Alarm = null, + City = geofence.Name, + MapDataCache = _mapDataCache, + }).ConfigureAwait(false); + + embed.Embeds.ForEach(async item => await EnqueueEmbedAsync(new NotificationItem + { + Subscription = user, + Member = member, + Embed = item.GenerateDiscordMessage(), + Description = pokemon.Name, + City = geofence.Name + })); + + _statsService.TotalRaidSubscriptionsSent++; + Thread.Sleep(5); + } + + if (BenchmarkTimes) + { + var end = DateTime.Now.Subtract(start); + _logger.Debug($"Took {end} to process raid subscription for user {user.UserId}"); + } + } + catch (Exception ex) + { + _logger.Error($"Error: {ex}"); + } + } + + subscriptions.Clear(); + subscriptions = null; + user = null; + + await Task.CompletedTask; + } + + public async Task ProcessQuestSubscriptionAsync(QuestData quest) + { + var reward = quest.Rewards.FirstOrDefault().Info; + var rewardKeyword = quest.GetReward(); + var questName = quest.GetQuestMessage(); + + // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below + var locationCache = new Dictionary(); + var questCoord = new Coordinate(quest); + Geofence GetGeofence(ulong guildId) + { + if (!locationCache.TryGetValue(guildId, out var geofence)) + { + var geofences = _config.Instance.Servers[guildId].Geofences; + geofence = GeofenceService.GetGeofence(geofences, questCoord); + locationCache.Add(guildId, geofence); + } + return geofence; + } + + var subscriptions = _subscriptionManager.GetSubscriptionsByQuest(quest.PokestopName, rewardKeyword); + if (subscriptions == null || subscriptions?.Count == 0) + { + //_logger.Warning($"Failed to get subscriptions from database table."); + return; + } + + Subscription user; + for (var i = 0; i < subscriptions.Count; i++) + { + try + { + var start = DateTime.Now; + user = subscriptions[i]; + + // Skip if user's guild is not configured or connected + if (!DiscordExists(user.GuildId, _config.Instance.Servers, _discordService.DiscordClients)) + continue; + + var client = _discordService.DiscordClients[user.GuildId]; + + var member = await client.GetMemberByIdAsync(user.GuildId, user.UserId); + if (member == null) + { + _logger.Warning($"Failed to find member with id {user.UserId}."); + continue; + } + + // Check donor role access for Quests + if (!IsSubscriberValid(member, _config.Instance.Servers[user.GuildId].DonorRoleIds, SubscriptionAccessType.Quests)) + { + _logger.Information($"User {user.UserId} is not a supporter, skipping quest {questName}..."); + continue; + } + + var questSub = user.Quests.FirstOrDefault(keyword => rewardKeyword.ToLower().Contains(keyword.RewardKeyword.ToLower())); + // Not subscribed to quest + if (questSub == null) + { + //_logger.Debug($"Skipping notification for user {member.DisplayName} ({member.Id}) for quest {questName} because the quest is in city '{loc.Name}'."); + continue; + } + + var geofence = GetGeofence(user.GuildId); + if (geofence == null) + { + //_logger.Warn($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); + continue; + } + + var geofenceMatches = questSub.Areas.Select(area => area.ToLower()).Contains(geofence.Name.ToLower()); + + // Skip if not nearby or within set global location, individual subscription locations, or geofence does not match + if (!user.IsNearby(questCoord, true, questSub.Location, questSub.Areas, geofence.Name.ToLower())) + continue; + + var embed = await quest.GenerateEmbedMessageAsync(new AlarmMessageSettings + { + GuildId = user.GuildId, + Client = client, + Config = _config, + Alarm = null, + City = geofence.Name, + MapDataCache = _mapDataCache, + }).ConfigureAwait(false); + + embed.Embeds.ForEach(async item => await EnqueueEmbedAsync(new NotificationItem + { + Subscription = user, + Member = member, + Embed = item.GenerateDiscordMessage(), + Description = questName, + City = geofence.Name, + })); + + _statsService.TotalQuestSubscriptionsSent++; + Thread.Sleep(5); + + if (BenchmarkTimes) + { + var end = DateTime.Now.Subtract(start); + _logger.Debug($"Took {end} to process quest subscription for user {user.UserId}"); + } + } + catch (Exception ex) + { + _logger.Error($"Error: {ex}"); + } + } + + subscriptions.Clear(); + subscriptions = null; + user = null; + + await Task.CompletedTask; + } + + public async Task ProcessInvasionSubscriptionAsync(IncidentData incident) + { + if (incident.Character == InvasionCharacter.CharacterUnset) + return; + + // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below + var locationCache = new Dictionary(); + var invasionCoord = new Coordinate(incident); + Geofence GetGeofence(ulong guildId) + { + if (!locationCache.TryGetValue(guildId, out var geofence)) + { + var geofences = _config.Instance.Servers[guildId].Geofences; + geofence = GeofenceService.GetGeofence(geofences, invasionCoord); + locationCache.Add(guildId, geofence); + } + return geofence; + } + + var invasion = GameMaster.Instance.GruntTypes?.ContainsKey(incident.Character) ?? false + ? GameMaster.Instance.GruntTypes[incident.Character] + : null; + var encounters = invasion?.GetEncounterRewards(); + if (encounters == null) + return; + + var subscriptions = _subscriptionManager.GetSubscriptionsByInvasion(incident?.PokestopName, incident?.Character ?? InvasionCharacter.CharacterUnset, encounters); + if (subscriptions == null || subscriptions?.Count == 0) + { + //_logger.Warning($"Failed to get subscriptions from database table."); + return; + } + + if (!GameMaster.Instance.GruntTypes.ContainsKey(incident.Character)) + { + //_logger.Error($"Failed to parse grunt type {pokestop.GruntType}, not in `grunttype.json` list."); + return; + } + + Subscription user; + for (var i = 0; i < subscriptions.Count; i++) + { + try + { + var start = DateTime.Now; + user = subscriptions[i]; + + // Skip if user's guild is not configured or connected + if (!DiscordExists(user.GuildId, _config.Instance.Servers, _discordService.DiscordClients)) + continue; + + var client = _discordService.DiscordClients[user.GuildId]; + + var member = await client.GetMemberByIdAsync(user.GuildId, user.UserId); + if (member == null) + { + _logger.Warning($"Failed to find member with id {user.UserId}."); + continue; + } + + // Check donor role access for Invasions + if (!IsSubscriberValid(member, _config.Instance.Servers[user.GuildId].DonorRoleIds, SubscriptionAccessType.Invasions)) + { + _logger.Information($"User {user.UserId} is not a supporter, skipping Team Rocket invasion {incident.PokestopName}..."); + continue; + } + + var invasionSub = user.Invasions.FirstOrDefault(invasion => invasion.RewardPokemonId.Intersects(encounters)); + // Not subscribed to invasion + if (invasionSub == null) + { + //_logger.Debug($"Skipping notification for user {member.DisplayName} ({member.Id}) for raid boss {pokemon.Name}, raid is in city '{loc.Name}'."); + continue; + } + + var geofence = GetGeofence(user.GuildId); + if (geofence == null) + { + //_logger.Warn($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); + continue; + } + + // Skip if not nearby or within set global location, individual subscription locations, or geofence does not match + if (!user.IsNearby(invasionCoord, true, invasionSub.Location, invasionSub.Areas, geofence.Name.ToLower())) + continue; + + var embed = await incident.GenerateEmbedMessageAsync(new AlarmMessageSettings + { + GuildId = user.GuildId, + Client = client, + Config = _config, + Alarm = null, + City = geofence?.Name, + MapDataCache = _mapDataCache, + }).ConfigureAwait(false); + + embed.Embeds.ForEach(async item => await EnqueueEmbedAsync(new NotificationItem + { + Subscription = user, + Member = member, + Embed = item.GenerateDiscordMessage(), + Description = incident.PokestopName, + City = geofence.Name, + })); + + _statsService.TotalInvasionSubscriptionsSent++; + Thread.Sleep(5); + + if (BenchmarkTimes) + { + var end = DateTime.Now.Subtract(start); + _logger.Debug($"Took {end} to process invasion subscription for user {user.UserId}"); + } + } + catch (Exception ex) + { + _logger.Error($"Error: {ex}"); + } + } + + subscriptions.Clear(); + subscriptions = null; + user = null; + + await Task.CompletedTask; + } + + public async Task ProcessLureSubscriptionAsync(PokestopData pokestop) + { + // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below + var locationCache = new Dictionary(); + var lureCoord = new Coordinate(pokestop); + Geofence GetGeofence(ulong guildId) + { + if (!locationCache.TryGetValue(guildId, out var geofence)) + { + var geofences = _config.Instance.Servers[guildId].Geofences; + geofence = GeofenceService.GetGeofence(geofences, lureCoord); + locationCache.Add(guildId, geofence); + } + return geofence; + } + + var subscriptions = _subscriptionManager.GetSubscriptionsByLure(pokestop.FortName, pokestop.LureType); + if (subscriptions == null || subscriptions?.Count == 0) + { + //_logger.Warning($"Failed to get subscriptions from database table."); + return; + } + + Subscription user; + for (var i = 0; i < subscriptions.Count; i++) + { + try + { + var start = DateTime.Now; + user = subscriptions[i]; + + // Skip if user's guild is not configured or connected + if (!DiscordExists(user.GuildId, _config.Instance.Servers, _discordService.DiscordClients)) + continue; + + var client = _discordService.DiscordClients[user.GuildId]; + + var member = await client.GetMemberByIdAsync(user.GuildId, user.UserId); + if (member == null) + { + _logger.Warning($"Failed to find member with id {user.UserId}."); + continue; + } + + // Check donor role access for Lures + if (!IsSubscriberValid(member, _config.Instance.Servers[user.GuildId].DonorRoleIds, SubscriptionAccessType.Lures)) + { + _logger.Information($"User {user.UserId} is not a supporter, skipping Pokestop lure {pokestop.FortName}..."); + continue; + } + + var lureSub = user.Lures.FirstOrDefault(lure => lure.LureType?.Contains(pokestop.LureType) ?? false); + // Not subscribed to lure + if (lureSub == null) + { + //_logger.Debug($"Skipping notification for user {member.DisplayName} ({member.Id}) for Pokestop lure {pokemon.Name}, lure is in city '{loc.Name}'."); + continue; + } + + var geofence = GetGeofence(user.GuildId); + if (geofence == null) + { + //_logger.Warn($"Failed to lookup city from coordinates {pokestop.Latitude},{pokestop.Longitude} {pokestop.PokestopId} {pokestop.Name}, skipping..."); + continue; + } + + // Skip if not nearby or within set global location, individual subscription locations, or geofence does not match + if (!user.IsNearby(lureCoord, true, lureSub.Location, lureSub.Areas, geofence.Name.ToLower())) + continue; + + var embed = await pokestop.GenerateEmbedMessageAsync(new AlarmMessageSettings + { + GuildId = user.GuildId, + Client = client, + Config = _config, + Alarm = null, + City = geofence.Name, + MapDataCache = _mapDataCache, + }).ConfigureAwait(false); + + embed.Embeds.ForEach(async item => await EnqueueEmbedAsync(new NotificationItem + { + Subscription = user, + Member = member, + Embed = item.GenerateDiscordMessage(), + Description = pokestop.FortName, + City = geofence.Name, + })); + + _statsService.TotalLureSubscriptionsSent++; + Thread.Sleep(5); + + if (BenchmarkTimes) + { + var end = DateTime.Now.Subtract(start); + _logger.Debug($"Took {end} to process lure subscription for user {user.UserId}"); + } + } + catch (Exception ex) + { + _logger.Error($"Error: {ex}"); + } + } + + subscriptions.Clear(); + subscriptions = null; + user = null; + + await Task.CompletedTask; + } + + public async Task ProcessGymSubscriptionAsync(RaidData raid) + { + // Cache the result per-guild so that geospatial stuff isn't queried for every single subscription below + var locationCache = new Dictionary(); + var gymCoord = new Coordinate(raid); + Geofence GetGeofence(ulong guildId) + { + if (!locationCache.TryGetValue(guildId, out var geofence)) + { + var geofences = _config.Instance.Servers[guildId].Geofences; + geofence = GeofenceService.GetGeofence(geofences, gymCoord); + locationCache.Add(guildId, geofence); + } + return geofence; + } + + var subscriptions = _subscriptionManager.GetSubscriptionsByGymName(raid.GymName); + if (subscriptions == null || subscriptions?.Count == 0) + { + //_logger.Warning($"Failed to get subscriptions from database table."); + return; + } + + Subscription user; + var pokemon = GameMaster.GetPokemon(raid.PokemonId, raid.FormId); + for (var i = 0; i < subscriptions.Count; i++) + { + try + { + var start = DateTime.Now; + user = subscriptions[i]; + + // Skip if user's guild is not configured or connected + if (!DiscordExists(user.GuildId, _config.Instance.Servers, _discordService.DiscordClients)) + continue; + + var client = _discordService.DiscordClients[user.GuildId]; + + var member = await client.GetMemberByIdAsync(user.GuildId, user.UserId); + if (member == null) + { + _logger.Warning($"Failed to find member with id {user.UserId}."); + continue; + } + + // Check donor role access for Gyms + if (!IsSubscriberValid(member, _config.Instance.Servers[user.GuildId].DonorRoleIds, SubscriptionAccessType.Gyms)) + { + _logger.Information($"User {user.UserId} is not a supporter, skipping raid boss {pokemon.Name} for gym {raid.GymName}..."); + continue; + } + + var geofence = GetGeofence(user.GuildId); + if (geofence == null) + { + //_logger.Warn($"Failed to lookup city from coordinates {pkmn.Latitude},{pkmn.Longitude} {db.Pokemon[pkmn.Id].Name} {pkmn.IV}, skipping..."); + continue; + } + + var gymSub = user.Gyms.FirstOrDefault(gym => string.Compare(gym.Name, raid.GymName, true) == 0); + if (gymSub == null) + continue; + + var checkLevel = gymSub.MinimumLevel > 0 && gymSub.MaximumLevel > 0; + var containsPokemon = gymSub.PokemonIDs?.Contains(raid.PokemonId) ?? false; + // Skip if neither level or Pokemon matches raid + if (!checkLevel && !containsPokemon) + continue; + + if (!raid.IsExEligible && gymSub.IsExEligible) + { + // Skip raids that are not ex eligible when we want ex eligible raids + continue; + } + + // Skip if not nearby or within set global location or individual subscription locations + if (!user.IsNearby(gymCoord, checkGeofence: false)) + continue; + + var embed = await raid.GenerateEmbedMessageAsync(new AlarmMessageSettings + { + GuildId = user.GuildId, + Client = client, + Config = _config, + Alarm = null, + City = geofence.Name, + MapDataCache = _mapDataCache, + }).ConfigureAwait(false); + + embed.Embeds.ForEach(async item => await EnqueueEmbedAsync(new NotificationItem + { + Subscription = user, + Member = member, + Embed = item.GenerateDiscordMessage(), + Description = pokemon.Name, + City = geofence.Name, + })); + + _statsService.TotalGymSubscriptionsSent++; + Thread.Sleep(5); + + if (BenchmarkTimes) + { + var end = DateTime.Now; + _logger.Debug($"Took {end} to process gym raid subscription for user {user.UserId}"); + } + } + catch (Exception ex) + { + _logger.Error($"Error: {ex}"); + } + } + + subscriptions.Clear(); + subscriptions = null; + user = null; + + await Task.CompletedTask; + } + + #endregion + + // TODO: Move helpers to extensions class + #region Helper Methods + + private bool IsValidPokedexPokemon(uint pokemonId) + { + if (pokemonId == 0) + { + return false; + } + + if (!GameMaster.Instance.Pokedex.ContainsKey(pokemonId)) + { + _logger.Warning($"Pokemon '{pokemonId}' does not exist in 'masterfile.json', please make sure you're using an up to date version."); + return false; + } + return true; + } + + private static IEnumerable GetFilteredPokemonSubscriptions(HashSet subscriptions, uint pokemonId, string form, List evolutionIds = null) + where T : BasePokemonSubscription + { + var pokemonSubscriptions = subscriptions.Where(sub => + { + var containsPokemon = evolutionIds != null + // If evolutionIds is set, check if subscription's pokemonId matches evolutionId + ? sub.PokemonId.Any(id => evolutionIds.Contains(id)) + // Otherwise check if subscription's pokemonId matches webhook pokemonId (base evo) + : sub.PokemonId.Contains(pokemonId); + var isEmptyForm = /* TODO: Workaround for UI */ (sub.Forms?.Exists(y => string.IsNullOrEmpty(y)) ?? false && sub.Forms?.Count == 1); + var containsForm = (sub.Forms?.Contains(form) ?? true) || (sub.Forms?.Count ?? 0) == 0 || isEmptyForm; + return containsPokemon && containsForm; + }); + return pokemonSubscriptions; + } + + private static bool IvWildcardMatches(string ivEntry, ushort? pokemonIvEntry) + { + // Skip IV ranges + if (ivEntry.Contains("-")) + { + return false; + } + + // Return true if wildcard specified. + if (ivEntry == "*") + { + return true; + } + + // Validate IV entry is a valid integer. + if (!ushort.TryParse(ivEntry, out var ivValue)) + { + return false; + } + + // Check if IV entry matches Pokemon IV. + return ivValue == pokemonIvEntry; + } + + private static bool IvListMatches(List ivList, PokemonData pokemon) + { + // Check if IV list is null or no entries and Pokemon has IV values, otherwise return false. + if (ivList?.Count == 0 || + pokemon.Attack == null || + pokemon.Defense == null || + pokemon.Stamina == null) + { + return false; + } + + // Construct expected formatted IV entry string + var ivEntry = $"{pokemon.Attack}/{pokemon.Defense}/{pokemon.Stamina}"; + + // Check if IV matches any IV list range or wildcard entries + var matches = ivList?.Exists(iv => + { + // Check if IV list entries matches Pokemon IV string verbatim + if (string.Equals(iv, ivEntry)) + { + return true; + } + + var split = iv.Split('/'); + + // Ensure user specified all IV parts required + if (split.Length != 3) + return false; + + var ivAttack = split[0]; + var ivDefense = split[1]; + var ivStamina = split[2]; + + var matchesWildcard = + IvWildcardMatches(ivAttack, pokemon.Attack) && + IvWildcardMatches(ivDefense, pokemon.Defense) && + IvWildcardMatches(ivStamina, pokemon.Stamina); + + var matchesRange = IvRangeMatches(ivAttack, ivDefense, ivStamina, pokemon); + return matchesWildcard || matchesRange; + }) ?? false; + + return matches; + } + + private static bool IvRangeMatches(string ivAttack, string ivDefense, string ivStamina, PokemonData pokemon) + { + if (pokemon.Attack == null || + pokemon.Defense == null || + pokemon.Stamina == null) + { + return false; + } + + // Check if none of the IV entries contain range indicator + if (!ivAttack.Contains("-") && + !ivDefense.Contains("-") && + !ivStamina.Contains("-")) + { + return false; + } + + // Parse min/max IV values for all entries + var (minAttack, maxAttack) = ParseMinMaxValues(ivAttack); + var (minDefense, maxDefense) = ParseMinMaxValues(ivDefense); + var (minStamina, maxStamina) = ParseMinMaxValues(ivStamina); + + // Check if Pokemon IV is within min/max range + var matches = (pokemon.Attack ?? 0) >= minAttack && (pokemon.Attack ?? 0) <= maxAttack && + (pokemon.Defense ?? 0) >= minDefense && (pokemon.Defense ?? 0) <= maxDefense && + (pokemon.Stamina ?? 0) >= minStamina && (pokemon.Stamina ?? 0) <= maxStamina; + + return matches; + } + + private static (ushort, ushort) ParseRangeEntry(string ivEntry) + { + // Parse IV range min/max values + var split = ivEntry.Split('-'); + + // If count mismatch, skip + if (split.Length != 2) + { + return default; + } + + // Parse first range value for minimum + if (!ushort.TryParse(split[0], out var minRange)) + { + return default; + } + + // Parse second range value for maximum + if (!ushort.TryParse(split[1], out var maxRange)) + { + return default; + } + return (minRange, maxRange); + } + + private static (ushort, ushort) ParseMinMaxValues(string ivEntry) + { + ushort minRange; + ushort maxRange; + if (ivEntry.Contains("-")) + { + // Parse min/max range values + var (min, max) = ParseRangeEntry(ivEntry); + minRange = min; + maxRange = max; + } + // Check if attack IV contains wildcard, otherwise value should be a whole value + else if (ivEntry.Contains("*")) + { + // Wildcard specified, set min/max to 0-15 + minRange = 0; + maxRange = 15; + } + else + { + // No range indicator found for attack IV, parse and assign whole IV value to min/max values + var atk = ushort.Parse(ivEntry); + minRange = atk; + maxRange = atk; + } + return (minRange, maxRange); + } + + private static bool DiscordExists(ulong guildId, Dictionary servers, IReadOnlyDictionary discordClients) + { + if (!servers.ContainsKey(guildId)) + return false; + + if (!servers[guildId].Subscriptions.Enabled) + return false; + + if (!discordClients.ContainsKey(guildId)) + return false; + + return true; + } + + private static bool IsSubscriberValid(DiscordMember member, Dictionary> donorRoleIds, SubscriptionAccessType accessType) + { + if (member?.Roles == null) + { + return false; + } + + // Check if member has donor role + if (!member.HasSupporterRole(donorRoleIds.Keys.ToList())) + { + return false; + } + + // Check donor role access for subscription access type + if (!member.HasRoleAccess(donorRoleIds, accessType)) + { + return false; + } + + return true; + } + + #endregion + + #region Background Service + + public override async Task StopAsync(CancellationToken stoppingToken) + { + _logger.Information( + $"{nameof(SubscriptionProcessorService)} is stopping."); + + await base.StopAsync(stoppingToken); + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + _logger.Information( + $"{nameof(SubscriptionProcessorService)} is now running in the background."); + + await BackgroundProcessing(stoppingToken); + } + + private async Task BackgroundProcessing(CancellationToken stoppingToken) + { + while (!stoppingToken.IsCancellationRequested) + { + try + { + //var workItem = await _taskQueue.DequeueAsync(stoppingToken); + //await workItem(stoppingToken); + var workItems = await _taskQueue.DequeueMultipleAsync(Strings.Defaults.MaximumQueueBatchSize, stoppingToken); + var tasks = workItems.Select(item => Task.Factory.StartNew(async () => await item(stoppingToken))); + Task.WaitAll(tasks.ToArray(), stoppingToken); + /* + foreach (var workItem in workItems) + { + await workItem(stoppingToken); + } + */ + } + catch (OperationCanceledException) + { + // Prevent throwing if stoppingToken was signaled + } + catch (Exception ex) + { + _logger.Error(ex, "Error occurred executing task work item."); + } + //await Task.Delay(10, stoppingToken); + Thread.Sleep(10); + } + + _logger.Error("Exited background processing..."); + } + + private async Task EnqueueEmbedAsync(NotificationItem embed) + { + //CheckQueueLength(); + + await _taskQueue.EnqueueAsync(async token => + await ProcessWorkItemAsync(embed, token)); + } + + private async Task ProcessWorkItemAsync( + NotificationItem embed, + CancellationToken stoppingToken) + { + if (embed?.Subscription == null || embed?.Member == null || embed?.Embed == null) + return stoppingToken; + + if (!_discordService.DiscordClients.ContainsKey(embed.Subscription.GuildId)) + { + _logger.Error($"User subscription for guild that's not configured. UserId={embed.Subscription.UserId} GuildId={embed.Subscription.GuildId}"); + return stoppingToken; + } + + // Check if user is receiving messages too fast. + if (!_config.Instance.Servers.ContainsKey(embed.Subscription.GuildId)) + { + // Config does not contain subscription guild for some reason o.O + return stoppingToken; + } + + CheckQueueLength(); + + var config = _config.Instance.Servers[embed.Subscription.GuildId]; + var maxNotificationsPerMinute = config.Subscriptions.MaxNotificationsPerMinute; + var subscriptionId = embed.Subscription.Id; + + if (!_rateLimitedMessagesSent.ContainsKey(subscriptionId)) + { + _rateLimitedMessagesSent.Add(subscriptionId, false); + } + + if (embed.Subscription.Limiter.IsLimited(maxNotificationsPerMinute) && !_rateLimitedMessagesSent[subscriptionId])//!subscription.RateLimitNotificationSent) + { + // Disable subscription immediately + await _subscriptionManager.SetSubscriptionStatusAsync(subscriptionId, NotificationStatusType.None); + + await SendRateLimitedMessage(embed.Subscription, embed.Member, maxNotificationsPerMinute); + //return stoppingToken; + } + else + { + // Ratelimit is up, allow for ratelimiting again + _rateLimitedMessagesSent[subscriptionId] = false; + + // Send text message notification to user if a phone number is set + /* TODO: Twilio notifications + if (_config.Instance.Twilio.Enabled && !string.IsNullOrEmpty(embed.Subscription.PhoneNumber)) + { + // Check if user is in the allowed text message list or server owner + if (HasRole(embed.Member, _config.Instance.Twilio.RoleIds) || + _config.Instance.Twilio.UserIds.Contains(embed.Member.Id) || + _config.Instance.Servers[embed.Subscription.GuildId].Bot.OwnerId == embed.Member.Id) + { + // Send text message (max 160 characters) + if (embed.Pokemon != null && IsUltraRare(_config.Instance.Twilio, embed.Pokemon)) + { + // TODO: Generate SMS message string from embed + var result = Utils.SendSmsMessage(StripEmbed(embed), _config.Instance.Twilio, embed.Subscription.PhoneNumber); + if (!result) + { + _logger.Error($"Failed to send text message to phone number '{embed.Subscription.PhoneNumber}' for user {embed.Subscription.UserId}"); + } + } + } + } + */ + + // Send direct message notification to user + await embed.Member.SendDirectMessageAsync(string.Empty, embed.Embed); + _logger.Information($"[SUBSCRIPTION] Notified user {embed.Member.Username} of {embed.Description}."); + Thread.Sleep(1); + } + + return stoppingToken; + } + + private async Task SendRateLimitedMessage(Subscription subscription, DiscordMember member, uint maxNotificationsPerMinute) + { + _logger.Warning($"{member.Username} notifications rate limited, waiting {(60 - subscription.Limiter.TimeLeft.TotalSeconds)} seconds...", subscription.Limiter.TimeLeft.TotalSeconds.ToString("N0")); + // Send ratelimited notification to user if not already sent to adjust subscription settings to more reasonable settings. + if (!_rateLimitedMessagesSent[subscription.Id]) + { + if (!_discordService.DiscordClients.ContainsKey(subscription.GuildId)) + return; + + var client = _discordService.DiscordClients[subscription.GuildId].Guilds[subscription.GuildId]; + var emoji = DiscordEmoji.FromName(_discordService.DiscordClients.FirstOrDefault().Value, ":no_entry:"); + var guildIconUrl = _discordService.DiscordClients.ContainsKey(subscription.GuildId) ? client?.IconUrl : string.Empty; + // TODO: Localize rate limited message + var rateLimitMessage = $"{emoji} Your notification subscriptions have exceeded {maxNotificationsPerMinute:N0} per minute and are now being rate limited. " + + $"Please adjust your subscriptions to receive a maximum of {maxNotificationsPerMinute:N0} notifications within a {NotificationLimiter.ThresholdTimeout} second time span."; + var eb = new DiscordEmbedBuilder + { + Title = "Rate Limited", + Description = rateLimitMessage, + Color = DiscordColor.Red, + Footer = new DiscordEmbedBuilder.EmbedFooter + { + Text = $"{client?.Name} | {DateTime.Now}", + IconUrl = guildIconUrl, + } + }; + + await member.SendDirectMessageAsync(eb.Build()); + _rateLimitedMessagesSent[subscription.Id] = true; + } + } + + #endregion + + private void CheckQueueLength() + { + if (_taskQueue.Count > Strings.Defaults.MaximumQueueSizeWarning) + { + _logger.Warning($"Subscription queue is {_taskQueue.Count:N0} items long."); + } + else if (_taskQueue.Count >= Strings.Defaults.MaximumQueueCapacity) + { + _logger.Error($"Queue has filled to maximum capacity '{Strings.Defaults.MaximumQueueCapacity}', oldest queued items will start to drop off to make room."); + _taskQueue.ClearQueue(); + } + } + } +} diff --git a/src/Services/TemplateRenderer.cs b/src/Services/TemplateRenderer.cs new file mode 100644 index 00000000..c3592ec7 --- /dev/null +++ b/src/Services/TemplateRenderer.cs @@ -0,0 +1,224 @@ +namespace WhMgr.Services +{ + using System; + using System.Collections.Generic; + using System.Linq; + + using HandlebarsDotNet; + using HandlebarsDotNet.Helpers; + + using WhMgr.Common; + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Localization; + + public static class TemplateRenderer + { + private static readonly IHandlebars _context; + + static TemplateRenderer() + { + _context = Handlebars.Create(); + _context.Configuration.TextEncoder = null; + + // Register helpers + var helpers = GetHelpers(); + foreach (var (name, function) in helpers) + { + _context.RegisterHelper(name, function); + } + //_context.Configuration. + HandlebarsHelpers.Register(_context); + } + + public static string Parse(string text, dynamic model) + { + var template = _context.Compile(text ?? string.Empty); + return template(model); + } + + public static IReadOnlyDictionary GetHelpers() + { + var dict = new Dictionary + { + // GetPokemonName helper + ["getPokemonName"] = new HandlebarsHelper((writer, ctx, args) => + { + if (!uint.TryParse(args[0].ToString(), out var pokeId)) + return; + var pkmnName = Translator.Instance.GetPokemonName(pokeId); + writer.Write(pkmnName); + }), + // GetFormName helper + ["getFormName"] = new HandlebarsHelper((writer, ctx, args) => + { + if (!uint.TryParse(args[0].ToString(), out var formId)) + return; + var formName = Translator.Instance.GetFormName(formId); + writer.Write(formName); + }), + // GetCostumeName helper + ["getCostumeName"] = new HandlebarsHelper((writer, ctx, args) => + { + if (!uint.TryParse(args[0].ToString(), out var costumeId)) + return; + var costumeName = Translator.Instance.GetCostumeName(costumeId); + writer.Write(costumeName); + }), + // GetLength helper + ["len"] = new HandlebarsHelper((writer, ctx, args) => + { + Console.WriteLine($"Type: {args[0].GetType().FullName}, Arg[0]: {args[0]}"); + if (args[0] is IDictionary discords) + { + writer.Write(discords.Count); + } + else + { + writer.Write(0); + } + }), + // Format boolean value helper + ["formatBool"] = new HandlebarsHelper((writer, ctx, args) => + { + if (!bool.TryParse(args[0].ToString(), out var result)) + { + writer.Write("No"); + return; + } + writer.Write(result ? "Yes" : "No"); + }), + ["isChecked"] = new HandlebarsHelper((writer, ctx, args) => + { + if (args[0] is string value) + { + var item = args[1].ToString(); + var result = string.Equals(value, item, StringComparison.InvariantCultureIgnoreCase); + writer.Write(result ? "checked" : ""); + } + else + { + writer.Write(""); + } + }), + ["isSelected"] = new HandlebarsHelper((writer, ctx, args) => + { + if (args[0] is System.Collections.IEnumerable array) + { + var item = args[1].ToString(); + bool result; + if (array is List weatherList) + { + result = weatherList.Select(weather => weather.ToString()) + .Contains(item); + } + else if (array is Dictionary dict) + { + result = dict.Values.Contains(item); + } + else if (array is List accessList) + { + result = accessList.Select(access => access.ToString().ToLower()) + .Contains(item.ToLower()); + } + else + { + if (array is string str) + { + result = string.Equals(str, item, StringComparison.InvariantCultureIgnoreCase); + } + else + { + result = array.Cast().Contains(item); + } + } + writer.Write(result ? "selected" : ""); + } + else if (args[0] is Dictionary servers) + { + var item = args[1].ToString(); + var result = servers.Values.Contains(item); + writer.Write(result ? "selected" : ""); + } + else if (args[0] is string str) + { + var item = args[1].ToString(); + var result = string.Equals(str, item); + writer.Write(result ? "selected" : ""); + } + else if (args[0] is object obj) + { + var item = args[1]; + var result = string.Equals(obj.ToString(), item.ToString(), StringComparison.InvariantCultureIgnoreCase); + writer.Write(result ? "selected" : ""); + } + else + { + writer.Write(""); + } + }), + ["log"] = new HandlebarsHelper((writer, ctx, args) => + { + var json = args[0].ToJson(); + Console.WriteLine($"hbs log: {json}"); + writer.Write(json); + }), + ["getDiscordAvatarUrl"] = new HandlebarsHelper((writer, ctx, args) => + { + if (args.Length >= 2) + { + var avatarUrl = string.Format(Strings.DiscordAvatarUrlFormat, args[0], args[1]); + writer.Write(avatarUrl); + } + else + { + // TODO: Write default image placeholder + writer.Write(string.Empty); + } + }), + ["formatPercentage"] = new HandlebarsHelper((writer, ctx, args) => + { + if (!double.TryParse(args[0].ToString(), out var percentage)) + return; + var formatted = Math.Round(percentage * 100, 2); + writer.Write(formatted); + }), + ["gt"] = new HandlebarsHelper((writer, ctx, args) => + { + if (!int.TryParse(args[0].ToString(), out var arg1)) + return; + if (!int.TryParse(args[1].ToString(), out var arg2)) + return; + writer.Write(arg1 > arg2 ? "true" : ""); + }), + ["lt"] = new HandlebarsHelper((writer, ctx, args) => + { + if (!int.TryParse(args[0].ToString(), out var arg1)) + return; + if (!int.TryParse(args[1].ToString(), out var arg2)) + return; + writer.Write(arg1 < arg2 ? "true" : ""); + }), + ["gte"] = new HandlebarsHelper((writer, ctx, args) => + { + if (!int.TryParse(args[0].ToString(), out var arg1)) + return; + if (!int.TryParse(args[1].ToString(), out var arg2)) + return; + writer.Write(arg1 >= arg2 ? "true" : ""); + }), + ["lte"] = new HandlebarsHelper((writer, ctx, args) => + { + if (!int.TryParse(args[0].ToString(), out var arg1)) + return; + if (!int.TryParse(args[1].ToString(), out var arg2)) + return; + writer.Write(arg1 <= arg2 ? "true" : ""); + + }), + }; + // TODO: Load helpers via file + return dict; + } + } +} \ No newline at end of file diff --git a/src/Services/UrlShortener.cs b/src/Services/UrlShortener.cs deleted file mode 100644 index 9955927c..00000000 --- a/src/Services/UrlShortener.cs +++ /dev/null @@ -1,75 +0,0 @@ -namespace WhMgr.Services -{ - using System; - using System.Web; - - using Newtonsoft.Json; - - using WhMgr.Utilities; - - /// - /// Url shortener class using yourls.org - /// - public class UrlShortener - { - /* -{ - "url": { - "keyword":"1", - "url":"https://www.google.com/maps?q=34.1351088673568,-118.051129828759", - "title":"Google Maps", - "date":"2019-05-25 04:48:55", - "ip":"172.89.225.76" - }, - "status":"success", - "message":"https://www.google.com/maps?q=34.1351088673568,-118.051[...] added to database", - "title":"Google Maps", - "shorturl":"https://site.com/u/1", - "statusCode":200 -} - */ - - [JsonProperty("status")] - public string Status { get; set; } - - [JsonProperty("message")] - public string Message { get; set; } - - [JsonProperty("title")] - public string Title { get; set; } - - [JsonProperty("shorturl")] - public string ShortUrl { get; set; } - - [JsonProperty("statusCode")] - public int StatusCode { get; set; } - - /// - /// Creates a short url from the url provided - /// - /// Yourls.org endpoint base url with signature parameter - /// URL address to shorten - /// Returns the shortened URL address - public static string CreateShortUrl(string baseApiUrl, string url) - { - // If base `yourls` url not set, return original url - if (string.IsNullOrEmpty(baseApiUrl)) - return url; - - try - { - var apiUrl = $"{baseApiUrl}&action=shorturl&url={HttpUtility.UrlEncode(url)}&format=json"; - var json = NetUtil.Get(apiUrl); - if (string.IsNullOrEmpty(json)) - return url; - - var obj = JsonConvert.DeserializeObject(json); - return obj?.ShortUrl; - } - catch (Exception) - { - return url; - } - } - } -} \ No newline at end of file diff --git a/src/Services/VersionManager.cs b/src/Services/VersionManager.cs new file mode 100644 index 00000000..5c574f72 --- /dev/null +++ b/src/Services/VersionManager.cs @@ -0,0 +1,383 @@ +namespace WhMgr.Services +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Text.Json.Serialization; + + using WhMgr.Extensions; + + public class VersionManager + { + private const string BaseUrl = "https://github.com"; + private const string ApiBaseUrl = "https://api.github.com"; + + public string AuthorRepository { get; set; } + + public string Version { get; private set; } + + public string Commit { get; private set; } + + public string Url { get; private set; } + + public IReadOnlyList Tags { get; private set; } + + // UserAgent + + /// + /// + /// + /// author/repository_name + public VersionManager(string authorRepo) + { + AuthorRepository = authorRepo; + Initialize(); + } + + public VersionManager(string authorRepo, string commit, string url, string version) + { + AuthorRepository = authorRepo; + Commit = commit; + Url = url; + Version = version; + } + + public void Initialize() + { + var sha = string.Empty; + var version = string.Empty; + var pullRequest = string.Empty; + try + { + var shaFilePath = Path.Combine(Directory.GetCurrentDirectory(), "../.gitsha"); + sha = File.ReadAllLines(shaFilePath).FirstOrDefault().Trim(' '); + } + catch (Exception ex) + { + sha = "?"; + Console.WriteLine($"[Error] Failed to read .gitsha: {ex}"); + } + try + { + var refFile = Path.Combine(Directory.GetCurrentDirectory(), "../.gitref"); + var refData = File.ReadAllLines(refFile).FirstOrDefault().Trim(' '); + if (refData.StartsWith("refs/pull/") && refData.Contains("/merge")) + { + pullRequest = refData.Replace("refs/pull/", null) + .Replace("/merge", null); + } + } + catch (Exception ex) + { + Console.WriteLine($"[Error] Failed to read .gitref: {ex}"); + } + if (string.IsNullOrEmpty(pullRequest)) + { + var url = $"{ApiBaseUrl}/repos/{AuthorRepository}/tags"; + using (var wc = new WebClient()) + { + wc.Proxy = null; + wc.Headers.Add(HttpRequestHeader.UserAgent, "VersionManager"); + try + { + var response = wc.DownloadString(url); + if (string.IsNullOrEmpty(response)) + { + // Failed to get tags + return; + } + Tags = response.FromJson>(); + var tag = Tags.FirstOrDefault(tag => string.Compare(tag.Commit.Sha, sha, true) == 0); + version = tag != null ? $"Version {tag.Name}" : "?"; + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex}"); + } + } + Url = $"{BaseUrl}/{AuthorRepository}/releases"; + } + else + { + version = $"Pull Request #{pullRequest}"; + Url = $"{BaseUrl}/{AuthorRepository}/pull/{pullRequest}"; + } + + Version = version; + Commit = sha; + + Console.WriteLine($"[VersionManager] {version} ({sha})"); + } + + public VersionManager GetVersion() + { + var sha = string.Empty; + var version = string.Empty; + var pullRequest = string.Empty; + try + { + var shaFilePath = Path.Combine(Directory.GetCurrentDirectory(), "../.gitsha"); + sha = File.ReadAllLines(shaFilePath).FirstOrDefault().Trim(' '); + } + catch (Exception) + { + sha = "?"; + Console.WriteLine($"[Error] Failed to read .gitsha"); + } + try + { + var refFile = Path.Combine(Directory.GetCurrentDirectory(), "../.gitref"); + var refData = File.ReadAllLines(refFile).FirstOrDefault().Trim(' '); + if (refData.StartsWith("refs/pull/") && refData.Contains("/merge")) + { + pullRequest = refData.Replace("refs/pull/", null) + .Replace("/merge", null); + } + } + catch (Exception) + { + Console.WriteLine($"[Error] Failed to read .gitref"); + } + return new VersionManager(AuthorRepository) + { + Commit = sha, + Url = pullRequest, + Version = version, + }; + } + } + + public class RepositoryOwner + { + [JsonPropertyName("id")] + public ulong Id { get; set; } + + [JsonPropertyName("login")] + public string Login { get; set; } + + [JsonPropertyName("node_id")] + public string NodeId { get; set; } + + [JsonPropertyName("avatar_url")] + public string AvatarUrl { get; set; } + + [JsonPropertyName("gravatar_id")] + public string GravatarId { get; set; } + + [JsonPropertyName("url")] + public string Url { get; set; } + + [JsonPropertyName("html_url")] + public string HtmlUrl { get; set; } + + [JsonPropertyName("followers_url")] + public string FollowersUrl { get; set; } + + [JsonPropertyName("gists_url")] + public string GistsUrl { get; set; } + + [JsonPropertyName("starred_url")] + public string StarredUrl { get; set; } + + [JsonPropertyName("subscriptions_url")] + public string SubscriptionsUrl { get; set; } + + [JsonPropertyName("organizations_url")] + public string OrganizationsUrl { get; set; } + + [JsonPropertyName("repos_url")] + public string RepositoriesUrl { get; set; } + + [JsonPropertyName("events_url")] + public string EventsUrl { get; set; } + + [JsonPropertyName("received_events_url")] + public string ReceivedEventsUrl { get; set; } + + [JsonPropertyName("type")] + public string Type { get; set; } + + [JsonPropertyName("site_admin")] + public string IsSiteAdmin { get; set; } + } + + public class RepositoryResponse + { + [JsonPropertyName("id")] + public ulong Id { get; set; } + + [JsonPropertyName("node_id")] + public string NodeId { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("private")] + public bool IsRepositoryPrivate { get; set; } + + [JsonPropertyName("owner")] + public RepositoryOwner Owner { get; set; } + + [JsonPropertyName("html_url")] + public string HtmlUrl { get; set; } + + [JsonPropertyName("description")] + public string Description { get; set; } + + [JsonPropertyName("fork")] + public bool IsFork { get; set; } + + [JsonPropertyName("url")] + public string Url { get; set; } + + [JsonPropertyName("forks_url")] + public string ForksUrl { get; set; } + + [JsonPropertyName("keys_url")] + public string KeysUrl { get; set; } + + [JsonPropertyName("collaborators_url")] + public string CollaboratorsUrl { get; set; } + + [JsonPropertyName("teams_url")] + public string TeamsUrl { get; set; } + + [JsonPropertyName("hooks_url")] + public string HooksUrl { get; set; } + } + + /* +{ + "id": 153759581, + "node_id": "MDEwOlJlcG9zaXRvcnkxNTM3NTk1ODE=", + "name": "WhMgr", + "full_name": "versx/WhMgr", + "private": false, + "owner": { + "login": "versx", + "id": 1327440, + "node_id": "MDQ6VXNlcjEzMjc0NDA=", + "avatar_url": "https://avatars.githubusercontent.com/u/1327440?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/versx", + "html_url": "https://github.com/versx", + "followers_url": "https://api.github.com/users/versx/followers", + "following_url": "https://api.github.com/users/versx/following{/other_user}", + "gists_url": "https://api.github.com/users/versx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/versx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/versx/subscriptions", + "organizations_url": "https://api.github.com/users/versx/orgs", + "repos_url": "https://api.github.com/users/versx/repos", + "events_url": "https://api.github.com/users/versx/events{/privacy}", + "received_events_url": "https://api.github.com/users/versx/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/versx/WhMgr", + "description": "Discord notification system that works with RealDeviceMap and reports Pokemon, Raids, Eggs, Quests, Pokestop Lures, Team Rocket Invasions, Gym team changes, and Weather as embed messages. Discord users can also subscribe to custom Pokemon, Raid, Quest, Team Rocket Invasion, and Pokestop Lure notifications via direct message (DM) with predefined requirements.", + "fork": false, + "url": "https://api.github.com/repos/versx/WhMgr", + "forks_url": "https://api.github.com/repos/versx/WhMgr/forks", + "keys_url": "https://api.github.com/repos/versx/WhMgr/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/versx/WhMgr/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/versx/WhMgr/teams", + "hooks_url": "https://api.github.com/repos/versx/WhMgr/hooks", + "issue_events_url": "https://api.github.com/repos/versx/WhMgr/issues/events{/number}", + "events_url": "https://api.github.com/repos/versx/WhMgr/events", + "assignees_url": "https://api.github.com/repos/versx/WhMgr/assignees{/user}", + "branches_url": "https://api.github.com/repos/versx/WhMgr/branches{/branch}", + "tags_url": "https://api.github.com/repos/versx/WhMgr/tags", + "blobs_url": "https://api.github.com/repos/versx/WhMgr/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/versx/WhMgr/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/versx/WhMgr/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/versx/WhMgr/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/versx/WhMgr/statuses/{sha}", + "languages_url": "https://api.github.com/repos/versx/WhMgr/languages", + "stargazers_url": "https://api.github.com/repos/versx/WhMgr/stargazers", + "contributors_url": "https://api.github.com/repos/versx/WhMgr/contributors", + "subscribers_url": "https://api.github.com/repos/versx/WhMgr/subscribers", + "subscription_url": "https://api.github.com/repos/versx/WhMgr/subscription", + "commits_url": "https://api.github.com/repos/versx/WhMgr/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/versx/WhMgr/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/versx/WhMgr/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/versx/WhMgr/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/versx/WhMgr/contents/{+path}", + "compare_url": "https://api.github.com/repos/versx/WhMgr/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/versx/WhMgr/merges", + "archive_url": "https://api.github.com/repos/versx/WhMgr/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/versx/WhMgr/downloads", + "issues_url": "https://api.github.com/repos/versx/WhMgr/issues{/number}", + "pulls_url": "https://api.github.com/repos/versx/WhMgr/pulls{/number}", + "milestones_url": "https://api.github.com/repos/versx/WhMgr/milestones{/number}", + "notifications_url": "https://api.github.com/repos/versx/WhMgr/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/versx/WhMgr/labels{/name}", + "releases_url": "https://api.github.com/repos/versx/WhMgr/releases{/id}", + "deployments_url": "https://api.github.com/repos/versx/WhMgr/deployments", + "created_at": "2018-10-19T09:34:02Z", + "updated_at": "2021-08-27T00:01:57Z", + "pushed_at": "2021-10-11T14:49:05Z", + "git_url": "git://github.com/versx/WhMgr.git", + "ssh_url": "git@github.com:versx/WhMgr.git", + "clone_url": "https://github.com/versx/WhMgr.git", + "svn_url": "https://github.com/versx/WhMgr", + "homepage": "", + "size": 11018, + "stargazers_count": 24, + "watchers_count": 24, + "language": "C#", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 26, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 32, + "license": null, + "allow_forking": true, + "is_template": false, + "topics": [ + + ], + "visibility": "public", + "forks": 26, + "open_issues": 32, + "watchers": 24, + "default_branch": "master", + "temp_clone_token": null, + "network_count": 26, + "subscribers_count": 6 +} + */ + + public class TagsResponse + { + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("commit")] + public Commit Commit { get; set; } + + [JsonPropertyName("node_id")] + public string NodeId { get; set; } + + [JsonPropertyName("zipball_url")] + public string ZipballUrl { get; set; } + + [JsonPropertyName("tarball_url")] + public string TarballUrl { get; set; } + } + + public class Commit + { + [JsonPropertyName("sha")] + public string Sha { get; set; } + + [JsonPropertyName("url")] + public string Url { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Cache/IScannedItem.cs b/src/Services/Webhook/Cache/IScannedItem.cs new file mode 100644 index 00000000..f3326c45 --- /dev/null +++ b/src/Services/Webhook/Cache/IScannedItem.cs @@ -0,0 +1,9 @@ +namespace WhMgr.Services.Webhook.Cache +{ + internal interface IScannedItem + { + double Latitude { get; } + + double Longitude { get; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Cache/ScannedGym.cs b/src/Services/Webhook/Cache/ScannedGym.cs new file mode 100644 index 00000000..4086a021 --- /dev/null +++ b/src/Services/Webhook/Cache/ScannedGym.cs @@ -0,0 +1,27 @@ +namespace WhMgr.Services.Webhook.Cache +{ + using WhMgr.Common; + using WhMgr.Services.Webhook.Models; + + internal class ScannedGym : IScannedItem + { + public double Latitude { get; } + + public double Longitude { get; } + + public PokemonTeam Team { get; } + + public int SlotsAvailable { get; } + + public bool InBattle { get; } + + public ScannedGym(GymDetailsData gym) + { + Latitude = gym.Latitude; + Longitude = gym.Longitude; + Team = gym.Team; + SlotsAvailable = gym.SlotsAvailable; + InBattle = gym.InBattle; + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Cache/ScannedIncident.cs b/src/Services/Webhook/Cache/ScannedIncident.cs new file mode 100644 index 00000000..5431fc04 --- /dev/null +++ b/src/Services/Webhook/Cache/ScannedIncident.cs @@ -0,0 +1,37 @@ +namespace WhMgr.Services.Webhook.Cache +{ + using System; + + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + + using WhMgr.Extensions; + using WhMgr.Services.Webhook.Models; + + internal class ScannedIncident : IScannedItem + { + public double Latitude { get; } + + public double Longitude { get; } + + public InvasionCharacter Character { get; } + + public DateTime ExpireTime { get; } + + public bool IsExpired + { + get + { + var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); + return now >= ExpireTime; + } + } + + public ScannedIncident(IncidentData incident) + { + Latitude = incident.Latitude; + Longitude = incident.Longitude; + Character = incident.Character; + ExpireTime = incident.ExpirationTime; + } + } +} diff --git a/src/Services/Webhook/Cache/ScannedPokemon.cs b/src/Services/Webhook/Cache/ScannedPokemon.cs new file mode 100644 index 00000000..c27a91dc --- /dev/null +++ b/src/Services/Webhook/Cache/ScannedPokemon.cs @@ -0,0 +1,35 @@ +namespace WhMgr.Services.Webhook.Cache +{ + using System; + + using WhMgr.Extensions; + using WhMgr.Services.Webhook.Models; + + internal class ScannedPokemon : IScannedItem + { + public double Latitude { get; } + + public double Longitude { get; } + + public bool IsMissingStats { get; } + + public DateTime DespawnTime { get; } + + public bool IsExpired + { + get + { + var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); + return now >= DespawnTime; + } + } + + public ScannedPokemon(PokemonData pokemon) + { + Latitude = pokemon.Latitude; + Longitude = pokemon.Longitude; + IsMissingStats = pokemon.IsMissingStats; + DespawnTime = pokemon.DespawnTime; + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Cache/ScannedPokestop.cs b/src/Services/Webhook/Cache/ScannedPokestop.cs new file mode 100644 index 00000000..3c1887f1 --- /dev/null +++ b/src/Services/Webhook/Cache/ScannedPokestop.cs @@ -0,0 +1,36 @@ +namespace WhMgr.Services.Webhook.Cache +{ + using System; + + using WhMgr.Common; + using WhMgr.Extensions; + using WhMgr.Services.Webhook.Models; + + internal class ScannedPokestop : IScannedItem + { + public double Latitude { get; } + + public double Longitude { get; } + + public PokestopLureType LureType { get; } + + public DateTime LureExpireTime { get; } + + public bool IsExpired + { + get + { + var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); + return now >= LureExpireTime; + } + } + + public ScannedPokestop(PokestopData pokestop) + { + Latitude = pokestop.Latitude; + Longitude = pokestop.Longitude; + LureType = pokestop.LureType; + LureExpireTime = pokestop.LureExpireTime; + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Cache/ScannedQuest.cs b/src/Services/Webhook/Cache/ScannedQuest.cs new file mode 100644 index 00000000..f185b558 --- /dev/null +++ b/src/Services/Webhook/Cache/ScannedQuest.cs @@ -0,0 +1,37 @@ +namespace WhMgr.Services.Webhook.Cache +{ + using System; + + using POGOProtos.Rpc; + + using WhMgr.Extensions; + using WhMgr.Services.Webhook.Models; + + internal class ScannedQuest : IScannedItem + { + public double Latitude { get; } + + public double Longitude { get; } + + public QuestType Type { get; } + + public DateTime Added { get; } + + public bool IsExpired + { + get + { + var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); + return now.Day != Added.Day; + } + } + + public ScannedQuest(QuestData quest) + { + Latitude = quest.Latitude; + Longitude = quest.Longitude; + Type = quest.Type; + Added = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Cache/ScannedRaid.cs b/src/Services/Webhook/Cache/ScannedRaid.cs new file mode 100644 index 00000000..f856c7bb --- /dev/null +++ b/src/Services/Webhook/Cache/ScannedRaid.cs @@ -0,0 +1,44 @@ +namespace WhMgr.Services.Webhook.Cache +{ + using System; + + using WhMgr.Extensions; + using WhMgr.Services.Webhook.Models; + + internal class ScannedRaid : IScannedItem + { + public double Latitude { get; } + + public double Longitude { get; } + + public ushort Level { get; } + + public uint PokemonId { get; } + + public uint FormId { get; } + + public uint CostumeId { get; } + + public DateTime ExpireTime { get; } + + public bool IsExpired + { + get + { + var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); + return now >= ExpireTime; + } + } + + public ScannedRaid(RaidData raid) + { + Latitude = raid.Latitude; + Longitude = raid.Longitude; + Level = raid.Level; + PokemonId = raid.PokemonId; + FormId = raid.FormId; + CostumeId = raid.CostumeId; + ExpireTime = raid.EndTime; + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Cache/ScannedWeather.cs b/src/Services/Webhook/Cache/ScannedWeather.cs new file mode 100644 index 00000000..d20825d3 --- /dev/null +++ b/src/Services/Webhook/Cache/ScannedWeather.cs @@ -0,0 +1,39 @@ +namespace WhMgr.Services.Webhook.Cache +{ + using System; + + using WhMgr.Common; + using WhMgr.Extensions; + using WhMgr.Services.Webhook.Models; + + internal class ScannedWeather : IScannedItem + { + public double Latitude { get; } + + public double Longitude { get; } + + public WeatherCondition Condition { get; } + + public DateTime LastUpdated { get; set; } + + public bool IsExpired + { + get + { + var now = DateTime.UtcNow.ConvertTimeFromCoordinates(Latitude, Longitude); + // TODO: Review if last updated keeps being converted everytime it's accessed + var lastUpdated = LastUpdated.ConvertTimeFromCoordinates(Latitude, Longitude); + // Check if lastUpdated within the last 60 minutes, otherwise it's expired + return now >= lastUpdated.Subtract(new TimeSpan(0, 60, 0)); + } + } + + public ScannedWeather(WeatherData weather) + { + Latitude = weather.Latitude; + Longitude = weather.Longitude; + Condition = weather.GameplayCondition; + LastUpdated = weather.UpdatedTime; + } + } +} diff --git a/src/Services/Webhook/IWebhookPayload.cs b/src/Services/Webhook/IWebhookPayload.cs new file mode 100644 index 00000000..b92791f9 --- /dev/null +++ b/src/Services/Webhook/IWebhookPayload.cs @@ -0,0 +1,9 @@ +namespace WhMgr.Services.Webhook +{ + public interface IWebhookPayload + { + string Type { get; } + + dynamic Message { get; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/IWebhookProcessorService.cs b/src/Services/Webhook/IWebhookProcessorService.cs new file mode 100644 index 00000000..fed2f251 --- /dev/null +++ b/src/Services/Webhook/IWebhookProcessorService.cs @@ -0,0 +1,16 @@ +namespace WhMgr.Services.Webhook +{ + using System.Collections.Generic; + using System.Threading.Tasks; + + public interface IWebhookProcessorService + { + bool Enabled { get; } + + void Start(); + + void Stop(); + + Task ParseDataAsync(List payloads); + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/AccountData.cs b/src/Services/Webhook/Models/AccountData.cs new file mode 100644 index 00000000..884d9526 --- /dev/null +++ b/src/Services/Webhook/Models/AccountData.cs @@ -0,0 +1,163 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + using System.Threading.Tasks; + + using WhMgr.Data; + using WhMgr.Extensions; + using WhMgr.Services.Alarms; + using WhMgr.Services.Alarms.Embeds; + using WhMgr.Services.Discord.Models; + + public sealed class AccountData : IWebhookData + { + #region Properties + + [JsonPropertyName("username")] + public string Username { get; set; } + + [JsonPropertyName("failed")] + public string Failed { get; set; } + + [JsonPropertyName("failed_timestamp")] + public ulong FailedTimestamp { get; set; } + + [JsonIgnore] + public DateTime FailedTime { get; set; } + + [JsonPropertyName("first_warning_timestamp")] + public ulong FirstWarningTimestamp { get; set; } + + [JsonIgnore] + public DateTime FirstWarningTime { get; set; } + + [JsonPropertyName("suspended_message_acknowledged")] + public bool? SuspendedMessageAcknowledged { get; set; } + + [JsonPropertyName("was_suspended")] + public bool? WasSuspended { get; set; } + + [JsonPropertyName("warn_expire_timestamp")] + public ulong WarningExpireTimestamp { get; set; } + + [JsonIgnore] + public DateTime WarningExpireTime { get; set; } + + [JsonPropertyName("warn_message_acknowledged")] + public bool WarningMessageAcknowledged { get; set; } + + [JsonPropertyName("warn")] + public bool? IsWarned { get; set; } + + [JsonPropertyName("banned")] + public bool? IsBanned { get; set; } + + [JsonPropertyName("last_encounter_time")] + public ulong LastEncounterTimestamp { get; set; } + + [JsonIgnore] + public DateTime LastEncounterTime { get; set; } + + [JsonPropertyName("creation_timestamp")] + public ulong CreationTimestamp { get; set; } + + [JsonIgnore] + public DateTime CreationTime { get; set; } + + [JsonPropertyName("group")] + public string Group { get; set; } + + [JsonPropertyName("level")] + public ushort Level { get; set; } + + [JsonPropertyName("spins")] + public uint Spins { get; set; } + + #endregion + + public AccountData() + { + SetTimes(); + } + + public void SetTimes() + { + // TODO: Convert to time zone + FailedTime = FailedTimestamp.FromUnix(); + FirstWarningTime = FirstWarningTimestamp.FromUnix(); + WarningExpireTime = WarningExpireTimestamp.FromUnix(); + LastEncounterTime = LastEncounterTimestamp.FromUnix(); + CreationTime = CreationTimestamp.FromUnix(); + } + + public async Task GenerateEmbedMessageAsync(AlarmMessageSettings settings) + { + var embed = settings.Alarm?.Embeds[EmbedMessageType.Account] + ?? EmbedMessage.Defaults[EmbedMessageType.Account]; + settings.ImageUrl = ""; // TODO: Account image + var properties = GetPropertiesAsync(settings); + var eb = new DiscordEmbedMessage + { + Title = TemplateRenderer.Parse(embed.Title, properties), + Url = TemplateRenderer.Parse(embed.Url, properties), + Image = new DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.ImageUrl, properties), + }, + Thumbnail = new DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.IconUrl, properties), + }, + Description = TemplateRenderer.Parse(embed.Content, properties), + Color = Level.BuildRaidColor(GameMaster.Instance.DiscordEmbedColors).Value, + Footer = new DiscordEmbedFooter + { + Text = TemplateRenderer.Parse(embed.Footer?.Text, properties), + IconUrl = TemplateRenderer.Parse(embed.Footer?.IconUrl, properties) + }, + }; + var username = TemplateRenderer.Parse(embed.Username, properties); + var iconUrl = TemplateRenderer.Parse(embed.AvatarUrl, properties); + var description = TemplateRenderer.Parse(settings.Alarm?.Description, properties); + + await Task.CompletedTask; + return new DiscordWebhookMessage + { + Username = username, + AvatarUrl = iconUrl, + Content = description, + Embeds = new List { eb }, + }; + } + + private dynamic GetPropertiesAsync(AlarmMessageSettings properties) + { + var guild = properties.Client.Guilds.ContainsKey(properties.GuildId) + ? properties.Client.Guilds[properties.GuildId] + : null; + + var dict = new + { + username = Username, + is_banned = IsBanned, + is_warned = IsWarned, + failed = Failed, + failed_time = FailedTime.ToLongTimeString(), + spins = Spins, + level = Level, + group = Group, + + // Discord Guild properties + guild_name = guild?.Name, + guild_img_url = guild?.IconUrl, + + // Misc properties + date_time = DateTime.Now.ToString(), + br = "\n", + }; + return dict; + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/GenericEmbedProperties.cs b/src/Services/Webhook/Models/GenericEmbedProperties.cs new file mode 100644 index 00000000..892e6d11 --- /dev/null +++ b/src/Services/Webhook/Models/GenericEmbedProperties.cs @@ -0,0 +1,77 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System; + using System.Collections.Generic; + using System.Threading.Tasks; + + using DSharpPlus.Entities; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Services.Geofence; + using WhMgr.Services.Geofence.Geocoding; + using WhMgr.Services.Yourls; + + public class GenericEmbedProperties + { + public string GoogleMapsLocationLink { get; set; } + + public string AppleMapsLocationLink { get; set; } + + public string WazeMapsLocationLink { get; set; } + + public string ScannerMapsLocationLink { get; set; } + + public string Address { get; set; } + + public DiscordGuild Guild { get; set; } + + public DateTime Now { get; set; } + + + public static GenericEmbedProperties Generate(Config config, IReadOnlyDictionary guilds, ulong guildId, IWebhookPoint coord) + { + var data = GenerateAsync(config, guilds, guildId, coord).Result; + return data; + } + + /// + /// Generate generic properties all embeds use/share to reduce code redundancies. + /// + /// + /// + /// + /// + /// + public static async Task GenerateAsync(Config config, IReadOnlyDictionary guilds, ulong guildId, IWebhookPoint coord) + { + var gmapsLink = string.Format(Strings.Defaults.GoogleMaps, coord.Latitude, coord.Longitude); + var appleMapsLink = string.Format(Strings.Defaults.AppleMaps, coord.Latitude, coord.Longitude); + var wazeMapsLink = string.Format(Strings.Defaults.WazeMaps, coord.Latitude, coord.Longitude); + var scannerMapsLink = string.Format(config.Urls.ScannerMap, coord.Latitude, coord.Longitude); + + var urlShortener = new UrlShortener(config.ShortUrlApi); + var gmapsLocationLink = await urlShortener.CreateAsync(gmapsLink); + var appleMapsLocationLink = await urlShortener.CreateAsync(appleMapsLink); + var wazeMapsLocationLink = await urlShortener.CreateAsync(wazeMapsLink); + var scannerMapsLocationLink = await urlShortener.CreateAsync(scannerMapsLink); + var address = await ReverseGeocodingLookup.Instance.GetAddressAsync(new Coordinate(coord)); + + var now = DateTime.UtcNow.ConvertTimeFromCoordinates(coord); + var guild = guilds?.ContainsKey(guildId) ?? false + ? guilds[guildId] + : null; + + return new GenericEmbedProperties + { + GoogleMapsLocationLink = gmapsLocationLink, + AppleMapsLocationLink = appleMapsLocationLink, + WazeMapsLocationLink = wazeMapsLocationLink, + ScannerMapsLocationLink = scannerMapsLocationLink, + Address = address ?? string.Empty, + Guild = guild, + Now = now, + }; + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/GymDetailsData.cs b/src/Services/Webhook/Models/GymDetailsData.cs new file mode 100644 index 00000000..9da1737a --- /dev/null +++ b/src/Services/Webhook/Models/GymDetailsData.cs @@ -0,0 +1,289 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + using System.Threading.Tasks; + + using DSharpPlus.Entities; + + using WhMgr.Common; + using WhMgr.Extensions; + using WhMgr.Localization; + using WhMgr.Services.Alarms; + using WhMgr.Services.Alarms.Embeds; + using WhMgr.Services.Discord.Models; + using WhMgr.Services.Icons; + using WhMgr.Services.StaticMap; + + [Table("gym")] + public sealed class GymDetailsData : IWebhookData, IWebhookFort, IWebhookPowerLevel, IWebhookPoint + { + #region Properties + + [ + JsonPropertyName("id"), + Column("id"), + Key, + ] + public string FortId { get; set; } + + [ + JsonPropertyName("name"), + Column("name"), + ] + public string FortName { get; set; } = "Unknown"; + + [ + JsonPropertyName("url"), + Column("url"), + ] + public string FortUrl { get; set; } + + [ + JsonPropertyName("latitude"), + Column("lat"), + ] + public double Latitude { get; set; } + + [ + JsonPropertyName("longitude"), + Column("lon"), + ] + public double Longitude { get; set; } + + [ + JsonPropertyName("team_id"), + Column("team_id"), + ] + public PokemonTeam Team { get; set; } = PokemonTeam.Neutral; + + [ + JsonPropertyName("slots_available"), + Column("available_slots"), + ] + public ushort SlotsAvailable { get; set; } + + [ + JsonPropertyName("guard_pokemon_id"), + Column("guarding_pokemon_id"), + ] + public uint GuardingPokemonId { get; set; } + + [ + JsonPropertyName("total_cp"), + Column("total_cp"), + ] + public uint TotalCp { get; set; } + + [ + JsonPropertyName("ex_raid_eligible"), + Column("ex_raid_eligible"), + ] + public bool IsExEligible { get; set; } + + [ + JsonPropertyName("sponsor_id"), + Column("sponsor_id"), + ] + public uint? SponsorId { get; set; } + + [ + JsonPropertyName("power_up_points"), + NotMapped, + ] + public uint PowerUpPoints { get; set; } + + [ + JsonPropertyName("power_up_level"), + NotMapped, + ] + public ushort PowerUpLevel { get; set; } + + [ + JsonPropertyName("power_up_end_timestamp"), + NotMapped, + ] + public ulong PowerUpEndTimestamp { get; set; } + + [ + JsonPropertyName("in_battle"), + Column("in_battle"), + ] + public bool InBattle { get; set; } + + [ + JsonPropertyName("ar_scan_eligible"), + Column("ar_scan_eligible"), + ] + public bool? IsArScanEligible { get; set; } + + [ + JsonPropertyName("last_modified"), + Column("last_modified_timestamp"), + ] + public ulong LastModified { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime PowerUpEndTime { get; private set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime LastModifiedTime { get; private set; } + + #endregion + + /// + /// Set expire times because .NET doesn't support Unix timestamp deserialization to class by default. + /// + public void SetTimes() + { + PowerUpEndTime = PowerUpEndTimestamp + .FromUnix() + .ConvertTimeFromCoordinates(this); + + LastModifiedTime = LastModified + .FromUnix() + .ConvertTimeFromCoordinates(this); + } + + public async Task GenerateEmbedMessageAsync(AlarmMessageSettings settings) + { + var server = settings.Config.Instance.Servers[settings.GuildId]; + var embedType = EmbedMessageType.Gyms; + var embed = settings.Alarm?.Embeds[embedType] + ?? server.Subscriptions?.Embeds?[embedType] + ?? EmbedMessage.Defaults[embedType]; + var properties = await GetPropertiesAsync(settings).ConfigureAwait(false); + var eb = new DiscordEmbedMessage + { + Title = TemplateRenderer.Parse(embed.Title, properties), + Url = TemplateRenderer.Parse(embed.Url, properties), + Image = new Discord.Models.DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.ImageUrl, properties), + }, + Thumbnail = new Discord.Models.DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.IconUrl, properties), + }, + Description = TemplateRenderer.Parse(embed.Content, properties), + Color = ( + Team == PokemonTeam.Mystic + ? DiscordColor.Blue + : Team == PokemonTeam.Valor + ? DiscordColor.Red + : Team == PokemonTeam.Instinct + ? DiscordColor.Yellow + : DiscordColor.LightGray + ).Value, + Footer = new Discord.Models.DiscordEmbedFooter + { + Text = TemplateRenderer.Parse(embed.Footer?.Text, properties), + IconUrl = TemplateRenderer.Parse(embed.Footer?.IconUrl, properties) + } + }; + var username = TemplateRenderer.Parse(embed.Username, properties); + var iconUrl = TemplateRenderer.Parse(embed.AvatarUrl, properties); + var description = TemplateRenderer.Parse(settings.Alarm?.Description, properties); + return new DiscordWebhookMessage + { + Username = username, + AvatarUrl = iconUrl, + Content = description, + Embeds = new List { eb }, + }; + } + + private async Task GetPropertiesAsync(AlarmMessageSettings properties) + { + var config = properties.Config.Instance; + // Get old gym from cache + var oldGym = await properties.MapDataCache.GetGym(FortId).ConfigureAwait(false); + var exEmoji = Strings.EX.GetEmojiIcon(null, true); + var teamEmoji = Team.GetEmojiIcon(null, true); + var oldTeamEmoji = oldGym?.Team.GetEmojiIcon(null, true); + var gymImageUrl = UIconService.Instance.GetGymIcon(config.Servers[properties.GuildId].IconStyle, Team); + + var locProperties = await GenericEmbedProperties.GenerateAsync(config, properties.Client.Guilds, properties.GuildId, this); + var staticMapLink = await config.StaticMaps?.GenerateStaticMapAsync( + StaticMapType.Gyms, + this, + gymImageUrl, + properties.MapDataCache, + Team + ); + var powerUpEndTimeLeft = locProperties.Now.GetTimeRemaining(PowerUpEndTime).ToReadableStringNoSeconds(); + + const string defaultMissingValue = "?"; + var dict = new + { + // Main properties + gym_id = FortId, + gym_name = FortName, + gym_url = FortUrl, + gym_team = Team, + gym_team_id = Convert.ToInt32(Team), + gym_team_emoji = teamEmoji, + old_gym_team = oldGym?.Team, + old_gym_team_id = Convert.ToInt32(oldGym?.Team ?? 0), + old_gym_team_emoji = oldTeamEmoji, + team_changed = oldGym?.Team != Team, + in_battle = InBattle, + under_attack = InBattle, + is_ex = IsExEligible, + sponsor_id = SponsorId, + ex_emoji = exEmoji, + slots_available = SlotsAvailable == 0 + ? Translator.Instance.Translate("FULL") + : SlotsAvailable == 6 + ? Translator.Instance.Translate("Empty") + : SlotsAvailable.ToString("N0"), + is_ar = IsArScanEligible ?? false, + guarding_pokemon_id = GuardingPokemonId, + guarding_pokemon_name = Translator.Instance.GetPokemonName(GuardingPokemonId), + last_modified = LastModifiedTime, + total_cp = TotalCp, + + // Gym power up properties + power_up_points = PowerUpPoints, + power_up_level = PowerUpLevel, + power_up_end_time = PowerUpEndTime.ToLongTimeString(), + power_up_end_time_24h = PowerUpEndTime.ToString("HH:mm:ss"), + power_up_end_time_left = powerUpEndTimeLeft, + + // Location properties + geofence = properties.City ?? defaultMissingValue, + lat = Latitude.ToString(), + lng = Longitude.ToString(), + lat_5 = Latitude.ToString("0.00000"), + lng_5 = Longitude.ToString("0.00000"), + + // Location links + tilemaps_url = staticMapLink, + gmaps_url = locProperties.GoogleMapsLocationLink, + applemaps_url = locProperties.AppleMapsLocationLink, + wazemaps_url = locProperties.WazeMapsLocationLink, + scanmaps_url = locProperties.ScannerMapsLocationLink, + + address = locProperties.Address, + + // Discord Guild properties + guild_name = locProperties.Guild?.Name, + guild_img_url = locProperties.Guild?.IconUrl, + + // Misc properties + date_time = DateTime.Now.ToString(), + br = "\n", + }; + return dict; + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/IWebhookData.cs b/src/Services/Webhook/Models/IWebhookData.cs new file mode 100644 index 00000000..4770492d --- /dev/null +++ b/src/Services/Webhook/Models/IWebhookData.cs @@ -0,0 +1,15 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System.Text.Json.Serialization; + using System.Threading.Tasks; + + using WhMgr.Services.Alarms; + using WhMgr.Services.Discord.Models; + + public interface IWebhookData + { + Task GenerateEmbedMessageAsync(AlarmMessageSettings settings); + + void SetTimes(); + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/IWebhookFort.cs b/src/Services/Webhook/Models/IWebhookFort.cs new file mode 100644 index 00000000..4f128928 --- /dev/null +++ b/src/Services/Webhook/Models/IWebhookFort.cs @@ -0,0 +1,11 @@ +namespace WhMgr.Services.Webhook.Models +{ + public interface IWebhookFort + { + string FortId { get; } + + string FortName { get; } + + string FortUrl { get; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/IWebhookPoint.cs b/src/Services/Webhook/Models/IWebhookPoint.cs new file mode 100644 index 00000000..eae163a2 --- /dev/null +++ b/src/Services/Webhook/Models/IWebhookPoint.cs @@ -0,0 +1,9 @@ +namespace WhMgr.Services.Webhook.Models +{ + public interface IWebhookPoint + { + double Latitude { get; } + + double Longitude { get; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/IWebhookPokemon.cs b/src/Services/Webhook/Models/IWebhookPokemon.cs new file mode 100644 index 00000000..373cf54d --- /dev/null +++ b/src/Services/Webhook/Models/IWebhookPokemon.cs @@ -0,0 +1,11 @@ +namespace WhMgr.Services.Webhook.Models +{ + public interface IWebhookPokemon + { + uint PokemonId { get; } + + uint FormId { get; } + + uint CostumeId { get; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/IWebhookPowerLevel.cs b/src/Services/Webhook/Models/IWebhookPowerLevel.cs new file mode 100644 index 00000000..b0744d01 --- /dev/null +++ b/src/Services/Webhook/Models/IWebhookPowerLevel.cs @@ -0,0 +1,15 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System; + + public interface IWebhookPowerLevel + { + uint PowerUpPoints { get; } + + ushort PowerUpLevel { get; } + + ulong PowerUpEndTimestamp { get; } + + public DateTime PowerUpEndTime { get; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/IncidentData.cs b/src/Services/Webhook/Models/IncidentData.cs new file mode 100644 index 00000000..d2a2cc5e --- /dev/null +++ b/src/Services/Webhook/Models/IncidentData.cs @@ -0,0 +1,343 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + using System.Threading.Tasks; + + using DSharpPlus.Entities; + using POGOProtos.Rpc; + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + using PokemonGender = POGOProtos.Rpc.BelugaPokemonProto.Types.PokemonGender; + using PokestopStyle = POGOProtos.Rpc.EnumWrapper.Types.PokestopStyle; + + using WhMgr.Common; + using WhMgr.Data; + using WhMgr.Extensions; + using WhMgr.Localization; + using WhMgr.Services.Alarms; + using WhMgr.Services.Alarms.Embeds; + using WhMgr.Services.Discord.Models; + using WhMgr.Services.Icons; + using WhMgr.Services.StaticMap; + + [Table("incident")] + public sealed class IncidentData : IWebhookData, IWebhookPoint + { + #region Properties + + [ + JsonPropertyName("pokestop_id"), + Column("pokestop_id"), + ForeignKey("pokestop_id"), + ] + public string PokestopId { get; set; } + + [JsonIgnore] + public PokestopData Pokestop { get; set; } + + [ + JsonPropertyName("id"), + Column("id"), + Key, + ] + public string Id { get; set; } + + /* + [ + JsonPropertyName("pokestop_id"), + Column("pokestop_id"), + ] + public string PokestopId { get; set; } + */ + + [ + JsonPropertyName("pokestop_name"), + NotMapped, + ] + public string PokestopName { get; set; } = "Unknown"; + + [ + JsonPropertyName("url"), + NotMapped, + ] + public string Url { get; set; } + + [ + JsonPropertyName("latitude"), + NotMapped, + ] + public double Latitude { get; set; } + + [ + JsonPropertyName("longitude"), + NotMapped, + ] + public double Longitude { get; set; } + + [ + JsonPropertyName("enabled"), + NotMapped, + ] + public bool Enabled { get; set; } + + [ + JsonPropertyName("display_type"), + Column("display_type"), + ] + public IncidentDisplayType DisplayType { get; set; } + + [ + JsonPropertyName("style"), + Column("style"), + ] + public PokestopStyle Style { get; set; } + + [ + JsonPropertyName("character"), + Column("character"), + ] + public InvasionCharacter Character { get; set; } + + [ + JsonPropertyName("start"), + Column("start"), + ] + public long Start { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime StartTime { get; set; } + + [ + JsonPropertyName("expiration"), + Column("expiration"), + ] + public long Expiration { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime ExpirationTime { get; set; } + + [ + JsonPropertyName("updated"), + Column("updated"), + ] + public ulong Updated { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime UpdatedTime { get; set; } + + #endregion + + #region Constructor + + public IncidentData() + { + SetTimes(); + } + + #endregion + + #region Public Methods + + /// + /// Set expire times because .NET doesn't support Unix timestamp deserialization to class by default. + /// + public void SetTimes() + { + StartTime = Start + .FromUnix() + .ConvertTimeFromCoordinates(this); + + ExpirationTime = Expiration + .FromUnix() + .ConvertTimeFromCoordinates(this); + + UpdatedTime = Updated + .FromUnix() + .ConvertTimeFromCoordinates(this); + } + + public async Task GenerateEmbedMessageAsync(AlarmMessageSettings settings) + { + var server = settings.Config.Instance.Servers[settings.GuildId]; + var embedType = EmbedMessageType.Invasions; + var embed = settings.Alarm?.Embeds[embedType] + ?? server.Subscriptions?.Embeds?[embedType] + ?? EmbedMessage.Defaults[embedType]; + var properties = await GetPropertiesAsync(settings).ConfigureAwait(false); + var eb = new DiscordEmbedMessage + { + Title = TemplateRenderer.Parse(embed.Title, properties), + Url = TemplateRenderer.Parse(embed.Url, properties), + Image = new Discord.Models.DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.ImageUrl, properties), + }, + Thumbnail = new Discord.Models.DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.IconUrl, properties), + }, + Description = TemplateRenderer.Parse(embed.Content, properties), + Color = new DiscordColor(GameMaster.Instance.DiscordEmbedColors.Pokestops.Invasions).Value, + Footer = new Discord.Models.DiscordEmbedFooter + { + Text = TemplateRenderer.Parse(embed.Footer?.Text, properties), + IconUrl = TemplateRenderer.Parse(embed.Footer?.IconUrl, properties) + }, + }; + var username = TemplateRenderer.Parse(embed.Username, properties); + var iconUrl = TemplateRenderer.Parse(embed.AvatarUrl, properties); + var description = TemplateRenderer.Parse(settings.Alarm?.Description, properties); + return new DiscordWebhookMessage + { + Username = username, + AvatarUrl = iconUrl, + Content = description, + Embeds = new List { eb }, + }; + } + + #endregion + + #region Private Methods + + private async Task GetPropertiesAsync(AlarmMessageSettings properties) + { + var config = properties.Config.Instance; + var server = config.Servers[properties.GuildId]; + var imageUrl = UIconService.Instance.GetInvasionIcon(server.IconStyle, Character); + + var locProperties = await GenericEmbedProperties.GenerateAsync(config, properties.Client.Guilds, properties.GuildId, this); + var staticMapLink = await config.StaticMaps?.GenerateStaticMapAsync( + StaticMapType.Invasions, + this, + imageUrl, + properties.MapDataCache + ); + + var invasion = GameMaster.Instance.GruntTypes.ContainsKey(Character) + ? GameMaster.Instance.GruntTypes[Character] + : null; + var leaderString = Translator.Instance.GetGruntType(Character); + var pokemonType = GameMaster.Instance.GruntTypes.ContainsKey(Character) + ? GetPokemonTypeFromString(invasion?.Type) + : PokemonType.None; + var invasionTypeEmoji = pokemonType == PokemonType.None + ? leaderString + : pokemonType.GetTypeEmojiIcons(); + var invasionEncounters = Character > 0 + ? invasion.GetPossibleInvasionEncounters() + : new List(); + var invasionExpireTimeLeft = locProperties.Now.GetTimeRemaining(ExpirationTime).ToReadableStringNoSeconds(); + + const string defaultMissingValue = "?"; + var dict = new + { + // Main properties + has_invasion = true, + grunt_type = invasion?.Type, + character = invasion?.Type, + display_type = DisplayType, + display_type_id = Convert.ToInt32(DisplayType), + style = Style, + style_id = Convert.ToInt32(Style), + grunt_type_emoji = invasionTypeEmoji, + grunt_gender = invasion?.Gender, + grunt_gender_id = Convert.ToInt32(invasion?.Gender ?? PokemonGender.GenderUnset), + invasion_expire_time = ExpirationTime.ToLongTimeString(), + invasion_expire_time_24h = ExpirationTime.ToString("HH:mm:ss"), + invasion_expire_time_left = invasionExpireTimeLeft, + invasion_encounters = invasionEncounters, + + // Location properties + geofence = properties.City ?? defaultMissingValue, + lat = Latitude, + lng = Longitude, + lat_5 = Latitude.ToString("0.00000"), + lng_5 = Longitude.ToString("0.00000"), + + // Location links + tilemaps_url = staticMapLink, + gmaps_url = locProperties.GoogleMapsLocationLink, + applemaps_url = locProperties.AppleMapsLocationLink, + wazemaps_url = locProperties.WazeMapsLocationLink, + scanmaps_url = locProperties.ScannerMapsLocationLink, + + // Pokestop properties + pokestop_id = PokestopId ?? defaultMissingValue, + pokestop_name = PokestopName ?? defaultMissingValue, + pokestop_url = Url ?? defaultMissingValue, + invasion_img_url = imageUrl, + + address = locProperties.Address, + + // Discord Guild properties + guild_name = locProperties.Guild?.Name, + guild_img_url = locProperties.Guild?.IconUrl, + + // Misc properties + date_time = DateTime.Now.ToString(), + br = "\n", + }; + return dict; + } + + private static PokemonType GetPokemonTypeFromString(string pokemonType) + { + var type = pokemonType.ToLower(); + if (type.Contains("bug")) + return PokemonType.Bug; + else if (type.Contains("dark")) + return PokemonType.Dark; + else if (type.Contains("dragon")) + return PokemonType.Dragon; + else if (type.Contains("electric")) + return PokemonType.Electric; + else if (type.Contains("fairy")) + return PokemonType.Fairy; + else if (type.Contains("fighting") || type.Contains("fight")) + return PokemonType.Fighting; + else if (type.Contains("fire")) + return PokemonType.Fire; + else if (type.Contains("flying") || type.Contains("fly")) + return PokemonType.Flying; + else if (type.Contains("ghost")) + return PokemonType.Ghost; + else if (type.Contains("grass")) + return PokemonType.Grass; + else if (type.Contains("ground")) + return PokemonType.Ground; + else if (type.Contains("ice")) + return PokemonType.Ice; + //else if (type.Contains("tierii") || type.Contains("none") || type.Contains("tier2") || type.Contains("t2")) + // return PokemonType.None; + else if (type.Contains("normal")) + return PokemonType.Normal; + else if (type.Contains("poison")) + return PokemonType.Poison; + else if (type.Contains("psychic")) + return PokemonType.Psychic; + else if (type.Contains("rock")) + return PokemonType.Rock; + else if (type.Contains("steel")) + return PokemonType.Steel; + else if (type.Contains("water")) + return PokemonType.Water; + else + return PokemonType.None; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/PokemonData.cs b/src/Services/Webhook/Models/PokemonData.cs new file mode 100644 index 00000000..d866dfcd --- /dev/null +++ b/src/Services/Webhook/Models/PokemonData.cs @@ -0,0 +1,612 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + using System.Threading.Tasks; + + using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; + using WeatherCondition = POGOProtos.Rpc.GameplayWeatherProto.Types.WeatherCondition; + + using WhMgr.Common; + using WhMgr.Data; + using WhMgr.Extensions; + using WhMgr.Localization; + using WhMgr.Services.Alarms; + using WhMgr.Services.Alarms.Embeds; + using WhMgr.Services.Discord.Models; + using WhMgr.Services.Icons; + using WhMgr.Services.StaticMap; + + [Table("pokemon")] + public sealed class PokemonData : IWebhookData, IWebhookPokemon, IWebhookPoint + { + #region Properties + + [ + JsonPropertyName("pokemon_id"), + Column("pokemon_id"), + ] + public uint PokemonId { get; set; } + + [ + JsonPropertyName("cp"), + Column("cp"), + ] + public uint? CP { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public string IV => IVReal == -1 ? "?" : IVReal + "%"; + + [ + JsonIgnore, + NotMapped, + ] + public string IVRounded => IVReal == -1 ? "?" : Math.Round(IVReal) + "%"; + + [ + JsonIgnore, + NotMapped, + ] + public double IVReal + { + get + { + if (Attack == null || Defense == null || Stamina == null) + { + return -1; + } + + var atk = Attack ?? 0; + var def = Defense ?? 0; + var sta = Stamina ?? 0; + + return Math.Round((sta + atk + def) * 100.0 / 45.0, 1); + } + } + + [ + JsonPropertyName("individual_stamina"), + Column("sta_iv"), + ] + public ushort? Stamina { get; set; } + + [ + JsonPropertyName("individual_attack"), + Column("atk_iv"), + ] + public ushort? Attack { get; set; } + + [ + JsonPropertyName("individual_defense"), + Column("def_iv"), + ] + public ushort? Defense { get; set; } + + [ + JsonPropertyName("gender"), + Column("gender"), + ] + public Gender Gender { get; set; } + + [ + JsonPropertyName("costume"), + Column("costume"), + ] + public uint CostumeId { get; set; } + + [ + JsonPropertyName("pokemon_level"), + Column("level"), + ] + public ushort? Level { get; set; } + + [ + JsonPropertyName("latitude"), + Column("lat"), + ] + public double Latitude { get; set; } + + [ + JsonPropertyName("longitude"), + Column("lon"), + ] + public double Longitude { get; set; } + + [ + JsonPropertyName("move_1"), + Column("move_1"), + ] + public ushort? FastMove { get; set; } + + [ + JsonPropertyName("move_2"), + Column("move_2"), + ] + public ushort? ChargeMove { get; set; } + + [ + JsonPropertyName("height"), + Column("size"), + ] + public double? Height { get; set; } + + [ + JsonPropertyName("weight"), + Column("weight"), + ] + public double? Weight { get; set; } + + [ + JsonPropertyName("encounter_id"), + Column("id"), + Key, + ] + public string EncounterId { get; set; } + + [ + JsonPropertyName("spawnpoint_id"), + //Column("spawn_id"), + NotMapped, + ] + public string SpawnpointId { get; set; } + + [ + JsonPropertyName("disappear_time"), + Column("expire_timestamp"), + ] + public long DisappearTime { get; set; } + + [ + JsonPropertyName("disappear_time_verified"), + Column("expire_timestamp_verified"), + ] + public bool DisappearTimeVerified { get; set; } + + [ + JsonPropertyName("first_seen"), + Column("first_seen_timestamp"), + ] + public long FirstSeen { get; set; } + + [ + JsonPropertyName("last_modified_time"), + Column("changed"), + ] + public long LastModified { get; set; } + + [ + JsonPropertyName("pokestop_id"), + Column("pokestop_id"), + ] + public string PokestopId { get; set; } + + [ + JsonPropertyName("weather"), + Column("weather"), + ] + public WeatherCondition? Weather { get; set; } + + [ + JsonPropertyName("form"), + Column("form"), + ] + public uint FormId { get; set; } + + [ + JsonPropertyName("shiny"), + Column("shiny"), + ] + public bool? Shiny { get; set; } + + [ + JsonPropertyName("username"), + Column("username"), + ] + public string Username { get; set; } + + [ + JsonPropertyName("updated"), + Column("updated"), + ] + public long Updated { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime DespawnTime { get; private set; } + + [ + JsonIgnore, + NotMapped, + ] + public TimeSpan SecondsLeft { get; private set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime FirstSeenTime { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime LastModifiedTime { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime UpdatedTime { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public PokemonSize? Size + { + get + { + if (Height == null || Weight == null) + { + return null; + } + return PokemonId.GetSize(Height ?? 0, Weight ?? 0); + } + } + + [ + JsonIgnore, + NotMapped, + ] + public bool IsDitto => PokemonId == 132; + + [ + JsonPropertyName("display_pokemon_id"), + Column("display_pokemon_id"), + ] + public uint? DisplayPokemonId { get; set; } + + #region PvP + + [ + JsonIgnore, + NotMapped, + ] + public bool HasPvpRankings => (PvpRankings?.Keys.Count ?? 0) > 0; + + [ + JsonPropertyName("pvp"), + Column("pvp"), + ] + public Dictionary> PvpRankings { get; set; } + + #endregion + + #region Catch Rates + + [ + JsonPropertyName("capture_1"), + Column("capture_1"), + ] + public double? CatchRate1 { get; set; } + + [ + JsonPropertyName("capture_2"), + Column("capture_2"), + ] + public double? CatchRate2 { get; set; } + + [ + JsonPropertyName("capture_3"), + Column("capture_3"), + ] + public double? CatchRate3 { get; set; } + + #endregion + + [ + JsonPropertyName("is_event"), + NotMapped, + ] + public bool? IsEvent { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public bool IsMissingStats => Level == null; + + #endregion + + #region Constructor + + /// + /// Instantiate a new class. + /// + public PokemonData() + { + PvpRankings = new Dictionary>(); + } + + #endregion + + #region Public Methods + + /// + /// Set despawn times because .NET doesn't support Unix timestamp + /// deserialization to class by default. + /// + public void SetTimes() + { + DespawnTime = DisappearTime + .FromUnix() + .ConvertTimeFromCoordinates(this); + + SecondsLeft = DespawnTime + .Subtract(DateTime.UtcNow + .ConvertTimeFromCoordinates(this)); + + FirstSeenTime = FirstSeen + .FromUnix() + .ConvertTimeFromCoordinates(this); + + LastModifiedTime = LastModified + .FromUnix() + .ConvertTimeFromCoordinates(this); + + UpdatedTime = Updated + .FromUnix() + .ConvertTimeFromCoordinates(this); + } + + /// + /// Generate a Discord embed Pokemon message + /// + /// Guild the notification is for + /// Discord client + /// Webhook config + /// Webhook alarm + /// City the Pokemon was found in + /// DiscordEmbedNotification object to send + public async Task GenerateEmbedMessageAsync(AlarmMessageSettings settings) + { + // If IV has value then use alarmText if not null otherwise use default. If no stats use default missing stats alarmText + var server = settings.Config.Instance.Servers[settings.GuildId]; + var embedType = IsMissingStats + ? EmbedMessageType.PokemonMissingStats + : EmbedMessageType.Pokemon; + var embed = settings.Alarm?.Embeds[embedType] + ?? server.Subscriptions?.Embeds?[embedType] + ?? EmbedMessage.Defaults[embedType]; + settings.ImageUrl = UIconService.Instance.GetPokemonIcon(server.IconStyle, PokemonId, FormId, 0, Gender, CostumeId, false); + var properties = await GetPropertiesAsync(settings).ConfigureAwait(false); + var eb = new DiscordEmbedMessage + { + Title = TemplateRenderer.Parse(embed.Title, properties), + Url = TemplateRenderer.Parse(embed.Url, properties), + Image = new DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.ImageUrl, properties), + }, + Thumbnail = new DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.IconUrl, properties), + }, + Description = TemplateRenderer.Parse(embed.Content, properties), + Color = ( + HasPvpRankings + ? GameMaster.Instance.DiscordEmbedColors.GetPvPColor(PvpRankings) + : IVReal.BuildPokemonIVColor(GameMaster.Instance.DiscordEmbedColors) + ).Value, + Footer = new DiscordEmbedFooter + { + Text = TemplateRenderer.Parse(embed.Footer?.Text, properties), + IconUrl = TemplateRenderer.Parse(embed.Footer?.IconUrl, properties) + } + }; + var username = TemplateRenderer.Parse(embed.Username, properties); + var iconUrl = TemplateRenderer.Parse(embed.AvatarUrl, properties); + var description = TemplateRenderer.Parse(settings.Alarm?.Description, properties); + return new DiscordWebhookMessage + { + Username = username, + AvatarUrl = iconUrl, + Content = description, + Embeds = new List { eb }, + }; + } + + #endregion + + #region Private Methods + + private async Task GetPropertiesAsync(AlarmMessageSettings properties) + { + var config = properties.Config.Instance; + var pkmnInfo = GameMaster.GetPokemon(PokemonId, FormId); + var pkmnName = Translator.Instance.GetPokemonName(PokemonId); + var form = Translator.Instance.GetFormName(FormId); + var costume = Translator.Instance.GetCostumeName(CostumeId); + var gender = Gender.GetPokemonGenderIcon(); + var genderEmoji = Gender.GetEmojiIcon("gender", true); + var level = Level; + var size = Size?.ToString(); + var weather = Weather?.ToString(); + var hasWeather = Weather.HasValue && Weather != WeatherCondition.None; + var isWeatherBoosted = pkmnInfo?.IsWeatherBoosted(Weather ?? WeatherCondition.None); + var weatherEmoji = Weather != WeatherCondition.None + ? Weather.GetEmojiIcon("weather", false) + : null; + var move1 = FastMove != null + ? Translator.Instance.GetMoveName(FastMove ?? 0) + : "Unknown"; + var move2 = ChargeMove != null + ? Translator.Instance.GetMoveName(ChargeMove ?? 0) + : "Unknown"; + + var type1 = pkmnInfo?.Types?.Count >= 1 + ? pkmnInfo.Types[0] + : PokemonType.None; + var type2 = pkmnInfo?.Types?.Count > 1 + ? pkmnInfo.Types[1] + : PokemonType.None; + var typeEmojis = pkmnInfo?.Types?.GetTypeEmojiIcons() ?? string.Empty; + var catchPokemon = IsDitto + ? Translator.Instance.GetPokemonName(DisplayPokemonId ?? PokemonId) + : pkmnName; + var isShiny = Shiny ?? false; + var height = Height != null + ? Math.Round(Height ?? 0).ToString() + : ""; + var weight = Weight != null + ? Math.Round(Weight ?? 0).ToString() + : ""; + + var locProperties = await GenericEmbedProperties.GenerateAsync(config, properties.Client.Guilds, properties.GuildId, this); + var staticMapLink = await config.StaticMaps?.GenerateStaticMapAsync( + StaticMapType.Pokemon, + this, + properties.ImageUrl, + properties.MapDataCache + ); + var pokestop = properties.MapDataCache.GetPokestop(PokestopId).ConfigureAwait(false) + .GetAwaiter() + .GetResult(); + + // TODO: Make configurable for user to add individual league icons + var greatLeagueEmoji = PvpLeague.Great.GetEmojiIcon("league", true); + var ultraLeagueEmoji = PvpLeague.Ultra.GetEmojiIcon("league", true); + + const string defaultMissingValue = "?"; + var dict = new + { + // Main properties + pkmn_id = PokemonId, + pkmn_id_3 = PokemonId.ToString("D3"), + pkmn_name = pkmnName, + pkmn_img_url = properties.ImageUrl, + form, + form_id = FormId, + form_id_3 = FormId.ToString("D3"), + costume = costume ?? defaultMissingValue, + costume_id = CostumeId, + costume_id_3 = CostumeId.ToString("D3"), + cp = CP == null ? defaultMissingValue : Convert.ToString(CP), + lvl = level == null ? defaultMissingValue : Convert.ToString(level), + gender, + gender_emoji = genderEmoji, + size = size ?? defaultMissingValue, + move_1 = move1 ?? defaultMissingValue, + move_2 = move2 ?? defaultMissingValue, + moveset = $"{move1}/{move2}", + type_1 = type1.ToString() ?? defaultMissingValue, + type_2 = type2.ToString() ?? defaultMissingValue, + //type_1_emoji = type1Emoji, + //type_2_emoji = type2Emoji, + types = $"{type1} | {type2}", + types_emoji = typeEmojis, + atk_iv = Attack == null + ? defaultMissingValue + : Attack.ToString(), + def_iv = Defense == null + ? defaultMissingValue + : Defense.ToString(), + sta_iv = Stamina == null + ? defaultMissingValue + : Stamina.ToString(), + iv = IV ?? defaultMissingValue, + iv_rnd = IVRounded ?? defaultMissingValue, + is_shiny = isShiny, + + // Catch rate properties + has_capture_rates = CatchRate1.HasValue && CatchRate2.HasValue && CatchRate3.HasValue, + capture_1 = CatchRate1.HasValue + ? Math.Round(CatchRate1.Value * 100).ToString() + : string.Empty, + capture_2 = CatchRate2.HasValue + ? Math.Round(CatchRate2.Value * 100).ToString() + : string.Empty, + capture_3 = CatchRate3.HasValue + ? Math.Round(CatchRate3.Value * 100).ToString() + : string.Empty, + capture_1_emoji = CaptureRateType.PokeBall.GetEmojiIcon("capture", false), + capture_2_emoji = CaptureRateType.GreatBall.GetEmojiIcon("capture", false), + capture_3_emoji = CaptureRateType.UltraBall.GetEmojiIcon("capture", false), + + // PvP stat properties + is_pvp = HasPvpRankings, + great_league_emoji = greatLeagueEmoji, + ultra_league_emoji = ultraLeagueEmoji, + has_pvp = HasPvpRankings, + // TODO: Filter pvp rankings using Strings.Defaults.Pvp settings to remove clutter/useless ranks + pvp = this.GetLeagueRanks(), //PvpRankings + + // Other properties + height = height ?? defaultMissingValue, + weight = weight ?? defaultMissingValue, + is_ditto = IsDitto, + original_pkmn_id = Convert.ToString(DisplayPokemonId), + original_pkmn_id_3 = (DisplayPokemonId ?? 0).ToString("D3"), + original_pkmn_name = catchPokemon, + is_weather_boosted = isWeatherBoosted, + has_weather = hasWeather, + weather = weather ?? defaultMissingValue, + weather_emoji = weatherEmoji ?? defaultMissingValue, + username = Username ?? defaultMissingValue, + spawnpoint_id = SpawnpointId ?? defaultMissingValue, + encounter_id = EncounterId ?? defaultMissingValue, + + // Time properties + despawn_time = DespawnTime.ToString("hh:mm:ss tt"), + despawn_time_24h = DespawnTime.ToString("HH:mm:ss"), + despawn_time_verified = DisappearTimeVerified ? "" : "~", + is_despawn_time_verified = DisappearTimeVerified, + time_left = SecondsLeft.ToReadableString(true) ?? defaultMissingValue, + + // Location properties + geofence = properties.City ?? defaultMissingValue, + lat = Latitude, + lng = Longitude, + lat_5 = Latitude.ToString("0.00000"), + lng_5 = Longitude.ToString("0.00000"), + + // Location links + tilemaps_url = staticMapLink, + gmaps_url = locProperties.GoogleMapsLocationLink, + applemaps_url = locProperties.AppleMapsLocationLink, + wazemaps_url = locProperties.WazeMapsLocationLink, + scanmaps_url = locProperties.ScannerMapsLocationLink, + + address = locProperties.Address, + + // Pokestop properties + near_pokestop = pokestop != null, + pokestop_id = PokestopId ?? defaultMissingValue, + pokestop_name = pokestop?.FortName ?? defaultMissingValue, + pokestop_url = pokestop?.FortUrl ?? defaultMissingValue, + + // Discord Guild properties + guild_name = locProperties.Guild?.Name, + guild_img_url = locProperties.Guild?.IconUrl, + + // Event properties + is_event = IsEvent.HasValue && IsEvent.Value, + + // Misc properties + date_time = DateTime.Now.ToString(), + br = "\n", + }; + return dict; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/PokestopData.cs b/src/Services/Webhook/Models/PokestopData.cs new file mode 100644 index 00000000..c24eeb26 --- /dev/null +++ b/src/Services/Webhook/Models/PokestopData.cs @@ -0,0 +1,292 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + using System.Threading.Tasks; + + using DSharpPlus.Entities; + + using WhMgr.Common; + using WhMgr.Data; + using WhMgr.Extensions; + using WhMgr.Services.Alarms; + using WhMgr.Services.Alarms.Embeds; + using WhMgr.Services.Discord.Models; + using WhMgr.Services.Icons; + using WhMgr.Services.StaticMap; + + /// + /// RealDeviceMap Pokestop (lure/invasion) webhook model class. + /// + [Table("pokestop")] + public sealed class PokestopData : IWebhookData, IWebhookFort, IWebhookPowerLevel, IWebhookPoint + { + #region Properties + + [ + JsonPropertyName("pokestop_id"), + Column("id"), + Key, + ] + public string FortId { get; set; } + + [ + JsonPropertyName("latitude"), + Column("lat"), + ] + public double Latitude { get; set; } + + [ + JsonPropertyName("longitude"), + Column("lon"), + ] + public double Longitude { get; set; } + + [ + JsonPropertyName("name"), + Column("name"), + ] + public string FortName { get; set; } = "Unknown"; + + [ + JsonPropertyName("url"), + Column("url"), + ] + public string FortUrl { get; set; } + + [ + JsonPropertyName("enabled"), + Column("enabled"), + ] + public bool Enabled { get; set; } + + [ + JsonPropertyName("lure_expiration"), + NotMapped, + ] + public long LureExpire { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime LureExpireTime { get; set; } + + [ + JsonPropertyName("lure_id"), + NotMapped, + ] + public PokestopLureType LureType { get; set; } + + [ + JsonPropertyName("last_modified"), + NotMapped, + ] + public ulong LastModified { get; set; } + + [ + JsonPropertyName("updated"), + NotMapped, + ] + public ulong Updated { get; set; } + + [ + JsonPropertyName("power_up_points"), + NotMapped, + ] + public uint PowerUpPoints { get; set; } + + [ + JsonPropertyName("power_up_level"), + NotMapped, + ] + public ushort PowerUpLevel { get; set; } + + [ + JsonPropertyName("power_up_end_timestamp"), + NotMapped, + ] + public ulong PowerUpEndTimestamp { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime PowerUpEndTime { get; private set; } + + [ + JsonPropertyName("ar_scan_eligible"), + Column("ar_scan_eligible"), + ] + public bool? IsArScanEligible { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public bool HasLure => LureExpire > 0 && LureType != PokestopLureType.None && LureExpireTime > DateTime.UtcNow.ConvertTimeFromCoordinates(this); + + [ + //JsonPropertyName("incidents"), + //Column("incidents"), + JsonIgnore, + NotMapped, + ] + public ICollection Incidents { get; set; } + + #endregion + + #region Constructor + + /// + /// Instantiate a new class. + /// + public PokestopData() + { + SetTimes(); + } + + #endregion + + #region Public Methods + + /// + /// Set expire times because .NET doesn't support Unix timestamp deserialization to class by default. + /// + public void SetTimes() + { + LureExpireTime = LureExpire + .FromUnix() + .ConvertTimeFromCoordinates(this); + + PowerUpEndTime = PowerUpEndTimestamp + .FromUnix() + .ConvertTimeFromCoordinates(this); + } + + public async Task GenerateEmbedMessageAsync(AlarmMessageSettings settings) + { + var server = settings.Config.Instance.Servers[settings.GuildId]; + var embedType = HasLure + ? EmbedMessageType.Lures + : EmbedMessageType.Pokestops; + var embed = settings.Alarm?.Embeds[embedType] + ?? server.Subscriptions?.Embeds?[embedType] + ?? EmbedMessage.Defaults[embedType]; + var properties = await GetPropertiesAsync(settings).ConfigureAwait(false); + var eb = new DiscordEmbedMessage + { + Title = TemplateRenderer.Parse(embed.Title, properties), + Url = TemplateRenderer.Parse(embed.Url, properties), + Image = new Discord.Models.DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.ImageUrl, properties), + }, + Thumbnail = new Discord.Models.DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.IconUrl, properties), + }, + Description = TemplateRenderer.Parse(embed.Content, properties), + Color = ( + HasLure + ? LureType.BuildLureColor(GameMaster.Instance.DiscordEmbedColors) + : DiscordColor.CornflowerBlue + ).Value, + Footer = new Discord.Models.DiscordEmbedFooter + { + Text = TemplateRenderer.Parse(embed.Footer?.Text, properties), + IconUrl = TemplateRenderer.Parse(embed.Footer?.IconUrl, properties) + }, + }; + var username = TemplateRenderer.Parse(embed.Username, properties); + var iconUrl = TemplateRenderer.Parse(embed.AvatarUrl, properties); + var description = TemplateRenderer.Parse(settings.Alarm?.Description, properties); + return new DiscordWebhookMessage + { + Username = username, + AvatarUrl = iconUrl, + Content = description, + Embeds = new List { eb }, + }; + } + + #endregion + + #region Private Methods + + private async Task GetPropertiesAsync(AlarmMessageSettings properties) + { + var config = properties.Config.Instance; + var server = config.Servers[properties.GuildId]; + var lureImageUrl = UIconService.Instance.GetPokestopIcon(server.IconStyle, LureType); + var imageUrl = HasLure ? lureImageUrl : FortUrl; + + var locProperties = await GenericEmbedProperties.GenerateAsync(config, properties.Client.Guilds, properties.GuildId, this); + var staticMapLink = await config.StaticMaps?.GenerateStaticMapAsync( + // TODO: HasLure ? StaticMapType.Lures : StaticMapType.Pokestops, + StaticMapType.Lures, + this, + imageUrl, + properties.MapDataCache + ); + + var lureExpireTimeLeft = locProperties.Now.GetTimeRemaining(LureExpireTime).ToReadableStringNoSeconds(); + var powerUpEndTimeLeft = locProperties.Now.GetTimeRemaining(PowerUpEndTime).ToReadableStringNoSeconds(); + + const string defaultMissingValue = "?"; + var dict = new + { + // Main properties + has_lure = HasLure, + lure_type = LureType, + lure_expire_time = LureExpireTime.ToLongTimeString(), + lure_expire_time_24h = LureExpireTime.ToString("HH:mm:ss"), + lure_expire_time_left = lureExpireTimeLeft, + is_ar = IsArScanEligible ?? false, + + // Pokestop power up properties + power_up_points = PowerUpPoints, + power_up_level = PowerUpLevel, + power_up_end_time = PowerUpEndTime.ToLongTimeString(), + power_up_end_time_24h = PowerUpEndTime.ToString("HH:mm:ss"), + power_up_end_time_left = powerUpEndTimeLeft, + + // Location properties + geofence = properties.City ?? defaultMissingValue, + lat = Latitude, + lng = Longitude, + lat_5 = Latitude.ToString("0.00000"), + lng_5 = Longitude.ToString("0.00000"), + + // Location links + tilemaps_url = staticMapLink, + gmaps_url = locProperties.GoogleMapsLocationLink, + applemaps_url = locProperties.AppleMapsLocationLink, + wazemaps_url = locProperties.WazeMapsLocationLink, + scanmaps_url = locProperties.ScannerMapsLocationLink, + + // Pokestop properties + pokestop_id = FortId ?? defaultMissingValue, + pokestop_name = FortName ?? defaultMissingValue, + pokestop_url = FortUrl ?? defaultMissingValue, + lure_img_url = lureImageUrl, + + address = locProperties.Address, + + // Discord Guild properties + guild_name = locProperties.Guild?.Name, + guild_img_url = locProperties.Guild?.IconUrl, + + // Misc properties + date_time = DateTime.Now.ToString(), + br = "\n", + }; + return dict; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/PvpRankData.cs b/src/Services/Webhook/Models/PvpRankData.cs new file mode 100644 index 00000000..083fbf89 --- /dev/null +++ b/src/Services/Webhook/Models/PvpRankData.cs @@ -0,0 +1,46 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System.Text.Json.Serialization; + + using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; + + /// + /// PVP Pokemon rank class. + /// + public sealed class PvpRankData + { + [JsonPropertyName("rank")] + public uint? Rank { get; set; } + + [JsonPropertyName("dense_rank")] + public uint DenseRank { get; set; } + + [JsonPropertyName("ordinal_rank")] + public uint OrdinalRank { get; set; } + + [JsonPropertyName("competition_rank")] + public uint CompetitionRank { get; set; } + + [JsonPropertyName("percentage")] + public double? Percentage { get; set; } + + [JsonPropertyName("pokemon")] + public uint PokemonId { get; set; } + + [JsonPropertyName("form")] + public uint FormId { get; set; } + + [JsonPropertyName("level")] + public double? Level { get; set; } + + [JsonPropertyName("gender")] + public Gender Gender { get; set; } + + [JsonPropertyName("cp")] + public uint? CP { get; set; } + + // TODO: Implement PVP Pokemon level cap + [JsonPropertyName("cap")] + public uint Cap { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/QuestData.cs b/src/Services/Webhook/Models/QuestData.cs new file mode 100644 index 00000000..11dbd6ab --- /dev/null +++ b/src/Services/Webhook/Models/QuestData.cs @@ -0,0 +1,217 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text.Json.Serialization; + using System.Threading.Tasks; + + using DSharpPlus.Entities; + using POGOProtos.Rpc; + + using WhMgr.Data; + using WhMgr.Extensions; + using WhMgr.Services.Alarms; + using WhMgr.Services.Alarms.Embeds; + using WhMgr.Services.Discord.Models; + using WhMgr.Services.Icons; + using WhMgr.Services.StaticMap; + using WhMgr.Services.Webhook.Models.Quests; + + public sealed class QuestData : IWebhookData, IWebhookPoint + { + #region Properties + + [JsonPropertyName("pokestop_id")] + public string PokestopId { get; set; } + + [JsonPropertyName("latitude")] + public double Latitude { get; set; } + + [JsonPropertyName("longitude")] + public double Longitude { get; set; } + + [JsonPropertyName("pokestop_name")] + public string PokestopName { get; set; } + + [JsonPropertyName("pokestop_url")] + public string PokestopUrl { get; set; } + + [JsonPropertyName("type")] + public QuestType Type { get; set; } + + [JsonPropertyName("target")] + public int Target { get; set; } + + [JsonPropertyName("template")] + public string Template { get; set; } + + [JsonPropertyName("title")] + public string Title { get; set; } + + [JsonPropertyName("updated")] + public long Updated { get; set; } + + [JsonPropertyName("rewards")] + public List Rewards { get; set; } + + [JsonPropertyName("conditions")] + public List Conditions { get; set; } + + [JsonPropertyName("ar_scan_eligible")] + public bool IsArScanEligible { get; set; } + + [JsonPropertyName("with_ar")] + public bool WithAr { get; set; } + + private QuestRewardMessage FirstReward => Rewards?.FirstOrDefault(); + + [JsonIgnore] + public bool IsDitto => FirstReward?.Info?.Ditto ?? false; + + [JsonIgnore] + public bool IsShiny => FirstReward?.Info?.Shiny ?? false; + + #endregion + + #region Constructor + + /// + /// Instantiate a new class. + /// + public QuestData() + { + Rewards = new List(); + Conditions = new List(); + } + + #endregion + + #region Public Methods + + public void SetTimes() + { + // No times to change + } + + /// + /// Generates a Discord embed message for a Pokestop Quest + /// + /// Discord Guild ID related to the data + /// Discord client to use + /// Config to use + /// Alarm to use + /// City to specify + /// + public async Task GenerateEmbedMessageAsync(AlarmMessageSettings settings) + { + var server = settings.Config.Instance.Servers[settings.GuildId]; + var embedType = EmbedMessageType.Quests; + var embed = settings.Alarm?.Embeds[embedType] + ?? server.Subscriptions?.Embeds?[embedType] + ?? EmbedMessage.Defaults[embedType]; + settings.ImageUrl = UIconService.Instance.GetRewardIcon(server.IconStyle, this); + var properties = await GetPropertiesAsync(settings); + var eb = new DiscordEmbedMessage + { + Title = TemplateRenderer.Parse(embed.Title, properties), + Url = TemplateRenderer.Parse(embed.Url, properties), + Image = new Discord.Models.DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.ImageUrl, properties), + }, + Thumbnail = new Discord.Models.DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.IconUrl, properties), + }, + Description = TemplateRenderer.Parse(embed.Content, properties), + Color = new DiscordColor(GameMaster.Instance.DiscordEmbedColors.Pokestops.Quests).Value, + Footer = new Discord.Models.DiscordEmbedFooter + { + Text = TemplateRenderer.Parse(embed.Footer?.Text, properties), + IconUrl = TemplateRenderer.Parse(embed.Footer?.IconUrl, properties) + } + }; + var username = TemplateRenderer.Parse(embed.Username, properties); + var iconUrl = TemplateRenderer.Parse(embed.AvatarUrl, properties); + var description = TemplateRenderer.Parse(settings.Alarm?.Description, properties); + return new DiscordWebhookMessage + { + Username = username, + AvatarUrl = iconUrl, + Content = description, + Embeds = new List { eb }, + }; + } + + #endregion + + #region Private Methods + + private async Task GetPropertiesAsync(AlarmMessageSettings properties) + { + var config = properties.Config.Instance; + var questMessage = this.GetQuestMessage(); + var questConditions = this.GetConditions(); + var questReward = this.GetReward(); + var arEmoji = Strings.AR.GetEmojiIcon(null, true); + + var locProperties = await GenericEmbedProperties.GenerateAsync(config, properties.Client.Guilds, properties.GuildId, this); + var staticMapLink = await config.StaticMaps?.GenerateStaticMapAsync( + StaticMapType.Quests, + this, + properties.ImageUrl, + properties.MapDataCache + ); + + const string defaultMissingValue = "?"; + var dict = new + { + // Main properties + quest_task = questMessage, + quest_conditions = questConditions, + quest_reward = questReward, + quest_reward_img_url = properties.ImageUrl, + has_quest_conditions = !string.IsNullOrEmpty(questConditions), + title = Title, + is_ditto = IsDitto, + is_shiny = IsShiny, + is_ar = IsArScanEligible, + with_ar = WithAr, + ar_emoji = arEmoji, + + // Location properties + geofence = properties.City ?? defaultMissingValue, + lat = Latitude, + lng = Longitude, + lat_5 = Latitude.ToString("0.00000"), + lng_5 = Longitude.ToString("0.00000"), + + // Location links + tilemaps_url = staticMapLink, + gmaps_url = locProperties.GoogleMapsLocationLink, + applemaps_url = locProperties.AppleMapsLocationLink, + wazemaps_url = locProperties.WazeMapsLocationLink, + scanmaps_url = locProperties.ScannerMapsLocationLink, + + address = locProperties.Address, + + // Pokestop properties + pokestop_id = PokestopId ?? defaultMissingValue, + pokestop_name = PokestopName ?? defaultMissingValue, + pokestop_url = PokestopUrl ?? defaultMissingValue, + + // Discord Guild properties + guild_name = locProperties.Guild?.Name, + guild_img_url = locProperties.Guild?.IconUrl, + + //M isc properties + date_time = DateTime.Now.ToString(), + br = "\n", + }; + return dict; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/Quests/QuestCondition.cs b/src/Services/Webhook/Models/Quests/QuestCondition.cs new file mode 100644 index 00000000..3824aedf --- /dev/null +++ b/src/Services/Webhook/Models/Quests/QuestCondition.cs @@ -0,0 +1,60 @@ +namespace WhMgr.Services.Webhook.Models.Quests +{ + using System.Collections.Generic; + using System.Text.Json.Serialization; + + using ActivityType = POGOProtos.Rpc.HoloActivityType; + + public sealed class QuestCondition + { + [JsonPropertyName("pokemon_ids")] + public List PokemonIds { get; set; } + + [JsonPropertyName("category_name")] + public string CategoryName { get; set; } + + [JsonPropertyName("pokemon_type_ids")] + public List PokemonTypeIds { get; set; } + + [JsonPropertyName("throw_type_id")] + public ActivityType ThrowTypeId { get; set; } + + [JsonPropertyName("hit")] + public bool Hit { get; set; } + + [JsonPropertyName("raid_levels")] + public List RaidLevels { get; set; } + + [JsonPropertyName("alignment_ids")] + public List AlignmentIds { get; set; } + + [JsonPropertyName("character_category_ids")] + public List CharacterCategoryIds { get; set; } + + [JsonPropertyName("raid_pokemon_evolutions")] + public List RaidPokemonEvolutions { get; set; } + + [JsonPropertyName("must_be_max_level")] + public ushort MaxLevel { get; set; } + + [JsonPropertyName("with_max_cp")] + public uint MaxCp { get; set; } + + [JsonPropertyName("with_league_rank")] + public uint GblRank { get; set; } + + [JsonPropertyName("encounter_type")] + public List EncounterType { get; set; } + + [JsonPropertyName("combat_type")] + public List CombatType { get; set; } + + [JsonPropertyName("level_cap")] + public uint LevelCap { get; set; } + + public QuestCondition() + { + ThrowTypeId = ActivityType.ActivityUnknown; + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/Quests/QuestConditionMessage.cs b/src/Services/Webhook/Models/Quests/QuestConditionMessage.cs new file mode 100644 index 00000000..690fb961 --- /dev/null +++ b/src/Services/Webhook/Models/Quests/QuestConditionMessage.cs @@ -0,0 +1,20 @@ +namespace WhMgr.Services.Webhook.Models.Quests +{ + using System.Text.Json.Serialization; + + using QuestConditionType = POGOProtos.Rpc.QuestConditionProto.Types.ConditionType; + + public sealed class QuestConditionMessage + { + [JsonPropertyName("type")] + public QuestConditionType Type { get; set; } + + [JsonPropertyName("info")] + public QuestCondition Info { get; set; } + + public QuestConditionMessage() + { + Type = QuestConditionType.Unset; + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/Quests/QuestMegaResource.cs b/src/Services/Webhook/Models/Quests/QuestMegaResource.cs new file mode 100644 index 00000000..6b4c4a08 --- /dev/null +++ b/src/Services/Webhook/Models/Quests/QuestMegaResource.cs @@ -0,0 +1,13 @@ +namespace WhMgr.Services.Webhook.Models.Quests +{ + using System.Text.Json.Serialization; + + public sealed class QuestMegaResource + { + [JsonPropertyName("pokemon_id")] + public ushort PokemonId { get; set; } + + [JsonPropertyName("amount")] + public int Amount { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/Quests/QuestReward.cs b/src/Services/Webhook/Models/Quests/QuestReward.cs new file mode 100644 index 00000000..de4e00d9 --- /dev/null +++ b/src/Services/Webhook/Models/Quests/QuestReward.cs @@ -0,0 +1,43 @@ +namespace WhMgr.Services.Webhook.Models.Quests +{ + using System.Collections.Generic; + using System.Text.Json.Serialization; + + using POGOProtos.Rpc; + + public sealed class QuestReward + { + [JsonPropertyName("pokemon_id")] + public uint PokemonId { get; set; } + + [JsonPropertyName("costume_id")] + public uint CostumeId { get; set; } + + [JsonPropertyName("form_id")] + public uint FormId { get; set; } + + [JsonPropertyName("gender_id")] + public int GenderId { get; set; } + + [JsonPropertyName("ditto")] + public bool Ditto { get; set; } + + [JsonPropertyName("shiny")] + public bool Shiny { get; set; } + + [JsonPropertyName("amount")] + public int Amount { get; set; } + + [JsonPropertyName("item_id")] + public Item Item { get; set; } + + [JsonPropertyName("raid_levels")] + public List RaidLevels { get; set; } + + [JsonPropertyName("mega_resource")] + public QuestMegaResource MegaResource { get; set; } + + [JsonPropertyName("sticker_id")] + public string StickerId { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/Quests/QuestRewardMessage.cs b/src/Services/Webhook/Models/Quests/QuestRewardMessage.cs new file mode 100644 index 00000000..2c47b030 --- /dev/null +++ b/src/Services/Webhook/Models/Quests/QuestRewardMessage.cs @@ -0,0 +1,20 @@ +namespace WhMgr.Services.Webhook.Models.Quests +{ + using System.Text.Json.Serialization; + + using QuestRewardType = POGOProtos.Rpc.QuestRewardProto.Types.Type; + + public sealed class QuestRewardMessage + { + [JsonPropertyName("type")] + public QuestRewardType Type { get; set; } + + [JsonPropertyName("info")] + public QuestReward Info { get; set; } + + public QuestRewardMessage() + { + Type = QuestRewardType.Unset; + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/RaidData.cs b/src/Services/Webhook/Models/RaidData.cs new file mode 100644 index 00000000..c983386c --- /dev/null +++ b/src/Services/Webhook/Models/RaidData.cs @@ -0,0 +1,368 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System; + using System.Collections.Generic; + using System.Text.Json.Serialization; + using System.Threading.Tasks; + + using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; + + using WhMgr.Common; + using WhMgr.Data; + using WhMgr.Extensions; + using WhMgr.Localization; + using WhMgr.Services.Alarms; + using WhMgr.Services.Alarms.Embeds; + using WhMgr.Services.Discord.Models; + using WhMgr.Services.Icons; + using WhMgr.Services.StaticMap; + + public sealed class RaidData : IWebhookData, IWebhookPokemon, IWebhookPowerLevel, IWebhookPoint + { + #region Properties + + [JsonPropertyName("gym_id")] + public string GymId { get; set; } + + [JsonPropertyName("gym_name")] + public string GymName { get; set; } + + [JsonPropertyName("gym_url")] + public string GymUrl { get; set; } + + [JsonPropertyName("pokemon_id")] + public uint PokemonId { get; set; } + + [JsonPropertyName("team_id")] + public PokemonTeam Team { get; set; } = PokemonTeam.Neutral; + + [JsonPropertyName("level")] + public ushort Level { get; set; } + + [JsonPropertyName("cp")] + public uint CP { get; set; } + + [JsonPropertyName("move_1")] + public uint FastMove { get; set; } + + [JsonPropertyName("move_2")] + public uint ChargeMove { get; set; } + + [JsonPropertyName("latitude")] + public double Latitude { get; set; } + + [JsonPropertyName("longitude")] + public double Longitude { get; set; } + + [JsonPropertyName("start")] + public ulong Start { get; set; } + + [JsonPropertyName("end")] + public ulong End { get; set; } + + [JsonPropertyName("ex_raid_eligible")] + public bool IsExEligible { get; set; } + + [JsonPropertyName("is_exclusive")] + public bool IsExclusive { get; set; } + + [JsonPropertyName("sponsor_id")] + public uint? SponsorId { get; set; } + + [JsonPropertyName("form")] + public uint FormId { get; set; } + + [JsonPropertyName("costume")] + public uint CostumeId { get; set; } + + [JsonPropertyName("evolution")] + public uint Evolution { get; set; } + + [JsonPropertyName("gender")] + public Gender Gender { get; set; } + + [JsonPropertyName("power_up_points")] + public uint PowerUpPoints { get; set; } + + [JsonPropertyName("power_up_level")] + public ushort PowerUpLevel { get; set; } + + [JsonPropertyName("power_up_end_timestamp")] + public ulong PowerUpEndTimestamp { get; set; } + + [JsonPropertyName("ar_scan_eligible")] + public bool IsArScanEligible { get; set; } + + [JsonIgnore] + public DateTime StartTime { get; private set; } + + [JsonIgnore] + public DateTime EndTime { get; private set; } + + [JsonIgnore] + public DateTime PowerUpEndTime { get; private set; } + + [JsonIgnore] + public bool IsEgg => PokemonId == 0; + + [JsonIgnore] + public bool IsMega => Level == 6; + + [JsonIgnore] + public bool IsUltraBeast => Level >= 7; + + [JsonIgnore] + public List Weaknesses + { + get + { + if (!GameMaster.Instance.Pokedex.ContainsKey(PokemonId) || IsEgg) + return null; + + var pkmn = GameMaster.GetPokemon(PokemonId, FormId); + if (pkmn?.Types == null) + return null; + + var list = new List(); + pkmn?.Types?.ForEach(type => list.AddRange(type.GetWeaknesses())); + return list; + } + } + + [JsonIgnore] + public bool IsMissingStats => FastMove == 0 || ChargeMove == 0; + + #endregion + + #region Constructor + + /// + /// Instantiate a new class. + /// + public RaidData() + { + SetTimes(); + } + + #endregion + + #region Public Methods + + /// + /// Set expire times because .NET doesn't support Unix timestamp deserialization to class by default. + /// + public void SetTimes() + { + StartTime = Start + .FromUnix() + .ConvertTimeFromCoordinates(this); + + EndTime = End + .FromUnix() + .ConvertTimeFromCoordinates(this); + + PowerUpEndTime = PowerUpEndTimestamp + .FromUnix() + .ConvertTimeFromCoordinates(this); + } + + /// + /// Generate a Discord embed Raid message + /// + /// Guild the notification is for + /// Discord client + /// Webhook config + /// Webhook alarm + /// City the Raid was found in + /// DiscordEmbedNotification object to send + public async Task GenerateEmbedMessageAsync(AlarmMessageSettings settings) + { + var server = settings.Config.Instance.Servers[settings.GuildId]; + var embedType = PokemonId > 0 + ? EmbedMessageType.Raids + : EmbedMessageType.Eggs; + var embed = settings.Alarm?.Embeds[embedType] + ?? server.Subscriptions?.Embeds?[embedType] + ?? EmbedMessage.Defaults[embedType]; + var raidImageUrl = IsEgg + ? UIconService.Instance.GetEggIcon(server.IconStyle, Level, false, IsExEligible) + : UIconService.Instance.GetPokemonIcon(server.IconStyle, PokemonId, FormId, Evolution, Gender, CostumeId, false); + settings.ImageUrl = raidImageUrl; + var properties = await GetPropertiesAsync(settings); + var eb = new DiscordEmbedMessage + { + Title = TemplateRenderer.Parse(embed.Title, properties), + Url = TemplateRenderer.Parse(embed.Url, properties), + Image = new DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.ImageUrl, properties), + }, + Thumbnail = new DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.IconUrl, properties), + }, + Description = TemplateRenderer.Parse(embed.Content, properties), + Color = IsExEligible + ? 0 /* TODO: ex color */ + : Level.BuildRaidColor(GameMaster.Instance.DiscordEmbedColors).Value, + Footer = new DiscordEmbedFooter + { + Text = TemplateRenderer.Parse(embed.Footer?.Text, properties), + IconUrl = TemplateRenderer.Parse(embed.Footer?.IconUrl, properties) + }, + }; + var username = TemplateRenderer.Parse(embed.Username, properties); + var iconUrl = TemplateRenderer.Parse(embed.AvatarUrl, properties); + var description = TemplateRenderer.Parse(settings.Alarm?.Description, properties); + return new DiscordWebhookMessage + { + Username = username, + AvatarUrl = iconUrl, + Content = description, + Embeds = new List { eb }, + }; + } + + #endregion + + #region Private Methods + + private async Task GetPropertiesAsync(AlarmMessageSettings properties) + { + var config = properties.Config.Instance; + var pkmnInfo = GameMaster.GetPokemon(PokemonId, FormId); + var name = IsEgg + ? Translator.Instance.Translate("EGG") + : Translator.Instance.GetPokemonName(PokemonId); + var form = Translator.Instance.GetFormName(FormId); + var costume = Translator.Instance.GetCostumeName(CostumeId); + var evo = Translator.Instance.GetEvolutionName(Evolution); + var gender = Gender.GetPokemonGenderIcon(); + var level = Level; + var move1 = Translator.Instance.GetMoveName(FastMove); + var move2 = Translator.Instance.GetMoveName(ChargeMove); + var types = pkmnInfo?.Types; + var type1 = types?.Count >= 1 + ? types[0] + : PokemonType.None; + var type2 = types?.Count > 1 + ? types[1] + : PokemonType.None; + var typeEmojis = types?.GetTypeEmojiIcons() ?? string.Empty; + var weaknesses = Weaknesses == null + ? string.Empty + : string.Join(", ", Weaknesses); + var weaknessesEmoji = types?.GetWeaknessEmojiIcons(); + var perfectRange = PokemonId.GetCpAtLevel(20, 15); + var boostedRange = PokemonId.GetCpAtLevel(25, 15); + var worstRange = PokemonId.GetCpAtLevel(20, 10); + var worstBoosted = PokemonId.GetCpAtLevel(25, 10); + var exEmoji = Strings.EX.GetEmojiIcon(null, true); + var teamEmoji = Team.GetEmojiIcon(null, true); + + var locProperties = await GenericEmbedProperties.GenerateAsync(config, properties.Client.Guilds, properties.GuildId, this); + var staticMapLink = await config.StaticMaps?.GenerateStaticMapAsync( + StaticMapType.Raids, + this, + properties.ImageUrl, + properties.MapDataCache, + Team + ); + + var startTimeLeft = locProperties.Now.GetTimeRemaining(StartTime).ToReadableStringNoSeconds(); + var endTimeLeft = locProperties.Now.GetTimeRemaining(EndTime).ToReadableStringNoSeconds(); + var powerUpEndTimeLeft = locProperties.Now.GetTimeRemaining(PowerUpEndTime).ToReadableStringNoSeconds(); + + const string defaultMissingValue = "?"; + var dict = new + { + // Raid boss properties + pkmn_id = PokemonId, + pkmn_id_3 = PokemonId.ToString("D3"), + pkmn_name = name, + pkmn_img_url = properties.ImageUrl, + evolution = evo, + evolution_id = Convert.ToInt32(Evolution), + evolution_id_3 = Evolution.ToString("D3"), + form, + form_id = FormId, + form_id_3 = FormId.ToString("D3"), + costume, + costume_id = CostumeId.ToString(), + costume_id_3 = CostumeId.ToString("D3"), + is_egg = IsEgg, + is_ex = IsExEligible, + is_ex_exclusive = IsExclusive, + sponsor_id = SponsorId, + ex_emoji = exEmoji, + team = Team, + team_id = Convert.ToInt32(Team), + team_emoji = teamEmoji, + cp = CP, + lvl = level, + gender = gender ?? defaultMissingValue, + move_1 = move1 ?? defaultMissingValue, + move_2 = move2 ?? defaultMissingValue, + moveset = $"{move1}/{move2}", + type_1 = type1.ToString() ?? defaultMissingValue, + type_2 = type2.ToString() ?? defaultMissingValue, + types = $"{type1}/{type2}", + types_emoji = typeEmojis, + weaknesses, + weaknesses_emoji = weaknessesEmoji, + perfect_cp = perfectRange, + perfect_cp_boosted = boostedRange, + worst_cp = worstRange, + worst_cp_boosted = worstBoosted, + is_ar = IsArScanEligible, + + // Gym power up properties + power_up_points = PowerUpPoints, + power_up_level = PowerUpLevel, + power_up_end_time = PowerUpEndTime.ToLongTimeString(), + power_up_end_time_24h = PowerUpEndTime.ToString("HH:mm:ss"), + power_up_end_time_left = powerUpEndTimeLeft, + + // Time properties + start_time = StartTime.ToLongTimeString(), + start_time_24h = StartTime.ToString("HH:mm:ss"), + start_time_left = startTimeLeft, + end_time = EndTime.ToLongTimeString(), + end_time_24h = EndTime.ToString("HH:mm:ss"), + end_time_left = endTimeLeft, + + // Location properties + geofence = properties.City ?? defaultMissingValue, + lat = Latitude, + lng = Longitude, + lat_5 = Latitude.ToString("0.00000"), + lng_5 = Longitude.ToString("0.00000"), + + // Location links + tilemaps_url = staticMapLink, + gmaps_url = locProperties.GoogleMapsLocationLink, + applemaps_url = locProperties.AppleMapsLocationLink, + wazemaps_url = locProperties.WazeMapsLocationLink, + scanmaps_url = locProperties.ScannerMapsLocationLink, + + address = locProperties.Address, + + // Gym properties + gym_id = GymId, + gym_name = GymName, + gym_url = GymUrl, + + // Discord Guild properties + guild_name = locProperties.Guild?.Name, + guild_img_url = locProperties.Guild?.IconUrl, + + // Misc properties + date_time = DateTime.Now.ToString(), + br = "\n", + }; + return dict; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/TeamRocketInvasion.cs b/src/Services/Webhook/Models/TeamRocketInvasion.cs new file mode 100644 index 00000000..13b1983e --- /dev/null +++ b/src/Services/Webhook/Models/TeamRocketInvasion.cs @@ -0,0 +1,82 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System.Collections.Generic; + using System.Linq; + using System.Text.Json.Serialization; + + using PokemonGender = POGOProtos.Rpc.BelugaPokemonProto.Types.PokemonGender; + + using WhMgr.Data; + + public class TeamRocketInvasion + { + [JsonPropertyName("type")] + public string Type { get; set; } + + [JsonPropertyName("grunt")] + public string Grunt { get; set; } + + [JsonPropertyName("gender")] + public PokemonGender Gender { get; set; } + + [JsonPropertyName("second_reward")] + public bool? SecondReward { get; set; } + + [JsonPropertyName("encounters")] + public TeamRocketEncounters Encounters { get; set; } = new(); + + [JsonIgnore] + public bool HasEncounter => Encounters?.First?.Count > 0 || Encounters?.Second?.Count > 0 || Encounters?.Third?.Count > 0; + + public List GetPossibleInvasionEncounters() + { + var first = string.Join(", ", Encounters.First.Select(id => GameMaster.GetPokemon(id)?.Name)); + var second = string.Join(", ", Encounters.Second.Select(id => GameMaster.GetPokemon(id)?.Name)); + var msg = string.Empty; + if (SecondReward ?? false) + { + // 85%/15% Rate + return new List + { + new { chance = "85%", pokemon = first, }, + new { chance = "15%", pokemon = second, }, + }; + } + return new List + { + new { chance = "100%", pokemon = first, }, + }; + } + + public List GetEncounterRewards() + { + var list = new List(); + if (Encounters == null) + return list; + + if (SecondReward ?? false) + { + // 85%/15% Rate + list.AddRange(Encounters.Second); + } + else + { + // 100% Rate + list.AddRange(Encounters.First); + } + return list; + } + } + + public class TeamRocketEncounters + { + [JsonPropertyName("first")] + public List First { get; set; } = new(); + + [JsonPropertyName("second")] + public List Second { get; set; } = new(); + + [JsonPropertyName("third")] + public List Third { get; set; } = new(); + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Models/WeatherData.cs b/src/Services/Webhook/Models/WeatherData.cs new file mode 100644 index 00000000..8a006b71 --- /dev/null +++ b/src/Services/Webhook/Models/WeatherData.cs @@ -0,0 +1,275 @@ +namespace WhMgr.Services.Webhook.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations.Schema; + using System.Text.Json.Serialization; + using System.Threading.Tasks; + + using WhMgr.Common; + using WhMgr.Data; + using WhMgr.Extensions; + using WhMgr.Localization; + using WhMgr.Osm; + using WhMgr.Osm.Models; + using WhMgr.Services.Alarms; + using WhMgr.Services.Alarms.Embeds; + using WhMgr.Services.Discord.Models; + using WhMgr.Services.Geofence; + using WhMgr.Services.StaticMap; + + [Table("weather")] + public class WeatherData : IWebhookData, IWebhookPoint + { + #region Properties + + [ + JsonPropertyName("s2_cell_id"), + Column("id"), + ] + public long Id { get; set; } + + [ + JsonPropertyName("latitude"), + Column("latitude"), + ] + public double Latitude { get; set; } + + [ + JsonPropertyName("longitude"), + Column("longitude"), + ] + public double Longitude { get; set; } + + [JsonIgnore] + public Coordinate Coordinate => new(Latitude, Longitude); + + [ + JsonPropertyName("polygon"), + NotMapped, + ] + public MultiPolygon Polygon { get; set; } + + [ + JsonPropertyName("gameplay_condition"), + Column("gameplay_condition"), + ] + public WeatherCondition GameplayCondition { get; set; } + + [ + JsonPropertyName("wind_direction"), + NotMapped, + ] + public int WindDirection { get; set; } + + [ + JsonPropertyName("cloud_level"), + NotMapped, + ] + public ushort CloudLevel { get; set; } + + [ + JsonPropertyName("rain_level"), + NotMapped, + ] + public ushort RainLevel { get; set; } + + [ + JsonPropertyName("wind_level"), + NotMapped, + ] + public ushort WindLevel { get; set; } + + [ + JsonPropertyName("snow_level"), + NotMapped, + ] + public ushort SnowLevel { get; set; } + + [ + JsonPropertyName("fog_level"), + NotMapped, + ] + public ushort FogLevel { get; set; } + + [ + JsonPropertyName("special_effect_level"), + NotMapped, + ] + public ushort SpecialEffectLevel { get; set; } + + [ + JsonPropertyName("severity"), + NotMapped, + ] + public WeatherSeverity? Severity { get; set; } + + [ + JsonPropertyName("warn_weather"), + NotMapped, + ] + public bool? WarnWeather { get; set; } + + [ + JsonPropertyName("updated"), + Column("updated"), + ] + public long Updated { get; set; } + + [ + JsonIgnore, + NotMapped, + ] + public DateTime UpdatedTime { get; set; } + + #endregion + + #region Constructor + + /// + /// Instantiate a new class. + /// + public WeatherData() + { + SetTimes(); + } + + #endregion + + #region Public Methods + + public void SetTimes() + { + UpdatedTime = Updated + .FromUnix() + .ConvertTimeFromCoordinates(this); + } + + public async Task GenerateEmbedMessageAsync(AlarmMessageSettings settings) + { + var server = settings.Config.Instance.Servers[settings.GuildId]; + var embedType = EmbedMessageType.Weather; + var embed = settings.Alarm?.Embeds[embedType] + ?? server.Subscriptions?.Embeds?[embedType] + ?? EmbedMessage.Defaults[embedType]; + //var weatherImageUrl = IconFetcher.Instance.GetWeatherIcon(server.IconStyle, GameplayCondition); + //settings.ImageUrl = weatherImageUrl; + var properties = await GetPropertiesAsync(settings).ConfigureAwait(false); + var eb = new DiscordEmbedMessage + { + Title = TemplateRenderer.Parse(embed.Title, properties), + Url = TemplateRenderer.Parse(embed.Url, properties), + Image = new DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.ImageUrl, properties), + }, + Thumbnail = new DiscordEmbedImage + { + Url = TemplateRenderer.Parse(embed.IconUrl, properties), + }, + Description = TemplateRenderer.Parse(embed.Content, properties), + Color = GameplayCondition.BuildWeatherColor(GameMaster.Instance.DiscordEmbedColors).Value, + Footer = new DiscordEmbedFooter + { + Text = TemplateRenderer.Parse(embed.Footer?.Text, properties), + IconUrl = TemplateRenderer.Parse(embed.Footer?.IconUrl, properties) + } + }; + var username = TemplateRenderer.Parse(embed.Username, properties); + var iconUrl = TemplateRenderer.Parse(embed.AvatarUrl, properties); + var description = TemplateRenderer.Parse(settings.Alarm?.Description, properties); + return new DiscordWebhookMessage + { + Username = username, + AvatarUrl = iconUrl, + Content = description, + Embeds = new List { eb }, + }; + } + + #endregion + + #region Private Methods + + private async Task GetPropertiesAsync(AlarmMessageSettings properties) + { + var config = properties.Config.Instance; + var weather = Translator.Instance.GetWeather(GameplayCondition); + var weatherEmoji = GameplayCondition != WeatherCondition.None + ? GameplayCondition.GetEmojiIcon("weather", false) + : string.Empty; + var hasWeather = GameplayCondition != WeatherCondition.None; + + var locProperties = await GenericEmbedProperties.GenerateAsync(config, properties.Client.Guilds, properties.GuildId, this); + var polygonPath = OsmManager.MultiPolygonToLatLng(new List { Polygon }, false); + var staticMapLink = await config.StaticMaps?.GenerateStaticMapAsync( + StaticMapType.Weather, + this, + properties.ImageUrl, + properties.MapDataCache, + null, + polygonPath + ); + + const string defaultMissingValue = "?"; + var dict = new + { + // Main properties + id = Id, + weather_condition = weather, + has_weather = hasWeather, + weather = weather ?? defaultMissingValue, + weather_emoji = weatherEmoji ?? defaultMissingValue, + weather_img_url = properties.ImageUrl,//weatherImageUrl, + + wind_direction = WindDirection, + wind_level = WindLevel, + raid_level = RainLevel, + cloud_level = CloudLevel, + fog_level = FogLevel, + snow_level = SnowLevel, + warn_weather = WarnWeather ?? false, + special_effect_level = SpecialEffectLevel, + severity = Severity, + + // Location properties + geofence = properties.City ?? defaultMissingValue, + lat = Latitude, + lng = Longitude, + lat_5 = Latitude.ToString("0.00000"), + lng_5 = Longitude.ToString("0.00000"), + + // Location links + tilemaps_url = staticMapLink, + gmaps_url = locProperties.GoogleMapsLocationLink, + applemaps_url = locProperties.AppleMapsLocationLink, + wazemaps_url = locProperties.WazeMapsLocationLink, + scanmaps_url = locProperties.ScannerMapsLocationLink, + + address = locProperties.Address, + + // Discord Guild properties + guild_name = locProperties.Guild?.Name, + guild_img_url = locProperties.Guild?.IconUrl, + + // Misc properties + date_time = DateTime.Now.ToString(), + br = "\n", + }; + return dict; + } + + public static MultiPolygon FixWeatherPolygon(MultiPolygon multiPolygon) + { + var newMultiPolygon = new MultiPolygon(); + if (multiPolygon.Count == 0 || multiPolygon == null) + return newMultiPolygon; + + multiPolygon.ForEach(polygon => newMultiPolygon.Add(new Polygon { polygon[1], polygon[0] })); + newMultiPolygon.Add(newMultiPolygon[^1]); + return newMultiPolygon; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Queue/IWebhookQueueManager.cs b/src/Services/Webhook/Queue/IWebhookQueueManager.cs new file mode 100644 index 00000000..0fcdd372 --- /dev/null +++ b/src/Services/Webhook/Queue/IWebhookQueueManager.cs @@ -0,0 +1,13 @@ +namespace WhMgr.Services.Webhook.Queue +{ + using System.Threading.Tasks; + + public interface IWebhookQueueManager + { + void Start(); + + void Stop(); + + Task SendWebhook(string url, string json); + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Queue/WebhookQueueItem.cs b/src/Services/Webhook/Queue/WebhookQueueItem.cs new file mode 100644 index 00000000..85208e7c --- /dev/null +++ b/src/Services/Webhook/Queue/WebhookQueueItem.cs @@ -0,0 +1,11 @@ +namespace WhMgr.Services.Webhook.Queue +{ + public class WebhookQueueItem + { + public string Url { get; set; } + + public string Json { get; set; } + + public int RetryAfter { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/Queue/WebhookQueueManager.cs b/src/Services/Webhook/Queue/WebhookQueueManager.cs new file mode 100644 index 00000000..214be0c7 --- /dev/null +++ b/src/Services/Webhook/Queue/WebhookQueueManager.cs @@ -0,0 +1,135 @@ +namespace WhMgr.Services.Webhook.Queue +{ + using System; + using System.Collections.Generic; + using System.Net; + using System.Net.Http; + using System.Text; + using System.Threading; + using System.Threading.Tasks; + + // TODO: Convert to HostedService + public class WebhookQueueManager : IWebhookQueueManager + { + private readonly Queue _backlogQueue = new(); + private readonly System.Timers.Timer _timer = new(); + + // TODO: Singleton instance + + public WebhookQueueManager() + { + _timer.Elapsed += (sender, e) => HandleBacklogQueue(); + _timer.Interval = 200; + + Start(); + } + + public void Start() + { + if (!_timer.Enabled) + { + _timer.Start(); + } + } + + public void Stop() + { + if (_timer.Enabled) + { + _timer.Stop(); + } + } + + /// + /// Sends webhook data + /// + /// + /// + public async Task SendWebhook(string url, string json) + { + try + { + using var client = new HttpClient(); + var requestMessage = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = new Uri(url), + Headers = + { + { HttpRequestHeader.UserAgent.ToString(), Strings.BotName }, + }, + Content = new StringContent(json, Encoding.UTF8, "application/json"), + }; + var response = client.SendAsync(requestMessage).Result; + await Task.CompletedTask; + } + catch (WebException ex) + { + var response = (HttpWebResponse)ex.Response; + switch (response?.StatusCode) + { + //https://discordapp.com/developers/docs/topics/rate-limits + case HttpStatusCode.TooManyRequests: + HandleRateLimitedRequest(response, url, json); + break; + case HttpStatusCode.BadRequest: + Console.WriteLine($"Failed to send webhook: {url}\nJson: {json}\nError: {ex}"); + break; + default: + Console.WriteLine($"Failed to send webhook with status: {response?.StatusCode}\nUrl: {url}\nError: {ex}"); + break; + } + } + } + + private void HandleRateLimitedRequest(HttpWebResponse response, string url, string json) + { + if (_backlogQueue.Count > 0) + { + Console.WriteLine($"[Webhook] RATE LIMITED: {url} Added to backlog queue, currently {_backlogQueue.Count:N0} items long."); + } + + var retryAfter = response.Headers["Retry-After"]; + //var limit = resp.Headers["X-RateLimit-Limit"]; + //var remaining = resp.Headers["X-RateLimit-Remaining"]; + //var reset = resp.Headers["X-RateLimit-Reset"]; + if (!int.TryParse(retryAfter, out var retry)) + return; + + _backlogQueue.Enqueue(new WebhookQueueItem + { + Url = url, + Json = json, + RetryAfter = retry, + }); + } + + private void HandleBacklogQueue() + { + if (_backlogQueue.Count == 0) + return; + + /* + var queueChunkSize = 10; + var items = _backlogQueue.DequeueChunk(queueChunkSize); + var tasks = items.Select(item => Task.Factory.StartNew(() => + { + if (item.RetryAfter > 0) + { + // Wait rate limit timeout + Thread.Sleep(item.RetryAfter); + } + return SendWebhook(item.Url, item.Json); + })); + Task.WaitAll(tasks.ToArray()); + */ + var item = _backlogQueue.Dequeue(); + if (item.RetryAfter > 0) + { + // Wait rate limit timeout + Thread.Sleep(item.RetryAfter); + } + SendWebhook(item.Url, item.Json).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/WebhookPayload.cs b/src/Services/Webhook/WebhookPayload.cs new file mode 100644 index 00000000..e5f0cbfa --- /dev/null +++ b/src/Services/Webhook/WebhookPayload.cs @@ -0,0 +1,13 @@ +namespace WhMgr.Services.Webhook +{ + using System.Text.Json.Serialization; + + public class WebhookPayload : IWebhookPayload + { + [JsonPropertyName("type")] + public string Type { get; set; } + + [JsonPropertyName("message")] + public dynamic Message { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Webhook/WebhookProcessorService.cs b/src/Services/Webhook/WebhookProcessorService.cs new file mode 100644 index 00000000..e0d4de96 --- /dev/null +++ b/src/Services/Webhook/WebhookProcessorService.cs @@ -0,0 +1,627 @@ +namespace WhMgr.Services.Webhook +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Text; + using System.Threading.Tasks; + + //using Microsoft.Extensions.Logging; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Services.Alarms; + using WhMgr.Services.Alarms.Filters; + using WhMgr.Services.Cache; + using WhMgr.Services.Subscriptions; + using WhMgr.Services.Webhook.Cache; + using WhMgr.Services.Webhook.Models; + + /// + /// Parses incoming webhook data and distributes to alarm and subscription processors + /// + public class WebhookProcessorService : IWebhookProcessorService + { + private const uint ClearCacheInterval = 60000 * 15; // Every 15 minutes + + private readonly Microsoft.Extensions.Logging.ILogger _logger; + private readonly ConfigHolder _config; + private readonly IAlarmControllerService _alarmsService; + private readonly ISubscriptionProcessorService _subscriptionsService; + private readonly IMapDataCache _mapDataCache; + + private readonly Dictionary _processedPokemon; + private readonly Dictionary _processedRaids; + private readonly Dictionary _processedQuests; + private readonly Dictionary _processedPokestops; + private readonly Dictionary _processedInvasions; + private readonly Dictionary _processedGyms; + private readonly Dictionary _processedWeather; + private readonly System.Timers.Timer _clearCache; + + #region Properties + + public bool Enabled { get; private set; } + + public bool CheckForDuplicates { get; set; } + + public ushort DespawnTimerMinimumMinutes { get; set; } + + public bool Debug { get; set; } + + #endregion + + public WebhookProcessorService( + Microsoft.Extensions.Logging.ILogger logger, + ConfigHolder config, + IAlarmControllerService alarmsService, + ISubscriptionProcessorService subscriptionsService, + IMapDataCache mapDataCache) + { + _logger = logger; + _config = config; + _alarmsService = alarmsService; + _subscriptionsService = subscriptionsService; + _mapDataCache = mapDataCache; + + _processedPokemon = new(); + _processedRaids = new(); + _processedQuests = new(); + _processedPokestops = new(); + _processedInvasions = new(); + _processedGyms = new(); + _processedWeather = new(); + + _clearCache = new System.Timers.Timer + { + Interval = ClearCacheInterval, + }; + _clearCache.Elapsed += (sender, e) => OnClearCache(); + + CheckForDuplicates = _config.Instance.CheckForDuplicates; + Debug = _config.Instance.Debug; + DespawnTimerMinimumMinutes = _config.Instance.DespawnTimeMinimumMinutes; + } + + #region Public Methods + + public void Start() + { + Enabled = true; + + // Start cache cleaning timer + if (!_clearCache.Enabled) + { + _clearCache.Start(); + } + } + + public void Stop() + { + Enabled = false; + + // Stop cache cleaning timer + if (_clearCache?.Enabled ?? false) + { + _clearCache.Stop(); + } + } + + public async Task ParseDataAsync(List payloads) + { + if (!Enabled) return; + + if (Debug) + { + var json = payloads?.ToJson(); + if (!string.IsNullOrEmpty(json)) + { + var path = Path.Combine(Strings.BasePath, Strings.DebugLogFileName); + using var sw = new StreamWriter(path, true, Encoding.UTF8); + sw.WriteLine(json); + } + } + + _logger.Information($"Received {payloads.Count:N0} webhook payloads"); + for (var i = 0; i < payloads.Count; i++) + { + var payload = payloads[i]; + switch (payload.Type) + { + case WebhookTypes.Pokemon: + await ProcessPokemonAsync(payload.Message).ConfigureAwait(false); + break; + case WebhookTypes.Raid: + await ProcessRaidAsync(payload.Message).ConfigureAwait(false); + break; + case WebhookTypes.Quest: + case WebhookTypes.AlternativeQuest: + await ProcessQuestAsync(payload.Message).ConfigureAwait(false); + break; + case WebhookTypes.Invasion: + await ProcessInvasionAsync(payload.Message).ConfigureAwait(false); + break; + case WebhookTypes.Pokestop: + await ProcessPokestopAsync(payload.Message).ConfigureAwait(false); + break; + // NOTE: Do not parse `gym` webhook type as GymDetailsData, property keys do not match + case WebhookTypes.Gym: + case WebhookTypes.GymDetails: + ProcessGym(payload.Message); + break; + case WebhookTypes.Weather: + ProcessWeather(payload.Message); + break; + case WebhookTypes.Account: + // TODO: ProcessAccount(payload.Message); + break; + default: + _logger.Warning($"Unhandled webhook type: {payload.Type}: {payload.Message}"); + break; + } + } + } + + #endregion + + #region Processing Methods + + private async Task ProcessPokemonAsync(dynamic message) + { + string json = Convert.ToString(message); + var pokemon = json.FromJson(); + if (pokemon == null) + { + _logger.Warning($"Failed to deserialize pokemon {message}, skipping..."); + return; + } + pokemon.SetTimes(); + + // Check if Pokemon despawn timer has at least the specified minimum minutes + // remaining, otherwise skip... + if (pokemon.SecondsLeft.TotalMinutes < DespawnTimerMinimumMinutes) + return; + + // Check if event Pokemon filtering enabled and event Pokemon list is set + if (!CanProceed(pokemon)) + return; + + if (CheckForDuplicates) + { + // Lock processed pokemon, check for duplicates of incoming pokemon + lock (_processedPokemon) + { + // If we have already processed pokemon, previously did not have stats, and currently does + // not have stats, skip. + if (_processedPokemon.ContainsKey(pokemon.EncounterId) + && (pokemon.IsMissingStats + || (!pokemon.IsMissingStats && !_processedPokemon[pokemon.EncounterId].IsMissingStats))) + return; + + // Check if we have not processed this encounter before, is so then add + if (!_processedPokemon.ContainsKey(pokemon.EncounterId)) + _processedPokemon.Add(pokemon.EncounterId, new ScannedPokemon(pokemon)); + + // Check if incoming pokemon has stats but previously processed pokemon did not and update it + if (!pokemon.IsMissingStats && _processedPokemon[pokemon.EncounterId].IsMissingStats) + _processedPokemon[pokemon.EncounterId] = new ScannedPokemon(pokemon); + } + } + + // Process pokemon alarms + _alarmsService.ProcessPokemonAlarms(pokemon); + + // Process pokemon subscriptions + await _subscriptionsService.ProcessPokemonSubscriptionAsync(pokemon).ConfigureAwait(false); + + // Only process pvp subscriptions if great or ultra league ranks set + if (pokemon.HasPvpRankings) + { + await _subscriptionsService.ProcessPvpSubscriptionAsync(pokemon).ConfigureAwait(false); + } + } + + private async Task ProcessRaidAsync(dynamic message) + { + string json = Convert.ToString(message); + var raid = json.FromJson(); + if (raid == null) + { + _logger.Warning($"Failed to deserialize raid {message}, skipping..."); + return; + } + raid.SetTimes(); + + if (CheckForDuplicates) + { + // Lock processed raids, check for duplicates of incoming raid + lock (_processedRaids) + { + if (_processedRaids.ContainsKey(raid.GymId)) + { + // Check if raid data matches existing scanned raids with + // pokemon_id, form_id, costume_id, and not expired + if (_processedRaids[raid.GymId].PokemonId == raid.PokemonId + && _processedRaids[raid.GymId].FormId == raid.FormId + && _processedRaids[raid.GymId].CostumeId == raid.CostumeId + && _processedRaids[raid.GymId].Level == raid.Level + && !_processedRaids[raid.GymId].IsExpired) + { + // Processed raid already + return; + } + + _processedRaids[raid.GymId] = new ScannedRaid(raid); + } + else + { + _processedRaids.Add(raid.GymId, new ScannedRaid(raid)); + } + } + } + + // Process raid alarms + _alarmsService.ProcessRaidAlarms(raid); + await _subscriptionsService.ProcessRaidSubscriptionAsync(raid).ConfigureAwait(false); + } + + private async Task ProcessQuestAsync(dynamic message) + { + string json = Convert.ToString(message); + var quest = json.FromJson(); + if (quest == null) + { + _logger.Warning($"Failed to deserialize quest {message}, skipping..."); + return; + } + + if (CheckForDuplicates) + { + // Lock processed quests, check for duplicates of incoming quest + lock (_processedQuests) + { + if (_processedQuests.ContainsKey(quest.PokestopId)) + { + if (_processedQuests[quest.PokestopId].Type == quest.Type + && !_processedQuests[quest.PokestopId].IsExpired) + { + // Processed quest already + return; + } + + _processedQuests[quest.PokestopId] = new ScannedQuest(quest); + } + else + { + _processedQuests.Add(quest.PokestopId, new ScannedQuest(quest)); + } + } + } + + // Process quest alarms + _alarmsService.ProcessQuestAlarms(quest); + await _subscriptionsService.ProcessQuestSubscriptionAsync(quest).ConfigureAwait(false); + } + + private async Task ProcessPokestopAsync(dynamic message) + { + string json = Convert.ToString(message); + var pokestop = json.FromJson(); + if (pokestop == null) + { + _logger.Warning($"Failed to deserialize pokestop {message}, skipping..."); + return; + } + pokestop.SetTimes(); + + if (CheckForDuplicates) + { + // Lock processed pokestops, check for duplicates of incoming pokestop + lock (_processedPokestops) + { + if (_processedPokestops.ContainsKey(pokestop.FortId)) + { + var processedLureAlready = _processedPokestops[pokestop.FortId].LureType == pokestop.LureType + && _processedPokestops[pokestop.FortId].LureExpireTime == pokestop.LureExpireTime; + + if (processedLureAlready) + { + // Processed pokestop lure already + return; + } + + _processedPokestops[pokestop.FortId] = new ScannedPokestop(pokestop); + } + else + { + _processedPokestops.Add(pokestop.FortId, new ScannedPokestop(pokestop)); + } + } + } + + // Process pokestop alarms + _alarmsService.ProcessPokestopAlarms(pokestop); + + // Process lure subscriptions + if (pokestop.HasLure) + { + await _subscriptionsService.ProcessLureSubscriptionAsync(pokestop).ConfigureAwait(false); + } + } + + private async Task ProcessInvasionAsync(dynamic message) + { + string json = Convert.ToString(message); + var invasion = json.FromJson(); + if (invasion == null) + { + _logger.Warning($"Failed to deserialize incident {message}, skipping..."); + return; + } + invasion.SetTimes(); + + if (CheckForDuplicates) + { + // Lock processed pokestops, check for duplicates of incoming incident + lock (_processedInvasions) + { + if (_processedInvasions.ContainsKey(invasion.Id)) + { + if (_processedInvasions[invasion.Id].Character == invasion.Character && + _processedInvasions[invasion.Id].ExpireTime == invasion.ExpirationTime) + { + // Processed pokestop invasion already + return; + } + + _processedInvasions[invasion.Id] = new ScannedIncident(invasion); + } + else + { + _processedInvasions.Add(invasion.Id, new ScannedIncident(invasion)); + } + } + } + + // Process invasion alarms + _alarmsService.ProcessInvasionAlarms(invasion); + + // Process invasion subscriptions + await _subscriptionsService.ProcessInvasionSubscriptionAsync(invasion).ConfigureAwait(false); + } + + private void ProcessGym(dynamic message) + { + string json = Convert.ToString(message); + var gym = json.FromJson(); + if (gym == null) + { + _logger.Warning($"Failed to deserialize gym {message}, skipping..."); + } + gym.SetTimes(); + + if (CheckForDuplicates) + { + // Lock process gyms, check for duplicates of incoming gym + lock (_processedGyms) + { + if (string.IsNullOrEmpty(gym?.FortId)) { + // Skip gyms with no ID set + return; + } + if (_processedGyms.ContainsKey(gym.FortId)) + { + if (_processedGyms[gym.FortId].Team == gym.Team + && _processedGyms[gym.FortId].SlotsAvailable == gym.SlotsAvailable + && _processedGyms[gym.FortId].InBattle == gym.InBattle) + { + // Gym already processed + return; + } + + _processedGyms[gym.FortId] = new ScannedGym(gym); + } + else + { + _processedGyms.Add(gym.FortId, new ScannedGym(gym)); + } + } + } + + // Process gym alarms + _alarmsService.ProcessGymAlarms(gym); + } + + private void ProcessWeather(dynamic message) + { + string json = Convert.ToString(message); + var weather = json.FromJson(); + if (weather == null) + { + _logger.Warning($"Failed to deserialize weather {message}, skipping..."); + } + weather.SetTimes(); + + if (CheckForDuplicates) + { + lock (_processedWeather) + { + if (_processedWeather.ContainsKey(weather.Id)) + { + if (_processedWeather[weather.Id].Condition == weather.GameplayCondition && + !_processedWeather[weather.Id].IsExpired) + { + // Processed weather already + return; + } + + _processedWeather[weather.Id] = new ScannedWeather(weather); + } + else + { + _processedWeather.Add(weather.Id, new ScannedWeather(weather)); + } + } + } + + // Process weather alarms + _alarmsService.ProcessWeatherAlarms(weather); + } + + private void ProcessAccount(dynamic message) + { + string json = Convert.ToString(message); + var account = json.FromJson(); + if (account == null) + { + _logger.Warning($"Failed to deserialize account {message}, skipping..."); + } + account.SetTimes(); + + if (CheckForDuplicates) + { + } + + // Process account alarms + _alarmsService.ProcessAccountAlarms(account); + } + + #endregion + + #region Private Methods + + private void OnClearCache() + { + lock (_processedPokemon) + { + var expiredEncounters = _processedPokemon.Where(pair => pair.Value.IsExpired) + .Select(pair => pair.Key) + .ToList(); + foreach (var encounterId in expiredEncounters) + { + // Spawn expired, remove from cache + _processedPokemon.Remove(encounterId); + } + } + + lock (_processedRaids) + { + var expiredRaids = _processedRaids.Where(pair => pair.Value.IsExpired) + .Select(pair => pair.Key) + .ToList(); + foreach (var gymId in expiredRaids) + { + // Gym expired, remove from cache + _processedRaids.Remove(gymId); + } + } + + lock (_processedQuests) + { + var expiredQuests = _processedQuests.Where(pair => pair.Value.IsExpired) + .Select(pair => pair.Key) + .ToList(); + foreach (var pokestopId in expiredQuests) + { + // Quest expired, remove from cache + _processedQuests.Remove(pokestopId); + } + } + + lock (_processedPokestops) + { + var expiredPokestops = _processedPokestops.Where(pair => pair.Value.IsExpired) + .Select(pair => pair.Key) + .ToList(); + foreach (var pokestopId in expiredPokestops) + { + // Pokestop lure expired, remove from cache + _processedPokestops.Remove(pokestopId); + } + } + + lock (_processedInvasions) + { + var expiredInvasions = _processedInvasions.Where(pair => pair.Value.IsExpired) + .Select(pair => pair.Key) + .ToList(); + foreach (var invasionId in expiredInvasions) + { + // Pokestop invasion expired, remove from cache + _processedInvasions.Remove(invasionId); + } + } + + lock (_processedWeather) + { + var expiredWeather = _processedWeather.Where(pair => pair.Value.IsExpired) + .Select(pair => pair.Key) + .ToList(); + foreach (var weatherId in expiredWeather) + { + // Weather expired, from from cache + _processedWeather.Remove(weatherId); + } + } + } + + private bool CanProceed(PokemonData pokemon) + { + // Check if event Pokemon filtering enabled and event Pokemon list is set + if ((_config.Instance.EventPokemon?.Enabled ?? false) && + (_config.Instance.EventPokemon?.PokemonIds?.Count ?? 0) > 0) + { + // Only process Pokemon if IV is 0%, greater than or equal to minimum IV set, or has PvP league rankings. + var allowPokemon = pokemon.IVReal == 0 + || pokemon.IVReal >= _config.Instance.EventPokemon.MinimumIV + || pokemon.HasPvpRankings; + + var filterType = _config.Instance.EventPokemon?.FilterType; + var ignoreMissingStats = _config.Instance.EventPokemon?.IgnoreMissingStats ?? true; + + /* + * Set to `Include` if you do not want the Pokemon reported unless + it meets the minimum IV value set (or is 0% or has PvP ranks). + * Set to `Exclude` if you only want the Pokemon reported if it meets + the minimum IV value set. No other Pokemon will be reported other + than those in the event list. + */ + + // Check if Pokemon is in event Pokemon list + if (_config.Instance.EventPokemon.PokemonIds.Contains(pokemon.PokemonId)) + { + // Pokemon is in event Pokemon list + switch (filterType) + { + case FilterType.Exclude: + // Skip Pokemon if no IV stats. + if (ignoreMissingStats && pokemon.IsMissingStats) return false; + // Only allow Pokemon if meets IV/PvP criteria + if (!allowPokemon) return false; + break; + case FilterType.Include: + if (ignoreMissingStats && pokemon.IsMissingStats) return false; + // Only allow Pokemon if meets IV/PvP criteria + if (!allowPokemon) return false; + break; + } + } + else + { + // Pokemon not in event Pokemon list + switch (filterType) + { + case FilterType.Exclude: + // Skip any Pokemon that is not in the event list, skip regardless + // if criteria matches + return false; + } + } + } + return true; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/Webhook/WebhookTypes.cs b/src/Services/Webhook/WebhookTypes.cs new file mode 100644 index 00000000..5074b1db --- /dev/null +++ b/src/Services/Webhook/WebhookTypes.cs @@ -0,0 +1,16 @@ +namespace WhMgr.Services.Webhook +{ + public class WebhookTypes + { + public const string Pokemon = "pokemon"; + public const string Raid = "raid"; + public const string Quest = "quest"; + public const string AlternativeQuest = "alternative_quest"; + public const string Pokestop = "pokestop"; + public const string Invasion = "invasion"; + public const string Gym = "gym"; + public const string GymDetails = "gym_details"; + public const string Weather = "weather"; + public const string Account = "account"; + } +} \ No newline at end of file diff --git a/src/Services/Yourls/Models/UrlShortenerResponse.cs b/src/Services/Yourls/Models/UrlShortenerResponse.cs new file mode 100644 index 00000000..83de13ea --- /dev/null +++ b/src/Services/Yourls/Models/UrlShortenerResponse.cs @@ -0,0 +1,25 @@ +namespace WhMgr.Services.Yourls.Models +{ + using System.Text.Json.Serialization; + + public class UrlShortenerResponse + { + [JsonPropertyName("status")] + public string Status { get; set; } + + [JsonPropertyName("statusCode")] + public int StatusCode { get; set; } + + [JsonPropertyName("message")] + public string Message { get; set; } + + [JsonPropertyName("title")] + public string Title { get; set; } + + [JsonPropertyName("shorturl")] + public string ShortUrl { get; set; } + + [JsonPropertyName("url")] + public UrlShortenerResponseUrl Url { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Yourls/Models/UrlShortenerResponseUrl.cs b/src/Services/Yourls/Models/UrlShortenerResponseUrl.cs new file mode 100644 index 00000000..6b892d84 --- /dev/null +++ b/src/Services/Yourls/Models/UrlShortenerResponseUrl.cs @@ -0,0 +1,23 @@ +namespace WhMgr.Services.Yourls.Models +{ + using System; + using System.Text.Json.Serialization; + + public class UrlShortenerResponseUrl + { + [JsonPropertyName("keyword")] + public string Keyword { get; set; } + + [JsonPropertyName("url")] + public string Url { get; set; } + + [JsonPropertyName("title")] + public string Title { get; set; } + + [JsonPropertyName("date")] + public DateTime Date { get; set; } + + [JsonPropertyName("ip")] + public string IpAddress { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/Yourls/UrlShortener.cs b/src/Services/Yourls/UrlShortener.cs new file mode 100644 index 00000000..5acc29cc --- /dev/null +++ b/src/Services/Yourls/UrlShortener.cs @@ -0,0 +1,83 @@ +namespace WhMgr.Services.Yourls +{ + using System; + using System.Text; + using System.Threading.Tasks; + using System.Web; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Services.Yourls.Models; + using WhMgr.Utilities; + + /// + /// Url shortener class using yourls.org + /// + public class UrlShortener + { + public UrlShortenerConfig Configuration { get; } + + public UrlShortener(UrlShortenerConfig config) + { + Configuration = config; + } + + /// + /// Creates a short url from the url provided + /// + /// Yourls.org endpoint base url with signature parameter + /// URL address to shorten + /// Action to invoke + /// Response text format + /// Returns the shortened URL address + public async Task CreateAsync(string url) + { + // Check if service enabled or if base `yourls` url not set, return original url + if (!Configuration.Enabled || string.IsNullOrEmpty(Configuration.ApiUrl)) + return url; + + try + { + var encodedUrl = HttpUtility.UrlEncode(url); + var sb = new StringBuilder(); + sb.Append(Configuration.ApiUrl); + sb.Append("?signature="); + sb.Append(Configuration.Signature); + sb.Append("&action="); + sb.Append(Configuration.Action); + sb.Append("&url="); + sb.Append(encodedUrl); + sb.Append("&format="); + sb.Append(Configuration.Format); + var apiUrl = sb.ToString(); + var json = await NetUtils.GetAsync(apiUrl); + if (string.IsNullOrEmpty(json)) + return url; + + var obj = json.FromJson(); + return obj?.ShortUrl ?? url; + } + catch (Exception) + { + return url; + } + } + } +} + +/* +{ +"url": { + "keyword":"1", + "url":"https://www.google.com/maps?q=34.01,-117.01", + "title":"Google Maps", + "date":"2019-05-25 04:48:55", + "ip":"172.89.225.76" +}, +"status":"success", +"message":"https://www.google.com/maps?q=34.01,-117.01[...] added to database", +"title":"Google Maps", +"shorturl":"https://site.com/u/1", +"statusCode":200 +} +*/ \ No newline at end of file diff --git a/src/Startup.cs b/src/Startup.cs new file mode 100644 index 00000000..de00f0cf --- /dev/null +++ b/src/Startup.cs @@ -0,0 +1,275 @@ +namespace WhMgr +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Threading.Tasks; + + using Microsoft.AspNetCore.Antiforgery; + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Hosting; + using Microsoft.AspNetCore.Http; + using Microsoft.AspNetCore.SpaServices; + using Microsoft.AspNetCore.SpaServices.ReactDevelopmentServer; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.FileProviders; + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; + using Microsoft.OpenApi.Models; + + using WhMgr.Configuration; + using WhMgr.Data.Contexts; + using WhMgr.Extensions; + using WhMgr.HostedServices; + using WhMgr.HostedServices.TaskQueue; + using WhMgr.IO; + using WhMgr.Localization; + using WhMgr.Services; + using WhMgr.Services.Alarms; + using WhMgr.Services.Alarms.Models; + using WhMgr.Services.Cache; + using WhMgr.Services.Discord; + using WhMgr.Services.Geofence; + using WhMgr.Services.Subscriptions; + using WhMgr.Services.Webhook; + using WhMgr.Services.Webhook.Queue; + using WhMgr.Web.Filters; + using WhMgr.Web.Middleware; + + // TODO: Reload embeds and filters on change + // TODO: Simplify alarm and subscription filter checks + // TODO: Allow pokemon names and ids for pokemon/raid alarm filters + + public class Startup + { + private IReadOnlyDictionary _alarms; + private readonly ConfigHolder _config; + + public IConfiguration Configuration { get; } + + public static Config Config { get; set; } + + public Startup(IConfiguration configuration) + { + Configuration = configuration; + + _config = new ConfigHolder(Config); + _config.Reloaded += () => + { + Console.WriteLine($"Config file '{Config.FileName}' reloaded!"); + Console.WriteLine($"Reloading Discord servers config..."); + _config.Instance.LoadDiscordServers(); + Console.WriteLine($"Reloading Discord server geofences..."); + foreach (var (discordId, discordConfig) in _config.Instance.Servers) + { + discordConfig.LoadGeofences(); + } + // TODO: filters and embeds + Console.WriteLine($"Reloading Discord server alarms..."); + _alarms = ChannelAlarmsManifest.LoadAlarms(Config.Servers); + }; + var fullPath = Path.GetFullPath(_config.Instance.FileName); + var configWatcher = new FileWatcher(fullPath); + configWatcher.Changed += (sender, e) => _config.Instance = Config.Load(e.FullPath); + configWatcher.Start(); + + _alarms = ChannelAlarmsManifest.LoadAlarms(Config.Servers); + + // Create locale translation files + try + { + Translator.CreateLocaleFilesAsync().ConfigureAwait(false).GetAwaiter().GetResult(); + Translator.Instance.SetLocale(_config.Instance.Locale); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to generate locale files, make sure the base locales exist: {ex}"); + } + } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddSingleton(new GeofenceService()); + services.AddSingleton(); + //services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(_config); + services.AddSingleton>(_alarms); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + services.AddHostedService(); + // Subscription processor queue + // TODO: Use scoped background services + services.AddSingleton(_ => + { + // Get max subscription queue capacity config value + var maxQueueCapacity = Strings.Defaults.MaximumQueueCapacity; + return new DefaultBackgroundTaskQueue(maxQueueCapacity); + }); + + services.AddHostedService(); + services.AddHostedService(); + services.AddHostedService(); + + var dbConfig = _config.Instance.Database; + services.AddDatabase(dbConfig.Main); + services.AddDatabase(dbConfig.Scanner); + services.AddDatabase(dbConfig.Nests); + + services.AddHealthChecks(); + + services.AddSession(options => + { + options.IdleTimeout = TimeSpan.FromMinutes(60); + options.Cookie.Name = "whmgr.session"; + options.Cookie.HttpOnly = true; + options.Cookie.IsEssential = true; + }); + + // Add csrf middleware + services.AddAntiforgery(options => + { + // Set Cookie properties using CookieBuilder properties. + options.FormFieldName = "csrf-token"; + options.HeaderName = "X-CSRF-TOKEN-WHMGR"; + options.SuppressXFrameOptionsHeader = false; + }); + + // Cross origin resource sharing configuration + services.AddCors(options => + { + options.AddDefaultPolicy(builder => + { + builder.AllowAnyOrigin() + .AllowAnyHeader() + .AllowAnyMethod(); + }); + }); + + services.AddSpaStaticFiles(configuration => + { + configuration.RootPath = Strings.ClientBuildFolder; + }); + + //services.AddControllers(); + services.AddControllers(options => options.Filters.Add()); + services.AddControllersWithViews(); + + services.AddSwaggerGen(c => + { + c.SwaggerDoc("v1", new OpenApiInfo { Title = "WhMgr", Version = "v1" }); + }); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure( + IApplicationBuilder app, + IWebHostEnvironment env, + IDiscordClientService discordClientService, + IWebhookProcessorService webhookProcessorService) + { + app.UseMiddleware(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + app.UseSwagger(); + app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WhMgr v1")); + } + else + { + app.UseExceptionHandler("/error"); + app.UseHsts(); + } + + // Initialize and start Discord clients + Task.Run(async () => await discordClientService.Start()); + + app.UseStaticFiles(new StaticFileOptions + { + FileProvider = new PhysicalFileProvider( + Path.Combine(env.WebRootPath, "static")), + //RequestPath = "" + }); + + app.UseCors(); + + // Initialize Spa for React app + app.UseSpaStaticFiles(); + if (env.IsDevelopment()) + { + app.MapWhen(y => y.Request.Path.StartsWithSegments(Strings.AdminDashboardEndpoint), client => + { + client.UseSpa(spa => + { + spa.Options.SourcePath = Strings.ClientBuildFolder; + spa.UseReactDevelopmentServer(npmScript: "start"); + }); + }); + } + else + { + app.Map(new PathString(Strings.AdminDashboardEndpoint), client => + { + client.UseSpaStaticFiles(); + client.UseSpa(spa => { }); + }); + } + + app.UseStaticFiles(); + app.UseRouting(); + if (Config.EnableSentry) + { + app.UseSentryTracing(); + } + app.UseAuthorization(); + + app.UseSession(); + + // TODO: if (config.Discord.Enabled) + // TODO: app.UseMiddleware(); + // TODO: app.UseMiddleware(); + + /* + // Anti forgery middleware using csrf tokens + var antiforgery = app.ApplicationServices.GetRequiredService(); + app.Use((context, next) => + { + var requestPath = context.Request.Path.Value; + if (string.Equals(requestPath, "/dashboard", StringComparison.OrdinalIgnoreCase)) + { + var tokenSet = antiforgery.GetAndStoreTokens(context); + context.Response.Cookies.Append( + "XSRF-TOKEN", + tokenSet.RequestToken!, + new CookieOptions { HttpOnly = false } + ); + } + return next(); // context); + }); + */ + + //app.UseCsrfTokens(); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + + // Initialize webhook processor service + while (!discordClientService.Initialized) + { + System.Threading.Thread.Sleep(50); + } + webhookProcessorService.Start(); + } + } +} diff --git a/src/Statistics.cs b/src/Statistics.cs deleted file mode 100644 index c256570f..00000000 --- a/src/Statistics.cs +++ /dev/null @@ -1,192 +0,0 @@ -namespace WhMgr -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - - using WhMgr.Data; - using WhMgr.Net.Models; - - public class Statistics - { - #region Singleton - - private static Statistics _instance; - public static Statistics Instance - { - get - { - if (_instance == null) - { - _instance = new Statistics(); - } - - return _instance; - } - } - - #endregion - - #region Properties - - public long PokemonAlarmsSent { get; set; } - - public long RaidAlarmsSent { get; set; } - - public long EggAlarmsSent { get; set; } - - public long QuestAlarmsSent { get; set; } - - public long LureAlarmsSent { get; set; } - - public long InvasionAlarmsSent { get; set; } - - public long GymAlarmsSent { get; set; } - - public long WeatherAlarmsSent { get; set; } - - public long SubscriptionPokemonSent { get; set; } - - public long SubscriptionRaidsSent { get; set; } - - public long SubscriptionQuestsSent { get; set; } - - public long SubscriptionInvasionsSent { get; set; } - - public long SubscriptionLuresSent { get; set; } - - public Dictionary Hundos { get; } - - public long TotalReceivedPokemon { get; set; } - - public long TotalReceivedPokemonMissingStats { get; set; } - - public long TotalReceivedPokemonWithStats { get; set; } - - public long TotalReceivedRaids { get; set; } - - public long TotalReceivedEggs { get; set; } - - public long TotalReceivedGyms { get; set; } - - public long TotalReceivedPokestops { get; set; } - - public long TotalReceivedQuests { get; set; } - - public long TotalReceivedInvasions { get; set; } - - public long TotalReceivedLures { get; set; } - - public long TotalReceivedWeathers { get; set; } - - #endregion - - #region Constructor - - public Statistics() - { - Hundos = new Dictionary(); - } - - #endregion - - #region Public Methods - - public void AddHundredIV(PokemonData pokemon) - { - Hundos.Add(DateTime.Now, pokemon); - } - - public static void WriteOut() - { - if (!Directory.Exists(Strings.StatsFolder)) - { - Directory.CreateDirectory(Strings.StatsFolder); - } - - var sb = new System.Text.StringBuilder(); - sb.AppendLine(DateTime.Now.ToString()); - sb.AppendLine($"__**Pokemon**__"); - sb.AppendLine($"Alarms Sent: {Instance.PokemonAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {Instance.TotalReceivedPokemon:N0}"); - sb.AppendLine($"With IV Stats: {Instance.TotalReceivedPokemonWithStats:N0}"); - sb.AppendLine($"Missing IV Stats: {Instance.TotalReceivedPokemonMissingStats:N0}"); - sb.AppendLine($"Subscriptions Sent: {Instance.SubscriptionPokemonSent:N0}"); - sb.AppendLine(); - sb.AppendLine("__**Raids**__"); - sb.AppendLine($"Egg Alarms Sent: {Instance.EggAlarmsSent:N0}"); - sb.AppendLine($"Raids Alarms Sent: {Instance.RaidAlarmsSent:N0}"); - sb.AppendLine($"Total Eggs Received: {Instance.TotalReceivedRaids:N0}"); - sb.AppendLine($"Total Raids Received: {Instance.TotalReceivedRaids:N0}"); - sb.AppendLine($"Raid Subscriptions Sent: {Instance.SubscriptionRaidsSent:N0}"); - sb.AppendLine(); - sb.AppendLine($"__**Quests**__"); - sb.AppendLine($"Alarms Sent: {Instance.QuestAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {Instance.TotalReceivedQuests:N0}"); - sb.AppendLine($"Subscriptions Sent: {Instance.SubscriptionQuestsSent:N0}"); - sb.AppendLine(); - sb.AppendLine($"__**Invasions**__"); - sb.AppendLine($"Alarms Sent: {Instance.InvasionAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {Instance.TotalReceivedInvasions:N0}"); - sb.AppendLine($"Subscriptions Sent: {Instance.SubscriptionInvasionsSent:N0}"); - sb.AppendLine(); - sb.AppendLine($"__**Lures**__"); - sb.AppendLine($"Alarms Sent: {Instance.LureAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {Instance.TotalReceivedLures:N0}"); - sb.AppendLine($"Subscriptions Sent: {Instance.SubscriptionLuresSent:N0}"); - sb.AppendLine(); - sb.AppendLine($"__**Gyms**__"); - sb.AppendLine($"Alarms Sent: {Instance.GymAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {Instance.TotalReceivedGyms:N0}"); - sb.AppendLine(); - sb.AppendLine($"__**Weather**__"); - sb.AppendLine($"Alarms Sent: {Instance.WeatherAlarmsSent:N0}"); - sb.AppendLine($"Total Received: {Instance.TotalReceivedWeathers:N0}"); - sb.AppendLine(); - var hundos = string.Join(Environment.NewLine, Instance.Hundos.Select(x => $"{x.Key}: {MasterFile.Instance.Pokedex[x.Value.Id].Name} {x.Value.IV} IV {x.Value.CP} CP")); - sb.AppendLine($"**Recent 100% Spawns**"); - sb.AppendLine(string.IsNullOrEmpty(hundos) ? "None" : hundos); - - try - { - File.WriteAllText(Path.Combine(Strings.StatsFolder, string.Format(Strings.StatsFileName, DateTime.Now.ToString("yyyy-MM-dd_hhmmss"))), sb.ToString()); - } - catch (Exception ex) - { - Console.WriteLine(ex); - } - } - - public void Reset() - { - PokemonAlarmsSent = 0; - RaidAlarmsSent = 0; - EggAlarmsSent = 0; - QuestAlarmsSent = 0; - LureAlarmsSent = 0; - InvasionAlarmsSent = 0; - GymAlarmsSent = 0; - WeatherAlarmsSent = 0; - - SubscriptionPokemonSent = 0; - SubscriptionRaidsSent = 0; - SubscriptionQuestsSent = 0; - SubscriptionInvasionsSent = 0; - - TotalReceivedPokemon = 0; - TotalReceivedPokemonMissingStats = 0; - TotalReceivedPokemonWithStats = 0; - TotalReceivedRaids = 0; - TotalReceivedEggs = 0; - TotalReceivedQuests = 0; - TotalReceivedPokestops = 0; - TotalReceivedLures = 0; - TotalReceivedInvasions = 0; - TotalReceivedGyms = 0; - TotalReceivedWeathers = 0; - } - - #endregion - } -} \ No newline at end of file diff --git a/src/Strings.cs b/src/Strings.cs index 261d6b82..3bb598f9 100644 --- a/src/Strings.cs +++ b/src/Strings.cs @@ -1,206 +1,51 @@ -namespace WhMgr -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Reflection; - - using POGOProtos.Rpc; - using WhMgr.Data.Models; - using WeatherCondition = POGOProtos.Rpc.GameplayWeatherProto.Types.WeatherCondition; - - /// - /// Static strings class - /// - internal static class Strings - { - public const string BotName = "Brock"; - public const string Creator = "versx"; - public static readonly string Version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); - - public const string BannerAsciiText = @" - __ __ ___. .__ __ -/ \ / \ ____\_ |__ | |__ ____ ____ | | __ -\ \/\/ // __ \| __ \| | \ / _ \ / _ \| |/ / - \ /\ ___/| \_\ \ Y ( <_> | <_> ) < - \__/\ / \___ >___ /___| /\____/ \____/|__|_ \ - \/ \/ \/ \/ \/ - _____ - / \ _____ ____ _____ ____ ___________ - / \ / \\__ \ / \\__ \ / ___\_/ __ \_ __ \ -/ Y \/ __ \| | \/ __ \_/ /_/ > ___/| | \/ -\____|__ (____ /___| (____ /\___ / \___ >__| - \/ \/ \/ \//_____/ \/ - "; - - public const string GoogleMaps = "https://maps.google.com/maps?q={0},{1}"; - public const string AppleMaps = "https://maps.apple.com/maps?daddr={0},{1}"; - public const string WazeMaps = "https://waze.com/ul?ll={0},{1}&navigate=yes"; - - public const string GeofenceFolder = "geofences"; - public const string AlarmsFolder = "alarms"; - public const string AlertsFolder = "alerts"; - public const string DiscordsFolder = "discords"; - public const string FiltersFolder = "filters"; - public const string LibrariesFolder = "libs"; - public const string StaticFolder = "static"; - public const string TemplatesFolder = "templates"; - public const string MigrationsFolder = "migrations"; - public static readonly string AppFolder = StaticFolder + Path.DirectorySeparatorChar + "app"; - public static readonly string DataFolder = StaticFolder + Path.DirectorySeparatorChar + "data"; - public static readonly string LocaleFolder = StaticFolder + Path.DirectorySeparatorChar + "locale"; - public static readonly string EmojisFolder = StaticFolder + Path.DirectorySeparatorChar + "emojis"; - public static readonly string OsmNestFilePath = StaticFolder + Path.DirectorySeparatorChar + OsmNestFileName; - public const string StatsFolder = "stats"; - public const string LogsFolder = "logs"; - - public const string DefaultResponseMessage = "WH Test Running!"; - public static readonly string[] LocalEndPoint = { "localhost", "127.0.0.1" }; - - public const string ConfigFileName = "config.json"; - public const string OsmNestFileName = "nest.json"; - public const string DebugLogFileName = "debug.log"; - public const string ErrorLogFileName = "error.log"; - public const string StatsFileName = "notifications_{0}.csv"; - - public static readonly List ValidGenders = new List { "*", "m", "f" }; - - // Default filter settings for alarms and subscriptions - public const int MinimumIV = 0; - public const int MaximumIV = 100; - public const int MinimumLevel = 0; - public const int MaximumLevel = 35; - public const int MinimumCP = 0; - public const int MaximumCP = 99999; - public const int MinimumRank = 0; - public const int MaximumRank = 100; - public const int MinimumPercent = 0; - public const int MaximumPercent = 100; - public const int MinimumGreatLeagueCP = 1400; - public const int MaximumGreatLeagueCP = 1500; - public const int MinimumUltraLeagueCP = 2400; - public const int MaximumUltraLeagueCP = 2500; - - public const string All = "All"; - - public const int MaxPokemonDisplayed = 70; - public const int MaxPokemonSubscriptions = 25; - public const int MaxPvPSubscriptions = 15; - public const int MaxRaidSubscriptions = 5; - public const int MaxGymSubscriptions = 3; - public const int MaxQuestSubscriptions = 2; - public const int MaxInvasionSubscriptions = 1; - public const int CommonTypeMinimumIV = 90; - - public const int MaxQueueCountWarning = 30; - - public const string EmojiSchema = "<:{0}:{1}>"; - public const string TypeEmojiSchema = "<:types_{0}:{1}>"; - - public const string SQL_SELECT_CONVERTED_POKESTOPS = "SELECT pokestop.id, pokestop.lat, pokestop.lon, pokestop.name, pokestop.url FROM pokestop INNER JOIN gym ON pokestop.id = gym.id WHERE pokestop.id = gym.id;"; - public const string SQL_UPDATE_CONVERTED_POKESTOPS = "UPDATE gym INNER JOIN pokestop ON pokestop.id = gym.id SET gym.name = pokestop.name, gym.url = pokestop.url;"; - public const string SQL_DELETE_CONVERTED_POKESTOPS = "DELETE FROM pokestop WHERE id IN (SELECT id FROM gym)"; - public const string SQL_DELETE_STALE_POKESTOPS = "DELETE FROM pokestop WHERE updated < UNIX_TIMESTAMP() - 90000;"; - - public static readonly Dictionary PokemonGenerationRanges = new Dictionary - { - { 1, new PokemonGenerationRange { Generation = 1, Start = 1, End = 151 } }, - { 2, new PokemonGenerationRange { Generation = 2, Start = 152, End = 251 } }, - { 3, new PokemonGenerationRange { Generation = 3, Start = 252, End = 385 } }, - { 4, new PokemonGenerationRange { Generation = 4, Start = 386, End = 493 } }, - { 5, new PokemonGenerationRange { Generation = 5, Start = 495, End = 649 } }, - { 6, new PokemonGenerationRange { Generation = 6, Start = 650, End = 721 } }, - { 7, new PokemonGenerationRange { Generation = 7, Start = 722, End = 809 } }, - { 8, new PokemonGenerationRange { Generation = 8, Start = 810, End = 890 } } - }; - - // Required emoji list - public static readonly string[] EmojiList = - { - // Team emojis - "neutral", - "valor", - "mystic", - "instinct", - - // Capture rate emojis - "capture_1", - "capture_2", - "capture_3", - - // Weather emojis - "weather_1", // Clear - "weather_2", // Rain - "weather_3", // PartlyCloudy/Overcast - "weather_4", // Cloudy - "weather_5", // Windy - "weather_6", // Snow - "weather_7", // Fog - - // Ex gym emoji - "ex", - - // Type emojis - "types_fire", - "types_grass", - "types_ground", - "types_rock", - "types_water", - "types_ghost", - "types_ice", - "types_dragon", - "types_fairy", - "types_fighting", - "types_bug", - "types_psychic", - "types_electric", - "types_steel", - "types_dark", - "types_normal", - "types_flying", - "types_poison", - - // PVP league emojis - "league_great", - "league_ultra", - - // Gender emojis - "gender_male", - "gender_female", - "gender_less" - }; - - public static IReadOnlyDictionary> WeatherBoosts => new Dictionary> - { - { WeatherCondition.None, new List { } }, - { WeatherCondition.Clear, new List { PokemonType.Fire, PokemonType.Grass, PokemonType.Ground } }, - { WeatherCondition.Rainy, new List { PokemonType.Water, PokemonType.Electric, PokemonType.Bug } }, - { WeatherCondition.PartlyCloudy, new List { PokemonType.Normal, PokemonType.Rock } }, - { WeatherCondition.Overcast, new List { PokemonType.Fairy, PokemonType.Fighting, PokemonType.Poison } }, - { WeatherCondition.Windy, new List { PokemonType.Dragon, PokemonType.Flying, PokemonType.Psychic } }, - { WeatherCondition.Snow, new List { PokemonType.Ice, PokemonType.Steel } }, - { WeatherCondition.Fog, new List { PokemonType.Dark, PokemonType.Ghost } } - }; - } - - /// - /// Pokemon generation range class - /// - public class PokemonGenerationRange - { - /// - /// Gets or sets the Pokemon generation number - /// - public int Generation { get; set; } - - /// - /// Gets or sets the pokedex ID the generation starts at - /// - public int Start { get; set; } - - /// - /// Gets or sets the pokedex ID the generation ends at - /// - public int End { get; set; } - } -} +namespace WhMgr +{ + using System.IO; + + using WhMgr.Extensions; + + public static class Strings + { + public static Defaults Defaults => Path.Combine(DataFolder, DefaultsFileName) + .LoadFromFile() ?? new(); + + public const string BotName = "Webhook Manager"; + public static readonly string BotVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); + public const string Creator = "versx"; + + public const string ClientBuildFolder = "ClientApp/build"; + public const string AdminDashboardEndpoint = "/dashboard"; + + public const string WwwRoot = BasePath + "wwwroot"; + + public const string BasePath = "../bin/"; + public const string ConfigsFolder = BasePath + "configs"; + public const string GeofencesFolder = BasePath + "geofences"; + public const string AlarmsFolder = BasePath + "alarms"; + public const string EmbedsFolder = BasePath + "embeds"; + public const string DiscordsFolder = BasePath + "discords"; + public const string FiltersFolder = BasePath + "filters"; + public const string StaticFolder = "static"; + public const string TemplatesFolder = BasePath + "templates"; + public static readonly string DataFolder = BasePath + StaticFolder + Path.DirectorySeparatorChar + "data"; + public static readonly string LocaleFolder = StaticFolder + Path.DirectorySeparatorChar + "locales"; + public static readonly string EmojisFolder = BasePath + StaticFolder + Path.DirectorySeparatorChar + "emojis"; + public static readonly string OsmNestFilePath = StaticFolder + Path.DirectorySeparatorChar + OsmNestFileName; + public const string DiscordAuthFilePath = BasePath + "discord_auth.json"; + public const string DiscordAvatarUrlFormat = "https://cdn.discordapp.com/avatars/{0}/{1}.png"; + + public const string GoogleMapsReverseGeocodingApiUrl = "https://maps.googleapis.com/maps/api/geocode/json"; + public const string LatestGameMasterFileUrl = "https://raw.githubusercontent.com/WatWowMap/Masterfile-Generator/master/master-latest.json"; + + public const string ConfigFileName = "config.json"; + public const string DefaultsFileName = "defaults.json"; + public const string OsmNestFileName = "nest.json"; + public const string DebugLogFileName = "debug.log"; + public const string ErrorLogFileName = "error.log"; + + public const int DiscordMaximumMessageLength = 2048; + + public const string EX = "ex"; + public const string AR = "ar"; + } +} \ No newline at end of file diff --git a/src/Utilities/NetUtil.cs b/src/Utilities/NetUtil.cs deleted file mode 100644 index 2b0d516c..00000000 --- a/src/Utilities/NetUtil.cs +++ /dev/null @@ -1,104 +0,0 @@ -namespace WhMgr.Utilities -{ - using System; - using System.Net; - using System.Threading; - using System.Web; - - using Newtonsoft.Json; - - public static class NetUtil - { - /// - /// Checks if the url is not accessible - /// - /// Url address to check - /// True if the Url is not accessible, false if accessible - public static bool IsUrlBlocked(string url) - { - try - { - //Creating the HttpWebRequest - var request = WebRequest.Create(url) as HttpWebRequest; - //Setting the Request method HEAD, you can also use GET too. - request.Method = "HEAD"; - //Getting the Web Response. - var response = request.GetResponse() as HttpWebResponse; - //Returns TRUE if the Status code != 200 - response.Close(); - var result = response.StatusCode; - return (result == HttpStatusCode.Forbidden || - result == HttpStatusCode.Conflict); - } - catch - { - //Any exception will returns false. - return false; - } - } - - /// - /// Sends webhook data - /// - /// - /// - public static void SendWebhook(string webhookUrl, string json) - { - using (var wc = new WebClient()) - { - wc.Headers.Add(HttpRequestHeader.ContentType, "application/json"); - //wc.Headers.Add(HttpRequestHeader.Authorization, "Bot base64_auth_token"); - //wc.Headers.Add(HttpRequestHeader.UserAgent, ""); - try - { - var resp = wc.UploadString(webhookUrl, json); - //Console.WriteLine($"Response: {resp}"); - Thread.Sleep(200); - } - catch (WebException ex) - { - var resp = (HttpWebResponse)ex.Response; - switch ((int)(resp?.StatusCode ?? 0)) - { - //https://discordapp.com/developers/docs/topics/rate-limits - case 429: - Console.WriteLine("RATE LIMITED"); - var retryAfter = resp.Headers["Retry-After"]; - //var limit = resp.Headers["X-RateLimit-Limit"]; - //var remaining = resp.Headers["X-RateLimit-Remaining"]; - //var reset = resp.Headers["X-RateLimit-Reset"]; - if (!int.TryParse(retryAfter, out var retry)) - return; - - Thread.Sleep(retry); - SendWebhook(webhookUrl, json); - break; - } - } - } - } - - /// - /// - /// - /// - /// - public static string Get(string url) - { - using (var wc = new WebClient()) - { - wc.Proxy = null; - try - { - return wc.DownloadString(url); - } - catch (Exception ex) - { - Console.WriteLine($"Failed to download data from {url}: {ex}"); - } - } - - return null; - } - } -} diff --git a/src/Utilities/NetUtils.cs b/src/Utilities/NetUtils.cs new file mode 100644 index 00000000..fa436945 --- /dev/null +++ b/src/Utilities/NetUtils.cs @@ -0,0 +1,78 @@ +namespace WhMgr.Utilities +{ + using System; + using System.Net; + using System.Net.Http; + using System.Text; + using System.Threading.Tasks; + + public static class NetUtils + { + public static string Get(string url) + { + return GetAsync(url).Result; + } + + /// + /// Sends a HTTP GET request to the specified url. + /// + /// Url to send the request to. + /// Returns the response string of the HTTP GET request. + public static async Task GetAsync(string url) + { + try + { + using var client = new HttpClient(); + var mime = "application/json"; + client.DefaultRequestHeaders.Add(HttpRequestHeader.Accept.ToString(), mime); + client.DefaultRequestHeaders.Add(HttpRequestHeader.ContentType.ToString(), mime); + return await client.GetStringAsync(url); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to download data from {url}: {ex}"); + } + return null; + } + + public static string Post(string url, string payload) + { + return PostAsync(url, payload).Result; + } + + /// + /// Sends a HTTP POST request to the specified url with JSON payload. + /// + /// Url to send the request to. + /// JSON payload that will be sent in the request. + /// Returns the response string of the HTTP POST request. + public static async Task PostAsync(string url, string payload, string userAgent = Strings.BotName) + { + try + { + using var client = new HttpClient(); + var mime = "application/json"; + var requestMessage = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = new Uri(url), + Headers = + { + { HttpRequestHeader.UserAgent.ToString(), userAgent }, + { HttpRequestHeader.Accept.ToString(), mime }, + { HttpRequestHeader.ContentType.ToString(), mime }, + }, + Content = new StringContent(payload, Encoding.UTF8, mime), + }; + var response = await client.SendAsync(requestMessage); + var responseData = await response.Content.ReadAsStringAsync(); + return responseData; + } + catch (Exception ex) + { + Console.WriteLine($"Failed to post data to {url}: {ex}"); + } + return null; + } + } +} \ No newline at end of file diff --git a/src/Utilities/StaticMap.cs b/src/Utilities/StaticMap.cs deleted file mode 100644 index 5dbc75c5..00000000 --- a/src/Utilities/StaticMap.cs +++ /dev/null @@ -1,36 +0,0 @@ -namespace WhMgr.Utilities -{ - using System; - using System.Collections.Generic; - - using WhMgr.Diagnostics; - using WhMgr.Net.Models; - using WhMgr.Osm; - using WhMgr.Osm.Models; - - public static class StaticMap - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("STATICMAP", Program.LogLevel); - - // TODO: Add support for multistaticmap templates - public static string GetUrl(string staticMapUrl, string templateName, double latitude, double longitude, string imageUrl, PokemonTeam team = PokemonTeam.All, OsmFeature feature = null, MultiPolygon multiPolygon = null) - { - var baseUrl = $"{staticMapUrl}/staticmap/{templateName}?lat={latitude}&lon={longitude}&url2={imageUrl}"; - if (team != PokemonTeam.All) - { - baseUrl += $"&team_id={Convert.ToInt32(team)}"; - } - if (feature != null) - { - var latlng = OsmManager.MultiPolygonToLatLng(feature.Geometry?.Coordinates, true); - baseUrl += $"&path={latlng}"; - } - if (multiPolygon != null) - { - var latlng = OsmManager.MultiPolygonToLatLng(new List { multiPolygon }, false); - baseUrl += $"&path={latlng}"; - } - return baseUrl; - } - } -} \ No newline at end of file diff --git a/src/Utilities/Utils.cs b/src/Utilities/Utils.cs deleted file mode 100644 index 5d7b6340..00000000 --- a/src/Utilities/Utils.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace WhMgr.Utilities -{ - using Twilio; - using Twilio.Rest.Api.V2010.Account; - using Twilio.Types; - - using WhMgr.Configuration; - using WhMgr.Diagnostics; - - public static class Utils - { - private static readonly IEventLogger _logger = EventLogger.GetLogger("UTILS", Program.LogLevel); - - public static bool SendSmsMessage(string body, TwilioConfig config, string toPhoneNumber) - { - if (!config.Enabled) - { - // Twilio text message notifications not enabled - return false; - } - - TwilioClient.Init(config.AccountSid, config.AuthToken); - var message = MessageResource.Create( - body: body, - from: new PhoneNumber($"+1{config.FromNumber}"), - to: new PhoneNumber($"+1{toPhoneNumber}") - ); - //_logger.Debug($"Response: {message}"); - return message.ErrorCode == null; - } - } -} \ No newline at end of file diff --git a/src/Web/Api/Responses/SubscriptionsResponse.cs b/src/Web/Api/Responses/SubscriptionsResponse.cs new file mode 100644 index 00000000..0a53c950 --- /dev/null +++ b/src/Web/Api/Responses/SubscriptionsResponse.cs @@ -0,0 +1,13 @@ +namespace WhMgr.Web.Api.Responses +{ + using System.Text.Json.Serialization; + + public class SubscriptionsResponse + { + [JsonPropertyName("status")] + public string Status { get; set; } + + [JsonPropertyName("data")] + public T Data { get; set; } + } +} \ No newline at end of file diff --git a/src/Web/Auth/Discord/Models/DiscordAuthResponse.cs b/src/Web/Auth/Discord/Models/DiscordAuthResponse.cs new file mode 100644 index 00000000..43e02d71 --- /dev/null +++ b/src/Web/Auth/Discord/Models/DiscordAuthResponse.cs @@ -0,0 +1,22 @@ +namespace WhMgr.Web.Auth.Discord.Models +{ + using System.Text.Json.Serialization; + + public class DiscordAuthResponse + { + [JsonPropertyName("access_token")] + public string AccessToken { get; set; } + + [JsonPropertyName("expires_in")] + public int ExpiresIn { get; set; } + + [JsonPropertyName("refresh_token")] + public string RefreshToken { get; set; } + + [JsonPropertyName("scope")] + public string Scope { get; set; } + + [JsonPropertyName("token_type")] + public string TokenType { get; set; } + } +} \ No newline at end of file diff --git a/src/Web/Auth/Discord/Models/DiscordGuildInfo.cs b/src/Web/Auth/Discord/Models/DiscordGuildInfo.cs new file mode 100644 index 00000000..fad2d40c --- /dev/null +++ b/src/Web/Auth/Discord/Models/DiscordGuildInfo.cs @@ -0,0 +1,29 @@ +namespace WhMgr.Web.Auth.Discord.Models +{ + using System.Collections.Generic; + using System.Text.Json.Serialization; + + public class DiscordGuildInfo + { + [JsonPropertyName("id")] + public string Id { get; set; } // Need to specify string instead of ulong >.> + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("icon")] + public string Icon { get; set; } + + [JsonPropertyName("owner")] + public bool IsOwner { get; set; } + + [JsonPropertyName("permissions")] + public int Permissions { get; set; } + + [JsonPropertyName("features")] + public List Features { get; set; } + + [JsonPropertyName("permissions_new")] + public string PermissionsNew { get; set; } + } +} \ No newline at end of file diff --git a/src/Web/Auth/Discord/Models/DiscordGuildMemberInfo.cs b/src/Web/Auth/Discord/Models/DiscordGuildMemberInfo.cs new file mode 100644 index 00000000..0e719ecf --- /dev/null +++ b/src/Web/Auth/Discord/Models/DiscordGuildMemberInfo.cs @@ -0,0 +1,41 @@ +namespace WhMgr.Web.Auth.Discord.Models +{ + using System.Collections.Generic; + using System.Text.Json.Serialization; + + public class DiscordGuildMemberInfo + { + [JsonPropertyName("user")] + public DiscordGuildUserInfo User { get; set; } + + [JsonPropertyName("nick")] + public string Nickname { get; set; } + + [JsonPropertyName("avatar")] + public string AvatarHash { get; set; } + + [JsonPropertyName("roles")] + public List Roles { get; set; } + + [JsonPropertyName("joined_at")] + public long JoinedAtTimestamp { get; set; } + + [JsonPropertyName("premium_since")] + public long? PremiumSinceTimestamp { get; set; } + + [JsonPropertyName("deaf")] + public bool IsDeaf { get; set; } + + [JsonPropertyName("mute")] + public bool IsMute { get; set; } + + [JsonPropertyName("pending")] + public bool? IsPending { get; set; } + + [JsonPropertyName("permissions")] + public string Permissions { get; set; } + + [JsonPropertyName("communication_disabled_until")] + public long? CommunicationDisabledUntil { get; set; } + } +} \ No newline at end of file diff --git a/src/Web/Auth/Discord/Models/DiscordGuildUserInfo.cs b/src/Web/Auth/Discord/Models/DiscordGuildUserInfo.cs new file mode 100644 index 00000000..a9b86f14 --- /dev/null +++ b/src/Web/Auth/Discord/Models/DiscordGuildUserInfo.cs @@ -0,0 +1,52 @@ +namespace WhMgr.Web.Auth.Discord.Models +{ + using System.Text.Json.Serialization; + + public class DiscordGuildUserInfo + { + [JsonPropertyName("id")] + public ulong Id { get; set; } + + [JsonPropertyName("username")] + public string Username { get; set; } + + [JsonPropertyName("discriminator")] + public string Discriminator { get; set; } + + [JsonPropertyName("avatar")] + public string Avatar { get; set; } + + [JsonPropertyName("bot")] + public bool? IsBot { get; set; } + + [JsonPropertyName("system")] + public bool? IsSystem { get; set; } + + [JsonPropertyName("mfa_enabled")] + public bool? IsMfaEnabled { get; set; } + + [JsonPropertyName("banner")] + public string Banner { get; set; } + + [JsonPropertyName("accent_color")] + public int? AccentColor { get; set; } + + [JsonPropertyName("locale")] + public string Locale { get; set; } + + [JsonPropertyName("is_verified")] + public bool? IsVerified { get; set; } + + [JsonPropertyName("email")] + public string Email { get; set; } + + [JsonPropertyName("flags")] + public int? Flags { get; set; } + + [JsonPropertyName("premium_type")] + public int? PremiumType { get; set; } + + [JsonPropertyName("public_flags")] + public int? PublicFlags { get; set; } + } +} \ No newline at end of file diff --git a/src/Web/Auth/Discord/Models/DiscordUserInfo.cs b/src/Web/Auth/Discord/Models/DiscordUserInfo.cs new file mode 100644 index 00000000..38c31a9e --- /dev/null +++ b/src/Web/Auth/Discord/Models/DiscordUserInfo.cs @@ -0,0 +1,40 @@ +namespace WhMgr.Web.Auth.Discord.Models +{ + using System.Text.Json.Serialization; + + public class DiscordUserInfo + { + [JsonPropertyName("id")] + public string Id { get; set; } // Need to specify string instead of ulong >.> + + [JsonPropertyName("username")] + public string Username { get; set; } + + [JsonPropertyName("avatar")] + public string Avatar { get; set; } + + [JsonPropertyName("discriminator")] + public string Discriminator { get; set; } + + [JsonPropertyName("public_flags")] + public int PublicFlags { get; set; } + + [JsonPropertyName("flags")] + public int Flags { get; set; } + + [JsonPropertyName("locale")] + public string Locale { get; set; } + + [JsonPropertyName("mfa_enabled")] + public bool MfaEnabled { get; set; } + + [JsonPropertyName("premium_type")] + public int PremiumType { get; set; } + + [JsonPropertyName("email")] + public string Email { get; set; } + + [JsonPropertyName("verified")] + public bool Verified { get; set; } + } +} \ No newline at end of file diff --git a/src/Web/Events/MinimalEventCounterSource.cs b/src/Web/Events/MinimalEventCounterSource.cs new file mode 100644 index 00000000..7322b536 --- /dev/null +++ b/src/Web/Events/MinimalEventCounterSource.cs @@ -0,0 +1,37 @@ +namespace WhMgr.Web.Events +{ + using System; + using System.Diagnostics.Tracing; + + [EventSource(Name = Strings.BotName + " EventCounter")] + public sealed class MinimalEventCounterSource : EventSource + { + public static readonly MinimalEventCounterSource Logger = new(); + + private EventCounter _requestCounter; + + private MinimalEventCounterSource() + { + _requestCounter = new EventCounter("request-time", this) + { + DisplayName = "Request Processing Time", + DisplayUnits = "ms" + }; + } + + public void Request(string url, double elapsedMilliseconds) + { + WriteEvent(1, url, elapsedMilliseconds); + Console.WriteLine($"Request {url} time elapsed: {elapsedMilliseconds} ms"); + _requestCounter?.WriteMetric(elapsedMilliseconds); + } + + protected override void Dispose(bool disposing) + { + _requestCounter?.Dispose(); + _requestCounter = null; + + base.Dispose(disposing); + } + } +} \ No newline at end of file diff --git a/src/Web/Extensions/CsrfTokenExtension.cs b/src/Web/Extensions/CsrfTokenExtension.cs new file mode 100644 index 00000000..a475a751 --- /dev/null +++ b/src/Web/Extensions/CsrfTokenExtension.cs @@ -0,0 +1,15 @@ +namespace WhMgr.Web.Extensions +{ + using Microsoft.AspNetCore.Builder; + + using WhMgr.Web.Middleware; + + public static class CsrfTokenExtensions + { + public static IApplicationBuilder UseCsrfTokens( + this IApplicationBuilder builder) + { + return builder.UseMiddleware(); + } + } +} \ No newline at end of file diff --git a/src/Web/Filters/LogRequestTimeFilterAttribute.cs b/src/Web/Filters/LogRequestTimeFilterAttribute.cs new file mode 100644 index 00000000..dfef2470 --- /dev/null +++ b/src/Web/Filters/LogRequestTimeFilterAttribute.cs @@ -0,0 +1,26 @@ +namespace WhMgr.Web.Filters +{ + using System.Diagnostics; + + using Microsoft.AspNetCore.Http.Extensions; + using Microsoft.AspNetCore.Mvc.Filters; + + using WhMgr.Web.Events; + + public class LogRequestTimeFilterAttribute : ActionFilterAttribute + { + private readonly Stopwatch _stopwatch = new(); + + public override void OnActionExecuting(ActionExecutingContext context) => _stopwatch.Start(); + + public override void OnActionExecuted(ActionExecutedContext context) + { + _stopwatch.Stop(); + + MinimalEventCounterSource.Logger.Request( + context.HttpContext.Request.GetDisplayUrl(), + _stopwatch.ElapsedMilliseconds + ); + } + } +} \ No newline at end of file diff --git a/src/Web/Middleware/CsrfTokenMiddleware.cs b/src/Web/Middleware/CsrfTokenMiddleware.cs new file mode 100644 index 00000000..a071937b --- /dev/null +++ b/src/Web/Middleware/CsrfTokenMiddleware.cs @@ -0,0 +1,43 @@ +namespace WhMgr.Web.Middleware +{ + using System; + using System.Threading.Tasks; + + using Microsoft.AspNetCore.Antiforgery; + using Microsoft.AspNetCore.Http; + + public class CsrfTokenMiddleware + { + private readonly RequestDelegate _next; + + public CsrfTokenMiddleware(RequestDelegate next) + { + _next = next; + } + + public async Task InvokeAsync(HttpContext context) + { + var requestPath = context.Request.Path.Value; + Console.WriteLine($"Middleware: {requestPath}"); + + //var antiforgery = context.ApplicationServices.GetRequiredService(); + var antiforgery = context.RequestServices.GetService(typeof(IAntiforgery)); + if (string.Equals(requestPath, "/", StringComparison.OrdinalIgnoreCase) + || string.Equals(requestPath, "/dashboard", StringComparison.OrdinalIgnoreCase)) + { + Console.WriteLine($"Context: {context.Request.Headers["X-CSRF-TOKEN-HEADERNAME"]}"); + /* + var tokenSet = antiforgery.GetAndStoreTokens(context); + Console.WriteLine($"csrf token: {tokenSet.RequestToken}"); + context.Response.Cookies.Append( + "XSRF-TOKEN", + tokenSet.RequestToken!, + new CookieOptions { HttpOnly = false } + ); + */ + } + // TODO: Set header with request token + await _next(context); + } + } +} \ No newline at end of file diff --git a/src/Web/Middleware/DiscordAuthMiddleware.cs b/src/Web/Middleware/DiscordAuthMiddleware.cs new file mode 100644 index 00000000..17a337ec --- /dev/null +++ b/src/Web/Middleware/DiscordAuthMiddleware.cs @@ -0,0 +1,42 @@ +namespace WhMgr.Web.Middleware +{ + using System.Collections.Generic; + using System.Threading.Tasks; + + using Microsoft.AspNetCore.Http; + + using WhMgr.Extensions; + + public class DiscordAuthMiddleware + { + private static readonly ICollection IgnoreRequestPaths = new List + { + "/", + "/dashboard/login", + "/dashboard/logout", + "/auth/discord/login", + "/auth/discord/callback", + "/api/v1", // TODO: Fix + }; + private readonly RequestDelegate _next; + + public DiscordAuthMiddleware(RequestDelegate next) + { + _next = next; + } + + public async Task Invoke(HttpContext httpContext) + { + if (!httpContext.Session.GetValue("is_valid") + && !IgnoreRequestPaths.Contains(httpContext.Request.Path)) + { + httpContext.Session.SetValue("last_redirect", httpContext.Request.Path.Value); + httpContext.Response.Redirect("/auth/discord/login"); + } + else + { + await _next(httpContext).ConfigureAwait(false); + } + } + } +} \ No newline at end of file diff --git a/src/Web/Middleware/RequestsMiddleware.cs b/src/Web/Middleware/RequestsMiddleware.cs new file mode 100644 index 00000000..e6b165ba --- /dev/null +++ b/src/Web/Middleware/RequestsMiddleware.cs @@ -0,0 +1,25 @@ +namespace WhMgr.Web.Middleware +{ + using System.Threading.Tasks; + + using Microsoft.AspNetCore.Http; + using Microsoft.Extensions.Logging; + + public class RequestsMiddleware + { + private readonly RequestDelegate _next; + private readonly ILogger _logger; + + public RequestsMiddleware(RequestDelegate next, ILogger logger) + { + _next = next; + _logger = logger; + } + + public async Task Invoke(HttpContext httpContext) + { + //_logger.Information($"Path: {httpContext.Request.Path}"); + await _next(httpContext).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/Web/Middleware/UserPassportMiddleware.cs b/src/Web/Middleware/UserPassportMiddleware.cs new file mode 100644 index 00000000..743faf2b --- /dev/null +++ b/src/Web/Middleware/UserPassportMiddleware.cs @@ -0,0 +1,56 @@ +namespace WhMgr.Web.Middleware +{ + using System.Collections.Generic; + using System.Text.Json.Serialization; + using System.Threading.Tasks; + + using Microsoft.AspNetCore.Http; + + using WhMgr.Extensions; + + public class UserPassportMiddleware + { + private readonly RequestDelegate _next; + + public UserPassportMiddleware(RequestDelegate next) + { + _next = next; + } + + public async Task Invoke(HttpContext httpContext) + { + var session = httpContext.Session; + session.SetValue("passport", new UserPassport + { + IsValid = session.GetValue("is_valid"), + UserId = session.GetValue("user_id"), + Email = session.GetValue("email"), + Username = session.GetValue("username"), + GuildIds = session.GetValue>("guild_ids"), + AvatarId = session.GetValue("avatar_id"), + }); + await _next(httpContext).ConfigureAwait(false); + } + } + + public class UserPassport + { + [JsonPropertyName("is_valid")] + public bool IsValid { get; set; } + + [JsonPropertyName("user_id")] + public string UserId { get; set; } + + [JsonPropertyName("email")] + public string Email { get; set; } + + [JsonPropertyName("username")] + public string Username { get; set; } + + [JsonPropertyName("guild_ids")] + public List GuildIds { get; set; } + + [JsonPropertyName("avatar_id")] + public string AvatarId { get; set; } + } +} \ No newline at end of file diff --git a/src/WhMgr.csproj b/src/WhMgr.csproj index 1fc8568f..3cf4ee65 100644 --- a/src/WhMgr.csproj +++ b/src/WhMgr.csproj @@ -1,55 +1,110 @@ - - - - Exe - netcoreapp2.1 - true - true - true - versx - WhMgr - 4.2.1.$([System.DateTime]::UtcNow.ToString(hmm)) - 4.2.1.1 - $(VersionSuffix) - 4.2.1.0 - $(VersionSuffix) - 4.17.0.0 - 4.17.0.0 - - - Windows - - - OSX - - - Linux - - - - false - false - - - - ../bin - - - - - - - - - - - - - - - - - - - - + + + + net5.0 + Linux + true + true + true + + + + Windows + + + macOS + + + Linux + + + + false + false + 5.5.5.0 + 9cf13a41-ba6b-43d0-b5a5-4938c3b1e968 + 5.5.5.0 + 5.5.5.0 + XYZ Software Solutions + https://github.com/versx/WhMgr + README.md + https://github.com/versx/WhMgr + git + + + + ../bin + + + + + ../bin + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + + + PreserveNewest + + + + + + + + + + + + True + \ + + + + + diff --git a/src/appsettings.Development.json b/src/appsettings.Development.json new file mode 100644 index 00000000..8983e0fc --- /dev/null +++ b/src/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/src/appsettings.json b/src/appsettings.json new file mode 100644 index 00000000..750159e2 --- /dev/null +++ b/src/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} diff --git a/src/wwwroot/static/css/all.css b/src/wwwroot/static/css/all.css new file mode 100644 index 00000000..f0246dca --- /dev/null +++ b/src/wwwroot/static/css/all.css @@ -0,0 +1,4616 @@ +/*! + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa, +.fas, +.far, +.fal, +.fad, +.fab { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; } + +.fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -.0667em; } + +.fa-xs { + font-size: .75em; } + +.fa-sm { + font-size: .875em; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; } + +.fa-border { + border: solid 0.08em #eee; + border-radius: .1em; + padding: .2em .25em .15em; } + +.fa-pull-left { + float: left; } + +.fa-pull-right { + float: right; } + +.fa.fa-pull-left, +.fas.fa-pull-left, +.far.fa-pull-left, +.fal.fa-pull-left, +.fab.fa-pull-left { + margin-right: .3em; } + +.fa.fa-pull-right, +.fas.fa-pull-right, +.far.fa-pull-right, +.fal.fa-pull-right, +.fab.fa-pull-right { + margin-left: .3em; } + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical, +:root .fa-flip-both { + -webkit-filter: none; + filter: none; } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: #fff; } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-500px:before { + content: "\f26e"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-acquisitions-incorporated:before { + content: "\f6af"; } + +.fa-ad:before { + content: "\f641"; } + +.fa-address-book:before { + content: "\f2b9"; } + +.fa-address-card:before { + content: "\f2bb"; } + +.fa-adjust:before { + content: "\f042"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-air-freshener:before { + content: "\f5d0"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-align-center:before { + content: "\f037"; } + +.fa-align-justify:before { + content: "\f039"; } + +.fa-align-left:before { + content: "\f036"; } + +.fa-align-right:before { + content: "\f038"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-allergies:before { + content: "\f461"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-ambulance:before { + content: "\f0f9"; } + +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-anchor:before { + content: "\f13d"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-angle-double-down:before { + content: "\f103"; } + +.fa-angle-double-left:before { + content: "\f100"; } + +.fa-angle-double-right:before { + content: "\f101"; } + +.fa-angle-double-up:before { + content: "\f102"; } + +.fa-angle-down:before { + content: "\f107"; } + +.fa-angle-left:before { + content: "\f104"; } + +.fa-angle-right:before { + content: "\f105"; } + +.fa-angle-up:before { + content: "\f106"; } + +.fa-angry:before { + content: "\f556"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-ankh:before { + content: "\f644"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-apple-alt:before { + content: "\f5d1"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-archive:before { + content: "\f187"; } + +.fa-archway:before { + content: "\f557"; } + +.fa-arrow-alt-circle-down:before { + content: "\f358"; } + +.fa-arrow-alt-circle-left:before { + content: "\f359"; } + +.fa-arrow-alt-circle-right:before { + content: "\f35a"; } + +.fa-arrow-alt-circle-up:before { + content: "\f35b"; } + +.fa-arrow-circle-down:before { + content: "\f0ab"; } + +.fa-arrow-circle-left:before { + content: "\f0a8"; } + +.fa-arrow-circle-right:before { + content: "\f0a9"; } + +.fa-arrow-circle-up:before { + content: "\f0aa"; } + +.fa-arrow-down:before { + content: "\f063"; } + +.fa-arrow-left:before { + content: "\f060"; } + +.fa-arrow-right:before { + content: "\f061"; } + +.fa-arrow-up:before { + content: "\f062"; } + +.fa-arrows-alt:before { + content: "\f0b2"; } + +.fa-arrows-alt-h:before { + content: "\f337"; } + +.fa-arrows-alt-v:before { + content: "\f338"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-assistive-listening-systems:before { + content: "\f2a2"; } + +.fa-asterisk:before { + content: "\f069"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-at:before { + content: "\f1fa"; } + +.fa-atlas:before { + content: "\f558"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-atom:before { + content: "\f5d2"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-audio-description:before { + content: "\f29e"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-award:before { + content: "\f559"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-baby:before { + content: "\f77c"; } + +.fa-baby-carriage:before { + content: "\f77d"; } + +.fa-backspace:before { + content: "\f55a"; } + +.fa-backward:before { + content: "\f04a"; } + +.fa-bacon:before { + content: "\f7e5"; } + +.fa-bacteria:before { + content: "\e059"; } + +.fa-bacterium:before { + content: "\e05a"; } + +.fa-bahai:before { + content: "\f666"; } + +.fa-balance-scale:before { + content: "\f24e"; } + +.fa-balance-scale-left:before { + content: "\f515"; } + +.fa-balance-scale-right:before { + content: "\f516"; } + +.fa-ban:before { + content: "\f05e"; } + +.fa-band-aid:before { + content: "\f462"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-barcode:before { + content: "\f02a"; } + +.fa-bars:before { + content: "\f0c9"; } + +.fa-baseball-ball:before { + content: "\f433"; } + +.fa-basketball-ball:before { + content: "\f434"; } + +.fa-bath:before { + content: "\f2cd"; } + +.fa-battery-empty:before { + content: "\f244"; } + +.fa-battery-full:before { + content: "\f240"; } + +.fa-battery-half:before { + content: "\f242"; } + +.fa-battery-quarter:before { + content: "\f243"; } + +.fa-battery-three-quarters:before { + content: "\f241"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-bed:before { + content: "\f236"; } + +.fa-beer:before { + content: "\f0fc"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-bell:before { + content: "\f0f3"; } + +.fa-bell-slash:before { + content: "\f1f6"; } + +.fa-bezier-curve:before { + content: "\f55b"; } + +.fa-bible:before { + content: "\f647"; } + +.fa-bicycle:before { + content: "\f206"; } + +.fa-biking:before { + content: "\f84a"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-binoculars:before { + content: "\f1e5"; } + +.fa-biohazard:before { + content: "\f780"; } + +.fa-birthday-cake:before { + content: "\f1fd"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-blender:before { + content: "\f517"; } + +.fa-blender-phone:before { + content: "\f6b6"; } + +.fa-blind:before { + content: "\f29d"; } + +.fa-blog:before { + content: "\f781"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-bold:before { + content: "\f032"; } + +.fa-bolt:before { + content: "\f0e7"; } + +.fa-bomb:before { + content: "\f1e2"; } + +.fa-bone:before { + content: "\f5d7"; } + +.fa-bong:before { + content: "\f55c"; } + +.fa-book:before { + content: "\f02d"; } + +.fa-book-dead:before { + content: "\f6b7"; } + +.fa-book-medical:before { + content: "\f7e6"; } + +.fa-book-open:before { + content: "\f518"; } + +.fa-book-reader:before { + content: "\f5da"; } + +.fa-bookmark:before { + content: "\f02e"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-border-all:before { + content: "\f84c"; } + +.fa-border-none:before { + content: "\f850"; } + +.fa-border-style:before { + content: "\f853"; } + +.fa-bowling-ball:before { + content: "\f436"; } + +.fa-box:before { + content: "\f466"; } + +.fa-box-open:before { + content: "\f49e"; } + +.fa-box-tissue:before { + content: "\e05b"; } + +.fa-boxes:before { + content: "\f468"; } + +.fa-braille:before { + content: "\f2a1"; } + +.fa-brain:before { + content: "\f5dc"; } + +.fa-bread-slice:before { + content: "\f7ec"; } + +.fa-briefcase:before { + content: "\f0b1"; } + +.fa-briefcase-medical:before { + content: "\f469"; } + +.fa-broadcast-tower:before { + content: "\f519"; } + +.fa-broom:before { + content: "\f51a"; } + +.fa-brush:before { + content: "\f55d"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-bug:before { + content: "\f188"; } + +.fa-building:before { + content: "\f1ad"; } + +.fa-bullhorn:before { + content: "\f0a1"; } + +.fa-bullseye:before { + content: "\f140"; } + +.fa-burn:before { + content: "\f46a"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-bus:before { + content: "\f207"; } + +.fa-bus-alt:before { + content: "\f55e"; } + +.fa-business-time:before { + content: "\f64a"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-calculator:before { + content: "\f1ec"; } + +.fa-calendar:before { + content: "\f133"; } + +.fa-calendar-alt:before { + content: "\f073"; } + +.fa-calendar-check:before { + content: "\f274"; } + +.fa-calendar-day:before { + content: "\f783"; } + +.fa-calendar-minus:before { + content: "\f272"; } + +.fa-calendar-plus:before { + content: "\f271"; } + +.fa-calendar-times:before { + content: "\f273"; } + +.fa-calendar-week:before { + content: "\f784"; } + +.fa-camera:before { + content: "\f030"; } + +.fa-camera-retro:before { + content: "\f083"; } + +.fa-campground:before { + content: "\f6bb"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-candy-cane:before { + content: "\f786"; } + +.fa-cannabis:before { + content: "\f55f"; } + +.fa-capsules:before { + content: "\f46b"; } + +.fa-car:before { + content: "\f1b9"; } + +.fa-car-alt:before { + content: "\f5de"; } + +.fa-car-battery:before { + content: "\f5df"; } + +.fa-car-crash:before { + content: "\f5e1"; } + +.fa-car-side:before { + content: "\f5e4"; } + +.fa-caravan:before { + content: "\f8ff"; } + +.fa-caret-down:before { + content: "\f0d7"; } + +.fa-caret-left:before { + content: "\f0d9"; } + +.fa-caret-right:before { + content: "\f0da"; } + +.fa-caret-square-down:before { + content: "\f150"; } + +.fa-caret-square-left:before { + content: "\f191"; } + +.fa-caret-square-right:before { + content: "\f152"; } + +.fa-caret-square-up:before { + content: "\f151"; } + +.fa-caret-up:before { + content: "\f0d8"; } + +.fa-carrot:before { + content: "\f787"; } + +.fa-cart-arrow-down:before { + content: "\f218"; } + +.fa-cart-plus:before { + content: "\f217"; } + +.fa-cash-register:before { + content: "\f788"; } + +.fa-cat:before { + content: "\f6be"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-certificate:before { + content: "\f0a3"; } + +.fa-chair:before { + content: "\f6c0"; } + +.fa-chalkboard:before { + content: "\f51b"; } + +.fa-chalkboard-teacher:before { + content: "\f51c"; } + +.fa-charging-station:before { + content: "\f5e7"; } + +.fa-chart-area:before { + content: "\f1fe"; } + +.fa-chart-bar:before { + content: "\f080"; } + +.fa-chart-line:before { + content: "\f201"; } + +.fa-chart-pie:before { + content: "\f200"; } + +.fa-check:before { + content: "\f00c"; } + +.fa-check-circle:before { + content: "\f058"; } + +.fa-check-double:before { + content: "\f560"; } + +.fa-check-square:before { + content: "\f14a"; } + +.fa-cheese:before { + content: "\f7ef"; } + +.fa-chess:before { + content: "\f439"; } + +.fa-chess-bishop:before { + content: "\f43a"; } + +.fa-chess-board:before { + content: "\f43c"; } + +.fa-chess-king:before { + content: "\f43f"; } + +.fa-chess-knight:before { + content: "\f441"; } + +.fa-chess-pawn:before { + content: "\f443"; } + +.fa-chess-queen:before { + content: "\f445"; } + +.fa-chess-rook:before { + content: "\f447"; } + +.fa-chevron-circle-down:before { + content: "\f13a"; } + +.fa-chevron-circle-left:before { + content: "\f137"; } + +.fa-chevron-circle-right:before { + content: "\f138"; } + +.fa-chevron-circle-up:before { + content: "\f139"; } + +.fa-chevron-down:before { + content: "\f078"; } + +.fa-chevron-left:before { + content: "\f053"; } + +.fa-chevron-right:before { + content: "\f054"; } + +.fa-chevron-up:before { + content: "\f077"; } + +.fa-child:before { + content: "\f1ae"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-church:before { + content: "\f51d"; } + +.fa-circle:before { + content: "\f111"; } + +.fa-circle-notch:before { + content: "\f1ce"; } + +.fa-city:before { + content: "\f64f"; } + +.fa-clinic-medical:before { + content: "\f7f2"; } + +.fa-clipboard:before { + content: "\f328"; } + +.fa-clipboard-check:before { + content: "\f46c"; } + +.fa-clipboard-list:before { + content: "\f46d"; } + +.fa-clock:before { + content: "\f017"; } + +.fa-clone:before { + content: "\f24d"; } + +.fa-closed-captioning:before { + content: "\f20a"; } + +.fa-cloud:before { + content: "\f0c2"; } + +.fa-cloud-download-alt:before { + content: "\f381"; } + +.fa-cloud-meatball:before { + content: "\f73b"; } + +.fa-cloud-moon:before { + content: "\f6c3"; } + +.fa-cloud-moon-rain:before { + content: "\f73c"; } + +.fa-cloud-rain:before { + content: "\f73d"; } + +.fa-cloud-showers-heavy:before { + content: "\f740"; } + +.fa-cloud-sun:before { + content: "\f6c4"; } + +.fa-cloud-sun-rain:before { + content: "\f743"; } + +.fa-cloud-upload-alt:before { + content: "\f382"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-cocktail:before { + content: "\f561"; } + +.fa-code:before { + content: "\f121"; } + +.fa-code-branch:before { + content: "\f126"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-coffee:before { + content: "\f0f4"; } + +.fa-cog:before { + content: "\f013"; } + +.fa-cogs:before { + content: "\f085"; } + +.fa-coins:before { + content: "\f51e"; } + +.fa-columns:before { + content: "\f0db"; } + +.fa-comment:before { + content: "\f075"; } + +.fa-comment-alt:before { + content: "\f27a"; } + +.fa-comment-dollar:before { + content: "\f651"; } + +.fa-comment-dots:before { + content: "\f4ad"; } + +.fa-comment-medical:before { + content: "\f7f5"; } + +.fa-comment-slash:before { + content: "\f4b3"; } + +.fa-comments:before { + content: "\f086"; } + +.fa-comments-dollar:before { + content: "\f653"; } + +.fa-compact-disc:before { + content: "\f51f"; } + +.fa-compass:before { + content: "\f14e"; } + +.fa-compress:before { + content: "\f066"; } + +.fa-compress-alt:before { + content: "\f422"; } + +.fa-compress-arrows-alt:before { + content: "\f78c"; } + +.fa-concierge-bell:before { + content: "\f562"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-cookie:before { + content: "\f563"; } + +.fa-cookie-bite:before { + content: "\f564"; } + +.fa-copy:before { + content: "\f0c5"; } + +.fa-copyright:before { + content: "\f1f9"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-couch:before { + content: "\f4b8"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-credit-card:before { + content: "\f09d"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-crop:before { + content: "\f125"; } + +.fa-crop-alt:before { + content: "\f565"; } + +.fa-cross:before { + content: "\f654"; } + +.fa-crosshairs:before { + content: "\f05b"; } + +.fa-crow:before { + content: "\f520"; } + +.fa-crown:before { + content: "\f521"; } + +.fa-crutch:before { + content: "\f7f7"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-cube:before { + content: "\f1b2"; } + +.fa-cubes:before { + content: "\f1b3"; } + +.fa-cut:before { + content: "\f0c4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-database:before { + content: "\f1c0"; } + +.fa-deaf:before { + content: "\f2a4"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-democrat:before { + content: "\f747"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-desktop:before { + content: "\f108"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-dharmachakra:before { + content: "\f655"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-diagnoses:before { + content: "\f470"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-dice:before { + content: "\f522"; } + +.fa-dice-d20:before { + content: "\f6cf"; } + +.fa-dice-d6:before { + content: "\f6d1"; } + +.fa-dice-five:before { + content: "\f523"; } + +.fa-dice-four:before { + content: "\f524"; } + +.fa-dice-one:before { + content: "\f525"; } + +.fa-dice-six:before { + content: "\f526"; } + +.fa-dice-three:before { + content: "\f527"; } + +.fa-dice-two:before { + content: "\f528"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-digital-tachograph:before { + content: "\f566"; } + +.fa-directions:before { + content: "\f5eb"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-disease:before { + content: "\f7fa"; } + +.fa-divide:before { + content: "\f529"; } + +.fa-dizzy:before { + content: "\f567"; } + +.fa-dna:before { + content: "\f471"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-dog:before { + content: "\f6d3"; } + +.fa-dollar-sign:before { + content: "\f155"; } + +.fa-dolly:before { + content: "\f472"; } + +.fa-dolly-flatbed:before { + content: "\f474"; } + +.fa-donate:before { + content: "\f4b9"; } + +.fa-door-closed:before { + content: "\f52a"; } + +.fa-door-open:before { + content: "\f52b"; } + +.fa-dot-circle:before { + content: "\f192"; } + +.fa-dove:before { + content: "\f4ba"; } + +.fa-download:before { + content: "\f019"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-drafting-compass:before { + content: "\f568"; } + +.fa-dragon:before { + content: "\f6d5"; } + +.fa-draw-polygon:before { + content: "\f5ee"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-drum:before { + content: "\f569"; } + +.fa-drum-steelpan:before { + content: "\f56a"; } + +.fa-drumstick-bite:before { + content: "\f6d7"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-dumbbell:before { + content: "\f44b"; } + +.fa-dumpster:before { + content: "\f793"; } + +.fa-dumpster-fire:before { + content: "\f794"; } + +.fa-dungeon:before { + content: "\f6d9"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-edit:before { + content: "\f044"; } + +.fa-egg:before { + content: "\f7fb"; } + +.fa-eject:before { + content: "\f052"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-ellipsis-h:before { + content: "\f141"; } + +.fa-ellipsis-v:before { + content: "\f142"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envelope:before { + content: "\f0e0"; } + +.fa-envelope-open:before { + content: "\f2b6"; } + +.fa-envelope-open-text:before { + content: "\f658"; } + +.fa-envelope-square:before { + content: "\f199"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-equals:before { + content: "\f52c"; } + +.fa-eraser:before { + content: "\f12d"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-ethernet:before { + content: "\f796"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-euro-sign:before { + content: "\f153"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-exchange-alt:before { + content: "\f362"; } + +.fa-exclamation:before { + content: "\f12a"; } + +.fa-exclamation-circle:before { + content: "\f06a"; } + +.fa-exclamation-triangle:before { + content: "\f071"; } + +.fa-expand:before { + content: "\f065"; } + +.fa-expand-alt:before { + content: "\f424"; } + +.fa-expand-arrows-alt:before { + content: "\f31e"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-external-link-alt:before { + content: "\f35d"; } + +.fa-external-link-square-alt:before { + content: "\f360"; } + +.fa-eye:before { + content: "\f06e"; } + +.fa-eye-dropper:before { + content: "\f1fb"; } + +.fa-eye-slash:before { + content: "\f070"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-fan:before { + content: "\f863"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-fast-backward:before { + content: "\f049"; } + +.fa-fast-forward:before { + content: "\f050"; } + +.fa-faucet:before { + content: "\e005"; } + +.fa-fax:before { + content: "\f1ac"; } + +.fa-feather:before { + content: "\f52d"; } + +.fa-feather-alt:before { + content: "\f56b"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-female:before { + content: "\f182"; } + +.fa-fighter-jet:before { + content: "\f0fb"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-file:before { + content: "\f15b"; } + +.fa-file-alt:before { + content: "\f15c"; } + +.fa-file-archive:before { + content: "\f1c6"; } + +.fa-file-audio:before { + content: "\f1c7"; } + +.fa-file-code:before { + content: "\f1c9"; } + +.fa-file-contract:before { + content: "\f56c"; } + +.fa-file-csv:before { + content: "\f6dd"; } + +.fa-file-download:before { + content: "\f56d"; } + +.fa-file-excel:before { + content: "\f1c3"; } + +.fa-file-export:before { + content: "\f56e"; } + +.fa-file-image:before { + content: "\f1c5"; } + +.fa-file-import:before { + content: "\f56f"; } + +.fa-file-invoice:before { + content: "\f570"; } + +.fa-file-invoice-dollar:before { + content: "\f571"; } + +.fa-file-medical:before { + content: "\f477"; } + +.fa-file-medical-alt:before { + content: "\f478"; } + +.fa-file-pdf:before { + content: "\f1c1"; } + +.fa-file-powerpoint:before { + content: "\f1c4"; } + +.fa-file-prescription:before { + content: "\f572"; } + +.fa-file-signature:before { + content: "\f573"; } + +.fa-file-upload:before { + content: "\f574"; } + +.fa-file-video:before { + content: "\f1c8"; } + +.fa-file-word:before { + content: "\f1c2"; } + +.fa-fill:before { + content: "\f575"; } + +.fa-fill-drip:before { + content: "\f576"; } + +.fa-film:before { + content: "\f008"; } + +.fa-filter:before { + content: "\f0b0"; } + +.fa-fingerprint:before { + content: "\f577"; } + +.fa-fire:before { + content: "\f06d"; } + +.fa-fire-alt:before { + content: "\f7e4"; } + +.fa-fire-extinguisher:before { + content: "\f134"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-first-aid:before { + content: "\f479"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-fish:before { + content: "\f578"; } + +.fa-fist-raised:before { + content: "\f6de"; } + +.fa-flag:before { + content: "\f024"; } + +.fa-flag-checkered:before { + content: "\f11e"; } + +.fa-flag-usa:before { + content: "\f74d"; } + +.fa-flask:before { + content: "\f0c3"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-flushed:before { + content: "\f579"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-folder:before { + content: "\f07b"; } + +.fa-folder-minus:before { + content: "\f65d"; } + +.fa-folder-open:before { + content: "\f07c"; } + +.fa-folder-plus:before { + content: "\f65e"; } + +.fa-font:before { + content: "\f031"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-font-awesome-flag:before { + content: "\f425"; } + +.fa-font-awesome-logo-full:before { + content: "\f4e6"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-football-ball:before { + content: "\f44e"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-forward:before { + content: "\f04e"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-frog:before { + content: "\f52e"; } + +.fa-frown:before { + content: "\f119"; } + +.fa-frown-open:before { + content: "\f57a"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-funnel-dollar:before { + content: "\f662"; } + +.fa-futbol:before { + content: "\f1e3"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-gamepad:before { + content: "\f11b"; } + +.fa-gas-pump:before { + content: "\f52f"; } + +.fa-gavel:before { + content: "\f0e3"; } + +.fa-gem:before { + content: "\f3a5"; } + +.fa-genderless:before { + content: "\f22d"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-ghost:before { + content: "\f6e2"; } + +.fa-gift:before { + content: "\f06b"; } + +.fa-gifts:before { + content: "\f79c"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-glass-cheers:before { + content: "\f79f"; } + +.fa-glass-martini:before { + content: "\f000"; } + +.fa-glass-martini-alt:before { + content: "\f57b"; } + +.fa-glass-whiskey:before { + content: "\f7a0"; } + +.fa-glasses:before { + content: "\f530"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-globe:before { + content: "\f0ac"; } + +.fa-globe-africa:before { + content: "\f57c"; } + +.fa-globe-americas:before { + content: "\f57d"; } + +.fa-globe-asia:before { + content: "\f57e"; } + +.fa-globe-europe:before { + content: "\f7a2"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-golf-ball:before { + content: "\f450"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-gopuram:before { + content: "\f664"; } + +.fa-graduation-cap:before { + content: "\f19d"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-greater-than:before { + content: "\f531"; } + +.fa-greater-than-equal:before { + content: "\f532"; } + +.fa-grimace:before { + content: "\f57f"; } + +.fa-grin:before { + content: "\f580"; } + +.fa-grin-alt:before { + content: "\f581"; } + +.fa-grin-beam:before { + content: "\f582"; } + +.fa-grin-beam-sweat:before { + content: "\f583"; } + +.fa-grin-hearts:before { + content: "\f584"; } + +.fa-grin-squint:before { + content: "\f585"; } + +.fa-grin-squint-tears:before { + content: "\f586"; } + +.fa-grin-stars:before { + content: "\f587"; } + +.fa-grin-tears:before { + content: "\f588"; } + +.fa-grin-tongue:before { + content: "\f589"; } + +.fa-grin-tongue-squint:before { + content: "\f58a"; } + +.fa-grin-tongue-wink:before { + content: "\f58b"; } + +.fa-grin-wink:before { + content: "\f58c"; } + +.fa-grip-horizontal:before { + content: "\f58d"; } + +.fa-grip-lines:before { + content: "\f7a4"; } + +.fa-grip-lines-vertical:before { + content: "\f7a5"; } + +.fa-grip-vertical:before { + content: "\f58e"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-guitar:before { + content: "\f7a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-h-square:before { + content: "\f0fd"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-hamburger:before { + content: "\f805"; } + +.fa-hammer:before { + content: "\f6e3"; } + +.fa-hamsa:before { + content: "\f665"; } + +.fa-hand-holding:before { + content: "\f4bd"; } + +.fa-hand-holding-heart:before { + content: "\f4be"; } + +.fa-hand-holding-medical:before { + content: "\e05c"; } + +.fa-hand-holding-usd:before { + content: "\f4c0"; } + +.fa-hand-holding-water:before { + content: "\f4c1"; } + +.fa-hand-lizard:before { + content: "\f258"; } + +.fa-hand-middle-finger:before { + content: "\f806"; } + +.fa-hand-paper:before { + content: "\f256"; } + +.fa-hand-peace:before { + content: "\f25b"; } + +.fa-hand-point-down:before { + content: "\f0a7"; } + +.fa-hand-point-left:before { + content: "\f0a5"; } + +.fa-hand-point-right:before { + content: "\f0a4"; } + +.fa-hand-point-up:before { + content: "\f0a6"; } + +.fa-hand-pointer:before { + content: "\f25a"; } + +.fa-hand-rock:before { + content: "\f255"; } + +.fa-hand-scissors:before { + content: "\f257"; } + +.fa-hand-sparkles:before { + content: "\e05d"; } + +.fa-hand-spock:before { + content: "\f259"; } + +.fa-hands:before { + content: "\f4c2"; } + +.fa-hands-helping:before { + content: "\f4c4"; } + +.fa-hands-wash:before { + content: "\e05e"; } + +.fa-handshake:before { + content: "\f2b5"; } + +.fa-handshake-alt-slash:before { + content: "\e05f"; } + +.fa-handshake-slash:before { + content: "\e060"; } + +.fa-hanukiah:before { + content: "\f6e6"; } + +.fa-hard-hat:before { + content: "\f807"; } + +.fa-hashtag:before { + content: "\f292"; } + +.fa-hat-cowboy:before { + content: "\f8c0"; } + +.fa-hat-cowboy-side:before { + content: "\f8c1"; } + +.fa-hat-wizard:before { + content: "\f6e8"; } + +.fa-hdd:before { + content: "\f0a0"; } + +.fa-head-side-cough:before { + content: "\e061"; } + +.fa-head-side-cough-slash:before { + content: "\e062"; } + +.fa-head-side-mask:before { + content: "\e063"; } + +.fa-head-side-virus:before { + content: "\e064"; } + +.fa-heading:before { + content: "\f1dc"; } + +.fa-headphones:before { + content: "\f025"; } + +.fa-headphones-alt:before { + content: "\f58f"; } + +.fa-headset:before { + content: "\f590"; } + +.fa-heart:before { + content: "\f004"; } + +.fa-heart-broken:before { + content: "\f7a9"; } + +.fa-heartbeat:before { + content: "\f21e"; } + +.fa-helicopter:before { + content: "\f533"; } + +.fa-highlighter:before { + content: "\f591"; } + +.fa-hiking:before { + content: "\f6ec"; } + +.fa-hippo:before { + content: "\f6ed"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-history:before { + content: "\f1da"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-hockey-puck:before { + content: "\f453"; } + +.fa-holly-berry:before { + content: "\f7aa"; } + +.fa-home:before { + content: "\f015"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-horse:before { + content: "\f6f0"; } + +.fa-horse-head:before { + content: "\f7ab"; } + +.fa-hospital:before { + content: "\f0f8"; } + +.fa-hospital-alt:before { + content: "\f47d"; } + +.fa-hospital-symbol:before { + content: "\f47e"; } + +.fa-hospital-user:before { + content: "\f80d"; } + +.fa-hot-tub:before { + content: "\f593"; } + +.fa-hotdog:before { + content: "\f80f"; } + +.fa-hotel:before { + content: "\f594"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-hourglass:before { + content: "\f254"; } + +.fa-hourglass-end:before { + content: "\f253"; } + +.fa-hourglass-half:before { + content: "\f252"; } + +.fa-hourglass-start:before { + content: "\f251"; } + +.fa-house-damage:before { + content: "\f6f1"; } + +.fa-house-user:before { + content: "\e065"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-hryvnia:before { + content: "\f6f2"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-i-cursor:before { + content: "\f246"; } + +.fa-ice-cream:before { + content: "\f810"; } + +.fa-icicles:before { + content: "\f7ad"; } + +.fa-icons:before { + content: "\f86d"; } + +.fa-id-badge:before { + content: "\f2c1"; } + +.fa-id-card:before { + content: "\f2c2"; } + +.fa-id-card-alt:before { + content: "\f47f"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-igloo:before { + content: "\f7ae"; } + +.fa-image:before { + content: "\f03e"; } + +.fa-images:before { + content: "\f302"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-inbox:before { + content: "\f01c"; } + +.fa-indent:before { + content: "\f03c"; } + +.fa-industry:before { + content: "\f275"; } + +.fa-infinity:before { + content: "\f534"; } + +.fa-info:before { + content: "\f129"; } + +.fa-info-circle:before { + content: "\f05a"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-italic:before { + content: "\f033"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-jedi:before { + content: "\f669"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-joint:before { + content: "\f595"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-journal-whills:before { + content: "\f66a"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-kaaba:before { + content: "\f66b"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-key:before { + content: "\f084"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-keyboard:before { + content: "\f11c"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-khanda:before { + content: "\f66d"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-kiss:before { + content: "\f596"; } + +.fa-kiss-beam:before { + content: "\f597"; } + +.fa-kiss-wink-heart:before { + content: "\f598"; } + +.fa-kiwi-bird:before { + content: "\f535"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-landmark:before { + content: "\f66f"; } + +.fa-language:before { + content: "\f1ab"; } + +.fa-laptop:before { + content: "\f109"; } + +.fa-laptop-code:before { + content: "\f5fc"; } + +.fa-laptop-house:before { + content: "\e066"; } + +.fa-laptop-medical:before { + content: "\f812"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-laugh:before { + content: "\f599"; } + +.fa-laugh-beam:before { + content: "\f59a"; } + +.fa-laugh-squint:before { + content: "\f59b"; } + +.fa-laugh-wink:before { + content: "\f59c"; } + +.fa-layer-group:before { + content: "\f5fd"; } + +.fa-leaf:before { + content: "\f06c"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-lemon:before { + content: "\f094"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-less-than:before { + content: "\f536"; } + +.fa-less-than-equal:before { + content: "\f537"; } + +.fa-level-down-alt:before { + content: "\f3be"; } + +.fa-level-up-alt:before { + content: "\f3bf"; } + +.fa-life-ring:before { + content: "\f1cd"; } + +.fa-lightbulb:before { + content: "\f0eb"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-link:before { + content: "\f0c1"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-lira-sign:before { + content: "\f195"; } + +.fa-list:before { + content: "\f03a"; } + +.fa-list-alt:before { + content: "\f022"; } + +.fa-list-ol:before { + content: "\f0cb"; } + +.fa-list-ul:before { + content: "\f0ca"; } + +.fa-location-arrow:before { + content: "\f124"; } + +.fa-lock:before { + content: "\f023"; } + +.fa-lock-open:before { + content: "\f3c1"; } + +.fa-long-arrow-alt-down:before { + content: "\f309"; } + +.fa-long-arrow-alt-left:before { + content: "\f30a"; } + +.fa-long-arrow-alt-right:before { + content: "\f30b"; } + +.fa-long-arrow-alt-up:before { + content: "\f30c"; } + +.fa-low-vision:before { + content: "\f2a8"; } + +.fa-luggage-cart:before { + content: "\f59d"; } + +.fa-lungs:before { + content: "\f604"; } + +.fa-lungs-virus:before { + content: "\e067"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-magic:before { + content: "\f0d0"; } + +.fa-magnet:before { + content: "\f076"; } + +.fa-mail-bulk:before { + content: "\f674"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-male:before { + content: "\f183"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-map:before { + content: "\f279"; } + +.fa-map-marked:before { + content: "\f59f"; } + +.fa-map-marked-alt:before { + content: "\f5a0"; } + +.fa-map-marker:before { + content: "\f041"; } + +.fa-map-marker-alt:before { + content: "\f3c5"; } + +.fa-map-pin:before { + content: "\f276"; } + +.fa-map-signs:before { + content: "\f277"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-marker:before { + content: "\f5a1"; } + +.fa-mars:before { + content: "\f222"; } + +.fa-mars-double:before { + content: "\f227"; } + +.fa-mars-stroke:before { + content: "\f229"; } + +.fa-mars-stroke-h:before { + content: "\f22b"; } + +.fa-mars-stroke-v:before { + content: "\f22a"; } + +.fa-mask:before { + content: "\f6fa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-medal:before { + content: "\f5a2"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f3c7"; } + +.fa-medkit:before { + content: "\f0fa"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-meh:before { + content: "\f11a"; } + +.fa-meh-blank:before { + content: "\f5a4"; } + +.fa-meh-rolling-eyes:before { + content: "\f5a5"; } + +.fa-memory:before { + content: "\f538"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-menorah:before { + content: "\f676"; } + +.fa-mercury:before { + content: "\f223"; } + +.fa-meteor:before { + content: "\f753"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-microchip:before { + content: "\f2db"; } + +.fa-microphone:before { + content: "\f130"; } + +.fa-microphone-alt:before { + content: "\f3c9"; } + +.fa-microphone-alt-slash:before { + content: "\f539"; } + +.fa-microphone-slash:before { + content: "\f131"; } + +.fa-microscope:before { + content: "\f610"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-minus:before { + content: "\f068"; } + +.fa-minus-circle:before { + content: "\f056"; } + +.fa-minus-square:before { + content: "\f146"; } + +.fa-mitten:before { + content: "\f7b5"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-mobile:before { + content: "\f10b"; } + +.fa-mobile-alt:before { + content: "\f3cd"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-money-bill:before { + content: "\f0d6"; } + +.fa-money-bill-alt:before { + content: "\f3d1"; } + +.fa-money-bill-wave:before { + content: "\f53a"; } + +.fa-money-bill-wave-alt:before { + content: "\f53b"; } + +.fa-money-check:before { + content: "\f53c"; } + +.fa-money-check-alt:before { + content: "\f53d"; } + +.fa-monument:before { + content: "\f5a6"; } + +.fa-moon:before { + content: "\f186"; } + +.fa-mortar-pestle:before { + content: "\f5a7"; } + +.fa-mosque:before { + content: "\f678"; } + +.fa-motorcycle:before { + content: "\f21c"; } + +.fa-mountain:before { + content: "\f6fc"; } + +.fa-mouse:before { + content: "\f8cc"; } + +.fa-mouse-pointer:before { + content: "\f245"; } + +.fa-mug-hot:before { + content: "\f7b6"; } + +.fa-music:before { + content: "\f001"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-network-wired:before { + content: "\f6ff"; } + +.fa-neuter:before { + content: "\f22c"; } + +.fa-newspaper:before { + content: "\f1ea"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-node:before { + content: "\f419"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-not-equal:before { + content: "\f53e"; } + +.fa-notes-medical:before { + content: "\f481"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-object-group:before { + content: "\f247"; } + +.fa-object-ungroup:before { + content: "\f248"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-oil-can:before { + content: "\f613"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-om:before { + content: "\f679"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-otter:before { + content: "\f700"; } + +.fa-outdent:before { + content: "\f03b"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-pager:before { + content: "\f815"; } + +.fa-paint-brush:before { + content: "\f1fc"; } + +.fa-paint-roller:before { + content: "\f5aa"; } + +.fa-palette:before { + content: "\f53f"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-pallet:before { + content: "\f482"; } + +.fa-paper-plane:before { + content: "\f1d8"; } + +.fa-paperclip:before { + content: "\f0c6"; } + +.fa-parachute-box:before { + content: "\f4cd"; } + +.fa-paragraph:before { + content: "\f1dd"; } + +.fa-parking:before { + content: "\f540"; } + +.fa-passport:before { + content: "\f5ab"; } + +.fa-pastafarianism:before { + content: "\f67b"; } + +.fa-paste:before { + content: "\f0ea"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-pause:before { + content: "\f04c"; } + +.fa-pause-circle:before { + content: "\f28b"; } + +.fa-paw:before { + content: "\f1b0"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-peace:before { + content: "\f67c"; } + +.fa-pen:before { + content: "\f304"; } + +.fa-pen-alt:before { + content: "\f305"; } + +.fa-pen-fancy:before { + content: "\f5ac"; } + +.fa-pen-nib:before { + content: "\f5ad"; } + +.fa-pen-square:before { + content: "\f14b"; } + +.fa-pencil-alt:before { + content: "\f303"; } + +.fa-pencil-ruler:before { + content: "\f5ae"; } + +.fa-penny-arcade:before { + content: "\f704"; } + +.fa-people-arrows:before { + content: "\e068"; } + +.fa-people-carry:before { + content: "\f4ce"; } + +.fa-pepper-hot:before { + content: "\f816"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-percent:before { + content: "\f295"; } + +.fa-percentage:before { + content: "\f541"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-person-booth:before { + content: "\f756"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-phone:before { + content: "\f095"; } + +.fa-phone-alt:before { + content: "\f879"; } + +.fa-phone-slash:before { + content: "\f3dd"; } + +.fa-phone-square:before { + content: "\f098"; } + +.fa-phone-square-alt:before { + content: "\f87b"; } + +.fa-phone-volume:before { + content: "\f2a0"; } + +.fa-photo-video:before { + content: "\f87c"; } + +.fa-php:before { + content: "\f457"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-piggy-bank:before { + content: "\f4d3"; } + +.fa-pills:before { + content: "\f484"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-pizza-slice:before { + content: "\f818"; } + +.fa-place-of-worship:before { + content: "\f67f"; } + +.fa-plane:before { + content: "\f072"; } + +.fa-plane-arrival:before { + content: "\f5af"; } + +.fa-plane-departure:before { + content: "\f5b0"; } + +.fa-plane-slash:before { + content: "\e069"; } + +.fa-play:before { + content: "\f04b"; } + +.fa-play-circle:before { + content: "\f144"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-plug:before { + content: "\f1e6"; } + +.fa-plus:before { + content: "\f067"; } + +.fa-plus-circle:before { + content: "\f055"; } + +.fa-plus-square:before { + content: "\f0fe"; } + +.fa-podcast:before { + content: "\f2ce"; } + +.fa-poll:before { + content: "\f681"; } + +.fa-poll-h:before { + content: "\f682"; } + +.fa-poo:before { + content: "\f2fe"; } + +.fa-poo-storm:before { + content: "\f75a"; } + +.fa-poop:before { + content: "\f619"; } + +.fa-portrait:before { + content: "\f3e0"; } + +.fa-pound-sign:before { + content: "\f154"; } + +.fa-power-off:before { + content: "\f011"; } + +.fa-pray:before { + content: "\f683"; } + +.fa-praying-hands:before { + content: "\f684"; } + +.fa-prescription:before { + content: "\f5b1"; } + +.fa-prescription-bottle:before { + content: "\f485"; } + +.fa-prescription-bottle-alt:before { + content: "\f486"; } + +.fa-print:before { + content: "\f02f"; } + +.fa-procedures:before { + content: "\f487"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-project-diagram:before { + content: "\f542"; } + +.fa-pump-medical:before { + content: "\e06a"; } + +.fa-pump-soap:before { + content: "\e06b"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-puzzle-piece:before { + content: "\f12e"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-qrcode:before { + content: "\f029"; } + +.fa-question:before { + content: "\f128"; } + +.fa-question-circle:before { + content: "\f059"; } + +.fa-quidditch:before { + content: "\f458"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-quote-left:before { + content: "\f10d"; } + +.fa-quote-right:before { + content: "\f10e"; } + +.fa-quran:before { + content: "\f687"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-radiation:before { + content: "\f7b9"; } + +.fa-radiation-alt:before { + content: "\f7ba"; } + +.fa-rainbow:before { + content: "\f75b"; } + +.fa-random:before { + content: "\f074"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-receipt:before { + content: "\f543"; } + +.fa-record-vinyl:before { + content: "\f8d9"; } + +.fa-recycle:before { + content: "\f1b8"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-redo:before { + content: "\f01e"; } + +.fa-redo-alt:before { + content: "\f2f9"; } + +.fa-registered:before { + content: "\f25d"; } + +.fa-remove-format:before { + content: "\f87d"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-reply:before { + content: "\f3e5"; } + +.fa-reply-all:before { + content: "\f122"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-republican:before { + content: "\f75e"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-restroom:before { + content: "\f7bd"; } + +.fa-retweet:before { + content: "\f079"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-ribbon:before { + content: "\f4d6"; } + +.fa-ring:before { + content: "\f70b"; } + +.fa-road:before { + content: "\f018"; } + +.fa-robot:before { + content: "\f544"; } + +.fa-rocket:before { + content: "\f135"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-route:before { + content: "\f4d7"; } + +.fa-rss:before { + content: "\f09e"; } + +.fa-rss-square:before { + content: "\f143"; } + +.fa-ruble-sign:before { + content: "\f158"; } + +.fa-ruler:before { + content: "\f545"; } + +.fa-ruler-combined:before { + content: "\f546"; } + +.fa-ruler-horizontal:before { + content: "\f547"; } + +.fa-ruler-vertical:before { + content: "\f548"; } + +.fa-running:before { + content: "\f70c"; } + +.fa-rupee-sign:before { + content: "\f156"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-sad-cry:before { + content: "\f5b3"; } + +.fa-sad-tear:before { + content: "\f5b4"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-satellite:before { + content: "\f7bf"; } + +.fa-satellite-dish:before { + content: "\f7c0"; } + +.fa-save:before { + content: "\f0c7"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-school:before { + content: "\f549"; } + +.fa-screwdriver:before { + content: "\f54a"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-scroll:before { + content: "\f70e"; } + +.fa-sd-card:before { + content: "\f7c2"; } + +.fa-search:before { + content: "\f002"; } + +.fa-search-dollar:before { + content: "\f688"; } + +.fa-search-location:before { + content: "\f689"; } + +.fa-search-minus:before { + content: "\f010"; } + +.fa-search-plus:before { + content: "\f00e"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-seedling:before { + content: "\f4d8"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-server:before { + content: "\f233"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-shapes:before { + content: "\f61f"; } + +.fa-share:before { + content: "\f064"; } + +.fa-share-alt:before { + content: "\f1e0"; } + +.fa-share-alt-square:before { + content: "\f1e1"; } + +.fa-share-square:before { + content: "\f14d"; } + +.fa-shekel-sign:before { + content: "\f20b"; } + +.fa-shield-alt:before { + content: "\f3ed"; } + +.fa-shield-virus:before { + content: "\e06c"; } + +.fa-ship:before { + content: "\f21a"; } + +.fa-shipping-fast:before { + content: "\f48b"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-shoe-prints:before { + content: "\f54b"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-shopping-bag:before { + content: "\f290"; } + +.fa-shopping-basket:before { + content: "\f291"; } + +.fa-shopping-cart:before { + content: "\f07a"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-shower:before { + content: "\f2cc"; } + +.fa-shuttle-van:before { + content: "\f5b6"; } + +.fa-sign:before { + content: "\f4d9"; } + +.fa-sign-in-alt:before { + content: "\f2f6"; } + +.fa-sign-language:before { + content: "\f2a7"; } + +.fa-sign-out-alt:before { + content: "\f2f5"; } + +.fa-signal:before { + content: "\f012"; } + +.fa-signature:before { + content: "\f5b7"; } + +.fa-sim-card:before { + content: "\f7c4"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-sink:before { + content: "\e06d"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-sitemap:before { + content: "\f0e8"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-skating:before { + content: "\f7c5"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-skiing:before { + content: "\f7c9"; } + +.fa-skiing-nordic:before { + content: "\f7ca"; } + +.fa-skull:before { + content: "\f54c"; } + +.fa-skull-crossbones:before { + content: "\f714"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f3ef"; } + +.fa-slash:before { + content: "\f715"; } + +.fa-sleigh:before { + content: "\f7cc"; } + +.fa-sliders-h:before { + content: "\f1de"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-smile:before { + content: "\f118"; } + +.fa-smile-beam:before { + content: "\f5b8"; } + +.fa-smile-wink:before { + content: "\f4da"; } + +.fa-smog:before { + content: "\f75f"; } + +.fa-smoking:before { + content: "\f48d"; } + +.fa-smoking-ban:before { + content: "\f54d"; } + +.fa-sms:before { + content: "\f7cd"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ac"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-snowboarding:before { + content: "\f7ce"; } + +.fa-snowflake:before { + content: "\f2dc"; } + +.fa-snowman:before { + content: "\f7d0"; } + +.fa-snowplow:before { + content: "\f7d2"; } + +.fa-soap:before { + content: "\e06e"; } + +.fa-socks:before { + content: "\f696"; } + +.fa-solar-panel:before { + content: "\f5ba"; } + +.fa-sort:before { + content: "\f0dc"; } + +.fa-sort-alpha-down:before { + content: "\f15d"; } + +.fa-sort-alpha-down-alt:before { + content: "\f881"; } + +.fa-sort-alpha-up:before { + content: "\f15e"; } + +.fa-sort-alpha-up-alt:before { + content: "\f882"; } + +.fa-sort-amount-down:before { + content: "\f160"; } + +.fa-sort-amount-down-alt:before { + content: "\f884"; } + +.fa-sort-amount-up:before { + content: "\f161"; } + +.fa-sort-amount-up-alt:before { + content: "\f885"; } + +.fa-sort-down:before { + content: "\f0dd"; } + +.fa-sort-numeric-down:before { + content: "\f162"; } + +.fa-sort-numeric-down-alt:before { + content: "\f886"; } + +.fa-sort-numeric-up:before { + content: "\f163"; } + +.fa-sort-numeric-up-alt:before { + content: "\f887"; } + +.fa-sort-up:before { + content: "\f0de"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-spa:before { + content: "\f5bb"; } + +.fa-space-shuttle:before { + content: "\f197"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-spell-check:before { + content: "\f891"; } + +.fa-spider:before { + content: "\f717"; } + +.fa-spinner:before { + content: "\f110"; } + +.fa-splotch:before { + content: "\f5bc"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-spray-can:before { + content: "\f5bd"; } + +.fa-square:before { + content: "\f0c8"; } + +.fa-square-full:before { + content: "\f45c"; } + +.fa-square-root-alt:before { + content: "\f698"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-stamp:before { + content: "\f5bf"; } + +.fa-star:before { + content: "\f005"; } + +.fa-star-and-crescent:before { + content: "\f699"; } + +.fa-star-half:before { + content: "\f089"; } + +.fa-star-half-alt:before { + content: "\f5c0"; } + +.fa-star-of-david:before { + content: "\f69a"; } + +.fa-star-of-life:before { + content: "\f621"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +.fa-step-backward:before { + content: "\f048"; } + +.fa-step-forward:before { + content: "\f051"; } + +.fa-stethoscope:before { + content: "\f0f1"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-sticky-note:before { + content: "\f249"; } + +.fa-stop:before { + content: "\f04d"; } + +.fa-stop-circle:before { + content: "\f28d"; } + +.fa-stopwatch:before { + content: "\f2f2"; } + +.fa-stopwatch-20:before { + content: "\e06f"; } + +.fa-store:before { + content: "\f54e"; } + +.fa-store-alt:before { + content: "\f54f"; } + +.fa-store-alt-slash:before { + content: "\e070"; } + +.fa-store-slash:before { + content: "\e071"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-stream:before { + content: "\f550"; } + +.fa-street-view:before { + content: "\f21d"; } + +.fa-strikethrough:before { + content: "\f0cc"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-stroopwafel:before { + content: "\f551"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-subscript:before { + content: "\f12c"; } + +.fa-subway:before { + content: "\f239"; } + +.fa-suitcase:before { + content: "\f0f2"; } + +.fa-suitcase-rolling:before { + content: "\f5c1"; } + +.fa-sun:before { + content: "\f185"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-superscript:before { + content: "\f12b"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-surprise:before { + content: "\f5c2"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-swatchbook:before { + content: "\f5c3"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-swimmer:before { + content: "\f5c4"; } + +.fa-swimming-pool:before { + content: "\f5c5"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-synagogue:before { + content: "\f69b"; } + +.fa-sync:before { + content: "\f021"; } + +.fa-sync-alt:before { + content: "\f2f1"; } + +.fa-syringe:before { + content: "\f48e"; } + +.fa-table:before { + content: "\f0ce"; } + +.fa-table-tennis:before { + content: "\f45d"; } + +.fa-tablet:before { + content: "\f10a"; } + +.fa-tablet-alt:before { + content: "\f3fa"; } + +.fa-tablets:before { + content: "\f490"; } + +.fa-tachometer-alt:before { + content: "\f3fd"; } + +.fa-tag:before { + content: "\f02b"; } + +.fa-tags:before { + content: "\f02c"; } + +.fa-tape:before { + content: "\f4db"; } + +.fa-tasks:before { + content: "\f0ae"; } + +.fa-taxi:before { + content: "\f1ba"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-teeth:before { + content: "\f62e"; } + +.fa-teeth-open:before { + content: "\f62f"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f3fe"; } + +.fa-temperature-high:before { + content: "\f769"; } + +.fa-temperature-low:before { + content: "\f76b"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-tenge:before { + content: "\f7d7"; } + +.fa-terminal:before { + content: "\f120"; } + +.fa-text-height:before { + content: "\f034"; } + +.fa-text-width:before { + content: "\f035"; } + +.fa-th:before { + content: "\f00a"; } + +.fa-th-large:before { + content: "\f009"; } + +.fa-th-list:before { + content: "\f00b"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-theater-masks:before { + content: "\f630"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-thermometer:before { + content: "\f491"; } + +.fa-thermometer-empty:before { + content: "\f2cb"; } + +.fa-thermometer-full:before { + content: "\f2c7"; } + +.fa-thermometer-half:before { + content: "\f2c9"; } + +.fa-thermometer-quarter:before { + content: "\f2ca"; } + +.fa-thermometer-three-quarters:before { + content: "\f2c8"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-thumbs-down:before { + content: "\f165"; } + +.fa-thumbs-up:before { + content: "\f164"; } + +.fa-thumbtack:before { + content: "\f08d"; } + +.fa-ticket-alt:before { + content: "\f3ff"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-times:before { + content: "\f00d"; } + +.fa-times-circle:before { + content: "\f057"; } + +.fa-tint:before { + content: "\f043"; } + +.fa-tint-slash:before { + content: "\f5c7"; } + +.fa-tired:before { + content: "\f5c8"; } + +.fa-toggle-off:before { + content: "\f204"; } + +.fa-toggle-on:before { + content: "\f205"; } + +.fa-toilet:before { + content: "\f7d8"; } + +.fa-toilet-paper:before { + content: "\f71e"; } + +.fa-toilet-paper-slash:before { + content: "\e072"; } + +.fa-toolbox:before { + content: "\f552"; } + +.fa-tools:before { + content: "\f7d9"; } + +.fa-tooth:before { + content: "\f5c9"; } + +.fa-torah:before { + content: "\f6a0"; } + +.fa-torii-gate:before { + content: "\f6a1"; } + +.fa-tractor:before { + content: "\f722"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-trademark:before { + content: "\f25c"; } + +.fa-traffic-light:before { + content: "\f637"; } + +.fa-trailer:before { + content: "\e041"; } + +.fa-train:before { + content: "\f238"; } + +.fa-tram:before { + content: "\f7da"; } + +.fa-transgender:before { + content: "\f224"; } + +.fa-transgender-alt:before { + content: "\f225"; } + +.fa-trash:before { + content: "\f1f8"; } + +.fa-trash-alt:before { + content: "\f2ed"; } + +.fa-trash-restore:before { + content: "\f829"; } + +.fa-trash-restore-alt:before { + content: "\f82a"; } + +.fa-tree:before { + content: "\f1bb"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-trophy:before { + content: "\f091"; } + +.fa-truck:before { + content: "\f0d1"; } + +.fa-truck-loading:before { + content: "\f4de"; } + +.fa-truck-monster:before { + content: "\f63b"; } + +.fa-truck-moving:before { + content: "\f4df"; } + +.fa-truck-pickup:before { + content: "\f63c"; } + +.fa-tshirt:before { + content: "\f553"; } + +.fa-tty:before { + content: "\f1e4"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-tv:before { + content: "\f26c"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-umbrella:before { + content: "\f0e9"; } + +.fa-umbrella-beach:before { + content: "\f5ca"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-underline:before { + content: "\f0cd"; } + +.fa-undo:before { + content: "\f0e2"; } + +.fa-undo-alt:before { + content: "\f2ea"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-universal-access:before { + content: "\f29a"; } + +.fa-university:before { + content: "\f19c"; } + +.fa-unlink:before { + content: "\f127"; } + +.fa-unlock:before { + content: "\f09c"; } + +.fa-unlock-alt:before { + content: "\f13e"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-upload:before { + content: "\f093"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-user:before { + content: "\f007"; } + +.fa-user-alt:before { + content: "\f406"; } + +.fa-user-alt-slash:before { + content: "\f4fa"; } + +.fa-user-astronaut:before { + content: "\f4fb"; } + +.fa-user-check:before { + content: "\f4fc"; } + +.fa-user-circle:before { + content: "\f2bd"; } + +.fa-user-clock:before { + content: "\f4fd"; } + +.fa-user-cog:before { + content: "\f4fe"; } + +.fa-user-edit:before { + content: "\f4ff"; } + +.fa-user-friends:before { + content: "\f500"; } + +.fa-user-graduate:before { + content: "\f501"; } + +.fa-user-injured:before { + content: "\f728"; } + +.fa-user-lock:before { + content: "\f502"; } + +.fa-user-md:before { + content: "\f0f0"; } + +.fa-user-minus:before { + content: "\f503"; } + +.fa-user-ninja:before { + content: "\f504"; } + +.fa-user-nurse:before { + content: "\f82f"; } + +.fa-user-plus:before { + content: "\f234"; } + +.fa-user-secret:before { + content: "\f21b"; } + +.fa-user-shield:before { + content: "\f505"; } + +.fa-user-slash:before { + content: "\f506"; } + +.fa-user-tag:before { + content: "\f507"; } + +.fa-user-tie:before { + content: "\f508"; } + +.fa-user-times:before { + content: "\f235"; } + +.fa-users:before { + content: "\f0c0"; } + +.fa-users-cog:before { + content: "\f509"; } + +.fa-users-slash:before { + content: "\e073"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-utensil-spoon:before { + content: "\f2e5"; } + +.fa-utensils:before { + content: "\f2e7"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-vector-square:before { + content: "\f5cb"; } + +.fa-venus:before { + content: "\f221"; } + +.fa-venus-double:before { + content: "\f226"; } + +.fa-venus-mars:before { + content: "\f228"; } + +.fa-vest:before { + content: "\e085"; } + +.fa-vest-patches:before { + content: "\e086"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-vial:before { + content: "\f492"; } + +.fa-vials:before { + content: "\f493"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-video:before { + content: "\f03d"; } + +.fa-video-slash:before { + content: "\f4e2"; } + +.fa-vihara:before { + content: "\f6a7"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-virus:before { + content: "\e074"; } + +.fa-virus-slash:before { + content: "\e075"; } + +.fa-viruses:before { + content: "\e076"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-voicemail:before { + content: "\f897"; } + +.fa-volleyball-ball:before { + content: "\f45f"; } + +.fa-volume-down:before { + content: "\f027"; } + +.fa-volume-mute:before { + content: "\f6a9"; } + +.fa-volume-off:before { + content: "\f026"; } + +.fa-volume-up:before { + content: "\f028"; } + +.fa-vote-yea:before { + content: "\f772"; } + +.fa-vr-cardboard:before { + content: "\f729"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-walking:before { + content: "\f554"; } + +.fa-wallet:before { + content: "\f555"; } + +.fa-warehouse:before { + content: "\f494"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-water:before { + content: "\f773"; } + +.fa-wave-square:before { + content: "\f83e"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-weight:before { + content: "\f496"; } + +.fa-weight-hanging:before { + content: "\f5cd"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-wheelchair:before { + content: "\f193"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-wifi:before { + content: "\f1eb"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wind:before { + content: "\f72e"; } + +.fa-window-close:before { + content: "\f410"; } + +.fa-window-maximize:before { + content: "\f2d0"; } + +.fa-window-minimize:before { + content: "\f2d1"; } + +.fa-window-restore:before { + content: "\f2d2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wine-bottle:before { + content: "\f72f"; } + +.fa-wine-glass:before { + content: "\f4e3"; } + +.fa-wine-glass-alt:before { + content: "\f5ce"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-won-sign:before { + content: "\f159"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-wrench:before { + content: "\f0ad"; } + +.fa-x-ray:before { + content: "\f497"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-yen-sign:before { + content: "\f157"; } + +.fa-yin-yang:before { + content: "\f6ad"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.eot"); + src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } + +.fab { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.eot"); + src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } + +.far { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.eot"); + src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } + +.fa, +.fas { + font-family: 'Font Awesome 5 Free'; + font-weight: 900; } \ No newline at end of file diff --git a/src/wwwroot/static/css/dashboard.css b/src/wwwroot/static/css/dashboard.css new file mode 100644 index 00000000..87a09cd6 --- /dev/null +++ b/src/wwwroot/static/css/dashboard.css @@ -0,0 +1,102 @@ +body { + font-size: .875rem; + } + + .feather { + width: 16px; + height: 16px; + vertical-align: text-bottom; + } + + /* + * Sidebar + */ + + .sidebar { + position: fixed; + top: 0; + /* rtl:raw: + right: 0; + */ + bottom: 0; + /* rtl:remove */ + left: 0; + z-index: 100; /* Behind the navbar */ + padding: 48px 0 0; /* Height of navbar */ + box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1); + } + + @media (max-width: 767.98px) { + .sidebar { + top: 5rem; + } + } + + .sidebar-sticky { + position: relative; + top: 0; + height: calc(100vh - 48px); + padding-top: .5rem; + overflow-x: hidden; + overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ + } + + .sidebar .nav-link { + font-weight: 500; + color: #333; + } + + .sidebar .nav-link .feather { + margin-right: 4px; + color: #727272; + } + + .sidebar .nav-link.active { + color: #2470dc; + } + + .sidebar .nav-link:hover .feather, + .sidebar .nav-link.active .feather { + color: inherit; + } + + .sidebar-heading { + font-size: .75rem; + text-transform: uppercase; + } + + /* + * Navbar + */ + + /* + .navbar-brand { + padding-top: .75rem; + padding-bottom: .75rem; + font-size: 1rem; + background-color: rgba(0, 0, 0, .25); + box-shadow: inset -1px 0 0 rgba(0, 0, 0, .25); + } + */ + + .navbar .navbar-toggler { + top: .25rem; + right: 1rem; + } + + .navbar .form-control { + padding: .75rem 1rem; + border-width: 0; + border-radius: 0; + } + + .form-control-dark { + color: #fff; + background-color: rgba(255, 255, 255, .1); + border-color: rgba(255, 255, 255, .1); + } + + .form-control-dark:focus { + border-color: transparent; + box-shadow: 0 0 0 3px rgba(255, 255, 255, .25); + } \ No newline at end of file diff --git a/src/wwwroot/static/data/dts_placeholders.json b/src/wwwroot/static/data/dts_placeholders.json new file mode 100644 index 00000000..41e7d533 --- /dev/null +++ b/src/wwwroot/static/data/dts_placeholders.json @@ -0,0 +1,1540 @@ +{ + "pokemon": [ + { + "placeholder": "pkmn_id", + "description": "Pokemon pokedex ID", + "example": "3", + "type": "Number" + }, + { + "placeholder": "pkmn_id_3", + "description": "Pokemon pokedex ID (always 3 digits)", + "example": "003", + "type": "String" + }, + { + "placeholder": "pkmn_name", + "description": "Pokemon name", + "example": "Venusaur", + "type": "String" + }, + { + "placeholder": "pkmn_img_url", + "description": "Pokemon Icon Image Url", + "example": "https://icons.com/i/pokemon/3.png", + "type": "String" + }, + { + "placeholder": "form", + "description": "Pokemon Form Name", + "example": "Alola", + "type": "String" + }, + { + "placeholder": "form_id", + "description": "Pokemon Form ID", + "example": "83", + "type": "Number" + }, + { + "placeholder": "form_id_3", + "description": "Pokemon Form ID (always 3 digits)", + "example": "083", + "type": "String" + }, + { + "placeholder": "costume", + "description": "Pokemon Costume Name", + "example": "Holiday", + "type": "String" + }, + { + "placeholder": "costume_id", + "description": "Pokemon Costume ID", + "example": "588", + "type": "Number" + }, + { + "placeholder": "costume_id_3", + "description": "Pokemon Costume ID (always 3 digits)", + "example": "588", + "type": "String" + }, + { + "placeholder": "cp", + "description": "Pokemon Combat Power", + "example": "1289", + "type": "Number" + }, + { + "placeholder": "lvl", + "description": "Pokemon Level", + "example": "32", + "type": "Number" + }, + { + "placeholder": "gender", + "description": "Pokemon Gender", + "example": "", + "type": "Char" + }, + { + "placeholder": "gender_emoji", + "description": "Pokemon Gender Emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "size", + "description": "Pokemon Size", + "example": "Large", + "type": "String" + }, + { + "placeholder": "move_1", + "description": "Pokemon Fast Move", + "example": "Quick Attack", + "type": "String" + }, + { + "placeholder": "move_2", + "description": "Pokemon Charge Move", + "example": "Thunder", + "type": "String" + }, + { + "placeholder": "moveset", + "description": "Pokemon Moveset", + "example": "Quick Attack/Thunder", + "type": "String" + }, + { + "placeholder": "type_1", + "description": "Pokemon Type 1", + "example": "", + "type": "String" + }, + { + "placeholder": "type_2", + "description": "Pokemon Type 2", + "example": "", + "type": "String" + }, + { + "placeholder": "type_1_emoji", + "description": "Pokemon Type 1 Emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "type_2_emoji", + "description": "Pokemon Type 2 Emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "types", + "description": "Pokemon Types", + "example": "", + "type": "String" + }, + { + "placeholder": "types_emoji", + "description": "Pokemon Types Emoji(s)", + "example": "", + "type": "String" + }, + { + "placeholder": "atk_iv", + "description": "Pokemon Attack IV Stat", + "example": "11", + "type": "Number" + }, + { + "placeholder": "def_iv", + "description": "Pokemon Defense IV Stat", + "example": "12", + "type": "Number" + }, + { + "placeholder": "sta_iv", + "description": "Pokemon Stamina IV Stat", + "example": "13", + "type": "Number" + }, + { + "placeholder": "iv", + "description": "Pokemon IVs", + "example": "95.6%", + "type": "String" + }, + { + "placeholder": "iv_rnd", + "description": "Pokemon IV Rounded", + "example": "96%", + "type": "String" + }, + { + "placeholder": "is_great", + "description": "Has Great League Rankings", + "example": true, + "type": "Boolean" + }, + { + "placeholder": "is_ultra", + "description": "Has Ultra League Rankings", + "example": false, + "type": "Boolean" + }, + { + "placeholder": "is_pvp", + "description": "Has Great or Ultra League Rankings", + "example": true, + "type": "Boolean" + }, + { + "placeholder": "great_league_emoji", + "description": "Great League Emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "ultra_league_emoji", + "description": "Ultra League Emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "pvp_stats", + "description": "PvP Rankings (formatted already)", + "example": "", + "type": "String" + }, + { + "placeholder": "height", + "description": "Pokemon Height", + "example": "", + "type": "Number" + }, + { + "placeholder": "weight", + "description": "Pokemon Weight", + "example": "", + "type": "Number" + }, + { + "placeholder": "is_ditto", + "description": "Is Pokemon Ditto", + "example": false, + "type": "Boolean" + }, + { + "placeholder": "original_pkmn_id", + "description": "", + "example": "", + "type": "Number" + }, + { + "placeholder": "original_pkmn_id_3", + "description": "", + "example": "", + "type": "String" + }, + { + "placeholder": "original_pkmn_name", + "description": "", + "example": "", + "type": "String" + }, + { + "placeholder": "is_weather_boosted", + "description": "Is Pokemon Weather Boosted", + "example": false, + "type": "Boolean" + }, + { + "placeholder": "has_weather", + "description": "Pokemon has weather set", + "example": true, + "type": "Boolean" + }, + { + "placeholder": "weather", + "description": "", + "example": "Sunny", + "type": "String" + }, + { + "placeholder": "weather_emoji", + "description": "Weather in-game emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "username", + "description": "Account username of account that found Pokemon", + "example": "Ted123", + "type": "String" + }, + { + "placeholder": "spawnpoint_id", + "description": "Spawnpoint ID Pokemon near", + "example": "", + "type": "String" + }, + { + "placeholder": "encounter_id", + "description": "Encounter ID of Pokemon", + "example": "", + "type": "String" + }, + { + "placeholder": "despawn_time", + "description": "Pokemon despawn time", + "example": "12:14:11 AM", + "type": "String" + }, + { + "placeholder": "despawn_time_24h", + "description": "Pokemon despawn time (24-hour format)", + "example": "15:48:02", + "type": "String" + }, + { + "placeholder": "despawn_time_verified", + "description": "Indicates if time is confirmed or not", + "example": "~", + "type": "String" + }, + { + "placeholder": "is_despawn_time_verified", + "description": "Returns if despawn time is verified", + "example": false, + "type": "Boolean" + }, + { + "placeholder": "time_left", + "description": "Minutes and seconds of time left until despawn", + "example": "28m, 15s left", + "type": "String" + }, + { + "placeholder": "geofence", + "description": "Geofence name Pokemon is in", + "example": "Area #1", + "type": "String" + }, + { + "placeholder": "address", + "description": "Google Maps or OSM Nominatim address of geocoordinates", + "example": "123 Fake Street, City1, County1", + "type": "String" + }, + { + "placeholder": "lat", + "description": "Latitude coordinate of Pokemon location", + "example": "3.141234567", + "type": "Number" + }, + { + "placeholder": "lng", + "description": "Longitude coordinate of Pokemon location", + "example": "-6.139103388", + "type": "Number" + }, + { + "placeholder": "lat_5", + "description": "Latitude coordinate shortend to 5th precision", + "example": "3.14123", + "type": "Number" + }, + { + "placeholder": "lng_5", + "description": "Longitude coordinate shortend to 5th precision", + "example": "-6.13910", + "type": "Number" + }, + { + "placeholder": "tilemaps_url", + "description": "Static tile map url", + "example": "", + "type": "String" + }, + { + "placeholder": "gmaps_url", + "description": "Google maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "applemaps_url", + "description": "Apple maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "wazemaps_url", + "description": "Waze maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "near_pokestop", + "description": "Returns if Pokemon is near a Pokestop", + "example": "", + "type": "Boolean" + }, + { + "placeholder": "pokestop_id", + "description": "Nearby Pokestop ID", + "example": "", + "type": "String" + }, + { + "placeholder": "pokestop_name", + "description": "Name of nearby Pokestop", + "example": "", + "type": "String" + }, + { + "placeholder": "pokestop_url", + "description": "Image url of nearby Pokestop", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_name", + "description": "Name of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_img_url", + "description": "Icon image url of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "date_time", + "description": "Current date and time", + "example": "12/12/2021 12:12:12 PM", + "type": "String" + }, + { + "placeholder": "br", + "description": "Newline break", + "example": "\r\n", + "type": "String" + } + ], + "raids": [ + { + "placeholder": "pkmn_id", + "description": "Raid boss pokedex ID", + "example": "1", + "type": "Number" + }, + { + "placeholder": "pkmn_id_3", + "description": "Raid boss pokedex ID (always 3 digits)", + "example": "001", + "type": "String" + }, + { + "placeholder": "pkmn_name", + "description": "Raid boss pokemon name", + "example": "Bulbasaur", + "type": "String" + }, + { + "placeholder": "pkmn_img_url", + "description": "Raid boss pokemon image url", + "example": "http://example.com/your-specified-pokemon-url", + "type": "String" + }, + { + "placeholder": "form", + "description": "Pokemon form name", + "example": "Alola", + "type": "String" + }, + { + "placeholder": "form_id", + "description": "Form ID", + "example": "65", + "type": "Number" + }, + { + "placeholder": "form_id_3", + "description": "Form ID (always 3 digits)", + "example": "065", + "type": "String" + }, + { + "placeholder": "costume", + "description": "Pokemon costume name", + "example": "Holiday", + "type": "String" + }, + { + "placeholder": "costume_id", + "description": "Costume ID", + "example": "10", + "type": "Number" + }, + { + "placeholder": "costume_id_3", + "description": "Costume ID (always 3 digits)", + "example": "010", + "type": "String" + }, + { + "placeholder": "is_egg", + "description": "Returns if raid is egg and not hatched", + "example": false, + "type": "Boolean" + }, + { + "placeholder": "is_ex", + "description": "Returns if raid is ex pass eligible", + "example": true, + "type": "Boolean" + }, + { + "placeholder": "ex_emoji", + "description": "Ex emoji icon", + "example": "Ex", + "type": "String" + }, + { + "placeholder": "team", + "description": "Team name that has gym control", + "example": "Valor", + "type": "String" + }, + { + "placeholder": "team_emoji", + "description": "Emoji of team that has gym control", + "example": "", + "type": "String" + }, + { + "placeholder": "cp", + "description": "Raid boss combat power value", + "example": "36150", + "type": "Number" + }, + { + "placeholder": "lvl", + "description": "Raid boss level", + "example": "5", + "type": "Number" + }, + { + "placeholder": "gender", + "description": "Pokemon gender", + "example": "Gender icon", + "type": "Char" + }, + { + "placeholder": "move_1", + "description": "Fast move name", + "example": "Quick Attack", + "type": "String" + }, + { + "placeholder": "move_2", + "description": "Charge move name", + "example": "Thunder", + "type": "String" + }, + { + "placeholder": "moveset", + "description": "Fast & Charge move names", + "example": "Quick Attack/Thunder", + "type": "String" + }, + { + "placeholder": "type_1", + "description": "Pokemon type", + "example": "Dark", + "type": "String" + }, + { + "placeholder": "type_2", + "description": "Pokemon type", + "example": "Water", + "type": "String" + }, + { + "placeholder": "type_1_emoji", + "description": "Pokemon type emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "type_2_emoji", + "description": "Pokemon type emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "types", + "description": "Both types (if 2nd exists)", + "example": "Dark/Fire", + "type": "String" + }, + { + "placeholder": "types_emoji", + "description": "Type Discord emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "weaknesses", + "description": "Raid boss weaknesses", + "example": "Rock, Ground, Dark", + "type": "String" + }, + { + "placeholder": "weaknesses_emoji", + "description": "Emoji(s) of raid boss weaknesses", + "example": "Rock Ground Dark", + "type": "String" + }, + { + "placeholder": "perfect_cp", + "description": "Perfect IV CP", + "example": "1831", + "type": "Number" + }, + { + "placeholder": "perfect_cp_boosted", + "description": "Perfect IV CP if Weather boosted", + "example": "2351", + "type": "Number" + }, + { + "placeholder": "worst_cp", + "description": "Worst IV CP", + "example": "1530", + "type": "Number" + }, + { + "placeholder": "worst_cp_boosted ", + "description": "Worst IV CP if Weather boosted", + "example": "1339", + "type": "Number" + }, + { + "placeholder": "start_time", + "description": "Raid start time", + "example": "08:32:00 AM", + "type": "String" + }, + { + "placeholder": "start_time_24h", + "description": "Raid start time (24-hour format)", + "example": "19:32:09", + "type": "String" + }, + { + "placeholder": "start_time_left", + "description": "Time left until raid starts", + "example": "43m, 33s", + "type": "String" + }, + { + "placeholder": "end_time", + "description": "Raid end time", + "example": "09:15:10 AM", + "type": "String" + }, + { + "placeholder": "end_time_24h", + "description": "Raid end time (24-hour format)", + "example": "13:15:10", + "type": "String" + }, + { + "placeholder": "end_time_left", + "description": "Time left until raid ends", + "example": "45m, 11s", + "type": "String" + }, + { + "placeholder": "time_left", + "description": "Minutes and seconds of time left until despawn", + "example": "29m, 30s", + "type": "String" + }, + { + "placeholder": "geofence", + "description": "Geofence name Gym is in", + "example": "Area #1", + "type": "String" + }, + { + "placeholder": "address", + "description": "Google Maps or OSM Nominatim address of geocoordinates", + "example": "123 Fake Street, City1, County1", + "type": "String" + }, + { + "placeholder": "lat", + "description": "Latitude coordinate of Gym location", + "example": "3.141234567", + "type": "Number" + }, + { + "placeholder": "lng", + "description": "Longitude coordinate of Gym location", + "example": "-6.139103388", + "type": "Number" + }, + { + "placeholder": "lat_5", + "description": "Latitude coordinate shortend to 5th precision", + "example": "3.14123", + "type": "Number" + }, + { + "placeholder": "lng_5", + "description": "Longitude coordinate shortend to 5th precision", + "example": "-6.13910", + "type": "Number" + }, + { + "placeholder": "tilemaps_url", + "description": "Static tile map url", + "example": "", + "type": "String" + }, + { + "placeholder": "gmaps_url", + "description": "Google maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "applemaps_url", + "description": "Apple maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "wazemaps_url", + "description": "Waze maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_name", + "description": "Name of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_img_url", + "description": "Icon image url of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "date_time", + "description": "Current date and time", + "example": "12/12/2021 12:12:12 PM", + "type": "String" + }, + { + "placeholder": "br", + "description": "Newline break", + "example": "\r\n", + "type": "String" + } + ], + "gyms": [ + { + "placeholder": "gym_id", + "description": "Gym ID", + "example": "", + "type": "String" + }, + { + "placeholder": "gym_name", + "description": "Name of Gym", + "example": "The Amazing Gym", + "type": "String" + }, + { + "placeholder": "gym_url", + "description": "Image url of Gym", + "example": "", + "type": "String" + }, + { + "placeholder": "gym_team", + "description": "Current team that has gym control", + "example": "Valor", + "type": "String" + }, + { + "placeholder": "gym_team_emoji", + "description": "Emoji icon of current team that has gym control", + "example": "", + "type": "String" + }, + { + "placeholder": "old_gym_team", + "description": "Previous gym team that had gym control", + "example": "", + "type": "String" + }, + { + "placeholder": "old_gym_team_emoji", + "description": "Emoji icon of previous gym team that has gym control", + "example": "", + "type": "String" + }, + { + "placeholder": "team_changed", + "description": "Returns if team's gym control changed", + "example": false, + "type": "Boolean" + }, + { + "placeholder": "in_battle", + "description": "Returns if there's a current battle at the gym taking place", + "example": false, + "type": "Boolean" + }, + { + "placeholder": "under_attack", + "description": "Returns if there's a current battle at the gym taking place", + "example": false, + "type": "Boolean" + }, + { + "placeholder": "is_ex", + "description": "Returns if the gym is an ex raid eligible location", + "example": true, + "type": "Boolean" + }, + { + "placeholder": "ex_emoji", + "description": "Ex emoji icon", + "example": "", + "type": "String" + }, + { + "placeholder": "slots_available", + "description": "Number of available gym slots", + "example": "", + "type": "Number" + }, + { + "placeholder": "geofence", + "description": "Geofence name Gym is in", + "example": "Area #1", + "type": "String" + }, + { + "placeholder": "address", + "description": "Google Maps or OSM Nominatim address of geocoordinates", + "example": "123 Fake Street, City1, County1", + "type": "String" + }, + { + "placeholder": "lat", + "description": "Latitude coordinate of Gym location", + "example": "3.141234567", + "type": "Number" + }, + { + "placeholder": "lng", + "description": "Longitude coordinate of Gym location", + "example": "-6.139103388", + "type": "Number" + }, + { + "placeholder": "lat_5", + "description": "Latitude coordinate shortend to 5th precision", + "example": "3.14123", + "type": "Number" + }, + { + "placeholder": "lng_5", + "description": "Longitude coordinate shortend to 5th precision", + "example": "-6.13910", + "type": "Number" + }, + { + "placeholder": "tilemaps_url", + "description": "Static tile map url", + "example": "", + "type": "String" + }, + { + "placeholder": "gmaps_url", + "description": "Google maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "applemaps_url", + "description": "Apple maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "wazemaps_url", + "description": "Waze maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_name", + "description": "Name of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_img_url", + "description": "Icon image url of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "date_time", + "description": "Current date and time", + "example": "12/12/2021 12:12:12 PM", + "type": "String" + }, + { + "placeholder": "br", + "description": "Newline break", + "example": "\r\n", + "type": "String" + } + ], + "pokestops": [ + { + "placeholder": "has_lure", + "description": "Returns if Pokestop has active lure module deployed", + "example": true, + "type": "Boolean" + }, + { + "placeholder": "lure_type", + "description": "Pokestop lure module type", + "example": "Glacial", + "type": "String" + }, + { + "placeholder": "lure_expire_time", + "description": "Time lure module will expire", + "example": "07:33:19 PM", + "type": "String" + }, + { + "placeholder": "lure_expire_time_24h", + "description": "Time lure module will expire (24-hour format)", + "example": "19:33:19", + "type": "String" + }, + { + "placeholder": "lure_expire_time_left", + "description": "Time left until lure module expires", + "example": "13m, 2s left", + "type": "String" + }, + { + "placeholder": "has_invasion", + "description": "Returns if Pokestop has active Team Rocket invasion", + "example": false, + "type": "Boolean" + }, + { + "placeholder": "grunt_type", + "description": "Grunt type", + "example": "Water", + "type": "String" + }, + { + "placeholder": "grunt_type_emoji", + "description": "Emoji icon of grunt type", + "example": "", + "type": "String" + }, + { + "placeholder": "grunt_gender", + "description": "Grunt gender", + "example": "Male", + "type": "String" + }, + { + "placeholder": "invasion_expire_time", + "description": "Time the invasion expires", + "example": "02:17:11 PM", + "type": "String" + }, + { + "placeholder": "invasion_expire_time_24h", + "description": "Time the invasion expires (24-hour format)", + "example": "14:17:11", + "type": "String" + }, + { + "placeholder": "invasion_expire_time_left", + "description": "Time left until invasion expires", + "example": "12m, 56s left", + "type": "String" + }, + { + "placeholder": "invasion_encounters", + "description": "Possible invasions reward encounters", + "example": "80% Bulbasaur", + "type": "Array" + }, + { + "placeholder": "geofence", + "description": "Geofence name Gym is in", + "example": "Area #1", + "type": "String" + }, + { + "placeholder": "address", + "description": "Google Maps or OSM Nominatim address of geocoordinates", + "example": "123 Fake Street, City1, County1", + "type": "String" + }, + { + "placeholder": "lat", + "description": "Latitude coordinate of Gym location", + "example": "3.141234567", + "type": "Number" + }, + { + "placeholder": "lng", + "description": "Longitude coordinate of Gym location", + "example": "-6.139103388", + "type": "Number" + }, + { + "placeholder": "lat_5", + "description": "Latitude coordinate shortend to 5th precision", + "example": "3.14123", + "type": "Number" + }, + { + "placeholder": "lng_5", + "description": "Longitude coordinate shortend to 5th precision", + "example": "-6.13910", + "type": "Number" + }, + { + "placeholder": "tilemaps_url", + "description": "Static tile map url", + "example": "", + "type": "String" + }, + { + "placeholder": "gmaps_url", + "description": "Google maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "applemaps_url", + "description": "Apple maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "wazemaps_url", + "description": "Waze maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_name", + "description": "Name of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_img_url", + "description": "Icon image url of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "date_time", + "description": "Current date and time", + "example": "12/12/2021 12:12:12 PM", + "type": "String" + }, + { + "placeholder": "br", + "description": "Newline break", + "example": "\r\n", + "type": "String" + } + ], + "quests": [ + { + "placeholder": "quest_task", + "description": "Quest task message", + "example": "Catch 5 Pokemon", + "type": "String" + }, + { + "placeholder": "quest_conditions", + "description": "Quest task conditions", + "example": "Dark", + "type": "String" + }, + { + "placeholder": "quest_reward", + "description": "Quest task reward", + "example": "Chansey", + "type": "String" + }, + { + "placeholder": "quest_reward_img_url", + "description": "Quest reward image url", + "example": "http://map.example.com/images/quest.png", + "type": "String" + }, + { + "placeholder": "has_quest_conditions", + "description": "Returns if the quest has conditions", + "example": true, + "type": "Boolean" + }, + { + "placeholder": "is_ditto", + "description": "Checks if Ditto", + "example": true, + "type": "Boolean" + }, + { + "placeholder": "is_shiny", + "description": "Checks if reward is shiny", + "example": false, + "type": "Boolean" + }, + { + "placeholder": "geofence", + "description": "Geofence name Pokemon is in", + "example": "Area #1", + "type": "String" + }, + { + "placeholder": "address", + "description": "Google Maps or OSM Nominatim address of geocoordinates", + "example": "123 Fake Street, City1, County1", + "type": "String" + }, + { + "placeholder": "lat", + "description": "Latitude coordinate of Pokemon location", + "example": "3.141234567", + "type": "Number" + }, + { + "placeholder": "lng", + "description": "Longitude coordinate of Pokemon location", + "example": "-6.139103388", + "type": "Number" + }, + { + "placeholder": "lat_5", + "description": "Latitude coordinate shortend to 5th precision", + "example": "3.14123", + "type": "Number" + }, + { + "placeholder": "lng_5", + "description": "Longitude coordinate shortend to 5th precision", + "example": "-6.13910", + "type": "Number" + }, + { + "placeholder": "tilemaps_url", + "description": "Static tile map url", + "example": "", + "type": "String" + }, + { + "placeholder": "gmaps_url", + "description": "Google maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "applemaps_url", + "description": "Apple maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "wazemaps_url", + "description": "Waze maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_name", + "description": "Name of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_img_url", + "description": "Icon image url of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "date_time", + "description": "Current date and time", + "example": "12/12/2021 12:12:12 PM", + "type": "String" + }, + { + "placeholder": "br", + "description": "Newline break", + "example": "\r\n", + "type": "String" + } + ], + "nests": [ + { + "placeholder": "pkmn_id", + "description": "Pokedex ID", + "example": "", + "type": "Number" + }, + { + "placeholder": "pkmn_id_3", + "description": "Pokedex ID (always 3 digits)", + "example": "004", + "type": "String" + }, + { + "placeholder": "pkmn_name", + "description": "Pokemon name", + "example": "Charmander", + "type": "String" + }, + { + "placeholder": "pkmn_img_url", + "description": "Pokemon image url", + "example": "", + "type": "String" + }, + { + "placeholder": "avg_spawns", + "description": "Average amount of spawns in the nest per hour", + "example": 4, + "type": "Number" + }, + { + "placeholder": "nest_name", + "description": "Nest/Park name", + "example": "Best Park Ever", + "type": "String" + }, + { + "placeholder": "type_1", + "description": "Pokemon type", + "example": "Dark", + "type": "String" + }, + { + "placeholder": "type_2", + "description": "Pokemon type", + "example": "Water", + "type": "String" + }, + { + "placeholder": "type_1_emoji", + "description": "Pokemon type emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "type_2_emoji", + "description": "Pokemon type emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "types", + "description": "Both types (if 2nd exists)", + "example": "Dark/Fire", + "type": "String" + }, + { + "placeholder": "types_emoji", + "description": "Type Discord emoji", + "example": "", + "type": "String" + }, + { + "placeholder": "geofence", + "description": "Geofence name Pokemon is in", + "example": "Area #1", + "type": "String" + }, + { + "placeholder": "address", + "description": "Google Maps or OSM Nominatim address of geocoordinates", + "example": "123 Fake Street, City1, County1", + "type": "String" + }, + { + "placeholder": "lat", + "description": "Latitude coordinate of Pokemon location", + "example": "3.141234567", + "type": "Number" + }, + { + "placeholder": "lng", + "description": "Longitude coordinate of Pokemon location", + "example": "-6.139103388", + "type": "Number" + }, + { + "placeholder": "lat_5", + "description": "Latitude coordinate shortend to 5th precision", + "example": "3.14123", + "type": "Number" + }, + { + "placeholder": "lng_5", + "description": "Longitude coordinate shortend to 5th precision", + "example": "-6.13910", + "type": "Number" + }, + { + "placeholder": "tilemaps_url", + "description": "Static tile map url", + "example": "", + "type": "String" + }, + { + "placeholder": "gmaps_url", + "description": "Google maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "applemaps_url", + "description": "Apple maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "wazemaps_url", + "description": "Waze maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_name", + "description": "Name of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_img_url", + "description": "Icon image url of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "date_time", + "description": "Current date and time", + "example": "12/12/2021 12:12:12 PM", + "type": "String" + }, + { + "placeholder": "br", + "description": "Newline break", + "example": "\r\n", + "type": "String" + } + ], + "weather": [ + { + "placeholder": "id", + "description": "S2Cell weather id", + "example": "-9938028402", + "type": "Number" + }, + { + "placeholder": "weather_condition", + "description": "In-game gameplay condition", + "example": "Cloudy", + "type": "String" + }, + { + "placeholder": "has_weather", + "description": "Returns if there is weather set", + "example": true, + "type": "Boolean" + }, + { + "placeholder": "weather", + "description": "In-game gameplay condition", + "example": "Cloudy", + "type": "String" + }, + { + "placeholder": "weather_img_url", + "description": "Weather type image url", + "example": "http://google.com/imgs/weather_1.png", + "type": "String" + }, + { + "placeholder": "wind_direction", + "description": "Wind blowing direction", + "example": true, + "type": "Boolean" + }, + { + "placeholder": "wind_level", + "description": "Wind level", + "example": "285", + "type": "Number" + }, + { + "placeholder": "rain_level", + "description": "Raid level", + "example": "285", + "type": "Number" + }, + { + "placeholder": "cloud_level", + "description": "Cloud level", + "example": "285", + "type": "Number" + }, + { + "placeholder": "fog_level", + "description": "Fog level", + "example": "285", + "type": "Number" + }, + { + "placeholder": "snow_level", + "description": "Snow level", + "example": "285", + "type": "Number" + }, + { + "placeholder": "warn_weather", + "description": "Warning weather", + "example": true, + "type": "Boolean" + }, + { + "placeholder": "special_effect_level", + "description": "Special effect level", + "example": "2", + "type": "Number" + }, + { + "placeholder": "severity", + "description": "Weather severity", + "example": "None/Moderate/Extreme", + "type": "String" + }, + { + "placeholder": "geofence", + "description": "Geofence name Pokemon is in", + "example": "Area #1", + "type": "String" + }, + { + "placeholder": "address", + "description": "Google Maps or OSM Nominatim address of geocoordinates", + "example": "123 Fake Street, City1, County1", + "type": "String" + }, + { + "placeholder": "lat", + "description": "Latitude coordinate of Pokemon location", + "example": "3.141234567", + "type": "Number" + }, + { + "placeholder": "lng", + "description": "Longitude coordinate of Pokemon location", + "example": "-6.139103388", + "type": "Number" + }, + { + "placeholder": "lat_5", + "description": "Latitude coordinate shortend to 5th precision", + "example": "3.14123", + "type": "Number" + }, + { + "placeholder": "lng_5", + "description": "Longitude coordinate shortend to 5th precision", + "example": "-6.13910", + "type": "Number" + }, + { + "placeholder": "tilemaps_url", + "description": "Static tile map url", + "example": "", + "type": "String" + }, + { + "placeholder": "gmaps_url", + "description": "Google maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "applemaps_url", + "description": "Apple maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "wazemaps_url", + "description": "Waze maps location url", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_name", + "description": "Name of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "guild_img_url", + "description": "Icon image url of Guild", + "example": "", + "type": "String" + }, + { + "placeholder": "date_time", + "description": "Current date and time", + "example": "12/12/2021 12:12:12 PM", + "type": "String" + }, + { + "placeholder": "br", + "description": "Newline break", + "example": "\r\n", + "type": "String" + } + ] +} \ No newline at end of file diff --git a/src/wwwroot/static/favicons/dotnet.png b/src/wwwroot/static/favicons/dotnet.png new file mode 100644 index 00000000..a67a76db Binary files /dev/null and b/src/wwwroot/static/favicons/dotnet.png differ diff --git a/src/wwwroot/static/webfonts/fa-brands-400.eot b/src/wwwroot/static/webfonts/fa-brands-400.eot new file mode 100644 index 00000000..cba6c6cc Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-brands-400.eot differ diff --git a/src/wwwroot/static/webfonts/fa-brands-400.svg b/src/wwwroot/static/webfonts/fa-brands-400.svg new file mode 100644 index 00000000..b9881a43 --- /dev/null +++ b/src/wwwroot/static/webfonts/fa-brands-400.svg @@ -0,0 +1,3717 @@ + + + + +Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/wwwroot/static/webfonts/fa-brands-400.ttf b/src/wwwroot/static/webfonts/fa-brands-400.ttf new file mode 100644 index 00000000..8d75dedd Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-brands-400.ttf differ diff --git a/src/wwwroot/static/webfonts/fa-brands-400.woff b/src/wwwroot/static/webfonts/fa-brands-400.woff new file mode 100644 index 00000000..3375bef0 Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-brands-400.woff differ diff --git a/src/wwwroot/static/webfonts/fa-brands-400.woff2 b/src/wwwroot/static/webfonts/fa-brands-400.woff2 new file mode 100644 index 00000000..402f81c0 Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-brands-400.woff2 differ diff --git a/src/wwwroot/static/webfonts/fa-regular-400.eot b/src/wwwroot/static/webfonts/fa-regular-400.eot new file mode 100644 index 00000000..a4e59893 Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-regular-400.eot differ diff --git a/src/wwwroot/static/webfonts/fa-regular-400.svg b/src/wwwroot/static/webfonts/fa-regular-400.svg new file mode 100644 index 00000000..463af27c --- /dev/null +++ b/src/wwwroot/static/webfonts/fa-regular-400.svg @@ -0,0 +1,801 @@ + + + + +Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/wwwroot/static/webfonts/fa-regular-400.ttf b/src/wwwroot/static/webfonts/fa-regular-400.ttf new file mode 100644 index 00000000..7157aafb Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-regular-400.ttf differ diff --git a/src/wwwroot/static/webfonts/fa-regular-400.woff b/src/wwwroot/static/webfonts/fa-regular-400.woff new file mode 100644 index 00000000..ad077c6b Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-regular-400.woff differ diff --git a/src/wwwroot/static/webfonts/fa-regular-400.woff2 b/src/wwwroot/static/webfonts/fa-regular-400.woff2 new file mode 100644 index 00000000..56328948 Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-regular-400.woff2 differ diff --git a/src/wwwroot/static/webfonts/fa-solid-900.eot b/src/wwwroot/static/webfonts/fa-solid-900.eot new file mode 100644 index 00000000..e9941719 Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-solid-900.eot differ diff --git a/src/wwwroot/static/webfonts/fa-solid-900.svg b/src/wwwroot/static/webfonts/fa-solid-900.svg new file mode 100644 index 00000000..00296e95 --- /dev/null +++ b/src/wwwroot/static/webfonts/fa-solid-900.svg @@ -0,0 +1,5034 @@ + + + + +Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/wwwroot/static/webfonts/fa-solid-900.ttf b/src/wwwroot/static/webfonts/fa-solid-900.ttf new file mode 100644 index 00000000..25abf389 Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-solid-900.ttf differ diff --git a/src/wwwroot/static/webfonts/fa-solid-900.woff b/src/wwwroot/static/webfonts/fa-solid-900.woff new file mode 100644 index 00000000..23ee6634 Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-solid-900.woff differ diff --git a/src/wwwroot/static/webfonts/fa-solid-900.woff2 b/src/wwwroot/static/webfonts/fa-solid-900.woff2 new file mode 100644 index 00000000..2217164f Binary files /dev/null and b/src/wwwroot/static/webfonts/fa-solid-900.woff2 differ diff --git a/static/app/db_version.txt b/static/app/db_version.txt deleted file mode 100644 index c2270834..00000000 --- a/static/app/db_version.txt +++ /dev/null @@ -1 +0,0 @@ -0 \ No newline at end of file diff --git a/static/data/cpMultipliers.json b/static/data/cpMultipliers.json index b713978e..d646f1c1 100644 --- a/static/data/cpMultipliers.json +++ b/static/data/cpMultipliers.json @@ -1,81 +1,111 @@ -{ - "1": 0.09399999678134918, - "1.5": 0.13513743132352830, - "2": 0.16639786958694458, - "2.5": 0.19265091419219970, - "3": 0.21573247015476227, - "3.5": 0.23657265305519104, - "4": 0.25572004914283750, - "4.5": 0.27353037893772125, - "5": 0.29024988412857056, - "5.5": 0.30605737864971160, - "6": 0.32108759880065920, - "6.5": 0.33544503152370453, - "7": 0.34921267628669740, - "7.5": 0.36245773732662200, - "8": 0.37523558735847473, - "8.5": 0.38759241108516856, - "9": 0.39956727623939514, - "9.5": 0.41119354951725060, - "10": 0.4225000143051148, - "10.5": 0.4329264134104144, - "11": 0.4431075453758240, - "11.5": 0.4530599538719858, - "12": 0.4627983868122100, - "12.5": 0.4723360780626535, - "13": 0.4816849529743195, - "13.5": 0.4908558102324605, - "14": 0.4998584389686584, - "14.5": 0.5087017565965652, - "15": 0.5173939466476440, - "15.5": 0.5259425118565559, - "16": 0.5343543291091919, - "16.5": 0.5426357612013817, - "17": 0.5507926940917969, - "17.5": 0.5588305993005633, - "18": 0.5667545199394226, - "18.5": 0.5745691470801830, - "19": 0.5822789072990417, - "19.5": 0.5898879119195044, - "20": 0.5974000096321106, - "20.5": 0.6048236563801765, - "21": 0.6121572852134705, - "21.5": 0.6194041110575199, - "22": 0.6265671253204346, - "22.5": 0.6336491815745830, - "23": 0.6406529545783997, - "23.5": 0.6475809663534164, - "24": 0.6544356346130370, - "24.5": 0.6612192690372467, - "25": 0.6679340004920960, - "25.5": 0.6745819002389908, - "26": 0.6811649203300476, - "26.5": 0.6876849085092545, - "27": 0.6941436529159546, - "27.5": 0.7005428969860077, - "28": 0.7068842053413391, - "28.5": 0.7131690979003906, - "29": 0.7193990945816040, - "29.5": 0.7255756109952927, - "30": 0.7317000031471252, - "30.5": 0.7347410172224045, - "31": 0.7377694845199585, - "31.5": 0.7407855764031410, - "32": 0.7437894344329834, - "32.5": 0.7467812150716782, - "33": 0.7497610449790955, - "33.5": 0.7527291029691696, - "34": 0.7556855082511902, - "34.5": 0.7586303651332855, - "35": 0.7615638375282288, - "35.5": 0.7644860669970512, - "36": 0.7673971652984619, - "36.5": 0.7702972739934921, - "37": 0.7731865048408508, - "37.5": 0.7760649472475052, - "38": 0.7789327502250671, - "38.5": 0.78179006, - "39": 0.78463697, - "39.5": 0.78747358, - "40": 0.79030001 +{ + "1": 0.09399999678134918, + "1.5": 0.13513743132352830, + "2": 0.16639786958694458, + "2.5": 0.19265091419219970, + "3": 0.21573247015476227, + "3.5": 0.23657265305519104, + "4": 0.25572004914283750, + "4.5": 0.27353037893772125, + "5": 0.29024988412857056, + "5.5": 0.30605737864971160, + "6": 0.32108759880065920, + "6.5": 0.33544503152370453, + "7": 0.34921267628669740, + "7.5": 0.36245773732662200, + "8": 0.37523558735847473, + "8.5": 0.38759241108516856, + "9": 0.39956727623939514, + "9.5": 0.41119354951725060, + "10": 0.4225000143051148, + "10.5": 0.4329264134104144, + "11": 0.4431075453758240, + "11.5": 0.4530599538719858, + "12": 0.4627983868122100, + "12.5": 0.4723360780626535, + "13": 0.4816849529743195, + "13.5": 0.4908558102324605, + "14": 0.4998584389686584, + "14.5": 0.5087017565965652, + "15": 0.5173939466476440, + "15.5": 0.5259425118565559, + "16": 0.5343543291091919, + "16.5": 0.5426357612013817, + "17": 0.5507926940917969, + "17.5": 0.5588305993005633, + "18": 0.5667545199394226, + "18.5": 0.5745691470801830, + "19": 0.5822789072990417, + "19.5": 0.5898879119195044, + "20": 0.5974000096321106, + "20.5": 0.6048236563801765, + "21": 0.6121572852134705, + "21.5": 0.6194041110575199, + "22": 0.6265671253204346, + "22.5": 0.6336491815745830, + "23": 0.6406529545783997, + "23.5": 0.6475809663534164, + "24": 0.6544356346130370, + "24.5": 0.6612192690372467, + "25": 0.6679340004920960, + "25.5": 0.6745819002389908, + "26": 0.6811649203300476, + "26.5": 0.6876849085092545, + "27": 0.6941436529159546, + "27.5": 0.7005428969860077, + "28": 0.7068842053413391, + "28.5": 0.7131690979003906, + "29": 0.7193990945816040, + "29.5": 0.7255756109952927, + "30": 0.7317000031471252, + "30.5": 0.7347410172224045, + "31": 0.7377694845199585, + "31.5": 0.7407855764031410, + "32": 0.7437894344329834, + "32.5": 0.7467812150716782, + "33": 0.7497610449790955, + "33.5": 0.7527291029691696, + "34": 0.7556855082511902, + "34.5": 0.7586303651332855, + "35": 0.7615638375282288, + "35.5": 0.7644860669970512, + "36": 0.7673971652984619, + "36.5": 0.7702972739934921, + "37": 0.7731865048408508, + "37.5": 0.7760649472475052, + "38": 0.7789327502250671, + "38.5": 0.78179006, + "39": 0.78463697, + "39.5": 0.78747358, + "40": 0.79030001, + "40.5": 0.792803950958808, + "41": 0.795300006866455, + "41.5": 0.797803921486970, + "42": 0.800300002098084, + "42.5": 0.802803892322847, + "43": 0.805299997329712, + "43.5": 0.807803863460723, + "44": 0.810299992561340, + "44.5": 0.812803834895027, + "45": 0.815299987792969, + "45.5": 0.817803806620319, + "46": 0.820299983024597, + "46.5": 0.822803778631297, + "47": 0.825299978256226, + "47.5": 0.827803750922783, + "48": 0.830299973487854, + "48.5": 0.832803753381377, + "49": 0.835300028324127, + "49.5": 0.837803755931570, + "50": 0.840300023555756, + "50.5": 0.842803729034748, + "51": 0.845300018787384, + "51.5": 0.847803702398935, + "52": 0.850300014019012, + "52.5": 0.852803676019539, + "53": 0.855300009250641, + "53.5": 0.857803649892077, + "54": 0.860300004482269, + "54.5": 0.862803624012169, + "55": 0.865299999713897 } \ No newline at end of file diff --git a/static/data/defaults.json b/static/data/defaults.json new file mode 100644 index 00000000..3a99bea6 --- /dev/null +++ b/static/data/defaults.json @@ -0,0 +1,129 @@ +{ + "min_iv": 0, + "max_iv": 100, + "min_lvl": 0, + "max_lvl": 35, + "min_cp": 0, + "max_cp": 99999, + "pvp": { + "little": { + "min_rank": 1, + "max_rank": 25, + "min_percent": 90, + "max_percent": 100, + "min_league_cp": 450, + "max_league_cp": 500, + }, + "great": { + "min_rank": 1, + "max_rank": 25, + "min_percent": 90, + "max_percent": 100, + "min_league_cp": 1400, + "max_league_cp": 1500, + }, + "ultra": { + "min_rank": 1, + "max_rank": 25, + "min_percent": 90, + "max_percent": 100, + "min_league_cp": 2400, + "max_league_cp": 2500, + } + }, + "max_queue_batch_size": 25, + "max_queue_size_warning": 50, + "max_queue_capacity": 4096, + "all": "All", + "emoji_schema": "<:{0}:{1}>", + "type_emoji_schema": "<:types_{0}:{1}>", + "pokemon_generation_ranges": { + "1": { + "gen": 1, + "start": 1, + "end": 151 + }, + "2": { + "gen": 2, + "start": 152, + "end": 251 + }, + "3": { + "gen": 3, + "start": 252, + "end": 385 + }, + "4": { + "gen": 4, + "start": 386, + "end": 493 + }, + "5": { + "gen": 5, + "start": 494, + "end": 649 + }, + "6": { + "gen": 6, + "start": 650, + "end": 721 + }, + "7": { + "gen": 7, + "start": 722, + "end": 809 + }, + "8": { + "gen": 8, + "start": 810, + "end": 890 + } + }, + "emoji_list": [ + "neutral", + "valor", + "mystic", + "instinct", + + "capture_1", + "capture_2", + "capture_3", + + "weather_1", // Clear + "weather_2", // Rain + "weather_3", // PartlyCloudy/Overcast + "weather_4", // Cloudy + "weather_5", // Windy + "weather_6", // Snow + "weather_7", // Fog + + "ar", + "ex", + + "types_fire", + "types_grass", + "types_ground", + "types_rock", + "types_water", + "types_ghost", + "types_ice", + "types_dragon", + "types_fairy", + "types_fighting", + "types_bug", + "types_psychic", + "types_electric", + "types_steel", + "types_dark", + "types_normal", + "types_flying", + "types_poison", + + "league_great", + "league_ultra", + + "gender_male", + "gender_female", + "gender_less" + ] +} diff --git a/static/data/embedColors.json b/static/data/embedColors.json index 09975464..f6eca5d5 100644 --- a/static/data/embedColors.json +++ b/static/data/embedColors.json @@ -27,7 +27,8 @@ "normal": "#ff69b4", "glacial": "#6495ed", "mossy": "#507d2a", - "magnetic": "#808080" + "magnetic": "#808080", + "rainy": "#1da7de" }, "invasions": "#ff0000" }, diff --git a/static/data/emojis.json b/static/data/emojis.json index 33ba4736..398ac5ef 100644 --- a/static/data/emojis.json +++ b/static/data/emojis.json @@ -4,6 +4,7 @@ "capture_2": "", "capture_3": "", "ex": "", + "ar": "", "gender_female": "", "gender_less": "", "gender_male": "", diff --git a/static/data/masterfile.json b/static/data/masterfile.json index 06df80cb..6d18cebb 100644 --- a/static/data/masterfile.json +++ b/static/data/masterfile.json @@ -1,43799 +1,50366 @@ { - "pokemon": { - "1": { - "name": "Bulbasaur", - "forms": { - "163": { - "name": "Normal", - "proto": "BULBASAUR_NORMAL", - "evolutions": [ - { - "pokemon": 2, - "form": 166 - } - ] - }, - "164": { - "name": "Shadow", - "proto": "BULBASAUR_SHADOW", - "evolutions": [ - { - "pokemon": 2, - "form": 167 - } - ] - }, - "165": { - "name": "Purified", - "proto": "BULBASAUR_PURIFIED", - "evolutions": [ - { - "pokemon": 2, - "form": 168 - } - ] - }, - "897": { - "name": "Fall 2019", - "proto": "BULBASAUR_FALL_2019" - } - }, - "default_form_id": 163, - "pokedex_id": 1, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass", - "Poison" - ], - "attack": 118, - "defense": 111, - "stamina": 128, - "height": 0.7, - "weight": 6.9, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Vine Whip", - "Tackle" - ], - "charged_moves": [ - "Sludge Bomb", - "Seed Bomb", - "Power Whip" - ], - "evolutions": [ - { - "pokemon": 2, - "form": 166 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "2": { - "name": "Ivysaur", - "forms": { - "166": { - "name": "Normal", - "proto": "IVYSAUR_NORMAL", - "evolutions": [ - { - "pokemon": 3, - "form": 169 - } - ] - }, - "167": { - "name": "Shadow", - "proto": "IVYSAUR_SHADOW", - "evolutions": [ - { - "pokemon": 3, - "form": 170 - } - ] - }, - "168": { - "name": "Purified", - "proto": "IVYSAUR_PURIFIED", - "evolutions": [ - { - "pokemon": 3, - "form": 171 - } - ] - } - }, - "default_form_id": 166, - "pokedex_id": 2, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass", - "Poison" - ], - "attack": 151, - "defense": 143, - "stamina": 155, - "height": 1, - "weight": 13, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Razor Leaf", - "Vine Whip" - ], - "charged_moves": [ - "Sludge Bomb", - "Solar Beam", - "Power Whip" - ], - "evolutions": [ - { - "pokemon": 3, - "form": 169 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "3": { - "name": "Venusaur", - "forms": { - "169": { - "name": "Normal", - "proto": "VENUSAUR_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "170": { - "name": "Shadow", - "proto": "VENUSAUR_SHADOW" - }, - "171": { - "name": "Purified", - "proto": "VENUSAUR_PURIFIED", - "temp_evolutions": { - "1": {} - } - }, - "950": { - "name": "Copy 2019", - "proto": "VENUSAUR_COPY_2019" - } - }, - "default_form_id": 169, - "pokedex_id": 3, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass", - "Poison" - ], - "attack": 198, - "defense": 189, - "stamina": 190, - "height": 2, - "weight": 100, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Razor Leaf", - "Vine Whip" - ], - "charged_moves": [ - "Sludge Bomb", - "Petal Blizzard", - "Solar Beam" - ], - "temp_evolutions": { - "1": { - "attack": 241, - "defense": 246, - "stamina": 190, - "height": 2.4, - "weight": 155.5 - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "4": { - "name": "Charmander", - "forms": { - "172": { - "name": "Normal", - "proto": "CHARMANDER_NORMAL", - "evolutions": [ - { - "pokemon": 5, - "form": 175 - } - ] - }, - "173": { - "name": "Shadow", - "proto": "CHARMANDER_SHADOW", - "evolutions": [ - { - "pokemon": 5, - "form": 176 - } - ] - }, - "174": { - "name": "Purified", - "proto": "CHARMANDER_PURIFIED", - "evolutions": [ - { - "pokemon": 5, - "form": 177 - } - ] - }, - "896": { - "name": "Fall 2019", - "proto": "CHARMANDER_FALL_2019" - } - }, - "default_form_id": 172, - "pokedex_id": 4, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire" - ], - "attack": 116, - "defense": 93, - "stamina": 118, - "height": 0.6, - "weight": 8.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Ember", - "Scratch" - ], - "charged_moves": [ - "Flame Charge", - "Flame Burst", - "Flamethrower" - ], - "evolutions": [ - { - "pokemon": 5, - "form": 175 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "5": { - "name": "Charmeleon", - "forms": { - "175": { - "name": "Normal", - "proto": "CHARMELEON_NORMAL", - "evolutions": [ - { - "pokemon": 6, - "form": 178 - } - ] - }, - "176": { - "name": "Shadow", - "proto": "CHARMELEON_SHADOW", - "evolutions": [ - { - "pokemon": 6, - "form": 179 - } - ] - }, - "177": { - "name": "Purified", - "proto": "CHARMELEON_PURIFIED", - "evolutions": [ - { - "pokemon": 6, - "form": 180 - } - ] - } - }, - "default_form_id": 175, - "pokedex_id": 5, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire" - ], - "attack": 158, - "defense": 126, - "stamina": 151, - "height": 1.1, - "weight": 19, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Ember", - "Fire Fang" - ], - "charged_moves": [ - "Fire Punch", - "Flame Burst", - "Flamethrower" - ], - "evolutions": [ - { - "pokemon": 6, - "form": 178 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "6": { - "name": "Charizard", - "forms": { - "178": { - "name": "Normal", - "proto": "CHARIZARD_NORMAL", - "temp_evolutions": { - "2": {}, - "3": {} - } - }, - "179": { - "name": "Shadow", - "proto": "CHARIZARD_SHADOW" - }, - "180": { - "name": "Purified", - "proto": "CHARIZARD_PURIFIED", - "temp_evolutions": { - "2": {}, - "3": {} - } - }, - "951": { - "name": "Copy 2019", - "proto": "CHARIZARD_COPY_2019" - } - }, - "default_form_id": 178, - "pokedex_id": 6, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire", - "Flying" - ], - "attack": 223, - "defense": 173, - "stamina": 186, - "height": 1.7, - "weight": 90.5, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Fire Spin", - "Air Slash" - ], - "charged_moves": [ - "Fire Blast", - "Dragon Claw", - "Overheat" - ], - "temp_evolutions": { - "2": { - "attack": 273, - "defense": 213, - "stamina": 186, - "weight": 110.5, - "types": [ - "Fire", - "Dragon" - ] - }, - "3": { - "attack": 319, - "defense": 212, - "stamina": 186, - "weight": 100.5 - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "7": { - "name": "Squirtle", - "forms": { - "181": { - "name": "Normal", - "proto": "SQUIRTLE_NORMAL", - "evolutions": [ - { - "pokemon": 8, - "form": 184 - } - ] - }, - "182": { - "name": "Shadow", - "proto": "SQUIRTLE_SHADOW", - "evolutions": [ - { - "pokemon": 8, - "form": 185 - } - ] - }, - "183": { - "name": "Purified", - "proto": "SQUIRTLE_PURIFIED", - "evolutions": [ - { - "pokemon": 8, - "form": 186 - } - ] - }, - "895": { - "name": "Fall 2019", - "proto": "SQUIRTLE_FALL_2019" - } - }, - "default_form_id": 181, - "pokedex_id": 7, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 94, - "defense": 121, - "stamina": 127, - "height": 0.5, - "weight": 9, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Bubble", - "Tackle" - ], - "charged_moves": [ - "Aqua Jet", - "Aqua Tail", - "Water Pulse" - ], - "evolutions": [ - { - "pokemon": 8, - "form": 184 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "8": { - "name": "Wartortle", - "forms": { - "184": { - "name": "Normal", - "proto": "WARTORTLE_NORMAL", - "evolutions": [ - { - "pokemon": 9, - "form": 187 - } - ] - }, - "185": { - "name": "Shadow", - "proto": "WARTORTLE_SHADOW", - "evolutions": [ - { - "pokemon": 9, - "form": 188 - } - ] - }, - "186": { - "name": "Purified", - "proto": "WARTORTLE_PURIFIED", - "evolutions": [ - { - "pokemon": 9, - "form": 189 - } - ] - } - }, - "default_form_id": 184, - "pokedex_id": 8, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 126, - "defense": 155, - "stamina": 153, - "height": 1, - "weight": 22.5, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Water Gun", - "Bite" - ], - "charged_moves": [ - "Aqua Jet", - "Ice Beam", - "Hydro Pump" - ], - "evolutions": [ - { - "pokemon": 9, - "form": 187 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "9": { - "name": "Blastoise", - "forms": { - "187": { - "name": "Normal", - "proto": "BLASTOISE_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "188": { - "name": "Shadow", - "proto": "BLASTOISE_SHADOW" - }, - "189": { - "name": "Purified", - "proto": "BLASTOISE_PURIFIED", - "temp_evolutions": { - "1": {} - } - }, - "952": { - "name": "Copy 2019", - "proto": "BLASTOISE_COPY_2019" - } - }, - "default_form_id": 187, - "pokedex_id": 9, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 171, - "defense": 207, - "stamina": 188, - "height": 1.6, - "weight": 85.5, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Water Gun", - "Bite" - ], - "charged_moves": [ - "Flash Cannon", - "Ice Beam", - "Hydro Pump", - "Skull Bash" - ], - "temp_evolutions": { - "1": { - "attack": 264, - "defense": 237, - "stamina": 188, - "weight": 101.1 - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "10": { - "name": "Caterpie", - "forms": { - "953": { - "name": "Normal", - "proto": "CATERPIE_NORMAL" - }, - "954": { - "name": "Shadow", - "proto": "CATERPIE_SHADOW" - }, - "955": { - "name": "Purified", - "proto": "CATERPIE_PURIFIED" - } - }, - "default_form_id": 953, - "pokedex_id": 10, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug" - ], - "attack": 55, - "defense": 55, - "stamina": 128, - "height": 0.3, - "weight": 2.9, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Bug Bite", - "Tackle" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 11 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "11": { - "name": "Metapod", - "forms": { - "956": { - "name": "Normal", - "proto": "METAPOD_NORMAL" - }, - "957": { - "name": "Shadow", - "proto": "METAPOD_SHADOW" - }, - "958": { - "name": "Purified", - "proto": "METAPOD_PURIFIED" - } - }, - "default_form_id": 956, - "pokedex_id": 11, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug" - ], - "attack": 45, - "defense": 80, - "stamina": 137, - "height": 0.7, - "weight": 9.9, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Bug Bite", - "Tackle" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 12 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "12": { - "name": "Butterfree", - "forms": { - "959": { - "name": "Normal", - "proto": "BUTTERFREE_NORMAL" - }, - "960": { - "name": "Shadow", - "proto": "BUTTERFREE_SHADOW" - }, - "961": { - "name": "Purified", - "proto": "BUTTERFREE_PURIFIED" - } - }, - "default_form_id": 959, - "pokedex_id": 12, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug", - "Flying" - ], - "attack": 167, - "defense": 137, - "stamina": 155, - "height": 1.1, - "weight": 32, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Struggle Bug", - "Confusion" - ], - "charged_moves": [ - "Bug Buzz", - "Psychic", - "Signal Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "13": { - "name": "Weedle", - "forms": { - "616": { - "name": "Normal", - "proto": "WEEDLE_NORMAL", - "evolutions": [ - { - "pokemon": 14, - "form": 619 - } - ] - }, - "617": { - "name": "Shadow", - "proto": "WEEDLE_SHADOW", - "evolutions": [ - { - "pokemon": 14, - "form": 620 - } - ] - }, - "618": { - "name": "Purified", - "proto": "WEEDLE_PURIFIED", - "evolutions": [ - { - "pokemon": 14, - "form": 621 - } - ] - } - }, - "default_form_id": 616, - "pokedex_id": 13, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug", - "Poison" - ], - "attack": 63, - "defense": 50, - "stamina": 120, - "height": 0.3, - "weight": 3.2, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Bug Bite", - "Poison Sting" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 14, - "form": 619 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "14": { - "name": "Kakuna", - "forms": { - "619": { - "name": "Normal", - "proto": "KAKUNA_NORMAL", - "evolutions": [ - { - "pokemon": 15, - "form": 622 - } - ] - }, - "620": { - "name": "Shadow", - "proto": "KAKUNA_SHADOW", - "evolutions": [ - { - "pokemon": 15, - "form": 623 - } - ] - }, - "621": { - "name": "Purified", - "proto": "KAKUNA_PURIFIED", - "evolutions": [ - { - "pokemon": 15, - "form": 624 - } - ] - } - }, - "default_form_id": 619, - "pokedex_id": 14, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug", - "Poison" - ], - "attack": 46, - "defense": 75, - "stamina": 128, - "height": 0.6, - "weight": 10, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Bug Bite", - "Poison Sting" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 15, - "form": 622 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "15": { - "name": "Beedrill", - "forms": { - "622": { - "name": "Normal", - "proto": "BEEDRILL_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "623": { - "name": "Shadow", - "proto": "BEEDRILL_SHADOW" - }, - "624": { - "name": "Purified", - "proto": "BEEDRILL_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 622, - "pokedex_id": 15, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug", - "Poison" - ], - "attack": 169, - "defense": 130, - "stamina": 163, - "height": 1, - "weight": 29.5, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Infestation", - "Poison Jab" - ], - "charged_moves": [ - "Sludge Bomb", - "Aerial Ace", - "X Scissor", - "Fell Stinger" - ], - "temp_evolutions": { - "1": { - "attack": 303, - "defense": 148, - "stamina": 163, - "height": 1.4, - "weight": 40.5 - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "16": { - "name": "Pidgey", - "forms": { - "962": { - "name": "Normal", - "proto": "PIDGEY_NORMAL" - }, - "963": { - "name": "Shadow", - "proto": "PIDGEY_SHADOW" - }, - "964": { - "name": "Purified", - "proto": "PIDGEY_PURIFIED" - } - }, - "default_form_id": 962, - "pokedex_id": 16, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal", - "Flying" - ], - "attack": 85, - "defense": 73, - "stamina": 120, - "height": 0.3, - "weight": 1.8, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Quick Attack", - "Tackle" - ], - "charged_moves": [ - "Twister", - "Aerial Ace", - "Air Cutter" - ], - "evolutions": [ - { - "pokemon": 17 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "17": { - "name": "Pidgeotto", - "forms": { - "965": { - "name": "Normal", - "proto": "PIDGEOTTO_NORMAL" - }, - "966": { - "name": "Shadow", - "proto": "PIDGEOTTO_SHADOW" - }, - "967": { - "name": "Purified", - "proto": "PIDGEOTTO_PURIFIED" - } - }, - "default_form_id": 965, - "pokedex_id": 17, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal", - "Flying" - ], - "attack": 117, - "defense": 105, - "stamina": 160, - "height": 1.1, - "weight": 30, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Wing Attack", - "Steel Wing" - ], - "charged_moves": [ - "Twister", - "Aerial Ace", - "Air Cutter" - ], - "evolutions": [ - { - "pokemon": 18 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "18": { - "name": "Pidgeot", - "forms": { - "968": { - "name": "Normal", - "proto": "PIDGEOT_NORMAL" - }, - "969": { - "name": "Shadow", - "proto": "PIDGEOT_SHADOW" - }, - "970": { - "name": "Purified", - "proto": "PIDGEOT_PURIFIED" - } - }, - "default_form_id": 968, - "pokedex_id": 18, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal", - "Flying" - ], - "attack": 166, - "defense": 154, - "stamina": 195, - "height": 1.5, - "weight": 39.5, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Air Slash", - "Steel Wing" - ], - "charged_moves": [ - "Hurricane", - "Aerial Ace", - "Brave Bird" - ], - "temp_evolutions": { - "1": { - "attack": 280, - "defense": 175, - "stamina": 195, - "height": 2.2, - "weight": 50.5 - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "19": { - "name": "Rattata", - "forms": { - "45": { - "name": "Normal", - "proto": "RATTATA_NORMAL", - "evolutions": [ - { - "pokemon": 20, - "form": 47 - } - ] - }, - "46": { - "name": "Alola", - "proto": "RATTATA_ALOLA", - "evolutions": [ - { - "pokemon": 20, - "form": 48 - } - ], - "height": 0.3, - "weight": 3.8, - "charged_moves": [ - "Crunch", - "Hyper Fang", - "Shadow Ball" - ], - "types": [ - "Dark", - "Normal" - ] - }, - "153": { - "name": "Shadow", - "proto": "RATTATA_SHADOW", - "evolutions": [ - { - "pokemon": 20, - "form": 155 - } - ] - }, - "154": { - "name": "Purified", - "proto": "RATTATA_PURIFIED", - "evolutions": [ - { - "pokemon": 20, - "form": 156 - } - ] - } - }, - "default_form_id": 45, - "pokedex_id": 19, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 103, - "defense": 70, - "stamina": 102, - "height": 0.3, - "weight": 3.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Quick Attack" - ], - "charged_moves": [ - "Dig", - "Hyper Fang", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 20, - "form": 47 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "20": { - "name": "Raticate", - "forms": { - "47": { - "name": "Normal", - "proto": "RATICATE_NORMAL" - }, - "48": { - "name": "Alola", - "proto": "RATICATE_ALOLA", - "attack": 135, - "defense": 154, - "stamina": 181, - "height": 0.7, - "weight": 25.5, - "charged_moves": [ - "Crunch", - "Hyper Fang", - "Hyper Beam" - ], - "types": [ - "Dark", - "Normal" - ] - }, - "155": { - "name": "Shadow", - "proto": "RATICATE_SHADOW" - }, - "156": { - "name": "Purified", - "proto": "RATICATE_PURIFIED" - }, - "2329": { - "name": "Spring 2020", - "proto": "RATICATE_SPRING_2020" - } - }, - "default_form_id": 47, - "pokedex_id": 20, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 161, - "defense": 139, - "stamina": 146, - "height": 0.7, - "weight": 18.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Bite", - "Quick Attack" - ], - "charged_moves": [ - "Dig", - "Hyper Fang", - "Hyper Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "21": { - "name": "Spearow", - "forms": { - "971": { - "name": "Normal", - "proto": "SPEAROW_NORMAL" - }, - "972": { - "name": "Shadow", - "proto": "SPEAROW_SHADOW" - }, - "973": { - "name": "Purified", - "proto": "SPEAROW_PURIFIED" - } - }, - "default_form_id": 971, - "pokedex_id": 21, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal", - "Flying" - ], - "attack": 112, - "defense": 60, - "stamina": 120, - "height": 0.3, - "weight": 2, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Peck", - "Quick Attack" - ], - "charged_moves": [ - "Aerial Ace", - "Drill Peck", - "Sky Attack" - ], - "evolutions": [ - { - "pokemon": 22 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "22": { - "name": "Fearow", - "forms": { - "974": { - "name": "Normal", - "proto": "FEAROW_NORMAL" - }, - "975": { - "name": "Shadow", - "proto": "FEAROW_SHADOW" - }, - "976": { - "name": "Purified", - "proto": "FEAROW_PURIFIED" - } - }, - "default_form_id": 974, - "pokedex_id": 22, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal", - "Flying" - ], - "attack": 182, - "defense": 133, - "stamina": 163, - "height": 1.2, - "weight": 38, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Peck", - "Steel Wing" - ], - "charged_moves": [ - "Aerial Ace", - "Drill Run", - "Sky Attack" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "23": { - "name": "Ekans", - "forms": { - "697": { - "name": "Normal", - "proto": "EKANS_NORMAL", - "evolutions": [ - { - "pokemon": 24, - "form": 700 - } - ] - }, - "698": { - "name": "Shadow", - "proto": "EKANS_SHADOW", - "evolutions": [ - { - "pokemon": 24, - "form": 701 - } - ] - }, - "699": { - "name": "Purified", - "proto": "EKANS_PURIFIED", - "evolutions": [ - { - "pokemon": 24, - "form": 702 - } - ] - } - }, - "default_form_id": 697, - "pokedex_id": 23, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison" - ], - "attack": 110, - "defense": 97, - "stamina": 111, - "height": 2, - "weight": 6.9, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Poison Sting", - "Acid" - ], - "charged_moves": [ - "Wrap", - "Poison Fang", - "Sludge Bomb" - ], - "evolutions": [ - { - "pokemon": 24, - "form": 700 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "24": { - "name": "Arbok", - "forms": { - "700": { - "name": "Normal", - "proto": "ARBOK_NORMAL" - }, - "701": { - "name": "Shadow", - "proto": "ARBOK_SHADOW" - }, - "702": { - "name": "Purified", - "proto": "ARBOK_PURIFIED" - } - }, - "default_form_id": 700, - "pokedex_id": 24, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison" - ], - "attack": 167, - "defense": 153, - "stamina": 155, - "height": 3.5, - "weight": 65, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Bite", - "Acid", - "Dragon Tail" - ], - "charged_moves": [ - "Dark Pulse", - "Sludge Wave", - "Gunk Shot", - "Acid Spray" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "25": { - "name": "Pikachu", - "forms": { - "598": { - "name": "Normal", - "proto": "PIKACHU_NORMAL", - "evolutions": [ - { - "pokemon": 26 - } - ] - }, - "894": { - "name": "Fall 2019", - "proto": "PIKACHU_FALL_2019" - }, - "901": { - "name": "Vs 2019", - "proto": "PIKACHU_VS_2019", - "quick_moves": [ - "Thunder Shock", - "Charm" - ], - "charged_moves": [ - "Flying Press", - "Thunder Punch", - "Play Rough" - ] - }, - "949": { - "name": "Copy 2019", - "proto": "PIKACHU_COPY_2019" - }, - "977": { - "name": "Shadow", - "proto": "PIKACHU_SHADOW" - }, - "978": { - "name": "Purified", - "proto": "PIKACHU_PURIFIED" - }, - "2332": { - "name": "Costume 2020", - "proto": "PIKACHU_COSTUME_2020", - "charged_moves": [ - "Discharge", - "Thunderbolt", - "Wild Charge", - "Fly" - ] - }, - "2669": { - "name": "Adventure Hat 2020", - "proto": "PIKACHU_ADVENTURE_HAT_2020" - }, - "2670": { - "name": "Winter 2020", - "proto": "PIKACHU_WINTER_2020" - } - }, - "default_form_id": 598, - "pokedex_id": 25, - "genId": "1", - "generation": "Kanto", - "types": [ - "Electric" - ], - "attack": 112, - "defense": 96, - "stamina": 111, - "height": 0.4, - "weight": 6, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Thunder Shock", - "Quick Attack" - ], - "charged_moves": [ - "Discharge", - "Thunderbolt", - "Wild Charge" - ], - "evolutions": [ - { - "pokemon": 26 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "26": { - "name": "Raichu", - "forms": { - "49": { - "name": "Normal", - "proto": "RAICHU_NORMAL" - }, - "50": { - "name": "Alola", - "proto": "RAICHU_ALOLA", - "attack": 201, - "defense": 154, - "stamina": 155, - "height": 0.7, - "weight": 21, - "quick_moves": [ - "Volt Switch", - "Spark", - "Thunder Shock" - ], - "charged_moves": [ - "Psychic", - "Thunder Punch", - "Wild Charge", - "Grass Knot" - ], - "types": [ - "Electric", - "Psychic" - ] - }, - "979": { - "name": "Shadow", - "proto": "RAICHU_SHADOW" - }, - "980": { - "name": "Purified", - "proto": "RAICHU_PURIFIED" - } - }, - "default_form_id": 49, - "pokedex_id": 26, - "genId": "1", - "generation": "Kanto", - "types": [ - "Electric" - ], - "attack": 193, - "defense": 151, - "stamina": 155, - "height": 0.8, - "weight": 30, - "flee_rate": 0.06, - "capture_rate": 0.1, - "quick_moves": [ - "Volt Switch", - "Spark", - "Charm", - "Thunder Shock" - ], - "charged_moves": [ - "Brick Break", - "Thunder Punch", - "Wild Charge", - "Skull Bash" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "27": { - "name": "Sandshrew", - "forms": { - "51": { - "name": "Normal", - "proto": "SANDSHREW_NORMAL", - "evolutions": [ - { - "pokemon": 28, - "form": 53 - } - ] - }, - "52": { - "name": "Alola", - "proto": "SANDSHREW_ALOLA", - "evolutions": [ - { - "pokemon": 28, - "form": 54 - } - ], - "attack": 125, - "defense": 129, - "stamina": 137, - "height": 0.7, - "weight": 40, - "quick_moves": [ - "Metal Claw", - "Powder Snow" - ], - "charged_moves": [ - "Blizzard", - "Gyro Ball", - "Night Slash" - ], - "types": [ - "Ice", - "Steel" - ] - }, - "673": { - "name": "Shadow", - "proto": "SANDSHREW_SHADOW", - "evolutions": [ - { - "pokemon": 28, - "form": 675 - } - ] - }, - "674": { - "name": "Purified", - "proto": "SANDSHREW_PURIFIED", - "evolutions": [ - { - "pokemon": 28, - "form": 676 - } - ] - } - }, - "default_form_id": 51, - "pokedex_id": 27, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ground" - ], - "attack": 126, - "defense": 120, - "stamina": 137, - "height": 0.6, - "weight": 12, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Scratch", - "Mud Shot" - ], - "charged_moves": [ - "Dig", - "Rock Slide", - "Sand Tomb" - ], - "evolutions": [ - { - "pokemon": 28, - "form": 53 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "28": { - "name": "Sandslash", - "forms": { - "53": { - "name": "Normal", - "proto": "SANDSLASH_NORMAL" - }, - "54": { - "name": "Alola", - "proto": "SANDSLASH_ALOLA", - "attack": 177, - "defense": 195, - "stamina": 181, - "height": 1.2, - "weight": 55, - "quick_moves": [ - "Metal Claw", - "Powder Snow" - ], - "charged_moves": [ - "Blizzard", - "Gyro Ball", - "Bulldoze", - "Ice Punch" - ], - "types": [ - "Ice", - "Steel" - ] - }, - "675": { - "name": "Shadow", - "proto": "SANDSLASH_SHADOW" - }, - "676": { - "name": "Purified", - "proto": "SANDSLASH_PURIFIED" - } - }, - "default_form_id": 53, - "pokedex_id": 28, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ground" - ], - "attack": 182, - "defense": 175, - "stamina": 181, - "height": 1, - "weight": 29.5, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Metal Claw", - "Mud Shot" - ], - "charged_moves": [ - "Earthquake", - "Rock Tomb", - "Bulldoze" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "29": { - "name": "Nidoran♀", - "forms": { - "776": { - "name": "Normal", - "proto": "NIDORAN_NORMAL", - "evolutions": [ - { - "pokemon": 30, - "form": 779 - } - ] - }, - "777": { - "name": "Shadow", - "proto": "NIDORAN_SHADOW", - "evolutions": [ - { - "pokemon": 30, - "form": 780 - } - ] - }, - "778": { - "name": "Purified", - "proto": "NIDORAN_PURIFIED", - "evolutions": [ - { - "pokemon": 30, - "form": 781 - } - ] - } - }, - "default_form_id": 776, - "pokedex_id": 29, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison" - ], - "attack": 86, - "defense": 89, - "stamina": 146, - "height": 0.4, - "weight": 7, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Bite", - "Poison Sting" - ], - "charged_moves": [ - "Poison Fang", - "Body Slam", - "Sludge Bomb" - ], - "evolutions": [ - { - "pokemon": 30, - "form": 779 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "30": { - "name": "Nidorina", - "forms": { - "779": { - "name": "Normal", - "proto": "NIDORINA_NORMAL", - "evolutions": [ - { - "pokemon": 31, - "form": 782 - } - ] - }, - "780": { - "name": "Shadow", - "proto": "NIDORINA_SHADOW", - "evolutions": [ - { - "pokemon": 31, - "form": 783 - } - ] - }, - "781": { - "name": "Purified", - "proto": "NIDORINA_PURIFIED", - "evolutions": [ - { - "pokemon": 31, - "form": 784 - } - ] - } - }, - "default_form_id": 779, - "pokedex_id": 30, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison" - ], - "attack": 117, - "defense": 120, - "stamina": 172, - "height": 0.8, - "weight": 20, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Bite", - "Poison Sting" - ], - "charged_moves": [ - "Poison Fang", - "Dig", - "Sludge Bomb" - ], - "evolutions": [ - { - "pokemon": 31, - "form": 782 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "31": { - "name": "Nidoqueen", - "forms": { - "782": { - "name": "Normal", - "proto": "NIDOQUEEN_NORMAL" - }, - "783": { - "name": "Shadow", - "proto": "NIDOQUEEN_SHADOW" - }, - "784": { - "name": "Purified", - "proto": "NIDOQUEEN_PURIFIED" - } - }, - "default_form_id": 782, - "pokedex_id": 31, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison", - "Ground" - ], - "attack": 180, - "defense": 173, - "stamina": 207, - "height": 1.3, - "weight": 60, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Poison Jab", - "Bite" - ], - "charged_moves": [ - "Earthquake", - "Sludge Wave", - "Stone Edge", - "Earth Power" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "32": { - "name": "Nidoran♂", - "forms": { - "776": { - "name": "Normal", - "proto": "NIDORAN_NORMAL", - "evolutions": [ - { - "pokemon": 33, - "form": 785 - } - ] - }, - "777": { - "name": "Shadow", - "proto": "NIDORAN_SHADOW", - "evolutions": [ - { - "pokemon": 33, - "form": 786 - } - ] - }, - "778": { - "name": "Purified", - "proto": "NIDORAN_PURIFIED", - "evolutions": [ - { - "pokemon": 33, - "form": 787 - } - ] - } - }, - "default_form_id": 776, - "pokedex_id": 32, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison" - ], - "attack": 105, - "defense": 76, - "stamina": 130, - "height": 0.5, - "weight": 9, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Peck", - "Poison Sting" - ], - "charged_moves": [ - "Horn Attack", - "Body Slam", - "Sludge Bomb" - ], - "evolutions": [ - { - "pokemon": 33, - "form": 785 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "33": { - "name": "Nidorino", - "forms": { - "785": { - "name": "Normal", - "proto": "NIDORINO_NORMAL", - "evolutions": [ - { - "pokemon": 34, - "form": 788 - } - ] - }, - "786": { - "name": "Shadow", - "proto": "NIDORINO_SHADOW", - "evolutions": [ - { - "pokemon": 34, - "form": 789 - } - ] - }, - "787": { - "name": "Purified", - "proto": "NIDORINO_PURIFIED", - "evolutions": [ - { - "pokemon": 34, - "form": 790 - } - ] - } - }, - "default_form_id": 785, - "pokedex_id": 33, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison" - ], - "attack": 137, - "defense": 111, - "stamina": 156, - "height": 0.9, - "weight": 19.5, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Poison Jab", - "Poison Sting" - ], - "charged_moves": [ - "Horn Attack", - "Dig", - "Sludge Bomb" - ], - "evolutions": [ - { - "pokemon": 34, - "form": 788 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "34": { - "name": "Nidoking", - "forms": { - "788": { - "name": "Normal", - "proto": "NIDOKING_NORMAL" - }, - "789": { - "name": "Shadow", - "proto": "NIDOKING_SHADOW" - }, - "790": { - "name": "Purified", - "proto": "NIDOKING_PURIFIED" - } - }, - "default_form_id": 788, - "pokedex_id": 34, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison", - "Ground" - ], - "attack": 204, - "defense": 156, - "stamina": 191, - "height": 1.4, - "weight": 62, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Poison Jab", - "Iron Tail" - ], - "charged_moves": [ - "Earthquake", - "Sludge Wave", - "Megahorn", - "Earth Power" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "35": { - "name": "Clefairy", - "forms": { - "981": { - "name": "Normal", - "proto": "CLEFAIRY_NORMAL" - }, - "982": { - "name": "Shadow", - "proto": "CLEFAIRY_SHADOW" - }, - "983": { - "name": "Purified", - "proto": "CLEFAIRY_PURIFIED" - } - }, - "default_form_id": 981, - "pokedex_id": 35, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fairy" - ], - "attack": 107, - "defense": 108, - "stamina": 172, - "height": 0.6, - "weight": 7.5, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Pound", - "Zen Headbutt" - ], - "charged_moves": [ - "Disarming Voice", - "Body Slam", - "Moonblast" - ], - "evolutions": [ - { - "pokemon": 36 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "36": { - "name": "Clefable", - "forms": { - "984": { - "name": "Normal", - "proto": "CLEFABLE_NORMAL" - }, - "985": { - "name": "Shadow", - "proto": "CLEFABLE_SHADOW" - }, - "986": { - "name": "Purified", - "proto": "CLEFABLE_PURIFIED" - } - }, - "default_form_id": 984, - "pokedex_id": 36, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fairy" - ], - "attack": 178, - "defense": 162, - "stamina": 216, - "height": 1.3, - "weight": 40, - "flee_rate": 0.06, - "capture_rate": 0.1, - "quick_moves": [ - "Charge Beam", - "Zen Headbutt", - "Charm" - ], - "charged_moves": [ - "Dazzling Gleam", - "Psychic", - "Moonblast", - "Meteor Mash" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "37": { - "name": "Vulpix", - "forms": { - "55": { - "name": "Normal", - "proto": "VULPIX_NORMAL", - "evolutions": [ - { - "pokemon": 38, - "form": 57 - } - ] - }, - "56": { - "name": "Alola", - "proto": "VULPIX_ALOLA", - "evolutions": [ - { - "pokemon": 38, - "form": 58 - } - ], - "quick_moves": [ - "Zen Headbutt", - "Powder Snow" - ], - "charged_moves": [ - "Dark Pulse", - "Ice Beam", - "Blizzard", - "Weather Ball" - ], - "types": [ - "Ice" - ] - }, - "725": { - "name": "Shadow", - "proto": "VULPIX_SHADOW", - "evolutions": [ - { - "pokemon": 38, - "form": 727 - } - ] - }, - "726": { - "name": "Purified", - "proto": "VULPIX_PURIFIED", - "evolutions": [ - { - "pokemon": 38, - "form": 728 - } - ] - } - }, - "default_form_id": 55, - "pokedex_id": 37, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire" - ], - "attack": 96, - "defense": 109, - "stamina": 116, - "height": 0.6, - "weight": 9.9, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Quick Attack", - "Ember" - ], - "charged_moves": [ - "Body Slam", - "Flamethrower", - "Flame Charge", - "Weather Ball" - ], - "evolutions": [ - { - "pokemon": 38, - "form": 57 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "38": { - "name": "Ninetales", - "forms": { - "57": { - "name": "Normal", - "proto": "NINETALES_NORMAL" - }, - "58": { - "name": "Alola", - "proto": "NINETALES_ALOLA", - "attack": 170, - "defense": 193, - "stamina": 177, - "quick_moves": [ - "Feint Attack", - "Powder Snow", - "Charm" - ], - "charged_moves": [ - "Dazzling Gleam", - "Ice Beam", - "Blizzard", - "Psyshock", - "Weather Ball" - ], - "types": [ - "Ice", - "Fairy" - ] - }, - "727": { - "name": "Shadow", - "proto": "NINETALES_SHADOW" - }, - "728": { - "name": "Purified", - "proto": "NINETALES_PURIFIED" - } - }, - "default_form_id": 57, - "pokedex_id": 38, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire" - ], - "attack": 169, - "defense": 190, - "stamina": 177, - "height": 1.1, - "weight": 19.9, - "flee_rate": 0.06, - "capture_rate": 0.1, - "quick_moves": [ - "Feint Attack", - "Fire Spin" - ], - "charged_moves": [ - "Heat Wave", - "Overheat", - "Solar Beam", - "Psyshock", - "Weather Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "39": { - "name": "Jigglypuff", - "forms": { - "987": { - "name": "Normal", - "proto": "JIGGLYPUFF_NORMAL" - }, - "988": { - "name": "Shadow", - "proto": "JIGGLYPUFF_SHADOW" - }, - "989": { - "name": "Purified", - "proto": "JIGGLYPUFF_PURIFIED" - } - }, - "default_form_id": 987, - "pokedex_id": 39, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal", - "Fairy" - ], - "attack": 80, - "defense": 41, - "stamina": 251, - "height": 0.5, - "weight": 5.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Pound", - "Feint Attack" - ], - "charged_moves": [ - "Disarming Voice", - "Gyro Ball", - "Dazzling Gleam" - ], - "evolutions": [ - { - "pokemon": 40 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "40": { - "name": "Wigglytuff", - "forms": { - "990": { - "name": "Normal", - "proto": "WIGGLYTUFF_NORMAL" - }, - "991": { - "name": "Shadow", - "proto": "WIGGLYTUFF_SHADOW" - }, - "992": { - "name": "Purified", - "proto": "WIGGLYTUFF_PURIFIED" - } - }, - "default_form_id": 990, - "pokedex_id": 40, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal", - "Fairy" - ], - "attack": 156, - "defense": 90, - "stamina": 295, - "height": 1, - "weight": 12, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Pound", - "Feint Attack", - "Charm" - ], - "charged_moves": [ - "Dazzling Gleam", - "Hyper Beam", - "Play Rough", - "Ice Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "41": { - "name": "Zubat", - "forms": { - "157": { - "name": "Normal", - "proto": "ZUBAT_NORMAL", - "evolutions": [ - { - "pokemon": 42, - "form": 160 - } - ] - }, - "158": { - "name": "Shadow", - "proto": "ZUBAT_SHADOW", - "evolutions": [ - { - "pokemon": 42, - "form": 161 - } - ] - }, - "159": { - "name": "Purified", - "proto": "ZUBAT_PURIFIED", - "evolutions": [ - { - "pokemon": 42, - "form": 162 - } - ] - } - }, - "default_form_id": 157, - "pokedex_id": 41, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison", - "Flying" - ], - "attack": 83, - "defense": 73, - "stamina": 120, - "height": 0.8, - "weight": 7.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Quick Attack", - "Bite" - ], - "charged_moves": [ - "Poison Fang", - "Air Cutter", - "Swift" - ], - "evolutions": [ - { - "pokemon": 42, - "form": 160 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "42": { - "name": "Golbat", - "forms": { - "160": { - "name": "Normal", - "proto": "GOLBAT_NORMAL", - "evolutions": [ - { - "pokemon": 169, - "form": 202 - } - ] - }, - "161": { - "name": "Shadow", - "proto": "GOLBAT_SHADOW", - "evolutions": [ - { - "pokemon": 169, - "form": 203 - } - ] - }, - "162": { - "name": "Purified", - "proto": "GOLBAT_PURIFIED", - "evolutions": [ - { - "pokemon": 169, - "form": 204 - } - ] - } - }, - "default_form_id": 160, - "pokedex_id": 42, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison", - "Flying" - ], - "attack": 161, - "defense": 150, - "stamina": 181, - "height": 1.6, - "weight": 55, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Wing Attack", - "Bite" - ], - "charged_moves": [ - "Shadow Ball", - "Air Cutter", - "Poison Fang" - ], - "evolutions": [ - { - "pokemon": 169, - "form": 202 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "43": { - "name": "Oddish", - "forms": { - "265": { - "name": "Normal", - "proto": "ODDISH_NORMAL", - "evolutions": [ - { - "pokemon": 44, - "form": 268 - } - ] - }, - "266": { - "name": "Shadow", - "proto": "ODDISH_SHADOW", - "evolutions": [ - { - "pokemon": 44, - "form": 269 - } - ] - }, - "267": { - "name": "Purified", - "proto": "ODDISH_PURIFIED", - "evolutions": [ - { - "pokemon": 44, - "form": 270 - } - ] - } - }, - "default_form_id": 265, - "pokedex_id": 43, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass", - "Poison" - ], - "attack": 131, - "defense": 112, - "stamina": 128, - "height": 0.5, - "weight": 5.4, - "flee_rate": 0.15, - "capture_rate": 0.6, - "quick_moves": [ - "Razor Leaf", - "Acid" - ], - "charged_moves": [ - "Seed Bomb", - "Sludge Bomb", - "Moonblast" - ], - "evolutions": [ - { - "pokemon": 44, - "form": 268 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "44": { - "name": "Gloom", - "forms": { - "268": { - "name": "Normal", - "proto": "GLOOM_NORMAL", - "evolutions": [ - { - "pokemon": 45, - "form": 271 - }, - { - "pokemon": 182, - "form": 274 - } - ] - }, - "269": { - "name": "Shadow", - "proto": "GLOOM_SHADOW", - "evolutions": [ - { - "pokemon": 45, - "form": 272 - }, - { - "pokemon": 182, - "form": 275 - } - ] - }, - "270": { - "name": "Purified", - "proto": "GLOOM_PURIFIED", - "evolutions": [ - { - "pokemon": 45, - "form": 273 - }, - { - "pokemon": 182, - "form": 276 - } - ] - } - }, - "default_form_id": 268, - "pokedex_id": 44, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass", - "Poison" - ], - "attack": 153, - "defense": 136, - "stamina": 155, - "height": 0.8, - "weight": 8.6, - "flee_rate": 0.07, - "capture_rate": 0.3, - "quick_moves": [ - "Razor Leaf", - "Acid" - ], - "charged_moves": [ - "Petal Blizzard", - "Sludge Bomb", - "Moonblast" - ], - "evolutions": [ - { - "pokemon": 45, - "form": 271 - }, - { - "pokemon": 182, - "form": 274 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "45": { - "name": "Vileplume", - "forms": { - "271": { - "name": "Normal", - "proto": "VILEPLUME_NORMAL" - }, - "272": { - "name": "Shadow", - "proto": "VILEPLUME_SHADOW" - }, - "273": { - "name": "Purified", - "proto": "VILEPLUME_PURIFIED" - } - }, - "default_form_id": 271, - "pokedex_id": 45, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass", - "Poison" - ], - "attack": 202, - "defense": 167, - "stamina": 181, - "height": 1.2, - "weight": 18.6, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Razor Leaf", - "Acid" - ], - "charged_moves": [ - "Petal Blizzard", - "Solar Beam", - "Moonblast", - "Sludge Bomb" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "46": { - "name": "Paras", - "forms": { - "993": { - "name": "Normal", - "proto": "PARAS_NORMAL" - }, - "994": { - "name": "Shadow", - "proto": "PARAS_SHADOW" - }, - "995": { - "name": "Purified", - "proto": "PARAS_PURIFIED" - } - }, - "default_form_id": 993, - "pokedex_id": 46, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug", - "Grass" - ], - "attack": 121, - "defense": 99, - "stamina": 111, - "height": 0.3, - "weight": 5.4, - "flee_rate": 0.15, - "capture_rate": 0.4, - "quick_moves": [ - "Scratch", - "Bug Bite" - ], - "charged_moves": [ - "Cross Poison", - "X Scissor", - "Seed Bomb" - ], - "evolutions": [ - { - "pokemon": 47 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "47": { - "name": "Parasect", - "forms": { - "996": { - "name": "Normal", - "proto": "PARASECT_NORMAL" - }, - "997": { - "name": "Shadow", - "proto": "PARASECT_SHADOW" - }, - "998": { - "name": "Purified", - "proto": "PARASECT_PURIFIED" - } - }, - "default_form_id": 996, - "pokedex_id": 47, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug", - "Grass" - ], - "attack": 165, - "defense": 146, - "stamina": 155, - "height": 1, - "weight": 29.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Struggle Bug", - "Fury Cutter" - ], - "charged_moves": [ - "Cross Poison", - "X Scissor", - "Solar Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "48": { - "name": "Venonat", - "forms": { - "259": { - "name": "Normal", - "proto": "VENONAT_NORMAL", - "evolutions": [ - { - "pokemon": 49, - "form": 262 - } - ] - }, - "260": { - "name": "Shadow", - "proto": "VENONAT_SHADOW", - "evolutions": [ - { - "pokemon": 49, - "form": 263 - } - ] - }, - "261": { - "name": "Purified", - "proto": "VENONAT_PURIFIED", - "evolutions": [ - { - "pokemon": 49, - "form": 264 - } - ] - } - }, - "default_form_id": 259, - "pokedex_id": 48, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug", - "Poison" - ], - "attack": 100, - "defense": 100, - "stamina": 155, - "height": 1, - "weight": 30, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Bug Bite", - "Confusion" - ], - "charged_moves": [ - "Poison Fang", - "Psybeam", - "Signal Beam" - ], - "evolutions": [ - { - "pokemon": 49, - "form": 262 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "49": { - "name": "Venomoth", - "forms": { - "262": { - "name": "Normal", - "proto": "VENOMOTH_NORMAL" - }, - "263": { - "name": "Shadow", - "proto": "VENOMOTH_SHADOW" - }, - "264": { - "name": "Purified", - "proto": "VENOMOTH_PURIFIED" - } - }, - "default_form_id": 262, - "pokedex_id": 49, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug", - "Poison" - ], - "attack": 179, - "defense": 143, - "stamina": 172, - "height": 1.5, - "weight": 12.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Infestation", - "Confusion" - ], - "charged_moves": [ - "Silver Wind", - "Psychic", - "Bug Buzz", - "Poison Fang" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "50": { - "name": "Diglett", - "forms": { - "59": { - "name": "Normal", - "proto": "DIGLETT_NORMAL", - "evolutions": [ - { - "pokemon": 51, - "form": 61 - } - ] - }, - "60": { - "name": "Alola", - "proto": "DIGLETT_ALOLA", - "evolutions": [ - { - "pokemon": 51, - "form": 62 - } - ], - "attack": 108, - "defense": 81, - "stamina": 67, - "height": 0.2, - "weight": 1, - "quick_moves": [ - "Mud Slap", - "Metal Claw" - ], - "types": [ - "Ground", - "Steel" - ] - }, - "842": { - "name": "Shadow", - "proto": "DIGLETT_SHADOW", - "evolutions": [ - { - "pokemon": 51, - "form": 844 - } - ] - }, - "843": { - "name": "Purified", - "proto": "DIGLETT_PURIFIED", - "evolutions": [ - { - "pokemon": 51, - "form": 845 - } - ] - } - }, - "default_form_id": 59, - "pokedex_id": 50, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ground" - ], - "attack": 109, - "defense": 78, - "stamina": 67, - "height": 0.2, - "weight": 0.8, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Mud Slap", - "Scratch" - ], - "charged_moves": [ - "Dig", - "Mud Bomb", - "Rock Tomb" - ], - "evolutions": [ - { - "pokemon": 51, - "form": 61 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "51": { - "name": "Dugtrio", - "forms": { - "61": { - "name": "Normal", - "proto": "DUGTRIO_NORMAL", - "attack": 167, - "defense": 136, - "stamina": 111 - }, - "62": { - "name": "Alola", - "proto": "DUGTRIO_ALOLA", - "attack": 201, - "defense": 142, - "stamina": 111, - "height": 0.7, - "weight": 66.6, - "quick_moves": [ - "Metal Claw", - "Mud Slap" - ], - "charged_moves": [ - "Earthquake", - "Mud Bomb", - "Iron Head" - ], - "types": [ - "Ground", - "Steel" - ] - }, - "844": { - "name": "Shadow", - "proto": "DUGTRIO_SHADOW" - }, - "845": { - "name": "Purified", - "proto": "DUGTRIO_PURIFIED" - } - }, - "default_form_id": 61, - "pokedex_id": 51, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ground" - ], - "attack": 167, - "defense": 134, - "stamina": 111, - "height": 0.7, - "weight": 33.3, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Sucker Punch", - "Mud Slap" - ], - "charged_moves": [ - "Earthquake", - "Mud Bomb", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "52": { - "name": "Meowth", - "forms": { - "63": { - "name": "Normal", - "proto": "MEOWTH_NORMAL", - "evolutions": [ - { - "pokemon": 53, - "form": 65 - } - ] - }, - "64": { - "name": "Alola", - "proto": "MEOWTH_ALOLA", - "evolutions": [ - { - "pokemon": 53, - "form": 66 - } - ], - "attack": 99, - "defense": 78, - "stamina": 120, - "types": [ - "Dark" - ] - }, - "709": { - "name": "Shadow", - "proto": "MEOWTH_SHADOW", - "evolutions": [ - { - "pokemon": 53, - "form": 711 - } - ] - }, - "710": { - "name": "Purified", - "proto": "MEOWTH_PURIFIED", - "evolutions": [ - { - "pokemon": 53, - "form": 712 - } - ] - }, - "2335": { - "name": "Galarian", - "proto": "MEOWTH_GALARIAN", - "evolutions": [ - { - "pokemon": 863, - "form": 2504 - } - ], - "attack": 115, - "defense": 92, - "stamina": 137, - "height": 0.4, - "weight": 7.5, - "quick_moves": [ - "Scratch", - "Metal Claw" - ], - "charged_moves": [ - "Night Slash", - "Gyro Ball", - "Dig" - ], - "types": [ - "Steel" - ] - } - }, - "default_form_id": 63, - "pokedex_id": 52, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 92, - "defense": 78, - "stamina": 120, - "height": 0.4, - "weight": 4.2, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Scratch", - "Bite" - ], - "charged_moves": [ - "Night Slash", - "Dark Pulse", - "Foul Play" - ], - "evolutions": [ - { - "pokemon": 53, - "form": 65 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "53": { - "name": "Persian", - "forms": { - "65": { - "name": "Normal", - "proto": "PERSIAN_NORMAL" - }, - "66": { - "name": "Alola", - "proto": "PERSIAN_ALOLA", - "attack": 158, - "defense": 136, - "stamina": 163, - "height": 1.1, - "weight": 33, - "charged_moves": [ - "Foul Play", - "Dark Pulse", - "Play Rough", - "Payback" - ], - "types": [ - "Dark" - ] - }, - "711": { - "name": "Shadow", - "proto": "PERSIAN_SHADOW" - }, - "712": { - "name": "Purified", - "proto": "PERSIAN_PURIFIED" - } - }, - "default_form_id": 65, - "pokedex_id": 53, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 150, - "defense": 136, - "stamina": 163, - "height": 1, - "weight": 32, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Scratch", - "Feint Attack" - ], - "charged_moves": [ - "Foul Play", - "Power Gem", - "Play Rough", - "Payback" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "54": { - "name": "Psyduck", - "forms": { - "286": { - "name": "Normal", - "proto": "PSYDUCK_NORMAL", - "evolutions": [ - { - "pokemon": 55, - "form": 289 - } - ] - }, - "287": { - "name": "Shadow", - "proto": "PSYDUCK_SHADOW", - "evolutions": [ - { - "pokemon": 55, - "form": 290 - } - ] - }, - "288": { - "name": "Purified", - "proto": "PSYDUCK_PURIFIED", - "evolutions": [ - { - "pokemon": 55, - "form": 291 - } - ] - } - }, - "default_form_id": 286, - "pokedex_id": 54, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 122, - "defense": 95, - "stamina": 137, - "height": 0.8, - "weight": 19.6, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Water Gun", - "Zen Headbutt" - ], - "charged_moves": [ - "Psybeam", - "Aqua Tail", - "Cross Chop" - ], - "evolutions": [ - { - "pokemon": 55, - "form": 289 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "55": { - "name": "Golduck", - "forms": { - "289": { - "name": "Normal", - "proto": "GOLDUCK_NORMAL" - }, - "290": { - "name": "Shadow", - "proto": "GOLDUCK_SHADOW" - }, - "291": { - "name": "Purified", - "proto": "GOLDUCK_PURIFIED" - } - }, - "default_form_id": 289, - "pokedex_id": 55, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 191, - "defense": 162, - "stamina": 190, - "height": 1.7, - "weight": 76.6, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Confusion" - ], - "charged_moves": [ - "Psychic", - "Hydro Pump", - "Ice Beam", - "Bubble Beam", - "Synchronoise", - "Cross Chop" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "56": { - "name": "Mankey", - "forms": { - "999": { - "name": "Normal", - "proto": "MANKEY_NORMAL" - }, - "1000": { - "name": "Shadow", - "proto": "MANKEY_SHADOW" - }, - "1001": { - "name": "Purified", - "proto": "MANKEY_PURIFIED" - } - }, - "default_form_id": 999, - "pokedex_id": 56, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fighting" - ], - "attack": 148, - "defense": 82, - "stamina": 120, - "height": 0.5, - "weight": 28, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Karate Chop", - "Scratch" - ], - "charged_moves": [ - "Cross Chop", - "Low Sweep", - "Brick Break" - ], - "evolutions": [ - { - "pokemon": 57 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "57": { - "name": "Primeape", - "forms": { - "1002": { - "name": "Normal", - "proto": "PRIMEAPE_NORMAL" - }, - "1003": { - "name": "Shadow", - "proto": "PRIMEAPE_SHADOW" - }, - "1004": { - "name": "Purified", - "proto": "PRIMEAPE_PURIFIED" - } - }, - "default_form_id": 1002, - "pokedex_id": 57, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fighting" - ], - "attack": 207, - "defense": 138, - "stamina": 163, - "height": 1, - "weight": 32, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Low Kick", - "Counter" - ], - "charged_moves": [ - "Close Combat", - "Low Sweep", - "Night Slash", - "Ice Punch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "58": { - "name": "Growlithe", - "forms": { - "280": { - "name": "Normal", - "proto": "GROWLITHE_NORMAL", - "evolutions": [ - { - "pokemon": 59, - "form": 283 - } - ] - }, - "281": { - "name": "Shadow", - "proto": "GROWLITHE_SHADOW", - "evolutions": [ - { - "pokemon": 59, - "form": 284 - } - ] - }, - "282": { - "name": "Purified", - "proto": "GROWLITHE_PURIFIED", - "evolutions": [ - { - "pokemon": 59, - "form": 285 - } - ] - } - }, - "default_form_id": 280, - "pokedex_id": 58, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire" - ], - "attack": 136, - "defense": 93, - "stamina": 146, - "height": 0.7, - "weight": 19, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Ember", - "Bite" - ], - "charged_moves": [ - "Flame Wheel", - "Body Slam", - "Flamethrower" - ], - "evolutions": [ - { - "pokemon": 59, - "form": 283 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "59": { - "name": "Arcanine", - "forms": { - "283": { - "name": "Normal", - "proto": "ARCANINE_NORMAL" - }, - "284": { - "name": "Shadow", - "proto": "ARCANINE_SHADOW" - }, - "285": { - "name": "Purified", - "proto": "ARCANINE_PURIFIED" - } - }, - "default_form_id": 283, - "pokedex_id": 59, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire" - ], - "attack": 227, - "defense": 166, - "stamina": 207, - "height": 1.9, - "weight": 155, - "flee_rate": 0.06, - "capture_rate": 0.1, - "quick_moves": [ - "Fire Fang", - "Snarl", - "Thunder Fang" - ], - "charged_moves": [ - "Fire Blast", - "Wild Charge", - "Crunch", - "Flamethrower" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "60": { - "name": "Poliwag", - "forms": { - "235": { - "name": "Normal", - "proto": "POLIWAG_NORMAL", - "evolutions": [ - { - "pokemon": 61, - "form": 238 - } - ] - }, - "236": { - "name": "Shadow", - "proto": "POLIWAG_SHADOW", - "evolutions": [ - { - "pokemon": 61, - "form": 239 - } - ] - }, - "237": { - "name": "Purified", - "proto": "POLIWAG_PURIFIED", - "evolutions": [ - { - "pokemon": 61, - "form": 240 - } - ] - } - }, - "default_form_id": 235, - "pokedex_id": 60, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 101, - "defense": 82, - "stamina": 120, - "height": 0.6, - "weight": 12.4, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Bubble", - "Mud Shot" - ], - "charged_moves": [ - "Bubble Beam", - "Mud Bomb", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 61, - "form": 238 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "61": { - "name": "Poliwhirl", - "forms": { - "238": { - "name": "Normal", - "proto": "POLIWHIRL_NORMAL", - "evolutions": [ - { - "pokemon": 62, - "form": 241 - }, - { - "pokemon": 186, - "form": 244 - } - ] - }, - "239": { - "name": "Shadow", - "proto": "POLIWHIRL_SHADOW", - "evolutions": [ - { - "pokemon": 62, - "form": 242 - }, - { - "pokemon": 186, - "form": 245 - } - ] - }, - "240": { - "name": "Purified", - "proto": "POLIWHIRL_PURIFIED", - "evolutions": [ - { - "pokemon": 62, - "form": 243 - }, - { - "pokemon": 186, - "form": 246 - } - ] - } - }, - "default_form_id": 238, - "pokedex_id": 61, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 130, - "defense": 123, - "stamina": 163, - "height": 1, - "weight": 20, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Bubble", - "Mud Shot" - ], - "charged_moves": [ - "Water Pulse", - "Mud Bomb", - "Bubble Beam" - ], - "evolutions": [ - { - "pokemon": 62, - "form": 241 - }, - { - "pokemon": 186, - "form": 244 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "62": { - "name": "Poliwrath", - "forms": { - "241": { - "name": "Normal", - "proto": "POLIWRATH_NORMAL" - }, - "242": { - "name": "Shadow", - "proto": "POLIWRATH_SHADOW" - }, - "243": { - "name": "Purified", - "proto": "POLIWRATH_PURIFIED" - } - }, - "default_form_id": 241, - "pokedex_id": 62, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water", - "Fighting" - ], - "attack": 182, - "defense": 184, - "stamina": 207, - "height": 1.3, - "weight": 54, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Bubble", - "Rock Smash", - "Mud Shot" - ], - "charged_moves": [ - "Hydro Pump", - "Dynamic Punch", - "Ice Punch", - "Power Up" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "63": { - "name": "Abra", - "forms": { - "304": { - "name": "Normal", - "proto": "ABRA_NORMAL", - "evolutions": [ - { - "pokemon": 64, - "form": 307 - } - ] - }, - "305": { - "name": "Shadow", - "proto": "ABRA_SHADOW", - "evolutions": [ - { - "pokemon": 64, - "form": 308 - } - ] - }, - "306": { - "name": "Purified", - "proto": "ABRA_PURIFIED", - "evolutions": [ - { - "pokemon": 64, - "form": 309 - } - ] - } - }, - "default_form_id": 304, - "pokedex_id": 63, - "genId": "1", - "generation": "Kanto", - "types": [ - "Psychic" - ], - "attack": 195, - "defense": 82, - "stamina": 93, - "height": 0.9, - "weight": 19.5, - "flee_rate": 0.99, - "capture_rate": 0.5, - "quick_moves": [ - "Zen Headbutt", - "Charge Beam" - ], - "charged_moves": [ - "Psyshock", - "Signal Beam", - "Shadow Ball" - ], - "evolutions": [ - { - "pokemon": 64, - "form": 307 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "64": { - "name": "Kadabra", - "forms": { - "307": { - "name": "Normal", - "proto": "KADABRA_NORMAL", - "evolutions": [ - { - "pokemon": 65, - "form": 310 - } - ] - }, - "308": { - "name": "Shadow", - "proto": "KADABRA_SHADOW", - "evolutions": [ - { - "pokemon": 65, - "form": 311 - } - ] - }, - "309": { - "name": "Purified", - "proto": "KADABRA_PURIFIED", - "evolutions": [ - { - "pokemon": 65, - "form": 312 - } - ] - } - }, - "default_form_id": 307, - "pokedex_id": 64, - "genId": "1", - "generation": "Kanto", - "types": [ - "Psychic" - ], - "attack": 232, - "defense": 117, - "stamina": 120, - "height": 1.3, - "weight": 56.5, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Psycho Cut", - "Confusion" - ], - "charged_moves": [ - "Psybeam", - "Dazzling Gleam", - "Shadow Ball" - ], - "evolutions": [ - { - "pokemon": 65, - "form": 310 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "65": { - "name": "Alakazam", - "forms": { - "310": { - "name": "Normal", - "proto": "ALAKAZAM_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "311": { - "name": "Shadow", - "proto": "ALAKAZAM_SHADOW" - }, - "312": { - "name": "Purified", - "proto": "ALAKAZAM_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 310, - "pokedex_id": 65, - "genId": "1", - "generation": "Kanto", - "types": [ - "Psychic" - ], - "attack": 271, - "defense": 167, - "stamina": 146, - "height": 1.5, - "weight": 48, - "flee_rate": 0.05, - "capture_rate": 0.1, - "quick_moves": [ - "Psycho Cut", - "Confusion" - ], - "charged_moves": [ - "Futuresight", - "Focus Blast", - "Shadow Ball", - "Fire Punch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 367, - "defense": 207, - "stamina": 146, - "unreleased": true - } - } - }, - "66": { - "name": "Machop", - "forms": { - "809": { - "name": "Normal", - "proto": "MACHOP_NORMAL", - "evolutions": [ - { - "pokemon": 67, - "form": 812 - } - ] - }, - "810": { - "name": "Shadow", - "proto": "MACHOP_SHADOW", - "evolutions": [ - { - "pokemon": 67, - "form": 813 - } - ] - }, - "811": { - "name": "Purified", - "proto": "MACHOP_PURIFIED", - "evolutions": [ - { - "pokemon": 67, - "form": 814 - } - ] - } - }, - "default_form_id": 809, - "pokedex_id": 66, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fighting" - ], - "attack": 137, - "defense": 82, - "stamina": 172, - "height": 0.8, - "weight": 19.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Rock Smash", - "Karate Chop" - ], - "charged_moves": [ - "Low Sweep", - "Brick Break", - "Cross Chop" - ], - "evolutions": [ - { - "pokemon": 67, - "form": 812 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "67": { - "name": "Machoke", - "forms": { - "812": { - "name": "Normal", - "proto": "MACHOKE_NORMAL", - "evolutions": [ - { - "pokemon": 68, - "form": 815 - } - ] - }, - "813": { - "name": "Shadow", - "proto": "MACHOKE_SHADOW", - "evolutions": [ - { - "pokemon": 68, - "form": 816 - } - ] - }, - "814": { - "name": "Purified", - "proto": "MACHOKE_PURIFIED", - "evolutions": [ - { - "pokemon": 68, - "form": 817 - } - ] - } - }, - "default_form_id": 812, - "pokedex_id": 67, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fighting" - ], - "attack": 177, - "defense": 125, - "stamina": 190, - "height": 1.5, - "weight": 70.5, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Low Kick", - "Karate Chop" - ], - "charged_moves": [ - "Submission", - "Brick Break", - "Dynamic Punch" - ], - "evolutions": [ - { - "pokemon": 68, - "form": 815 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "68": { - "name": "Machamp", - "forms": { - "815": { - "name": "Normal", - "proto": "MACHAMP_NORMAL" - }, - "816": { - "name": "Shadow", - "proto": "MACHAMP_SHADOW" - }, - "817": { - "name": "Purified", - "proto": "MACHAMP_PURIFIED" - } - }, - "default_form_id": 815, - "pokedex_id": 68, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fighting" - ], - "attack": 234, - "defense": 159, - "stamina": 207, - "height": 1.6, - "weight": 130, - "flee_rate": 0.05, - "capture_rate": 0.1, - "quick_moves": [ - "Bullet Punch", - "Counter" - ], - "charged_moves": [ - "Heavy Slam", - "Dynamic Punch", - "Close Combat", - "Rock Slide", - "Cross Chop" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "69": { - "name": "Bellsprout", - "forms": { - "664": { - "name": "Normal", - "proto": "BELLSPROUT_NORMAL", - "evolutions": [ - { - "pokemon": 70, - "form": 667 - } - ] - }, - "665": { - "name": "Shadow", - "proto": "BELLSPROUT_SHADOW", - "evolutions": [ - { - "pokemon": 70, - "form": 668 - } - ] - }, - "666": { - "name": "Purified", - "proto": "BELLSPROUT_PURIFIED", - "evolutions": [ - { - "pokemon": 70, - "form": 669 - } - ] - } - }, - "default_form_id": 664, - "pokedex_id": 69, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass", - "Poison" - ], - "attack": 139, - "defense": 61, - "stamina": 137, - "height": 0.7, - "weight": 4, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Vine Whip", - "Acid" - ], - "charged_moves": [ - "Power Whip", - "Sludge Bomb", - "Wrap" - ], - "evolutions": [ - { - "pokemon": 70, - "form": 667 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "70": { - "name": "Weepinbell", - "forms": { - "667": { - "name": "Normal", - "proto": "WEEPINBELL_NORMAL", - "evolutions": [ - { - "pokemon": 71, - "form": 670 - } - ] - }, - "668": { - "name": "Shadow", - "proto": "WEEPINBELL_SHADOW", - "evolutions": [ - { - "pokemon": 71, - "form": 671 - } - ] - }, - "669": { - "name": "Purified", - "proto": "WEEPINBELL_PURIFIED", - "evolutions": [ - { - "pokemon": 71, - "form": 672 - } - ] - } - }, - "default_form_id": 667, - "pokedex_id": 70, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass", - "Poison" - ], - "attack": 172, - "defense": 92, - "stamina": 163, - "height": 1, - "weight": 6.4, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Bullet Seed", - "Acid" - ], - "charged_moves": [ - "Power Whip", - "Sludge Bomb", - "Seed Bomb" - ], - "evolutions": [ - { - "pokemon": 71, - "form": 670 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "71": { - "name": "Victreebel", - "forms": { - "670": { - "name": "Normal", - "proto": "VICTREEBEL_NORMAL" - }, - "671": { - "name": "Shadow", - "proto": "VICTREEBEL_SHADOW" - }, - "672": { - "name": "Purified", - "proto": "VICTREEBEL_PURIFIED" - } - }, - "default_form_id": 670, - "pokedex_id": 71, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass", - "Poison" - ], - "attack": 207, - "defense": 135, - "stamina": 190, - "height": 1.7, - "weight": 15.5, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Razor Leaf", - "Acid" - ], - "charged_moves": [ - "Leaf Blade", - "Sludge Bomb", - "Solar Beam", - "Leaf Tornado", - "Acid Spray" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "72": { - "name": "Tentacool", - "forms": { - "1005": { - "name": "Normal", - "proto": "TENTACOOL_NORMAL" - }, - "1006": { - "name": "Shadow", - "proto": "TENTACOOL_SHADOW" - }, - "1007": { - "name": "Purified", - "proto": "TENTACOOL_PURIFIED" - } - }, - "default_form_id": 1005, - "pokedex_id": 72, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water", - "Poison" - ], - "attack": 97, - "defense": 149, - "stamina": 120, - "height": 0.9, - "weight": 45.5, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Bubble", - "Poison Sting" - ], - "charged_moves": [ - "Bubble Beam", - "Water Pulse", - "Wrap" - ], - "evolutions": [ - { - "pokemon": 73 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "73": { - "name": "Tentacruel", - "forms": { - "1008": { - "name": "Normal", - "proto": "TENTACRUEL_NORMAL" - }, - "1009": { - "name": "Shadow", - "proto": "TENTACRUEL_SHADOW" - }, - "1010": { - "name": "Purified", - "proto": "TENTACRUEL_PURIFIED" - } - }, - "default_form_id": 1008, - "pokedex_id": 73, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water", - "Poison" - ], - "attack": 166, - "defense": 209, - "stamina": 190, - "height": 1.6, - "weight": 55, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Acid", - "Poison Jab" - ], - "charged_moves": [ - "Hydro Pump", - "Sludge Wave", - "Blizzard", - "Acid Spray" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "74": { - "name": "Geodude", - "forms": { - "67": { - "name": "Normal", - "proto": "GEODUDE_NORMAL", - "evolutions": [ - { - "pokemon": 75, - "form": 69 - } - ] - }, - "68": { - "name": "Alola", - "proto": "GEODUDE_ALOLA", - "evolutions": [ - { - "pokemon": 75, - "form": 70 - } - ], - "height": 0.4, - "weight": 20.3, - "quick_moves": [ - "Rock Throw", - "Volt Switch" - ], - "charged_moves": [ - "Rock Slide", - "Rock Tomb", - "Thunderbolt" - ], - "types": [ - "Rock", - "Electric" - ] - }, - "882": { - "name": "Shadow", - "proto": "GEODUDE_SHADOW", - "evolutions": [ - { - "pokemon": 75, - "form": 884 - } - ] - }, - "883": { - "name": "Purified", - "proto": "GEODUDE_PURIFIED", - "evolutions": [ - { - "pokemon": 75, - "form": 885 - } - ] - } - }, - "default_form_id": 67, - "pokedex_id": 74, - "genId": "1", - "generation": "Kanto", - "types": [ - "Rock", - "Ground" - ], - "attack": 132, - "defense": 132, - "stamina": 120, - "height": 0.4, - "weight": 20, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Rock Throw", - "Tackle" - ], - "charged_moves": [ - "Rock Slide", - "Rock Tomb", - "Dig" - ], - "evolutions": [ - { - "pokemon": 75, - "form": 69 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "75": { - "name": "Graveler", - "forms": { - "69": { - "name": "Normal", - "proto": "GRAVELER_NORMAL", - "evolutions": [ - { - "pokemon": 76, - "form": 71 - } - ] - }, - "70": { - "name": "Alola", - "proto": "GRAVELER_ALOLA", - "evolutions": [ - { - "pokemon": 76, - "form": 72 - } - ], - "height": 1, - "weight": 110, - "quick_moves": [ - "Rock Throw", - "Volt Switch" - ], - "charged_moves": [ - "Thunderbolt", - "Stone Edge", - "Rock Blast" - ], - "types": [ - "Rock", - "Electric" - ] - }, - "884": { - "name": "Shadow", - "proto": "GRAVELER_SHADOW", - "evolutions": [ - { - "pokemon": 76, - "form": 886 - } - ] - }, - "885": { - "name": "Purified", - "proto": "GRAVELER_PURIFIED", - "evolutions": [ - { - "pokemon": 76, - "form": 887 - } - ] - } - }, - "default_form_id": 69, - "pokedex_id": 75, - "genId": "1", - "generation": "Kanto", - "types": [ - "Rock", - "Ground" - ], - "attack": 164, - "defense": 164, - "stamina": 146, - "height": 1, - "weight": 105, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Rock Throw", - "Mud Slap" - ], - "charged_moves": [ - "Dig", - "Stone Edge", - "Rock Blast" - ], - "evolutions": [ - { - "pokemon": 76, - "form": 71 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "76": { - "name": "Golem", - "forms": { - "71": { - "name": "Normal", - "proto": "GOLEM_NORMAL" - }, - "72": { - "name": "Alola", - "proto": "GOLEM_ALOLA", - "height": 1.7, - "weight": 316, - "quick_moves": [ - "Rock Throw", - "Volt Switch" - ], - "charged_moves": [ - "Stone Edge", - "Rock Blast", - "Wild Charge" - ], - "types": [ - "Rock", - "Electric" - ] - }, - "886": { - "name": "Shadow", - "proto": "GOLEM_SHADOW" - }, - "887": { - "name": "Purified", - "proto": "GOLEM_PURIFIED" - } - }, - "default_form_id": 71, - "pokedex_id": 76, - "genId": "1", - "generation": "Kanto", - "types": [ - "Rock", - "Ground" - ], - "attack": 211, - "defense": 198, - "stamina": 190, - "height": 1.4, - "weight": 300, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Rock Throw", - "Mud Slap" - ], - "charged_moves": [ - "Stone Edge", - "Rock Blast", - "Earthquake", - "Ancient Power" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "77": { - "name": "Ponyta", - "forms": { - "1011": { - "name": "Normal", - "proto": "PONYTA_NORMAL", - "evolutions": [ - { - "pokemon": 78, - "form": 1014 - } - ] - }, - "1012": { - "name": "Shadow", - "proto": "PONYTA_SHADOW", - "evolutions": [ - { - "pokemon": 78, - "form": 1015 - } - ] - }, - "1013": { - "name": "Purified", - "proto": "PONYTA_PURIFIED", - "evolutions": [ - { - "pokemon": 78, - "form": 1016 - } - ] - }, - "2336": { - "name": "Galarian", - "proto": "PONYTA_GALARIAN", - "evolutions": [ - { - "pokemon": 78, - "form": 2337 - } - ], - "height": 0.8, - "weight": 24, - "quick_moves": [ - "Low Kick", - "Psycho Cut" - ], - "charged_moves": [ - "Play Rough", - "Psybeam", - "Swift" - ], - "types": [ - "Psychic" - ] - } - }, - "default_form_id": 1011, - "pokedex_id": 77, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire" - ], - "attack": 170, - "defense": 127, - "stamina": 137, - "height": 1, - "weight": 30, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Tackle", - "Ember" - ], - "charged_moves": [ - "Flame Charge", - "Flame Wheel", - "Stomp" - ], - "evolutions": [ - { - "pokemon": 78, - "form": 1014 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "78": { - "name": "Rapidash", - "forms": { - "1014": { - "name": "Normal", - "proto": "RAPIDASH_NORMAL" - }, - "1015": { - "name": "Shadow", - "proto": "RAPIDASH_SHADOW" - }, - "1016": { - "name": "Purified", - "proto": "RAPIDASH_PURIFIED" - }, - "2337": { - "name": "Galarian", - "proto": "RAPIDASH_GALARIAN", - "height": 1.7, - "weight": 80, - "quick_moves": [ - "Low Kick", - "Psycho Cut" - ], - "charged_moves": [ - "Play Rough", - "Psychic", - "Body Slam", - "Megahorn" - ], - "types": [ - "Psychic", - "Fairy" - ] - } - }, - "default_form_id": 1014, - "pokedex_id": 78, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire" - ], - "attack": 207, - "defense": 162, - "stamina": 163, - "height": 1.7, - "weight": 95, - "flee_rate": 0.06, - "capture_rate": 0.15, - "quick_moves": [ - "Low Kick", - "Fire Spin", - "Incinerate" - ], - "charged_moves": [ - "Fire Blast", - "Drill Run", - "Heat Wave", - "Flame Charge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "79": { - "name": "Slowpoke", - "forms": { - "1017": { - "name": "Normal", - "proto": "SLOWPOKE_NORMAL", - "evolutions": [ - { - "pokemon": 80, - "form": 1020 - }, - { - "pokemon": 199, - "form": 1238 - } - ] - }, - "1018": { - "name": "Shadow", - "proto": "SLOWPOKE_SHADOW", - "evolutions": [ - { - "pokemon": 80, - "form": 1021 - }, - { - "pokemon": 199, - "form": 1239 - } - ] - }, - "1019": { - "name": "Purified", - "proto": "SLOWPOKE_PURIFIED", - "evolutions": [ - { - "pokemon": 80, - "form": 1022 - }, - { - "pokemon": 199, - "form": 1240 - } - ] - }, - "2582": { - "name": "Galarian", - "proto": "SLOWPOKE_GALARIAN" - }, - "2673": { - "name": "2020", - "proto": "SLOWPOKE_2020", - "evolutions": [ - { - "pokemon": 80, - "form": 2674 - } - ] - } - }, - "default_form_id": 1017, - "pokedex_id": 79, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water", - "Psychic" - ], - "attack": 109, - "defense": 98, - "stamina": 207, - "height": 1.2, - "weight": 36, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Water Gun", - "Confusion" - ], - "charged_moves": [ - "Water Pulse", - "Psyshock", - "Psychic" - ], - "evolutions": [ - { - "pokemon": 80, - "form": 1020 - }, - { - "pokemon": 199, - "form": 1238 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "80": { - "name": "Slowbro", - "forms": { - "1020": { - "name": "Normal", - "proto": "SLOWBRO_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1021": { - "name": "Shadow", - "proto": "SLOWBRO_SHADOW" - }, - "1022": { - "name": "Purified", - "proto": "SLOWBRO_PURIFIED", - "temp_evolutions": { - "1": {} - } - }, - "2583": { - "name": "Galarian", - "proto": "SLOWBRO_GALARIAN" - }, - "2674": { - "name": "2021", - "proto": "SLOWBRO_2021" - } - }, - "default_form_id": 1020, - "pokedex_id": 80, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water", - "Psychic" - ], - "attack": 177, - "defense": 180, - "stamina": 216, - "height": 1.6, - "weight": 78.5, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Confusion" - ], - "charged_moves": [ - "Water Pulse", - "Psychic", - "Ice Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 224, - "defense": 259, - "stamina": 216, - "unreleased": true - } - } - }, - "81": { - "name": "Magnemite", - "forms": { - "655": { - "name": "Normal", - "proto": "MAGNEMITE_NORMAL", - "evolutions": [ - { - "pokemon": 82, - "form": 658 - } - ] - }, - "656": { - "name": "Shadow", - "proto": "MAGNEMITE_SHADOW", - "evolutions": [ - { - "pokemon": 82, - "form": 659 - } - ] - }, - "657": { - "name": "Purified", - "proto": "MAGNEMITE_PURIFIED", - "evolutions": [ - { - "pokemon": 82, - "form": 660 - } - ] - } - }, - "default_form_id": 655, - "pokedex_id": 81, - "genId": "1", - "generation": "Kanto", - "types": [ - "Electric", - "Steel" - ], - "attack": 165, - "defense": 121, - "stamina": 93, - "height": 0.3, - "weight": 6, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Spark", - "Thunder Shock" - ], - "charged_moves": [ - "Discharge", - "Magnet Bomb", - "Thunderbolt" - ], - "evolutions": [ - { - "pokemon": 82, - "form": 658 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "82": { - "name": "Magneton", - "forms": { - "658": { - "name": "Normal", - "proto": "MAGNETON_NORMAL", - "evolutions": [ - { - "pokemon": 462, - "form": 661 - } - ] - }, - "659": { - "name": "Shadow", - "proto": "MAGNETON_SHADOW", - "evolutions": [ - { - "pokemon": 462, - "form": 662 - } - ] - }, - "660": { - "name": "Purified", - "proto": "MAGNETON_PURIFIED", - "evolutions": [ - { - "pokemon": 462, - "form": 663 - } - ] - } - }, - "default_form_id": 658, - "pokedex_id": 82, - "genId": "1", - "generation": "Kanto", - "types": [ - "Electric", - "Steel" - ], - "attack": 223, - "defense": 169, - "stamina": 137, - "height": 1, - "weight": 60, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Spark", - "Charge Beam", - "Thunder Shock" - ], - "charged_moves": [ - "Zap Cannon", - "Magnet Bomb", - "Flash Cannon", - "Discharge" - ], - "evolutions": [ - { - "pokemon": 462 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "83": { - "name": "Farfetchd", - "forms": { - "1023": { - "name": "Normal", - "proto": "FARFETCHD_NORMAL" - }, - "1024": { - "name": "Shadow", - "proto": "FARFETCHD_SHADOW" - }, - "1025": { - "name": "Purified", - "proto": "FARFETCHD_PURIFIED" - }, - "2338": { - "name": "Galarian", - "proto": "FARFETCHD_GALARIAN", - "evolutions": [ - { - "pokemon": 865, - "form": 2510 - } - ], - "attack": 174, - "defense": 114, - "stamina": 141, - "height": 0.8, - "weight": 42, - "quick_moves": [ - "Rock Smash", - "Fury Cutter" - ], - "charged_moves": [ - "Brick Break", - "Brave Bird", - "Leaf Blade" - ], - "types": [ - "Fighting" - ] - } - }, - "default_form_id": 1023, - "pokedex_id": 83, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal", - "Flying" - ], - "attack": 124, - "defense": 115, - "stamina": 141, - "height": 0.8, - "weight": 15, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Air Slash", - "Fury Cutter" - ], - "charged_moves": [ - "Aerial Ace", - "Air Cutter", - "Leaf Blade" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "84": { - "name": "Doduo", - "forms": { - "1026": { - "name": "Normal", - "proto": "DODUO_NORMAL" - }, - "1027": { - "name": "Shadow", - "proto": "DODUO_SHADOW" - }, - "1028": { - "name": "Purified", - "proto": "DODUO_PURIFIED" - } - }, - "default_form_id": 1026, - "pokedex_id": 84, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal", - "Flying" - ], - "attack": 158, - "defense": 83, - "stamina": 111, - "height": 1.4, - "weight": 39.2, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Peck", - "Quick Attack" - ], - "charged_moves": [ - "Drill Peck", - "Aerial Ace", - "Brave Bird" - ], - "evolutions": [ - { - "pokemon": 85 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "85": { - "name": "Dodrio", - "forms": { - "1029": { - "name": "Normal", - "proto": "DODRIO_NORMAL" - }, - "1030": { - "name": "Shadow", - "proto": "DODRIO_SHADOW" - }, - "1031": { - "name": "Purified", - "proto": "DODRIO_PURIFIED" - } - }, - "default_form_id": 1029, - "pokedex_id": 85, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal", - "Flying" - ], - "attack": 218, - "defense": 140, - "stamina": 155, - "height": 1.8, - "weight": 85.2, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Feint Attack", - "Steel Wing" - ], - "charged_moves": [ - "Drill Peck", - "Aerial Ace", - "Brave Bird" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "86": { - "name": "Seel", - "forms": { - "1032": { - "name": "Normal", - "proto": "SEEL_NORMAL" - }, - "1033": { - "name": "Shadow", - "proto": "SEEL_SHADOW" - }, - "1034": { - "name": "Purified", - "proto": "SEEL_PURIFIED" - } - }, - "default_form_id": 1032, - "pokedex_id": 86, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 85, - "defense": 121, - "stamina": 163, - "height": 1.1, - "weight": 90, - "flee_rate": 0.09, - "capture_rate": 0.5, - "quick_moves": [ - "Ice Shard", - "Lick" - ], - "charged_moves": [ - "Aurora Beam", - "Icy Wind", - "Aqua Tail" - ], - "evolutions": [ - { - "pokemon": 87 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "87": { - "name": "Dewgong", - "forms": { - "1035": { - "name": "Normal", - "proto": "DEWGONG_NORMAL" - }, - "1036": { - "name": "Shadow", - "proto": "DEWGONG_SHADOW" - }, - "1037": { - "name": "Purified", - "proto": "DEWGONG_PURIFIED" - } - }, - "default_form_id": 1035, - "pokedex_id": 87, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water", - "Ice" - ], - "attack": 139, - "defense": 177, - "stamina": 207, - "height": 1.7, - "weight": 120, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Frost Breath", - "Iron Tail" - ], - "charged_moves": [ - "Aurora Beam", - "Water Pulse", - "Blizzard" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "88": { - "name": "Grimer", - "forms": { - "73": { - "name": "Normal", - "proto": "GRIMER_NORMAL", - "evolutions": [ - { - "pokemon": 89, - "form": 75 - } - ] - }, - "74": { - "name": "Alola", - "proto": "GRIMER_ALOLA", - "evolutions": [ - { - "pokemon": 89, - "form": 76 - } - ], - "height": 0.7, - "weight": 42, - "quick_moves": [ - "Poison Jab", - "Bite" - ], - "charged_moves": [ - "Crunch", - "Gunk Shot", - "Sludge Bomb" - ], - "types": [ - "Poison", - "Dark" - ] - }, - "220": { - "name": "Shadow", - "proto": "GRIMER_SHADOW", - "evolutions": [ - { - "pokemon": 89, - "form": 222 - } - ] - }, - "221": { - "name": "Purified", - "proto": "GRIMER_PURIFIED", - "evolutions": [ - { - "pokemon": 89, - "form": 223 - } - ] - } - }, - "default_form_id": 73, - "pokedex_id": 88, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison" - ], - "attack": 135, - "defense": 90, - "stamina": 190, - "height": 0.9, - "weight": 30, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Poison Jab", - "Mud Slap" - ], - "charged_moves": [ - "Sludge", - "Mud Bomb", - "Sludge Bomb" - ], - "evolutions": [ - { - "pokemon": 89, - "form": 75 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "89": { - "name": "Muk", - "forms": { - "75": { - "name": "Normal", - "proto": "MUK_NORMAL" - }, - "76": { - "name": "Alola", - "proto": "MUK_ALOLA", - "height": 1, - "weight": 52, - "quick_moves": [ - "Bite", - "Poison Jab", - "Snarl" - ], - "charged_moves": [ - "Dark Pulse", - "Gunk Shot", - "Sludge Wave", - "Acid Spray" - ], - "types": [ - "Poison", - "Dark" - ] - }, - "222": { - "name": "Shadow", - "proto": "MUK_SHADOW" - }, - "223": { - "name": "Purified", - "proto": "MUK_PURIFIED" - } - }, - "default_form_id": 75, - "pokedex_id": 89, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison" - ], - "attack": 190, - "defense": 172, - "stamina": 233, - "height": 1.2, - "weight": 30, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Infestation", - "Poison Jab" - ], - "charged_moves": [ - "Dark Pulse", - "Gunk Shot", - "Sludge Wave", - "Thunder Punch", - "Acid Spray" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "90": { - "name": "Shellder", - "forms": { - "876": { - "name": "Normal", - "proto": "SHELLDER_NORMAL", - "evolutions": [ - { - "pokemon": 91, - "form": 879 - } - ] - }, - "877": { - "name": "Shadow", - "proto": "SHELLDER_SHADOW", - "evolutions": [ - { - "pokemon": 91, - "form": 880 - } - ] - }, - "878": { - "name": "Purified", - "proto": "SHELLDER_PURIFIED", - "evolutions": [ - { - "pokemon": 91, - "form": 881 - } - ] - } - }, - "default_form_id": 876, - "pokedex_id": 90, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 116, - "defense": 134, - "stamina": 102, - "height": 0.3, - "weight": 4, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Ice Shard", - "Tackle" - ], - "charged_moves": [ - "Bubble Beam", - "Water Pulse", - "Icy Wind" - ], - "evolutions": [ - { - "pokemon": 91, - "form": 879 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "91": { - "name": "Cloyster", - "forms": { - "879": { - "name": "Normal", - "proto": "CLOYSTER_NORMAL" - }, - "880": { - "name": "Shadow", - "proto": "CLOYSTER_SHADOW" - }, - "881": { - "name": "Purified", - "proto": "CLOYSTER_PURIFIED" - } - }, - "default_form_id": 879, - "pokedex_id": 91, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water", - "Ice" - ], - "attack": 186, - "defense": 256, - "stamina": 137, - "height": 1.5, - "weight": 132.5, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Frost Breath", - "Ice Shard" - ], - "charged_moves": [ - "Aurora Beam", - "Hydro Pump", - "Avalanche", - "Icy Wind" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "92": { - "name": "Gastly", - "forms": { - "1038": { - "name": "Normal", - "proto": "GASTLY_NORMAL" - }, - "1039": { - "name": "Shadow", - "proto": "GASTLY_SHADOW" - }, - "1040": { - "name": "Purified", - "proto": "GASTLY_PURIFIED" - } - }, - "default_form_id": 1038, - "pokedex_id": 92, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ghost", - "Poison" - ], - "attack": 186, - "defense": 67, - "stamina": 102, - "height": 1.3, - "weight": 0.1, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Lick", - "Astonish" - ], - "charged_moves": [ - "Night Shade", - "Dark Pulse", - "Sludge Bomb" - ], - "evolutions": [ - { - "pokemon": 93 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "93": { - "name": "Haunter", - "forms": { - "1041": { - "name": "Normal", - "proto": "HAUNTER_NORMAL" - }, - "1042": { - "name": "Shadow", - "proto": "HAUNTER_SHADOW" - }, - "1043": { - "name": "Purified", - "proto": "HAUNTER_PURIFIED" - } - }, - "default_form_id": 1041, - "pokedex_id": 93, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ghost", - "Poison" - ], - "attack": 223, - "defense": 107, - "stamina": 128, - "height": 1.6, - "weight": 0.1, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Shadow Claw", - "Astonish" - ], - "charged_moves": [ - "Shadow Punch", - "Dark Pulse", - "Sludge Bomb", - "Shadow Ball" - ], - "evolutions": [ - { - "pokemon": 94 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "94": { - "name": "Gengar", - "forms": { - "1044": { - "name": "Normal", - "proto": "GENGAR_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1045": { - "name": "Shadow", - "proto": "GENGAR_SHADOW" - }, - "1046": { - "name": "Purified", - "proto": "GENGAR_PURIFIED" - }, - "2586": { - "name": "Costume 2020", - "proto": "GENGAR_COSTUME_2020", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1044, - "pokedex_id": 94, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ghost", - "Poison" - ], - "attack": 261, - "defense": 149, - "stamina": 155, - "height": 1.5, - "weight": 40.5, - "flee_rate": 0.05, - "capture_rate": 0.1, - "quick_moves": [ - "Sucker Punch", - "Hex", - "Shadow Claw" - ], - "charged_moves": [ - "Shadow Ball", - "Focus Blast", - "Sludge Bomb" - ], - "temp_evolutions": { - "1": { - "attack": 349, - "defense": 199, - "stamina": 155, - "height": 1.4 - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "95": { - "name": "Onix", - "forms": { - "902": { - "name": "Normal", - "proto": "ONIX_NORMAL", - "evolutions": [ - { - "pokemon": 208, - "form": 905 - } - ] - }, - "903": { - "name": "Shadow", - "proto": "ONIX_SHADOW", - "evolutions": [ - { - "pokemon": 208, - "form": 906 - } - ] - }, - "904": { - "name": "Purified", - "proto": "ONIX_PURIFIED", - "evolutions": [ - { - "pokemon": 208, - "form": 907 - } - ] - }, - "2334": { - "name": "Costume 2020", - "proto": "ONIX_COSTUME_2020" - } - }, - "default_form_id": 902, - "pokedex_id": 95, - "genId": "1", - "generation": "Kanto", - "types": [ - "Rock", - "Ground" - ], - "attack": 85, - "defense": 232, - "stamina": 111, - "height": 8.8, - "weight": 210, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Rock Throw", - "Tackle" - ], - "charged_moves": [ - "Sand Tomb", - "Stone Edge", - "Heavy Slam" - ], - "evolutions": [ - { - "pokemon": 208, - "form": 905 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "96": { - "name": "Drowzee", - "forms": { - "214": { - "name": "Normal", - "proto": "DROWZEE_NORMAL", - "evolutions": [ - { - "pokemon": 97, - "form": 217 - } - ] - }, - "215": { - "name": "Shadow", - "proto": "DROWZEE_SHADOW", - "evolutions": [ - { - "pokemon": 97, - "form": 218 - } - ] - }, - "216": { - "name": "Purified", - "proto": "DROWZEE_PURIFIED", - "evolutions": [ - { - "pokemon": 97, - "form": 219 - } - ] - } - }, - "default_form_id": 214, - "pokedex_id": 96, - "genId": "1", - "generation": "Kanto", - "types": [ - "Psychic" - ], - "attack": 89, - "defense": 136, - "stamina": 155, - "height": 1, - "weight": 32.4, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Pound", - "Confusion" - ], - "charged_moves": [ - "Psybeam", - "Psyshock", - "Psychic" - ], - "evolutions": [ - { - "pokemon": 97, - "form": 217 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "97": { - "name": "Hypno", - "forms": { - "217": { - "name": "Normal", - "proto": "HYPNO_NORMAL" - }, - "218": { - "name": "Shadow", - "proto": "HYPNO_SHADOW" - }, - "219": { - "name": "Purified", - "proto": "HYPNO_PURIFIED" - } - }, - "default_form_id": 217, - "pokedex_id": 97, - "genId": "1", - "generation": "Kanto", - "types": [ - "Psychic" - ], - "attack": 144, - "defense": 193, - "stamina": 198, - "height": 1.6, - "weight": 75.6, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Zen Headbutt", - "Confusion" - ], - "charged_moves": [ - "Futuresight", - "Psychic", - "Focus Blast", - "Fire Punch", - "Ice Punch", - "Thunder Punch", - "Shadow Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "98": { - "name": "Krabby", - "forms": { - "870": { - "name": "Normal", - "proto": "KRABBY_NORMAL", - "evolutions": [ - { - "pokemon": 99, - "form": 873 - } - ] - }, - "871": { - "name": "Shadow", - "proto": "KRABBY_SHADOW", - "evolutions": [ - { - "pokemon": 99, - "form": 874 - } - ] - }, - "872": { - "name": "Purified", - "proto": "KRABBY_PURIFIED", - "evolutions": [ - { - "pokemon": 99, - "form": 875 - } - ] - } - }, - "default_form_id": 870, - "pokedex_id": 98, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 181, - "defense": 124, - "stamina": 102, - "height": 0.4, - "weight": 6.5, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Bubble", - "Mud Shot" - ], - "charged_moves": [ - "Vice Grip", - "Bubble Beam", - "Water Pulse" - ], - "evolutions": [ - { - "pokemon": 99, - "form": 873 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "99": { - "name": "Kingler", - "forms": { - "873": { - "name": "Normal", - "proto": "KINGLER_NORMAL" - }, - "874": { - "name": "Shadow", - "proto": "KINGLER_SHADOW" - }, - "875": { - "name": "Purified", - "proto": "KINGLER_PURIFIED" - } - }, - "default_form_id": 873, - "pokedex_id": 99, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 240, - "defense": 181, - "stamina": 146, - "height": 1.3, - "weight": 60, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Bubble", - "Metal Claw" - ], - "charged_moves": [ - "Vice Grip", - "X Scissor", - "Water Pulse", - "Crabhammer" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "100": { - "name": "Voltorb", - "forms": { - "1047": { - "name": "Normal", - "proto": "VOLTORB_NORMAL" - }, - "1048": { - "name": "Shadow", - "proto": "VOLTORB_SHADOW" - }, - "1049": { - "name": "Purified", - "proto": "VOLTORB_PURIFIED" - } - }, - "default_form_id": 1047, - "pokedex_id": 100, - "genId": "1", - "generation": "Kanto", - "types": [ - "Electric" - ], - "attack": 109, - "defense": 111, - "stamina": 120, - "height": 0.5, - "weight": 10.4, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Spark", - "Tackle" - ], - "charged_moves": [ - "Discharge", - "Thunderbolt", - "Gyro Ball" - ], - "evolutions": [ - { - "pokemon": 101 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "101": { - "name": "Electrode", - "forms": { - "1050": { - "name": "Normal", - "proto": "ELECTRODE_NORMAL" - }, - "1051": { - "name": "Shadow", - "proto": "ELECTRODE_SHADOW" - }, - "1052": { - "name": "Purified", - "proto": "ELECTRODE_PURIFIED" - } - }, - "default_form_id": 1050, - "pokedex_id": 101, - "genId": "1", - "generation": "Kanto", - "types": [ - "Electric" - ], - "attack": 173, - "defense": 173, - "stamina": 155, - "height": 1.2, - "weight": 66.6, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Spark", - "Volt Switch" - ], - "charged_moves": [ - "Discharge", - "Thunderbolt", - "Hyper Beam", - "Foul Play" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "102": { - "name": "Exeggcute", - "forms": { - "729": { - "name": "Normal", - "proto": "EXEGGCUTE_NORMAL", - "evolutions": [ - { - "pokemon": 103, - "form": 77 - } - ] - }, - "730": { - "name": "Shadow", - "proto": "EXEGGCUTE_SHADOW", - "evolutions": [ - { - "pokemon": 103, - "form": 732 - } - ] - }, - "731": { - "name": "Purified", - "proto": "EXEGGCUTE_PURIFIED", - "evolutions": [ - { - "pokemon": 103, - "form": 733 - } - ] - } - }, - "default_form_id": 729, - "pokedex_id": 102, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass", - "Psychic" - ], - "attack": 107, - "defense": 125, - "stamina": 155, - "height": 0.4, - "weight": 2.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Confusion", - "Bullet Seed" - ], - "charged_moves": [ - "Seed Bomb", - "Psychic", - "Ancient Power" - ], - "evolutions": [ - { - "pokemon": 103, - "form": 77 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "103": { - "name": "Exeggutor", - "forms": { - "77": { - "name": "Normal", - "proto": "EXEGGUTOR_NORMAL" - }, - "78": { - "name": "Alola", - "proto": "EXEGGUTOR_ALOLA", - "attack": 230, - "defense": 153, - "stamina": 216, - "height": 10.9, - "weight": 415.6, - "quick_moves": [ - "Bullet Seed", - "Dragon Tail" - ], - "charged_moves": [ - "Seed Bomb", - "Dragon Pulse", - "Solar Beam" - ], - "types": [ - "Grass", - "Dragon" - ] - }, - "732": { - "name": "Shadow", - "proto": "EXEGGUTOR_SHADOW" - }, - "733": { - "name": "Purified", - "proto": "EXEGGUTOR_PURIFIED" - } - }, - "default_form_id": 77, - "pokedex_id": 103, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass", - "Psychic" - ], - "attack": 233, - "defense": 149, - "stamina": 216, - "height": 2, - "weight": 120, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Bullet Seed", - "Extrasensory", - "Confusion" - ], - "charged_moves": [ - "Seed Bomb", - "Psychic", - "Solar Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "104": { - "name": "Cubone", - "forms": { - "224": { - "name": "Normal", - "proto": "CUBONE_NORMAL", - "evolutions": [ - { - "pokemon": 105, - "form": 79 - } - ] - }, - "225": { - "name": "Shadow", - "proto": "CUBONE_SHADOW", - "evolutions": [ - { - "pokemon": 105, - "form": 227 - } - ] - }, - "226": { - "name": "Purified", - "proto": "CUBONE_PURIFIED", - "evolutions": [ - { - "pokemon": 105, - "form": 228 - } - ] - } - }, - "default_form_id": 224, - "pokedex_id": 104, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ground" - ], - "attack": 90, - "defense": 144, - "stamina": 137, - "height": 0.4, - "weight": 6.5, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Mud Slap", - "Rock Smash" - ], - "charged_moves": [ - "Bone Club", - "Dig", - "Bulldoze" - ], - "evolutions": [ - { - "pokemon": 105, - "form": 79 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "105": { - "name": "Marowak", - "forms": { - "79": { - "name": "Normal", - "proto": "MAROWAK_NORMAL" - }, - "80": { - "name": "Alola", - "proto": "MAROWAK_ALOLA", - "height": 1, - "weight": 34, - "quick_moves": [ - "Hex", - "Rock Smash", - "Fire Spin" - ], - "charged_moves": [ - "Bone Club", - "Shadow Ball", - "Fire Blast", - "Flame Wheel" - ], - "types": [ - "Fire", - "Ghost" - ] - }, - "227": { - "name": "Shadow", - "proto": "MAROWAK_SHADOW" - }, - "228": { - "name": "Purified", - "proto": "MAROWAK_PURIFIED" - } - }, - "default_form_id": 79, - "pokedex_id": 105, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ground" - ], - "attack": 144, - "defense": 186, - "stamina": 155, - "height": 1, - "weight": 45, - "flee_rate": 0.06, - "capture_rate": 0.15, - "quick_moves": [ - "Mud Slap", - "Rock Smash" - ], - "charged_moves": [ - "Bone Club", - "Dig", - "Earthquake" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "106": { - "name": "Hitmonlee", - "forms": { - "713": { - "name": "Normal", - "proto": "HITMONLEE_NORMAL" - }, - "714": { - "name": "Shadow", - "proto": "HITMONLEE_SHADOW" - }, - "715": { - "name": "Purified", - "proto": "HITMONLEE_PURIFIED" - } - }, - "default_form_id": 713, - "pokedex_id": 106, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fighting" - ], - "attack": 224, - "defense": 181, - "stamina": 137, - "height": 1.5, - "weight": 49.8, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Low Kick", - "Rock Smash" - ], - "charged_moves": [ - "Close Combat", - "Low Sweep", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "107": { - "name": "Hitmonchan", - "forms": { - "277": { - "name": "Normal", - "proto": "HITMONCHAN_NORMAL" - }, - "278": { - "name": "Shadow", - "proto": "HITMONCHAN_SHADOW" - }, - "279": { - "name": "Purified", - "proto": "HITMONCHAN_PURIFIED" - } - }, - "default_form_id": 277, - "pokedex_id": 107, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fighting" - ], - "attack": 193, - "defense": 197, - "stamina": 137, - "height": 1.4, - "weight": 50.2, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Bullet Punch", - "Counter" - ], - "charged_moves": [ - "Fire Punch", - "Ice Punch", - "Thunder Punch", - "Close Combat", - "Power Up" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "108": { - "name": "Lickitung", - "forms": { - "1053": { - "name": "Normal", - "proto": "LICKITUNG_NORMAL" - }, - "1054": { - "name": "Shadow", - "proto": "LICKITUNG_SHADOW" - }, - "1055": { - "name": "Purified", - "proto": "LICKITUNG_PURIFIED" - } - }, - "default_form_id": 1053, - "pokedex_id": 108, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 108, - "defense": 137, - "stamina": 207, - "height": 1.2, - "weight": 65.5, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Lick", - "Zen Headbutt" - ], - "charged_moves": [ - "Hyper Beam", - "Stomp", - "Power Whip" - ], - "evolutions": [ - { - "pokemon": 463 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "109": { - "name": "Koffing", - "forms": { - "703": { - "name": "Normal", - "proto": "KOFFING_NORMAL", - "evolutions": [ - { - "pokemon": 110, - "form": 706 - } - ] - }, - "704": { - "name": "Shadow", - "proto": "KOFFING_SHADOW", - "evolutions": [ - { - "pokemon": 110, - "form": 707 - } - ] - }, - "705": { - "name": "Purified", - "proto": "KOFFING_PURIFIED", - "evolutions": [ - { - "pokemon": 110, - "form": 708 - } - ] - } - }, - "default_form_id": 703, - "pokedex_id": 109, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison" - ], - "attack": 119, - "defense": 141, - "stamina": 120, - "height": 0.6, - "weight": 1, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Infestation" - ], - "charged_moves": [ - "Sludge", - "Sludge Bomb", - "Dark Pulse" - ], - "evolutions": [ - { - "pokemon": 110, - "form": 706 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "110": { - "name": "Weezing", - "forms": { - "706": { - "name": "Normal", - "proto": "WEEZING_NORMAL" - }, - "707": { - "name": "Shadow", - "proto": "WEEZING_SHADOW" - }, - "708": { - "name": "Purified", - "proto": "WEEZING_PURIFIED" - }, - "944": { - "name": "Galarian", - "proto": "WEEZING_GALARIAN", - "height": 3, - "weight": 16, - "quick_moves": [ - "Tackle" - ], - "charged_moves": [ - "Sludge", - "Hyper Beam", - "Play Rough", - "Hyper Beam", - "Overheat" - ], - "types": [ - "Poison", - "Fairy" - ] - } - }, - "default_form_id": 706, - "pokedex_id": 110, - "genId": "1", - "generation": "Kanto", - "types": [ - "Poison" - ], - "attack": 174, - "defense": 197, - "stamina": 163, - "height": 1.2, - "weight": 9.5, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Infestation" - ], - "charged_moves": [ - "Sludge Bomb", - "Shadow Ball", - "Dark Pulse", - "Thunderbolt" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "111": { - "name": "Rhyhorn", - "forms": { - "846": { - "name": "Normal", - "proto": "RHYHORN_NORMAL", - "evolutions": [ - { - "pokemon": 112, - "form": 849 - } - ] - }, - "847": { - "name": "Shadow", - "proto": "RHYHORN_SHADOW", - "evolutions": [ - { - "pokemon": 112, - "form": 850 - } - ] - }, - "848": { - "name": "Purified", - "proto": "RHYHORN_PURIFIED", - "evolutions": [ - { - "pokemon": 112, - "form": 851 - } - ] - } - }, - "default_form_id": 846, - "pokedex_id": 111, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ground", - "Rock" - ], - "attack": 140, - "defense": 127, - "stamina": 190, - "height": 1, - "weight": 115, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Mud Slap", - "Rock Smash" - ], - "charged_moves": [ - "Bulldoze", - "Horn Attack", - "Stomp" - ], - "evolutions": [ - { - "pokemon": 112, - "form": 849 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "112": { - "name": "Rhydon", - "forms": { - "849": { - "name": "Normal", - "proto": "RHYDON_NORMAL", - "evolutions": [ - { - "pokemon": 464, - "form": 852 - } - ] - }, - "850": { - "name": "Shadow", - "proto": "RHYDON_SHADOW", - "evolutions": [ - { - "pokemon": 464, - "form": 853 - } - ] - }, - "851": { - "name": "Purified", - "proto": "RHYDON_PURIFIED", - "evolutions": [ - { - "pokemon": 464, - "form": 854 - } - ] - } - }, - "default_form_id": 849, - "pokedex_id": 112, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ground", - "Rock" - ], - "attack": 222, - "defense": 171, - "stamina": 233, - "height": 1.9, - "weight": 120, - "flee_rate": 0.06, - "capture_rate": 0.05, - "quick_moves": [ - "Mud Slap", - "Rock Smash" - ], - "charged_moves": [ - "Surf", - "Earthquake", - "Stone Edge" - ], - "evolutions": [ - { - "pokemon": 464, - "form": 852 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "113": { - "name": "Chansey", - "forms": { - "1056": { - "name": "Normal", - "proto": "CHANSEY_NORMAL" - }, - "1057": { - "name": "Shadow", - "proto": "CHANSEY_SHADOW" - }, - "1058": { - "name": "Purified", - "proto": "CHANSEY_PURIFIED" - } - }, - "default_form_id": 1056, - "pokedex_id": 113, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 60, - "defense": 128, - "stamina": 487, - "height": 1.1, - "weight": 34.6, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Pound", - "Zen Headbutt" - ], - "charged_moves": [ - "Psychic", - "Hyper Beam", - "Dazzling Gleam" - ], - "evolutions": [ - { - "pokemon": 242 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "114": { - "name": "Tangela", - "forms": { - "1059": { - "name": "Normal", - "proto": "TANGELA_NORMAL", - "evolutions": [ - { - "pokemon": 465, - "form": 1823 - } - ] - }, - "1060": { - "name": "Shadow", - "proto": "TANGELA_SHADOW", - "evolutions": [ - { - "pokemon": 465, - "form": 1824 - } - ] - }, - "1061": { - "name": "Purified", - "proto": "TANGELA_PURIFIED", - "evolutions": [ - { - "pokemon": 465, - "form": 1825 - } - ] - } - }, - "default_form_id": 1059, - "pokedex_id": 114, - "genId": "1", - "generation": "Kanto", - "types": [ - "Grass" - ], - "attack": 183, - "defense": 169, - "stamina": 163, - "height": 1, - "weight": 35, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Vine Whip", - "Infestation" - ], - "charged_moves": [ - "Grass Knot", - "Sludge Bomb", - "Solar Beam" - ], - "evolutions": [ - { - "pokemon": 465, - "form": 1823 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "115": { - "name": "Kangaskhan", - "forms": { - "839": { - "name": "Normal", - "proto": "KANGASKHAN_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "840": { - "name": "Shadow", - "proto": "KANGASKHAN_SHADOW" - }, - "841": { - "name": "Purified", - "proto": "KANGASKHAN_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 839, - "pokedex_id": 115, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 181, - "defense": 165, - "stamina": 233, - "height": 2.2, - "weight": 80, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Mud Slap", - "Low Kick" - ], - "charged_moves": [ - "Crunch", - "Earthquake", - "Outrage", - "Power Up" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 246, - "defense": 210, - "stamina": 233, - "unreleased": true - } - } - }, - "116": { - "name": "Horsea", - "forms": { - "1062": { - "name": "Normal", - "proto": "HORSEA_NORMAL", - "evolutions": [ - { - "pokemon": 117, - "form": 1065 - } - ] - }, - "1063": { - "name": "Shadow", - "proto": "HORSEA_SHADOW", - "evolutions": [ - { - "pokemon": 117, - "form": 1066 - } - ] - }, - "1064": { - "name": "Purified", - "proto": "HORSEA_PURIFIED", - "evolutions": [ - { - "pokemon": 117, - "form": 1067 - } - ] - } - }, - "default_form_id": 1062, - "pokedex_id": 116, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 129, - "defense": 103, - "stamina": 102, - "height": 0.4, - "weight": 8, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Water Gun", - "Bubble" - ], - "charged_moves": [ - "Bubble Beam", - "Dragon Pulse", - "Flash Cannon" - ], - "evolutions": [ - { - "pokemon": 117, - "form": 1065 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "117": { - "name": "Seadra", - "forms": { - "1065": { - "name": "Normal", - "proto": "SEADRA_NORMAL", - "evolutions": [ - { - "pokemon": 230, - "form": 1298 - } - ] - }, - "1066": { - "name": "Shadow", - "proto": "SEADRA_SHADOW", - "evolutions": [ - { - "pokemon": 230, - "form": 1299 - } - ] - }, - "1067": { - "name": "Purified", - "proto": "SEADRA_PURIFIED", - "evolutions": [ - { - "pokemon": 230, - "form": 1300 - } - ] - } - }, - "default_form_id": 1065, - "pokedex_id": 117, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 187, - "defense": 156, - "stamina": 146, - "height": 1.2, - "weight": 25, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Dragon Breath" - ], - "charged_moves": [ - "Aurora Beam", - "Dragon Pulse", - "Hydro Pump" - ], - "evolutions": [ - { - "pokemon": 230, - "form": 1298 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "118": { - "name": "Goldeen", - "forms": { - "1068": { - "name": "Normal", - "proto": "GOLDEEN_NORMAL" - }, - "1069": { - "name": "Shadow", - "proto": "GOLDEEN_SHADOW" - }, - "1070": { - "name": "Purified", - "proto": "GOLDEEN_PURIFIED" - } - }, - "default_form_id": 1068, - "pokedex_id": 118, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 123, - "defense": 110, - "stamina": 128, - "height": 0.6, - "weight": 15, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Peck", - "Mud Shot" - ], - "charged_moves": [ - "Water Pulse", - "Horn Attack", - "Aqua Tail" - ], - "evolutions": [ - { - "pokemon": 119 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "119": { - "name": "Seaking", - "forms": { - "1071": { - "name": "Normal", - "proto": "SEAKING_NORMAL" - }, - "1072": { - "name": "Shadow", - "proto": "SEAKING_SHADOW" - }, - "1073": { - "name": "Purified", - "proto": "SEAKING_PURIFIED" - } - }, - "default_form_id": 1071, - "pokedex_id": 119, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 175, - "defense": 147, - "stamina": 190, - "height": 1.3, - "weight": 39, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Peck", - "Waterfall" - ], - "charged_moves": [ - "Ice Beam", - "Water Pulse", - "Megahorn" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "120": { - "name": "Staryu", - "forms": { - "1074": { - "name": "Normal", - "proto": "STARYU_NORMAL" - }, - "1075": { - "name": "Shadow", - "proto": "STARYU_SHADOW" - }, - "1076": { - "name": "Purified", - "proto": "STARYU_PURIFIED" - } - }, - "default_form_id": 1074, - "pokedex_id": 120, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 137, - "defense": 112, - "stamina": 102, - "height": 0.8, - "weight": 34.5, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Water Gun" - ], - "charged_moves": [ - "Swift", - "Bubble Beam", - "Power Gem" - ], - "evolutions": [ - { - "pokemon": 121 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "121": { - "name": "Starmie", - "forms": { - "1077": { - "name": "Normal", - "proto": "STARMIE_NORMAL" - }, - "1078": { - "name": "Shadow", - "proto": "STARMIE_SHADOW" - }, - "1079": { - "name": "Purified", - "proto": "STARMIE_PURIFIED" - } - }, - "default_form_id": 1077, - "pokedex_id": 121, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water", - "Psychic" - ], - "attack": 210, - "defense": 184, - "stamina": 155, - "height": 1.1, - "weight": 80, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Hidden Power", - "Water Gun" - ], - "charged_moves": [ - "Hydro Pump", - "Power Gem", - "Psychic", - "Thunder", - "Ice Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "122": { - "name": "Mr Mime", - "forms": { - "1080": { - "name": "Normal", - "proto": "MR_MIME_NORMAL" - }, - "1081": { - "name": "Shadow", - "proto": "MR_MIME_SHADOW" - }, - "1082": { - "name": "Purified", - "proto": "MR_MIME_PURIFIED" - }, - "2339": { - "name": "Galarian", - "proto": "MR_MIME_GALARIAN", - "evolutions": [ - { - "pokemon": 866, - "form": 2513 - } - ], - "attack": 183, - "defense": 169, - "stamina": 137, - "height": 1.4, - "weight": 56.8, - "charged_moves": [ - "Psybeam", - "Psychic", - "Ice Punch" - ], - "types": [ - "Ice", - "Psychic" - ] - } - }, - "default_form_id": 1080, - "pokedex_id": 122, - "genId": "1", - "generation": "Kanto", - "types": [ - "Psychic", - "Fairy" - ], - "attack": 192, - "defense": 205, - "stamina": 120, - "height": 1.3, - "weight": 54.5, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Confusion", - "Zen Headbutt" - ], - "charged_moves": [ - "Psybeam", - "Psychic", - "Shadow Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "123": { - "name": "Scyther", - "forms": { - "247": { - "name": "Normal", - "proto": "SCYTHER_NORMAL", - "evolutions": [ - { - "pokemon": 212, - "form": 250 - } - ] - }, - "248": { - "name": "Shadow", - "proto": "SCYTHER_SHADOW", - "evolutions": [ - { - "pokemon": 212, - "form": 251 - } - ] - }, - "249": { - "name": "Purified", - "proto": "SCYTHER_PURIFIED", - "evolutions": [ - { - "pokemon": 212, - "form": 252 - } - ] - } - }, - "default_form_id": 247, - "pokedex_id": 123, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug", - "Flying" - ], - "attack": 218, - "defense": 170, - "stamina": 172, - "height": 1.5, - "weight": 56, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Fury Cutter", - "Air Slash" - ], - "charged_moves": [ - "Night Slash", - "X Scissor", - "Aerial Ace" - ], - "evolutions": [ - { - "pokemon": 212, - "form": 250 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "124": { - "name": "Jynx", - "forms": { - "1083": { - "name": "Normal", - "proto": "JYNX_NORMAL" - }, - "1084": { - "name": "Shadow", - "proto": "JYNX_SHADOW" - }, - "1085": { - "name": "Purified", - "proto": "JYNX_PURIFIED" - } - }, - "default_form_id": 1083, - "pokedex_id": 124, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ice", - "Psychic" - ], - "attack": 223, - "defense": 151, - "stamina": 163, - "height": 1.4, - "weight": 40.6, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Frost Breath", - "Confusion" - ], - "charged_moves": [ - "Draining Kiss", - "Avalanche", - "Psyshock", - "Focus Blast" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "125": { - "name": "Electabuzz", - "forms": { - "640": { - "name": "Normal", - "proto": "ELECTABUZZ_NORMAL", - "evolutions": [ - { - "pokemon": 466, - "form": 643 - } - ] - }, - "641": { - "name": "Shadow", - "proto": "ELECTABUZZ_SHADOW", - "evolutions": [ - { - "pokemon": 466, - "form": 644 - } - ] - }, - "642": { - "name": "Purified", - "proto": "ELECTABUZZ_PURIFIED", - "evolutions": [ - { - "pokemon": 466, - "form": 645 - } - ] - } - }, - "default_form_id": 640, - "pokedex_id": 125, - "genId": "1", - "generation": "Kanto", - "types": [ - "Electric" - ], - "attack": 198, - "defense": 158, - "stamina": 163, - "height": 1.1, - "weight": 30, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Thunder Shock", - "Low Kick" - ], - "charged_moves": [ - "Thunder Punch", - "Thunderbolt", - "Thunder" - ], - "evolutions": [ - { - "pokemon": 466, - "form": 643 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "126": { - "name": "Magmar", - "forms": { - "634": { - "name": "Normal", - "proto": "MAGMAR_NORMAL", - "evolutions": [ - { - "pokemon": 467, - "form": 637 - } - ] - }, - "635": { - "name": "Shadow", - "proto": "MAGMAR_SHADOW", - "evolutions": [ - { - "pokemon": 467, - "form": 638 - } - ] - }, - "636": { - "name": "Purified", - "proto": "MAGMAR_PURIFIED", - "evolutions": [ - { - "pokemon": 467, - "form": 639 - } - ] - } - }, - "default_form_id": 634, - "pokedex_id": 126, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire" - ], - "attack": 206, - "defense": 154, - "stamina": 163, - "height": 1.3, - "weight": 44.5, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Ember", - "Karate Chop" - ], - "charged_moves": [ - "Fire Blast", - "Fire Punch", - "Flamethrower" - ], - "evolutions": [ - { - "pokemon": 467, - "form": 637 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "127": { - "name": "Pinsir", - "forms": { - "898": { - "name": "Normal", - "proto": "PINSIR_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "899": { - "name": "Shadow", - "proto": "PINSIR_SHADOW" - }, - "900": { - "name": "Purified", - "proto": "PINSIR_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 898, - "pokedex_id": 127, - "genId": "1", - "generation": "Kanto", - "types": [ - "Bug" - ], - "attack": 238, - "defense": 182, - "stamina": 163, - "height": 1.5, - "weight": 55, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Rock Smash", - "Bug Bite", - "Fury Cutter" - ], - "charged_moves": [ - "Vice Grip", - "X Scissor", - "Close Combat", - "Super Power" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 305, - "defense": 231, - "stamina": 163, - "unreleased": true, - "types": [ - "Bug", - "Flying" - ] - } - } - }, - "128": { - "name": "Tauros", - "forms": { - "1086": { - "name": "Normal", - "proto": "TAUROS_NORMAL" - }, - "1087": { - "name": "Shadow", - "proto": "TAUROS_SHADOW" - }, - "1088": { - "name": "Purified", - "proto": "TAUROS_PURIFIED" - } - }, - "default_form_id": 1086, - "pokedex_id": 128, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 198, - "defense": 183, - "stamina": 181, - "height": 1.4, - "weight": 88.4, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Tackle", - "Zen Headbutt" - ], - "charged_moves": [ - "Horn Attack", - "Iron Head", - "Earthquake" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "129": { - "name": "Magikarp", - "forms": { - "253": { - "name": "Normal", - "proto": "MAGIKARP_NORMAL", - "evolutions": [ - { - "pokemon": 130, - "form": 256 - } - ] - }, - "254": { - "name": "Shadow", - "proto": "MAGIKARP_SHADOW", - "evolutions": [ - { - "pokemon": 130, - "form": 257 - } - ] - }, - "255": { - "name": "Purified", - "proto": "MAGIKARP_PURIFIED", - "evolutions": [ - { - "pokemon": 130, - "form": 258 - } - ] - } - }, - "default_form_id": 253, - "pokedex_id": 129, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 29, - "defense": 85, - "stamina": 85, - "height": 0.9, - "weight": 10, - "flee_rate": 0.15, - "capture_rate": 0.7, - "quick_moves": [ - "Splash" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 130, - "form": 256 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "130": { - "name": "Gyarados", - "forms": { - "256": { - "name": "Normal", - "proto": "GYARADOS_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "257": { - "name": "Shadow", - "proto": "GYARADOS_SHADOW" - }, - "258": { - "name": "Purified", - "proto": "GYARADOS_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 256, - "pokedex_id": 130, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water", - "Flying" - ], - "attack": 237, - "defense": 186, - "stamina": 216, - "height": 6.5, - "weight": 235, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Bite", - "Waterfall", - "Dragon Breath" - ], - "charged_moves": [ - "Hydro Pump", - "Crunch", - "Outrage", - "Twister" - ], - "temp_evolutions": { - "1": { - "attack": 292, - "defense": 247, - "stamina": 216, - "weight": 305, - "types": [ - "Water", - "Dark" - ] - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "131": { - "name": "Lapras", - "forms": { - "322": { - "name": "Normal", - "proto": "LAPRAS_NORMAL" - }, - "323": { - "name": "Shadow", - "proto": "LAPRAS_SHADOW" - }, - "324": { - "name": "Purified", - "proto": "LAPRAS_PURIFIED" - }, - "2585": { - "name": "Costume 2020", - "proto": "LAPRAS_COSTUME_2020" - } - }, - "default_form_id": 322, - "pokedex_id": 131, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water", - "Ice" - ], - "attack": 165, - "defense": 174, - "stamina": 277, - "height": 2.5, - "weight": 220, - "flee_rate": 0.09, - "capture_rate": 0.05, - "quick_moves": [ - "Frost Breath", - "Water Gun" - ], - "charged_moves": [ - "Hydro Pump", - "Surf", - "Blizzard", - "Skull Bash" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "132": { - "name": "Ditto", - "forms": { - "1089": { - "name": "Normal", - "proto": "DITTO_NORMAL" - }, - "1090": { - "name": "Shadow", - "proto": "DITTO_SHADOW" - }, - "1091": { - "name": "Purified", - "proto": "DITTO_PURIFIED" - } - }, - "default_form_id": 1089, - "pokedex_id": 132, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 91, - "defense": 91, - "stamina": 134, - "height": 0.3, - "weight": 4, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Transform" - ], - "charged_moves": [ - "Struggle" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "133": { - "name": "Eevee", - "forms": { - "1092": { - "name": "Normal", - "proto": "EEVEE_NORMAL" - }, - "1093": { - "name": "Shadow", - "proto": "EEVEE_SHADOW" - }, - "1094": { - "name": "Purified", - "proto": "EEVEE_PURIFIED" - } - }, - "default_form_id": 1092, - "pokedex_id": 133, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 104, - "defense": 114, - "stamina": 146, - "height": 0.3, - "weight": 6.5, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Quick Attack", - "Tackle" - ], - "charged_moves": [ - "Dig", - "Swift" - ], - "evolutions": [ - { - "pokemon": 134 - }, - { - "pokemon": 135 - }, - { - "pokemon": 136 - }, - { - "pokemon": 196 - }, - { - "pokemon": 197 - }, - { - "pokemon": 470 - }, - { - "pokemon": 471 - }, - { - "pokemon": 700 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "134": { - "name": "Vaporeon", - "forms": { - "1095": { - "name": "Normal", - "proto": "VAPOREON_NORMAL" - }, - "1096": { - "name": "Shadow", - "proto": "VAPOREON_SHADOW" - }, - "1097": { - "name": "Purified", - "proto": "VAPOREON_PURIFIED" - } - }, - "default_form_id": 1095, - "pokedex_id": 134, - "genId": "1", - "generation": "Kanto", - "types": [ - "Water" - ], - "attack": 205, - "defense": 161, - "stamina": 277, - "height": 1, - "weight": 29, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Water Gun" - ], - "charged_moves": [ - "Water Pulse", - "Hydro Pump", - "Aqua Tail" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "135": { - "name": "Jolteon", - "forms": { - "1098": { - "name": "Normal", - "proto": "JOLTEON_NORMAL" - }, - "1099": { - "name": "Shadow", - "proto": "JOLTEON_SHADOW" - }, - "1100": { - "name": "Purified", - "proto": "JOLTEON_PURIFIED" - } - }, - "default_form_id": 1098, - "pokedex_id": 135, - "genId": "1", - "generation": "Kanto", - "types": [ - "Electric" - ], - "attack": 232, - "defense": 182, - "stamina": 163, - "height": 0.8, - "weight": 24.5, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Thunder Shock", - "Volt Switch" - ], - "charged_moves": [ - "Discharge", - "Thunderbolt", - "Thunder" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "136": { - "name": "Flareon", - "forms": { - "1101": { - "name": "Normal", - "proto": "FLAREON_NORMAL" - }, - "1102": { - "name": "Shadow", - "proto": "FLAREON_SHADOW" - }, - "1103": { - "name": "Purified", - "proto": "FLAREON_PURIFIED" - } - }, - "default_form_id": 1101, - "pokedex_id": 136, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire" - ], - "attack": 246, - "defense": 179, - "stamina": 163, - "height": 0.9, - "weight": 25, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Ember", - "Fire Spin" - ], - "charged_moves": [ - "Fire Blast", - "Flamethrower", - "Overheat" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "137": { - "name": "Porygon", - "forms": { - "677": { - "name": "Normal", - "proto": "PORYGON_NORMAL", - "evolutions": [ - { - "pokemon": 233, - "form": 680 - } - ] - }, - "678": { - "name": "Shadow", - "proto": "PORYGON_SHADOW", - "evolutions": [ - { - "pokemon": 233, - "form": 681 - } - ] - }, - "679": { - "name": "Purified", - "proto": "PORYGON_PURIFIED", - "evolutions": [ - { - "pokemon": 233, - "form": 682 - } - ] - } - }, - "default_form_id": 677, - "pokedex_id": 137, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 153, - "defense": 136, - "stamina": 163, - "height": 0.8, - "weight": 36.5, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Charge Beam", - "Hidden Power" - ], - "charged_moves": [ - "Solar Beam", - "Hyper Beam", - "Zap Cannon" - ], - "evolutions": [ - { - "pokemon": 233, - "form": 680 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "138": { - "name": "Omanyte", - "forms": { - "740": { - "name": "Normal", - "proto": "OMANYTE_NORMAL", - "evolutions": [ - { - "pokemon": 139, - "form": 743 - } - ] - }, - "741": { - "name": "Shadow", - "proto": "OMANYTE_SHADOW", - "evolutions": [ - { - "pokemon": 139, - "form": 744 - } - ] - }, - "742": { - "name": "Purified", - "proto": "OMANYTE_PURIFIED", - "evolutions": [ - { - "pokemon": 139, - "form": 745 - } - ] - } - }, - "default_form_id": 740, - "pokedex_id": 138, - "genId": "1", - "generation": "Kanto", - "types": [ - "Rock", - "Water" - ], - "attack": 155, - "defense": 153, - "stamina": 111, - "height": 0.4, - "weight": 7.5, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Water Gun", - "Mud Shot" - ], - "charged_moves": [ - "Ancient Power", - "Bubble Beam", - "Rock Blast" - ], - "evolutions": [ - { - "pokemon": 139, - "form": 743 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "139": { - "name": "Omastar", - "forms": { - "743": { - "name": "Normal", - "proto": "OMASTAR_NORMAL" - }, - "744": { - "name": "Shadow", - "proto": "OMASTAR_SHADOW" - }, - "745": { - "name": "Purified", - "proto": "OMASTAR_PURIFIED" - } - }, - "default_form_id": 743, - "pokedex_id": 139, - "genId": "1", - "generation": "Kanto", - "types": [ - "Rock", - "Water" - ], - "attack": 207, - "defense": 201, - "stamina": 172, - "height": 1, - "weight": 35, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Mud Shot", - "Water Gun" - ], - "charged_moves": [ - "Ancient Power", - "Hydro Pump", - "Rock Blast" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "140": { - "name": "Kabuto", - "forms": { - "1104": { - "name": "Normal", - "proto": "KABUTO_NORMAL", - "evolutions": [ - { - "pokemon": 141, - "form": 1107 - } - ] - }, - "1105": { - "name": "Shadow", - "proto": "KABUTO_SHADOW", - "evolutions": [ - { - "pokemon": 141, - "form": 1108 - } - ] - }, - "1106": { - "name": "Purified", - "proto": "KABUTO_PURIFIED", - "evolutions": [ - { - "pokemon": 141, - "form": 1109 - } - ] - } - }, - "default_form_id": 1104, - "pokedex_id": 140, - "genId": "1", - "generation": "Kanto", - "types": [ - "Rock", - "Water" - ], - "attack": 148, - "defense": 140, - "stamina": 102, - "height": 0.5, - "weight": 11.5, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Scratch", - "Mud Shot" - ], - "charged_moves": [ - "Ancient Power", - "Aqua Jet", - "Rock Tomb" - ], - "evolutions": [ - { - "pokemon": 141, - "form": 1107 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "141": { - "name": "Kabutops", - "forms": { - "1107": { - "name": "Normal", - "proto": "KABUTOPS_NORMAL" - }, - "1108": { - "name": "Shadow", - "proto": "KABUTOPS_SHADOW" - }, - "1109": { - "name": "Purified", - "proto": "KABUTOPS_PURIFIED" - } - }, - "default_form_id": 1107, - "pokedex_id": 141, - "genId": "1", - "generation": "Kanto", - "types": [ - "Rock", - "Water" - ], - "attack": 220, - "defense": 186, - "stamina": 155, - "height": 1.3, - "weight": 40.5, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Mud Shot", - "Rock Smash", - "Waterfall" - ], - "charged_moves": [ - "Ancient Power", - "Water Pulse", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "142": { - "name": "Aerodactyl", - "forms": { - "1110": { - "name": "Normal", - "proto": "AERODACTYL_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1111": { - "name": "Shadow", - "proto": "AERODACTYL_SHADOW" - }, - "1112": { - "name": "Purified", - "proto": "AERODACTYL_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1110, - "pokedex_id": 142, - "genId": "1", - "generation": "Kanto", - "types": [ - "Rock", - "Flying" - ], - "attack": 221, - "defense": 159, - "stamina": 190, - "height": 1.8, - "weight": 59, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Steel Wing", - "Bite", - "Rock Throw" - ], - "charged_moves": [ - "Ancient Power", - "Iron Head", - "Hyper Beam", - "Rock Slide", - "Earth Power" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 292, - "defense": 210, - "stamina": 190, - "unreleased": true - } - } - }, - "143": { - "name": "Snorlax", - "forms": { - "199": { - "name": "Normal", - "proto": "SNORLAX_NORMAL" - }, - "200": { - "name": "Shadow", - "proto": "SNORLAX_SHADOW" - }, - "201": { - "name": "Purified", - "proto": "SNORLAX_PURIFIED" - } - }, - "default_form_id": 199, - "pokedex_id": 143, - "genId": "1", - "generation": "Kanto", - "types": [ - "Normal" - ], - "attack": 190, - "defense": 169, - "stamina": 330, - "height": 2.1, - "weight": 460, - "flee_rate": 0.09, - "capture_rate": 0.05, - "quick_moves": [ - "Zen Headbutt", - "Lick" - ], - "charged_moves": [ - "Heavy Slam", - "Hyper Beam", - "Earthquake", - "Outrage", - "Skull Bash", - "Body Slam", - "Super Power" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "144": { - "name": "Articuno", - "forms": { - "716": { - "name": "Normal", - "proto": "ARTICUNO_NORMAL" - }, - "717": { - "name": "Shadow", - "proto": "ARTICUNO_SHADOW" - }, - "718": { - "name": "Purified", - "proto": "ARTICUNO_PURIFIED" - } - }, - "default_form_id": 716, - "pokedex_id": 144, - "genId": "1", - "generation": "Kanto", - "types": [ - "Ice", - "Flying" - ], - "attack": 192, - "defense": 236, - "stamina": 207, - "height": 1.7, - "weight": 55.4, - "flee_rate": 0.1, - "capture_rate": 0.03, - "quick_moves": [ - "Frost Breath", - "Ice Shard" - ], - "charged_moves": [ - "Ice Beam", - "Icy Wind", - "Blizzard", - "Ancient Power" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "145": { - "name": "Zapdos", - "forms": { - "773": { - "name": "Normal", - "proto": "ZAPDOS_NORMAL" - }, - "774": { - "name": "Shadow", - "proto": "ZAPDOS_SHADOW" - }, - "775": { - "name": "Purified", - "proto": "ZAPDOS_PURIFIED" - } - }, - "default_form_id": 773, - "pokedex_id": 145, - "genId": "1", - "generation": "Kanto", - "types": [ - "Electric", - "Flying" - ], - "attack": 253, - "defense": 185, - "stamina": 207, - "height": 1.6, - "weight": 52.6, - "flee_rate": 0.1, - "capture_rate": 0.03, - "quick_moves": [ - "Charge Beam" - ], - "charged_moves": [ - "Zap Cannon", - "Thunderbolt", - "Thunder", - "Ancient Power", - "Drill Peck" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "146": { - "name": "Moltres", - "forms": { - "836": { - "name": "Normal", - "proto": "MOLTRES_NORMAL" - }, - "837": { - "name": "Shadow", - "proto": "MOLTRES_SHADOW" - }, - "838": { - "name": "Purified", - "proto": "MOLTRES_PURIFIED" - } - }, - "default_form_id": 836, - "pokedex_id": 146, - "genId": "1", - "generation": "Kanto", - "types": [ - "Fire", - "Flying" - ], - "attack": 251, - "defense": 181, - "stamina": 207, - "height": 2, - "weight": 60, - "flee_rate": 0.1, - "capture_rate": 0.03, - "quick_moves": [ - "Fire Spin", - "Wing Attack" - ], - "charged_moves": [ - "Fire Blast", - "Heat Wave", - "Overheat", - "Ancient Power" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "147": { - "name": "Dratini", - "forms": { - "190": { - "name": "Normal", - "proto": "DRATINI_NORMAL", - "evolutions": [ - { - "pokemon": 148, - "form": 193 - } - ] - }, - "191": { - "name": "Shadow", - "proto": "DRATINI_SHADOW", - "evolutions": [ - { - "pokemon": 148, - "form": 194 - } - ] - }, - "192": { - "name": "Purified", - "proto": "DRATINI_PURIFIED", - "evolutions": [ - { - "pokemon": 148, - "form": 195 - } - ] - } - }, - "default_form_id": 190, - "pokedex_id": 147, - "genId": "1", - "generation": "Kanto", - "types": [ - "Dragon" - ], - "attack": 119, - "defense": 91, - "stamina": 121, - "height": 1.8, - "weight": 3.3, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Dragon Breath", - "Iron Tail" - ], - "charged_moves": [ - "Wrap", - "Twister", - "Aqua Tail" - ], - "evolutions": [ - { - "pokemon": 148, - "form": 193 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "148": { - "name": "Dragonair", - "forms": { - "193": { - "name": "Normal", - "proto": "DRAGONAIR_NORMAL", - "evolutions": [ - { - "pokemon": 149, - "form": 196 - } - ] - }, - "194": { - "name": "Shadow", - "proto": "DRAGONAIR_SHADOW", - "evolutions": [ - { - "pokemon": 149, - "form": 197 - } - ] - }, - "195": { - "name": "Purified", - "proto": "DRAGONAIR_PURIFIED", - "evolutions": [ - { - "pokemon": 149, - "form": 198 - } - ] - } - }, - "default_form_id": 193, - "pokedex_id": 148, - "genId": "1", - "generation": "Kanto", - "types": [ - "Dragon" - ], - "attack": 163, - "defense": 135, - "stamina": 156, - "height": 4, - "weight": 16.5, - "flee_rate": 0.06, - "capture_rate": 0.1, - "quick_moves": [ - "Dragon Breath", - "Iron Tail" - ], - "charged_moves": [ - "Wrap", - "Aqua Tail", - "Dragon Pulse" - ], - "evolutions": [ - { - "pokemon": 149, - "form": 196 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "149": { - "name": "Dragonite", - "forms": { - "196": { - "name": "Normal", - "proto": "DRAGONITE_NORMAL" - }, - "197": { - "name": "Shadow", - "proto": "DRAGONITE_SHADOW" - }, - "198": { - "name": "Purified", - "proto": "DRAGONITE_PURIFIED" - }, - "2333": { - "name": "Costume 2020", - "proto": "DRAGONITE_COSTUME_2020" - } - }, - "default_form_id": 196, - "pokedex_id": 149, - "genId": "1", - "generation": "Kanto", - "types": [ - "Dragon", - "Flying" - ], - "attack": 263, - "defense": 198, - "stamina": 209, - "height": 2.2, - "weight": 210, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Dragon Tail", - "Steel Wing", - "Dragon Breath" - ], - "charged_moves": [ - "Hurricane", - "Hyper Beam", - "Outrage", - "Dragon Claw" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "150": { - "name": "Mewtwo", - "forms": { - "133": { - "name": "A", - "proto": "MEWTWO_A", - "attack": 182, - "defense": 278, - "stamina": 214, - "quick_moves": [ - "Confusion", - "Iron Tail" - ], - "charged_moves": [ - "Rock Slide", - "Dynamic Punch", - "Earthquake", - "Futuresight" - ] - }, - "135": { - "name": "Normal", - "proto": "MEWTWO_NORMAL", - "temp_evolutions": { - "2": {}, - "3": {} - } - }, - "1113": { - "name": "Shadow", - "proto": "MEWTWO_SHADOW" - }, - "1114": { - "name": "Purified", - "proto": "MEWTWO_PURIFIED", - "temp_evolutions": { - "2": {}, - "3": {} - } - } - }, - "default_form_id": 135, - "pokedex_id": 150, - "genId": "1", - "generation": "Kanto", - "types": [ - "Psychic" - ], - "attack": 300, - "defense": 182, - "stamina": 214, - "height": 2, - "weight": 122, - "flee_rate": 0.1, - "capture_rate": 0.02, - "quick_moves": [ - "Psycho Cut", - "Confusion" - ], - "charged_moves": [ - "Psychic", - "Thunderbolt", - "Ice Beam", - "Focus Blast", - "Flamethrower" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100, - "temp_evolutions": { - "2": { - "attack": 412, - "defense": 222, - "stamina": 235, - "unreleased": true, - "types": [ - "Psychic", - "Fighting" - ] - }, - "3": { - "attack": 426, - "defense": 229, - "stamina": 235, - "unreleased": true - } - } - }, - "151": { - "name": "Mew", - "forms": { - "1115": { - "name": "Normal", - "proto": "MEW_NORMAL" - }, - "1116": { - "name": "Shadow", - "proto": "MEW_SHADOW" - }, - "1117": { - "name": "Purified", - "proto": "MEW_PURIFIED" - } - }, - "default_form_id": 1115, - "pokedex_id": 151, - "genId": "1", - "generation": "Kanto", - "types": [ - "Psychic" - ], - "attack": 210, - "defense": 210, - "stamina": 225, - "height": 0.4, - "weight": 4, - "capture_rate": 100, - "quick_moves": [ - "Pound", - "Steel Wing", - "Charge Beam", - "Shadow Claw", - "Volt Switch", - "Struggle Bug", - "Frost Breath", - "Dragon Tail", - "Infestation", - "Poison Jab", - "Rock Smash", - "Snarl", - "Cut", - "Waterfall" - ], - "charged_moves": [ - "Psychic", - "Ancient Power", - "Dragon Claw", - "Psyshock", - "Ice Beam", - "Blizzard", - "Hyper Beam", - "Solar Beam", - "Thunderbolt", - "Thunder", - "Flame Charge", - "Low Sweep", - "Overheat", - "Focus Blast", - "Energy Ball", - "Stone Edge", - "Gyro Ball", - "Bulldoze", - "Rock Slide", - "Grass Knot", - "Flash Cannon", - "Wild Charge", - "Dark Pulse", - "Dazzling Gleam", - "Surf" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 4, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "152": { - "name": "Chikorita", - "forms": { - "1118": { - "name": "Normal", - "proto": "CHIKORITA_NORMAL" - }, - "1119": { - "name": "Shadow", - "proto": "CHIKORITA_SHADOW" - }, - "1120": { - "name": "Purified", - "proto": "CHIKORITA_PURIFIED" - } - }, - "default_form_id": 1118, - "pokedex_id": 152, - "genId": "2", - "generation": "Johto", - "types": [ - "Grass" - ], - "attack": 92, - "defense": 122, - "stamina": 128, - "height": 0.89, - "weight": 6.4, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Vine Whip", - "Tackle" - ], - "charged_moves": [ - "Energy Ball", - "Grass Knot", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 153 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "153": { - "name": "Bayleef", - "forms": { - "1121": { - "name": "Normal", - "proto": "BAYLEEF_NORMAL" - }, - "1122": { - "name": "Shadow", - "proto": "BAYLEEF_SHADOW" - }, - "1123": { - "name": "Purified", - "proto": "BAYLEEF_PURIFIED" - } - }, - "default_form_id": 1121, - "pokedex_id": 153, - "genId": "2", - "generation": "Johto", - "types": [ - "Grass" - ], - "attack": 122, - "defense": 155, - "stamina": 155, - "height": 1.19, - "weight": 15.8, - "flee_rate": 0.07, - "capture_rate": 0.125, - "quick_moves": [ - "Razor Leaf", - "Tackle" - ], - "charged_moves": [ - "Energy Ball", - "Grass Knot", - "Ancient Power" - ], - "evolutions": [ - { - "pokemon": 154 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "154": { - "name": "Meganium", - "forms": { - "1124": { - "name": "Normal", - "proto": "MEGANIUM_NORMAL" - }, - "1125": { - "name": "Shadow", - "proto": "MEGANIUM_SHADOW" - }, - "1126": { - "name": "Purified", - "proto": "MEGANIUM_PURIFIED" - } - }, - "default_form_id": 1124, - "pokedex_id": 154, - "genId": "2", - "generation": "Johto", - "types": [ - "Grass" - ], - "attack": 168, - "defense": 202, - "stamina": 190, - "height": 1.8, - "weight": 100.5, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Razor Leaf", - "Vine Whip" - ], - "charged_moves": [ - "Petal Blizzard", - "Solar Beam", - "Earthquake" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "155": { - "name": "Cyndaquil", - "forms": { - "1127": { - "name": "Normal", - "proto": "CYNDAQUIL_NORMAL" - }, - "1128": { - "name": "Shadow", - "proto": "CYNDAQUIL_SHADOW" - }, - "1129": { - "name": "Purified", - "proto": "CYNDAQUIL_PURIFIED" - } - }, - "default_form_id": 1127, - "pokedex_id": 155, - "genId": "2", - "generation": "Johto", - "types": [ - "Fire" - ], - "attack": 116, - "defense": 93, - "stamina": 118, - "height": 0.51, - "weight": 7.9, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Ember", - "Tackle" - ], - "charged_moves": [ - "Flame Charge", - "Swift", - "Flamethrower" - ], - "evolutions": [ - { - "pokemon": 156 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "156": { - "name": "Quilava", - "forms": { - "1130": { - "name": "Normal", - "proto": "QUILAVA_NORMAL" - }, - "1131": { - "name": "Shadow", - "proto": "QUILAVA_SHADOW" - }, - "1132": { - "name": "Purified", - "proto": "QUILAVA_PURIFIED" - } - }, - "default_form_id": 1130, - "pokedex_id": 156, - "genId": "2", - "generation": "Johto", - "types": [ - "Fire" - ], - "attack": 158, - "defense": 126, - "stamina": 151, - "height": 0.89, - "weight": 19, - "flee_rate": 0.07, - "capture_rate": 0.125, - "quick_moves": [ - "Ember", - "Tackle" - ], - "charged_moves": [ - "Flame Charge", - "Dig", - "Flamethrower" - ], - "evolutions": [ - { - "pokemon": 157 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "157": { - "name": "Typhlosion", - "forms": { - "1133": { - "name": "Normal", - "proto": "TYPHLOSION_NORMAL" - }, - "1134": { - "name": "Shadow", - "proto": "TYPHLOSION_SHADOW" - }, - "1135": { - "name": "Purified", - "proto": "TYPHLOSION_PURIFIED" - } - }, - "default_form_id": 1133, - "pokedex_id": 157, - "genId": "2", - "generation": "Johto", - "types": [ - "Fire" - ], - "attack": 223, - "defense": 173, - "stamina": 186, - "height": 1.7, - "weight": 79.5, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Ember", - "Shadow Claw", - "Incinerate" - ], - "charged_moves": [ - "Fire Blast", - "Overheat", - "Solar Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "158": { - "name": "Totodile", - "forms": { - "1136": { - "name": "Normal", - "proto": "TOTODILE_NORMAL" - }, - "1137": { - "name": "Shadow", - "proto": "TOTODILE_SHADOW" - }, - "1138": { - "name": "Purified", - "proto": "TOTODILE_PURIFIED" - } - }, - "default_form_id": 1136, - "pokedex_id": 158, - "genId": "2", - "generation": "Johto", - "types": [ - "Water" - ], - "attack": 117, - "defense": 109, - "stamina": 137, - "height": 0.61, - "weight": 9.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Scratch" - ], - "charged_moves": [ - "Crunch", - "Aqua Jet", - "Water Pulse" - ], - "evolutions": [ - { - "pokemon": 159 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "159": { - "name": "Croconaw", - "forms": { - "1139": { - "name": "Normal", - "proto": "CROCONAW_NORMAL" - }, - "1140": { - "name": "Shadow", - "proto": "CROCONAW_SHADOW" - }, - "1141": { - "name": "Purified", - "proto": "CROCONAW_PURIFIED" - } - }, - "default_form_id": 1139, - "pokedex_id": 159, - "genId": "2", - "generation": "Johto", - "types": [ - "Water" - ], - "attack": 150, - "defense": 142, - "stamina": 163, - "height": 1.09, - "weight": 25, - "flee_rate": 0.07, - "capture_rate": 0.125, - "quick_moves": [ - "Water Gun", - "Scratch" - ], - "charged_moves": [ - "Crunch", - "Ice Punch", - "Water Pulse" - ], - "evolutions": [ - { - "pokemon": 160 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "160": { - "name": "Feraligatr", - "forms": { - "1142": { - "name": "Normal", - "proto": "FERALIGATR_NORMAL" - }, - "1143": { - "name": "Shadow", - "proto": "FERALIGATR_SHADOW" - }, - "1144": { - "name": "Purified", - "proto": "FERALIGATR_PURIFIED" - } - }, - "default_form_id": 1142, - "pokedex_id": 160, - "genId": "2", - "generation": "Johto", - "types": [ - "Water" - ], - "attack": 205, - "defense": 188, - "stamina": 198, - "height": 2.31, - "weight": 88.8, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Waterfall", - "Bite", - "Ice Fang" - ], - "charged_moves": [ - "Crunch", - "Hydro Pump", - "Ice Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "161": { - "name": "Sentret", - "forms": { - "1145": { - "name": "Normal", - "proto": "SENTRET_NORMAL" - }, - "1146": { - "name": "Shadow", - "proto": "SENTRET_SHADOW" - }, - "1147": { - "name": "Purified", - "proto": "SENTRET_PURIFIED" - } - }, - "default_form_id": 1145, - "pokedex_id": 161, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal" - ], - "attack": 79, - "defense": 73, - "stamina": 111, - "height": 0.79, - "weight": 6, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Scratch", - "Quick Attack" - ], - "charged_moves": [ - "Dig", - "Brick Break", - "Grass Knot" - ], - "evolutions": [ - { - "pokemon": 162 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "162": { - "name": "Furret", - "forms": { - "1148": { - "name": "Normal", - "proto": "FURRET_NORMAL" - }, - "1149": { - "name": "Shadow", - "proto": "FURRET_SHADOW" - }, - "1150": { - "name": "Purified", - "proto": "FURRET_PURIFIED" - } - }, - "default_form_id": 1148, - "pokedex_id": 162, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal" - ], - "attack": 148, - "defense": 125, - "stamina": 198, - "height": 1.8, - "weight": 32.5, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Quick Attack", - "Sucker Punch" - ], - "charged_moves": [ - "Dig", - "Brick Break", - "Hyper Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "163": { - "name": "Hoothoot", - "forms": { - "1151": { - "name": "Normal", - "proto": "HOOTHOOT_NORMAL" - }, - "1152": { - "name": "Shadow", - "proto": "HOOTHOOT_SHADOW" - }, - "1153": { - "name": "Purified", - "proto": "HOOTHOOT_PURIFIED" - } - }, - "default_form_id": 1151, - "pokedex_id": 163, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal", - "Flying" - ], - "attack": 67, - "defense": 88, - "stamina": 155, - "height": 0.71, - "weight": 21.2, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Feint Attack", - "Peck" - ], - "charged_moves": [ - "Aerial Ace", - "Sky Attack", - "Night Shade" - ], - "evolutions": [ - { - "pokemon": 164 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "164": { - "name": "Noctowl", - "forms": { - "1154": { - "name": "Normal", - "proto": "NOCTOWL_NORMAL" - }, - "1155": { - "name": "Shadow", - "proto": "NOCTOWL_SHADOW" - }, - "1156": { - "name": "Purified", - "proto": "NOCTOWL_PURIFIED" - } - }, - "default_form_id": 1154, - "pokedex_id": 164, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal", - "Flying" - ], - "attack": 145, - "defense": 156, - "stamina": 225, - "height": 1.6, - "weight": 40.8, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Wing Attack", - "Extrasensory" - ], - "charged_moves": [ - "Psychic", - "Sky Attack", - "Night Shade" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "165": { - "name": "Ledyba", - "forms": { - "1157": { - "name": "Normal", - "proto": "LEDYBA_NORMAL" - }, - "1158": { - "name": "Shadow", - "proto": "LEDYBA_SHADOW" - }, - "1159": { - "name": "Purified", - "proto": "LEDYBA_PURIFIED" - } - }, - "default_form_id": 1157, - "pokedex_id": 165, - "genId": "2", - "generation": "Johto", - "types": [ - "Bug", - "Flying" - ], - "attack": 72, - "defense": 118, - "stamina": 120, - "height": 0.99, - "weight": 10.8, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Bug Bite" - ], - "charged_moves": [ - "Silver Wind", - "Swift", - "Aerial Ace" - ], - "evolutions": [ - { - "pokemon": 166 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "166": { - "name": "Ledian", - "forms": { - "1160": { - "name": "Normal", - "proto": "LEDIAN_NORMAL" - }, - "1161": { - "name": "Shadow", - "proto": "LEDIAN_SHADOW" - }, - "1162": { - "name": "Purified", - "proto": "LEDIAN_PURIFIED" - } - }, - "default_form_id": 1160, - "pokedex_id": 166, - "genId": "2", - "generation": "Johto", - "types": [ - "Bug", - "Flying" - ], - "attack": 107, - "defense": 179, - "stamina": 146, - "height": 1.4, - "weight": 35.6, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Struggle Bug", - "Bug Bite" - ], - "charged_moves": [ - "Bug Buzz", - "Silver Wind", - "Aerial Ace" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "167": { - "name": "Spinarak", - "forms": { - "1163": { - "name": "Normal", - "proto": "SPINARAK_NORMAL" - }, - "1164": { - "name": "Shadow", - "proto": "SPINARAK_SHADOW" - }, - "1165": { - "name": "Purified", - "proto": "SPINARAK_PURIFIED" - } - }, - "default_form_id": 1163, - "pokedex_id": 167, - "genId": "2", - "generation": "Johto", - "types": [ - "Bug", - "Poison" - ], - "attack": 105, - "defense": 73, - "stamina": 120, - "height": 0.51, - "weight": 8.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Poison Sting", - "Bug Bite" - ], - "charged_moves": [ - "Night Slash", - "Signal Beam", - "Cross Poison" - ], - "evolutions": [ - { - "pokemon": 168 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "168": { - "name": "Ariados", - "forms": { - "1166": { - "name": "Normal", - "proto": "ARIADOS_NORMAL" - }, - "1167": { - "name": "Shadow", - "proto": "ARIADOS_SHADOW" - }, - "1168": { - "name": "Purified", - "proto": "ARIADOS_PURIFIED" - } - }, - "default_form_id": 1166, - "pokedex_id": 168, - "genId": "2", - "generation": "Johto", - "types": [ - "Bug", - "Poison" - ], - "attack": 161, - "defense": 124, - "stamina": 172, - "height": 1.09, - "weight": 33.5, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Poison Sting", - "Infestation" - ], - "charged_moves": [ - "Shadow Sneak", - "Megahorn", - "Cross Poison" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "169": { - "name": "Crobat", - "forms": { - "202": { - "name": "Normal", - "proto": "CROBAT_NORMAL" - }, - "203": { - "name": "Shadow", - "proto": "CROBAT_SHADOW" - }, - "204": { - "name": "Purified", - "proto": "CROBAT_PURIFIED" - } - }, - "default_form_id": 202, - "pokedex_id": 169, - "genId": "2", - "generation": "Johto", - "types": [ - "Poison", - "Flying" - ], - "attack": 194, - "defense": 178, - "stamina": 198, - "height": 1.8, - "weight": 75, - "flee_rate": 0.05, - "capture_rate": 0.1, - "quick_moves": [ - "Air Slash", - "Bite" - ], - "charged_moves": [ - "Shadow Ball", - "Air Cutter", - "Sludge Bomb" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "170": { - "name": "Chinchou", - "forms": { - "1169": { - "name": "Normal", - "proto": "CHINCHOU_NORMAL" - }, - "1170": { - "name": "Shadow", - "proto": "CHINCHOU_SHADOW" - }, - "1171": { - "name": "Purified", - "proto": "CHINCHOU_PURIFIED" - } - }, - "default_form_id": 1169, - "pokedex_id": 170, - "genId": "2", - "generation": "Johto", - "types": [ - "Water", - "Electric" - ], - "attack": 106, - "defense": 97, - "stamina": 181, - "height": 0.51, - "weight": 12, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Bubble", - "Spark" - ], - "charged_moves": [ - "Water Pulse", - "Thunderbolt", - "Bubble Beam" - ], - "evolutions": [ - { - "pokemon": 171 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "171": { - "name": "Lanturn", - "forms": { - "1172": { - "name": "Normal", - "proto": "LANTURN_NORMAL" - }, - "1173": { - "name": "Shadow", - "proto": "LANTURN_SHADOW" - }, - "1174": { - "name": "Purified", - "proto": "LANTURN_PURIFIED" - } - }, - "default_form_id": 1172, - "pokedex_id": 171, - "genId": "2", - "generation": "Johto", - "types": [ - "Water", - "Electric" - ], - "attack": 146, - "defense": 137, - "stamina": 268, - "height": 1.19, - "weight": 22.5, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Water Gun", - "Charge Beam", - "Spark" - ], - "charged_moves": [ - "Hydro Pump", - "Thunderbolt", - "Thunder" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "172": { - "name": "Pichu", - "forms": { - "1175": { - "name": "Normal", - "proto": "PICHU_NORMAL" - }, - "1176": { - "name": "Shadow", - "proto": "PICHU_SHADOW" - }, - "1177": { - "name": "Purified", - "proto": "PICHU_PURIFIED" - } - }, - "default_form_id": 1175, - "pokedex_id": 172, - "genId": "2", - "generation": "Johto", - "types": [ - "Electric" - ], - "attack": 77, - "defense": 53, - "stamina": 85, - "height": 0.3, - "weight": 2, - "flee_rate": 0.05, - "quick_moves": [ - "Thunder Shock" - ], - "charged_moves": [ - "Thunderbolt", - "Disarming Voice", - "Thunder Punch" - ], - "evolutions": [ - { - "pokemon": 25 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "173": { - "name": "Cleffa", - "forms": { - "1178": { - "name": "Normal", - "proto": "CLEFFA_NORMAL" - }, - "1179": { - "name": "Shadow", - "proto": "CLEFFA_SHADOW" - }, - "1180": { - "name": "Purified", - "proto": "CLEFFA_PURIFIED" - } - }, - "default_form_id": 1178, - "pokedex_id": 173, - "genId": "2", - "generation": "Johto", - "types": [ - "Fairy" - ], - "attack": 75, - "defense": 79, - "stamina": 137, - "height": 0.3, - "weight": 3, - "flee_rate": 0.05, - "quick_moves": [ - "Pound", - "Zen Headbutt" - ], - "charged_moves": [ - "Grass Knot", - "Psyshock", - "Signal Beam" - ], - "evolutions": [ - { - "pokemon": 35 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "174": { - "name": "Igglybuff", - "forms": { - "1181": { - "name": "Normal", - "proto": "IGGLYBUFF_NORMAL" - }, - "1182": { - "name": "Shadow", - "proto": "IGGLYBUFF_SHADOW" - }, - "1183": { - "name": "Purified", - "proto": "IGGLYBUFF_PURIFIED" - } - }, - "default_form_id": 1181, - "pokedex_id": 174, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal", - "Fairy" - ], - "attack": 69, - "defense": 32, - "stamina": 207, - "height": 0.3, - "weight": 1, - "flee_rate": 0.05, - "quick_moves": [ - "Pound", - "Feint Attack" - ], - "charged_moves": [ - "Wild Charge", - "Shadow Ball", - "Psychic" - ], - "evolutions": [ - { - "pokemon": 39 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "175": { - "name": "Togepi", - "forms": { - "1184": { - "name": "Normal", - "proto": "TOGEPI_NORMAL" - }, - "1185": { - "name": "Shadow", - "proto": "TOGEPI_SHADOW" - }, - "1186": { - "name": "Purified", - "proto": "TOGEPI_PURIFIED" - } - }, - "default_form_id": 1184, - "pokedex_id": 175, - "genId": "2", - "generation": "Johto", - "types": [ - "Fairy" - ], - "attack": 67, - "defense": 116, - "stamina": 111, - "height": 0.3, - "weight": 1.5, - "flee_rate": 0.05, - "quick_moves": [ - "Hidden Power", - "Peck" - ], - "charged_moves": [ - "Ancient Power", - "Psyshock", - "Dazzling Gleam" - ], - "evolutions": [ - { - "pokemon": 176 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "176": { - "name": "Togetic", - "forms": { - "1187": { - "name": "Normal", - "proto": "TOGETIC_NORMAL" - }, - "1188": { - "name": "Shadow", - "proto": "TOGETIC_SHADOW" - }, - "1189": { - "name": "Purified", - "proto": "TOGETIC_PURIFIED" - } - }, - "default_form_id": 1187, - "pokedex_id": 176, - "genId": "2", - "generation": "Johto", - "types": [ - "Fairy", - "Flying" - ], - "attack": 139, - "defense": 181, - "stamina": 146, - "height": 0.61, - "weight": 3.2, - "flee_rate": 0.05, - "capture_rate": 0.2, - "quick_moves": [ - "Extrasensory", - "Hidden Power" - ], - "charged_moves": [ - "Ancient Power", - "Dazzling Gleam", - "Aerial Ace" - ], - "evolutions": [ - { - "pokemon": 468 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "177": { - "name": "Natu", - "forms": { - "1190": { - "name": "Normal", - "proto": "NATU_NORMAL" - }, - "1191": { - "name": "Shadow", - "proto": "NATU_SHADOW" - }, - "1192": { - "name": "Purified", - "proto": "NATU_PURIFIED" - } - }, - "default_form_id": 1190, - "pokedex_id": 177, - "genId": "2", - "generation": "Johto", - "types": [ - "Psychic", - "Flying" - ], - "attack": 134, - "defense": 89, - "stamina": 120, - "height": 0.2, - "weight": 2, - "flee_rate": 0.15, - "capture_rate": 0.4, - "quick_moves": [ - "Peck", - "Quick Attack" - ], - "charged_moves": [ - "Night Shade", - "Psyshock", - "Drill Peck" - ], - "evolutions": [ - { - "pokemon": 178 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "178": { - "name": "Xatu", - "forms": { - "1193": { - "name": "Normal", - "proto": "XATU_NORMAL" - }, - "1194": { - "name": "Shadow", - "proto": "XATU_SHADOW" - }, - "1195": { - "name": "Purified", - "proto": "XATU_PURIFIED" - } - }, - "default_form_id": 1193, - "pokedex_id": 178, - "genId": "2", - "generation": "Johto", - "types": [ - "Psychic", - "Flying" - ], - "attack": 192, - "defense": 146, - "stamina": 163, - "height": 1.5, - "weight": 15, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Air Slash", - "Feint Attack" - ], - "charged_moves": [ - "Ominous Wind", - "Futuresight", - "Aerial Ace" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "179": { - "name": "Mareep", - "forms": { - "646": { - "name": "Normal", - "proto": "MAREEP_NORMAL", - "evolutions": [ - { - "pokemon": 180, - "form": 649 - } - ] - }, - "647": { - "name": "Shadow", - "proto": "MAREEP_SHADOW", - "evolutions": [ - { - "pokemon": 180, - "form": 650 - } - ] - }, - "648": { - "name": "Purified", - "proto": "MAREEP_PURIFIED", - "evolutions": [ - { - "pokemon": 180, - "form": 651 - } - ] - } - }, - "default_form_id": 646, - "pokedex_id": 179, - "genId": "2", - "generation": "Johto", - "types": [ - "Electric" - ], - "attack": 114, - "defense": 79, - "stamina": 146, - "height": 0.61, - "weight": 7.8, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Thunder Shock" - ], - "charged_moves": [ - "Body Slam", - "Thunderbolt", - "Discharge" - ], - "evolutions": [ - { - "pokemon": 180, - "form": 649 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "180": { - "name": "Flaaffy", - "forms": { - "649": { - "name": "Normal", - "proto": "FLAAFFY_NORMAL", - "evolutions": [ - { - "pokemon": 181, - "form": 652 - } - ] - }, - "650": { - "name": "Shadow", - "proto": "FLAAFFY_SHADOW", - "evolutions": [ - { - "pokemon": 181, - "form": 653 - } - ] - }, - "651": { - "name": "Purified", - "proto": "FLAAFFY_PURIFIED", - "evolutions": [ - { - "pokemon": 181, - "form": 654 - } - ] - } - }, - "default_form_id": 649, - "pokedex_id": 180, - "genId": "2", - "generation": "Johto", - "types": [ - "Electric" - ], - "attack": 145, - "defense": 109, - "stamina": 172, - "height": 0.79, - "weight": 13.3, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Tackle", - "Charge Beam" - ], - "charged_moves": [ - "Power Gem", - "Thunderbolt", - "Discharge" - ], - "evolutions": [ - { - "pokemon": 181, - "form": 652 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "181": { - "name": "Ampharos", - "forms": { - "652": { - "name": "Normal", - "proto": "AMPHAROS_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "653": { - "name": "Shadow", - "proto": "AMPHAROS_SHADOW" - }, - "654": { - "name": "Purified", - "proto": "AMPHAROS_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 652, - "pokedex_id": 181, - "genId": "2", - "generation": "Johto", - "types": [ - "Electric" - ], - "attack": 211, - "defense": 169, - "stamina": 207, - "height": 1.4, - "weight": 61.5, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Charge Beam", - "Volt Switch" - ], - "charged_moves": [ - "Zap Cannon", - "Focus Blast", - "Thunder", - "Power Gem", - "Thunder Punch" - ], - "temp_evolutions": { - "1": { - "attack": 294, - "defense": 203, - "stamina": 207, - "types": [ - "Electric", - "Dragon" - ] - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "182": { - "name": "Bellossom", - "forms": { - "274": { - "name": "Normal", - "proto": "BELLOSSOM_NORMAL" - }, - "275": { - "name": "Shadow", - "proto": "BELLOSSOM_SHADOW" - }, - "276": { - "name": "Purified", - "proto": "BELLOSSOM_PURIFIED" - } - }, - "default_form_id": 274, - "pokedex_id": 182, - "genId": "2", - "generation": "Johto", - "types": [ - "Grass" - ], - "attack": 169, - "defense": 186, - "stamina": 181, - "height": 0.41, - "weight": 5.8, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Razor Leaf", - "Acid", - "Bullet Seed" - ], - "charged_moves": [ - "Leaf Blade", - "Petal Blizzard", - "Dazzling Gleam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "183": { - "name": "Marill", - "forms": { - "1196": { - "name": "Normal", - "proto": "MARILL_NORMAL" - }, - "1197": { - "name": "Shadow", - "proto": "MARILL_SHADOW" - }, - "1198": { - "name": "Purified", - "proto": "MARILL_PURIFIED" - } - }, - "default_form_id": 1196, - "pokedex_id": 183, - "genId": "2", - "generation": "Johto", - "types": [ - "Water", - "Fairy" - ], - "attack": 37, - "defense": 93, - "stamina": 172, - "height": 0.41, - "weight": 8.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Bubble" - ], - "charged_moves": [ - "Bubble Beam", - "Aqua Tail", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 184 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "184": { - "name": "Azumarill", - "forms": { - "1199": { - "name": "Normal", - "proto": "AZUMARILL_NORMAL" - }, - "1200": { - "name": "Shadow", - "proto": "AZUMARILL_SHADOW" - }, - "1201": { - "name": "Purified", - "proto": "AZUMARILL_PURIFIED" - } - }, - "default_form_id": 1199, - "pokedex_id": 184, - "genId": "2", - "generation": "Johto", - "types": [ - "Water", - "Fairy" - ], - "attack": 112, - "defense": 152, - "stamina": 225, - "height": 0.79, - "weight": 28.5, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Rock Smash", - "Bubble" - ], - "charged_moves": [ - "Play Rough", - "Hydro Pump", - "Ice Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "185": { - "name": "Sudowoodo", - "forms": { - "1202": { - "name": "Normal", - "proto": "SUDOWOODO_NORMAL" - }, - "1203": { - "name": "Shadow", - "proto": "SUDOWOODO_SHADOW" - }, - "1204": { - "name": "Purified", - "proto": "SUDOWOODO_PURIFIED" - } - }, - "default_form_id": 1202, - "pokedex_id": 185, - "genId": "2", - "generation": "Johto", - "types": [ - "Rock" - ], - "attack": 167, - "defense": 176, - "stamina": 172, - "height": 1.19, - "weight": 38, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Rock Throw", - "Counter" - ], - "charged_moves": [ - "Stone Edge", - "Earthquake", - "Rock Slide" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "186": { - "name": "Politoed", - "forms": { - "244": { - "name": "Normal", - "proto": "POLITOED_NORMAL" - }, - "245": { - "name": "Shadow", - "proto": "POLITOED_SHADOW" - }, - "246": { - "name": "Purified", - "proto": "POLITOED_PURIFIED" - } - }, - "default_form_id": 244, - "pokedex_id": 186, - "genId": "2", - "generation": "Johto", - "types": [ - "Water" - ], - "attack": 174, - "defense": 179, - "stamina": 207, - "height": 1.09, - "weight": 33.9, - "flee_rate": 0.05, - "capture_rate": 0.1, - "quick_moves": [ - "Mud Shot", - "Bubble" - ], - "charged_moves": [ - "Hydro Pump", - "Blizzard", - "Surf", - "Weather Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "187": { - "name": "Hoppip", - "forms": { - "1205": { - "name": "Normal", - "proto": "HOPPIP_NORMAL", - "evolutions": [ - { - "pokemon": 188, - "form": 1208 - } - ] - }, - "1206": { - "name": "Shadow", - "proto": "HOPPIP_SHADOW", - "evolutions": [ - { - "pokemon": 188, - "form": 1209 - } - ] - }, - "1207": { - "name": "Purified", - "proto": "HOPPIP_PURIFIED", - "evolutions": [ - { - "pokemon": 188, - "form": 1210 - } - ] - } - }, - "default_form_id": 1205, - "pokedex_id": 187, - "genId": "2", - "generation": "Johto", - "types": [ - "Grass", - "Flying" - ], - "attack": 67, - "defense": 94, - "stamina": 111, - "height": 0.41, - "weight": 0.5, - "flee_rate": 0.12, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Bullet Seed" - ], - "charged_moves": [ - "Grass Knot", - "Dazzling Gleam", - "Seed Bomb" - ], - "evolutions": [ - { - "pokemon": 188, - "form": 1208 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "188": { - "name": "Skiploom", - "forms": { - "1208": { - "name": "Normal", - "proto": "SKIPLOOM_NORMAL", - "evolutions": [ - { - "pokemon": 189, - "form": 1211 - } - ] - }, - "1209": { - "name": "Shadow", - "proto": "SKIPLOOM_SHADOW", - "evolutions": [ - { - "pokemon": 189, - "form": 1212 - } - ] - }, - "1210": { - "name": "Purified", - "proto": "SKIPLOOM_PURIFIED", - "evolutions": [ - { - "pokemon": 189, - "form": 1213 - } - ] - } - }, - "default_form_id": 1208, - "pokedex_id": 188, - "genId": "2", - "generation": "Johto", - "types": [ - "Grass", - "Flying" - ], - "attack": 91, - "defense": 120, - "stamina": 146, - "height": 0.61, - "weight": 1, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Tackle", - "Bullet Seed" - ], - "charged_moves": [ - "Grass Knot", - "Dazzling Gleam", - "Energy Ball" - ], - "evolutions": [ - { - "pokemon": 189, - "form": 1211 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "189": { - "name": "Jumpluff", - "forms": { - "1211": { - "name": "Normal", - "proto": "JUMPLUFF_NORMAL" - }, - "1212": { - "name": "Shadow", - "proto": "JUMPLUFF_SHADOW" - }, - "1213": { - "name": "Purified", - "proto": "JUMPLUFF_PURIFIED" - } - }, - "default_form_id": 1211, - "pokedex_id": 189, - "genId": "2", - "generation": "Johto", - "types": [ - "Grass", - "Flying" - ], - "attack": 118, - "defense": 183, - "stamina": 181, - "height": 0.79, - "weight": 3, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Infestation", - "Bullet Seed" - ], - "charged_moves": [ - "Energy Ball", - "Dazzling Gleam", - "Solar Beam", - "Aerial Ace" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "190": { - "name": "Aipom", - "forms": { - "1214": { - "name": "Normal", - "proto": "AIPOM_NORMAL", - "evolutions": [ - { - "pokemon": 424, - "form": 1742 - } - ] - }, - "1215": { - "name": "Shadow", - "proto": "AIPOM_SHADOW", - "evolutions": [ - { - "pokemon": 424, - "form": 1743 - } - ] - }, - "1216": { - "name": "Purified", - "proto": "AIPOM_PURIFIED", - "evolutions": [ - { - "pokemon": 424, - "form": 1744 - } - ] - } - }, - "default_form_id": 1214, - "pokedex_id": 190, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal" - ], - "attack": 136, - "defense": 112, - "stamina": 146, - "height": 0.79, - "weight": 11.5, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Scratch", - "Astonish" - ], - "charged_moves": [ - "Low Sweep", - "Swift", - "Aerial Ace" - ], - "evolutions": [ - { - "pokemon": 424, - "form": 1742 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "191": { - "name": "Sunkern", - "forms": { - "1217": { - "name": "Normal", - "proto": "SUNKERN_NORMAL" - }, - "1218": { - "name": "Shadow", - "proto": "SUNKERN_SHADOW" - }, - "1219": { - "name": "Purified", - "proto": "SUNKERN_PURIFIED" - } - }, - "default_form_id": 1217, - "pokedex_id": 191, - "genId": "2", - "generation": "Johto", - "types": [ - "Grass" - ], - "attack": 55, - "defense": 55, - "stamina": 102, - "height": 0.3, - "weight": 1.8, - "flee_rate": 0.09, - "capture_rate": 0.5, - "quick_moves": [ - "Razor Leaf", - "Cut" - ], - "charged_moves": [ - "Energy Ball", - "Grass Knot", - "Seed Bomb" - ], - "evolutions": [ - { - "pokemon": 192 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "192": { - "name": "Sunflora", - "forms": { - "1220": { - "name": "Normal", - "proto": "SUNFLORA_NORMAL" - }, - "1221": { - "name": "Shadow", - "proto": "SUNFLORA_SHADOW" - }, - "1222": { - "name": "Purified", - "proto": "SUNFLORA_PURIFIED" - } - }, - "default_form_id": 1220, - "pokedex_id": 192, - "genId": "2", - "generation": "Johto", - "types": [ - "Grass" - ], - "attack": 185, - "defense": 135, - "stamina": 181, - "height": 0.79, - "weight": 8.5, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Razor Leaf", - "Bullet Seed" - ], - "charged_moves": [ - "Solar Beam", - "Petal Blizzard", - "Sludge Bomb", - "Leaf Storm" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "193": { - "name": "Yanma", - "forms": { - "1223": { - "name": "Normal", - "proto": "YANMA_NORMAL" - }, - "1224": { - "name": "Shadow", - "proto": "YANMA_SHADOW" - }, - "1225": { - "name": "Purified", - "proto": "YANMA_PURIFIED" - } - }, - "default_form_id": 1223, - "pokedex_id": 193, - "genId": "2", - "generation": "Johto", - "types": [ - "Bug", - "Flying" - ], - "attack": 154, - "defense": 94, - "stamina": 163, - "height": 1.19, - "weight": 38, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Quick Attack", - "Wing Attack" - ], - "charged_moves": [ - "Ancient Power", - "Aerial Ace", - "Silver Wind" - ], - "evolutions": [ - { - "pokemon": 469 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "194": { - "name": "Wooper", - "forms": { - "1226": { - "name": "Normal", - "proto": "WOOPER_NORMAL", - "evolutions": [ - { - "pokemon": 195, - "form": 1229 - } - ] - }, - "1227": { - "name": "Shadow", - "proto": "WOOPER_SHADOW", - "evolutions": [ - { - "pokemon": 195, - "form": 1230 - } - ] - }, - "1228": { - "name": "Purified", - "proto": "WOOPER_PURIFIED", - "evolutions": [ - { - "pokemon": 195, - "form": 1231 - } - ] - } - }, - "default_form_id": 1226, - "pokedex_id": 194, - "genId": "2", - "generation": "Johto", - "types": [ - "Water", - "Ground" - ], - "attack": 75, - "defense": 66, - "stamina": 146, - "height": 0.41, - "weight": 8.5, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Water Gun", - "Mud Shot" - ], - "charged_moves": [ - "Mud Bomb", - "Dig", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 195, - "form": 1229 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "195": { - "name": "Quagsire", - "forms": { - "1229": { - "name": "Normal", - "proto": "QUAGSIRE_NORMAL" - }, - "1230": { - "name": "Shadow", - "proto": "QUAGSIRE_SHADOW" - }, - "1231": { - "name": "Purified", - "proto": "QUAGSIRE_PURIFIED" - } - }, - "default_form_id": 1229, - "pokedex_id": 195, - "genId": "2", - "generation": "Johto", - "types": [ - "Water", - "Ground" - ], - "attack": 152, - "defense": 143, - "stamina": 216, - "height": 1.4, - "weight": 75, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Water Gun", - "Mud Shot" - ], - "charged_moves": [ - "Sludge Bomb", - "Earthquake", - "Stone Edge", - "Acid Spray" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "196": { - "name": "Espeon", - "forms": { - "1232": { - "name": "Normal", - "proto": "ESPEON_NORMAL" - }, - "1233": { - "name": "Shadow", - "proto": "ESPEON_SHADOW" - }, - "1234": { - "name": "Purified", - "proto": "ESPEON_PURIFIED" - } - }, - "default_form_id": 1232, - "pokedex_id": 196, - "genId": "2", - "generation": "Johto", - "types": [ - "Psychic" - ], - "attack": 261, - "defense": 175, - "stamina": 163, - "height": 0.89, - "weight": 26.5, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Confusion", - "Zen Headbutt" - ], - "charged_moves": [ - "Psybeam", - "Psychic", - "Futuresight" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "197": { - "name": "Umbreon", - "forms": { - "1235": { - "name": "Normal", - "proto": "UMBREON_NORMAL" - }, - "1236": { - "name": "Shadow", - "proto": "UMBREON_SHADOW" - }, - "1237": { - "name": "Purified", - "proto": "UMBREON_PURIFIED" - } - }, - "default_form_id": 1235, - "pokedex_id": 197, - "genId": "2", - "generation": "Johto", - "types": [ - "Dark" - ], - "attack": 126, - "defense": 240, - "stamina": 216, - "height": 0.99, - "weight": 27, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Feint Attack", - "Snarl" - ], - "charged_moves": [ - "Dark Pulse", - "Foul Play" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "198": { - "name": "Murkrow", - "forms": { - "855": { - "name": "Normal", - "proto": "MURKROW_NORMAL", - "evolutions": [ - { - "pokemon": 430, - "form": 858 - } - ] - }, - "856": { - "name": "Shadow", - "proto": "MURKROW_SHADOW", - "evolutions": [ - { - "pokemon": 430, - "form": 859 - } - ] - }, - "857": { - "name": "Purified", - "proto": "MURKROW_PURIFIED", - "evolutions": [ - { - "pokemon": 430, - "form": 860 - } - ] - } - }, - "default_form_id": 855, - "pokedex_id": 198, - "genId": "2", - "generation": "Johto", - "types": [ - "Dark", - "Flying" - ], - "attack": 175, - "defense": 87, - "stamina": 155, - "height": 0.51, - "weight": 2.1, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Peck", - "Feint Attack" - ], - "charged_moves": [ - "Drill Peck", - "Foul Play", - "Dark Pulse" - ], - "evolutions": [ - { - "pokemon": 430, - "form": 858 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "199": { - "name": "Slowking", - "forms": { - "1238": { - "name": "Normal", - "proto": "SLOWKING_NORMAL" - }, - "1239": { - "name": "Shadow", - "proto": "SLOWKING_SHADOW" - }, - "1240": { - "name": "Purified", - "proto": "SLOWKING_PURIFIED" - }, - "2584": { - "name": "Galarian", - "proto": "SLOWKING_GALARIAN" - } - }, - "default_form_id": 1238, - "pokedex_id": 199, - "genId": "2", - "generation": "Johto", - "types": [ - "Water", - "Psychic" - ], - "attack": 177, - "defense": 180, - "stamina": 216, - "height": 2.01, - "weight": 79.5, - "flee_rate": 0.05, - "capture_rate": 0.1, - "quick_moves": [ - "Water Gun", - "Confusion" - ], - "charged_moves": [ - "Blizzard", - "Psychic", - "Fire Blast" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "200": { - "name": "Misdreavus", - "forms": { - "719": { - "name": "Normal", - "proto": "MISDREAVUS_NORMAL", - "evolutions": [ - { - "pokemon": 429, - "form": 722 - } - ] - }, - "720": { - "name": "Shadow", - "proto": "MISDREAVUS_SHADOW", - "evolutions": [ - { - "pokemon": 429, - "form": 723 - } - ] - }, - "721": { - "name": "Purified", - "proto": "MISDREAVUS_PURIFIED", - "evolutions": [ - { - "pokemon": 429, - "form": 724 - } - ] - } - }, - "default_form_id": 719, - "pokedex_id": 200, - "genId": "2", - "generation": "Johto", - "types": [ - "Ghost" - ], - "attack": 167, - "defense": 154, - "stamina": 155, - "height": 0.71, - "weight": 1, - "flee_rate": 0.07, - "capture_rate": 0.3, - "quick_moves": [ - "Astonish", - "Hex" - ], - "charged_moves": [ - "Shadow Sneak", - "Dark Pulse", - "Ominous Wind" - ], - "evolutions": [ - { - "pokemon": 429 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "201": { - "name": "Unown", - "forms": { - "1": { - "name": "A", - "proto": "UNOWN_A" - }, - "2": { - "name": "B", - "proto": "UNOWN_B" - }, - "3": { - "name": "C", - "proto": "UNOWN_C" - }, - "4": { - "name": "D", - "proto": "UNOWN_D" - }, - "5": { - "name": "E", - "proto": "UNOWN_E" - }, - "6": { - "name": "F", - "proto": "UNOWN_F" - }, - "7": { - "name": "G", - "proto": "UNOWN_G" - }, - "8": { - "name": "H", - "proto": "UNOWN_H" - }, - "9": { - "name": "I", - "proto": "UNOWN_I" - }, - "10": { - "name": "J", - "proto": "UNOWN_J" - }, - "11": { - "name": "K", - "proto": "UNOWN_K" - }, - "12": { - "name": "L", - "proto": "UNOWN_L" - }, - "13": { - "name": "M", - "proto": "UNOWN_M" - }, - "14": { - "name": "N", - "proto": "UNOWN_N" - }, - "15": { - "name": "O", - "proto": "UNOWN_O" - }, - "16": { - "name": "P", - "proto": "UNOWN_P" - }, - "17": { - "name": "Q", - "proto": "UNOWN_Q" - }, - "18": { - "name": "R", - "proto": "UNOWN_R" - }, - "19": { - "name": "S", - "proto": "UNOWN_S" - }, - "20": { - "name": "T", - "proto": "UNOWN_T" - }, - "21": { - "name": "U", - "proto": "UNOWN_U" - }, - "22": { - "name": "V", - "proto": "UNOWN_V" - }, - "23": { - "name": "W", - "proto": "UNOWN_W" - }, - "24": { - "name": "X", - "proto": "UNOWN_X" - }, - "25": { - "name": "Y", - "proto": "UNOWN_Y" - }, - "26": { - "name": "Z", - "proto": "UNOWN_Z" - }, - "27": { - "name": "Exclamation Point", - "proto": "UNOWN_EXCLAMATION_POINT" - }, - "28": { - "name": "Question Mark", - "proto": "UNOWN_QUESTION_MARK" - } - }, - "default_form_id": 6, - "pokedex_id": 201, - "genId": "2", - "generation": "Johto", - "types": [ - "Psychic" - ], - "attack": 136, - "defense": 91, - "stamina": 134, - "height": 0.51, - "weight": 5, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Hidden Power" - ], - "charged_moves": [ - "Struggle" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "202": { - "name": "Wobbuffet", - "forms": { - "602": { - "name": "Normal", - "proto": "WOBBUFFET_NORMAL" - }, - "686": { - "name": "Shadow", - "proto": "WOBBUFFET_SHADOW" - }, - "687": { - "name": "Purified", - "proto": "WOBBUFFET_PURIFIED" - }, - "2328": { - "name": "Spring 2020", - "proto": "WOBBUFFET_SPRING_2020" - } - }, - "default_form_id": 602, - "pokedex_id": 202, - "genId": "2", - "generation": "Johto", - "types": [ - "Psychic" - ], - "attack": 60, - "defense": 106, - "stamina": 382, - "height": 1.3, - "weight": 28.5, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Counter", - "Splash", - "Charm" - ], - "charged_moves": [ - "Mirror Coat" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "203": { - "name": "Girafarig", - "forms": { - "1241": { - "name": "Normal", - "proto": "GIRAFARIG_NORMAL" - }, - "1242": { - "name": "Shadow", - "proto": "GIRAFARIG_SHADOW" - }, - "1243": { - "name": "Purified", - "proto": "GIRAFARIG_PURIFIED" - } - }, - "default_form_id": 1241, - "pokedex_id": 203, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal", - "Psychic" - ], - "attack": 182, - "defense": 133, - "stamina": 172, - "height": 1.5, - "weight": 41.5, - "flee_rate": 0.07, - "capture_rate": 0.3, - "quick_moves": [ - "Tackle", - "Confusion" - ], - "charged_moves": [ - "Psychic", - "Thunderbolt", - "Mirror Coat" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "204": { - "name": "Pineco", - "forms": { - "1244": { - "name": "Normal", - "proto": "PINECO_NORMAL", - "evolutions": [ - { - "pokemon": 205, - "form": 1247 - } - ] - }, - "1245": { - "name": "Shadow", - "proto": "PINECO_SHADOW", - "evolutions": [ - { - "pokemon": 205, - "form": 1248 - } - ] - }, - "1246": { - "name": "Purified", - "proto": "PINECO_PURIFIED", - "evolutions": [ - { - "pokemon": 205, - "form": 1249 - } - ] - } - }, - "default_form_id": 1244, - "pokedex_id": 204, - "genId": "2", - "generation": "Johto", - "types": [ - "Bug" - ], - "attack": 108, - "defense": 122, - "stamina": 137, - "height": 0.61, - "weight": 7.2, - "flee_rate": 0.12, - "capture_rate": 0.4, - "quick_moves": [ - "Tackle", - "Bug Bite" - ], - "charged_moves": [ - "Gyro Ball", - "Rock Tomb", - "Sand Tomb" - ], - "evolutions": [ - { - "pokemon": 205, - "form": 1247 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "205": { - "name": "Forretress", - "forms": { - "1247": { - "name": "Normal", - "proto": "FORRETRESS_NORMAL" - }, - "1248": { - "name": "Shadow", - "proto": "FORRETRESS_SHADOW" - }, - "1249": { - "name": "Purified", - "proto": "FORRETRESS_PURIFIED" - } - }, - "default_form_id": 1247, - "pokedex_id": 205, - "genId": "2", - "generation": "Johto", - "types": [ - "Bug", - "Steel" - ], - "attack": 161, - "defense": 205, - "stamina": 181, - "height": 1.19, - "weight": 125.8, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Bug Bite", - "Struggle Bug" - ], - "charged_moves": [ - "Heavy Slam", - "Earthquake", - "Rock Tomb", - "Sand Tomb", - "Mirror Shot" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "206": { - "name": "Dunsparce", - "forms": { - "1250": { - "name": "Normal", - "proto": "DUNSPARCE_NORMAL" - }, - "1251": { - "name": "Shadow", - "proto": "DUNSPARCE_SHADOW" - }, - "1252": { - "name": "Purified", - "proto": "DUNSPARCE_PURIFIED" - } - }, - "default_form_id": 1250, - "pokedex_id": 206, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal" - ], - "attack": 131, - "defense": 128, - "stamina": 225, - "height": 1.5, - "weight": 14, - "flee_rate": 0.2, - "capture_rate": 0.3, - "quick_moves": [ - "Bite", - "Astonish" - ], - "charged_moves": [ - "Dig", - "Rock Slide", - "Drill Run" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "207": { - "name": "Gligar", - "forms": { - "803": { - "name": "Normal", - "proto": "GLIGAR_NORMAL", - "evolutions": [ - { - "pokemon": 472, - "form": 806 - } - ] - }, - "804": { - "name": "Shadow", - "proto": "GLIGAR_SHADOW", - "evolutions": [ - { - "pokemon": 472, - "form": 807 - } - ] - }, - "805": { - "name": "Purified", - "proto": "GLIGAR_PURIFIED", - "evolutions": [ - { - "pokemon": 472, - "form": 808 - } - ] - } - }, - "default_form_id": 803, - "pokedex_id": 207, - "genId": "2", - "generation": "Johto", - "types": [ - "Ground", - "Flying" - ], - "attack": 143, - "defense": 184, - "stamina": 163, - "height": 1.09, - "weight": 64.8, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Fury Cutter", - "Wing Attack" - ], - "charged_moves": [ - "Dig", - "Aerial Ace", - "Night Slash" - ], - "evolutions": [ - { - "pokemon": 472, - "form": 806 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "208": { - "name": "Steelix", - "forms": { - "905": { - "name": "Normal", - "proto": "STEELIX_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "906": { - "name": "Shadow", - "proto": "STEELIX_SHADOW" - }, - "907": { - "name": "Purified", - "proto": "STEELIX_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 905, - "pokedex_id": 208, - "genId": "2", - "generation": "Johto", - "types": [ - "Steel", - "Ground" - ], - "attack": 148, - "defense": 272, - "stamina": 181, - "height": 9.19, - "weight": 400, - "flee_rate": 0.05, - "capture_rate": 0.1, - "quick_moves": [ - "Iron Tail", - "Dragon Tail", - "Thunder Fang" - ], - "charged_moves": [ - "Earthquake", - "Heavy Slam", - "Crunch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 212, - "defense": 327, - "stamina": 181, - "unreleased": true - } - } - }, - "209": { - "name": "Snubbull", - "forms": { - "1253": { - "name": "Normal", - "proto": "SNUBBULL_NORMAL", - "evolutions": [ - { - "pokemon": 210, - "form": 1256 - } - ] - }, - "1254": { - "name": "Shadow", - "proto": "SNUBBULL_SHADOW", - "evolutions": [ - { - "pokemon": 210, - "form": 1257 - } - ] - }, - "1255": { - "name": "Purified", - "proto": "SNUBBULL_PURIFIED", - "evolutions": [ - { - "pokemon": 210, - "form": 1258 - } - ] - } - }, - "default_form_id": 1253, - "pokedex_id": 209, - "genId": "2", - "generation": "Johto", - "types": [ - "Fairy" - ], - "attack": 137, - "defense": 85, - "stamina": 155, - "height": 0.61, - "weight": 7.8, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Tackle", - "Bite" - ], - "charged_moves": [ - "Crunch", - "Dazzling Gleam", - "Brick Break" - ], - "evolutions": [ - { - "pokemon": 210, - "form": 1256 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "210": { - "name": "Granbull", - "forms": { - "1256": { - "name": "Normal", - "proto": "GRANBULL_NORMAL" - }, - "1257": { - "name": "Shadow", - "proto": "GRANBULL_SHADOW" - }, - "1258": { - "name": "Purified", - "proto": "GRANBULL_PURIFIED" - } - }, - "default_form_id": 1256, - "pokedex_id": 210, - "genId": "2", - "generation": "Johto", - "types": [ - "Fairy" - ], - "attack": 212, - "defense": 131, - "stamina": 207, - "height": 1.4, - "weight": 48.7, - "flee_rate": 0.08, - "capture_rate": 0.15, - "quick_moves": [ - "Bite", - "Snarl", - "Charm" - ], - "charged_moves": [ - "Crunch", - "Play Rough", - "Close Combat" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "211": { - "name": "Qwilfish", - "forms": { - "1259": { - "name": "Normal", - "proto": "QWILFISH_NORMAL" - }, - "1260": { - "name": "Shadow", - "proto": "QWILFISH_SHADOW" - }, - "1261": { - "name": "Purified", - "proto": "QWILFISH_PURIFIED" - } - }, - "default_form_id": 1259, - "pokedex_id": 211, - "genId": "2", - "generation": "Johto", - "types": [ - "Water", - "Poison" - ], - "attack": 184, - "defense": 138, - "stamina": 163, - "height": 0.51, - "weight": 3.9, - "flee_rate": 0.08, - "capture_rate": 0.3, - "quick_moves": [ - "Poison Sting", - "Water Gun" - ], - "charged_moves": [ - "Aqua Tail", - "Ice Beam", - "Sludge Wave", - "Acid Spray", - "Fell Stinger" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "212": { - "name": "Scizor", - "forms": { - "250": { - "name": "Normal", - "proto": "SCIZOR_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "251": { - "name": "Shadow", - "proto": "SCIZOR_SHADOW" - }, - "252": { - "name": "Purified", - "proto": "SCIZOR_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 250, - "pokedex_id": 212, - "genId": "2", - "generation": "Johto", - "types": [ - "Bug", - "Steel" - ], - "attack": 236, - "defense": 181, - "stamina": 172, - "height": 2.01, - "weight": 125, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Bullet Punch", - "Fury Cutter" - ], - "charged_moves": [ - "X Scissor", - "Iron Head", - "Night Slash" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 279, - "defense": 250, - "stamina": 172, - "unreleased": true - } - } - }, - "213": { - "name": "Shuckle", - "forms": { - "827": { - "name": "Normal", - "proto": "SHUCKLE_NORMAL" - }, - "828": { - "name": "Shadow", - "proto": "SHUCKLE_SHADOW" - }, - "829": { - "name": "Purified", - "proto": "SHUCKLE_PURIFIED" - } - }, - "default_form_id": 827, - "pokedex_id": 213, - "genId": "2", - "generation": "Johto", - "types": [ - "Bug", - "Rock" - ], - "attack": 17, - "defense": 396, - "stamina": 85, - "height": 0.61, - "weight": 20.5, - "flee_rate": 0.07, - "capture_rate": 0.3, - "quick_moves": [ - "Struggle Bug", - "Rock Throw" - ], - "charged_moves": [ - "Rock Blast", - "Stone Edge", - "Gyro Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "214": { - "name": "Heracross", - "forms": { - "1262": { - "name": "Normal", - "proto": "HERACROSS_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1263": { - "name": "Shadow", - "proto": "HERACROSS_SHADOW" - }, - "1264": { - "name": "Purified", - "proto": "HERACROSS_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1262, - "pokedex_id": 214, - "genId": "2", - "generation": "Johto", - "types": [ - "Bug", - "Fighting" - ], - "attack": 234, - "defense": 179, - "stamina": 190, - "height": 1.5, - "weight": 54, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Counter", - "Struggle Bug" - ], - "charged_moves": [ - "Megahorn", - "Close Combat", - "Earthquake" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 334, - "defense": 223, - "stamina": 190, - "unreleased": true - } - } - }, - "215": { - "name": "Sneasel", - "forms": { - "797": { - "name": "Normal", - "proto": "SNEASEL_NORMAL", - "evolutions": [ - { - "pokemon": 461, - "form": 800 - } - ] - }, - "798": { - "name": "Shadow", - "proto": "SNEASEL_SHADOW", - "evolutions": [ - { - "pokemon": 461, - "form": 801 - } - ] - }, - "799": { - "name": "Purified", - "proto": "SNEASEL_PURIFIED", - "evolutions": [ - { - "pokemon": 461, - "form": 802 - } - ] - } - }, - "default_form_id": 797, - "pokedex_id": 215, - "genId": "2", - "generation": "Johto", - "types": [ - "Dark", - "Ice" - ], - "attack": 189, - "defense": 146, - "stamina": 146, - "height": 0.89, - "weight": 28, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Ice Shard", - "Feint Attack" - ], - "charged_moves": [ - "Avalanche", - "Ice Punch", - "Foul Play" - ], - "evolutions": [ - { - "pokemon": 461, - "form": 800 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "216": { - "name": "Teddiursa", - "forms": { - "1265": { - "name": "Normal", - "proto": "TEDDIURSA_NORMAL", - "evolutions": [ - { - "pokemon": 217, - "form": 1268 - } - ] - }, - "1266": { - "name": "Shadow", - "proto": "TEDDIURSA_SHADOW", - "evolutions": [ - { - "pokemon": 217, - "form": 1269 - } - ] - }, - "1267": { - "name": "Purified", - "proto": "TEDDIURSA_PURIFIED", - "evolutions": [ - { - "pokemon": 217, - "form": 1270 - } - ] - } - }, - "default_form_id": 1265, - "pokedex_id": 216, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal" - ], - "attack": 142, - "defense": 93, - "stamina": 155, - "height": 0.61, - "weight": 8.8, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Scratch", - "Lick" - ], - "charged_moves": [ - "Cross Chop", - "Crunch", - "Play Rough" - ], - "evolutions": [ - { - "pokemon": 217, - "form": 1268 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "217": { - "name": "Ursaring", - "forms": { - "1268": { - "name": "Normal", - "proto": "URSARING_NORMAL" - }, - "1269": { - "name": "Shadow", - "proto": "URSARING_SHADOW" - }, - "1270": { - "name": "Purified", - "proto": "URSARING_PURIFIED" - } - }, - "default_form_id": 1268, - "pokedex_id": 217, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal" - ], - "attack": 236, - "defense": 144, - "stamina": 207, - "height": 1.8, - "weight": 125.8, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Metal Claw", - "Counter", - "Shadow Claw" - ], - "charged_moves": [ - "Close Combat", - "Hyper Beam", - "Play Rough" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "218": { - "name": "Slugma", - "forms": { - "1271": { - "name": "Normal", - "proto": "SLUGMA_NORMAL" - }, - "1272": { - "name": "Shadow", - "proto": "SLUGMA_SHADOW" - }, - "1273": { - "name": "Purified", - "proto": "SLUGMA_PURIFIED" - } - }, - "default_form_id": 1271, - "pokedex_id": 218, - "genId": "2", - "generation": "Johto", - "types": [ - "Fire" - ], - "attack": 118, - "defense": 71, - "stamina": 120, - "height": 0.71, - "weight": 35, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Ember", - "Rock Throw" - ], - "charged_moves": [ - "Flame Burst", - "Flame Charge", - "Rock Slide" - ], - "evolutions": [ - { - "pokemon": 219 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "219": { - "name": "Magcargo", - "forms": { - "1274": { - "name": "Normal", - "proto": "MAGCARGO_NORMAL" - }, - "1275": { - "name": "Shadow", - "proto": "MAGCARGO_SHADOW" - }, - "1276": { - "name": "Purified", - "proto": "MAGCARGO_PURIFIED" - } - }, - "default_form_id": 1274, - "pokedex_id": 219, - "genId": "2", - "generation": "Johto", - "types": [ - "Fire", - "Rock" - ], - "attack": 139, - "defense": 191, - "stamina": 137, - "height": 0.79, - "weight": 55, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Ember", - "Rock Throw" - ], - "charged_moves": [ - "Heat Wave", - "Overheat", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "220": { - "name": "Swinub", - "forms": { - "1277": { - "name": "Normal", - "proto": "SWINUB_NORMAL", - "evolutions": [ - { - "pokemon": 221, - "form": 1280 - } - ] - }, - "1278": { - "name": "Shadow", - "proto": "SWINUB_SHADOW", - "evolutions": [ - { - "pokemon": 221, - "form": 1281 - } - ] - }, - "1279": { - "name": "Purified", - "proto": "SWINUB_PURIFIED", - "evolutions": [ - { - "pokemon": 221, - "form": 1282 - } - ] - } - }, - "default_form_id": 1277, - "pokedex_id": 220, - "genId": "2", - "generation": "Johto", - "types": [ - "Ice", - "Ground" - ], - "attack": 90, - "defense": 69, - "stamina": 137, - "height": 0.41, - "weight": 6.5, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Tackle", - "Powder Snow" - ], - "charged_moves": [ - "Icy Wind", - "Body Slam", - "Rock Slide" - ], - "evolutions": [ - { - "pokemon": 221, - "form": 1280 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "221": { - "name": "Piloswine", - "forms": { - "1280": { - "name": "Normal", - "proto": "PILOSWINE_NORMAL", - "evolutions": [ - { - "pokemon": 473, - "form": 1838 - } - ] - }, - "1281": { - "name": "Shadow", - "proto": "PILOSWINE_SHADOW", - "evolutions": [ - { - "pokemon": 473, - "form": 1839 - } - ] - }, - "1282": { - "name": "Purified", - "proto": "PILOSWINE_PURIFIED", - "evolutions": [ - { - "pokemon": 473, - "form": 1840 - } - ] - } - }, - "default_form_id": 1280, - "pokedex_id": 221, - "genId": "2", - "generation": "Johto", - "types": [ - "Ice", - "Ground" - ], - "attack": 181, - "defense": 138, - "stamina": 225, - "height": 1.09, - "weight": 55.8, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Ice Shard", - "Powder Snow" - ], - "charged_moves": [ - "Avalanche", - "Bulldoze", - "Stone Edge" - ], - "evolutions": [ - { - "pokemon": 473, - "form": 1838 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "222": { - "name": "Corsola", - "forms": { - "1283": { - "name": "Normal", - "proto": "CORSOLA_NORMAL" - }, - "1284": { - "name": "Shadow", - "proto": "CORSOLA_SHADOW" - }, - "1285": { - "name": "Purified", - "proto": "CORSOLA_PURIFIED" - }, - "2340": { - "name": "Galarian", - "proto": "CORSOLA_GALARIAN" - } - }, - "default_form_id": 1283, - "pokedex_id": 222, - "genId": "2", - "generation": "Johto", - "types": [ - "Water", - "Rock" - ], - "attack": 118, - "defense": 156, - "stamina": 146, - "height": 0.61, - "weight": 5, - "flee_rate": 0.12, - "capture_rate": 0.3, - "quick_moves": [ - "Tackle", - "Bubble" - ], - "charged_moves": [ - "Rock Blast", - "Power Gem", - "Bubble Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "223": { - "name": "Remoraid", - "forms": { - "1286": { - "name": "Normal", - "proto": "REMORAID_NORMAL" - }, - "1287": { - "name": "Shadow", - "proto": "REMORAID_SHADOW" - }, - "1288": { - "name": "Purified", - "proto": "REMORAID_PURIFIED" - } - }, - "default_form_id": 1286, - "pokedex_id": 223, - "genId": "2", - "generation": "Johto", - "types": [ - "Water" - ], - "attack": 127, - "defense": 69, - "stamina": 111, - "height": 0.61, - "weight": 12, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Water Gun", - "Mud Shot" - ], - "charged_moves": [ - "Aurora Beam", - "Water Pulse", - "Rock Blast" - ], - "evolutions": [ - { - "pokemon": 224 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "224": { - "name": "Octillery", - "forms": { - "1289": { - "name": "Normal", - "proto": "OCTILLERY_NORMAL" - }, - "1290": { - "name": "Shadow", - "proto": "OCTILLERY_SHADOW" - }, - "1291": { - "name": "Purified", - "proto": "OCTILLERY_PURIFIED" - } - }, - "default_form_id": 1289, - "pokedex_id": 224, - "genId": "2", - "generation": "Johto", - "types": [ - "Water" - ], - "attack": 197, - "defense": 141, - "stamina": 181, - "height": 0.89, - "weight": 28.5, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Water Gun", - "Mud Shot" - ], - "charged_moves": [ - "Gunk Shot", - "Water Pulse", - "Aurora Beam", - "Acid Spray", - "Octazooka" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "225": { - "name": "Delibird", - "forms": { - "938": { - "name": "Normal", - "proto": "DELIBIRD_NORMAL" - }, - "939": { - "name": "Shadow", - "proto": "DELIBIRD_SHADOW" - }, - "940": { - "name": "Purified", - "proto": "DELIBIRD_PURIFIED" - }, - "2671": { - "name": "Winter 2020", - "proto": "DELIBIRD_WINTER_2020" - } - }, - "default_form_id": 938, - "pokedex_id": 225, - "genId": "2", - "generation": "Johto", - "types": [ - "Ice", - "Flying" - ], - "attack": 128, - "defense": 90, - "stamina": 128, - "height": 0.89, - "weight": 16, - "flee_rate": 0.2, - "capture_rate": 0.2, - "quick_moves": [ - "Present" - ], - "charged_moves": [ - "Ice Punch", - "Icy Wind", - "Aerial Ace" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "226": { - "name": "Mantine", - "forms": { - "1292": { - "name": "Normal", - "proto": "MANTINE_NORMAL" - }, - "1293": { - "name": "Shadow", - "proto": "MANTINE_SHADOW" - }, - "1294": { - "name": "Purified", - "proto": "MANTINE_PURIFIED" - } - }, - "default_form_id": 1292, - "pokedex_id": 226, - "genId": "2", - "generation": "Johto", - "types": [ - "Water", - "Flying" - ], - "attack": 148, - "defense": 226, - "stamina": 163, - "height": 2.11, - "weight": 220, - "flee_rate": 0.07, - "capture_rate": 0.3, - "quick_moves": [ - "Bubble", - "Wing Attack", - "Bullet Seed" - ], - "charged_moves": [ - "Water Pulse", - "Ice Beam", - "Aerial Ace", - "Bubble Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "227": { - "name": "Skarmory", - "forms": { - "1295": { - "name": "Normal", - "proto": "SKARMORY_NORMAL" - }, - "1296": { - "name": "Shadow", - "proto": "SKARMORY_SHADOW" - }, - "1297": { - "name": "Purified", - "proto": "SKARMORY_PURIFIED" - } - }, - "default_form_id": 1295, - "pokedex_id": 227, - "genId": "2", - "generation": "Johto", - "types": [ - "Steel", - "Flying" - ], - "attack": 148, - "defense": 226, - "stamina": 163, - "height": 1.7, - "weight": 50.5, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Steel Wing", - "Air Slash" - ], - "charged_moves": [ - "Brave Bird", - "Sky Attack", - "Flash Cannon" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "228": { - "name": "Houndour", - "forms": { - "229": { - "name": "Normal", - "proto": "HOUNDOUR_NORMAL", - "evolutions": [ - { - "pokemon": 229, - "form": 232 - } - ] - }, - "230": { - "name": "Shadow", - "proto": "HOUNDOUR_SHADOW", - "evolutions": [ - { - "pokemon": 229, - "form": 233 - } - ] - }, - "231": { - "name": "Purified", - "proto": "HOUNDOUR_PURIFIED", - "evolutions": [ - { - "pokemon": 229, - "form": 234 - } - ] - } - }, - "default_form_id": 229, - "pokedex_id": 228, - "genId": "2", - "generation": "Johto", - "types": [ - "Dark", - "Fire" - ], - "attack": 152, - "defense": 83, - "stamina": 128, - "height": 0.61, - "weight": 10.8, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Feint Attack", - "Ember" - ], - "charged_moves": [ - "Crunch", - "Flamethrower", - "Dark Pulse" - ], - "evolutions": [ - { - "pokemon": 229, - "form": 232 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "229": { - "name": "Houndoom", - "forms": { - "232": { - "name": "Normal", - "proto": "HOUNDOOM_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "233": { - "name": "Shadow", - "proto": "HOUNDOOM_SHADOW" - }, - "234": { - "name": "Purified", - "proto": "HOUNDOOM_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 232, - "pokedex_id": 229, - "genId": "2", - "generation": "Johto", - "types": [ - "Dark", - "Fire" - ], - "attack": 224, - "defense": 144, - "stamina": 181, - "height": 1.4, - "weight": 35, - "flee_rate": 0.06, - "capture_rate": 0.15, - "quick_moves": [ - "Snarl", - "Fire Fang" - ], - "charged_moves": [ - "Crunch", - "Fire Blast", - "Foul Play", - "Flamethrower" - ], - "temp_evolutions": { - "1": { - "attack": 289, - "defense": 194, - "stamina": 181, - "height": 1.9, - "weight": 49.5 - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "230": { - "name": "Kingdra", - "forms": { - "1298": { - "name": "Normal", - "proto": "KINGDRA_NORMAL" - }, - "1299": { - "name": "Shadow", - "proto": "KINGDRA_SHADOW" - }, - "1300": { - "name": "Purified", - "proto": "KINGDRA_PURIFIED" - } - }, - "default_form_id": 1298, - "pokedex_id": 230, - "genId": "2", - "generation": "Johto", - "types": [ - "Water", - "Dragon" - ], - "attack": 194, - "defense": 194, - "stamina": 181, - "height": 1.8, - "weight": 152, - "flee_rate": 0.05, - "capture_rate": 0.1, - "quick_moves": [ - "Waterfall", - "Dragon Breath" - ], - "charged_moves": [ - "Hydro Pump", - "Blizzard", - "Outrage", - "Octazooka" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "231": { - "name": "Phanpy", - "forms": { - "1301": { - "name": "Normal", - "proto": "PHANPY_NORMAL" - }, - "1302": { - "name": "Shadow", - "proto": "PHANPY_SHADOW" - }, - "1303": { - "name": "Purified", - "proto": "PHANPY_PURIFIED" - } - }, - "default_form_id": 1301, - "pokedex_id": 231, - "genId": "2", - "generation": "Johto", - "types": [ - "Ground" - ], - "attack": 107, - "defense": 98, - "stamina": 207, - "height": 0.51, - "weight": 33.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Rock Smash" - ], - "charged_moves": [ - "Bulldoze", - "Rock Slide", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 232 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "232": { - "name": "Donphan", - "forms": { - "1304": { - "name": "Normal", - "proto": "DONPHAN_NORMAL" - }, - "1305": { - "name": "Shadow", - "proto": "DONPHAN_SHADOW" - }, - "1306": { - "name": "Purified", - "proto": "DONPHAN_PURIFIED" - } - }, - "default_form_id": 1304, - "pokedex_id": 232, - "genId": "2", - "generation": "Johto", - "types": [ - "Ground" - ], - "attack": 214, - "defense": 185, - "stamina": 207, - "height": 1.09, - "weight": 120, - "flee_rate": 0.07, - "capture_rate": 0.125, - "quick_moves": [ - "Tackle", - "Counter", - "Mud Slap", - "Charm" - ], - "charged_moves": [ - "Earthquake", - "Heavy Slam", - "Play Rough" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "233": { - "name": "Porygon2", - "forms": { - "680": { - "name": "Normal", - "proto": "PORYGON2_NORMAL", - "evolutions": [ - { - "pokemon": 474, - "form": 683 - } - ] - }, - "681": { - "name": "Shadow", - "proto": "PORYGON2_SHADOW", - "evolutions": [ - { - "pokemon": 474, - "form": 684 - } - ] - }, - "682": { - "name": "Purified", - "proto": "PORYGON2_PURIFIED", - "evolutions": [ - { - "pokemon": 474, - "form": 685 - } - ] - } - }, - "default_form_id": 680, - "pokedex_id": 233, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal" - ], - "attack": 198, - "defense": 180, - "stamina": 198, - "height": 0.61, - "weight": 32.5, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Hidden Power", - "Charge Beam", - "Lock On" - ], - "charged_moves": [ - "Solar Beam", - "Hyper Beam", - "Zap Cannon", - "Tri Attack" - ], - "evolutions": [ - { - "pokemon": 474, - "form": 683 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "234": { - "name": "Stantler", - "forms": { - "941": { - "name": "Normal", - "proto": "STANTLER_NORMAL" - }, - "942": { - "name": "Shadow", - "proto": "STANTLER_SHADOW" - }, - "943": { - "name": "Purified", - "proto": "STANTLER_PURIFIED" - } - }, - "default_form_id": 941, - "pokedex_id": 234, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal" - ], - "attack": 192, - "defense": 131, - "stamina": 177, - "height": 1.4, - "weight": 71.2, - "flee_rate": 0.08, - "capture_rate": 0.3, - "quick_moves": [ - "Tackle", - "Zen Headbutt" - ], - "charged_moves": [ - "Stomp", - "Wild Charge", - "Megahorn" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "235": { - "name": "Smeargle", - "forms": { - "1307": { - "name": "Normal", - "proto": "SMEARGLE_NORMAL" - }, - "1308": { - "name": "Shadow", - "proto": "SMEARGLE_SHADOW" - }, - "1309": { - "name": "Purified", - "proto": "SMEARGLE_PURIFIED" - } - }, - "default_form_id": 1307, - "pokedex_id": 235, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal" - ], - "attack": 40, - "defense": 83, - "stamina": 146, - "height": 1.19, - "weight": 58, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [], - "charged_moves": [], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_candy": 9999999, - "gym_defender_eligible": true - }, - "236": { - "name": "Tyrogue", - "forms": { - "1310": { - "name": "Normal", - "proto": "TYROGUE_NORMAL" - }, - "1311": { - "name": "Shadow", - "proto": "TYROGUE_SHADOW" - }, - "1312": { - "name": "Purified", - "proto": "TYROGUE_PURIFIED" - } - }, - "default_form_id": 1310, - "pokedex_id": 236, - "genId": "2", - "generation": "Johto", - "types": [ - "Fighting" - ], - "attack": 64, - "defense": 64, - "stamina": 111, - "height": 0.71, - "weight": 21, - "flee_rate": 0.2, - "quick_moves": [ - "Rock Smash", - "Tackle" - ], - "charged_moves": [ - "Brick Break", - "Rock Slide", - "Low Sweep" - ], - "evolutions": [ - { - "pokemon": 106 - }, - { - "pokemon": 107 - }, - { - "pokemon": 237 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "237": { - "name": "Hitmontop", - "forms": { - "1313": { - "name": "Normal", - "proto": "HITMONTOP_NORMAL" - }, - "1314": { - "name": "Shadow", - "proto": "HITMONTOP_SHADOW" - }, - "1315": { - "name": "Purified", - "proto": "HITMONTOP_PURIFIED" - } - }, - "default_form_id": 1313, - "pokedex_id": 237, - "genId": "2", - "generation": "Johto", - "types": [ - "Fighting" - ], - "attack": 173, - "defense": 207, - "stamina": 137, - "height": 1.4, - "weight": 48, - "flee_rate": 0.05, - "capture_rate": 0.1, - "quick_moves": [ - "Rock Smash", - "Counter" - ], - "charged_moves": [ - "Close Combat", - "Gyro Ball", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "238": { - "name": "Smoochum", - "forms": { - "1316": { - "name": "Normal", - "proto": "SMOOCHUM_NORMAL" - }, - "1317": { - "name": "Shadow", - "proto": "SMOOCHUM_SHADOW" - }, - "1318": { - "name": "Purified", - "proto": "SMOOCHUM_PURIFIED" - } - }, - "default_form_id": 1316, - "pokedex_id": 238, - "genId": "2", - "generation": "Johto", - "types": [ - "Ice", - "Psychic" - ], - "attack": 153, - "defense": 91, - "stamina": 128, - "height": 0.41, - "weight": 6, - "flee_rate": 0.2, - "capture_rate": 0.25, - "quick_moves": [ - "Powder Snow", - "Pound" - ], - "charged_moves": [ - "Ice Beam", - "Ice Punch", - "Psyshock" - ], - "evolutions": [ - { - "pokemon": 124 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 5, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "239": { - "name": "Elekid", - "forms": { - "1319": { - "name": "Normal", - "proto": "ELEKID_NORMAL" - }, - "1320": { - "name": "Shadow", - "proto": "ELEKID_SHADOW" - }, - "1321": { - "name": "Purified", - "proto": "ELEKID_PURIFIED" - } - }, - "default_form_id": 1319, - "pokedex_id": 239, - "genId": "2", - "generation": "Johto", - "types": [ - "Electric" - ], - "attack": 135, - "defense": 101, - "stamina": 128, - "height": 0.61, - "weight": 23.5, - "flee_rate": 0.2, - "quick_moves": [ - "Thunder Shock", - "Low Kick" - ], - "charged_moves": [ - "Thunder Punch", - "Brick Break", - "Discharge" - ], - "evolutions": [ - { - "pokemon": 125 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 5, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "240": { - "name": "Magby", - "forms": { - "1322": { - "name": "Normal", - "proto": "MAGBY_NORMAL" - }, - "1323": { - "name": "Shadow", - "proto": "MAGBY_SHADOW" - }, - "1324": { - "name": "Purified", - "proto": "MAGBY_PURIFIED" - } - }, - "default_form_id": 1322, - "pokedex_id": 240, - "genId": "2", - "generation": "Johto", - "types": [ - "Fire" - ], - "attack": 151, - "defense": 99, - "stamina": 128, - "height": 0.71, - "weight": 21.4, - "flee_rate": 0.2, - "quick_moves": [ - "Ember", - "Karate Chop" - ], - "charged_moves": [ - "Brick Break", - "Fire Punch", - "Flame Burst" - ], - "evolutions": [ - { - "pokemon": 126 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 5, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "241": { - "name": "Miltank", - "forms": { - "1325": { - "name": "Normal", - "proto": "MILTANK_NORMAL" - }, - "1326": { - "name": "Shadow", - "proto": "MILTANK_SHADOW" - }, - "1327": { - "name": "Purified", - "proto": "MILTANK_PURIFIED" - } - }, - "default_form_id": 1325, - "pokedex_id": 241, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal" - ], - "attack": 157, - "defense": 193, - "stamina": 216, - "height": 1.19, - "weight": 75.5, - "flee_rate": 0.08, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Zen Headbutt" - ], - "charged_moves": [ - "Stomp", - "Body Slam", - "Gyro Ball", - "Thunderbolt", - "Ice Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "242": { - "name": "Blissey", - "forms": { - "1328": { - "name": "Normal", - "proto": "BLISSEY_NORMAL" - }, - "1329": { - "name": "Shadow", - "proto": "BLISSEY_SHADOW" - }, - "1330": { - "name": "Purified", - "proto": "BLISSEY_PURIFIED" - } - }, - "default_form_id": 1328, - "pokedex_id": 242, - "genId": "2", - "generation": "Johto", - "types": [ - "Normal" - ], - "attack": 129, - "defense": 169, - "stamina": 496, - "height": 1.5, - "weight": 46.8, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Pound", - "Zen Headbutt" - ], - "charged_moves": [ - "Psychic", - "Hyper Beam", - "Dazzling Gleam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "243": { - "name": "Raikou", - "forms": { - "1331": { - "name": "Normal", - "proto": "RAIKOU_NORMAL" - }, - "1332": { - "name": "Shadow", - "proto": "RAIKOU_SHADOW" - }, - "1333": { - "name": "Purified", - "proto": "RAIKOU_PURIFIED" - } - }, - "default_form_id": 1331, - "pokedex_id": 243, - "genId": "2", - "generation": "Johto", - "types": [ - "Electric" - ], - "attack": 241, - "defense": 195, - "stamina": 207, - "height": 1.91, - "weight": 178, - "flee_rate": 0.04, - "capture_rate": 0.02, - "quick_moves": [ - "Thunder Shock", - "Volt Switch" - ], - "charged_moves": [ - "Thunder", - "Thunderbolt", - "Wild Charge", - "Shadow Ball" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "244": { - "name": "Entei", - "forms": { - "1334": { - "name": "Normal", - "proto": "ENTEI_NORMAL" - }, - "1335": { - "name": "Shadow", - "proto": "ENTEI_SHADOW" - }, - "1336": { - "name": "Purified", - "proto": "ENTEI_PURIFIED" - } - }, - "default_form_id": 1334, - "pokedex_id": 244, - "genId": "2", - "generation": "Johto", - "types": [ - "Fire" - ], - "attack": 235, - "defense": 171, - "stamina": 251, - "height": 2.11, - "weight": 198, - "flee_rate": 0.04, - "capture_rate": 0.02, - "quick_moves": [ - "Fire Spin", - "Fire Fang" - ], - "charged_moves": [ - "Flamethrower", - "Fire Blast", - "Overheat", - "Iron Head", - "Flame Charge" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "245": { - "name": "Suicune", - "forms": { - "1337": { - "name": "Normal", - "proto": "SUICUNE_NORMAL" - }, - "1338": { - "name": "Shadow", - "proto": "SUICUNE_SHADOW" - }, - "1339": { - "name": "Purified", - "proto": "SUICUNE_PURIFIED" - } - }, - "default_form_id": 1337, - "pokedex_id": 245, - "genId": "2", - "generation": "Johto", - "types": [ - "Water" - ], - "attack": 180, - "defense": 235, - "stamina": 225, - "height": 2.01, - "weight": 187, - "flee_rate": 0.04, - "capture_rate": 0.02, - "quick_moves": [ - "Extrasensory", - "Snarl", - "Ice Fang" - ], - "charged_moves": [ - "Hydro Pump", - "Bubble Beam", - "Water Pulse", - "Ice Beam" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "246": { - "name": "Larvitar", - "forms": { - "313": { - "name": "Normal", - "proto": "LARVITAR_NORMAL", - "evolutions": [ - { - "pokemon": 247, - "form": 316 - } - ] - }, - "314": { - "name": "Shadow", - "proto": "LARVITAR_SHADOW", - "evolutions": [ - { - "pokemon": 247, - "form": 317 - } - ] - }, - "315": { - "name": "Purified", - "proto": "LARVITAR_PURIFIED", - "evolutions": [ - { - "pokemon": 247, - "form": 318 - } - ] - } - }, - "default_form_id": 313, - "pokedex_id": 246, - "genId": "2", - "generation": "Johto", - "types": [ - "Rock", - "Ground" - ], - "attack": 115, - "defense": 93, - "stamina": 137, - "height": 0.61, - "weight": 72, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Bite", - "Rock Smash" - ], - "charged_moves": [ - "Stomp", - "Crunch", - "Ancient Power" - ], - "evolutions": [ - { - "pokemon": 247, - "form": 316 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "247": { - "name": "Pupitar", - "forms": { - "316": { - "name": "Normal", - "proto": "PUPITAR_NORMAL", - "evolutions": [ - { - "pokemon": 248, - "form": 319 - } - ] - }, - "317": { - "name": "Shadow", - "proto": "PUPITAR_SHADOW", - "evolutions": [ - { - "pokemon": 248, - "form": 320 - } - ] - }, - "318": { - "name": "Purified", - "proto": "PUPITAR_PURIFIED", - "evolutions": [ - { - "pokemon": 248, - "form": 321 - } - ] - } - }, - "default_form_id": 316, - "pokedex_id": 247, - "genId": "2", - "generation": "Johto", - "types": [ - "Rock", - "Ground" - ], - "attack": 155, - "defense": 133, - "stamina": 172, - "height": 1.19, - "weight": 152, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Bite", - "Rock Smash" - ], - "charged_moves": [ - "Dig", - "Crunch", - "Ancient Power" - ], - "evolutions": [ - { - "pokemon": 248, - "form": 319 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "248": { - "name": "Tyranitar", - "forms": { - "319": { - "name": "Normal", - "proto": "TYRANITAR_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "320": { - "name": "Shadow", - "proto": "TYRANITAR_SHADOW" - }, - "321": { - "name": "Purified", - "proto": "TYRANITAR_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 319, - "pokedex_id": 248, - "genId": "2", - "generation": "Johto", - "types": [ - "Rock", - "Dark" - ], - "attack": 251, - "defense": 207, - "stamina": 225, - "height": 2.01, - "weight": 202, - "flee_rate": 0.04, - "capture_rate": 0.05, - "quick_moves": [ - "Bite", - "Iron Tail" - ], - "charged_moves": [ - "Fire Blast", - "Crunch", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 309, - "defense": 276, - "stamina": 225, - "unreleased": true - } - } - }, - "249": { - "name": "Lugia", - "forms": { - "1340": { - "name": "Normal", - "proto": "LUGIA_NORMAL" - }, - "1341": { - "name": "Shadow", - "proto": "LUGIA_SHADOW" - }, - "1342": { - "name": "Purified", - "proto": "LUGIA_PURIFIED" - } - }, - "default_form_id": 1340, - "pokedex_id": 249, - "genId": "2", - "generation": "Johto", - "types": [ - "Psychic", - "Flying" - ], - "attack": 193, - "defense": 310, - "stamina": 235, - "height": 5.21, - "weight": 216, - "flee_rate": 0.04, - "capture_rate": 0.02, - "quick_moves": [ - "Extrasensory", - "Dragon Tail" - ], - "charged_moves": [ - "Sky Attack", - "Hydro Pump", - "Futuresight" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "250": { - "name": "Ho Oh", - "forms": { - "1343": { - "name": "Normal", - "proto": "HO_OH_NORMAL" - }, - "1344": { - "name": "Shadow", - "proto": "HO_OH_SHADOW" - }, - "1345": { - "name": "Purified", - "proto": "HO_OH_PURIFIED" - } - }, - "default_form_id": 1343, - "pokedex_id": 250, - "genId": "2", - "generation": "Johto", - "types": [ - "Fire", - "Flying" - ], - "attack": 239, - "defense": 244, - "stamina": 214, - "height": 3.81, - "weight": 199, - "flee_rate": 0.04, - "capture_rate": 0.02, - "quick_moves": [ - "Extrasensory", - "Steel Wing", - "Hidden Power", - "Incinerate" - ], - "charged_moves": [ - "Brave Bird", - "Fire Blast", - "Solar Beam" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "251": { - "name": "Celebi", - "forms": { - "1346": { - "name": "Normal", - "proto": "CELEBI_NORMAL" - }, - "1347": { - "name": "Shadow", - "proto": "CELEBI_SHADOW" - }, - "1348": { - "name": "Purified", - "proto": "CELEBI_PURIFIED" - } - }, - "default_form_id": 1346, - "pokedex_id": 251, - "genId": "2", - "generation": "Johto", - "types": [ - "Psychic", - "Grass" - ], - "attack": 210, - "defense": 210, - "stamina": 225, - "height": 0.61, - "weight": 5, - "capture_rate": 100, - "quick_moves": [ - "Confusion", - "Charge Beam" - ], - "charged_moves": [ - "Hyper Beam", - "Psychic", - "Dazzling Gleam", - "Seed Bomb", - "Leaf Storm" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "252": { - "name": "Treecko", - "forms": { - "1349": { - "name": "Normal", - "proto": "TREECKO_NORMAL" - }, - "1350": { - "name": "Shadow", - "proto": "TREECKO_SHADOW" - }, - "1351": { - "name": "Purified", - "proto": "TREECKO_PURIFIED" - } - }, - "default_form_id": 1349, - "pokedex_id": 252, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass" - ], - "attack": 124, - "defense": 94, - "stamina": 120, - "height": 0.51, - "weight": 5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Pound", - "Bullet Seed" - ], - "charged_moves": [ - "Energy Ball", - "Aerial Ace", - "Grass Knot" - ], - "evolutions": [ - { - "pokemon": 253 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "253": { - "name": "Grovyle", - "forms": { - "1352": { - "name": "Normal", - "proto": "GROVYLE_NORMAL" - }, - "1353": { - "name": "Shadow", - "proto": "GROVYLE_SHADOW" - }, - "1354": { - "name": "Purified", - "proto": "GROVYLE_PURIFIED" - } - }, - "default_form_id": 1352, - "pokedex_id": 253, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass" - ], - "attack": 172, - "defense": 120, - "stamina": 137, - "height": 0.89, - "weight": 21.6, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Quick Attack", - "Bullet Seed" - ], - "charged_moves": [ - "Leaf Blade", - "Aerial Ace", - "Grass Knot" - ], - "evolutions": [ - { - "pokemon": 254 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "254": { - "name": "Sceptile", - "forms": { - "1355": { - "name": "Normal", - "proto": "SCEPTILE_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1356": { - "name": "Shadow", - "proto": "SCEPTILE_SHADOW" - }, - "1357": { - "name": "Purified", - "proto": "SCEPTILE_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1355, - "pokedex_id": 254, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass" - ], - "attack": 223, - "defense": 169, - "stamina": 172, - "height": 1.7, - "weight": 52.2, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Fury Cutter", - "Bullet Seed" - ], - "charged_moves": [ - "Leaf Blade", - "Aerial Ace", - "Earthquake", - "Dragon Claw" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 320, - "defense": 186, - "stamina": 172, - "unreleased": true, - "types": [ - "Grass", - "Dragon" - ] - } - } - }, - "255": { - "name": "Torchic", - "forms": { - "1358": { - "name": "Normal", - "proto": "TORCHIC_NORMAL", - "evolutions": [ - { - "pokemon": 256, - "form": 1361 - } - ] - }, - "1359": { - "name": "Shadow", - "proto": "TORCHIC_SHADOW", - "evolutions": [ - { - "pokemon": 256, - "form": 1362 - } - ] - }, - "1360": { - "name": "Purified", - "proto": "TORCHIC_PURIFIED", - "evolutions": [ - { - "pokemon": 256, - "form": 1363 - } - ] - } - }, - "default_form_id": 1358, - "pokedex_id": 255, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Fire" - ], - "attack": 130, - "defense": 87, - "stamina": 128, - "height": 0.41, - "weight": 2.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Scratch", - "Ember" - ], - "charged_moves": [ - "Flame Charge", - "Flamethrower", - "Rock Tomb" - ], - "evolutions": [ - { - "pokemon": 256, - "form": 1361 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "256": { - "name": "Combusken", - "forms": { - "1361": { - "name": "Normal", - "proto": "COMBUSKEN_NORMAL", - "evolutions": [ - { - "pokemon": 257, - "form": 1364 - } - ] - }, - "1362": { - "name": "Shadow", - "proto": "COMBUSKEN_SHADOW", - "evolutions": [ - { - "pokemon": 257, - "form": 1365 - } - ] - }, - "1363": { - "name": "Purified", - "proto": "COMBUSKEN_PURIFIED", - "evolutions": [ - { - "pokemon": 257, - "form": 1366 - } - ] - } - }, - "default_form_id": 1361, - "pokedex_id": 256, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Fire", - "Fighting" - ], - "attack": 163, - "defense": 115, - "stamina": 155, - "height": 0.89, - "weight": 19.5, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Peck", - "Ember" - ], - "charged_moves": [ - "Flame Charge", - "Flamethrower", - "Rock Slide" - ], - "evolutions": [ - { - "pokemon": 257, - "form": 1364 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "257": { - "name": "Blaziken", - "forms": { - "1364": { - "name": "Normal", - "proto": "BLAZIKEN_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1365": { - "name": "Shadow", - "proto": "BLAZIKEN_SHADOW" - }, - "1366": { - "name": "Purified", - "proto": "BLAZIKEN_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1364, - "pokedex_id": 257, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Fire", - "Fighting" - ], - "attack": 240, - "defense": 141, - "stamina": 190, - "height": 1.91, - "weight": 52, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Counter", - "Fire Spin" - ], - "charged_moves": [ - "Focus Blast", - "Overheat", - "Brave Bird", - "Blaze Kick" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 329, - "defense": 168, - "stamina": 190, - "unreleased": true - } - } - }, - "258": { - "name": "Mudkip", - "forms": { - "205": { - "name": "Normal", - "proto": "MUDKIP_NORMAL", - "evolutions": [ - { - "pokemon": 259, - "form": 208 - } - ] - }, - "206": { - "name": "Shadow", - "proto": "MUDKIP_SHADOW", - "evolutions": [ - { - "pokemon": 259, - "form": 209 - } - ] - }, - "207": { - "name": "Purified", - "proto": "MUDKIP_PURIFIED", - "evolutions": [ - { - "pokemon": 259, - "form": 210 - } - ] - } - }, - "default_form_id": 205, - "pokedex_id": 258, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water" - ], - "attack": 126, - "defense": 93, - "stamina": 137, - "height": 0.41, - "weight": 7.6, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Water Gun" - ], - "charged_moves": [ - "Dig", - "Sludge", - "Stomp" - ], - "evolutions": [ - { - "pokemon": 259, - "form": 208 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "259": { - "name": "Marshtomp", - "forms": { - "208": { - "name": "Normal", - "proto": "MARSHTOMP_NORMAL", - "evolutions": [ - { - "pokemon": 260, - "form": 211 - } - ] - }, - "209": { - "name": "Shadow", - "proto": "MARSHTOMP_SHADOW", - "evolutions": [ - { - "pokemon": 260, - "form": 212 - } - ] - }, - "210": { - "name": "Purified", - "proto": "MARSHTOMP_PURIFIED", - "evolutions": [ - { - "pokemon": 260, - "form": 213 - } - ] - } - }, - "default_form_id": 208, - "pokedex_id": 259, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Ground" - ], - "attack": 156, - "defense": 133, - "stamina": 172, - "height": 0.71, - "weight": 28, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Mud Shot", - "Water Gun" - ], - "charged_moves": [ - "Mud Bomb", - "Sludge", - "Surf" - ], - "evolutions": [ - { - "pokemon": 260, - "form": 211 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "260": { - "name": "Swampert", - "forms": { - "211": { - "name": "Normal", - "proto": "SWAMPERT_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "212": { - "name": "Shadow", - "proto": "SWAMPERT_SHADOW" - }, - "213": { - "name": "Purified", - "proto": "SWAMPERT_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 211, - "pokedex_id": 260, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Ground" - ], - "attack": 208, - "defense": 175, - "stamina": 225, - "height": 1.5, - "weight": 81.9, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Mud Shot", - "Water Gun" - ], - "charged_moves": [ - "Earthquake", - "Sludge Wave", - "Surf", - "Muddy Water" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 283, - "defense": 218, - "stamina": 225, - "unreleased": true - } - } - }, - "261": { - "name": "Poochyena", - "forms": { - "1367": { - "name": "Normal", - "proto": "POOCHYENA_NORMAL", - "evolutions": [ - { - "pokemon": 262, - "form": 1370 - } - ] - }, - "1368": { - "name": "Shadow", - "proto": "POOCHYENA_SHADOW", - "evolutions": [ - { - "pokemon": 262, - "form": 1371 - } - ] - }, - "1369": { - "name": "Purified", - "proto": "POOCHYENA_PURIFIED", - "evolutions": [ - { - "pokemon": 262, - "form": 1372 - } - ] - } - }, - "default_form_id": 1367, - "pokedex_id": 261, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Dark" - ], - "attack": 96, - "defense": 61, - "stamina": 111, - "height": 0.51, - "weight": 13.6, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Snarl" - ], - "charged_moves": [ - "Crunch", - "Dig", - "Poison Fang" - ], - "evolutions": [ - { - "pokemon": 262, - "form": 1370 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "262": { - "name": "Mightyena", - "forms": { - "1370": { - "name": "Normal", - "proto": "MIGHTYENA_NORMAL" - }, - "1371": { - "name": "Shadow", - "proto": "MIGHTYENA_SHADOW" - }, - "1372": { - "name": "Purified", - "proto": "MIGHTYENA_PURIFIED" - } - }, - "default_form_id": 1370, - "pokedex_id": 262, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Dark" - ], - "attack": 171, - "defense": 132, - "stamina": 172, - "height": 0.99, - "weight": 37, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Bite", - "Fire Fang", - "Thunder Fang", - "Ice Fang" - ], - "charged_moves": [ - "Crunch", - "Play Rough", - "Poison Fang" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "263": { - "name": "Zigzagoon", - "forms": { - "945": { - "name": "Normal", - "proto": "ZIGZAGOON_NORMAL", - "evolutions": [ - { - "pokemon": 264, - "form": 947 - } - ] - }, - "946": { - "name": "Galarian", - "proto": "ZIGZAGOON_GALARIAN", - "evolutions": [ - { - "pokemon": 264, - "form": 948 - } - ], - "quick_moves": [ - "Tackle", - "Take Down" - ], - "charged_moves": [ - "Dig", - "Body Slam", - "Swift" - ], - "types": [ - "Dark", - "Normal" - ] - }, - "1373": { - "name": "Shadow", - "proto": "ZIGZAGOON_SHADOW", - "evolutions": [ - { - "pokemon": 264, - "form": 1375 - } - ] - }, - "1374": { - "name": "Purified", - "proto": "ZIGZAGOON_PURIFIED", - "evolutions": [ - { - "pokemon": 264, - "form": 1376 - } - ] - } - }, - "default_form_id": 945, - "pokedex_id": 263, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 58, - "defense": 80, - "stamina": 116, - "height": 0.4, - "weight": 17.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Rock Smash" - ], - "charged_moves": [ - "Dig", - "Grass Knot", - "Thunderbolt" - ], - "evolutions": [ - { - "pokemon": 264, - "form": 947 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "264": { - "name": "Linoone", - "forms": { - "947": { - "name": "Normal", - "proto": "LINOONE_NORMAL" - }, - "948": { - "name": "Galarian", - "proto": "LINOONE_GALARIAN", - "evolutions": [ - { - "pokemon": 862, - "form": 2501 - } - ], - "quick_moves": [ - "Snarl", - "Lick" - ], - "charged_moves": [ - "Dig", - "Body Slam", - "Gunk Shot" - ], - "types": [ - "Dark", - "Normal" - ] - }, - "1375": { - "name": "Shadow", - "proto": "LINOONE_SHADOW" - }, - "1376": { - "name": "Purified", - "proto": "LINOONE_PURIFIED" - } - }, - "default_form_id": 947, - "pokedex_id": 264, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 142, - "defense": 128, - "stamina": 186, - "height": 0.5, - "weight": 32.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Shadow Claw", - "Tackle" - ], - "charged_moves": [ - "Dig", - "Grass Knot", - "Thunder" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "265": { - "name": "Wurmple", - "forms": { - "600": { - "name": "Normal", - "proto": "WURMPLE_NORMAL" - }, - "1377": { - "name": "Shadow", - "proto": "WURMPLE_SHADOW" - }, - "1378": { - "name": "Purified", - "proto": "WURMPLE_PURIFIED" - }, - "2327": { - "name": "Spring 2020", - "proto": "WURMPLE_SPRING_2020" - } - }, - "default_form_id": 600, - "pokedex_id": 265, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug" - ], - "attack": 75, - "defense": 59, - "stamina": 128, - "height": 0.3, - "weight": 3.6, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Bug Bite" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 266 - }, - { - "pokemon": 268 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "266": { - "name": "Silcoon", - "forms": { - "1379": { - "name": "Normal", - "proto": "SILCOON_NORMAL" - }, - "1380": { - "name": "Shadow", - "proto": "SILCOON_SHADOW" - }, - "1381": { - "name": "Purified", - "proto": "SILCOON_PURIFIED" - } - }, - "default_form_id": 1379, - "pokedex_id": 266, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug" - ], - "attack": 60, - "defense": 77, - "stamina": 137, - "height": 0.61, - "weight": 10, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Poison Sting", - "Bug Bite" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 267 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "267": { - "name": "Beautifly", - "forms": { - "1382": { - "name": "Normal", - "proto": "BEAUTIFLY_NORMAL" - }, - "1383": { - "name": "Shadow", - "proto": "BEAUTIFLY_SHADOW" - }, - "1384": { - "name": "Purified", - "proto": "BEAUTIFLY_PURIFIED" - } - }, - "default_form_id": 1382, - "pokedex_id": 267, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug", - "Flying" - ], - "attack": 189, - "defense": 98, - "stamina": 155, - "height": 0.99, - "weight": 28.4, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Struggle Bug", - "Infestation" - ], - "charged_moves": [ - "Silver Wind", - "Air Cutter", - "Bug Buzz" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "268": { - "name": "Cascoon", - "forms": { - "1385": { - "name": "Normal", - "proto": "CASCOON_NORMAL" - }, - "1386": { - "name": "Shadow", - "proto": "CASCOON_SHADOW" - }, - "1387": { - "name": "Purified", - "proto": "CASCOON_PURIFIED" - } - }, - "default_form_id": 1385, - "pokedex_id": 268, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug" - ], - "attack": 60, - "defense": 77, - "stamina": 137, - "height": 0.71, - "weight": 11.5, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Poison Sting", - "Bug Bite" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 269 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "269": { - "name": "Dustox", - "forms": { - "1388": { - "name": "Normal", - "proto": "DUSTOX_NORMAL" - }, - "1389": { - "name": "Shadow", - "proto": "DUSTOX_SHADOW" - }, - "1390": { - "name": "Purified", - "proto": "DUSTOX_PURIFIED" - } - }, - "default_form_id": 1388, - "pokedex_id": 269, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug", - "Poison" - ], - "attack": 98, - "defense": 162, - "stamina": 155, - "height": 1.19, - "weight": 31.6, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Struggle Bug", - "Confusion" - ], - "charged_moves": [ - "Silver Wind", - "Sludge Bomb", - "Bug Buzz" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "270": { - "name": "Lotad", - "forms": { - "1391": { - "name": "Normal", - "proto": "LOTAD_NORMAL" - }, - "1392": { - "name": "Shadow", - "proto": "LOTAD_SHADOW" - }, - "1393": { - "name": "Purified", - "proto": "LOTAD_PURIFIED" - } - }, - "default_form_id": 1391, - "pokedex_id": 270, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Grass" - ], - "attack": 71, - "defense": 77, - "stamina": 120, - "height": 0.51, - "weight": 2.6, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Water Gun", - "Razor Leaf" - ], - "charged_moves": [ - "Bubble Beam", - "Energy Ball" - ], - "evolutions": [ - { - "pokemon": 271 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "271": { - "name": "Lombre", - "forms": { - "1394": { - "name": "Normal", - "proto": "LOMBRE_NORMAL" - }, - "1395": { - "name": "Shadow", - "proto": "LOMBRE_SHADOW" - }, - "1396": { - "name": "Purified", - "proto": "LOMBRE_PURIFIED" - } - }, - "default_form_id": 1394, - "pokedex_id": 271, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Grass" - ], - "attack": 112, - "defense": 119, - "stamina": 155, - "height": 1.19, - "weight": 32.5, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Bubble", - "Razor Leaf" - ], - "charged_moves": [ - "Bubble Beam", - "Ice Beam", - "Grass Knot" - ], - "evolutions": [ - { - "pokemon": 272 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "272": { - "name": "Ludicolo", - "forms": { - "1397": { - "name": "Normal", - "proto": "LUDICOLO_NORMAL" - }, - "1398": { - "name": "Shadow", - "proto": "LUDICOLO_SHADOW" - }, - "1399": { - "name": "Purified", - "proto": "LUDICOLO_PURIFIED" - } - }, - "default_form_id": 1397, - "pokedex_id": 272, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Grass" - ], - "attack": 173, - "defense": 176, - "stamina": 190, - "height": 1.5, - "weight": 55, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Bubble", - "Razor Leaf" - ], - "charged_moves": [ - "Hydro Pump", - "Blizzard", - "Solar Beam", - "Ice Beam", - "Energy Ball", - "Leaf Storm" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "273": { - "name": "Seedot", - "forms": { - "625": { - "name": "Normal", - "proto": "SEEDOT_NORMAL", - "evolutions": [ - { - "pokemon": 274, - "form": 628 - } - ] - }, - "626": { - "name": "Shadow", - "proto": "SEEDOT_SHADOW", - "evolutions": [ - { - "pokemon": 274, - "form": 629 - } - ] - }, - "627": { - "name": "Purified", - "proto": "SEEDOT_PURIFIED", - "evolutions": [ - { - "pokemon": 274, - "form": 630 - } - ] - } - }, - "default_form_id": 625, - "pokedex_id": 273, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass" - ], - "attack": 71, - "defense": 77, - "stamina": 120, - "height": 0.51, - "weight": 4, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Bullet Seed", - "Quick Attack" - ], - "charged_moves": [ - "Energy Ball", - "Grass Knot", - "Foul Play" - ], - "evolutions": [ - { - "pokemon": 274, - "form": 628 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "274": { - "name": "Nuzleaf", - "forms": { - "628": { - "name": "Normal", - "proto": "NUZLEAF_NORMAL", - "evolutions": [ - { - "pokemon": 275, - "form": 631 - } - ] - }, - "629": { - "name": "Shadow", - "proto": "NUZLEAF_SHADOW", - "evolutions": [ - { - "pokemon": 275, - "form": 632 - } - ] - }, - "630": { - "name": "Purified", - "proto": "NUZLEAF_PURIFIED", - "evolutions": [ - { - "pokemon": 275, - "form": 633 - } - ] - } - }, - "default_form_id": 628, - "pokedex_id": 274, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass", - "Dark" - ], - "attack": 134, - "defense": 78, - "stamina": 172, - "height": 0.99, - "weight": 28, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Razor Leaf", - "Feint Attack" - ], - "charged_moves": [ - "Leaf Blade", - "Grass Knot", - "Foul Play" - ], - "evolutions": [ - { - "pokemon": 275, - "form": 631 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "275": { - "name": "Shiftry", - "forms": { - "631": { - "name": "Normal", - "proto": "SHIFTRY_NORMAL" - }, - "632": { - "name": "Shadow", - "proto": "SHIFTRY_SHADOW" - }, - "633": { - "name": "Purified", - "proto": "SHIFTRY_PURIFIED" - } - }, - "default_form_id": 631, - "pokedex_id": 275, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass", - "Dark" - ], - "attack": 200, - "defense": 121, - "stamina": 207, - "height": 1.3, - "weight": 59.6, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Razor Leaf", - "Feint Attack", - "Snarl" - ], - "charged_moves": [ - "Leaf Blade", - "Hurricane", - "Foul Play", - "Leaf Tornado" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "276": { - "name": "Taillow", - "forms": { - "1400": { - "name": "Normal", - "proto": "TAILLOW_NORMAL" - }, - "1401": { - "name": "Shadow", - "proto": "TAILLOW_SHADOW" - }, - "1402": { - "name": "Purified", - "proto": "TAILLOW_PURIFIED" - } - }, - "default_form_id": 1400, - "pokedex_id": 276, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal", - "Flying" - ], - "attack": 106, - "defense": 61, - "stamina": 120, - "height": 0.3, - "weight": 2.3, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Peck", - "Quick Attack" - ], - "charged_moves": [ - "Aerial Ace" - ], - "evolutions": [ - { - "pokemon": 277 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "277": { - "name": "Swellow", - "forms": { - "1403": { - "name": "Normal", - "proto": "SWELLOW_NORMAL" - }, - "1404": { - "name": "Shadow", - "proto": "SWELLOW_SHADOW" - }, - "1405": { - "name": "Purified", - "proto": "SWELLOW_PURIFIED" - } - }, - "default_form_id": 1403, - "pokedex_id": 277, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal", - "Flying" - ], - "attack": 185, - "defense": 124, - "stamina": 155, - "height": 0.71, - "weight": 19.8, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Wing Attack", - "Steel Wing" - ], - "charged_moves": [ - "Aerial Ace", - "Brave Bird", - "Sky Attack" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "278": { - "name": "Wingull", - "forms": { - "1406": { - "name": "Normal", - "proto": "WINGULL_NORMAL" - }, - "1407": { - "name": "Shadow", - "proto": "WINGULL_SHADOW" - }, - "1408": { - "name": "Purified", - "proto": "WINGULL_PURIFIED" - } - }, - "default_form_id": 1406, - "pokedex_id": 278, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Flying" - ], - "attack": 106, - "defense": 61, - "stamina": 120, - "height": 0.61, - "weight": 9.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Water Gun", - "Quick Attack" - ], - "charged_moves": [ - "Water Pulse", - "Air Cutter", - "Ice Beam" - ], - "evolutions": [ - { - "pokemon": 279 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "279": { - "name": "Pelipper", - "forms": { - "1409": { - "name": "Normal", - "proto": "PELIPPER_NORMAL" - }, - "1410": { - "name": "Shadow", - "proto": "PELIPPER_SHADOW" - }, - "1411": { - "name": "Purified", - "proto": "PELIPPER_PURIFIED" - } - }, - "default_form_id": 1409, - "pokedex_id": 279, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Flying" - ], - "attack": 175, - "defense": 174, - "stamina": 155, - "height": 1.19, - "weight": 28, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Wing Attack" - ], - "charged_moves": [ - "Hydro Pump", - "Hurricane", - "Blizzard", - "Weather Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "280": { - "name": "Ralts", - "forms": { - "292": { - "name": "Normal", - "proto": "RALTS_NORMAL", - "evolutions": [ - { - "pokemon": 281, - "form": 295 - } - ] - }, - "293": { - "name": "Shadow", - "proto": "RALTS_SHADOW", - "evolutions": [ - { - "pokemon": 281, - "form": 296 - } - ] - }, - "294": { - "name": "Purified", - "proto": "RALTS_PURIFIED", - "evolutions": [ - { - "pokemon": 281, - "form": 297 - } - ] - } - }, - "default_form_id": 292, - "pokedex_id": 280, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Psychic", - "Fairy" - ], - "attack": 79, - "defense": 59, - "stamina": 99, - "height": 0.41, - "weight": 6.6, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Confusion", - "Charge Beam" - ], - "charged_moves": [ - "Psyshock", - "Disarming Voice", - "Shadow Sneak" - ], - "evolutions": [ - { - "pokemon": 281, - "form": 295 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "281": { - "name": "Kirlia", - "forms": { - "295": { - "name": "Normal", - "proto": "KIRLIA_NORMAL", - "evolutions": [ - { - "pokemon": 475, - "form": 301, - "gender_requirement": 1 - }, - { - "pokemon": 282, - "form": 298 - } - ] - }, - "296": { - "name": "Shadow", - "proto": "KIRLIA_SHADOW", - "evolutions": [ - { - "pokemon": 475, - "form": 302, - "gender_requirement": 1 - }, - { - "pokemon": 282, - "form": 299 - } - ] - }, - "297": { - "name": "Purified", - "proto": "KIRLIA_PURIFIED", - "evolutions": [ - { - "pokemon": 475, - "form": 303, - "gender_requirement": 1 - }, - { - "pokemon": 282, - "form": 300 - } - ] - } - }, - "default_form_id": 295, - "pokedex_id": 281, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Psychic", - "Fairy" - ], - "attack": 117, - "defense": 90, - "stamina": 116, - "height": 0.79, - "weight": 20.2, - "flee_rate": 0.06, - "capture_rate": 0.1, - "quick_moves": [ - "Confusion", - "Charge Beam" - ], - "charged_moves": [ - "Psychic", - "Disarming Voice", - "Shadow Sneak" - ], - "evolutions": [ - { - "pokemon": 475, - "form": 301, - "gender_requirement": 1 - }, - { - "pokemon": 282, - "form": 298 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "282": { - "name": "Gardevoir", - "forms": { - "298": { - "name": "Normal", - "proto": "GARDEVOIR_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "299": { - "name": "Shadow", - "proto": "GARDEVOIR_SHADOW" - }, - "300": { - "name": "Purified", - "proto": "GARDEVOIR_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 298, - "pokedex_id": 282, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Psychic", - "Fairy" - ], - "attack": 237, - "defense": 195, - "stamina": 169, - "height": 1.6, - "weight": 48.4, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Confusion", - "Charge Beam", - "Charm" - ], - "charged_moves": [ - "Psychic", - "Dazzling Gleam", - "Shadow Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 326, - "defense": 229, - "stamina": 169, - "unreleased": true - } - } - }, - "283": { - "name": "Surskit", - "forms": { - "1412": { - "name": "Normal", - "proto": "SURSKIT_NORMAL" - }, - "1413": { - "name": "Shadow", - "proto": "SURSKIT_SHADOW" - }, - "1414": { - "name": "Purified", - "proto": "SURSKIT_PURIFIED" - } - }, - "default_form_id": 1412, - "pokedex_id": 283, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug", - "Water" - ], - "attack": 93, - "defense": 87, - "stamina": 120, - "height": 0.51, - "weight": 1.7, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Bubble", - "Bug Bite" - ], - "charged_moves": [ - "Aqua Jet", - "Bubble Beam", - "Signal Beam" - ], - "evolutions": [ - { - "pokemon": 284 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "284": { - "name": "Masquerain", - "forms": { - "1415": { - "name": "Normal", - "proto": "MASQUERAIN_NORMAL" - }, - "1416": { - "name": "Shadow", - "proto": "MASQUERAIN_SHADOW" - }, - "1417": { - "name": "Purified", - "proto": "MASQUERAIN_PURIFIED" - } - }, - "default_form_id": 1415, - "pokedex_id": 284, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug", - "Flying" - ], - "attack": 192, - "defense": 150, - "stamina": 172, - "height": 0.79, - "weight": 3.6, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Infestation", - "Air Slash" - ], - "charged_moves": [ - "Air Cutter", - "Ominous Wind", - "Silver Wind", - "Bubble Beam", - "Lunge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "285": { - "name": "Shroomish", - "forms": { - "1418": { - "name": "Normal", - "proto": "SHROOMISH_NORMAL" - }, - "1419": { - "name": "Shadow", - "proto": "SHROOMISH_SHADOW" - }, - "1420": { - "name": "Purified", - "proto": "SHROOMISH_PURIFIED" - } - }, - "default_form_id": 1418, - "pokedex_id": 285, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass" - ], - "attack": 74, - "defense": 110, - "stamina": 155, - "height": 0.41, - "weight": 4.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Bullet Seed" - ], - "charged_moves": [ - "Seed Bomb", - "Grass Knot", - "Energy Ball" - ], - "evolutions": [ - { - "pokemon": 286 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "286": { - "name": "Breloom", - "forms": { - "1421": { - "name": "Normal", - "proto": "BRELOOM_NORMAL" - }, - "1422": { - "name": "Shadow", - "proto": "BRELOOM_SHADOW" - }, - "1423": { - "name": "Purified", - "proto": "BRELOOM_PURIFIED" - } - }, - "default_form_id": 1421, - "pokedex_id": 286, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass", - "Fighting" - ], - "attack": 241, - "defense": 144, - "stamina": 155, - "height": 1.19, - "weight": 39.2, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Counter", - "Bullet Seed" - ], - "charged_moves": [ - "Dynamic Punch", - "Seed Bomb", - "Sludge Bomb" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "287": { - "name": "Slakoth", - "forms": { - "1424": { - "name": "Normal", - "proto": "SLAKOTH_NORMAL" - }, - "1425": { - "name": "Shadow", - "proto": "SLAKOTH_SHADOW" - }, - "1426": { - "name": "Purified", - "proto": "SLAKOTH_PURIFIED" - } - }, - "default_form_id": 1424, - "pokedex_id": 287, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 104, - "defense": 92, - "stamina": 155, - "height": 0.79, - "weight": 24, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Yawn" - ], - "charged_moves": [ - "Body Slam", - "Night Slash", - "Brick Break" - ], - "evolutions": [ - { - "pokemon": 288 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "288": { - "name": "Vigoroth", - "forms": { - "1427": { - "name": "Normal", - "proto": "VIGOROTH_NORMAL" - }, - "1428": { - "name": "Shadow", - "proto": "VIGOROTH_SHADOW" - }, - "1429": { - "name": "Purified", - "proto": "VIGOROTH_PURIFIED" - } - }, - "default_form_id": 1427, - "pokedex_id": 288, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 159, - "defense": 145, - "stamina": 190, - "height": 1.4, - "weight": 46.5, - "flee_rate": 0.06, - "capture_rate": 0.1, - "quick_moves": [ - "Scratch", - "Counter" - ], - "charged_moves": [ - "Body Slam", - "Bulldoze", - "Brick Break" - ], - "evolutions": [ - { - "pokemon": 289 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "289": { - "name": "Slaking", - "forms": { - "1430": { - "name": "Normal", - "proto": "SLAKING_NORMAL" - }, - "1431": { - "name": "Shadow", - "proto": "SLAKING_SHADOW" - }, - "1432": { - "name": "Purified", - "proto": "SLAKING_PURIFIED" - } - }, - "default_form_id": 1430, - "pokedex_id": 289, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 290, - "defense": 166, - "stamina": 284, - "height": 2.01, - "weight": 130.5, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Yawn" - ], - "charged_moves": [ - "Hyper Beam", - "Play Rough", - "Earthquake" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "290": { - "name": "Nincada", - "forms": { - "1433": { - "name": "Normal", - "proto": "NINCADA_NORMAL" - }, - "1434": { - "name": "Shadow", - "proto": "NINCADA_SHADOW" - }, - "1435": { - "name": "Purified", - "proto": "NINCADA_PURIFIED" - } - }, - "default_form_id": 1433, - "pokedex_id": 290, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug", - "Ground" - ], - "attack": 80, - "defense": 126, - "stamina": 104, - "height": 0.51, - "weight": 5.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Scratch", - "Bug Bite" - ], - "charged_moves": [ - "Night Slash", - "Bug Buzz", - "Aerial Ace" - ], - "evolutions": [ - { - "pokemon": 291 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "291": { - "name": "Ninjask", - "forms": { - "1436": { - "name": "Normal", - "proto": "NINJASK_NORMAL" - }, - "1437": { - "name": "Shadow", - "proto": "NINJASK_SHADOW" - }, - "1438": { - "name": "Purified", - "proto": "NINJASK_PURIFIED" - } - }, - "default_form_id": 1436, - "pokedex_id": 291, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug", - "Flying" - ], - "attack": 199, - "defense": 112, - "stamina": 156, - "height": 0.79, - "weight": 12, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Fury Cutter", - "Metal Claw" - ], - "charged_moves": [ - "Shadow Ball", - "Bug Buzz", - "Aerial Ace" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "292": { - "name": "Shedinja", - "forms": { - "1439": { - "name": "Normal", - "proto": "SHEDINJA_NORMAL" - }, - "1440": { - "name": "Shadow", - "proto": "SHEDINJA_SHADOW" - }, - "1441": { - "name": "Purified", - "proto": "SHEDINJA_PURIFIED" - } - }, - "default_form_id": 1439, - "pokedex_id": 292, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug", - "Ghost" - ], - "attack": 153, - "defense": 73, - "stamina": 1, - "height": 0.79, - "weight": 1.2, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Bug Bite", - "Shadow Claw" - ], - "charged_moves": [ - "Shadow Sneak", - "Aerial Ace", - "Dig" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "293": { - "name": "Whismur", - "forms": { - "1442": { - "name": "Normal", - "proto": "WHISMUR_NORMAL" - }, - "1443": { - "name": "Shadow", - "proto": "WHISMUR_SHADOW" - }, - "1444": { - "name": "Purified", - "proto": "WHISMUR_PURIFIED" - } - }, - "default_form_id": 1442, - "pokedex_id": 293, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 92, - "defense": 42, - "stamina": 162, - "height": 0.61, - "weight": 16.3, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Pound", - "Astonish" - ], - "charged_moves": [ - "Stomp", - "Disarming Voice", - "Flamethrower" - ], - "evolutions": [ - { - "pokemon": 294 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "294": { - "name": "Loudred", - "forms": { - "1445": { - "name": "Normal", - "proto": "LOUDRED_NORMAL" - }, - "1446": { - "name": "Shadow", - "proto": "LOUDRED_SHADOW" - }, - "1447": { - "name": "Purified", - "proto": "LOUDRED_PURIFIED" - } - }, - "default_form_id": 1445, - "pokedex_id": 294, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 134, - "defense": 81, - "stamina": 197, - "height": 0.99, - "weight": 40.5, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Bite", - "Rock Smash" - ], - "charged_moves": [ - "Stomp", - "Disarming Voice", - "Flamethrower" - ], - "evolutions": [ - { - "pokemon": 295 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "295": { - "name": "Exploud", - "forms": { - "1448": { - "name": "Normal", - "proto": "EXPLOUD_NORMAL" - }, - "1449": { - "name": "Shadow", - "proto": "EXPLOUD_SHADOW" - }, - "1450": { - "name": "Purified", - "proto": "EXPLOUD_PURIFIED" - } - }, - "default_form_id": 1448, - "pokedex_id": 295, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 179, - "defense": 137, - "stamina": 232, - "height": 1.5, - "weight": 84, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Bite", - "Astonish" - ], - "charged_moves": [ - "Crunch", - "Disarming Voice", - "Fire Blast" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "296": { - "name": "Makuhita", - "forms": { - "1451": { - "name": "Normal", - "proto": "MAKUHITA_NORMAL", - "evolutions": [ - { - "pokemon": 297, - "form": 1454 - } - ] - }, - "1452": { - "name": "Shadow", - "proto": "MAKUHITA_SHADOW", - "evolutions": [ - { - "pokemon": 297, - "form": 1455 - } - ] - }, - "1453": { - "name": "Purified", - "proto": "MAKUHITA_PURIFIED", - "evolutions": [ - { - "pokemon": 297, - "form": 1456 - } - ] - } - }, - "default_form_id": 1451, - "pokedex_id": 296, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Fighting" - ], - "attack": 99, - "defense": 54, - "stamina": 176, - "height": 0.99, - "weight": 86.4, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Rock Smash", - "Tackle" - ], - "charged_moves": [ - "Heavy Slam", - "Low Sweep", - "Cross Chop" - ], - "evolutions": [ - { - "pokemon": 297, - "form": 1454 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "297": { - "name": "Hariyama", - "forms": { - "1454": { - "name": "Normal", - "proto": "HARIYAMA_NORMAL" - }, - "1455": { - "name": "Shadow", - "proto": "HARIYAMA_SHADOW" - }, - "1456": { - "name": "Purified", - "proto": "HARIYAMA_PURIFIED" - } - }, - "default_form_id": 1454, - "pokedex_id": 297, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Fighting" - ], - "attack": 209, - "defense": 114, - "stamina": 302, - "height": 2.31, - "weight": 253.8, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Counter", - "Bullet Punch" - ], - "charged_moves": [ - "Heavy Slam", - "Close Combat", - "Dynamic Punch", - "Super Power" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "298": { - "name": "Azurill", - "forms": { - "1457": { - "name": "Normal", - "proto": "AZURILL_NORMAL" - }, - "1458": { - "name": "Shadow", - "proto": "AZURILL_SHADOW" - }, - "1459": { - "name": "Purified", - "proto": "AZURILL_PURIFIED" - } - }, - "default_form_id": 1457, - "pokedex_id": 298, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal", - "Fairy" - ], - "attack": 36, - "defense": 71, - "stamina": 137, - "height": 0.2, - "weight": 2, - "flee_rate": 0.04, - "capture_rate": 0.1, - "quick_moves": [ - "Splash", - "Bubble" - ], - "charged_moves": [ - "Bubble Beam", - "Ice Beam", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 183 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "299": { - "name": "Nosepass", - "forms": { - "1460": { - "name": "Normal", - "proto": "NOSEPASS_NORMAL", - "evolutions": [ - { - "pokemon": 476, - "form": 1841 - } - ] - }, - "1461": { - "name": "Shadow", - "proto": "NOSEPASS_SHADOW", - "evolutions": [ - { - "pokemon": 476, - "form": 1842 - } - ] - }, - "1462": { - "name": "Purified", - "proto": "NOSEPASS_PURIFIED", - "evolutions": [ - { - "pokemon": 476, - "form": 1843 - } - ] - } - }, - "default_form_id": 1460, - "pokedex_id": 299, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Rock" - ], - "attack": 82, - "defense": 215, - "stamina": 102, - "height": 0.99, - "weight": 97, - "flee_rate": 0.09, - "capture_rate": 0.2, - "quick_moves": [ - "Rock Throw", - "Spark" - ], - "charged_moves": [ - "Rock Blast", - "Rock Slide", - "Thunderbolt" - ], - "evolutions": [ - { - "pokemon": 476 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "300": { - "name": "Skitty", - "forms": { - "1463": { - "name": "Normal", - "proto": "SKITTY_NORMAL" - }, - "1464": { - "name": "Shadow", - "proto": "SKITTY_SHADOW" - }, - "1465": { - "name": "Purified", - "proto": "SKITTY_PURIFIED" - } - }, - "default_form_id": 1463, - "pokedex_id": 300, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 84, - "defense": 79, - "stamina": 137, - "height": 0.61, - "weight": 11, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Feint Attack", - "Tackle" - ], - "charged_moves": [ - "Dig", - "Disarming Voice", - "Wild Charge" - ], - "evolutions": [ - { - "pokemon": 301 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "301": { - "name": "Delcatty", - "forms": { - "1466": { - "name": "Normal", - "proto": "DELCATTY_NORMAL" - }, - "1467": { - "name": "Shadow", - "proto": "DELCATTY_SHADOW" - }, - "1468": { - "name": "Purified", - "proto": "DELCATTY_PURIFIED" - } - }, - "default_form_id": 1466, - "pokedex_id": 301, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 132, - "defense": 127, - "stamina": 172, - "height": 1.09, - "weight": 32.6, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Feint Attack", - "Zen Headbutt", - "Charm" - ], - "charged_moves": [ - "Play Rough", - "Disarming Voice", - "Wild Charge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "302": { - "name": "Sableye", - "forms": { - "923": { - "name": "Normal", - "proto": "SABLEYE_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "924": { - "name": "Shadow", - "proto": "SABLEYE_SHADOW" - }, - "925": { - "name": "Purified", - "proto": "SABLEYE_PURIFIED", - "temp_evolutions": { - "1": {} - } - }, - "2666": { - "name": "Costume 2020 Deprecated", - "proto": "SABLEYE_COSTUME_2020_DEPRECATED" - }, - "2668": { - "name": "Costume 2020", - "proto": "SABLEYE_COSTUME_2020" - } - }, - "default_form_id": 923, - "pokedex_id": 302, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Dark", - "Ghost" - ], - "attack": 141, - "defense": 136, - "stamina": 137, - "height": 0.51, - "weight": 11, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Shadow Claw", - "Feint Attack" - ], - "charged_moves": [ - "Power Gem", - "Foul Play", - "Shadow Sneak" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 151, - "defense": 216, - "stamina": 137, - "unreleased": true - } - } - }, - "303": { - "name": "Mawile", - "forms": { - "833": { - "name": "Normal", - "proto": "MAWILE_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "834": { - "name": "Shadow", - "proto": "MAWILE_SHADOW" - }, - "835": { - "name": "Purified", - "proto": "MAWILE_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 833, - "pokedex_id": 303, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Steel", - "Fairy" - ], - "attack": 155, - "defense": 141, - "stamina": 137, - "height": 0.61, - "weight": 11.5, - "flee_rate": 0.09, - "capture_rate": 0.5, - "quick_moves": [ - "Bite", - "Astonish", - "Ice Fang", - "Fire Fang" - ], - "charged_moves": [ - "Play Rough", - "Vice Grip", - "Iron Head", - "Power Up" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 188, - "defense": 217, - "stamina": 137, - "unreleased": true - } - } - }, - "304": { - "name": "Aron", - "forms": { - "1469": { - "name": "Normal", - "proto": "ARON_NORMAL", - "evolutions": [ - { - "pokemon": 305, - "form": 1472 - } - ] - }, - "1470": { - "name": "Shadow", - "proto": "ARON_SHADOW", - "evolutions": [ - { - "pokemon": 305, - "form": 1473 - } - ] - }, - "1471": { - "name": "Purified", - "proto": "ARON_PURIFIED", - "evolutions": [ - { - "pokemon": 305, - "form": 1474 - } - ] - } - }, - "default_form_id": 1469, - "pokedex_id": 304, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Steel", - "Rock" - ], - "attack": 121, - "defense": 141, - "stamina": 137, - "height": 0.41, - "weight": 60, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Metal Claw" - ], - "charged_moves": [ - "Iron Head", - "Rock Tomb", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 305, - "form": 1472 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "305": { - "name": "Lairon", - "forms": { - "1472": { - "name": "Normal", - "proto": "LAIRON_NORMAL", - "evolutions": [ - { - "pokemon": 306, - "form": 1475 - } - ] - }, - "1473": { - "name": "Shadow", - "proto": "LAIRON_SHADOW", - "evolutions": [ - { - "pokemon": 306, - "form": 1476 - } - ] - }, - "1474": { - "name": "Purified", - "proto": "LAIRON_PURIFIED", - "evolutions": [ - { - "pokemon": 306, - "form": 1477 - } - ] - } - }, - "default_form_id": 1472, - "pokedex_id": 305, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Steel", - "Rock" - ], - "attack": 158, - "defense": 198, - "stamina": 155, - "height": 0.89, - "weight": 120, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Metal Claw", - "Iron Tail" - ], - "charged_moves": [ - "Body Slam", - "Rock Slide", - "Heavy Slam" - ], - "evolutions": [ - { - "pokemon": 306, - "form": 1475 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "306": { - "name": "Aggron", - "forms": { - "1475": { - "name": "Normal", - "proto": "AGGRON_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1476": { - "name": "Shadow", - "proto": "AGGRON_SHADOW" - }, - "1477": { - "name": "Purified", - "proto": "AGGRON_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1475, - "pokedex_id": 306, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Steel", - "Rock" - ], - "attack": 198, - "defense": 257, - "stamina": 172, - "height": 2.11, - "weight": 360, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Dragon Tail", - "Iron Tail", - "Smack Down" - ], - "charged_moves": [ - "Thunder", - "Stone Edge", - "Heavy Slam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 247, - "defense": 331, - "stamina": 172, - "unreleased": true, - "types": [ - "Steel" - ] - } - } - }, - "307": { - "name": "Meditite", - "forms": { - "1478": { - "name": "Normal", - "proto": "MEDITITE_NORMAL" - }, - "1479": { - "name": "Shadow", - "proto": "MEDITITE_SHADOW" - }, - "1480": { - "name": "Purified", - "proto": "MEDITITE_PURIFIED" - } - }, - "default_form_id": 1478, - "pokedex_id": 307, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Fighting", - "Psychic" - ], - "attack": 78, - "defense": 107, - "stamina": 102, - "height": 0.61, - "weight": 11.2, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Confusion", - "Rock Smash" - ], - "charged_moves": [ - "Ice Punch", - "Psyshock", - "Low Sweep" - ], - "evolutions": [ - { - "pokemon": 308 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "308": { - "name": "Medicham", - "forms": { - "1481": { - "name": "Normal", - "proto": "MEDICHAM_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1482": { - "name": "Shadow", - "proto": "MEDICHAM_SHADOW" - }, - "1483": { - "name": "Purified", - "proto": "MEDICHAM_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1481, - "pokedex_id": 308, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Fighting", - "Psychic" - ], - "attack": 121, - "defense": 152, - "stamina": 155, - "height": 1.3, - "weight": 31.5, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Psycho Cut", - "Counter" - ], - "charged_moves": [ - "Ice Punch", - "Psychic", - "Dynamic Punch", - "Power Up" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 205, - "defense": 179, - "stamina": 155, - "unreleased": true - } - } - }, - "309": { - "name": "Electrike", - "forms": { - "1484": { - "name": "Normal", - "proto": "ELECTRIKE_NORMAL", - "evolutions": [ - { - "pokemon": 310, - "form": 1487 - } - ] - }, - "1485": { - "name": "Shadow", - "proto": "ELECTRIKE_SHADOW", - "evolutions": [ - { - "pokemon": 310, - "form": 1488 - } - ] - }, - "1486": { - "name": "Purified", - "proto": "ELECTRIKE_PURIFIED", - "evolutions": [ - { - "pokemon": 310, - "form": 1489 - } - ] - } - }, - "default_form_id": 1484, - "pokedex_id": 309, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Electric" - ], - "attack": 123, - "defense": 78, - "stamina": 120, - "height": 0.61, - "weight": 15.2, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Quick Attack", - "Spark" - ], - "charged_moves": [ - "Thunderbolt", - "Discharge", - "Swift" - ], - "evolutions": [ - { - "pokemon": 310, - "form": 1487 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "310": { - "name": "Manectric", - "forms": { - "1487": { - "name": "Normal", - "proto": "MANECTRIC_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1488": { - "name": "Shadow", - "proto": "MANECTRIC_SHADOW" - }, - "1489": { - "name": "Purified", - "proto": "MANECTRIC_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1487, - "pokedex_id": 310, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Electric" - ], - "attack": 215, - "defense": 127, - "stamina": 172, - "height": 1.5, - "weight": 40.2, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Snarl", - "Charge Beam" - ], - "charged_moves": [ - "Thunder", - "Wild Charge", - "Flame Burst" - ], - "temp_evolutions": { - "1": { - "attack": 286, - "defense": 179, - "stamina": 172, - "height": 1.8, - "weight": 44 - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "311": { - "name": "Plusle", - "forms": { - "1490": { - "name": "Normal", - "proto": "PLUSLE_NORMAL" - }, - "1491": { - "name": "Shadow", - "proto": "PLUSLE_SHADOW" - }, - "1492": { - "name": "Purified", - "proto": "PLUSLE_PURIFIED" - } - }, - "default_form_id": 1490, - "pokedex_id": 311, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Electric" - ], - "attack": 167, - "defense": 129, - "stamina": 155, - "height": 0.41, - "weight": 4.2, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Spark", - "Quick Attack" - ], - "charged_moves": [ - "Thunderbolt", - "Discharge", - "Swift", - "Grass Knot" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "312": { - "name": "Minun", - "forms": { - "1493": { - "name": "Normal", - "proto": "MINUN_NORMAL" - }, - "1494": { - "name": "Shadow", - "proto": "MINUN_SHADOW" - }, - "1495": { - "name": "Purified", - "proto": "MINUN_PURIFIED" - } - }, - "default_form_id": 1493, - "pokedex_id": 312, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Electric" - ], - "attack": 147, - "defense": 150, - "stamina": 155, - "height": 0.41, - "weight": 4.2, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Spark", - "Quick Attack" - ], - "charged_moves": [ - "Thunderbolt", - "Discharge", - "Swift", - "Grass Knot" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "313": { - "name": "Volbeat", - "forms": { - "1496": { - "name": "Normal", - "proto": "VOLBEAT_NORMAL" - }, - "1497": { - "name": "Shadow", - "proto": "VOLBEAT_SHADOW" - }, - "1498": { - "name": "Purified", - "proto": "VOLBEAT_PURIFIED" - } - }, - "default_form_id": 1496, - "pokedex_id": 313, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug" - ], - "attack": 143, - "defense": 166, - "stamina": 163, - "height": 0.71, - "weight": 17.7, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Struggle Bug", - "Tackle" - ], - "charged_moves": [ - "Signal Beam", - "Bug Buzz", - "Thunderbolt" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "314": { - "name": "Illumise", - "forms": { - "1499": { - "name": "Normal", - "proto": "ILLUMISE_NORMAL" - }, - "1500": { - "name": "Shadow", - "proto": "ILLUMISE_SHADOW" - }, - "1501": { - "name": "Purified", - "proto": "ILLUMISE_PURIFIED" - } - }, - "default_form_id": 1499, - "pokedex_id": 314, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Bug" - ], - "attack": 143, - "defense": 166, - "stamina": 163, - "height": 0.61, - "weight": 17.7, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Struggle Bug", - "Tackle" - ], - "charged_moves": [ - "Silver Wind", - "Bug Buzz", - "Dazzling Gleam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "315": { - "name": "Roselia", - "forms": { - "1502": { - "name": "Normal", - "proto": "ROSELIA_NORMAL" - }, - "1503": { - "name": "Shadow", - "proto": "ROSELIA_SHADOW" - }, - "1504": { - "name": "Purified", - "proto": "ROSELIA_PURIFIED" - } - }, - "default_form_id": 1502, - "pokedex_id": 315, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass", - "Poison" - ], - "attack": 186, - "defense": 131, - "stamina": 137, - "height": 0.3, - "weight": 2, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Poison Jab", - "Razor Leaf" - ], - "charged_moves": [ - "Petal Blizzard", - "Sludge Bomb", - "Dazzling Gleam" - ], - "evolutions": [ - { - "pokemon": 407 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "316": { - "name": "Gulpin", - "forms": { - "1505": { - "name": "Normal", - "proto": "GULPIN_NORMAL" - }, - "1506": { - "name": "Shadow", - "proto": "GULPIN_SHADOW" - }, - "1507": { - "name": "Purified", - "proto": "GULPIN_PURIFIED" - } - }, - "default_form_id": 1505, - "pokedex_id": 316, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Poison" - ], - "attack": 80, - "defense": 99, - "stamina": 172, - "height": 0.41, - "weight": 10.3, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Pound", - "Rock Smash" - ], - "charged_moves": [ - "Sludge", - "Gunk Shot", - "Ice Beam" - ], - "evolutions": [ - { - "pokemon": 317 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "317": { - "name": "Swalot", - "forms": { - "1508": { - "name": "Normal", - "proto": "SWALOT_NORMAL" - }, - "1509": { - "name": "Shadow", - "proto": "SWALOT_SHADOW" - }, - "1510": { - "name": "Purified", - "proto": "SWALOT_PURIFIED" - } - }, - "default_form_id": 1508, - "pokedex_id": 317, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Poison" - ], - "attack": 140, - "defense": 159, - "stamina": 225, - "height": 1.7, - "weight": 80, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Rock Smash", - "Infestation" - ], - "charged_moves": [ - "Gunk Shot", - "Sludge Bomb", - "Ice Beam", - "Acid Spray" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "318": { - "name": "Carvanha", - "forms": { - "734": { - "name": "Normal", - "proto": "CARVANHA_NORMAL", - "evolutions": [ - { - "pokemon": 319, - "form": 737 - } - ] - }, - "735": { - "name": "Shadow", - "proto": "CARVANHA_SHADOW", - "evolutions": [ - { - "pokemon": 319, - "form": 738 - } - ] - }, - "736": { - "name": "Purified", - "proto": "CARVANHA_PURIFIED", - "evolutions": [ - { - "pokemon": 319, - "form": 739 - } - ] - } - }, - "default_form_id": 734, - "pokedex_id": 318, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Dark" - ], - "attack": 171, - "defense": 39, - "stamina": 128, - "height": 0.79, - "weight": 20.8, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Bite", - "Snarl" - ], - "charged_moves": [ - "Aqua Jet", - "Crunch", - "Poison Fang" - ], - "evolutions": [ - { - "pokemon": 319, - "form": 737 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "319": { - "name": "Sharpedo", - "forms": { - "737": { - "name": "Normal", - "proto": "SHARPEDO_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "738": { - "name": "Shadow", - "proto": "SHARPEDO_SHADOW" - }, - "739": { - "name": "Purified", - "proto": "SHARPEDO_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 737, - "pokedex_id": 319, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Dark" - ], - "attack": 243, - "defense": 83, - "stamina": 172, - "height": 1.8, - "weight": 88.8, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Bite", - "Waterfall" - ], - "charged_moves": [ - "Hydro Pump", - "Crunch", - "Poison Fang" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 289, - "defense": 144, - "stamina": 172, - "unreleased": true - } - } - }, - "320": { - "name": "Wailmer", - "forms": { - "1511": { - "name": "Normal", - "proto": "WAILMER_NORMAL" - }, - "1512": { - "name": "Shadow", - "proto": "WAILMER_SHADOW" - }, - "1513": { - "name": "Purified", - "proto": "WAILMER_PURIFIED" - } - }, - "default_form_id": 1511, - "pokedex_id": 320, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water" - ], - "attack": 136, - "defense": 68, - "stamina": 277, - "height": 2.01, - "weight": 130, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Splash", - "Water Gun" - ], - "charged_moves": [ - "Heavy Slam", - "Water Pulse", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 321 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "321": { - "name": "Wailord", - "forms": { - "1514": { - "name": "Normal", - "proto": "WAILORD_NORMAL" - }, - "1515": { - "name": "Shadow", - "proto": "WAILORD_SHADOW" - }, - "1516": { - "name": "Purified", - "proto": "WAILORD_PURIFIED" - } - }, - "default_form_id": 1514, - "pokedex_id": 321, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water" - ], - "attack": 175, - "defense": 87, - "stamina": 347, - "height": 14.5, - "weight": 398, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Zen Headbutt", - "Water Gun" - ], - "charged_moves": [ - "Surf", - "Blizzard", - "Hyper Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "322": { - "name": "Numel", - "forms": { - "1517": { - "name": "Normal", - "proto": "NUMEL_NORMAL" - }, - "1518": { - "name": "Shadow", - "proto": "NUMEL_SHADOW" - }, - "1519": { - "name": "Purified", - "proto": "NUMEL_PURIFIED" - } - }, - "default_form_id": 1517, - "pokedex_id": 322, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Fire", - "Ground" - ], - "attack": 119, - "defense": 79, - "stamina": 155, - "height": 0.71, - "weight": 24, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Ember", - "Tackle" - ], - "charged_moves": [ - "Bulldoze", - "Heat Wave", - "Stomp" - ], - "evolutions": [ - { - "pokemon": 323 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "323": { - "name": "Camerupt", - "forms": { - "1520": { - "name": "Normal", - "proto": "CAMERUPT_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1521": { - "name": "Shadow", - "proto": "CAMERUPT_SHADOW" - }, - "1522": { - "name": "Purified", - "proto": "CAMERUPT_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1520, - "pokedex_id": 323, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Fire", - "Ground" - ], - "attack": 194, - "defense": 136, - "stamina": 172, - "height": 1.91, - "weight": 220, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Ember", - "Rock Smash" - ], - "charged_moves": [ - "Earthquake", - "Overheat", - "Solar Beam", - "Earth Power" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 253, - "defense": 183, - "stamina": 172, - "unreleased": true - } - } - }, - "324": { - "name": "Torkoal", - "forms": { - "1523": { - "name": "Normal", - "proto": "TORKOAL_NORMAL" - }, - "1524": { - "name": "Shadow", - "proto": "TORKOAL_SHADOW" - }, - "1525": { - "name": "Purified", - "proto": "TORKOAL_PURIFIED" - } - }, - "default_form_id": 1523, - "pokedex_id": 324, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Fire" - ], - "attack": 151, - "defense": 203, - "stamina": 172, - "height": 0.51, - "weight": 80.4, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Fire Spin", - "Ember" - ], - "charged_moves": [ - "Overheat", - "Solar Beam", - "Earthquake" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "325": { - "name": "Spoink", - "forms": { - "1526": { - "name": "Normal", - "proto": "SPOINK_NORMAL" - }, - "1527": { - "name": "Shadow", - "proto": "SPOINK_SHADOW" - }, - "1528": { - "name": "Purified", - "proto": "SPOINK_PURIFIED" - } - }, - "default_form_id": 1526, - "pokedex_id": 325, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Psychic" - ], - "attack": 125, - "defense": 122, - "stamina": 155, - "height": 0.71, - "weight": 30.6, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Splash", - "Zen Headbutt" - ], - "charged_moves": [ - "Psybeam", - "Shadow Ball", - "Mirror Coat" - ], - "evolutions": [ - { - "pokemon": 326 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "326": { - "name": "Grumpig", - "forms": { - "1529": { - "name": "Normal", - "proto": "GRUMPIG_NORMAL" - }, - "1530": { - "name": "Shadow", - "proto": "GRUMPIG_SHADOW" - }, - "1531": { - "name": "Purified", - "proto": "GRUMPIG_PURIFIED" - } - }, - "default_form_id": 1529, - "pokedex_id": 326, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Psychic" - ], - "attack": 171, - "defense": 188, - "stamina": 190, - "height": 0.89, - "weight": 71.5, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Charge Beam", - "Extrasensory" - ], - "charged_moves": [ - "Psychic", - "Shadow Ball", - "Mirror Coat" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "327": { - "name": "Spinda", - "forms": { - "37": { - "name": "00", - "proto": "SPINDA_00" - }, - "38": { - "name": "01", - "proto": "SPINDA_01" - }, - "39": { - "name": "02", - "proto": "SPINDA_02" - }, - "40": { - "name": "03", - "proto": "SPINDA_03" - }, - "41": { - "name": "04", - "proto": "SPINDA_04" - }, - "42": { - "name": "05", - "proto": "SPINDA_05" - }, - "43": { - "name": "06", - "proto": "SPINDA_06" - }, - "44": { - "name": "07", - "proto": "SPINDA_07" - }, - "121": { - "name": "08", - "proto": "SPINDA_08" - }, - "122": { - "name": "09", - "proto": "SPINDA_09" - }, - "123": { - "name": "10", - "proto": "SPINDA_10" - }, - "124": { - "name": "11", - "proto": "SPINDA_11" - }, - "125": { - "name": "12", - "proto": "SPINDA_12" - }, - "126": { - "name": "13", - "proto": "SPINDA_13" - }, - "127": { - "name": "14", - "proto": "SPINDA_14" - }, - "128": { - "name": "15", - "proto": "SPINDA_15" - }, - "129": { - "name": "16", - "proto": "SPINDA_16" - }, - "130": { - "name": "17", - "proto": "SPINDA_17" - }, - "131": { - "name": "18", - "proto": "SPINDA_18" - }, - "132": { - "name": "19", - "proto": "SPINDA_19" - } - }, - "default_form_id": 37, - "pokedex_id": 327, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 116, - "defense": 116, - "stamina": 155, - "height": 1.09, - "weight": 5, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Sucker Punch", - "Psycho Cut" - ], - "charged_moves": [ - "Dig", - "Rock Tomb", - "Icy Wind" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "328": { - "name": "Trapinch", - "forms": { - "746": { - "name": "Normal", - "proto": "TRAPINCH_NORMAL", - "evolutions": [ - { - "pokemon": 329, - "form": 749 - } - ] - }, - "747": { - "name": "Shadow", - "proto": "TRAPINCH_SHADOW", - "evolutions": [ - { - "pokemon": 329, - "form": 750 - } - ] - }, - "748": { - "name": "Purified", - "proto": "TRAPINCH_PURIFIED", - "evolutions": [ - { - "pokemon": 329, - "form": 751 - } - ] - } - }, - "default_form_id": 746, - "pokedex_id": 328, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ground" - ], - "attack": 162, - "defense": 78, - "stamina": 128, - "height": 0.71, - "weight": 15, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Mud Shot", - "Struggle Bug" - ], - "charged_moves": [ - "Sand Tomb", - "Dig", - "Crunch" - ], - "evolutions": [ - { - "pokemon": 329, - "form": 749 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "329": { - "name": "Vibrava", - "forms": { - "749": { - "name": "Normal", - "proto": "VIBRAVA_NORMAL", - "evolutions": [ - { - "pokemon": 330, - "form": 752 - } - ] - }, - "750": { - "name": "Shadow", - "proto": "VIBRAVA_SHADOW", - "evolutions": [ - { - "pokemon": 330, - "form": 753 - } - ] - }, - "751": { - "name": "Purified", - "proto": "VIBRAVA_PURIFIED", - "evolutions": [ - { - "pokemon": 330, - "form": 754 - } - ] - } - }, - "default_form_id": 749, - "pokedex_id": 329, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ground", - "Dragon" - ], - "attack": 134, - "defense": 99, - "stamina": 137, - "height": 1.09, - "weight": 15.3, - "flee_rate": 0.06, - "capture_rate": 0.1, - "quick_moves": [ - "Mud Shot", - "Dragon Breath" - ], - "charged_moves": [ - "Sand Tomb", - "Bulldoze", - "Bug Buzz" - ], - "evolutions": [ - { - "pokemon": 330, - "form": 752 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "330": { - "name": "Flygon", - "forms": { - "752": { - "name": "Normal", - "proto": "FLYGON_NORMAL" - }, - "753": { - "name": "Shadow", - "proto": "FLYGON_SHADOW" - }, - "754": { - "name": "Purified", - "proto": "FLYGON_PURIFIED" - } - }, - "default_form_id": 752, - "pokedex_id": 330, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ground", - "Dragon" - ], - "attack": 205, - "defense": 168, - "stamina": 190, - "height": 2.01, - "weight": 82, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Mud Shot", - "Dragon Tail" - ], - "charged_moves": [ - "Earthquake", - "Dragon Claw", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "331": { - "name": "Cacnea", - "forms": { - "610": { - "name": "Normal", - "proto": "CACNEA_NORMAL", - "evolutions": [ - { - "pokemon": 332, - "form": 613 - } - ] - }, - "611": { - "name": "Shadow", - "proto": "CACNEA_SHADOW", - "evolutions": [ - { - "pokemon": 332, - "form": 614 - } - ] - }, - "612": { - "name": "Purified", - "proto": "CACNEA_PURIFIED", - "evolutions": [ - { - "pokemon": 332, - "form": 615 - } - ] - } - }, - "default_form_id": 610, - "pokedex_id": 331, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass" - ], - "attack": 156, - "defense": 74, - "stamina": 137, - "height": 0.41, - "weight": 51.3, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Poison Sting", - "Sucker Punch" - ], - "charged_moves": [ - "Grass Knot", - "Brick Break", - "Seed Bomb", - "Payback" - ], - "evolutions": [ - { - "pokemon": 332, - "form": 613 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "332": { - "name": "Cacturne", - "forms": { - "613": { - "name": "Normal", - "proto": "CACTURNE_NORMAL" - }, - "614": { - "name": "Shadow", - "proto": "CACTURNE_SHADOW" - }, - "615": { - "name": "Purified", - "proto": "CACTURNE_PURIFIED" - } - }, - "default_form_id": 613, - "pokedex_id": 332, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass", - "Dark" - ], - "attack": 221, - "defense": 115, - "stamina": 172, - "height": 1.3, - "weight": 77.4, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Poison Jab", - "Sucker Punch" - ], - "charged_moves": [ - "Dark Pulse", - "Dynamic Punch", - "Grass Knot", - "Payback" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "333": { - "name": "Swablu", - "forms": { - "1532": { - "name": "Normal", - "proto": "SWABLU_NORMAL" - }, - "1533": { - "name": "Shadow", - "proto": "SWABLU_SHADOW" - }, - "1534": { - "name": "Purified", - "proto": "SWABLU_PURIFIED" - } - }, - "default_form_id": 1532, - "pokedex_id": 333, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal", - "Flying" - ], - "attack": 76, - "defense": 132, - "stamina": 128, - "height": 0.41, - "weight": 1.2, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Peck", - "Astonish" - ], - "charged_moves": [ - "Disarming Voice", - "Aerial Ace", - "Ice Beam" - ], - "evolutions": [ - { - "pokemon": 334 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "334": { - "name": "Altaria", - "forms": { - "1535": { - "name": "Normal", - "proto": "ALTARIA_NORMAL" - }, - "1536": { - "name": "Shadow", - "proto": "ALTARIA_SHADOW" - }, - "1537": { - "name": "Purified", - "proto": "ALTARIA_PURIFIED" - } - }, - "default_form_id": 1535, - "pokedex_id": 334, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Dragon", - "Flying" - ], - "attack": 141, - "defense": 201, - "stamina": 181, - "height": 1.09, - "weight": 20.6, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Peck", - "Dragon Breath" - ], - "charged_moves": [ - "Sky Attack", - "Dazzling Gleam", - "Dragon Pulse" - ], - "temp_evolutions": { - "1": { - "attack": 222, - "defense": 218, - "stamina": 181, - "height": 1.5, - "types": [ - "Dragon", - "Fairy" - ] - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "335": { - "name": "Zangoose", - "forms": { - "1538": { - "name": "Normal", - "proto": "ZANGOOSE_NORMAL" - }, - "1539": { - "name": "Shadow", - "proto": "ZANGOOSE_SHADOW" - }, - "1540": { - "name": "Purified", - "proto": "ZANGOOSE_PURIFIED" - } - }, - "default_form_id": 1538, - "pokedex_id": 335, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 222, - "defense": 124, - "stamina": 177, - "height": 1.3, - "weight": 40.3, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Fury Cutter", - "Shadow Claw" - ], - "charged_moves": [ - "Close Combat", - "Night Slash", - "Dig" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "336": { - "name": "Seviper", - "forms": { - "1541": { - "name": "Normal", - "proto": "SEVIPER_NORMAL" - }, - "1542": { - "name": "Shadow", - "proto": "SEVIPER_SHADOW" - }, - "1543": { - "name": "Purified", - "proto": "SEVIPER_PURIFIED" - } - }, - "default_form_id": 1541, - "pokedex_id": 336, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Poison" - ], - "attack": 196, - "defense": 118, - "stamina": 177, - "height": 2.69, - "weight": 52.5, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Poison Jab", - "Iron Tail" - ], - "charged_moves": [ - "Poison Fang", - "Crunch", - "Wrap" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "337": { - "name": "Lunatone", - "forms": { - "1544": { - "name": "Normal", - "proto": "LUNATONE_NORMAL" - }, - "1545": { - "name": "Shadow", - "proto": "LUNATONE_SHADOW" - }, - "1546": { - "name": "Purified", - "proto": "LUNATONE_PURIFIED" - } - }, - "default_form_id": 1544, - "pokedex_id": 337, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Rock", - "Psychic" - ], - "attack": 178, - "defense": 153, - "stamina": 207, - "height": 0.99, - "weight": 168, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Rock Throw", - "Confusion" - ], - "charged_moves": [ - "Psychic", - "Rock Slide", - "Moonblast" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "338": { - "name": "Solrock", - "forms": { - "1547": { - "name": "Normal", - "proto": "SOLROCK_NORMAL" - }, - "1548": { - "name": "Shadow", - "proto": "SOLROCK_SHADOW" - }, - "1549": { - "name": "Purified", - "proto": "SOLROCK_PURIFIED" - } - }, - "default_form_id": 1547, - "pokedex_id": 338, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Rock", - "Psychic" - ], - "attack": 178, - "defense": 153, - "stamina": 207, - "height": 1.19, - "weight": 154, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Rock Throw", - "Confusion" - ], - "charged_moves": [ - "Psychic", - "Rock Slide", - "Solar Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "339": { - "name": "Barboach", - "forms": { - "1550": { - "name": "Normal", - "proto": "BARBOACH_NORMAL" - }, - "1551": { - "name": "Shadow", - "proto": "BARBOACH_SHADOW" - }, - "1552": { - "name": "Purified", - "proto": "BARBOACH_PURIFIED" - } - }, - "default_form_id": 1550, - "pokedex_id": 339, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Ground" - ], - "attack": 93, - "defense": 82, - "stamina": 137, - "height": 0.41, - "weight": 1.9, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Water Gun", - "Mud Shot" - ], - "charged_moves": [ - "Aqua Tail", - "Ice Beam", - "Mud Bomb" - ], - "evolutions": [ - { - "pokemon": 340 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "340": { - "name": "Whiscash", - "forms": { - "1553": { - "name": "Normal", - "proto": "WHISCASH_NORMAL" - }, - "1554": { - "name": "Shadow", - "proto": "WHISCASH_SHADOW" - }, - "1555": { - "name": "Purified", - "proto": "WHISCASH_PURIFIED" - } - }, - "default_form_id": 1553, - "pokedex_id": 340, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Ground" - ], - "attack": 151, - "defense": 141, - "stamina": 242, - "height": 0.89, - "weight": 23.6, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Mud Shot" - ], - "charged_moves": [ - "Water Pulse", - "Blizzard", - "Mud Bomb" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "341": { - "name": "Corphish", - "forms": { - "1556": { - "name": "Normal", - "proto": "CORPHISH_NORMAL" - }, - "1557": { - "name": "Shadow", - "proto": "CORPHISH_SHADOW" - }, - "1558": { - "name": "Purified", - "proto": "CORPHISH_PURIFIED" - } - }, - "default_form_id": 1556, - "pokedex_id": 341, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water" - ], - "attack": 141, - "defense": 99, - "stamina": 125, - "height": 0.61, - "weight": 11.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Bubble", - "Rock Smash" - ], - "charged_moves": [ - "Vice Grip", - "Bubble Beam", - "Aqua Jet" - ], - "evolutions": [ - { - "pokemon": 342 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "342": { - "name": "Crawdaunt", - "forms": { - "1559": { - "name": "Normal", - "proto": "CRAWDAUNT_NORMAL" - }, - "1560": { - "name": "Shadow", - "proto": "CRAWDAUNT_SHADOW" - }, - "1561": { - "name": "Purified", - "proto": "CRAWDAUNT_PURIFIED" - } - }, - "default_form_id": 1559, - "pokedex_id": 342, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Dark" - ], - "attack": 224, - "defense": 142, - "stamina": 160, - "height": 1.09, - "weight": 32.8, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Waterfall", - "Snarl" - ], - "charged_moves": [ - "Vice Grip", - "Bubble Beam", - "Night Slash", - "Crabhammer" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "343": { - "name": "Baltoy", - "forms": { - "1562": { - "name": "Normal", - "proto": "BALTOY_NORMAL" - }, - "1563": { - "name": "Shadow", - "proto": "BALTOY_SHADOW" - }, - "1564": { - "name": "Purified", - "proto": "BALTOY_PURIFIED" - } - }, - "default_form_id": 1562, - "pokedex_id": 343, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ground", - "Psychic" - ], - "attack": 77, - "defense": 124, - "stamina": 120, - "height": 0.51, - "weight": 21.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Confusion", - "Extrasensory" - ], - "charged_moves": [ - "Gyro Ball", - "Psybeam", - "Dig" - ], - "evolutions": [ - { - "pokemon": 344 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "344": { - "name": "Claydol", - "forms": { - "1565": { - "name": "Normal", - "proto": "CLAYDOL_NORMAL" - }, - "1566": { - "name": "Shadow", - "proto": "CLAYDOL_SHADOW" - }, - "1567": { - "name": "Purified", - "proto": "CLAYDOL_PURIFIED" - } - }, - "default_form_id": 1565, - "pokedex_id": 344, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ground", - "Psychic" - ], - "attack": 140, - "defense": 229, - "stamina": 155, - "height": 1.5, - "weight": 108, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Extrasensory", - "Confusion", - "Mud Slap" - ], - "charged_moves": [ - "Gyro Ball", - "Psychic", - "Earthquake", - "Earth Power", - "Ice Beam", - "Shadow Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "345": { - "name": "Lileep", - "forms": { - "1568": { - "name": "Normal", - "proto": "LILEEP_NORMAL", - "evolutions": [ - { - "pokemon": 346, - "form": 1571 - } - ] - }, - "1569": { - "name": "Shadow", - "proto": "LILEEP_SHADOW", - "evolutions": [ - { - "pokemon": 346, - "form": 1572 - } - ] - }, - "1570": { - "name": "Purified", - "proto": "LILEEP_PURIFIED", - "evolutions": [ - { - "pokemon": 346, - "form": 1573 - } - ] - } - }, - "default_form_id": 1568, - "pokedex_id": 345, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Rock", - "Grass" - ], - "attack": 105, - "defense": 150, - "stamina": 165, - "height": 0.99, - "weight": 23.8, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Acid", - "Infestation" - ], - "charged_moves": [ - "Grass Knot", - "Mirror Coat", - "Ancient Power" - ], - "evolutions": [ - { - "pokemon": 346, - "form": 1571 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "346": { - "name": "Cradily", - "forms": { - "1571": { - "name": "Normal", - "proto": "CRADILY_NORMAL" - }, - "1572": { - "name": "Shadow", - "proto": "CRADILY_SHADOW" - }, - "1573": { - "name": "Purified", - "proto": "CRADILY_PURIFIED" - } - }, - "default_form_id": 1571, - "pokedex_id": 346, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Rock", - "Grass" - ], - "attack": 152, - "defense": 194, - "stamina": 200, - "height": 1.5, - "weight": 60.4, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Acid", - "Infestation", - "Bullet Seed" - ], - "charged_moves": [ - "Grass Knot", - "Bulldoze", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "347": { - "name": "Anorith", - "forms": { - "1574": { - "name": "Normal", - "proto": "ANORITH_NORMAL", - "evolutions": [ - { - "pokemon": 348, - "form": 1577 - } - ] - }, - "1575": { - "name": "Shadow", - "proto": "ANORITH_SHADOW", - "evolutions": [ - { - "pokemon": 348, - "form": 1578 - } - ] - }, - "1576": { - "name": "Purified", - "proto": "ANORITH_PURIFIED", - "evolutions": [ - { - "pokemon": 348, - "form": 1579 - } - ] - } - }, - "default_form_id": 1574, - "pokedex_id": 347, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Rock", - "Bug" - ], - "attack": 176, - "defense": 100, - "stamina": 128, - "height": 0.71, - "weight": 12.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Struggle Bug", - "Scratch" - ], - "charged_moves": [ - "Cross Poison", - "Aqua Jet", - "Ancient Power" - ], - "evolutions": [ - { - "pokemon": 348, - "form": 1577 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "348": { - "name": "Armaldo", - "forms": { - "1577": { - "name": "Normal", - "proto": "ARMALDO_NORMAL" - }, - "1578": { - "name": "Shadow", - "proto": "ARMALDO_SHADOW" - }, - "1579": { - "name": "Purified", - "proto": "ARMALDO_PURIFIED" - } - }, - "default_form_id": 1577, - "pokedex_id": 348, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Rock", - "Bug" - ], - "attack": 222, - "defense": 174, - "stamina": 181, - "height": 1.5, - "weight": 68.2, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Fury Cutter", - "Struggle Bug" - ], - "charged_moves": [ - "Cross Poison", - "Water Pulse", - "Rock Blast" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "349": { - "name": "Feebas", - "forms": { - "1580": { - "name": "Normal", - "proto": "FEEBAS_NORMAL" - }, - "1581": { - "name": "Shadow", - "proto": "FEEBAS_SHADOW" - }, - "1582": { - "name": "Purified", - "proto": "FEEBAS_PURIFIED" - } - }, - "default_form_id": 1580, - "pokedex_id": 349, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water" - ], - "attack": 29, - "defense": 85, - "stamina": 85, - "height": 0.61, - "weight": 7.4, - "flee_rate": 0.15, - "capture_rate": 0.7, - "quick_moves": [ - "Splash", - "Tackle" - ], - "charged_moves": [ - "Mirror Coat" - ], - "evolutions": [ - { - "pokemon": 350 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "350": { - "name": "Milotic", - "forms": { - "1583": { - "name": "Normal", - "proto": "MILOTIC_NORMAL" - }, - "1584": { - "name": "Shadow", - "proto": "MILOTIC_SHADOW" - }, - "1585": { - "name": "Purified", - "proto": "MILOTIC_PURIFIED" - } - }, - "default_form_id": 1583, - "pokedex_id": 350, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water" - ], - "attack": 192, - "defense": 219, - "stamina": 216, - "height": 6.2, - "weight": 162, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Waterfall", - "Dragon Tail" - ], - "charged_moves": [ - "Surf", - "Blizzard", - "Hyper Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "351": { - "name": "Castform", - "forms": { - "29": { - "name": "Normal", - "proto": "CASTFORM_NORMAL", - "charged_moves": [ - "Hurricane", - "Energy Ball", - "Weather Ball" - ] - }, - "30": { - "name": "Sunny", - "proto": "CASTFORM_SUNNY", - "quick_moves": [ - "Ember", - "Tackle" - ], - "charged_moves": [ - "Fire Blast", - "Solar Beam", - "Weather Ball" - ], - "types": [ - "Fire" - ] - }, - "31": { - "name": "Rainy", - "proto": "CASTFORM_RAINY", - "quick_moves": [ - "Water Gun", - "Tackle" - ], - "charged_moves": [ - "Hydro Pump", - "Thunder", - "Weather Ball" - ], - "types": [ - "Water" - ] - }, - "32": { - "name": "Snowy", - "proto": "CASTFORM_SNOWY", - "quick_moves": [ - "Powder Snow", - "Tackle" - ], - "charged_moves": [ - "Blizzard", - "Ice Beam", - "Weather Ball" - ], - "types": [ - "Ice" - ] - } - }, - "default_form_id": 29, - "pokedex_id": 351, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 139, - "defense": 139, - "stamina": 172, - "height": 0.3, - "weight": 0.8, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Tackle", - "Hex" - ], - "charged_moves": [ - "Hurricane", - "Energy Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "352": { - "name": "Kecleon", - "forms": { - "1586": { - "name": "Normal", - "proto": "KECLEON_NORMAL" - }, - "1587": { - "name": "Shadow", - "proto": "KECLEON_SHADOW" - }, - "1588": { - "name": "Purified", - "proto": "KECLEON_PURIFIED" - } - }, - "default_form_id": 1586, - "pokedex_id": 352, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Normal" - ], - "attack": 161, - "defense": 189, - "stamina": 155, - "height": 0.99, - "weight": 22, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Lick", - "Sucker Punch" - ], - "charged_moves": [ - "Foul Play", - "Flamethrower", - "Thunder", - "Ice Beam", - "Aerial Ace", - "Shadow Sneak" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "353": { - "name": "Shuppet", - "forms": { - "908": { - "name": "Normal", - "proto": "SHUPPET_NORMAL", - "evolutions": [ - { - "pokemon": 354, - "form": 911 - } - ] - }, - "909": { - "name": "Shadow", - "proto": "SHUPPET_SHADOW", - "evolutions": [ - { - "pokemon": 354, - "form": 912 - } - ] - }, - "910": { - "name": "Purified", - "proto": "SHUPPET_PURIFIED", - "evolutions": [ - { - "pokemon": 354, - "form": 913 - } - ] - } - }, - "default_form_id": 908, - "pokedex_id": 353, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ghost" - ], - "attack": 138, - "defense": 65, - "stamina": 127, - "height": 0.61, - "weight": 2.3, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Feint Attack", - "Astonish" - ], - "charged_moves": [ - "Ominous Wind", - "Night Shade", - "Shadow Sneak" - ], - "evolutions": [ - { - "pokemon": 354, - "form": 911 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "354": { - "name": "Banette", - "forms": { - "911": { - "name": "Normal", - "proto": "BANETTE_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "912": { - "name": "Shadow", - "proto": "BANETTE_SHADOW" - }, - "913": { - "name": "Purified", - "proto": "BANETTE_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 911, - "pokedex_id": 354, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ghost" - ], - "attack": 218, - "defense": 126, - "stamina": 162, - "height": 1.09, - "weight": 12.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Hex", - "Shadow Claw" - ], - "charged_moves": [ - "Shadow Ball", - "Dazzling Gleam", - "Thunder" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 312, - "defense": 160, - "stamina": 162, - "unreleased": true - } - } - }, - "355": { - "name": "Duskull", - "forms": { - "914": { - "name": "Normal", - "proto": "DUSKULL_NORMAL", - "evolutions": [ - { - "pokemon": 356, - "form": 917 - } - ] - }, - "915": { - "name": "Shadow", - "proto": "DUSKULL_SHADOW", - "evolutions": [ - { - "pokemon": 356, - "form": 918 - } - ] - }, - "916": { - "name": "Purified", - "proto": "DUSKULL_PURIFIED", - "evolutions": [ - { - "pokemon": 356, - "form": 919 - } - ] - } - }, - "default_form_id": 914, - "pokedex_id": 355, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ghost" - ], - "attack": 70, - "defense": 162, - "stamina": 85, - "height": 0.79, - "weight": 15, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Hex", - "Astonish" - ], - "charged_moves": [ - "Ominous Wind", - "Night Shade", - "Shadow Sneak" - ], - "evolutions": [ - { - "pokemon": 356, - "form": 917 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "356": { - "name": "Dusclops", - "forms": { - "917": { - "name": "Normal", - "proto": "DUSCLOPS_NORMAL", - "evolutions": [ - { - "pokemon": 477, - "form": 920 - } - ] - }, - "918": { - "name": "Shadow", - "proto": "DUSCLOPS_SHADOW", - "evolutions": [ - { - "pokemon": 477, - "form": 921 - } - ] - }, - "919": { - "name": "Purified", - "proto": "DUSCLOPS_PURIFIED", - "evolutions": [ - { - "pokemon": 477, - "form": 922 - } - ] - } - }, - "default_form_id": 917, - "pokedex_id": 356, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ghost" - ], - "attack": 124, - "defense": 234, - "stamina": 120, - "height": 1.6, - "weight": 30.6, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Hex", - "Feint Attack" - ], - "charged_moves": [ - "Shadow Punch", - "Ice Punch", - "Fire Punch" - ], - "evolutions": [ - { - "pokemon": 477, - "form": 920 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "357": { - "name": "Tropius", - "forms": { - "1589": { - "name": "Normal", - "proto": "TROPIUS_NORMAL" - }, - "1590": { - "name": "Shadow", - "proto": "TROPIUS_SHADOW" - }, - "1591": { - "name": "Purified", - "proto": "TROPIUS_PURIFIED" - } - }, - "default_form_id": 1589, - "pokedex_id": 357, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Grass", - "Flying" - ], - "attack": 136, - "defense": 163, - "stamina": 223, - "height": 2.01, - "weight": 100, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Air Slash", - "Razor Leaf" - ], - "charged_moves": [ - "Stomp", - "Aerial Ace", - "Leaf Blade" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "358": { - "name": "Chimecho", - "forms": { - "1592": { - "name": "Normal", - "proto": "CHIMECHO_NORMAL" - }, - "1593": { - "name": "Shadow", - "proto": "CHIMECHO_SHADOW" - }, - "1594": { - "name": "Purified", - "proto": "CHIMECHO_PURIFIED" - } - }, - "default_form_id": 1592, - "pokedex_id": 358, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Psychic" - ], - "attack": 175, - "defense": 170, - "stamina": 181, - "height": 0.61, - "weight": 1, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Extrasensory", - "Astonish" - ], - "charged_moves": [ - "Energy Ball", - "Shadow Ball", - "Psyshock", - "Psyshock" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "359": { - "name": "Absol", - "forms": { - "830": { - "name": "Normal", - "proto": "ABSOL_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "831": { - "name": "Shadow", - "proto": "ABSOL_SHADOW" - }, - "832": { - "name": "Purified", - "proto": "ABSOL_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 830, - "pokedex_id": 359, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Dark" - ], - "attack": 246, - "defense": 120, - "stamina": 163, - "height": 1.19, - "weight": 47, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Psycho Cut", - "Snarl" - ], - "charged_moves": [ - "Dark Pulse", - "Thunder", - "Megahorn", - "Payback" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 314, - "defense": 130, - "stamina": 163, - "unreleased": true - } - } - }, - "360": { - "name": "Wynaut", - "forms": { - "1595": { - "name": "Normal", - "proto": "WYNAUT_NORMAL" - }, - "1596": { - "name": "Shadow", - "proto": "WYNAUT_SHADOW" - }, - "1597": { - "name": "Purified", - "proto": "WYNAUT_PURIFIED" - } - }, - "default_form_id": 1595, - "pokedex_id": 360, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Psychic" - ], - "attack": 41, - "defense": 86, - "stamina": 216, - "height": 0.61, - "weight": 14, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Splash", - "Counter" - ], - "charged_moves": [ - "Mirror Coat" - ], - "evolutions": [ - { - "pokemon": 202 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "361": { - "name": "Snorunt", - "forms": { - "926": { - "name": "Normal", - "proto": "SNORUNT_NORMAL" - }, - "927": { - "name": "Shadow", - "proto": "SNORUNT_SHADOW" - }, - "928": { - "name": "Purified", - "proto": "SNORUNT_PURIFIED" - } - }, - "default_form_id": 926, - "pokedex_id": 361, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ice" - ], - "attack": 95, - "defense": 95, - "stamina": 137, - "height": 0.71, - "weight": 16.8, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Powder Snow", - "Hex" - ], - "charged_moves": [ - "Avalanche", - "Icy Wind", - "Shadow Ball" - ], - "evolutions": [ - { - "pokemon": 478, - "gender_requirement": 2 - }, - { - "pokemon": 362 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "362": { - "name": "Glalie", - "forms": { - "929": { - "name": "Normal", - "proto": "GLALIE_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "930": { - "name": "Shadow", - "proto": "GLALIE_SHADOW" - }, - "931": { - "name": "Purified", - "proto": "GLALIE_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 929, - "pokedex_id": 362, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ice" - ], - "attack": 162, - "defense": 162, - "stamina": 190, - "height": 1.5, - "weight": 256.5, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Ice Shard", - "Frost Breath" - ], - "charged_moves": [ - "Avalanche", - "Gyro Ball", - "Shadow Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 252, - "defense": 168, - "stamina": 190, - "unreleased": true - } - } - }, - "363": { - "name": "Spheal", - "forms": { - "1598": { - "name": "Normal", - "proto": "SPHEAL_NORMAL", - "evolutions": [ - { - "pokemon": 364, - "form": 1601 - } - ] - }, - "1599": { - "name": "Shadow", - "proto": "SPHEAL_SHADOW", - "evolutions": [ - { - "pokemon": 364, - "form": 1602 - } - ] - }, - "1600": { - "name": "Purified", - "proto": "SPHEAL_PURIFIED", - "evolutions": [ - { - "pokemon": 364, - "form": 1603 - } - ] - } - }, - "default_form_id": 1598, - "pokedex_id": 363, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ice", - "Water" - ], - "attack": 95, - "defense": 90, - "stamina": 172, - "height": 0.79, - "weight": 39.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Water Gun", - "Rock Smash" - ], - "charged_moves": [ - "Aurora Beam", - "Body Slam", - "Water Pulse" - ], - "evolutions": [ - { - "pokemon": 364, - "form": 1601 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "364": { - "name": "Sealeo", - "forms": { - "1601": { - "name": "Normal", - "proto": "SEALEO_NORMAL", - "evolutions": [ - { - "pokemon": 365, - "form": 1604 - } - ] - }, - "1602": { - "name": "Shadow", - "proto": "SEALEO_SHADOW", - "evolutions": [ - { - "pokemon": 365, - "form": 1605 - } - ] - }, - "1603": { - "name": "Purified", - "proto": "SEALEO_PURIFIED", - "evolutions": [ - { - "pokemon": 365, - "form": 1606 - } - ] - } - }, - "default_form_id": 1601, - "pokedex_id": 364, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ice", - "Water" - ], - "attack": 137, - "defense": 132, - "stamina": 207, - "height": 1.09, - "weight": 87.6, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Water Gun", - "Powder Snow" - ], - "charged_moves": [ - "Aurora Beam", - "Body Slam", - "Water Pulse" - ], - "evolutions": [ - { - "pokemon": 365, - "form": 1604 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "365": { - "name": "Walrein", - "forms": { - "1604": { - "name": "Normal", - "proto": "WALREIN_NORMAL" - }, - "1605": { - "name": "Shadow", - "proto": "WALREIN_SHADOW" - }, - "1606": { - "name": "Purified", - "proto": "WALREIN_PURIFIED" - } - }, - "default_form_id": 1604, - "pokedex_id": 365, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ice", - "Water" - ], - "attack": 182, - "defense": 176, - "stamina": 242, - "height": 1.4, - "weight": 150.6, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Waterfall", - "Frost Breath" - ], - "charged_moves": [ - "Blizzard", - "Earthquake", - "Water Pulse" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "366": { - "name": "Clamperl", - "forms": { - "1607": { - "name": "Normal", - "proto": "CLAMPERL_NORMAL" - }, - "1608": { - "name": "Shadow", - "proto": "CLAMPERL_SHADOW" - }, - "1609": { - "name": "Purified", - "proto": "CLAMPERL_PURIFIED" - } - }, - "default_form_id": 1607, - "pokedex_id": 366, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water" - ], - "attack": 133, - "defense": 135, - "stamina": 111, - "height": 0.41, - "weight": 52.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Water Gun" - ], - "charged_moves": [ - "Body Slam", - "Ice Beam", - "Water Pulse" - ], - "evolutions": [ - { - "pokemon": 367 - }, - { - "pokemon": 368 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "367": { - "name": "Huntail", - "forms": { - "1610": { - "name": "Normal", - "proto": "HUNTAIL_NORMAL" - }, - "1611": { - "name": "Shadow", - "proto": "HUNTAIL_SHADOW" - }, - "1612": { - "name": "Purified", - "proto": "HUNTAIL_PURIFIED" - } - }, - "default_form_id": 1610, - "pokedex_id": 367, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water" - ], - "attack": 197, - "defense": 179, - "stamina": 146, - "height": 1.7, - "weight": 27, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Bite" - ], - "charged_moves": [ - "Crunch", - "Ice Beam", - "Aqua Tail" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "368": { - "name": "Gorebyss", - "forms": { - "1613": { - "name": "Normal", - "proto": "GOREBYSS_NORMAL" - }, - "1614": { - "name": "Shadow", - "proto": "GOREBYSS_SHADOW" - }, - "1615": { - "name": "Purified", - "proto": "GOREBYSS_PURIFIED" - } - }, - "default_form_id": 1613, - "pokedex_id": 368, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water" - ], - "attack": 211, - "defense": 179, - "stamina": 146, - "height": 1.8, - "weight": 22.6, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Confusion" - ], - "charged_moves": [ - "Draining Kiss", - "Psychic", - "Water Pulse" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "369": { - "name": "Relicanth", - "forms": { - "1616": { - "name": "Normal", - "proto": "RELICANTH_NORMAL" - }, - "1617": { - "name": "Shadow", - "proto": "RELICANTH_SHADOW" - }, - "1618": { - "name": "Purified", - "proto": "RELICANTH_PURIFIED" - } - }, - "default_form_id": 1616, - "pokedex_id": 369, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water", - "Rock" - ], - "attack": 162, - "defense": 203, - "stamina": 225, - "height": 0.99, - "weight": 23.4, - "flee_rate": 0.01, - "capture_rate": 0.9, - "quick_moves": [ - "Water Gun", - "Zen Headbutt" - ], - "charged_moves": [ - "Ancient Power", - "Aqua Tail", - "Hydro Pump" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "370": { - "name": "Luvdisc", - "forms": { - "1619": { - "name": "Normal", - "proto": "LUVDISC_NORMAL" - }, - "1620": { - "name": "Shadow", - "proto": "LUVDISC_SHADOW" - }, - "1621": { - "name": "Purified", - "proto": "LUVDISC_PURIFIED" - } - }, - "default_form_id": 1619, - "pokedex_id": 370, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water" - ], - "attack": 81, - "defense": 128, - "stamina": 125, - "height": 0.61, - "weight": 8.7, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Water Gun", - "Splash" - ], - "charged_moves": [ - "Draining Kiss", - "Water Pulse", - "Aqua Jet" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "371": { - "name": "Bagon", - "forms": { - "755": { - "name": "Normal", - "proto": "BAGON_NORMAL", - "evolutions": [ - { - "pokemon": 372, - "form": 758 - } - ] - }, - "756": { - "name": "Shadow", - "proto": "BAGON_SHADOW", - "evolutions": [ - { - "pokemon": 372, - "form": 759 - } - ] - }, - "757": { - "name": "Purified", - "proto": "BAGON_PURIFIED", - "evolutions": [ - { - "pokemon": 372, - "form": 760 - } - ] - } - }, - "default_form_id": 755, - "pokedex_id": 371, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Dragon" - ], - "attack": 134, - "defense": 93, - "stamina": 128, - "height": 0.61, - "weight": 42.1, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Bite", - "Ember" - ], - "charged_moves": [ - "Flamethrower", - "Twister", - "Crunch" - ], - "evolutions": [ - { - "pokemon": 372, - "form": 758 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "372": { - "name": "Shelgon", - "forms": { - "758": { - "name": "Normal", - "proto": "SHELGON_NORMAL", - "evolutions": [ - { - "pokemon": 373, - "form": 761 - } - ] - }, - "759": { - "name": "Shadow", - "proto": "SHELGON_SHADOW", - "evolutions": [ - { - "pokemon": 373, - "form": 762 - } - ] - }, - "760": { - "name": "Purified", - "proto": "SHELGON_PURIFIED", - "evolutions": [ - { - "pokemon": 373, - "form": 763 - } - ] - } - }, - "default_form_id": 758, - "pokedex_id": 372, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Dragon" - ], - "attack": 172, - "defense": 155, - "stamina": 163, - "height": 1.09, - "weight": 110.5, - "flee_rate": 0.06, - "capture_rate": 0.1, - "quick_moves": [ - "Ember", - "Dragon Breath" - ], - "charged_moves": [ - "Flamethrower", - "Dragon Pulse", - "Twister" - ], - "evolutions": [ - { - "pokemon": 373, - "form": 761 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "373": { - "name": "Salamence", - "forms": { - "761": { - "name": "Normal", - "proto": "SALAMENCE_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "762": { - "name": "Shadow", - "proto": "SALAMENCE_SHADOW" - }, - "763": { - "name": "Purified", - "proto": "SALAMENCE_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 761, - "pokedex_id": 373, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Dragon", - "Flying" - ], - "attack": 277, - "defense": 168, - "stamina": 216, - "height": 1.5, - "weight": 102.6, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Dragon Tail", - "Fire Fang", - "Bite" - ], - "charged_moves": [ - "Fire Blast", - "Hydro Pump", - "Draco Meteor" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 310, - "defense": 251, - "stamina": 216, - "unreleased": true - } - } - }, - "374": { - "name": "Beldum", - "forms": { - "764": { - "name": "Normal", - "proto": "BELDUM_NORMAL", - "evolutions": [ - { - "pokemon": 375, - "form": 767 - } - ] - }, - "765": { - "name": "Shadow", - "proto": "BELDUM_SHADOW", - "evolutions": [ - { - "pokemon": 375, - "form": 768 - } - ] - }, - "766": { - "name": "Purified", - "proto": "BELDUM_PURIFIED", - "evolutions": [ - { - "pokemon": 375, - "form": 769 - } - ] - } - }, - "default_form_id": 764, - "pokedex_id": 374, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Steel", - "Psychic" - ], - "attack": 96, - "defense": 132, - "stamina": 120, - "height": 0.61, - "weight": 95.2, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Take Down" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 375, - "form": 767 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "375": { - "name": "Metang", - "forms": { - "767": { - "name": "Normal", - "proto": "METANG_NORMAL", - "evolutions": [ - { - "pokemon": 376, - "form": 770 - } - ] - }, - "768": { - "name": "Shadow", - "proto": "METANG_SHADOW", - "evolutions": [ - { - "pokemon": 376, - "form": 771 - } - ] - }, - "769": { - "name": "Purified", - "proto": "METANG_PURIFIED", - "evolutions": [ - { - "pokemon": 376, - "form": 772 - } - ] - } - }, - "default_form_id": 767, - "pokedex_id": 375, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Steel", - "Psychic" - ], - "attack": 138, - "defense": 176, - "stamina": 155, - "height": 1.19, - "weight": 202.5, - "flee_rate": 0.06, - "capture_rate": 0.1, - "quick_moves": [ - "Zen Headbutt", - "Metal Claw" - ], - "charged_moves": [ - "Psychic", - "Gyro Ball", - "Psyshock" - ], - "evolutions": [ - { - "pokemon": 376, - "form": 770 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "376": { - "name": "Metagross", - "forms": { - "770": { - "name": "Normal", - "proto": "METAGROSS_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "771": { - "name": "Shadow", - "proto": "METAGROSS_SHADOW" - }, - "772": { - "name": "Purified", - "proto": "METAGROSS_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 770, - "pokedex_id": 376, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Steel", - "Psychic" - ], - "attack": 257, - "defense": 228, - "stamina": 190, - "height": 1.6, - "weight": 550, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Bullet Punch", - "Zen Headbutt" - ], - "charged_moves": [ - "Psychic", - "Flash Cannon", - "Earthquake" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 300, - "defense": 289, - "stamina": 190, - "unreleased": true - } - } - }, - "377": { - "name": "Regirock", - "forms": { - "1622": { - "name": "Normal", - "proto": "REGIROCK_NORMAL" - }, - "1623": { - "name": "Shadow", - "proto": "REGIROCK_SHADOW" - }, - "1624": { - "name": "Purified", - "proto": "REGIROCK_PURIFIED" - } - }, - "default_form_id": 1622, - "pokedex_id": 377, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Rock" - ], - "attack": 179, - "defense": 309, - "stamina": 190, - "height": 1.7, - "weight": 230, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Rock Throw", - "Rock Smash", - "Lock On" - ], - "charged_moves": [ - "Stone Edge", - "Zap Cannon", - "Focus Blast" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "378": { - "name": "Regice", - "forms": { - "1625": { - "name": "Normal", - "proto": "REGICE_NORMAL" - }, - "1626": { - "name": "Shadow", - "proto": "REGICE_SHADOW" - }, - "1627": { - "name": "Purified", - "proto": "REGICE_PURIFIED" - } - }, - "default_form_id": 1625, - "pokedex_id": 378, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ice" - ], - "attack": 179, - "defense": 309, - "stamina": 190, - "height": 1.8, - "weight": 175, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Frost Breath", - "Rock Smash", - "Lock On" - ], - "charged_moves": [ - "Blizzard", - "Earthquake", - "Focus Blast" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "379": { - "name": "Registeel", - "forms": { - "1628": { - "name": "Normal", - "proto": "REGISTEEL_NORMAL" - }, - "1629": { - "name": "Shadow", - "proto": "REGISTEEL_SHADOW" - }, - "1630": { - "name": "Purified", - "proto": "REGISTEEL_PURIFIED" - } - }, - "default_form_id": 1628, - "pokedex_id": 379, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Steel" - ], - "attack": 143, - "defense": 285, - "stamina": 190, - "height": 1.91, - "weight": 205, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Metal Claw", - "Rock Smash", - "Lock On" - ], - "charged_moves": [ - "Flash Cannon", - "Hyper Beam", - "Focus Blast" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "380": { - "name": "Latias", - "forms": { - "1631": { - "name": "Normal", - "proto": "LATIAS_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1632": { - "name": "Shadow", - "proto": "LATIAS_SHADOW" - }, - "1633": { - "name": "Purified", - "proto": "LATIAS_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1631, - "pokedex_id": 380, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Dragon", - "Psychic" - ], - "attack": 228, - "defense": 246, - "stamina": 190, - "height": 1.4, - "weight": 40, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Dragon Breath", - "Zen Headbutt", - "Charm" - ], - "charged_moves": [ - "Psychic", - "Outrage", - "Thunder" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100, - "temp_evolutions": { - "1": { - "attack": 289, - "defense": 297, - "stamina": 190, - "unreleased": true - } - } - }, - "381": { - "name": "Latios", - "forms": { - "1634": { - "name": "Normal", - "proto": "LATIOS_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1635": { - "name": "Shadow", - "proto": "LATIOS_SHADOW" - }, - "1636": { - "name": "Purified", - "proto": "LATIOS_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1634, - "pokedex_id": 381, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Dragon", - "Psychic" - ], - "attack": 268, - "defense": 212, - "stamina": 190, - "height": 2.01, - "weight": 60, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Dragon Breath", - "Zen Headbutt" - ], - "charged_moves": [ - "Psychic", - "Dragon Claw", - "Solar Beam" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100, - "temp_evolutions": { - "1": { - "attack": 335, - "defense": 241, - "stamina": 190, - "unreleased": true - } - } - }, - "382": { - "name": "Kyogre", - "forms": { - "1637": { - "name": "Normal", - "proto": "KYOGRE_NORMAL" - }, - "1638": { - "name": "Shadow", - "proto": "KYOGRE_SHADOW" - }, - "1639": { - "name": "Purified", - "proto": "KYOGRE_PURIFIED" - } - }, - "default_form_id": 1637, - "pokedex_id": 382, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Water" - ], - "attack": 270, - "defense": 228, - "stamina": 205, - "height": 4.5, - "weight": 352, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Waterfall" - ], - "charged_moves": [ - "Hydro Pump", - "Blizzard", - "Thunder", - "Surf" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "383": { - "name": "Groudon", - "forms": { - "1640": { - "name": "Normal", - "proto": "GROUDON_NORMAL" - }, - "1641": { - "name": "Shadow", - "proto": "GROUDON_SHADOW" - }, - "1642": { - "name": "Purified", - "proto": "GROUDON_PURIFIED" - } - }, - "default_form_id": 1640, - "pokedex_id": 383, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Ground" - ], - "attack": 270, - "defense": 228, - "stamina": 205, - "height": 3.51, - "weight": 950, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Mud Shot", - "Dragon Tail" - ], - "charged_moves": [ - "Earthquake", - "Fire Blast", - "Solar Beam" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "384": { - "name": "Rayquaza", - "forms": { - "1643": { - "name": "Normal", - "proto": "RAYQUAZA_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1644": { - "name": "Shadow", - "proto": "RAYQUAZA_SHADOW" - }, - "1645": { - "name": "Purified", - "proto": "RAYQUAZA_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1643, - "pokedex_id": 384, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Dragon", - "Flying" - ], - "attack": 284, - "defense": 170, - "stamina": 213, - "height": 7.01, - "weight": 206.5, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Air Slash", - "Dragon Tail" - ], - "charged_moves": [ - "Outrage", - "Aerial Ace", - "Ancient Power" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100, - "temp_evolutions": { - "1": { - "attack": 389, - "defense": 216, - "stamina": 233, - "unreleased": true - } - } - }, - "385": { - "name": "Jirachi", - "forms": { - "1646": { - "name": "Normal", - "proto": "JIRACHI_NORMAL" - }, - "1647": { - "name": "Shadow", - "proto": "JIRACHI_SHADOW" - }, - "1648": { - "name": "Purified", - "proto": "JIRACHI_PURIFIED" - } - }, - "default_form_id": 1646, - "pokedex_id": 385, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Steel", - "Psychic" - ], - "attack": 210, - "defense": 210, - "stamina": 225, - "height": 0.3, - "weight": 1.1, - "capture_rate": 100, - "quick_moves": [ - "Confusion", - "Charge Beam" - ], - "charged_moves": [ - "Dazzling Gleam", - "Psychic", - "Doom Desire" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "386": { - "name": "Deoxys", - "forms": { - "33": { - "name": "Normal", - "proto": "DEOXYS_NORMAL", - "charged_moves": [ - "Psycho Boost", - "Thunderbolt", - "Hyper Beam" - ] - }, - "34": { - "name": "Attack", - "proto": "DEOXYS_ATTACK", - "attack": 414, - "defense": 46, - "stamina": 137, - "quick_moves": [ - "Zen Headbutt", - "Poison Jab" - ], - "charged_moves": [ - "Psycho Boost", - "Zap Cannon", - "Dark Pulse" - ] - }, - "35": { - "name": "Defense", - "proto": "DEOXYS_DEFENSE", - "attack": 144, - "defense": 330, - "stamina": 137, - "quick_moves": [ - "Zen Headbutt", - "Counter" - ], - "charged_moves": [ - "Psycho Boost", - "Thunderbolt", - "Rock Slide" - ] - }, - "36": { - "name": "Speed", - "proto": "DEOXYS_SPEED", - "attack": 230, - "defense": 218, - "stamina": 137, - "charged_moves": [ - "Psycho Boost", - "Thunderbolt", - "Swift" - ] - } - }, - "default_form_id": 33, - "pokedex_id": 386, - "genId": "3", - "generation": "Hoenn", - "types": [ - "Psychic" - ], - "attack": 345, - "defense": 115, - "stamina": 137, - "height": 1.7, - "weight": 60.8, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Zen Headbutt", - "Charge Beam" - ], - "charged_moves": [ - "Psycho Boost", - "Zap Cannon", - "Hyper Beam" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "387": { - "name": "Turtwig", - "forms": { - "688": { - "name": "Normal", - "proto": "TURTWIG_NORMAL", - "evolutions": [ - { - "pokemon": 388, - "form": 691 - } - ] - }, - "689": { - "name": "Shadow", - "proto": "TURTWIG_SHADOW", - "evolutions": [ - { - "pokemon": 388, - "form": 692 - } - ] - }, - "690": { - "name": "Purified", - "proto": "TURTWIG_PURIFIED", - "evolutions": [ - { - "pokemon": 388, - "form": 693 - } - ] - } - }, - "default_form_id": 688, - "pokedex_id": 387, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass" - ], - "attack": 119, - "defense": 110, - "stamina": 146, - "height": 0.4, - "weight": 10.2, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Razor Leaf" - ], - "charged_moves": [ - "Energy Ball", - "Seed Bomb", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 388, - "form": 691 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "388": { - "name": "Grotle", - "forms": { - "691": { - "name": "Normal", - "proto": "GROTLE_NORMAL", - "evolutions": [ - { - "pokemon": 389, - "form": 694 - } - ] - }, - "692": { - "name": "Shadow", - "proto": "GROTLE_SHADOW", - "evolutions": [ - { - "pokemon": 389, - "form": 695 - } - ] - }, - "693": { - "name": "Purified", - "proto": "GROTLE_PURIFIED", - "evolutions": [ - { - "pokemon": 389, - "form": 696 - } - ] - } - }, - "default_form_id": 691, - "pokedex_id": 388, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass" - ], - "attack": 157, - "defense": 143, - "stamina": 181, - "height": 1.1, - "weight": 97, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Bite", - "Razor Leaf" - ], - "charged_moves": [ - "Energy Ball", - "Solar Beam", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 389, - "form": 694 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "389": { - "name": "Torterra", - "forms": { - "694": { - "name": "Normal", - "proto": "TORTERRA_NORMAL" - }, - "695": { - "name": "Shadow", - "proto": "TORTERRA_SHADOW" - }, - "696": { - "name": "Purified", - "proto": "TORTERRA_PURIFIED" - } - }, - "default_form_id": 694, - "pokedex_id": 389, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass", - "Ground" - ], - "attack": 202, - "defense": 188, - "stamina": 216, - "height": 2.2, - "weight": 310, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Bite", - "Razor Leaf" - ], - "charged_moves": [ - "Stone Edge", - "Solar Beam", - "Earthquake", - "Sand Tomb" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "390": { - "name": "Chimchar", - "forms": { - "818": { - "name": "Normal", - "proto": "CHIMCHAR_NORMAL", - "evolutions": [ - { - "pokemon": 391, - "form": 821 - } - ] - }, - "819": { - "name": "Shadow", - "proto": "CHIMCHAR_SHADOW", - "evolutions": [ - { - "pokemon": 391, - "form": 822 - } - ] - }, - "820": { - "name": "Purified", - "proto": "CHIMCHAR_PURIFIED", - "evolutions": [ - { - "pokemon": 391, - "form": 823 - } - ] - } - }, - "default_form_id": 818, - "pokedex_id": 390, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Fire" - ], - "attack": 113, - "defense": 86, - "stamina": 127, - "height": 0.5, - "weight": 6.2, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Ember", - "Scratch" - ], - "charged_moves": [ - "Flame Wheel", - "Flamethrower", - "Flame Charge" - ], - "evolutions": [ - { - "pokemon": 391, - "form": 821 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "391": { - "name": "Monferno", - "forms": { - "821": { - "name": "Normal", - "proto": "MONFERNO_NORMAL", - "evolutions": [ - { - "pokemon": 392, - "form": 824 - } - ] - }, - "822": { - "name": "Shadow", - "proto": "MONFERNO_SHADOW", - "evolutions": [ - { - "pokemon": 392, - "form": 825 - } - ] - }, - "823": { - "name": "Purified", - "proto": "MONFERNO_PURIFIED", - "evolutions": [ - { - "pokemon": 392, - "form": 826 - } - ] - } - }, - "default_form_id": 821, - "pokedex_id": 391, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Fire", - "Fighting" - ], - "attack": 158, - "defense": 105, - "stamina": 162, - "height": 0.9, - "weight": 22, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Ember", - "Rock Smash" - ], - "charged_moves": [ - "Flame Wheel", - "Flamethrower", - "Low Sweep" - ], - "evolutions": [ - { - "pokemon": 392, - "form": 824 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "392": { - "name": "Infernape", - "forms": { - "824": { - "name": "Normal", - "proto": "INFERNAPE_NORMAL" - }, - "825": { - "name": "Shadow", - "proto": "INFERNAPE_SHADOW" - }, - "826": { - "name": "Purified", - "proto": "INFERNAPE_PURIFIED" - } - }, - "default_form_id": 824, - "pokedex_id": 392, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Fire", - "Fighting" - ], - "attack": 222, - "defense": 151, - "stamina": 183, - "height": 1.2, - "weight": 55, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Fire Spin", - "Rock Smash" - ], - "charged_moves": [ - "Solar Beam", - "Flamethrower", - "Close Combat" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "393": { - "name": "Piplup", - "forms": { - "1649": { - "name": "Normal", - "proto": "PIPLUP_NORMAL" - }, - "1650": { - "name": "Shadow", - "proto": "PIPLUP_SHADOW" - }, - "1651": { - "name": "Purified", - "proto": "PIPLUP_PURIFIED" - } - }, - "default_form_id": 1649, - "pokedex_id": 393, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water" - ], - "attack": 112, - "defense": 102, - "stamina": 142, - "height": 0.4, - "weight": 5.2, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Bubble", - "Pound" - ], - "charged_moves": [ - "Bubble Beam", - "Drill Peck", - "Icy Wind" - ], - "evolutions": [ - { - "pokemon": 394 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "394": { - "name": "Prinplup", - "forms": { - "1652": { - "name": "Normal", - "proto": "PRINPLUP_NORMAL" - }, - "1653": { - "name": "Shadow", - "proto": "PRINPLUP_SHADOW" - }, - "1654": { - "name": "Purified", - "proto": "PRINPLUP_PURIFIED" - } - }, - "default_form_id": 1652, - "pokedex_id": 394, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water" - ], - "attack": 150, - "defense": 139, - "stamina": 162, - "height": 0.8, - "weight": 23, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Bubble", - "Metal Claw" - ], - "charged_moves": [ - "Bubble Beam", - "Hydro Pump", - "Icy Wind" - ], - "evolutions": [ - { - "pokemon": 395 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "395": { - "name": "Empoleon", - "forms": { - "1655": { - "name": "Normal", - "proto": "EMPOLEON_NORMAL" - }, - "1656": { - "name": "Shadow", - "proto": "EMPOLEON_SHADOW" - }, - "1657": { - "name": "Purified", - "proto": "EMPOLEON_PURIFIED" - } - }, - "default_form_id": 1655, - "pokedex_id": 395, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water", - "Steel" - ], - "attack": 210, - "defense": 186, - "stamina": 197, - "height": 1.7, - "weight": 84.5, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Waterfall", - "Metal Claw" - ], - "charged_moves": [ - "Hydro Pump", - "Blizzard", - "Flash Cannon", - "Drill Peck" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "396": { - "name": "Starly", - "forms": { - "1658": { - "name": "Normal", - "proto": "STARLY_NORMAL", - "evolutions": [ - { - "pokemon": 397, - "form": 1661 - } - ] - }, - "1659": { - "name": "Shadow", - "proto": "STARLY_SHADOW", - "evolutions": [ - { - "pokemon": 397, - "form": 1662 - } - ] - }, - "1660": { - "name": "Purified", - "proto": "STARLY_PURIFIED", - "evolutions": [ - { - "pokemon": 397, - "form": 1663 - } - ] - } - }, - "default_form_id": 1658, - "pokedex_id": 396, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal", - "Flying" - ], - "attack": 101, - "defense": 58, - "stamina": 120, - "height": 0.3, - "weight": 2, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Quick Attack" - ], - "charged_moves": [ - "Aerial Ace", - "Brave Bird" - ], - "evolutions": [ - { - "pokemon": 397, - "form": 1661 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "397": { - "name": "Staravia", - "forms": { - "1661": { - "name": "Normal", - "proto": "STARAVIA_NORMAL", - "evolutions": [ - { - "pokemon": 398, - "form": 1664 - } - ] - }, - "1662": { - "name": "Shadow", - "proto": "STARAVIA_SHADOW", - "evolutions": [ - { - "pokemon": 398, - "form": 1665 - } - ] - }, - "1663": { - "name": "Purified", - "proto": "STARAVIA_PURIFIED", - "evolutions": [ - { - "pokemon": 398, - "form": 1666 - } - ] - } - }, - "default_form_id": 1661, - "pokedex_id": 397, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal", - "Flying" - ], - "attack": 142, - "defense": 94, - "stamina": 146, - "height": 0.6, - "weight": 15.5, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Wing Attack", - "Quick Attack" - ], - "charged_moves": [ - "Aerial Ace", - "Brave Bird", - "Heat Wave" - ], - "evolutions": [ - { - "pokemon": 398, - "form": 1664 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "398": { - "name": "Staraptor", - "forms": { - "1664": { - "name": "Normal", - "proto": "STARAPTOR_NORMAL" - }, - "1665": { - "name": "Shadow", - "proto": "STARAPTOR_SHADOW" - }, - "1666": { - "name": "Purified", - "proto": "STARAPTOR_PURIFIED" - } - }, - "default_form_id": 1664, - "pokedex_id": 398, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal", - "Flying" - ], - "attack": 234, - "defense": 140, - "stamina": 198, - "height": 1.2, - "weight": 24.9, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Wing Attack", - "Quick Attack" - ], - "charged_moves": [ - "Brave Bird", - "Heat Wave", - "Close Combat" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "399": { - "name": "Bidoof", - "forms": { - "1667": { - "name": "Normal", - "proto": "BIDOOF_NORMAL", - "evolutions": [ - { - "pokemon": 400, - "form": 1670 - } - ] - }, - "1668": { - "name": "Shadow", - "proto": "BIDOOF_SHADOW", - "evolutions": [ - { - "pokemon": 400, - "form": 1671 - } - ] - }, - "1669": { - "name": "Purified", - "proto": "BIDOOF_PURIFIED", - "evolutions": [ - { - "pokemon": 400, - "form": 1672 - } - ] - } - }, - "default_form_id": 1667, - "pokedex_id": 399, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 80, - "defense": 73, - "stamina": 153, - "height": 0.5, - "weight": 20, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Take Down" - ], - "charged_moves": [ - "Hyper Fang", - "Crunch", - "Grass Knot" - ], - "evolutions": [ - { - "pokemon": 400, - "form": 1670 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "400": { - "name": "Bibarel", - "forms": { - "1670": { - "name": "Normal", - "proto": "BIBAREL_NORMAL" - }, - "1671": { - "name": "Shadow", - "proto": "BIBAREL_SHADOW" - }, - "1672": { - "name": "Purified", - "proto": "BIBAREL_PURIFIED" - } - }, - "default_form_id": 1670, - "pokedex_id": 400, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal", - "Water" - ], - "attack": 162, - "defense": 119, - "stamina": 188, - "height": 1, - "weight": 31.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Take Down" - ], - "charged_moves": [ - "Hyper Fang", - "Hyper Beam", - "Surf" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "401": { - "name": "Kricketot", - "forms": { - "1673": { - "name": "Normal", - "proto": "KRICKETOT_NORMAL" - }, - "1674": { - "name": "Shadow", - "proto": "KRICKETOT_SHADOW" - }, - "1675": { - "name": "Purified", - "proto": "KRICKETOT_PURIFIED" - } - }, - "default_form_id": 1673, - "pokedex_id": 401, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Bug" - ], - "attack": 45, - "defense": 74, - "stamina": 114, - "height": 0.3, - "weight": 2.2, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Struggle Bug", - "Bug Bite" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 402 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "402": { - "name": "Kricketune", - "forms": { - "1676": { - "name": "Normal", - "proto": "KRICKETUNE_NORMAL" - }, - "1677": { - "name": "Shadow", - "proto": "KRICKETUNE_SHADOW" - }, - "1678": { - "name": "Purified", - "proto": "KRICKETUNE_PURIFIED" - } - }, - "default_form_id": 1676, - "pokedex_id": 402, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Bug" - ], - "attack": 160, - "defense": 100, - "stamina": 184, - "height": 1, - "weight": 25.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Struggle Bug", - "Fury Cutter" - ], - "charged_moves": [ - "Bug Buzz", - "X Scissor", - "Aerial Ace" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "403": { - "name": "Shinx", - "forms": { - "1679": { - "name": "Normal", - "proto": "SHINX_NORMAL" - }, - "1680": { - "name": "Shadow", - "proto": "SHINX_SHADOW" - }, - "1681": { - "name": "Purified", - "proto": "SHINX_PURIFIED" - } - }, - "default_form_id": 1679, - "pokedex_id": 403, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Electric" - ], - "attack": 117, - "defense": 64, - "stamina": 128, - "height": 0.5, - "weight": 9.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Spark" - ], - "charged_moves": [ - "Discharge", - "Thunderbolt", - "Swift" - ], - "evolutions": [ - { - "pokemon": 404 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "404": { - "name": "Luxio", - "forms": { - "1682": { - "name": "Normal", - "proto": "LUXIO_NORMAL" - }, - "1683": { - "name": "Shadow", - "proto": "LUXIO_SHADOW" - }, - "1684": { - "name": "Purified", - "proto": "LUXIO_PURIFIED" - } - }, - "default_form_id": 1682, - "pokedex_id": 404, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Electric" - ], - "attack": 159, - "defense": 95, - "stamina": 155, - "height": 0.9, - "weight": 30.5, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Spark", - "Bite" - ], - "charged_moves": [ - "Thunderbolt", - "Wild Charge", - "Crunch" - ], - "evolutions": [ - { - "pokemon": 405 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "405": { - "name": "Luxray", - "forms": { - "1685": { - "name": "Normal", - "proto": "LUXRAY_NORMAL" - }, - "1686": { - "name": "Shadow", - "proto": "LUXRAY_SHADOW" - }, - "1687": { - "name": "Purified", - "proto": "LUXRAY_PURIFIED" - } - }, - "default_form_id": 1685, - "pokedex_id": 405, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Electric" - ], - "attack": 232, - "defense": 156, - "stamina": 190, - "height": 1.4, - "weight": 42, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Spark", - "Snarl", - "Hidden Power" - ], - "charged_moves": [ - "Hyper Beam", - "Wild Charge", - "Crunch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "406": { - "name": "Budew", - "forms": { - "1688": { - "name": "Normal", - "proto": "BUDEW_NORMAL" - }, - "1689": { - "name": "Shadow", - "proto": "BUDEW_SHADOW" - }, - "1690": { - "name": "Purified", - "proto": "BUDEW_PURIFIED" - } - }, - "default_form_id": 1688, - "pokedex_id": 406, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass", - "Poison" - ], - "attack": 91, - "defense": 109, - "stamina": 120, - "height": 0.2, - "weight": 1.2, - "flee_rate": 0.04, - "capture_rate": 0.1, - "quick_moves": [ - "Hidden Power", - "Razor Leaf" - ], - "charged_moves": [ - "Energy Ball", - "Grass Knot" - ], - "evolutions": [ - { - "pokemon": 315 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "407": { - "name": "Roserade", - "forms": { - "1691": { - "name": "Normal", - "proto": "ROSERADE_NORMAL" - }, - "1692": { - "name": "Shadow", - "proto": "ROSERADE_SHADOW" - }, - "1693": { - "name": "Purified", - "proto": "ROSERADE_PURIFIED" - } - }, - "default_form_id": 1691, - "pokedex_id": 407, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass", - "Poison" - ], - "attack": 243, - "defense": 185, - "stamina": 155, - "height": 0.9, - "weight": 14.5, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Poison Jab", - "Razor Leaf" - ], - "charged_moves": [ - "Solar Beam", - "Sludge Bomb", - "Dazzling Gleam", - "Grass Knot", - "Leaf Storm" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "408": { - "name": "Cranidos", - "forms": { - "1694": { - "name": "Normal", - "proto": "CRANIDOS_NORMAL" - }, - "1695": { - "name": "Shadow", - "proto": "CRANIDOS_SHADOW" - }, - "1696": { - "name": "Purified", - "proto": "CRANIDOS_PURIFIED" - } - }, - "default_form_id": 1694, - "pokedex_id": 408, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Rock" - ], - "attack": 218, - "defense": 71, - "stamina": 167, - "height": 0.9, - "weight": 31.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Zen Headbutt", - "Take Down" - ], - "charged_moves": [ - "Rock Tomb", - "Ancient Power", - "Bulldoze" - ], - "evolutions": [ - { - "pokemon": 409 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "409": { - "name": "Rampardos", - "forms": { - "1697": { - "name": "Normal", - "proto": "RAMPARDOS_NORMAL" - }, - "1698": { - "name": "Shadow", - "proto": "RAMPARDOS_SHADOW" - }, - "1699": { - "name": "Purified", - "proto": "RAMPARDOS_PURIFIED" - } - }, - "default_form_id": 1697, - "pokedex_id": 409, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Rock" - ], - "attack": 295, - "defense": 109, - "stamina": 219, - "height": 1.6, - "weight": 102.5, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Zen Headbutt", - "Smack Down" - ], - "charged_moves": [ - "Rock Slide", - "Outrage", - "Flamethrower" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "410": { - "name": "Shieldon", - "forms": { - "1700": { - "name": "Normal", - "proto": "SHIELDON_NORMAL" - }, - "1701": { - "name": "Shadow", - "proto": "SHIELDON_SHADOW" - }, - "1702": { - "name": "Purified", - "proto": "SHIELDON_PURIFIED" - } - }, - "default_form_id": 1700, - "pokedex_id": 410, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Rock", - "Steel" - ], - "attack": 76, - "defense": 195, - "stamina": 102, - "height": 0.5, - "weight": 57, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Iron Tail" - ], - "charged_moves": [ - "Rock Tomb", - "Ancient Power", - "Heavy Slam" - ], - "evolutions": [ - { - "pokemon": 411 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "411": { - "name": "Bastiodon", - "forms": { - "1703": { - "name": "Normal", - "proto": "BASTIODON_NORMAL" - }, - "1704": { - "name": "Shadow", - "proto": "BASTIODON_SHADOW" - }, - "1705": { - "name": "Purified", - "proto": "BASTIODON_PURIFIED" - } - }, - "default_form_id": 1703, - "pokedex_id": 411, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Rock", - "Steel" - ], - "attack": 94, - "defense": 286, - "stamina": 155, - "height": 1.3, - "weight": 149.5, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Smack Down", - "Iron Tail" - ], - "charged_moves": [ - "Stone Edge", - "Flamethrower", - "Flash Cannon" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "412": { - "name": "Burmy", - "forms": { - "118": { - "name": "Plant", - "proto": "BURMY_PLANT", - "evolutions": [ - { - "pokemon": 413, - "form": 87, - "gender_requirement": 2 - }, - { - "pokemon": 414, - "gender_requirement": 1 - } - ] - }, - "119": { - "name": "Sandy", - "proto": "BURMY_SANDY", - "evolutions": [ - { - "pokemon": 413, - "form": 88, - "gender_requirement": 2 - }, - { - "pokemon": 414, - "gender_requirement": 1 - } - ] - }, - "120": { - "name": "Trash", - "proto": "BURMY_TRASH", - "evolutions": [ - { - "pokemon": 413, - "form": 89, - "gender_requirement": 2 - }, - { - "pokemon": 414, - "gender_requirement": 1 - } - ] - }, - "1706": { - "name": "Normal", - "proto": "BURMY_NORMAL" - }, - "1707": { - "name": "Shadow", - "proto": "BURMY_SHADOW" - }, - "1708": { - "name": "Purified", - "proto": "BURMY_PURIFIED" - } - }, - "default_form_id": 118, - "pokedex_id": 412, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Bug" - ], - "attack": 53, - "defense": 83, - "stamina": 120, - "height": 0.2, - "weight": 3.4, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Bug Bite" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 413, - "form": 87, - "gender_requirement": 2 - }, - { - "pokemon": 414, - "gender_requirement": 1 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "413": { - "name": "Wormadam", - "forms": { - "87": { - "name": "Plant", - "proto": "WORMADAM_PLANT", - "quick_moves": [ - "Confusion", - "Bug Bite" - ], - "charged_moves": [ - "Psybeam", - "Energy Ball", - "Bug Buzz" - ] - }, - "88": { - "name": "Sandy", - "proto": "WORMADAM_SANDY", - "quick_moves": [ - "Confusion", - "Bug Bite" - ], - "charged_moves": [ - "Psybeam", - "Bulldoze", - "Bug Buzz" - ], - "types": [ - "Bug", - "Ground" - ] - }, - "89": { - "name": "Trash", - "proto": "WORMADAM_TRASH", - "attack": 127, - "defense": 175, - "stamina": 155, - "quick_moves": [ - "Confusion", - "Bug Bite" - ], - "charged_moves": [ - "Psybeam", - "Iron Head", - "Bug Buzz" - ], - "types": [ - "Bug", - "Steel" - ] - }, - "1709": { - "name": "Normal", - "proto": "WORMADAM_NORMAL" - }, - "1710": { - "name": "Shadow", - "proto": "WORMADAM_SHADOW" - }, - "1711": { - "name": "Purified", - "proto": "WORMADAM_PURIFIED" - } - }, - "default_form_id": 87, - "pokedex_id": 413, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Bug", - "Grass" - ], - "attack": 141, - "defense": 180, - "stamina": 155, - "height": 0.5, - "weight": 6.5, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Tackle", - "Bug Bite" - ], - "charged_moves": [ - "Struggle" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "414": { - "name": "Mothim", - "forms": { - "1712": { - "name": "Normal", - "proto": "MOTHIM_NORMAL" - }, - "1713": { - "name": "Shadow", - "proto": "MOTHIM_SHADOW" - }, - "1714": { - "name": "Purified", - "proto": "MOTHIM_PURIFIED" - } - }, - "default_form_id": 1712, - "pokedex_id": 414, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Bug", - "Flying" - ], - "attack": 185, - "defense": 98, - "stamina": 172, - "height": 0.9, - "weight": 23.3, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Air Slash", - "Bug Bite" - ], - "charged_moves": [ - "Psybeam", - "Aerial Ace", - "Bug Buzz" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "415": { - "name": "Combee", - "forms": { - "1715": { - "name": "Normal", - "proto": "COMBEE_NORMAL" - }, - "1716": { - "name": "Shadow", - "proto": "COMBEE_SHADOW" - }, - "1717": { - "name": "Purified", - "proto": "COMBEE_PURIFIED" - } - }, - "default_form_id": 1715, - "pokedex_id": 415, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Bug", - "Flying" - ], - "attack": 59, - "defense": 83, - "stamina": 102, - "height": 0.3, - "weight": 5.5, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Bug Bite" - ], - "charged_moves": [ - "Bug Buzz" - ], - "evolutions": [ - { - "pokemon": 416, - "gender_requirement": 2 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "416": { - "name": "Vespiquen", - "forms": { - "1718": { - "name": "Normal", - "proto": "VESPIQUEN_NORMAL" - }, - "1719": { - "name": "Shadow", - "proto": "VESPIQUEN_SHADOW" - }, - "1720": { - "name": "Purified", - "proto": "VESPIQUEN_PURIFIED" - } - }, - "default_form_id": 1718, - "pokedex_id": 416, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Bug", - "Flying" - ], - "attack": 149, - "defense": 190, - "stamina": 172, - "height": 1.2, - "weight": 38.5, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Bug Bite", - "Poison Sting", - "Fury Cutter", - "Air Slash" - ], - "charged_moves": [ - "Bug Buzz", - "Power Gem", - "X Scissor", - "Fell Stinger", - "Signal Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "417": { - "name": "Pachirisu", - "forms": { - "1721": { - "name": "Normal", - "proto": "PACHIRISU_NORMAL" - }, - "1722": { - "name": "Shadow", - "proto": "PACHIRISU_SHADOW" - }, - "1723": { - "name": "Purified", - "proto": "PACHIRISU_PURIFIED" - } - }, - "default_form_id": 1721, - "pokedex_id": 417, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Electric" - ], - "attack": 94, - "defense": 172, - "stamina": 155, - "height": 0.4, - "weight": 3.9, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Spark", - "Volt Switch" - ], - "charged_moves": [ - "Thunder", - "Thunderbolt", - "Thunder Punch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "418": { - "name": "Buizel", - "forms": { - "1724": { - "name": "Normal", - "proto": "BUIZEL_NORMAL" - }, - "1725": { - "name": "Shadow", - "proto": "BUIZEL_SHADOW" - }, - "1726": { - "name": "Purified", - "proto": "BUIZEL_PURIFIED" - } - }, - "default_form_id": 1724, - "pokedex_id": 418, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water" - ], - "attack": 132, - "defense": 67, - "stamina": 146, - "height": 0.7, - "weight": 29.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Water Gun", - "Quick Attack" - ], - "charged_moves": [ - "Aqua Jet", - "Water Pulse", - "Swift" - ], - "evolutions": [ - { - "pokemon": 419 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "419": { - "name": "Floatzel", - "forms": { - "1727": { - "name": "Normal", - "proto": "FLOATZEL_NORMAL" - }, - "1728": { - "name": "Shadow", - "proto": "FLOATZEL_SHADOW" - }, - "1729": { - "name": "Purified", - "proto": "FLOATZEL_PURIFIED" - } - }, - "default_form_id": 1727, - "pokedex_id": 419, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water" - ], - "attack": 221, - "defense": 114, - "stamina": 198, - "height": 1.1, - "weight": 33.5, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Waterfall" - ], - "charged_moves": [ - "Aqua Jet", - "Hydro Pump", - "Swift" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "420": { - "name": "Cherubi", - "forms": { - "1730": { - "name": "Normal", - "proto": "CHERUBI_NORMAL" - }, - "1731": { - "name": "Shadow", - "proto": "CHERUBI_SHADOW" - }, - "1732": { - "name": "Purified", - "proto": "CHERUBI_PURIFIED" - } - }, - "default_form_id": 1730, - "pokedex_id": 420, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass" - ], - "attack": 108, - "defense": 92, - "stamina": 128, - "height": 0.4, - "weight": 3.3, - "flee_rate": 0.09, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Bullet Seed" - ], - "charged_moves": [ - "Dazzling Gleam", - "Petal Blizzard", - "Seed Bomb" - ], - "evolutions": [ - { - "pokemon": 421, - "form": 94 - }, - { - "pokemon": 421, - "form": 95 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "421": { - "name": "Cherrim", - "forms": { - "94": { - "name": "Overcast", - "proto": "CHERRIM_OVERCAST" - }, - "95": { - "name": "Sunny", - "proto": "CHERRIM_SUNNY", - "charged_moves": [ - "Dazzling Gleam", - "Hyper Beam", - "Solar Beam", - "Weather Ball" - ] - }, - "1733": { - "name": "Normal", - "proto": "CHERRIM_NORMAL" - }, - "1734": { - "name": "Shadow", - "proto": "CHERRIM_SHADOW" - }, - "1735": { - "name": "Purified", - "proto": "CHERRIM_PURIFIED" - } - }, - "default_form_id": 94, - "pokedex_id": 421, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass" - ], - "attack": 170, - "defense": 153, - "stamina": 172, - "height": 0.5, - "weight": 9.3, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Razor Leaf", - "Bullet Seed" - ], - "charged_moves": [ - "Dazzling Gleam", - "Hyper Beam", - "Solar Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "422": { - "name": "Shellos", - "forms": { - "96": { - "name": "West Sea", - "proto": "SHELLOS_WEST_SEA", - "evolutions": [ - { - "pokemon": 423, - "form": 98 - } - ] - }, - "97": { - "name": "East Sea", - "proto": "SHELLOS_EAST_SEA", - "evolutions": [ - { - "pokemon": 423, - "form": 99 - } - ] - }, - "1736": { - "name": "Normal", - "proto": "SHELLOS_NORMAL" - }, - "1737": { - "name": "Shadow", - "proto": "SHELLOS_SHADOW" - }, - "1738": { - "name": "Purified", - "proto": "SHELLOS_PURIFIED" - } - }, - "default_form_id": 96, - "pokedex_id": 422, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water" - ], - "attack": 103, - "defense": 105, - "stamina": 183, - "height": 0.3, - "weight": 6.3, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Mud Slap", - "Hidden Power" - ], - "charged_moves": [ - "Water Pulse", - "Mud Bomb", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 423, - "form": 99 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "423": { - "name": "Gastrodon", - "forms": { - "98": { - "name": "West Sea", - "proto": "GASTRODON_WEST_SEA" - }, - "99": { - "name": "East Sea", - "proto": "GASTRODON_EAST_SEA" - }, - "1739": { - "name": "Normal", - "proto": "GASTRODON_NORMAL" - }, - "1740": { - "name": "Shadow", - "proto": "GASTRODON_SHADOW" - }, - "1741": { - "name": "Purified", - "proto": "GASTRODON_PURIFIED" - } - }, - "default_form_id": 98, - "pokedex_id": 423, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water", - "Ground" - ], - "attack": 169, - "defense": 143, - "stamina": 244, - "height": 0.9, - "weight": 29.9, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Mud Slap", - "Hidden Power" - ], - "charged_moves": [ - "Water Pulse", - "Earth Power", - "Body Slam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "424": { - "name": "Ambipom", - "forms": { - "1742": { - "name": "Normal", - "proto": "AMBIPOM_NORMAL" - }, - "1743": { - "name": "Shadow", - "proto": "AMBIPOM_SHADOW" - }, - "1744": { - "name": "Purified", - "proto": "AMBIPOM_PURIFIED" - } - }, - "default_form_id": 1742, - "pokedex_id": 424, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 205, - "defense": 143, - "stamina": 181, - "height": 1.2, - "weight": 20.3, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Scratch", - "Astonish" - ], - "charged_moves": [ - "Low Sweep", - "Hyper Beam", - "Aerial Ace" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "425": { - "name": "Drifloon", - "forms": { - "1745": { - "name": "Normal", - "proto": "DRIFLOON_NORMAL" - }, - "1746": { - "name": "Shadow", - "proto": "DRIFLOON_SHADOW" - }, - "1747": { - "name": "Purified", - "proto": "DRIFLOON_PURIFIED" - } - }, - "default_form_id": 1745, - "pokedex_id": 425, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ghost", - "Flying" - ], - "attack": 117, - "defense": 80, - "stamina": 207, - "height": 0.4, - "weight": 1.2, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Hex", - "Astonish" - ], - "charged_moves": [ - "Ominous Wind", - "Icy Wind", - "Shadow Ball" - ], - "evolutions": [ - { - "pokemon": 426 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "426": { - "name": "Drifblim", - "forms": { - "1748": { - "name": "Normal", - "proto": "DRIFBLIM_NORMAL" - }, - "1749": { - "name": "Shadow", - "proto": "DRIFBLIM_SHADOW" - }, - "1750": { - "name": "Purified", - "proto": "DRIFBLIM_PURIFIED" - } - }, - "default_form_id": 1748, - "pokedex_id": 426, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ghost", - "Flying" - ], - "attack": 180, - "defense": 102, - "stamina": 312, - "height": 1.2, - "weight": 15, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Hex", - "Astonish" - ], - "charged_moves": [ - "Ominous Wind", - "Icy Wind", - "Shadow Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "427": { - "name": "Buneary", - "forms": { - "1751": { - "name": "Normal", - "proto": "BUNEARY_NORMAL" - }, - "1752": { - "name": "Shadow", - "proto": "BUNEARY_SHADOW" - }, - "1753": { - "name": "Purified", - "proto": "BUNEARY_PURIFIED" - } - }, - "default_form_id": 1751, - "pokedex_id": 427, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 130, - "defense": 105, - "stamina": 146, - "height": 0.4, - "weight": 5.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Pound", - "Quick Attack" - ], - "charged_moves": [ - "Fire Punch", - "Swift" - ], - "evolutions": [ - { - "pokemon": 428 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "428": { - "name": "Lopunny", - "forms": { - "1754": { - "name": "Normal", - "proto": "LOPUNNY_NORMAL" - }, - "1755": { - "name": "Shadow", - "proto": "LOPUNNY_SHADOW" - }, - "1756": { - "name": "Purified", - "proto": "LOPUNNY_PURIFIED" - } - }, - "default_form_id": 1754, - "pokedex_id": 428, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 156, - "defense": 194, - "stamina": 163, - "height": 1.2, - "weight": 33.3, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Pound", - "Low Kick" - ], - "charged_moves": [ - "Fire Punch", - "Hyper Beam", - "Focus Blast" - ], - "temp_evolutions": { - "1": { - "attack": 282, - "defense": 214, - "stamina": 163, - "height": 1.3, - "weight": 28.3, - "types": [ - "Normal", - "Fighting" - ] - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "429": { - "name": "Mismagius", - "forms": { - "722": { - "name": "Normal", - "proto": "MISMAGIUS_NORMAL" - }, - "723": { - "name": "Shadow", - "proto": "MISMAGIUS_SHADOW" - }, - "724": { - "name": "Purified", - "proto": "MISMAGIUS_PURIFIED" - } - }, - "default_form_id": 722, - "pokedex_id": 429, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ghost" - ], - "attack": 211, - "defense": 187, - "stamina": 155, - "height": 0.9, - "weight": 4.4, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Sucker Punch", - "Hex" - ], - "charged_moves": [ - "Shadow Ball", - "Dark Pulse", - "Dazzling Gleam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "430": { - "name": "Honchkrow", - "forms": { - "858": { - "name": "Normal", - "proto": "HONCHKROW_NORMAL" - }, - "859": { - "name": "Shadow", - "proto": "HONCHKROW_SHADOW" - }, - "860": { - "name": "Purified", - "proto": "HONCHKROW_PURIFIED" - } - }, - "default_form_id": 858, - "pokedex_id": 430, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Dark", - "Flying" - ], - "attack": 243, - "defense": 103, - "stamina": 225, - "height": 0.9, - "weight": 27.3, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Peck", - "Snarl" - ], - "charged_moves": [ - "Brave Bird", - "Psychic", - "Dark Pulse", - "Sky Attack" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "431": { - "name": "Glameow", - "forms": { - "1757": { - "name": "Normal", - "proto": "GLAMEOW_NORMAL" - }, - "1758": { - "name": "Shadow", - "proto": "GLAMEOW_SHADOW" - }, - "1759": { - "name": "Purified", - "proto": "GLAMEOW_PURIFIED" - } - }, - "default_form_id": 1757, - "pokedex_id": 431, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 109, - "defense": 82, - "stamina": 135, - "height": 0.5, - "weight": 3.9, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Scratch", - "Quick Attack" - ], - "charged_moves": [ - "Play Rough", - "Thunderbolt", - "Aerial Ace" - ], - "evolutions": [ - { - "pokemon": 432 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "432": { - "name": "Purugly", - "forms": { - "1760": { - "name": "Normal", - "proto": "PURUGLY_NORMAL" - }, - "1761": { - "name": "Shadow", - "proto": "PURUGLY_SHADOW" - }, - "1762": { - "name": "Purified", - "proto": "PURUGLY_PURIFIED" - } - }, - "default_form_id": 1760, - "pokedex_id": 432, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 172, - "defense": 133, - "stamina": 174, - "height": 1, - "weight": 43.8, - "flee_rate": 0.08, - "capture_rate": 0.15, - "quick_moves": [ - "Scratch", - "Shadow Claw" - ], - "charged_moves": [ - "Play Rough", - "Thunder", - "Aerial Ace" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "433": { - "name": "Chingling", - "forms": { - "1763": { - "name": "Normal", - "proto": "CHINGLING_NORMAL" - }, - "1764": { - "name": "Shadow", - "proto": "CHINGLING_SHADOW" - }, - "1765": { - "name": "Purified", - "proto": "CHINGLING_PURIFIED" - } - }, - "default_form_id": 1763, - "pokedex_id": 433, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Psychic" - ], - "attack": 114, - "defense": 94, - "stamina": 128, - "height": 0.2, - "weight": 0.6, - "flee_rate": 0.04, - "capture_rate": 0.1, - "quick_moves": [ - "Zen Headbutt", - "Astonish" - ], - "charged_moves": [ - "Wrap", - "Shadow Ball", - "Psyshock" - ], - "evolutions": [ - { - "pokemon": 358 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "434": { - "name": "Stunky", - "forms": { - "791": { - "name": "Normal", - "proto": "STUNKY_NORMAL", - "evolutions": [ - { - "pokemon": 435, - "form": 794 - } - ] - }, - "792": { - "name": "Shadow", - "proto": "STUNKY_SHADOW", - "evolutions": [ - { - "pokemon": 435, - "form": 795 - } - ] - }, - "793": { - "name": "Purified", - "proto": "STUNKY_PURIFIED", - "evolutions": [ - { - "pokemon": 435, - "form": 796 - } - ] - } - }, - "default_form_id": 791, - "pokedex_id": 434, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Poison", - "Dark" - ], - "attack": 121, - "defense": 90, - "stamina": 160, - "height": 0.4, - "weight": 19.2, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Scratch", - "Bite" - ], - "charged_moves": [ - "Crunch", - "Flamethrower", - "Sludge Bomb" - ], - "evolutions": [ - { - "pokemon": 435, - "form": 794 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "435": { - "name": "Skuntank", - "forms": { - "794": { - "name": "Normal", - "proto": "SKUNTANK_NORMAL" - }, - "795": { - "name": "Shadow", - "proto": "SKUNTANK_SHADOW" - }, - "796": { - "name": "Purified", - "proto": "SKUNTANK_PURIFIED" - } - }, - "default_form_id": 794, - "pokedex_id": 435, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Poison", - "Dark" - ], - "attack": 184, - "defense": 132, - "stamina": 230, - "height": 1, - "weight": 38, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Poison Jab", - "Bite" - ], - "charged_moves": [ - "Crunch", - "Flamethrower", - "Sludge Bomb" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "436": { - "name": "Bronzor", - "forms": { - "1766": { - "name": "Normal", - "proto": "BRONZOR_NORMAL" - }, - "1767": { - "name": "Shadow", - "proto": "BRONZOR_SHADOW" - }, - "1768": { - "name": "Purified", - "proto": "BRONZOR_PURIFIED" - } - }, - "default_form_id": 1766, - "pokedex_id": 436, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Steel", - "Psychic" - ], - "attack": 43, - "defense": 154, - "stamina": 149, - "height": 0.5, - "weight": 60.5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Confusion" - ], - "charged_moves": [ - "Gyro Ball", - "Psyshock", - "Heavy Slam", - "Payback" - ], - "evolutions": [ - { - "pokemon": 437 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "437": { - "name": "Bronzong", - "forms": { - "1769": { - "name": "Normal", - "proto": "BRONZONG_NORMAL" - }, - "1770": { - "name": "Shadow", - "proto": "BRONZONG_SHADOW" - }, - "1771": { - "name": "Purified", - "proto": "BRONZONG_PURIFIED" - } - }, - "default_form_id": 1769, - "pokedex_id": 437, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Steel", - "Psychic" - ], - "attack": 161, - "defense": 213, - "stamina": 167, - "height": 1.3, - "weight": 187, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Feint Attack", - "Confusion" - ], - "charged_moves": [ - "Flash Cannon", - "Psychic", - "Heavy Slam", - "Bulldoze", - "Psyshock", - "Payback" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "438": { - "name": "Bonsly", - "forms": { - "1772": { - "name": "Normal", - "proto": "BONSLY_NORMAL" - }, - "1773": { - "name": "Shadow", - "proto": "BONSLY_SHADOW" - }, - "1774": { - "name": "Purified", - "proto": "BONSLY_PURIFIED" - } - }, - "default_form_id": 1772, - "pokedex_id": 438, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Rock" - ], - "attack": 124, - "defense": 133, - "stamina": 137, - "height": 0.5, - "weight": 15, - "flee_rate": 0.04, - "capture_rate": 0.1, - "quick_moves": [ - "Rock Throw", - "Counter" - ], - "charged_moves": [ - "Rock Tomb", - "Earthquake", - "Rock Slide" - ], - "evolutions": [ - { - "pokemon": 185 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "439": { - "name": "Mime Jr", - "forms": { - "1775": { - "name": "Normal", - "proto": "MIME_JR_NORMAL" - }, - "1776": { - "name": "Shadow", - "proto": "MIME_JR_SHADOW" - }, - "1777": { - "name": "Purified", - "proto": "MIME_JR_PURIFIED" - } - }, - "default_form_id": 1775, - "pokedex_id": 439, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Psychic", - "Fairy" - ], - "attack": 125, - "defense": 142, - "stamina": 85, - "height": 0.6, - "weight": 13, - "flee_rate": 0.04, - "capture_rate": 0.1, - "quick_moves": [ - "Confusion", - "Pound" - ], - "charged_moves": [ - "Psybeam", - "Psychic", - "Psyshock" - ], - "evolutions": [ - { - "pokemon": 122 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "440": { - "name": "Happiny", - "forms": { - "1778": { - "name": "Normal", - "proto": "HAPPINY_NORMAL" - }, - "1779": { - "name": "Shadow", - "proto": "HAPPINY_SHADOW" - }, - "1780": { - "name": "Purified", - "proto": "HAPPINY_PURIFIED" - } - }, - "default_form_id": 1778, - "pokedex_id": 440, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 25, - "defense": 77, - "stamina": 225, - "height": 0.6, - "weight": 24.4, - "flee_rate": 0.04, - "capture_rate": 0.1, - "quick_moves": [ - "Pound", - "Zen Headbutt" - ], - "charged_moves": [ - "Psychic" - ], - "evolutions": [ - { - "pokemon": 113 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "441": { - "name": "Chatot", - "forms": { - "1781": { - "name": "Normal", - "proto": "CHATOT_NORMAL" - }, - "1782": { - "name": "Shadow", - "proto": "CHATOT_SHADOW" - }, - "1783": { - "name": "Purified", - "proto": "CHATOT_PURIFIED" - } - }, - "default_form_id": 1781, - "pokedex_id": 441, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal", - "Flying" - ], - "attack": 183, - "defense": 91, - "stamina": 183, - "height": 0.5, - "weight": 1.9, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Peck", - "Steel Wing" - ], - "charged_moves": [ - "Night Shade", - "Sky Attack", - "Heat Wave" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "442": { - "name": "Spiritomb", - "forms": { - "1784": { - "name": "Normal", - "proto": "SPIRITOMB_NORMAL" - }, - "1785": { - "name": "Shadow", - "proto": "SPIRITOMB_SHADOW" - }, - "1786": { - "name": "Purified", - "proto": "SPIRITOMB_PURIFIED" - } - }, - "default_form_id": 1784, - "pokedex_id": 442, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ghost", - "Dark" - ], - "attack": 169, - "defense": 199, - "stamina": 137, - "height": 1, - "weight": 108, - "flee_rate": 0.04, - "capture_rate": 0.1, - "quick_moves": [ - "Feint Attack", - "Sucker Punch" - ], - "charged_moves": [ - "Shadow Sneak", - "Ominous Wind", - "Shadow Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "443": { - "name": "Gible", - "forms": { - "861": { - "name": "Normal", - "proto": "GIBLE_NORMAL", - "evolutions": [ - { - "pokemon": 444, - "form": 864 - } - ] - }, - "862": { - "name": "Shadow", - "proto": "GIBLE_SHADOW", - "evolutions": [ - { - "pokemon": 444, - "form": 865 - } - ] - }, - "863": { - "name": "Purified", - "proto": "GIBLE_PURIFIED", - "evolutions": [ - { - "pokemon": 444, - "form": 866 - } - ] - } - }, - "default_form_id": 861, - "pokedex_id": 443, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Dragon", - "Ground" - ], - "attack": 124, - "defense": 84, - "stamina": 151, - "height": 0.7, - "weight": 20.5, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Take Down", - "Mud Shot" - ], - "charged_moves": [ - "Dig", - "Twister", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 444, - "form": 864 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "444": { - "name": "Gabite", - "forms": { - "864": { - "name": "Normal", - "proto": "GABITE_NORMAL", - "evolutions": [ - { - "pokemon": 445, - "form": 867 - } - ] - }, - "865": { - "name": "Shadow", - "proto": "GABITE_SHADOW", - "evolutions": [ - { - "pokemon": 445, - "form": 868 - } - ] - }, - "866": { - "name": "Purified", - "proto": "GABITE_PURIFIED", - "evolutions": [ - { - "pokemon": 445, - "form": 869 - } - ] - } - }, - "default_form_id": 864, - "pokedex_id": 444, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Dragon", - "Ground" - ], - "attack": 172, - "defense": 125, - "stamina": 169, - "height": 1.4, - "weight": 56, - "flee_rate": 0.06, - "capture_rate": 0.1, - "quick_moves": [ - "Take Down", - "Mud Shot" - ], - "charged_moves": [ - "Dig", - "Twister", - "Flamethrower" - ], - "evolutions": [ - { - "pokemon": 445, - "form": 867 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "445": { - "name": "Garchomp", - "forms": { - "867": { - "name": "Normal", - "proto": "GARCHOMP_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "868": { - "name": "Shadow", - "proto": "GARCHOMP_SHADOW" - }, - "869": { - "name": "Purified", - "proto": "GARCHOMP_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 867, - "pokedex_id": 445, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Dragon", - "Ground" - ], - "attack": 261, - "defense": 193, - "stamina": 239, - "height": 1.9, - "weight": 95, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Dragon Tail", - "Mud Shot" - ], - "charged_moves": [ - "Outrage", - "Earthquake", - "Fire Blast", - "Sand Tomb" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 339, - "defense": 222, - "stamina": 239, - "unreleased": true - } - } - }, - "446": { - "name": "Munchlax", - "forms": { - "1787": { - "name": "Normal", - "proto": "MUNCHLAX_NORMAL" - }, - "1788": { - "name": "Shadow", - "proto": "MUNCHLAX_SHADOW" - }, - "1789": { - "name": "Purified", - "proto": "MUNCHLAX_PURIFIED" - } - }, - "default_form_id": 1787, - "pokedex_id": 446, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 137, - "defense": 117, - "stamina": 286, - "height": 0.6, - "weight": 105, - "flee_rate": 0.04, - "capture_rate": 0.1, - "quick_moves": [ - "Tackle", - "Lick" - ], - "charged_moves": [ - "Gunk Shot", - "Body Slam", - "Bulldoze" - ], - "evolutions": [ - { - "pokemon": 143 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "447": { - "name": "Riolu", - "forms": { - "1790": { - "name": "Normal", - "proto": "RIOLU_NORMAL" - }, - "1791": { - "name": "Shadow", - "proto": "RIOLU_SHADOW" - }, - "1792": { - "name": "Purified", - "proto": "RIOLU_PURIFIED" - } - }, - "default_form_id": 1790, - "pokedex_id": 447, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Fighting" - ], - "attack": 127, - "defense": 78, - "stamina": 120, - "height": 0.7, - "weight": 20.2, - "flee_rate": 0.2, - "quick_moves": [ - "Counter", - "Quick Attack" - ], - "charged_moves": [ - "Brick Break", - "Low Sweep", - "Cross Chop" - ], - "evolutions": [ - { - "pokemon": 448 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "448": { - "name": "Lucario", - "forms": { - "1793": { - "name": "Normal", - "proto": "LUCARIO_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1794": { - "name": "Shadow", - "proto": "LUCARIO_SHADOW" - }, - "1795": { - "name": "Purified", - "proto": "LUCARIO_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1793, - "pokedex_id": 448, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Fighting", - "Steel" - ], - "attack": 236, - "defense": 144, - "stamina": 172, - "height": 1.2, - "weight": 54, - "flee_rate": 0.05, - "capture_rate": 0.1, - "quick_moves": [ - "Counter", - "Bullet Punch" - ], - "charged_moves": [ - "Flash Cannon", - "Shadow Ball", - "Close Combat", - "Power Up", - "Aura Sphere" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 310, - "defense": 175, - "stamina": 172, - "unreleased": true - } - } - }, - "449": { - "name": "Hippopotas", - "forms": { - "888": { - "name": "Normal", - "proto": "HIPPOPOTAS_NORMAL", - "evolutions": [ - { - "pokemon": 450, - "form": 891 - } - ] - }, - "889": { - "name": "Shadow", - "proto": "HIPPOPOTAS_SHADOW", - "evolutions": [ - { - "pokemon": 450, - "form": 892 - } - ] - }, - "890": { - "name": "Purified", - "proto": "HIPPOPOTAS_PURIFIED", - "evolutions": [ - { - "pokemon": 450, - "form": 893 - } - ] - } - }, - "default_form_id": 888, - "pokedex_id": 449, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ground" - ], - "attack": 124, - "defense": 118, - "stamina": 169, - "height": 0.8, - "weight": 49.5, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Tackle", - "Bite" - ], - "charged_moves": [ - "Dig", - "Rock Tomb", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 450, - "form": 891 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "450": { - "name": "Hippowdon", - "forms": { - "891": { - "name": "Normal", - "proto": "HIPPOWDON_NORMAL" - }, - "892": { - "name": "Shadow", - "proto": "HIPPOWDON_SHADOW" - }, - "893": { - "name": "Purified", - "proto": "HIPPOWDON_PURIFIED" - } - }, - "default_form_id": 891, - "pokedex_id": 450, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ground" - ], - "attack": 201, - "defense": 191, - "stamina": 239, - "height": 2, - "weight": 300, - "flee_rate": 0.08, - "capture_rate": 0.15, - "quick_moves": [ - "Fire Fang", - "Bite", - "Thunder Fang", - "Ice Fang" - ], - "charged_moves": [ - "Earthquake", - "Stone Edge", - "Body Slam", - "Earth Power" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "451": { - "name": "Skorupi", - "forms": { - "1796": { - "name": "Normal", - "proto": "SKORUPI_NORMAL", - "evolutions": [ - { - "pokemon": 452, - "form": 1799 - } - ] - }, - "1797": { - "name": "Shadow", - "proto": "SKORUPI_SHADOW", - "evolutions": [ - { - "pokemon": 452, - "form": 1800 - } - ] - }, - "1798": { - "name": "Purified", - "proto": "SKORUPI_PURIFIED", - "evolutions": [ - { - "pokemon": 452, - "form": 1801 - } - ] - } - }, - "default_form_id": 1796, - "pokedex_id": 451, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Poison", - "Bug" - ], - "attack": 93, - "defense": 151, - "stamina": 120, - "height": 0.8, - "weight": 12, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Poison Sting", - "Infestation" - ], - "charged_moves": [ - "Cross Poison", - "Aqua Tail", - "Sludge Bomb" - ], - "evolutions": [ - { - "pokemon": 452, - "form": 1799 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "452": { - "name": "Drapion", - "forms": { - "1799": { - "name": "Normal", - "proto": "DRAPION_NORMAL" - }, - "1800": { - "name": "Shadow", - "proto": "DRAPION_SHADOW" - }, - "1801": { - "name": "Purified", - "proto": "DRAPION_PURIFIED" - } - }, - "default_form_id": 1799, - "pokedex_id": 452, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Poison", - "Dark" - ], - "attack": 180, - "defense": 202, - "stamina": 172, - "height": 1.3, - "weight": 61.5, - "flee_rate": 0.08, - "capture_rate": 0.15, - "quick_moves": [ - "Poison Sting", - "Infestation", - "Bite", - "Ice Fang" - ], - "charged_moves": [ - "Crunch", - "Aqua Tail", - "Sludge Bomb", - "Fell Stinger" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "453": { - "name": "Croagunk", - "forms": { - "1802": { - "name": "Normal", - "proto": "CROAGUNK_NORMAL" - }, - "1803": { - "name": "Shadow", - "proto": "CROAGUNK_SHADOW" - }, - "1804": { - "name": "Purified", - "proto": "CROAGUNK_PURIFIED" - } - }, - "default_form_id": 1802, - "pokedex_id": 453, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Poison", - "Fighting" - ], - "attack": 116, - "defense": 76, - "stamina": 134, - "height": 0.7, - "weight": 23, - "flee_rate": 0.12, - "capture_rate": 0.4, - "quick_moves": [ - "Poison Sting", - "Poison Jab" - ], - "charged_moves": [ - "Brick Break", - "Low Sweep", - "Sludge Bomb" - ], - "evolutions": [ - { - "pokemon": 454 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "454": { - "name": "Toxicroak", - "forms": { - "1805": { - "name": "Normal", - "proto": "TOXICROAK_NORMAL" - }, - "1806": { - "name": "Shadow", - "proto": "TOXICROAK_SHADOW" - }, - "1807": { - "name": "Purified", - "proto": "TOXICROAK_PURIFIED" - } - }, - "default_form_id": 1805, - "pokedex_id": 454, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Poison", - "Fighting" - ], - "attack": 211, - "defense": 133, - "stamina": 195, - "height": 1.3, - "weight": 44.4, - "flee_rate": 0.07, - "capture_rate": 0.15, - "quick_moves": [ - "Poison Jab", - "Counter" - ], - "charged_moves": [ - "Dynamic Punch", - "Mud Bomb", - "Sludge Bomb" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "455": { - "name": "Carnivine", - "forms": { - "1808": { - "name": "Normal", - "proto": "CARNIVINE_NORMAL" - }, - "1809": { - "name": "Shadow", - "proto": "CARNIVINE_SHADOW" - }, - "1810": { - "name": "Purified", - "proto": "CARNIVINE_PURIFIED" - } - }, - "default_form_id": 1808, - "pokedex_id": 455, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass" - ], - "attack": 187, - "defense": 136, - "stamina": 179, - "height": 1.4, - "weight": 27, - "flee_rate": 0.01, - "capture_rate": 0.9, - "quick_moves": [ - "Bite", - "Vine Whip" - ], - "charged_moves": [ - "Power Whip", - "Energy Ball", - "Crunch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "456": { - "name": "Finneon", - "forms": { - "1811": { - "name": "Normal", - "proto": "FINNEON_NORMAL" - }, - "1812": { - "name": "Shadow", - "proto": "FINNEON_SHADOW" - }, - "1813": { - "name": "Purified", - "proto": "FINNEON_PURIFIED" - } - }, - "default_form_id": 1811, - "pokedex_id": 456, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water" - ], - "attack": 96, - "defense": 116, - "stamina": 135, - "height": 0.4, - "weight": 7, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Pound", - "Water Gun" - ], - "charged_moves": [ - "Water Pulse", - "Ice Beam", - "Silver Wind" - ], - "evolutions": [ - { - "pokemon": 457 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "457": { - "name": "Lumineon", - "forms": { - "1814": { - "name": "Normal", - "proto": "LUMINEON_NORMAL" - }, - "1815": { - "name": "Shadow", - "proto": "LUMINEON_SHADOW" - }, - "1816": { - "name": "Purified", - "proto": "LUMINEON_PURIFIED" - } - }, - "default_form_id": 1814, - "pokedex_id": 457, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water" - ], - "attack": 142, - "defense": 170, - "stamina": 170, - "height": 1.2, - "weight": 24, - "flee_rate": 0.06, - "capture_rate": 0.2, - "quick_moves": [ - "Waterfall", - "Water Gun" - ], - "charged_moves": [ - "Water Pulse", - "Blizzard", - "Silver Wind" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "458": { - "name": "Mantyke", - "forms": { - "1817": { - "name": "Normal", - "proto": "MANTYKE_NORMAL" - }, - "1818": { - "name": "Shadow", - "proto": "MANTYKE_SHADOW" - }, - "1819": { - "name": "Purified", - "proto": "MANTYKE_PURIFIED" - } - }, - "default_form_id": 1817, - "pokedex_id": 458, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water", - "Flying" - ], - "attack": 105, - "defense": 179, - "stamina": 128, - "height": 1, - "weight": 65, - "flee_rate": 0.04, - "capture_rate": 0.1, - "quick_moves": [ - "Bubble", - "Tackle" - ], - "charged_moves": [ - "Water Pulse", - "Ice Beam", - "Aerial Ace" - ], - "evolutions": [ - { - "pokemon": 226 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "459": { - "name": "Snover", - "forms": { - "932": { - "name": "Normal", - "proto": "SNOVER_NORMAL", - "evolutions": [ - { - "pokemon": 460, - "form": 935 - } - ] - }, - "933": { - "name": "Shadow", - "proto": "SNOVER_SHADOW", - "evolutions": [ - { - "pokemon": 460, - "form": 936 - } - ] - }, - "934": { - "name": "Purified", - "proto": "SNOVER_PURIFIED", - "evolutions": [ - { - "pokemon": 460, - "form": 937 - } - ] - } - }, - "default_form_id": 932, - "pokedex_id": 459, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass", - "Ice" - ], - "attack": 115, - "defense": 105, - "stamina": 155, - "height": 1, - "weight": 50.5, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Powder Snow", - "Ice Shard" - ], - "charged_moves": [ - "Ice Beam", - "Energy Ball", - "Stomp" - ], - "evolutions": [ - { - "pokemon": 460, - "form": 935 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "460": { - "name": "Abomasnow", - "forms": { - "935": { - "name": "Normal", - "proto": "ABOMASNOW_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "936": { - "name": "Shadow", - "proto": "ABOMASNOW_SHADOW" - }, - "937": { - "name": "Purified", - "proto": "ABOMASNOW_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 935, - "pokedex_id": 460, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass", - "Ice" - ], - "attack": 178, - "defense": 158, - "stamina": 207, - "height": 2.2, - "weight": 135.5, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Powder Snow", - "Razor Leaf" - ], - "charged_moves": [ - "Blizzard", - "Energy Ball", - "Outrage", - "Weather Ball" - ], - "temp_evolutions": { - "1": { - "attack": 240, - "defense": 191, - "stamina": 207, - "height": 2.7, - "weight": 185 - } - }, - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "461": { - "name": "Weavile", - "forms": { - "800": { - "name": "Normal", - "proto": "WEAVILE_NORMAL" - }, - "801": { - "name": "Shadow", - "proto": "WEAVILE_SHADOW" - }, - "802": { - "name": "Purified", - "proto": "WEAVILE_PURIFIED" - } - }, - "default_form_id": 800, - "pokedex_id": 461, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Dark", - "Ice" - ], - "attack": 243, - "defense": 171, - "stamina": 172, - "height": 1.1, - "weight": 34, - "flee_rate": 0.09, - "capture_rate": 0.15, - "quick_moves": [ - "Ice Shard", - "Feint Attack", - "Snarl" - ], - "charged_moves": [ - "Avalanche", - "Focus Blast", - "Foul Play" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "462": { - "name": "Magnezone", - "forms": { - "661": { - "name": "Normal", - "proto": "MAGNEZONE_NORMAL" - }, - "662": { - "name": "Shadow", - "proto": "MAGNEZONE_SHADOW" - }, - "663": { - "name": "Purified", - "proto": "MAGNEZONE_PURIFIED" - } - }, - "default_form_id": 661, - "pokedex_id": 462, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Electric", - "Steel" - ], - "attack": 238, - "defense": 205, - "stamina": 172, - "height": 1.2, - "weight": 180, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Spark", - "Charge Beam" - ], - "charged_moves": [ - "Zap Cannon", - "Wild Charge", - "Flash Cannon", - "Mirror Shot" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "463": { - "name": "Lickilicky", - "forms": { - "1820": { - "name": "Normal", - "proto": "LICKILICKY_NORMAL" - }, - "1821": { - "name": "Shadow", - "proto": "LICKILICKY_SHADOW" - }, - "1822": { - "name": "Purified", - "proto": "LICKILICKY_PURIFIED" - } - }, - "default_form_id": 1820, - "pokedex_id": 463, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 161, - "defense": 181, - "stamina": 242, - "height": 1.7, - "weight": 140, - "flee_rate": 0.09, - "capture_rate": 0.15, - "quick_moves": [ - "Lick", - "Zen Headbutt" - ], - "charged_moves": [ - "Hyper Beam", - "Earthquake", - "Solar Beam", - "Shadow Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "464": { - "name": "Rhyperior", - "forms": { - "852": { - "name": "Normal", - "proto": "RHYPERIOR_NORMAL" - }, - "853": { - "name": "Shadow", - "proto": "RHYPERIOR_SHADOW" - }, - "854": { - "name": "Purified", - "proto": "RHYPERIOR_PURIFIED" - } - }, - "default_form_id": 852, - "pokedex_id": 464, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ground", - "Rock" - ], - "attack": 241, - "defense": 190, - "stamina": 251, - "height": 2.4, - "weight": 282.8, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Mud Slap", - "Smack Down" - ], - "charged_moves": [ - "Surf", - "Earthquake", - "Stone Edge", - "Skull Bash", - "Super Power" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "465": { - "name": "Tangrowth", - "forms": { - "1823": { - "name": "Normal", - "proto": "TANGROWTH_NORMAL" - }, - "1824": { - "name": "Shadow", - "proto": "TANGROWTH_SHADOW" - }, - "1825": { - "name": "Purified", - "proto": "TANGROWTH_PURIFIED" - } - }, - "default_form_id": 1823, - "pokedex_id": 465, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass" - ], - "attack": 207, - "defense": 184, - "stamina": 225, - "height": 2, - "weight": 128.6, - "flee_rate": 0.1, - "capture_rate": 0.15, - "quick_moves": [ - "Vine Whip", - "Infestation" - ], - "charged_moves": [ - "Ancient Power", - "Sludge Bomb", - "Solar Beam", - "Power Whip", - "Rock Slide" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "466": { - "name": "Electivire", - "forms": { - "643": { - "name": "Normal", - "proto": "ELECTIVIRE_NORMAL" - }, - "644": { - "name": "Shadow", - "proto": "ELECTIVIRE_SHADOW" - }, - "645": { - "name": "Purified", - "proto": "ELECTIVIRE_PURIFIED" - } - }, - "default_form_id": 643, - "pokedex_id": 466, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Electric" - ], - "attack": 249, - "defense": 163, - "stamina": 181, - "height": 1.8, - "weight": 138.6, - "flee_rate": 0.1, - "capture_rate": 0.15, - "quick_moves": [ - "Thunder Shock", - "Low Kick" - ], - "charged_moves": [ - "Thunder Punch", - "Wild Charge", - "Thunder", - "Ice Punch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "467": { - "name": "Magmortar", - "forms": { - "637": { - "name": "Normal", - "proto": "MAGMORTAR_NORMAL" - }, - "638": { - "name": "Shadow", - "proto": "MAGMORTAR_SHADOW" - }, - "639": { - "name": "Purified", - "proto": "MAGMORTAR_PURIFIED" - } - }, - "default_form_id": 637, - "pokedex_id": 467, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Fire" - ], - "attack": 247, - "defense": 172, - "stamina": 181, - "height": 1.6, - "weight": 68, - "flee_rate": 0.1, - "capture_rate": 0.15, - "quick_moves": [ - "Fire Spin", - "Karate Chop" - ], - "charged_moves": [ - "Brick Break", - "Fire Punch", - "Fire Blast", - "Psychic" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "468": { - "name": "Togekiss", - "forms": { - "1826": { - "name": "Normal", - "proto": "TOGEKISS_NORMAL" - }, - "1827": { - "name": "Shadow", - "proto": "TOGEKISS_SHADOW" - }, - "1828": { - "name": "Purified", - "proto": "TOGEKISS_PURIFIED" - } - }, - "default_form_id": 1826, - "pokedex_id": 468, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Fairy", - "Flying" - ], - "attack": 225, - "defense": 217, - "stamina": 198, - "height": 1.5, - "weight": 38, - "flee_rate": 0.05, - "capture_rate": 0.01, - "quick_moves": [ - "Air Slash", - "Hidden Power", - "Charm" - ], - "charged_moves": [ - "Ancient Power", - "Dazzling Gleam", - "Aerial Ace", - "Flamethrower" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "469": { - "name": "Yanmega", - "forms": { - "1829": { - "name": "Normal", - "proto": "YANMEGA_NORMAL" - }, - "1830": { - "name": "Shadow", - "proto": "YANMEGA_SHADOW" - }, - "1831": { - "name": "Purified", - "proto": "YANMEGA_PURIFIED" - } - }, - "default_form_id": 1829, - "pokedex_id": 469, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Bug", - "Flying" - ], - "attack": 231, - "defense": 156, - "stamina": 200, - "height": 1.9, - "weight": 51.5, - "flee_rate": 0.05, - "capture_rate": 0.175, - "quick_moves": [ - "Bug Bite", - "Wing Attack" - ], - "charged_moves": [ - "Ancient Power", - "Aerial Ace", - "Bug Buzz" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "470": { - "name": "Leafeon", - "forms": { - "1832": { - "name": "Normal", - "proto": "LEAFEON_NORMAL" - }, - "1833": { - "name": "Shadow", - "proto": "LEAFEON_SHADOW" - }, - "1834": { - "name": "Purified", - "proto": "LEAFEON_PURIFIED" - } - }, - "default_form_id": 1832, - "pokedex_id": 470, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass" - ], - "attack": 216, - "defense": 219, - "stamina": 163, - "height": 1, - "weight": 25.5, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Razor Leaf", - "Quick Attack" - ], - "charged_moves": [ - "Solar Beam", - "Leaf Blade", - "Energy Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "471": { - "name": "Glaceon", - "forms": { - "1835": { - "name": "Normal", - "proto": "GLACEON_NORMAL" - }, - "1836": { - "name": "Shadow", - "proto": "GLACEON_SHADOW" - }, - "1837": { - "name": "Purified", - "proto": "GLACEON_PURIFIED" - } - }, - "default_form_id": 1835, - "pokedex_id": 471, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ice" - ], - "attack": 238, - "defense": 205, - "stamina": 163, - "height": 0.8, - "weight": 25.9, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Ice Shard", - "Frost Breath" - ], - "charged_moves": [ - "Avalanche", - "Icy Wind", - "Ice Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "472": { - "name": "Gliscor", - "forms": { - "806": { - "name": "Normal", - "proto": "GLISCOR_NORMAL" - }, - "807": { - "name": "Shadow", - "proto": "GLISCOR_SHADOW" - }, - "808": { - "name": "Purified", - "proto": "GLISCOR_PURIFIED" - } - }, - "default_form_id": 806, - "pokedex_id": 472, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ground", - "Flying" - ], - "attack": 185, - "defense": 222, - "stamina": 181, - "height": 2, - "weight": 42.5, - "flee_rate": 0.09, - "capture_rate": 0.125, - "quick_moves": [ - "Fury Cutter", - "Wing Attack" - ], - "charged_moves": [ - "Earthquake", - "Aerial Ace", - "Night Slash", - "Sand Tomb" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "473": { - "name": "Mamoswine", - "forms": { - "1838": { - "name": "Normal", - "proto": "MAMOSWINE_NORMAL" - }, - "1839": { - "name": "Shadow", - "proto": "MAMOSWINE_SHADOW" - }, - "1840": { - "name": "Purified", - "proto": "MAMOSWINE_PURIFIED" - } - }, - "default_form_id": 1838, - "pokedex_id": 473, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ice", - "Ground" - ], - "attack": 247, - "defense": 146, - "stamina": 242, - "height": 2.5, - "weight": 291, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Mud Slap", - "Powder Snow" - ], - "charged_moves": [ - "Avalanche", - "Bulldoze", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "474": { - "name": "Porygon Z", - "forms": { - "683": { - "name": "Normal", - "proto": "PORYGON_Z_NORMAL" - }, - "684": { - "name": "Shadow", - "proto": "PORYGON_Z_SHADOW" - }, - "685": { - "name": "Purified", - "proto": "PORYGON_Z_PURIFIED" - } - }, - "default_form_id": 683, - "pokedex_id": 474, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 264, - "defense": 150, - "stamina": 198, - "height": 0.9, - "weight": 34, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Hidden Power", - "Charge Beam", - "Lock On" - ], - "charged_moves": [ - "Solar Beam", - "Hyper Beam", - "Zap Cannon", - "Blizzard" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "475": { - "name": "Gallade", - "forms": { - "301": { - "name": "Normal", - "proto": "GALLADE_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "302": { - "name": "Shadow", - "proto": "GALLADE_SHADOW" - }, - "303": { - "name": "Purified", - "proto": "GALLADE_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 301, - "pokedex_id": 475, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Psychic", - "Fighting" - ], - "attack": 237, - "defense": 195, - "stamina": 169, - "height": 1.6, - "weight": 52, - "flee_rate": 0.05, - "capture_rate": 0.5, - "quick_moves": [ - "Confusion", - "Low Kick", - "Charm" - ], - "charged_moves": [ - "Close Combat", - "Psychic", - "Leaf Blade" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 326, - "defense": 230, - "stamina": 169, - "unreleased": true - } - } - }, - "476": { - "name": "Probopass", - "forms": { - "1841": { - "name": "Normal", - "proto": "PROBOPASS_NORMAL" - }, - "1842": { - "name": "Shadow", - "proto": "PROBOPASS_SHADOW" - }, - "1843": { - "name": "Purified", - "proto": "PROBOPASS_PURIFIED" - } - }, - "default_form_id": 1841, - "pokedex_id": 476, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Rock", - "Steel" - ], - "attack": 135, - "defense": 275, - "stamina": 155, - "height": 1.4, - "weight": 340, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Rock Throw", - "Spark" - ], - "charged_moves": [ - "Magnet Bomb", - "Rock Slide", - "Thunderbolt" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "477": { - "name": "Dusknoir", - "forms": { - "920": { - "name": "Normal", - "proto": "DUSKNOIR_NORMAL" - }, - "921": { - "name": "Shadow", - "proto": "DUSKNOIR_SHADOW" - }, - "922": { - "name": "Purified", - "proto": "DUSKNOIR_PURIFIED" - } - }, - "default_form_id": 920, - "pokedex_id": 477, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ghost" - ], - "attack": 180, - "defense": 254, - "stamina": 128, - "height": 2.2, - "weight": 106.6, - "flee_rate": 0.05, - "capture_rate": 0.1, - "quick_moves": [ - "Hex", - "Astonish" - ], - "charged_moves": [ - "Ominous Wind", - "Psychic", - "Dark Pulse" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "478": { - "name": "Froslass", - "forms": { - "1844": { - "name": "Normal", - "proto": "FROSLASS_NORMAL" - }, - "1845": { - "name": "Shadow", - "proto": "FROSLASS_SHADOW" - }, - "1846": { - "name": "Purified", - "proto": "FROSLASS_PURIFIED" - } - }, - "default_form_id": 1844, - "pokedex_id": 478, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ice", - "Ghost" - ], - "attack": 171, - "defense": 150, - "stamina": 172, - "height": 1.3, - "weight": 26.6, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Powder Snow", - "Hex" - ], - "charged_moves": [ - "Avalanche", - "Crunch", - "Shadow Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "479": { - "name": "Rotom", - "forms": { - "81": { - "name": "Normal", - "proto": "ROTOM_NORMAL" - }, - "82": { - "name": "Frost", - "proto": "ROTOM_FROST", - "attack": 204, - "defense": 219, - "stamina": 137, - "charged_moves": [ - "Blizzard", - "Thunderbolt", - "Thunder" - ], - "types": [ - "Electric", - "Ice" - ] - }, - "83": { - "name": "Fan", - "proto": "ROTOM_FAN", - "attack": 204, - "defense": 219, - "stamina": 137, - "quick_moves": [ - "Astonish", - "Air Slash" - ], - "types": [ - "Electric", - "Flying" - ] - }, - "84": { - "name": "Mow", - "proto": "ROTOM_MOW", - "attack": 204, - "defense": 219, - "stamina": 137, - "types": [ - "Electric", - "Grass" - ] - }, - "85": { - "name": "Wash", - "proto": "ROTOM_WASH", - "attack": 204, - "defense": 219, - "stamina": 137, - "charged_moves": [ - "Hydro Pump", - "Thunderbolt", - "Thunder" - ], - "types": [ - "Electric", - "Water" - ] - }, - "86": { - "name": "Heat", - "proto": "ROTOM_HEAT", - "attack": 204, - "defense": 219, - "stamina": 137, - "charged_moves": [ - "Overheat", - "Thunderbolt", - "Thunder" - ], - "types": [ - "Electric", - "Fire" - ] - } - }, - "default_form_id": 81, - "pokedex_id": 479, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Electric", - "Ghost" - ], - "attack": 185, - "defense": 159, - "stamina": 137, - "height": 0.3, - "weight": 0.3, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Astonish", - "Thunder Shock" - ], - "charged_moves": [ - "Ominous Wind", - "Thunderbolt", - "Thunder" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "480": { - "name": "Uxie", - "forms": { - "1847": { - "name": "Normal", - "proto": "UXIE_NORMAL" - }, - "1848": { - "name": "Shadow", - "proto": "UXIE_SHADOW" - }, - "1849": { - "name": "Purified", - "proto": "UXIE_PURIFIED" - } - }, - "default_form_id": 1847, - "pokedex_id": 480, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Psychic" - ], - "attack": 156, - "defense": 270, - "stamina": 181, - "height": 0.3, - "weight": 0.3, - "capture_rate": 0.02, - "quick_moves": [ - "Confusion", - "Extrasensory" - ], - "charged_moves": [ - "Futuresight", - "Swift", - "Thunder" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "481": { - "name": "Mesprit", - "forms": { - "1850": { - "name": "Normal", - "proto": "MESPRIT_NORMAL" - }, - "1851": { - "name": "Shadow", - "proto": "MESPRIT_SHADOW" - }, - "1852": { - "name": "Purified", - "proto": "MESPRIT_PURIFIED" - } - }, - "default_form_id": 1850, - "pokedex_id": 481, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Psychic" - ], - "attack": 212, - "defense": 212, - "stamina": 190, - "height": 0.3, - "weight": 0.3, - "capture_rate": 0.02, - "quick_moves": [ - "Confusion", - "Extrasensory" - ], - "charged_moves": [ - "Futuresight", - "Swift", - "Blizzard" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "482": { - "name": "Azelf", - "forms": { - "1853": { - "name": "Normal", - "proto": "AZELF_NORMAL" - }, - "1854": { - "name": "Shadow", - "proto": "AZELF_SHADOW" - }, - "1855": { - "name": "Purified", - "proto": "AZELF_PURIFIED" - } - }, - "default_form_id": 1853, - "pokedex_id": 482, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Psychic" - ], - "attack": 270, - "defense": 151, - "stamina": 181, - "height": 0.3, - "weight": 0.3, - "capture_rate": 0.02, - "quick_moves": [ - "Confusion", - "Extrasensory" - ], - "charged_moves": [ - "Futuresight", - "Swift", - "Fire Blast" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "483": { - "name": "Dialga", - "forms": { - "1856": { - "name": "Normal", - "proto": "DIALGA_NORMAL" - }, - "1857": { - "name": "Shadow", - "proto": "DIALGA_SHADOW" - }, - "1858": { - "name": "Purified", - "proto": "DIALGA_PURIFIED" - } - }, - "default_form_id": 1856, - "pokedex_id": 483, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Steel", - "Dragon" - ], - "attack": 275, - "defense": 211, - "stamina": 205, - "height": 5.4, - "weight": 683, - "flee_rate": 0.04, - "capture_rate": 0.02, - "quick_moves": [ - "Dragon Breath", - "Metal Claw" - ], - "charged_moves": [ - "Draco Meteor", - "Iron Head", - "Thunder" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "484": { - "name": "Palkia", - "forms": { - "1859": { - "name": "Normal", - "proto": "PALKIA_NORMAL" - }, - "1860": { - "name": "Shadow", - "proto": "PALKIA_SHADOW" - }, - "1861": { - "name": "Purified", - "proto": "PALKIA_PURIFIED" - } - }, - "default_form_id": 1859, - "pokedex_id": 484, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water", - "Dragon" - ], - "attack": 280, - "defense": 215, - "stamina": 189, - "height": 4.2, - "weight": 336, - "flee_rate": 0.04, - "capture_rate": 0.02, - "quick_moves": [ - "Dragon Breath", - "Dragon Tail" - ], - "charged_moves": [ - "Draco Meteor", - "Fire Blast", - "Hydro Pump", - "Aqua Tail" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "485": { - "name": "Heatran", - "forms": { - "1862": { - "name": "Normal", - "proto": "HEATRAN_NORMAL" - }, - "1863": { - "name": "Shadow", - "proto": "HEATRAN_SHADOW" - }, - "1864": { - "name": "Purified", - "proto": "HEATRAN_PURIFIED" - } - }, - "default_form_id": 1862, - "pokedex_id": 485, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Fire", - "Steel" - ], - "attack": 251, - "defense": 213, - "stamina": 209, - "height": 1.7, - "weight": 430, - "flee_rate": 0.04, - "capture_rate": 0.02, - "quick_moves": [ - "Fire Spin", - "Bug Bite" - ], - "charged_moves": [ - "Fire Blast", - "Iron Head", - "Stone Edge", - "Flamethrower" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "486": { - "name": "Regigigas", - "forms": { - "1865": { - "name": "Normal", - "proto": "REGIGIGAS_NORMAL" - }, - "1866": { - "name": "Shadow", - "proto": "REGIGIGAS_SHADOW" - }, - "1867": { - "name": "Purified", - "proto": "REGIGIGAS_PURIFIED" - } - }, - "default_form_id": 1865, - "pokedex_id": 486, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 287, - "defense": 210, - "stamina": 221, - "height": 3.7, - "weight": 420, - "flee_rate": 0.04, - "capture_rate": 0.06, - "quick_moves": [ - "Zen Headbutt", - "Hidden Power" - ], - "charged_moves": [ - "Giga Impact", - "Focus Blast", - "Thunder" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "487": { - "name": "Giratina", - "forms": { - "90": { - "name": "Altered", - "proto": "GIRATINA_ALTERED" - }, - "91": { - "name": "Origin", - "proto": "GIRATINA_ORIGIN", - "attack": 225, - "defense": 187, - "stamina": 284, - "height": 6.9, - "weight": 650, - "quick_moves": [ - "Dragon Tail", - "Shadow Claw" - ], - "charged_moves": [ - "Dragon Pulse", - "Ominous Wind", - "Shadow Ball" - ] - }, - "1868": { - "name": "Normal", - "proto": "GIRATINA_NORMAL" - }, - "1869": { - "name": "Shadow", - "proto": "GIRATINA_SHADOW" - }, - "1870": { - "name": "Purified", - "proto": "GIRATINA_PURIFIED" - } - }, - "default_form_id": 90, - "pokedex_id": 487, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Ghost", - "Dragon" - ], - "attack": 187, - "defense": 225, - "stamina": 284, - "height": 4.5, - "weight": 750, - "flee_rate": 0.04, - "capture_rate": 0.02, - "quick_moves": [ - "Dragon Breath", - "Shadow Claw" - ], - "charged_moves": [ - "Dragon Claw", - "Ancient Power", - "Shadow Sneak" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "488": { - "name": "Cresselia", - "forms": { - "1871": { - "name": "Normal", - "proto": "CRESSELIA_NORMAL" - }, - "1872": { - "name": "Shadow", - "proto": "CRESSELIA_SHADOW" - }, - "1873": { - "name": "Purified", - "proto": "CRESSELIA_PURIFIED" - } - }, - "default_form_id": 1871, - "pokedex_id": 488, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Psychic" - ], - "attack": 152, - "defense": 258, - "stamina": 260, - "height": 1.5, - "weight": 85.6, - "flee_rate": 0.04, - "capture_rate": 0.02, - "quick_moves": [ - "Psycho Cut", - "Confusion" - ], - "charged_moves": [ - "Aurora Beam", - "Moonblast", - "Futuresight" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "489": { - "name": "Phione", - "forms": { - "1874": { - "name": "Normal", - "proto": "PHIONE_NORMAL" - }, - "1875": { - "name": "Shadow", - "proto": "PHIONE_SHADOW" - }, - "1876": { - "name": "Purified", - "proto": "PHIONE_PURIFIED" - } - }, - "default_form_id": 1874, - "pokedex_id": 489, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water" - ], - "attack": 162, - "defense": 162, - "stamina": 190, - "height": 0.4, - "weight": 3.1, - "capture_rate": 0.02, - "quick_moves": [ - "Waterfall", - "Bubble" - ], - "charged_moves": [ - "Bubble Beam", - "Water Pulse", - "Surf" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "490": { - "name": "Manaphy", - "forms": { - "1877": { - "name": "Normal", - "proto": "MANAPHY_NORMAL" - }, - "1878": { - "name": "Shadow", - "proto": "MANAPHY_SHADOW" - }, - "1879": { - "name": "Purified", - "proto": "MANAPHY_PURIFIED" - } - }, - "default_form_id": 1877, - "pokedex_id": 490, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Water" - ], - "attack": 210, - "defense": 210, - "stamina": 225, - "height": 0.3, - "weight": 1.4, - "capture_rate": 0.02, - "quick_moves": [ - "Waterfall", - "Bubble" - ], - "charged_moves": [ - "Bubble Beam", - "Psychic", - "Surf" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "491": { - "name": "Darkrai", - "forms": { - "1880": { - "name": "Normal", - "proto": "DARKRAI_NORMAL" - }, - "1881": { - "name": "Shadow", - "proto": "DARKRAI_SHADOW" - }, - "1882": { - "name": "Purified", - "proto": "DARKRAI_PURIFIED" - } - }, - "default_form_id": 1880, - "pokedex_id": 491, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Dark" - ], - "attack": 285, - "defense": 198, - "stamina": 172, - "height": 1.5, - "weight": 50.5, - "capture_rate": 0.02, - "quick_moves": [ - "Snarl", - "Feint Attack" - ], - "charged_moves": [ - "Focus Blast", - "Shadow Ball", - "Dark Pulse" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "492": { - "name": "Shaymin", - "forms": { - "92": { - "name": "Sky", - "proto": "SHAYMIN_SKY", - "attack": 261, - "defense": 166, - "stamina": 225, - "height": 0.4, - "weight": 5.2, - "types": [ - "Grass", - "Flying" - ] - }, - "93": { - "name": "Land", - "proto": "SHAYMIN_LAND" - }, - "1883": { - "name": "Normal", - "proto": "SHAYMIN_NORMAL" - }, - "1884": { - "name": "Shadow", - "proto": "SHAYMIN_SHADOW" - }, - "1885": { - "name": "Purified", - "proto": "SHAYMIN_PURIFIED" - } - }, - "default_form_id": 93, - "pokedex_id": 492, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Grass" - ], - "attack": 210, - "defense": 210, - "stamina": 225, - "height": 0.2, - "weight": 2.1, - "capture_rate": 0.02, - "quick_moves": [ - "Hidden Power", - "Zen Headbutt" - ], - "charged_moves": [ - "Energy Ball", - "Grass Knot", - "Solar Beam" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "493": { - "name": "Arceus", - "forms": { - "100": { - "name": "Normal", - "proto": "ARCEUS_NORMAL" - }, - "101": { - "name": "Fighting", - "proto": "ARCEUS_FIGHTING", - "types": [ - "Fighting" - ] - }, - "102": { - "name": "Flying", - "proto": "ARCEUS_FLYING", - "types": [ - "Flying" - ] - }, - "103": { - "name": "Poison", - "proto": "ARCEUS_POISON", - "types": [ - "Poison" - ] - }, - "104": { - "name": "Ground", - "proto": "ARCEUS_GROUND", - "types": [ - "Ground" - ] - }, - "105": { - "name": "Rock", - "proto": "ARCEUS_ROCK", - "types": [ - "Rock" - ] - }, - "106": { - "name": "Bug", - "proto": "ARCEUS_BUG", - "types": [ - "Bug" - ] - }, - "107": { - "name": "Ghost", - "proto": "ARCEUS_GHOST", - "types": [ - "Ghost" - ] - }, - "108": { - "name": "Steel", - "proto": "ARCEUS_STEEL", - "types": [ - "Steel" - ] - }, - "109": { - "name": "Fire", - "proto": "ARCEUS_FIRE", - "types": [ - "Fire" - ] - }, - "110": { - "name": "Water", - "proto": "ARCEUS_WATER", - "types": [ - "Water" - ] - }, - "111": { - "name": "Grass", - "proto": "ARCEUS_GRASS", - "types": [ - "Grass" - ] - }, - "112": { - "name": "Electric", - "proto": "ARCEUS_ELECTRIC", - "types": [ - "Electric" - ] - }, - "113": { - "name": "Psychic", - "proto": "ARCEUS_PSYCHIC", - "types": [ - "Psychic" - ] - }, - "114": { - "name": "Ice", - "proto": "ARCEUS_ICE", - "types": [ - "Ice" - ] - }, - "115": { - "name": "Dragon", - "proto": "ARCEUS_DRAGON", - "types": [ - "Dragon" - ] - }, - "116": { - "name": "Dark", - "proto": "ARCEUS_DARK", - "types": [ - "Dark" - ] - }, - "117": { - "name": "Fairy", - "proto": "ARCEUS_FAIRY", - "types": [ - "Fairy" - ] - } - }, - "default_form_id": 100, - "pokedex_id": 493, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Normal" - ], - "attack": 238, - "defense": 238, - "stamina": 237, - "height": 3.2, - "weight": 320, - "capture_rate": 0.02, - "quick_moves": [ - "Iron Tail", - "Shadow Claw" - ], - "charged_moves": [ - "Futuresight", - "Hyper Beam", - "Outrage" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "494": { - "name": "Victini", - "forms": { - "1886": { - "name": "Normal", - "proto": "VICTINI_NORMAL" - }, - "1887": { - "name": "Shadow", - "proto": "VICTINI_SHADOW" - }, - "1888": { - "name": "Purified", - "proto": "VICTINI_PURIFIED" - } - }, - "default_form_id": 1886, - "pokedex_id": 494, - "genId": "4", - "generation": "Sinnoh", - "types": [ - "Psychic", - "Fire" - ], - "attack": 210, - "defense": 210, - "stamina": 225, - "height": 0.4, - "weight": 4, - "capture_rate": 100, - "quick_moves": [ - "Confusion", - "Quick Attack" - ], - "charged_moves": [ - "Overheat", - "Focus Blast", - "Psychic", - "V Create" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "495": { - "name": "Snivy", - "forms": { - "1889": { - "name": "Normal", - "proto": "SNIVY_NORMAL" - }, - "1890": { - "name": "Shadow", - "proto": "SNIVY_SHADOW" - }, - "1891": { - "name": "Purified", - "proto": "SNIVY_PURIFIED" - } - }, - "default_form_id": 1889, - "pokedex_id": 495, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass" - ], - "attack": 88, - "defense": 107, - "stamina": 128, - "height": 0.6, - "weight": 8.1, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Vine Whip" - ], - "charged_moves": [ - "Energy Ball", - "Seed Bomb", - "Wrap" - ], - "evolutions": [ - { - "pokemon": 496 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "496": { - "name": "Servine", - "forms": { - "1892": { - "name": "Normal", - "proto": "SERVINE_NORMAL" - }, - "1893": { - "name": "Shadow", - "proto": "SERVINE_SHADOW" - }, - "1894": { - "name": "Purified", - "proto": "SERVINE_PURIFIED" - } - }, - "default_form_id": 1892, - "pokedex_id": 496, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass" - ], - "attack": 122, - "defense": 152, - "stamina": 155, - "height": 0.8, - "weight": 16, - "flee_rate": 0.1, - "capture_rate": 0.1, - "quick_moves": [ - "Iron Tail", - "Vine Whip" - ], - "charged_moves": [ - "Grass Knot", - "Leaf Tornado", - "Wrap" - ], - "evolutions": [ - { - "pokemon": 497 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "497": { - "name": "Serperior", - "forms": { - "1895": { - "name": "Normal", - "proto": "SERPERIOR_NORMAL" - }, - "1896": { - "name": "Shadow", - "proto": "SERPERIOR_SHADOW" - }, - "1897": { - "name": "Purified", - "proto": "SERPERIOR_PURIFIED" - } - }, - "default_form_id": 1895, - "pokedex_id": 497, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass" - ], - "attack": 161, - "defense": 204, - "stamina": 181, - "height": 3.3, - "weight": 63, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Iron Tail", - "Vine Whip" - ], - "charged_moves": [ - "Grass Knot", - "Leaf Tornado", - "Aerial Ace" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "498": { - "name": "Tepig", - "forms": { - "1898": { - "name": "Normal", - "proto": "TEPIG_NORMAL" - }, - "1899": { - "name": "Shadow", - "proto": "TEPIG_SHADOW" - }, - "1900": { - "name": "Purified", - "proto": "TEPIG_PURIFIED" - } - }, - "default_form_id": 1898, - "pokedex_id": 498, - "genId": "5", - "generation": "Unova", - "types": [ - "Fire" - ], - "attack": 115, - "defense": 85, - "stamina": 163, - "height": 0.5, - "weight": 9.9, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Ember" - ], - "charged_moves": [ - "Flame Charge", - "Flamethrower", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 499 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "499": { - "name": "Pignite", - "forms": { - "1901": { - "name": "Normal", - "proto": "PIGNITE_NORMAL" - }, - "1902": { - "name": "Shadow", - "proto": "PIGNITE_SHADOW" - }, - "1903": { - "name": "Purified", - "proto": "PIGNITE_PURIFIED" - } - }, - "default_form_id": 1901, - "pokedex_id": 499, - "genId": "5", - "generation": "Unova", - "types": [ - "Fire", - "Fighting" - ], - "attack": 173, - "defense": 106, - "stamina": 207, - "height": 1, - "weight": 55.5, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Tackle", - "Ember" - ], - "charged_moves": [ - "Flame Charge", - "Flamethrower", - "Rock Tomb" - ], - "evolutions": [ - { - "pokemon": 500 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "500": { - "name": "Emboar", - "forms": { - "1904": { - "name": "Normal", - "proto": "EMBOAR_NORMAL" - }, - "1905": { - "name": "Shadow", - "proto": "EMBOAR_SHADOW" - }, - "1906": { - "name": "Purified", - "proto": "EMBOAR_PURIFIED" - } - }, - "default_form_id": 1904, - "pokedex_id": 500, - "genId": "5", - "generation": "Unova", - "types": [ - "Fire", - "Fighting" - ], - "attack": 235, - "defense": 127, - "stamina": 242, - "height": 1.6, - "weight": 150, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Low Kick", - "Ember" - ], - "charged_moves": [ - "Heat Wave", - "Rock Slide", - "Focus Blast", - "Flame Charge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "501": { - "name": "Oshawott", - "forms": { - "1907": { - "name": "Normal", - "proto": "OSHAWOTT_NORMAL" - }, - "1908": { - "name": "Shadow", - "proto": "OSHAWOTT_SHADOW" - }, - "1909": { - "name": "Purified", - "proto": "OSHAWOTT_PURIFIED" - } - }, - "default_form_id": 1907, - "pokedex_id": 501, - "genId": "5", - "generation": "Unova", - "types": [ - "Water" - ], - "attack": 117, - "defense": 85, - "stamina": 146, - "height": 0.5, - "weight": 5.9, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Water Gun" - ], - "charged_moves": [ - "Aqua Tail", - "Water Pulse", - "Night Slash" - ], - "evolutions": [ - { - "pokemon": 502 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "502": { - "name": "Dewott", - "forms": { - "1910": { - "name": "Normal", - "proto": "DEWOTT_NORMAL" - }, - "1911": { - "name": "Shadow", - "proto": "DEWOTT_SHADOW" - }, - "1912": { - "name": "Purified", - "proto": "DEWOTT_PURIFIED" - } - }, - "default_form_id": 1910, - "pokedex_id": 502, - "genId": "5", - "generation": "Unova", - "types": [ - "Water" - ], - "attack": 159, - "defense": 116, - "stamina": 181, - "height": 0.8, - "weight": 24.5, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Fury Cutter", - "Water Gun" - ], - "charged_moves": [ - "Aqua Tail", - "Water Pulse", - "X Scissor" - ], - "evolutions": [ - { - "pokemon": 503 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "503": { - "name": "Samurott", - "forms": { - "1913": { - "name": "Normal", - "proto": "SAMUROTT_NORMAL" - }, - "1914": { - "name": "Shadow", - "proto": "SAMUROTT_SHADOW" - }, - "1915": { - "name": "Purified", - "proto": "SAMUROTT_PURIFIED" - } - }, - "default_form_id": 1913, - "pokedex_id": 503, - "genId": "5", - "generation": "Unova", - "types": [ - "Water" - ], - "attack": 212, - "defense": 157, - "stamina": 216, - "height": 1.5, - "weight": 94.6, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Fury Cutter", - "Waterfall" - ], - "charged_moves": [ - "Hydro Pump", - "Blizzard", - "Megahorn" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "504": { - "name": "Patrat", - "forms": { - "1916": { - "name": "Normal", - "proto": "PATRAT_NORMAL" - }, - "1917": { - "name": "Shadow", - "proto": "PATRAT_SHADOW" - }, - "1918": { - "name": "Purified", - "proto": "PATRAT_PURIFIED" - } - }, - "default_form_id": 1916, - "pokedex_id": 504, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal" - ], - "attack": 98, - "defense": 73, - "stamina": 128, - "height": 0.5, - "weight": 11.6, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Bite" - ], - "charged_moves": [ - "Dig", - "Hyper Fang", - "Grass Knot" - ], - "evolutions": [ - { - "pokemon": 505 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "505": { - "name": "Watchog", - "forms": { - "1919": { - "name": "Normal", - "proto": "WATCHOG_NORMAL" - }, - "1920": { - "name": "Shadow", - "proto": "WATCHOG_SHADOW" - }, - "1921": { - "name": "Purified", - "proto": "WATCHOG_PURIFIED" - } - }, - "default_form_id": 1919, - "pokedex_id": 505, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal" - ], - "attack": 165, - "defense": 139, - "stamina": 155, - "height": 1.1, - "weight": 27, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Low Kick", - "Bite" - ], - "charged_moves": [ - "Crunch", - "Hyper Fang", - "Grass Knot" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "506": { - "name": "Lillipup", - "forms": { - "1922": { - "name": "Normal", - "proto": "LILLIPUP_NORMAL" - }, - "1923": { - "name": "Shadow", - "proto": "LILLIPUP_SHADOW" - }, - "1924": { - "name": "Purified", - "proto": "LILLIPUP_PURIFIED" - } - }, - "default_form_id": 1922, - "pokedex_id": 506, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal" - ], - "attack": 107, - "defense": 86, - "stamina": 128, - "height": 0.4, - "weight": 4.1, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Take Down" - ], - "charged_moves": [ - "Thunderbolt", - "Rock Tomb", - "Dig" - ], - "evolutions": [ - { - "pokemon": 507 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "507": { - "name": "Herdier", - "forms": { - "1925": { - "name": "Normal", - "proto": "HERDIER_NORMAL" - }, - "1926": { - "name": "Shadow", - "proto": "HERDIER_SHADOW" - }, - "1927": { - "name": "Purified", - "proto": "HERDIER_PURIFIED" - } - }, - "default_form_id": 1925, - "pokedex_id": 507, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal" - ], - "attack": 145, - "defense": 126, - "stamina": 163, - "height": 0.9, - "weight": 14.7, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Lick", - "Take Down" - ], - "charged_moves": [ - "Thunderbolt", - "Play Rough", - "Dig" - ], - "evolutions": [ - { - "pokemon": 508 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "508": { - "name": "Stoutland", - "forms": { - "1928": { - "name": "Normal", - "proto": "STOUTLAND_NORMAL" - }, - "1929": { - "name": "Shadow", - "proto": "STOUTLAND_SHADOW" - }, - "1930": { - "name": "Purified", - "proto": "STOUTLAND_PURIFIED" - } - }, - "default_form_id": 1928, - "pokedex_id": 508, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal" - ], - "attack": 206, - "defense": 182, - "stamina": 198, - "height": 1.2, - "weight": 61, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Lick", - "Take Down", - "Ice Fang" - ], - "charged_moves": [ - "Wild Charge", - "Play Rough", - "Crunch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "509": { - "name": "Purrloin", - "forms": { - "1931": { - "name": "Normal", - "proto": "PURRLOIN_NORMAL" - }, - "1932": { - "name": "Shadow", - "proto": "PURRLOIN_SHADOW" - }, - "1933": { - "name": "Purified", - "proto": "PURRLOIN_PURIFIED" - } - }, - "default_form_id": 1931, - "pokedex_id": 509, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark" - ], - "attack": 98, - "defense": 73, - "stamina": 121, - "height": 0.4, - "weight": 10.1, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Scratch", - "Sucker Punch" - ], - "charged_moves": [ - "Night Slash", - "Play Rough", - "Dark Pulse" - ], - "evolutions": [ - { - "pokemon": 510 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "510": { - "name": "Liepard", - "forms": { - "1934": { - "name": "Normal", - "proto": "LIEPARD_NORMAL" - }, - "1935": { - "name": "Shadow", - "proto": "LIEPARD_SHADOW" - }, - "1936": { - "name": "Purified", - "proto": "LIEPARD_PURIFIED" - } - }, - "default_form_id": 1934, - "pokedex_id": 510, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark" - ], - "attack": 187, - "defense": 106, - "stamina": 162, - "height": 1.1, - "weight": 37.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Charm", - "Snarl" - ], - "charged_moves": [ - "Gunk Shot", - "Play Rough", - "Dark Pulse", - "Payback" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "511": { - "name": "Pansage", - "forms": { - "1937": { - "name": "Normal", - "proto": "PANSAGE_NORMAL" - }, - "1938": { - "name": "Shadow", - "proto": "PANSAGE_SHADOW" - }, - "1939": { - "name": "Purified", - "proto": "PANSAGE_PURIFIED" - } - }, - "default_form_id": 1937, - "pokedex_id": 511, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass" - ], - "attack": 104, - "defense": 94, - "stamina": 137, - "height": 0.6, - "weight": 10.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Scratch", - "Vine Whip" - ], - "charged_moves": [ - "Energy Ball", - "Seed Bomb", - "Crunch" - ], - "evolutions": [ - { - "pokemon": 512 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "512": { - "name": "Simisage", - "forms": { - "1940": { - "name": "Normal", - "proto": "SIMISAGE_NORMAL" - }, - "1941": { - "name": "Shadow", - "proto": "SIMISAGE_SHADOW" - }, - "1942": { - "name": "Purified", - "proto": "SIMISAGE_PURIFIED" - } - }, - "default_form_id": 1940, - "pokedex_id": 512, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass" - ], - "attack": 206, - "defense": 133, - "stamina": 181, - "height": 1.1, - "weight": 30.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Bite", - "Vine Whip" - ], - "charged_moves": [ - "Solar Beam", - "Grass Knot", - "Crunch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "513": { - "name": "Pansear", - "forms": { - "1943": { - "name": "Normal", - "proto": "PANSEAR_NORMAL" - }, - "1944": { - "name": "Shadow", - "proto": "PANSEAR_SHADOW" - }, - "1945": { - "name": "Purified", - "proto": "PANSEAR_PURIFIED" - } - }, - "default_form_id": 1943, - "pokedex_id": 513, - "genId": "5", - "generation": "Unova", - "types": [ - "Fire" - ], - "attack": 104, - "defense": 94, - "stamina": 137, - "height": 0.6, - "weight": 11, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Scratch", - "Fire Spin" - ], - "charged_moves": [ - "Flame Burst", - "Flame Charge", - "Crunch" - ], - "evolutions": [ - { - "pokemon": 514 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "514": { - "name": "Simisear", - "forms": { - "1946": { - "name": "Normal", - "proto": "SIMISEAR_NORMAL" - }, - "1947": { - "name": "Shadow", - "proto": "SIMISEAR_SHADOW" - }, - "1948": { - "name": "Purified", - "proto": "SIMISEAR_PURIFIED" - } - }, - "default_form_id": 1946, - "pokedex_id": 514, - "genId": "5", - "generation": "Unova", - "types": [ - "Fire" - ], - "attack": 206, - "defense": 133, - "stamina": 181, - "height": 1, - "weight": 28, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Bite", - "Fire Spin" - ], - "charged_moves": [ - "Flamethrower", - "Fire Blast", - "Crunch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "515": { - "name": "Panpour", - "forms": { - "1949": { - "name": "Normal", - "proto": "PANPOUR_NORMAL" - }, - "1950": { - "name": "Shadow", - "proto": "PANPOUR_SHADOW" - }, - "1951": { - "name": "Purified", - "proto": "PANPOUR_PURIFIED" - } - }, - "default_form_id": 1949, - "pokedex_id": 515, - "genId": "5", - "generation": "Unova", - "types": [ - "Water" - ], - "attack": 104, - "defense": 94, - "stamina": 137, - "height": 0.6, - "weight": 13.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Scratch", - "Water Gun" - ], - "charged_moves": [ - "Surf", - "Water Pulse", - "Crunch" - ], - "evolutions": [ - { - "pokemon": 516 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "516": { - "name": "Simipour", - "forms": { - "1952": { - "name": "Normal", - "proto": "SIMIPOUR_NORMAL" - }, - "1953": { - "name": "Shadow", - "proto": "SIMIPOUR_SHADOW" - }, - "1954": { - "name": "Purified", - "proto": "SIMIPOUR_PURIFIED" - } - }, - "default_form_id": 1952, - "pokedex_id": 516, - "genId": "5", - "generation": "Unova", - "types": [ - "Water" - ], - "attack": 206, - "defense": 133, - "stamina": 181, - "height": 1, - "weight": 29, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Bite", - "Water Gun" - ], - "charged_moves": [ - "Surf", - "Hydro Pump", - "Crunch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "517": { - "name": "Munna", - "forms": { - "1955": { - "name": "Normal", - "proto": "MUNNA_NORMAL" - }, - "1956": { - "name": "Shadow", - "proto": "MUNNA_SHADOW" - }, - "1957": { - "name": "Purified", - "proto": "MUNNA_PURIFIED" - } - }, - "default_form_id": 1955, - "pokedex_id": 517, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic" - ], - "attack": 111, - "defense": 92, - "stamina": 183, - "height": 0.6, - "weight": 23.3, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Zen Headbutt", - "Charge Beam" - ], - "charged_moves": [ - "Psybeam", - "Dazzling Gleam", - "Psyshock" - ], - "evolutions": [ - { - "pokemon": 518 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "518": { - "name": "Musharna", - "forms": { - "1958": { - "name": "Normal", - "proto": "MUSHARNA_NORMAL" - }, - "1959": { - "name": "Shadow", - "proto": "MUSHARNA_SHADOW" - }, - "1960": { - "name": "Purified", - "proto": "MUSHARNA_PURIFIED" - } - }, - "default_form_id": 1958, - "pokedex_id": 518, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic" - ], - "attack": 183, - "defense": 166, - "stamina": 253, - "height": 1.1, - "weight": 60.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Zen Headbutt", - "Charge Beam" - ], - "charged_moves": [ - "Futuresight", - "Dazzling Gleam", - "Psyshock" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "519": { - "name": "Pidove", - "forms": { - "1961": { - "name": "Normal", - "proto": "PIDOVE_NORMAL" - }, - "1962": { - "name": "Shadow", - "proto": "PIDOVE_SHADOW" - }, - "1963": { - "name": "Purified", - "proto": "PIDOVE_PURIFIED" - } - }, - "default_form_id": 1961, - "pokedex_id": 519, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal", - "Flying" - ], - "attack": 98, - "defense": 80, - "stamina": 137, - "height": 0.3, - "weight": 2.1, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Quick Attack", - "Air Slash" - ], - "charged_moves": [ - "Heat Wave", - "Aerial Ace", - "Air Cutter" - ], - "evolutions": [ - { - "pokemon": 520 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "520": { - "name": "Tranquill", - "forms": { - "1964": { - "name": "Normal", - "proto": "TRANQUILL_NORMAL" - }, - "1965": { - "name": "Shadow", - "proto": "TRANQUILL_SHADOW" - }, - "1966": { - "name": "Purified", - "proto": "TRANQUILL_PURIFIED" - } - }, - "default_form_id": 1964, - "pokedex_id": 520, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal", - "Flying" - ], - "attack": 144, - "defense": 107, - "stamina": 158, - "height": 0.6, - "weight": 15, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Air Slash", - "Steel Wing" - ], - "charged_moves": [ - "Heat Wave", - "Aerial Ace", - "Sky Attack" - ], - "evolutions": [ - { - "pokemon": 521 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "521": { - "name": "Unfezant", - "forms": { - "1967": { - "name": "Normal", - "proto": "UNFEZANT_NORMAL" - }, - "1968": { - "name": "Shadow", - "proto": "UNFEZANT_SHADOW" - }, - "1969": { - "name": "Purified", - "proto": "UNFEZANT_PURIFIED" - } - }, - "default_form_id": 1967, - "pokedex_id": 521, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal", - "Flying" - ], - "attack": 226, - "defense": 146, - "stamina": 190, - "height": 1.2, - "weight": 29, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Air Slash", - "Steel Wing" - ], - "charged_moves": [ - "Heat Wave", - "Hyper Beam", - "Sky Attack" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "522": { - "name": "Blitzle", - "forms": { - "1970": { - "name": "Normal", - "proto": "BLITZLE_NORMAL" - }, - "1971": { - "name": "Shadow", - "proto": "BLITZLE_SHADOW" - }, - "1972": { - "name": "Purified", - "proto": "BLITZLE_PURIFIED" - } - }, - "default_form_id": 1970, - "pokedex_id": 522, - "genId": "5", - "generation": "Unova", - "types": [ - "Electric" - ], - "attack": 118, - "defense": 64, - "stamina": 128, - "height": 0.8, - "weight": 29.8, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Quick Attack", - "Spark" - ], - "charged_moves": [ - "Flame Charge", - "Discharge", - "Thunderbolt" - ], - "evolutions": [ - { - "pokemon": 523 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "523": { - "name": "Zebstrika", - "forms": { - "1973": { - "name": "Normal", - "proto": "ZEBSTRIKA_NORMAL" - }, - "1974": { - "name": "Shadow", - "proto": "ZEBSTRIKA_SHADOW" - }, - "1975": { - "name": "Purified", - "proto": "ZEBSTRIKA_PURIFIED" - } - }, - "default_form_id": 1973, - "pokedex_id": 523, - "genId": "5", - "generation": "Unova", - "types": [ - "Electric" - ], - "attack": 211, - "defense": 136, - "stamina": 181, - "height": 1.6, - "weight": 79.5, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Low Kick", - "Spark" - ], - "charged_moves": [ - "Flame Charge", - "Discharge", - "Wild Charge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "524": { - "name": "Roggenrola", - "forms": { - "1976": { - "name": "Normal", - "proto": "ROGGENROLA_NORMAL" - }, - "1977": { - "name": "Shadow", - "proto": "ROGGENROLA_SHADOW" - }, - "1978": { - "name": "Purified", - "proto": "ROGGENROLA_PURIFIED" - } - }, - "default_form_id": 1976, - "pokedex_id": 524, - "genId": "5", - "generation": "Unova", - "types": [ - "Rock" - ], - "attack": 121, - "defense": 110, - "stamina": 146, - "height": 0.4, - "weight": 18, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Tackle", - "Smack Down" - ], - "charged_moves": [ - "Bulldoze", - "Rock Blast", - "Stone Edge" - ], - "evolutions": [ - { - "pokemon": 525 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "525": { - "name": "Boldore", - "forms": { - "1979": { - "name": "Normal", - "proto": "BOLDORE_NORMAL" - }, - "1980": { - "name": "Shadow", - "proto": "BOLDORE_SHADOW" - }, - "1981": { - "name": "Purified", - "proto": "BOLDORE_PURIFIED" - } - }, - "default_form_id": 1979, - "pokedex_id": 525, - "genId": "5", - "generation": "Unova", - "types": [ - "Rock" - ], - "attack": 174, - "defense": 143, - "stamina": 172, - "height": 0.9, - "weight": 102, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Mud Slap", - "Smack Down" - ], - "charged_moves": [ - "Rock Slide", - "Bulldoze", - "Stone Edge" - ], - "evolutions": [ - { - "pokemon": 526 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "526": { - "name": "Gigalith", - "forms": { - "1982": { - "name": "Normal", - "proto": "GIGALITH_NORMAL" - }, - "1983": { - "name": "Shadow", - "proto": "GIGALITH_SHADOW" - }, - "1984": { - "name": "Purified", - "proto": "GIGALITH_PURIFIED" - } - }, - "default_form_id": 1982, - "pokedex_id": 526, - "genId": "5", - "generation": "Unova", - "types": [ - "Rock" - ], - "attack": 226, - "defense": 201, - "stamina": 198, - "height": 1.7, - "weight": 260, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Mud Slap", - "Smack Down" - ], - "charged_moves": [ - "Rock Slide", - "Solar Beam", - "Super Power", - "Heavy Slam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "527": { - "name": "Woobat", - "forms": { - "1985": { - "name": "Normal", - "proto": "WOOBAT_NORMAL" - }, - "1986": { - "name": "Shadow", - "proto": "WOOBAT_SHADOW" - }, - "1987": { - "name": "Purified", - "proto": "WOOBAT_PURIFIED" - } - }, - "default_form_id": 1985, - "pokedex_id": 527, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic", - "Flying" - ], - "attack": 107, - "defense": 85, - "stamina": 163, - "height": 0.4, - "weight": 2.1, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Confusion", - "Air Slash" - ], - "charged_moves": [ - "Air Cutter", - "Aerial Ace", - "Psyshock" - ], - "evolutions": [ - { - "pokemon": 528 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "528": { - "name": "Swoobat", - "forms": { - "1988": { - "name": "Normal", - "proto": "SWOOBAT_NORMAL" - }, - "1989": { - "name": "Shadow", - "proto": "SWOOBAT_SHADOW" - }, - "1990": { - "name": "Purified", - "proto": "SWOOBAT_PURIFIED" - } - }, - "default_form_id": 1988, - "pokedex_id": 528, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic", - "Flying" - ], - "attack": 161, - "defense": 119, - "stamina": 167, - "height": 0.9, - "weight": 10.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Confusion", - "Air Slash" - ], - "charged_moves": [ - "Psychic", - "Aerial Ace", - "Futuresight" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "529": { - "name": "Drilbur", - "forms": { - "1991": { - "name": "Normal", - "proto": "DRILBUR_NORMAL" - }, - "1992": { - "name": "Shadow", - "proto": "DRILBUR_SHADOW" - }, - "1993": { - "name": "Purified", - "proto": "DRILBUR_PURIFIED" - } - }, - "default_form_id": 1991, - "pokedex_id": 529, - "genId": "5", - "generation": "Unova", - "types": [ - "Ground" - ], - "attack": 154, - "defense": 85, - "stamina": 155, - "height": 0.3, - "weight": 8.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Scratch", - "Mud Slap" - ], - "charged_moves": [ - "Rock Tomb", - "Dig", - "Drill Run" - ], - "evolutions": [ - { - "pokemon": 530 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "530": { - "name": "Excadrill", - "forms": { - "1994": { - "name": "Normal", - "proto": "EXCADRILL_NORMAL" - }, - "1995": { - "name": "Shadow", - "proto": "EXCADRILL_SHADOW" - }, - "1996": { - "name": "Purified", - "proto": "EXCADRILL_PURIFIED" - } - }, - "default_form_id": 1994, - "pokedex_id": 530, - "genId": "5", - "generation": "Unova", - "types": [ - "Ground", - "Steel" - ], - "attack": 255, - "defense": 129, - "stamina": 242, - "height": 0.7, - "weight": 40.4, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Metal Claw", - "Mud Slap", - "Mud Shot" - ], - "charged_moves": [ - "Rock Slide", - "Earthquake", - "Drill Run", - "Iron Head" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "531": { - "name": "Audino", - "forms": { - "1997": { - "name": "Normal", - "proto": "AUDINO_NORMAL", - "temp_evolutions": { - "1": {} - } - }, - "1998": { - "name": "Shadow", - "proto": "AUDINO_SHADOW" - }, - "1999": { - "name": "Purified", - "proto": "AUDINO_PURIFIED", - "temp_evolutions": { - "1": {} - } - } - }, - "default_form_id": 1997, - "pokedex_id": 531, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal" - ], - "attack": 114, - "defense": 163, - "stamina": 230, - "height": 1.1, - "weight": 31, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Pound", - "Zen Headbutt" - ], - "charged_moves": [ - "Disarming Voice", - "Dazzling Gleam", - "Hyper Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true, - "temp_evolutions": { - "1": { - "attack": 147, - "defense": 239, - "stamina": 230, - "unreleased": true, - "types": [ - "Normal", - "Fairy" - ] - } - } - }, - "532": { - "name": "Timburr", - "forms": { - "2000": { - "name": "Normal", - "proto": "TIMBURR_NORMAL" - }, - "2001": { - "name": "Shadow", - "proto": "TIMBURR_SHADOW" - }, - "2002": { - "name": "Purified", - "proto": "TIMBURR_PURIFIED" - } - }, - "default_form_id": 2000, - "pokedex_id": 532, - "genId": "5", - "generation": "Unova", - "types": [ - "Fighting" - ], - "attack": 134, - "defense": 87, - "stamina": 181, - "height": 0.6, - "weight": 12.5, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Low Kick", - "Pound" - ], - "charged_moves": [ - "Low Sweep", - "Brick Break", - "Rock Tomb" - ], - "evolutions": [ - { - "pokemon": 533 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "533": { - "name": "Gurdurr", - "forms": { - "2003": { - "name": "Normal", - "proto": "GURDURR_NORMAL" - }, - "2004": { - "name": "Shadow", - "proto": "GURDURR_SHADOW" - }, - "2005": { - "name": "Purified", - "proto": "GURDURR_PURIFIED" - } - }, - "default_form_id": 2003, - "pokedex_id": 533, - "genId": "5", - "generation": "Unova", - "types": [ - "Fighting" - ], - "attack": 180, - "defense": 134, - "stamina": 198, - "height": 1.2, - "weight": 40, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Low Kick", - "Poison Jab" - ], - "charged_moves": [ - "Low Sweep", - "Brick Break", - "Stone Edge" - ], - "evolutions": [ - { - "pokemon": 534 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "534": { - "name": "Conkeldurr", - "forms": { - "2006": { - "name": "Normal", - "proto": "CONKELDURR_NORMAL" - }, - "2007": { - "name": "Shadow", - "proto": "CONKELDURR_SHADOW" - }, - "2008": { - "name": "Purified", - "proto": "CONKELDURR_PURIFIED" - } - }, - "default_form_id": 2006, - "pokedex_id": 534, - "genId": "5", - "generation": "Unova", - "types": [ - "Fighting" - ], - "attack": 243, - "defense": 158, - "stamina": 233, - "height": 1.4, - "weight": 87, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Counter", - "Poison Jab" - ], - "charged_moves": [ - "Dynamic Punch", - "Focus Blast", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "535": { - "name": "Tympole", - "forms": { - "2009": { - "name": "Normal", - "proto": "TYMPOLE_NORMAL" - }, - "2010": { - "name": "Shadow", - "proto": "TYMPOLE_SHADOW" - }, - "2011": { - "name": "Purified", - "proto": "TYMPOLE_PURIFIED" - } - }, - "default_form_id": 2009, - "pokedex_id": 535, - "genId": "5", - "generation": "Unova", - "types": [ - "Water" - ], - "attack": 98, - "defense": 78, - "stamina": 137, - "height": 0.5, - "weight": 4.5, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Mud Shot", - "Bubble" - ], - "charged_moves": [ - "Water Pulse", - "Mud Bomb", - "Sludge Wave" - ], - "evolutions": [ - { - "pokemon": 536 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "536": { - "name": "Palpitoad", - "forms": { - "2012": { - "name": "Normal", - "proto": "PALPITOAD_NORMAL" - }, - "2013": { - "name": "Shadow", - "proto": "PALPITOAD_SHADOW" - }, - "2014": { - "name": "Purified", - "proto": "PALPITOAD_PURIFIED" - } - }, - "default_form_id": 2012, - "pokedex_id": 536, - "genId": "5", - "generation": "Unova", - "types": [ - "Water", - "Ground" - ], - "attack": 128, - "defense": 109, - "stamina": 181, - "height": 0.8, - "weight": 17, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Mud Shot", - "Bubble" - ], - "charged_moves": [ - "Water Pulse", - "Earth Power", - "Sludge Wave" - ], - "evolutions": [ - { - "pokemon": 537 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "537": { - "name": "Seismitoad", - "forms": { - "2015": { - "name": "Normal", - "proto": "SEISMITOAD_NORMAL" - }, - "2016": { - "name": "Shadow", - "proto": "SEISMITOAD_SHADOW" - }, - "2017": { - "name": "Purified", - "proto": "SEISMITOAD_PURIFIED" - } - }, - "default_form_id": 2015, - "pokedex_id": 537, - "genId": "5", - "generation": "Unova", - "types": [ - "Water", - "Ground" - ], - "attack": 188, - "defense": 150, - "stamina": 233, - "height": 1.5, - "weight": 62, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Mud Shot", - "Bubble" - ], - "charged_moves": [ - "Muddy Water", - "Earth Power", - "Sludge Bomb" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "538": { - "name": "Throh", - "forms": { - "2018": { - "name": "Normal", - "proto": "THROH_NORMAL" - }, - "2019": { - "name": "Shadow", - "proto": "THROH_SHADOW" - }, - "2020": { - "name": "Purified", - "proto": "THROH_PURIFIED" - } - }, - "default_form_id": 2018, - "pokedex_id": 538, - "genId": "5", - "generation": "Unova", - "types": [ - "Fighting" - ], - "attack": 172, - "defense": 160, - "stamina": 260, - "height": 1.3, - "weight": 55.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Low Kick", - "Zen Headbutt" - ], - "charged_moves": [ - "Focus Blast", - "Low Sweep", - "Body Slam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "539": { - "name": "Sawk", - "forms": { - "2021": { - "name": "Normal", - "proto": "SAWK_NORMAL" - }, - "2022": { - "name": "Shadow", - "proto": "SAWK_SHADOW" - }, - "2023": { - "name": "Purified", - "proto": "SAWK_PURIFIED" - } - }, - "default_form_id": 2021, - "pokedex_id": 539, - "genId": "5", - "generation": "Unova", - "types": [ - "Fighting" - ], - "attack": 231, - "defense": 153, - "stamina": 181, - "height": 1.4, - "weight": 51, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Low Kick", - "Poison Jab" - ], - "charged_moves": [ - "Focus Blast", - "Low Sweep", - "Body Slam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "540": { - "name": "Sewaddle", - "forms": { - "2024": { - "name": "Normal", - "proto": "SEWADDLE_NORMAL" - }, - "2025": { - "name": "Shadow", - "proto": "SEWADDLE_SHADOW" - }, - "2026": { - "name": "Purified", - "proto": "SEWADDLE_PURIFIED" - } - }, - "default_form_id": 2024, - "pokedex_id": 540, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Grass" - ], - "attack": 96, - "defense": 124, - "stamina": 128, - "height": 0.3, - "weight": 2.5, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Struggle Bug", - "Bug Bite" - ], - "charged_moves": [ - "Energy Ball", - "Seed Bomb", - "Silver Wind" - ], - "evolutions": [ - { - "pokemon": 541 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "541": { - "name": "Swadloon", - "forms": { - "2027": { - "name": "Normal", - "proto": "SWADLOON_NORMAL" - }, - "2028": { - "name": "Shadow", - "proto": "SWADLOON_SHADOW" - }, - "2029": { - "name": "Purified", - "proto": "SWADLOON_PURIFIED" - } - }, - "default_form_id": 2027, - "pokedex_id": 541, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Grass" - ], - "attack": 115, - "defense": 162, - "stamina": 146, - "height": 0.5, - "weight": 7.3, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Struggle Bug", - "Bug Bite" - ], - "charged_moves": [ - "Energy Ball", - "Bug Buzz", - "Silver Wind" - ], - "evolutions": [ - { - "pokemon": 542 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "542": { - "name": "Leavanny", - "forms": { - "2030": { - "name": "Normal", - "proto": "LEAVANNY_NORMAL" - }, - "2031": { - "name": "Shadow", - "proto": "LEAVANNY_SHADOW" - }, - "2032": { - "name": "Purified", - "proto": "LEAVANNY_PURIFIED" - } - }, - "default_form_id": 2030, - "pokedex_id": 542, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Grass" - ], - "attack": 205, - "defense": 165, - "stamina": 181, - "height": 1.2, - "weight": 20.5, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Razor Leaf", - "Bug Bite" - ], - "charged_moves": [ - "Leaf Blade", - "X Scissor", - "Silver Wind", - "Leaf Storm" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "543": { - "name": "Venipede", - "forms": { - "2033": { - "name": "Normal", - "proto": "VENIPEDE_NORMAL" - }, - "2034": { - "name": "Shadow", - "proto": "VENIPEDE_SHADOW" - }, - "2035": { - "name": "Purified", - "proto": "VENIPEDE_PURIFIED" - } - }, - "default_form_id": 2033, - "pokedex_id": 543, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Poison" - ], - "attack": 83, - "defense": 99, - "stamina": 102, - "height": 0.4, - "weight": 5.3, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Bug Bite", - "Poison Sting" - ], - "charged_moves": [ - "Signal Beam", - "Sludge Bomb", - "Gyro Ball" - ], - "evolutions": [ - { - "pokemon": 544 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "544": { - "name": "Whirlipede", - "forms": { - "2036": { - "name": "Normal", - "proto": "WHIRLIPEDE_NORMAL" - }, - "2037": { - "name": "Shadow", - "proto": "WHIRLIPEDE_SHADOW" - }, - "2038": { - "name": "Purified", - "proto": "WHIRLIPEDE_PURIFIED" - } - }, - "default_form_id": 2036, - "pokedex_id": 544, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Poison" - ], - "attack": 100, - "defense": 173, - "stamina": 120, - "height": 1.2, - "weight": 58.5, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Bug Bite", - "Poison Sting" - ], - "charged_moves": [ - "Signal Beam", - "Sludge Bomb", - "Gyro Ball" - ], - "evolutions": [ - { - "pokemon": 545 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "545": { - "name": "Scolipede", - "forms": { - "2039": { - "name": "Normal", - "proto": "SCOLIPEDE_NORMAL" - }, - "2040": { - "name": "Shadow", - "proto": "SCOLIPEDE_SHADOW" - }, - "2041": { - "name": "Purified", - "proto": "SCOLIPEDE_PURIFIED" - } - }, - "default_form_id": 2039, - "pokedex_id": 545, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Poison" - ], - "attack": 203, - "defense": 175, - "stamina": 155, - "height": 2.5, - "weight": 200.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Bug Bite", - "Poison Jab" - ], - "charged_moves": [ - "Megahorn", - "Sludge Bomb", - "Gyro Ball", - "X Scissor" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "546": { - "name": "Cottonee", - "forms": { - "2042": { - "name": "Normal", - "proto": "COTTONEE_NORMAL" - }, - "2043": { - "name": "Shadow", - "proto": "COTTONEE_SHADOW" - }, - "2044": { - "name": "Purified", - "proto": "COTTONEE_PURIFIED" - } - }, - "default_form_id": 2042, - "pokedex_id": 546, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass", - "Fairy" - ], - "attack": 71, - "defense": 111, - "stamina": 120, - "height": 0.3, - "weight": 0.6, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Charm", - "Razor Leaf" - ], - "charged_moves": [ - "Energy Ball", - "Seed Bomb", - "Grass Knot" - ], - "evolutions": [ - { - "pokemon": 547 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "547": { - "name": "Whimsicott", - "forms": { - "2045": { - "name": "Normal", - "proto": "WHIMSICOTT_NORMAL" - }, - "2046": { - "name": "Shadow", - "proto": "WHIMSICOTT_SHADOW" - }, - "2047": { - "name": "Purified", - "proto": "WHIMSICOTT_PURIFIED" - } - }, - "default_form_id": 2045, - "pokedex_id": 547, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass", - "Fairy" - ], - "attack": 164, - "defense": 176, - "stamina": 155, - "height": 0.7, - "weight": 6.6, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Charm", - "Razor Leaf" - ], - "charged_moves": [ - "Grass Knot", - "Hurricane", - "Moonblast" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "548": { - "name": "Petilil", - "forms": { - "2048": { - "name": "Normal", - "proto": "PETILIL_NORMAL" - }, - "2049": { - "name": "Shadow", - "proto": "PETILIL_SHADOW" - }, - "2050": { - "name": "Purified", - "proto": "PETILIL_PURIFIED" - } - }, - "default_form_id": 2048, - "pokedex_id": 548, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass" - ], - "attack": 119, - "defense": 91, - "stamina": 128, - "height": 0.5, - "weight": 6.6, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Charm", - "Hidden Power" - ], - "charged_moves": [ - "Energy Ball", - "Seed Bomb" - ], - "evolutions": [ - { - "pokemon": 549 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "549": { - "name": "Lilligant", - "forms": { - "2051": { - "name": "Normal", - "proto": "LILLIGANT_NORMAL" - }, - "2052": { - "name": "Shadow", - "proto": "LILLIGANT_SHADOW" - }, - "2053": { - "name": "Purified", - "proto": "LILLIGANT_PURIFIED" - } - }, - "default_form_id": 2051, - "pokedex_id": 549, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass" - ], - "attack": 214, - "defense": 155, - "stamina": 172, - "height": 1.1, - "weight": 16.3, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Charm", - "Hidden Power" - ], - "charged_moves": [ - "Petal Blizzard", - "Hyper Beam", - "Solar Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "550": { - "name": "Basculin", - "forms": { - "136": { - "name": "Red Striped", - "proto": "BASCULIN_RED_STRIPED" - }, - "137": { - "name": "Blue Striped", - "proto": "BASCULIN_BLUE_STRIPED" - } - }, - "default_form_id": 136, - "pokedex_id": 550, - "genId": "5", - "generation": "Unova", - "types": [ - "Water" - ], - "attack": 189, - "defense": 129, - "stamina": 172, - "height": 1, - "weight": 18, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Water Gun" - ], - "charged_moves": [ - "Aqua Jet", - "Aqua Tail", - "Muddy Water" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "551": { - "name": "Sandile", - "forms": { - "2054": { - "name": "Normal", - "proto": "SANDILE_NORMAL" - }, - "2055": { - "name": "Shadow", - "proto": "SANDILE_SHADOW" - }, - "2056": { - "name": "Purified", - "proto": "SANDILE_PURIFIED" - } - }, - "default_form_id": 2054, - "pokedex_id": 551, - "genId": "5", - "generation": "Unova", - "types": [ - "Ground", - "Dark" - ], - "attack": 132, - "defense": 69, - "stamina": 137, - "height": 0.7, - "weight": 15.2, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Bite", - "Mud Slap" - ], - "charged_moves": [ - "Dig", - "Crunch", - "Bulldoze" - ], - "evolutions": [ - { - "pokemon": 552 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "552": { - "name": "Krokorok", - "forms": { - "2057": { - "name": "Normal", - "proto": "KROKOROK_NORMAL" - }, - "2058": { - "name": "Shadow", - "proto": "KROKOROK_SHADOW" - }, - "2059": { - "name": "Purified", - "proto": "KROKOROK_PURIFIED" - } - }, - "default_form_id": 2057, - "pokedex_id": 552, - "genId": "5", - "generation": "Unova", - "types": [ - "Ground", - "Dark" - ], - "attack": 155, - "defense": 90, - "stamina": 155, - "height": 1, - "weight": 33.4, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Bite", - "Mud Slap" - ], - "charged_moves": [ - "Earthquake", - "Crunch", - "Bulldoze" - ], - "evolutions": [ - { - "pokemon": 553 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "553": { - "name": "Krookodile", - "forms": { - "2060": { - "name": "Normal", - "proto": "KROOKODILE_NORMAL" - }, - "2061": { - "name": "Shadow", - "proto": "KROOKODILE_SHADOW" - }, - "2062": { - "name": "Purified", - "proto": "KROOKODILE_PURIFIED" - } - }, - "default_form_id": 2060, - "pokedex_id": 553, - "genId": "5", - "generation": "Unova", - "types": [ - "Ground", - "Dark" - ], - "attack": 229, - "defense": 158, - "stamina": 216, - "height": 1.5, - "weight": 96.3, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Snarl", - "Mud Slap" - ], - "charged_moves": [ - "Earthquake", - "Crunch", - "Outrage" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "554": { - "name": "Darumaka", - "forms": { - "2063": { - "name": "Normal", - "proto": "DARUMAKA_NORMAL", - "evolutions": [ - { - "pokemon": 555, - "form": 138 - } - ] - }, - "2064": { - "name": "Shadow", - "proto": "DARUMAKA_SHADOW" - }, - "2065": { - "name": "Purified", - "proto": "DARUMAKA_PURIFIED" - }, - "2341": { - "name": "Galarian", - "proto": "DARUMAKA_GALARIAN", - "evolutions": [ - { - "pokemon": 555, - "form": 2342 - } - ], - "height": 0.7, - "weight": 40, - "quick_moves": [ - "Tackle", - "Ice Fang" - ], - "charged_moves": [ - "Ice Punch", - "Ice Beam" - ], - "types": [ - "Ice" - ] - } - }, - "default_form_id": 2063, - "pokedex_id": 554, - "genId": "5", - "generation": "Unova", - "types": [ - "Fire" - ], - "attack": 153, - "defense": 86, - "stamina": 172, - "height": 0.6, - "weight": 37.5, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Tackle", - "Fire Fang" - ], - "charged_moves": [ - "Fire Punch", - "Flame Charge" - ], - "evolutions": [ - { - "pokemon": 555, - "form": 138 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "555": { - "name": "Darmanitan", - "forms": { - "138": { - "name": "Standard", - "proto": "DARMANITAN_STANDARD" - }, - "139": { - "name": "Zen", - "proto": "DARMANITAN_ZEN", - "attack": 243, - "defense": 202, - "stamina": 233, - "types": [ - "Fire", - "Psychic" - ] - }, - "2342": { - "name": "Galarian Standard", - "proto": "DARMANITAN_GALARIAN_STANDARD", - "height": 1.7, - "weight": 120, - "quick_moves": [ - "Tackle", - "Ice Fang" - ], - "charged_moves": [ - "Overheat", - "Avalanche", - "Super Power", - "Ice Punch" - ], - "types": [ - "Ice" - ] - }, - "2343": { - "name": "Galarian Zen", - "proto": "DARMANITAN_GALARIAN_ZEN", - "attack": 323, - "defense": 123, - "stamina": 233, - "height": 1.7, - "weight": 120, - "quick_moves": [ - "Tackle", - "Ice Fang" - ], - "charged_moves": [ - "Overheat", - "Avalanche", - "Super Power", - "Ice Punch" - ], - "types": [ - "Ice", - "Fire" - ] - } - }, - "default_form_id": 138, - "pokedex_id": 555, - "genId": "5", - "generation": "Unova", - "types": [ - "Fire" - ], - "attack": 263, - "defense": 114, - "stamina": 233, - "height": 1.3, - "weight": 92.9, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Tackle", - "Fire Fang", - "Incinerate" - ], - "charged_moves": [ - "Overheat", - "Focus Blast", - "Psychic", - "Rock Slide" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "556": { - "name": "Maractus", - "forms": { - "2066": { - "name": "Normal", - "proto": "MARACTUS_NORMAL" - }, - "2067": { - "name": "Shadow", - "proto": "MARACTUS_SHADOW" - }, - "2068": { - "name": "Purified", - "proto": "MARACTUS_PURIFIED" - } - }, - "default_form_id": 2066, - "pokedex_id": 556, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass" - ], - "attack": 201, - "defense": 130, - "stamina": 181, - "height": 1, - "weight": 28, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Bullet Seed", - "Poison Jab" - ], - "charged_moves": [ - "Aerial Ace", - "Petal Blizzard", - "Solar Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "557": { - "name": "Dwebble", - "forms": { - "2069": { - "name": "Normal", - "proto": "DWEBBLE_NORMAL" - }, - "2070": { - "name": "Shadow", - "proto": "DWEBBLE_SHADOW" - }, - "2071": { - "name": "Purified", - "proto": "DWEBBLE_PURIFIED" - } - }, - "default_form_id": 2069, - "pokedex_id": 557, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Rock" - ], - "attack": 118, - "defense": 128, - "stamina": 137, - "height": 0.3, - "weight": 14.5, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Cut", - "Smack Down" - ], - "charged_moves": [ - "Rock Blast", - "X Scissor", - "Rock Tomb" - ], - "evolutions": [ - { - "pokemon": 558 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "558": { - "name": "Crustle", - "forms": { - "2072": { - "name": "Normal", - "proto": "CRUSTLE_NORMAL" - }, - "2073": { - "name": "Shadow", - "proto": "CRUSTLE_SHADOW" - }, - "2074": { - "name": "Purified", - "proto": "CRUSTLE_PURIFIED" - } - }, - "default_form_id": 2072, - "pokedex_id": 558, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Rock" - ], - "attack": 188, - "defense": 200, - "stamina": 172, - "height": 1.4, - "weight": 200, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Fury Cutter", - "Smack Down" - ], - "charged_moves": [ - "Rock Blast", - "X Scissor", - "Rock Slide" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "559": { - "name": "Scraggy", - "forms": { - "2075": { - "name": "Normal", - "proto": "SCRAGGY_NORMAL" - }, - "2076": { - "name": "Shadow", - "proto": "SCRAGGY_SHADOW" - }, - "2077": { - "name": "Purified", - "proto": "SCRAGGY_PURIFIED" - } - }, - "default_form_id": 2075, - "pokedex_id": 559, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark", - "Fighting" - ], - "attack": 132, - "defense": 132, - "stamina": 137, - "height": 0.6, - "weight": 11.8, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Rock Smash", - "Feint Attack" - ], - "charged_moves": [ - "Acid Spray", - "Brick Break", - "Foul Play" - ], - "evolutions": [ - { - "pokemon": 560 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "560": { - "name": "Scrafty", - "forms": { - "2078": { - "name": "Normal", - "proto": "SCRAFTY_NORMAL" - }, - "2079": { - "name": "Shadow", - "proto": "SCRAFTY_SHADOW" - }, - "2080": { - "name": "Purified", - "proto": "SCRAFTY_PURIFIED" - } - }, - "default_form_id": 2078, - "pokedex_id": 560, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark", - "Fighting" - ], - "attack": 163, - "defense": 222, - "stamina": 163, - "height": 1.1, - "weight": 30, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Counter", - "Snarl" - ], - "charged_moves": [ - "Acid Spray", - "Power Up", - "Foul Play" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "561": { - "name": "Sigilyph", - "forms": { - "2081": { - "name": "Normal", - "proto": "SIGILYPH_NORMAL" - }, - "2082": { - "name": "Shadow", - "proto": "SIGILYPH_SHADOW" - }, - "2083": { - "name": "Purified", - "proto": "SIGILYPH_PURIFIED" - } - }, - "default_form_id": 2081, - "pokedex_id": 561, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic", - "Flying" - ], - "attack": 204, - "defense": 167, - "stamina": 176, - "height": 1.4, - "weight": 14, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Air Slash", - "Zen Headbutt" - ], - "charged_moves": [ - "Air Cutter", - "Psybeam", - "Ancient Power", - "Signal Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "562": { - "name": "Yamask", - "forms": { - "2084": { - "name": "Normal", - "proto": "YAMASK_NORMAL", - "evolutions": [ - { - "pokemon": 563, - "form": 2087 - } - ] - }, - "2085": { - "name": "Shadow", - "proto": "YAMASK_SHADOW", - "evolutions": [ - { - "pokemon": 563, - "form": 2088 - } - ] - }, - "2086": { - "name": "Purified", - "proto": "YAMASK_PURIFIED", - "evolutions": [ - { - "pokemon": 563, - "form": 2089 - } - ] - }, - "2344": { - "name": "Galarian", - "proto": "YAMASK_GALARIAN", - "evolutions": [ - { - "pokemon": 867, - "form": 2516 - } - ], - "quick_moves": [ - "Astonish" - ], - "charged_moves": [ - "Night Shade", - "Rock Tomb" - ], - "types": [ - "Ground", - "Ghost" - ] - } - }, - "default_form_id": 2084, - "pokedex_id": 562, - "genId": "5", - "generation": "Unova", - "types": [ - "Ghost" - ], - "attack": 95, - "defense": 141, - "stamina": 116, - "height": 0.5, - "weight": 1.5, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Astonish", - "Zen Headbutt" - ], - "charged_moves": [ - "Shadow Ball", - "Dark Pulse", - "Ominous Wind" - ], - "evolutions": [ - { - "pokemon": 563, - "form": 2087 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "563": { - "name": "Cofagrigus", - "forms": { - "2087": { - "name": "Normal", - "proto": "COFAGRIGUS_NORMAL" - }, - "2088": { - "name": "Shadow", - "proto": "COFAGRIGUS_SHADOW" - }, - "2089": { - "name": "Purified", - "proto": "COFAGRIGUS_PURIFIED" - } - }, - "default_form_id": 2087, - "pokedex_id": 563, - "genId": "5", - "generation": "Unova", - "types": [ - "Ghost" - ], - "attack": 163, - "defense": 237, - "stamina": 151, - "height": 1.7, - "weight": 76.5, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Astonish", - "Zen Headbutt" - ], - "charged_moves": [ - "Shadow Ball", - "Dark Pulse", - "Psychic" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "564": { - "name": "Tirtouga", - "forms": { - "2090": { - "name": "Normal", - "proto": "TIRTOUGA_NORMAL" - }, - "2091": { - "name": "Shadow", - "proto": "TIRTOUGA_SHADOW" - }, - "2092": { - "name": "Purified", - "proto": "TIRTOUGA_PURIFIED" - } - }, - "default_form_id": 2090, - "pokedex_id": 564, - "genId": "5", - "generation": "Unova", - "types": [ - "Water", - "Rock" - ], - "attack": 134, - "defense": 146, - "stamina": 144, - "height": 0.7, - "weight": 16.5, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Water Gun", - "Bite" - ], - "charged_moves": [ - "Surf", - "Ancient Power", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 565 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "565": { - "name": "Carracosta", - "forms": { - "2093": { - "name": "Normal", - "proto": "CARRACOSTA_NORMAL" - }, - "2094": { - "name": "Shadow", - "proto": "CARRACOSTA_SHADOW" - }, - "2095": { - "name": "Purified", - "proto": "CARRACOSTA_PURIFIED" - } - }, - "default_form_id": 2093, - "pokedex_id": 565, - "genId": "5", - "generation": "Unova", - "types": [ - "Water", - "Rock" - ], - "attack": 192, - "defense": 197, - "stamina": 179, - "height": 1.2, - "weight": 81, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Water Gun", - "Rock Throw" - ], - "charged_moves": [ - "Surf", - "Ancient Power", - "Body Slam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "566": { - "name": "Archen", - "forms": { - "2096": { - "name": "Normal", - "proto": "ARCHEN_NORMAL" - }, - "2097": { - "name": "Shadow", - "proto": "ARCHEN_SHADOW" - }, - "2098": { - "name": "Purified", - "proto": "ARCHEN_PURIFIED" - } - }, - "default_form_id": 2096, - "pokedex_id": 566, - "genId": "5", - "generation": "Unova", - "types": [ - "Rock", - "Flying" - ], - "attack": 213, - "defense": 89, - "stamina": 146, - "height": 0.5, - "weight": 9.5, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Quick Attack", - "Wing Attack" - ], - "charged_moves": [ - "Dragon Claw", - "Ancient Power", - "Crunch" - ], - "evolutions": [ - { - "pokemon": 567 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "567": { - "name": "Archeops", - "forms": { - "2099": { - "name": "Normal", - "proto": "ARCHEOPS_NORMAL" - }, - "2100": { - "name": "Shadow", - "proto": "ARCHEOPS_SHADOW" - }, - "2101": { - "name": "Purified", - "proto": "ARCHEOPS_PURIFIED" - } - }, - "default_form_id": 2099, - "pokedex_id": 567, - "genId": "5", - "generation": "Unova", - "types": [ - "Rock", - "Flying" - ], - "attack": 292, - "defense": 139, - "stamina": 181, - "height": 1.4, - "weight": 32, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Steel Wing", - "Wing Attack" - ], - "charged_moves": [ - "Dragon Claw", - "Ancient Power", - "Crunch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "568": { - "name": "Trubbish", - "forms": { - "2102": { - "name": "Normal", - "proto": "TRUBBISH_NORMAL" - }, - "2103": { - "name": "Shadow", - "proto": "TRUBBISH_SHADOW" - }, - "2104": { - "name": "Purified", - "proto": "TRUBBISH_PURIFIED" - } - }, - "default_form_id": 2102, - "pokedex_id": 568, - "genId": "5", - "generation": "Unova", - "types": [ - "Poison" - ], - "attack": 96, - "defense": 122, - "stamina": 137, - "height": 0.6, - "weight": 31, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Pound", - "Take Down" - ], - "charged_moves": [ - "Gunk Shot", - "Seed Bomb", - "Gunk Shot" - ], - "evolutions": [ - { - "pokemon": 569 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "569": { - "name": "Garbodor", - "forms": { - "2105": { - "name": "Normal", - "proto": "GARBODOR_NORMAL" - }, - "2106": { - "name": "Shadow", - "proto": "GARBODOR_SHADOW" - }, - "2107": { - "name": "Purified", - "proto": "GARBODOR_PURIFIED" - } - }, - "default_form_id": 2105, - "pokedex_id": 569, - "genId": "5", - "generation": "Unova", - "types": [ - "Poison" - ], - "attack": 181, - "defense": 164, - "stamina": 190, - "height": 1.9, - "weight": 107.3, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Infestation", - "Take Down" - ], - "charged_moves": [ - "Acid Spray", - "Seed Bomb", - "Gunk Shot", - "Body Slam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "570": { - "name": "Zorua", - "forms": { - "2108": { - "name": "Normal", - "proto": "ZORUA_NORMAL" - }, - "2109": { - "name": "Shadow", - "proto": "ZORUA_SHADOW" - }, - "2110": { - "name": "Purified", - "proto": "ZORUA_PURIFIED" - } - }, - "default_form_id": 2108, - "pokedex_id": 570, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark" - ], - "attack": 153, - "defense": 78, - "stamina": 120, - "height": 0.7, - "weight": 12.5, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Scratch", - "Feint Attack" - ], - "charged_moves": [ - "Foul Play", - "Aerial Ace", - "Dark Pulse" - ], - "evolutions": [ - { - "pokemon": 571 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "571": { - "name": "Zoroark", - "forms": { - "2111": { - "name": "Normal", - "proto": "ZOROARK_NORMAL" - }, - "2112": { - "name": "Shadow", - "proto": "ZOROARK_SHADOW" - }, - "2113": { - "name": "Purified", - "proto": "ZOROARK_PURIFIED" - } - }, - "default_form_id": 2111, - "pokedex_id": 571, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark" - ], - "attack": 250, - "defense": 127, - "stamina": 155, - "height": 1.6, - "weight": 81.1, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Shadow Claw", - "Snarl" - ], - "charged_moves": [ - "Foul Play", - "Sludge Bomb", - "Flamethrower" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "572": { - "name": "Minccino", - "forms": { - "2114": { - "name": "Normal", - "proto": "MINCCINO_NORMAL" - }, - "2115": { - "name": "Shadow", - "proto": "MINCCINO_SHADOW" - }, - "2116": { - "name": "Purified", - "proto": "MINCCINO_PURIFIED" - } - }, - "default_form_id": 2114, - "pokedex_id": 572, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal" - ], - "attack": 98, - "defense": 80, - "stamina": 146, - "height": 0.4, - "weight": 5.8, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Pound", - "Charm" - ], - "charged_moves": [ - "Swift", - "Thunderbolt", - "Aqua Tail" - ], - "evolutions": [ - { - "pokemon": 573 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "573": { - "name": "Cinccino", - "forms": { - "2117": { - "name": "Normal", - "proto": "CINCCINO_NORMAL" - }, - "2118": { - "name": "Shadow", - "proto": "CINCCINO_SHADOW" - }, - "2119": { - "name": "Purified", - "proto": "CINCCINO_PURIFIED" - } - }, - "default_form_id": 2117, - "pokedex_id": 573, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal" - ], - "attack": 198, - "defense": 130, - "stamina": 181, - "height": 0.5, - "weight": 7.5, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Pound", - "Charm" - ], - "charged_moves": [ - "Hyper Beam", - "Thunderbolt", - "Aqua Tail" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "574": { - "name": "Gothita", - "forms": { - "2120": { - "name": "Normal", - "proto": "GOTHITA_NORMAL" - }, - "2121": { - "name": "Shadow", - "proto": "GOTHITA_SHADOW" - }, - "2122": { - "name": "Purified", - "proto": "GOTHITA_PURIFIED" - } - }, - "default_form_id": 2120, - "pokedex_id": 574, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic" - ], - "attack": 98, - "defense": 112, - "stamina": 128, - "height": 0.4, - "weight": 5.8, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Pound", - "Confusion" - ], - "charged_moves": [ - "Psybeam", - "Psyshock", - "Psychic" - ], - "evolutions": [ - { - "pokemon": 575 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "575": { - "name": "Gothorita", - "forms": { - "2123": { - "name": "Normal", - "proto": "GOTHORITA_NORMAL" - }, - "2124": { - "name": "Shadow", - "proto": "GOTHORITA_SHADOW" - }, - "2125": { - "name": "Purified", - "proto": "GOTHORITA_PURIFIED" - } - }, - "default_form_id": 2123, - "pokedex_id": 575, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic" - ], - "attack": 137, - "defense": 153, - "stamina": 155, - "height": 0.7, - "weight": 18, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Pound", - "Confusion" - ], - "charged_moves": [ - "Psybeam", - "Futuresight", - "Psychic" - ], - "evolutions": [ - { - "pokemon": 576 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "576": { - "name": "Gothitelle", - "forms": { - "2126": { - "name": "Normal", - "proto": "GOTHITELLE_NORMAL" - }, - "2127": { - "name": "Shadow", - "proto": "GOTHITELLE_SHADOW" - }, - "2128": { - "name": "Purified", - "proto": "GOTHITELLE_PURIFIED" - } - }, - "default_form_id": 2126, - "pokedex_id": 576, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic" - ], - "attack": 176, - "defense": 205, - "stamina": 172, - "height": 1.5, - "weight": 44, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Charm", - "Confusion" - ], - "charged_moves": [ - "Rock Slide", - "Futuresight", - "Psychic" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "577": { - "name": "Solosis", - "forms": { - "2129": { - "name": "Normal", - "proto": "SOLOSIS_NORMAL" - }, - "2130": { - "name": "Shadow", - "proto": "SOLOSIS_SHADOW" - }, - "2131": { - "name": "Purified", - "proto": "SOLOSIS_PURIFIED" - } - }, - "default_form_id": 2129, - "pokedex_id": 577, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic" - ], - "attack": 170, - "defense": 83, - "stamina": 128, - "height": 0.3, - "weight": 1, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Hidden Power", - "Zen Headbutt" - ], - "charged_moves": [ - "Psyshock", - "Night Shade", - "Thunder" - ], - "evolutions": [ - { - "pokemon": 578 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "578": { - "name": "Duosion", - "forms": { - "2132": { - "name": "Normal", - "proto": "DUOSION_NORMAL" - }, - "2133": { - "name": "Shadow", - "proto": "DUOSION_SHADOW" - }, - "2134": { - "name": "Purified", - "proto": "DUOSION_PURIFIED" - } - }, - "default_form_id": 2132, - "pokedex_id": 578, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic" - ], - "attack": 208, - "defense": 103, - "stamina": 163, - "height": 0.6, - "weight": 8, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Hidden Power", - "Zen Headbutt" - ], - "charged_moves": [ - "Psyshock", - "Night Shade", - "Thunder" - ], - "evolutions": [ - { - "pokemon": 579 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "579": { - "name": "Reuniclus", - "forms": { - "2135": { - "name": "Normal", - "proto": "REUNICLUS_NORMAL" - }, - "2136": { - "name": "Shadow", - "proto": "REUNICLUS_SHADOW" - }, - "2137": { - "name": "Purified", - "proto": "REUNICLUS_PURIFIED" - } - }, - "default_form_id": 2135, - "pokedex_id": 579, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic" - ], - "attack": 214, - "defense": 148, - "stamina": 242, - "height": 1, - "weight": 20.1, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Hidden Power", - "Zen Headbutt" - ], - "charged_moves": [ - "Futuresight", - "Shadow Ball", - "Thunder" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "580": { - "name": "Ducklett", - "forms": { - "2138": { - "name": "Normal", - "proto": "DUCKLETT_NORMAL" - }, - "2139": { - "name": "Shadow", - "proto": "DUCKLETT_SHADOW" - }, - "2140": { - "name": "Purified", - "proto": "DUCKLETT_PURIFIED" - } - }, - "default_form_id": 2138, - "pokedex_id": 580, - "genId": "5", - "generation": "Unova", - "types": [ - "Water", - "Flying" - ], - "attack": 84, - "defense": 96, - "stamina": 158, - "height": 0.5, - "weight": 5.5, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Water Gun", - "Wing Attack" - ], - "charged_moves": [ - "Aerial Ace", - "Bubble Beam", - "Brave Bird" - ], - "evolutions": [ - { - "pokemon": 581 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "581": { - "name": "Swanna", - "forms": { - "2141": { - "name": "Normal", - "proto": "SWANNA_NORMAL" - }, - "2142": { - "name": "Shadow", - "proto": "SWANNA_SHADOW" - }, - "2143": { - "name": "Purified", - "proto": "SWANNA_PURIFIED" - } - }, - "default_form_id": 2141, - "pokedex_id": 581, - "genId": "5", - "generation": "Unova", - "types": [ - "Water", - "Flying" - ], - "attack": 182, - "defense": 132, - "stamina": 181, - "height": 1.3, - "weight": 24.2, - "flee_rate": 0.12, - "capture_rate": 0.4, - "quick_moves": [ - "Water Gun", - "Air Slash" - ], - "charged_moves": [ - "Ice Beam", - "Bubble Beam", - "Hurricane" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "582": { - "name": "Vanillite", - "forms": { - "2144": { - "name": "Normal", - "proto": "VANILLITE_NORMAL" - }, - "2145": { - "name": "Shadow", - "proto": "VANILLITE_SHADOW" - }, - "2146": { - "name": "Purified", - "proto": "VANILLITE_PURIFIED" - } - }, - "default_form_id": 2144, - "pokedex_id": 582, - "genId": "5", - "generation": "Unova", - "types": [ - "Ice" - ], - "attack": 118, - "defense": 106, - "stamina": 113, - "height": 0.4, - "weight": 5.7, - "flee_rate": 0.07, - "capture_rate": 0.4, - "quick_moves": [ - "Powder Snow", - "Astonish" - ], - "charged_moves": [ - "Icy Wind", - "Ice Beam", - "Signal Beam" - ], - "evolutions": [ - { - "pokemon": 583 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "583": { - "name": "Vanillish", - "forms": { - "2147": { - "name": "Normal", - "proto": "VANILLISH_NORMAL" - }, - "2148": { - "name": "Shadow", - "proto": "VANILLISH_SHADOW" - }, - "2149": { - "name": "Purified", - "proto": "VANILLISH_PURIFIED" - } - }, - "default_form_id": 2147, - "pokedex_id": 583, - "genId": "5", - "generation": "Unova", - "types": [ - "Ice" - ], - "attack": 151, - "defense": 138, - "stamina": 139, - "height": 1.1, - "weight": 41, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Frost Breath", - "Astonish" - ], - "charged_moves": [ - "Icy Wind", - "Ice Beam", - "Signal Beam" - ], - "evolutions": [ - { - "pokemon": 584 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "584": { - "name": "Vanilluxe", - "forms": { - "2150": { - "name": "Normal", - "proto": "VANILLUXE_NORMAL" - }, - "2151": { - "name": "Shadow", - "proto": "VANILLUXE_SHADOW" - }, - "2152": { - "name": "Purified", - "proto": "VANILLUXE_PURIFIED" - } - }, - "default_form_id": 2150, - "pokedex_id": 584, - "genId": "5", - "generation": "Unova", - "types": [ - "Ice" - ], - "attack": 218, - "defense": 184, - "stamina": 174, - "height": 1.3, - "weight": 57.5, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Frost Breath", - "Astonish" - ], - "charged_moves": [ - "Blizzard", - "Flash Cannon", - "Signal Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "585": { - "name": "Deerling", - "forms": { - "585": { - "name": "Spring", - "proto": "DEERLING_SPRING", - "evolutions": [ - { - "pokemon": 586, - "form": 589 - } - ] - }, - "586": { - "name": "Summer", - "proto": "DEERLING_SUMMER", - "evolutions": [ - { - "pokemon": 586, - "form": 590 - } - ] - }, - "587": { - "name": "Autumn", - "proto": "DEERLING_AUTUMN", - "evolutions": [ - { - "pokemon": 586, - "form": 591 - } - ] - }, - "588": { - "name": "Winter", - "proto": "DEERLING_WINTER", - "evolutions": [ - { - "pokemon": 586, - "form": 592 - } - ] - } - }, - "default_form_id": 585, - "pokedex_id": 585, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal", - "Grass" - ], - "attack": 115, - "defense": 100, - "stamina": 155, - "height": 0.6, - "weight": 19.5, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Tackle", - "Take Down" - ], - "charged_moves": [ - "Energy Ball", - "Seed Bomb", - "Wild Charge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "586": { - "name": "Sawsbuck", - "forms": { - "589": { - "name": "Spring", - "proto": "SAWSBUCK_SPRING" - }, - "590": { - "name": "Summer", - "proto": "SAWSBUCK_SUMMER" - }, - "591": { - "name": "Autumn", - "proto": "SAWSBUCK_AUTUMN" - }, - "592": { - "name": "Winter", - "proto": "SAWSBUCK_WINTER" - } - }, - "default_form_id": 589, - "pokedex_id": 586, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal", - "Grass" - ], - "attack": 198, - "defense": 146, - "stamina": 190, - "height": 1.9, - "weight": 92.5, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Feint Attack", - "Take Down" - ], - "charged_moves": [ - "Megahorn", - "Solar Beam", - "Wild Charge", - "Hyper Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "587": { - "name": "Emolga", - "forms": { - "2153": { - "name": "Normal", - "proto": "EMOLGA_NORMAL" - }, - "2154": { - "name": "Shadow", - "proto": "EMOLGA_SHADOW" - }, - "2155": { - "name": "Purified", - "proto": "EMOLGA_PURIFIED" - } - }, - "default_form_id": 2153, - "pokedex_id": 587, - "genId": "5", - "generation": "Unova", - "types": [ - "Electric", - "Flying" - ], - "attack": 158, - "defense": 127, - "stamina": 146, - "height": 0.4, - "weight": 5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Thunder Shock", - "Quick Attack" - ], - "charged_moves": [ - "Discharge", - "Aerial Ace", - "Thunderbolt" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "588": { - "name": "Karrablast", - "forms": { - "2156": { - "name": "Normal", - "proto": "KARRABLAST_NORMAL" - }, - "2157": { - "name": "Shadow", - "proto": "KARRABLAST_SHADOW" - }, - "2158": { - "name": "Purified", - "proto": "KARRABLAST_PURIFIED" - } - }, - "default_form_id": 2156, - "pokedex_id": 588, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug" - ], - "attack": 137, - "defense": 87, - "stamina": 137, - "height": 0.5, - "weight": 5.9, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Peck", - "Fury Cutter" - ], - "charged_moves": [ - "Signal Beam", - "X Scissor", - "Drill Run", - "Aerial Ace" - ], - "evolutions": [ - { - "pokemon": 589 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "589": { - "name": "Escavalier", - "forms": { - "2159": { - "name": "Normal", - "proto": "ESCAVALIER_NORMAL" - }, - "2160": { - "name": "Shadow", - "proto": "ESCAVALIER_SHADOW" - }, - "2161": { - "name": "Purified", - "proto": "ESCAVALIER_PURIFIED" - } - }, - "default_form_id": 2159, - "pokedex_id": 589, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Steel" - ], - "attack": 223, - "defense": 187, - "stamina": 172, - "height": 1, - "weight": 33, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Counter", - "Bug Bite" - ], - "charged_moves": [ - "Megahorn", - "Acid Spray", - "Drill Run", - "Aerial Ace" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "590": { - "name": "Foongus", - "forms": { - "2162": { - "name": "Normal", - "proto": "FOONGUS_NORMAL" - }, - "2163": { - "name": "Shadow", - "proto": "FOONGUS_SHADOW" - }, - "2164": { - "name": "Purified", - "proto": "FOONGUS_PURIFIED" - } - }, - "default_form_id": 2162, - "pokedex_id": 590, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass", - "Poison" - ], - "attack": 97, - "defense": 91, - "stamina": 170, - "height": 0.2, - "weight": 1, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Astonish", - "Feint Attack" - ], - "charged_moves": [ - "Energy Ball", - "Body Slam", - "Grass Knot" - ], - "evolutions": [ - { - "pokemon": 591 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "591": { - "name": "Amoonguss", - "forms": { - "2165": { - "name": "Normal", - "proto": "AMOONGUSS_NORMAL" - }, - "2166": { - "name": "Shadow", - "proto": "AMOONGUSS_SHADOW" - }, - "2167": { - "name": "Purified", - "proto": "AMOONGUSS_PURIFIED" - } - }, - "default_form_id": 2165, - "pokedex_id": 591, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass", - "Poison" - ], - "attack": 155, - "defense": 139, - "stamina": 249, - "height": 0.6, - "weight": 10.5, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Astonish", - "Feint Attack" - ], - "charged_moves": [ - "Foul Play", - "Sludge Bomb", - "Grass Knot" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "592": { - "name": "Frillish", - "forms": { - "2168": { - "name": "Normal", - "proto": "FRILLISH_NORMAL", - "evolutions": [ - { - "pokemon": 593, - "form": 2171 - } - ] - }, - "2169": { - "name": "Shadow", - "proto": "FRILLISH_SHADOW" - }, - "2170": { - "name": "Purified", - "proto": "FRILLISH_PURIFIED" - }, - "2330": { - "name": "Female", - "proto": "FRILLISH_FEMALE", - "evolutions": [ - { - "pokemon": 593, - "form": 2331 - } - ] - } - }, - "default_form_id": 2168, - "pokedex_id": 592, - "genId": "5", - "generation": "Unova", - "types": [ - "Water", - "Ghost" - ], - "attack": 115, - "defense": 134, - "stamina": 146, - "height": 1.2, - "weight": 33, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Bubble", - "Hex" - ], - "charged_moves": [ - "Night Shade", - "Ice Beam", - "Ominous Wind" - ], - "evolutions": [ - { - "pokemon": 593 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "593": { - "name": "Jellicent", - "forms": { - "2171": { - "name": "Normal", - "proto": "JELLICENT_NORMAL" - }, - "2172": { - "name": "Shadow", - "proto": "JELLICENT_SHADOW" - }, - "2173": { - "name": "Purified", - "proto": "JELLICENT_PURIFIED" - }, - "2331": { - "name": "Female", - "proto": "JELLICENT_FEMALE" - } - }, - "default_form_id": 2171, - "pokedex_id": 593, - "genId": "5", - "generation": "Unova", - "types": [ - "Water", - "Ghost" - ], - "attack": 159, - "defense": 178, - "stamina": 225, - "height": 2.2, - "weight": 135, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Bubble", - "Hex" - ], - "charged_moves": [ - "Shadow Ball", - "Ice Beam", - "Bubble Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "594": { - "name": "Alomomola", - "forms": { - "2174": { - "name": "Normal", - "proto": "ALOMOMOLA_NORMAL" - }, - "2175": { - "name": "Shadow", - "proto": "ALOMOMOLA_SHADOW" - }, - "2176": { - "name": "Purified", - "proto": "ALOMOMOLA_PURIFIED" - } - }, - "default_form_id": 2174, - "pokedex_id": 594, - "genId": "5", - "generation": "Unova", - "types": [ - "Water" - ], - "attack": 138, - "defense": 131, - "stamina": 338, - "height": 1.2, - "weight": 31.6, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Waterfall", - "Hidden Power" - ], - "charged_moves": [ - "Hydro Pump", - "Blizzard", - "Psychic" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "595": { - "name": "Joltik", - "forms": { - "2177": { - "name": "Normal", - "proto": "JOLTIK_NORMAL" - }, - "2178": { - "name": "Shadow", - "proto": "JOLTIK_SHADOW" - }, - "2179": { - "name": "Purified", - "proto": "JOLTIK_PURIFIED" - } - }, - "default_form_id": 2177, - "pokedex_id": 595, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Electric" - ], - "attack": 110, - "defense": 98, - "stamina": 137, - "height": 0.1, - "weight": 0.6, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Charge Beam", - "Sucker Punch" - ], - "charged_moves": [ - "Cross Poison", - "Bug Buzz", - "Discharge" - ], - "evolutions": [ - { - "pokemon": 596 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "596": { - "name": "Galvantula", - "forms": { - "2180": { - "name": "Normal", - "proto": "GALVANTULA_NORMAL" - }, - "2181": { - "name": "Shadow", - "proto": "GALVANTULA_SHADOW" - }, - "2182": { - "name": "Purified", - "proto": "GALVANTULA_PURIFIED" - } - }, - "default_form_id": 2180, - "pokedex_id": 596, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Electric" - ], - "attack": 201, - "defense": 128, - "stamina": 172, - "height": 0.8, - "weight": 14.3, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Volt Switch", - "Fury Cutter" - ], - "charged_moves": [ - "Cross Poison", - "Bug Buzz", - "Discharge", - "Energy Ball", - "Lunge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "597": { - "name": "Ferroseed", - "forms": { - "2183": { - "name": "Normal", - "proto": "FERROSEED_NORMAL" - }, - "2184": { - "name": "Shadow", - "proto": "FERROSEED_SHADOW" - }, - "2185": { - "name": "Purified", - "proto": "FERROSEED_PURIFIED" - } - }, - "default_form_id": 2183, - "pokedex_id": 597, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass", - "Steel" - ], - "attack": 82, - "defense": 155, - "stamina": 127, - "height": 0.6, - "weight": 18.8, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Tackle", - "Metal Claw" - ], - "charged_moves": [ - "Gyro Ball", - "Flash Cannon", - "Iron Head" - ], - "evolutions": [ - { - "pokemon": 598 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "598": { - "name": "Ferrothorn", - "forms": { - "2186": { - "name": "Normal", - "proto": "FERROTHORN_NORMAL" - }, - "2187": { - "name": "Shadow", - "proto": "FERROTHORN_SHADOW" - }, - "2188": { - "name": "Purified", - "proto": "FERROTHORN_PURIFIED" - } - }, - "default_form_id": 2186, - "pokedex_id": 598, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass", - "Steel" - ], - "attack": 158, - "defense": 223, - "stamina": 179, - "height": 1, - "weight": 110, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Bullet Seed", - "Metal Claw" - ], - "charged_moves": [ - "Power Whip", - "Flash Cannon", - "Acid Spray", - "Thunder", - "Mirror Shot" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "599": { - "name": "Klink", - "forms": { - "2189": { - "name": "Normal", - "proto": "KLINK_NORMAL" - }, - "2190": { - "name": "Shadow", - "proto": "KLINK_SHADOW" - }, - "2191": { - "name": "Purified", - "proto": "KLINK_PURIFIED" - } - }, - "default_form_id": 2189, - "pokedex_id": 599, - "genId": "5", - "generation": "Unova", - "types": [ - "Steel" - ], - "attack": 98, - "defense": 121, - "stamina": 120, - "height": 0.3, - "weight": 21, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Volt Switch", - "Charge Beam" - ], - "charged_moves": [ - "Vice Grip", - "Discharge", - "Zap Cannon" - ], - "evolutions": [ - { - "pokemon": 600 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "600": { - "name": "Klang", - "forms": { - "2192": { - "name": "Normal", - "proto": "KLANG_NORMAL" - }, - "2193": { - "name": "Shadow", - "proto": "KLANG_SHADOW" - }, - "2194": { - "name": "Purified", - "proto": "KLANG_PURIFIED" - } - }, - "default_form_id": 2192, - "pokedex_id": 600, - "genId": "5", - "generation": "Unova", - "types": [ - "Steel" - ], - "attack": 150, - "defense": 174, - "stamina": 155, - "height": 0.6, - "weight": 51, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Thunder Shock", - "Charge Beam" - ], - "charged_moves": [ - "Vice Grip", - "Thunderbolt", - "Zap Cannon" - ], - "evolutions": [ - { - "pokemon": 601 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "601": { - "name": "Klinklang", - "forms": { - "2195": { - "name": "Normal", - "proto": "KLINKLANG_NORMAL" - }, - "2196": { - "name": "Shadow", - "proto": "KLINKLANG_SHADOW" - }, - "2197": { - "name": "Purified", - "proto": "KLINKLANG_PURIFIED" - } - }, - "default_form_id": 2195, - "pokedex_id": 601, - "genId": "5", - "generation": "Unova", - "types": [ - "Steel" - ], - "attack": 199, - "defense": 214, - "stamina": 155, - "height": 0.6, - "weight": 81, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Thunder Shock", - "Charge Beam" - ], - "charged_moves": [ - "Hyper Beam", - "Flash Cannon", - "Zap Cannon", - "Mirror Shot" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "602": { - "name": "Tynamo", - "forms": { - "2198": { - "name": "Normal", - "proto": "TYNAMO_NORMAL" - }, - "2199": { - "name": "Shadow", - "proto": "TYNAMO_SHADOW" - }, - "2200": { - "name": "Purified", - "proto": "TYNAMO_PURIFIED" - } - }, - "default_form_id": 2198, - "pokedex_id": 602, - "genId": "5", - "generation": "Unova", - "types": [ - "Electric" - ], - "attack": 105, - "defense": 78, - "stamina": 111, - "height": 0.2, - "weight": 0.3, - "flee_rate": 0.15, - "capture_rate": 0.4, - "quick_moves": [ - "Tackle", - "Spark" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 603 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "603": { - "name": "Eelektrik", - "forms": { - "2201": { - "name": "Normal", - "proto": "EELEKTRIK_NORMAL" - }, - "2202": { - "name": "Shadow", - "proto": "EELEKTRIK_SHADOW" - }, - "2203": { - "name": "Purified", - "proto": "EELEKTRIK_PURIFIED" - } - }, - "default_form_id": 2201, - "pokedex_id": 603, - "genId": "5", - "generation": "Unova", - "types": [ - "Electric" - ], - "attack": 156, - "defense": 130, - "stamina": 163, - "height": 1.2, - "weight": 22, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Acid", - "Spark" - ], - "charged_moves": [ - "Crunch", - "Thunderbolt", - "Discharge" - ], - "evolutions": [ - { - "pokemon": 604 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "604": { - "name": "Eelektross", - "forms": { - "2204": { - "name": "Normal", - "proto": "EELEKTROSS_NORMAL" - }, - "2205": { - "name": "Shadow", - "proto": "EELEKTROSS_SHADOW" - }, - "2206": { - "name": "Purified", - "proto": "EELEKTROSS_PURIFIED" - } - }, - "default_form_id": 2204, - "pokedex_id": 604, - "genId": "5", - "generation": "Unova", - "types": [ - "Electric" - ], - "attack": 217, - "defense": 152, - "stamina": 198, - "height": 2.1, - "weight": 80.5, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Acid", - "Spark" - ], - "charged_moves": [ - "Crunch", - "Thunderbolt", - "Acid Spray", - "Dragon Claw" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "605": { - "name": "Elgyem", - "forms": { - "2207": { - "name": "Normal", - "proto": "ELGYEM_NORMAL" - }, - "2208": { - "name": "Shadow", - "proto": "ELGYEM_SHADOW" - }, - "2209": { - "name": "Purified", - "proto": "ELGYEM_PURIFIED" - } - }, - "default_form_id": 2207, - "pokedex_id": 605, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic" - ], - "attack": 148, - "defense": 100, - "stamina": 146, - "height": 0.5, - "weight": 9, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Confusion", - "Astonish" - ], - "charged_moves": [ - "Psybeam", - "Dark Pulse", - "Psychic" - ], - "evolutions": [ - { - "pokemon": 606 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "606": { - "name": "Beheeyem", - "forms": { - "2210": { - "name": "Normal", - "proto": "BEHEEYEM_NORMAL" - }, - "2211": { - "name": "Shadow", - "proto": "BEHEEYEM_SHADOW" - }, - "2212": { - "name": "Purified", - "proto": "BEHEEYEM_PURIFIED" - } - }, - "default_form_id": 2210, - "pokedex_id": 606, - "genId": "5", - "generation": "Unova", - "types": [ - "Psychic" - ], - "attack": 221, - "defense": 163, - "stamina": 181, - "height": 1, - "weight": 34.5, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Confusion", - "Astonish" - ], - "charged_moves": [ - "Rock Slide", - "Dark Pulse", - "Psychic" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "607": { - "name": "Litwick", - "forms": { - "2213": { - "name": "Normal", - "proto": "LITWICK_NORMAL" - }, - "2214": { - "name": "Shadow", - "proto": "LITWICK_SHADOW" - }, - "2215": { - "name": "Purified", - "proto": "LITWICK_PURIFIED" - } - }, - "default_form_id": 2213, - "pokedex_id": 607, - "genId": "5", - "generation": "Unova", - "types": [ - "Ghost", - "Fire" - ], - "attack": 108, - "defense": 98, - "stamina": 137, - "height": 0.3, - "weight": 3.1, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Astonish", - "Ember" - ], - "charged_moves": [ - "Flame Charge", - "Flame Burst", - "Heat Wave" - ], - "evolutions": [ - { - "pokemon": 608 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "608": { - "name": "Lampent", - "forms": { - "2216": { - "name": "Normal", - "proto": "LAMPENT_NORMAL" - }, - "2217": { - "name": "Shadow", - "proto": "LAMPENT_SHADOW" - }, - "2218": { - "name": "Purified", - "proto": "LAMPENT_PURIFIED" - } - }, - "default_form_id": 2216, - "pokedex_id": 608, - "genId": "5", - "generation": "Unova", - "types": [ - "Ghost", - "Fire" - ], - "attack": 169, - "defense": 115, - "stamina": 155, - "height": 0.6, - "weight": 13, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Astonish", - "Ember" - ], - "charged_moves": [ - "Energy Ball", - "Flame Burst", - "Heat Wave" - ], - "evolutions": [ - { - "pokemon": 609 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "609": { - "name": "Chandelure", - "forms": { - "2219": { - "name": "Normal", - "proto": "CHANDELURE_NORMAL" - }, - "2220": { - "name": "Shadow", - "proto": "CHANDELURE_SHADOW" - }, - "2221": { - "name": "Purified", - "proto": "CHANDELURE_PURIFIED" - } - }, - "default_form_id": 2219, - "pokedex_id": 609, - "genId": "5", - "generation": "Unova", - "types": [ - "Ghost", - "Fire" - ], - "attack": 271, - "defense": 182, - "stamina": 155, - "height": 1, - "weight": 34.3, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Hex", - "Fire Spin", - "Incinerate" - ], - "charged_moves": [ - "Energy Ball", - "Shadow Ball", - "Overheat", - "Flame Charge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "610": { - "name": "Axew", - "forms": { - "2222": { - "name": "Normal", - "proto": "AXEW_NORMAL" - }, - "2223": { - "name": "Shadow", - "proto": "AXEW_SHADOW" - }, - "2224": { - "name": "Purified", - "proto": "AXEW_PURIFIED" - } - }, - "default_form_id": 2222, - "pokedex_id": 610, - "genId": "5", - "generation": "Unova", - "types": [ - "Dragon" - ], - "attack": 154, - "defense": 101, - "stamina": 130, - "height": 0.6, - "weight": 18, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Scratch", - "Iron Tail" - ], - "charged_moves": [ - "Dragon Claw", - "Aqua Tail", - "Dragon Pulse" - ], - "evolutions": [ - { - "pokemon": 611 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "611": { - "name": "Fraxure", - "forms": { - "2225": { - "name": "Normal", - "proto": "FRAXURE_NORMAL" - }, - "2226": { - "name": "Shadow", - "proto": "FRAXURE_SHADOW" - }, - "2227": { - "name": "Purified", - "proto": "FRAXURE_PURIFIED" - } - }, - "default_form_id": 2225, - "pokedex_id": 611, - "genId": "5", - "generation": "Unova", - "types": [ - "Dragon" - ], - "attack": 212, - "defense": 123, - "stamina": 165, - "height": 1, - "weight": 36, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Dragon Tail", - "Iron Tail" - ], - "charged_moves": [ - "Dragon Claw", - "Aqua Tail", - "Night Slash" - ], - "evolutions": [ - { - "pokemon": 612 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "612": { - "name": "Haxorus", - "forms": { - "2228": { - "name": "Normal", - "proto": "HAXORUS_NORMAL" - }, - "2229": { - "name": "Shadow", - "proto": "HAXORUS_SHADOW" - }, - "2230": { - "name": "Purified", - "proto": "HAXORUS_PURIFIED" - } - }, - "default_form_id": 2228, - "pokedex_id": 612, - "genId": "5", - "generation": "Unova", - "types": [ - "Dragon" - ], - "attack": 284, - "defense": 172, - "stamina": 183, - "height": 1.8, - "weight": 105.5, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Dragon Tail", - "Counter" - ], - "charged_moves": [ - "Dragon Claw", - "Surf", - "Night Slash", - "Earthquake" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "613": { - "name": "Cubchoo", - "forms": { - "2231": { - "name": "Normal", - "proto": "CUBCHOO_NORMAL", - "evolutions": [ - { - "pokemon": 614 - } - ] - }, - "2232": { - "name": "Shadow", - "proto": "CUBCHOO_SHADOW" - }, - "2233": { - "name": "Purified", - "proto": "CUBCHOO_PURIFIED" - }, - "2672": { - "name": "Winter 2020", - "proto": "CUBCHOO_WINTER_2020" - } - }, - "default_form_id": 2231, - "pokedex_id": 613, - "genId": "5", - "generation": "Unova", - "types": [ - "Ice" - ], - "attack": 128, - "defense": 74, - "stamina": 146, - "height": 0.5, - "weight": 8.5, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Powder Snow", - "Charm" - ], - "charged_moves": [ - "Ice Punch", - "Icy Wind", - "Play Rough" - ], - "evolutions": [ - { - "pokemon": 614 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "614": { - "name": "Beartic", - "forms": { - "2234": { - "name": "Normal", - "proto": "BEARTIC_NORMAL" - }, - "2235": { - "name": "Shadow", - "proto": "BEARTIC_SHADOW" - }, - "2236": { - "name": "Purified", - "proto": "BEARTIC_PURIFIED" - } - }, - "default_form_id": 2234, - "pokedex_id": 614, - "genId": "5", - "generation": "Unova", - "types": [ - "Ice" - ], - "attack": 233, - "defense": 152, - "stamina": 216, - "height": 2.6, - "weight": 260, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Powder Snow", - "Charm" - ], - "charged_moves": [ - "Ice Punch", - "Surf", - "Play Rough" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "615": { - "name": "Cryogonal", - "forms": { - "2237": { - "name": "Normal", - "proto": "CRYOGONAL_NORMAL" - }, - "2238": { - "name": "Shadow", - "proto": "CRYOGONAL_SHADOW" - }, - "2239": { - "name": "Purified", - "proto": "CRYOGONAL_PURIFIED" - } - }, - "default_form_id": 2237, - "pokedex_id": 615, - "genId": "5", - "generation": "Unova", - "types": [ - "Ice" - ], - "attack": 190, - "defense": 218, - "stamina": 190, - "height": 1.1, - "weight": 148, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Ice Shard", - "Frost Breath" - ], - "charged_moves": [ - "Aurora Beam", - "Night Slash", - "Solar Beam", - "Water Pulse" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "616": { - "name": "Shelmet", - "forms": { - "2240": { - "name": "Normal", - "proto": "SHELMET_NORMAL" - }, - "2241": { - "name": "Shadow", - "proto": "SHELMET_SHADOW" - }, - "2242": { - "name": "Purified", - "proto": "SHELMET_PURIFIED" - } - }, - "default_form_id": 2240, - "pokedex_id": 616, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug" - ], - "attack": 72, - "defense": 140, - "stamina": 137, - "height": 0.4, - "weight": 7.7, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Acid", - "Infestation" - ], - "charged_moves": [ - "Bug Buzz", - "Body Slam", - "Signal Beam" - ], - "evolutions": [ - { - "pokemon": 617 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "617": { - "name": "Accelgor", - "forms": { - "2243": { - "name": "Normal", - "proto": "ACCELGOR_NORMAL" - }, - "2244": { - "name": "Shadow", - "proto": "ACCELGOR_SHADOW" - }, - "2245": { - "name": "Purified", - "proto": "ACCELGOR_PURIFIED" - } - }, - "default_form_id": 2243, - "pokedex_id": 617, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug" - ], - "attack": 220, - "defense": 120, - "stamina": 190, - "height": 0.8, - "weight": 25.3, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Acid", - "Infestation" - ], - "charged_moves": [ - "Bug Buzz", - "Acid Spray", - "Signal Beam", - "Focus Blast" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "618": { - "name": "Stunfisk", - "forms": { - "2246": { - "name": "Normal", - "proto": "STUNFISK_NORMAL" - }, - "2247": { - "name": "Shadow", - "proto": "STUNFISK_SHADOW" - }, - "2248": { - "name": "Purified", - "proto": "STUNFISK_PURIFIED" - }, - "2345": { - "name": "Galarian", - "proto": "STUNFISK_GALARIAN", - "height": 0.7, - "weight": 20.5, - "quick_moves": [ - "Mud Shot", - "Metal Claw" - ], - "charged_moves": [ - "Earthquake", - "Flash Cannon", - "Muddy Water", - "Rock Slide" - ], - "types": [ - "Ground", - "Steel" - ] - } - }, - "default_form_id": 2246, - "pokedex_id": 618, - "genId": "5", - "generation": "Unova", - "types": [ - "Ground", - "Electric" - ], - "attack": 144, - "defense": 171, - "stamina": 240, - "height": 0.7, - "weight": 11, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Thunder Shock", - "Mud Shot" - ], - "charged_moves": [ - "Mud Bomb", - "Discharge", - "Muddy Water" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "619": { - "name": "Mienfoo", - "forms": { - "2249": { - "name": "Normal", - "proto": "MIENFOO_NORMAL" - }, - "2250": { - "name": "Shadow", - "proto": "MIENFOO_SHADOW" - }, - "2251": { - "name": "Purified", - "proto": "MIENFOO_PURIFIED" - } - }, - "default_form_id": 2249, - "pokedex_id": 619, - "genId": "5", - "generation": "Unova", - "types": [ - "Fighting" - ], - "attack": 160, - "defense": 98, - "stamina": 128, - "height": 0.9, - "weight": 20, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Low Kick", - "Pound" - ], - "charged_moves": [ - "Brick Break", - "Low Sweep", - "Focus Blast" - ], - "evolutions": [ - { - "pokemon": 620 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "620": { - "name": "Mienshao", - "forms": { - "2252": { - "name": "Normal", - "proto": "MIENSHAO_NORMAL" - }, - "2253": { - "name": "Shadow", - "proto": "MIENSHAO_SHADOW" - }, - "2254": { - "name": "Purified", - "proto": "MIENSHAO_PURIFIED" - } - }, - "default_form_id": 2252, - "pokedex_id": 620, - "genId": "5", - "generation": "Unova", - "types": [ - "Fighting" - ], - "attack": 258, - "defense": 127, - "stamina": 163, - "height": 1.4, - "weight": 35.5, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Low Kick", - "Poison Jab" - ], - "charged_moves": [ - "Brick Break", - "Grass Knot", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "621": { - "name": "Druddigon", - "forms": { - "2255": { - "name": "Normal", - "proto": "DRUDDIGON_NORMAL" - }, - "2256": { - "name": "Shadow", - "proto": "DRUDDIGON_SHADOW" - }, - "2257": { - "name": "Purified", - "proto": "DRUDDIGON_PURIFIED" - } - }, - "default_form_id": 2255, - "pokedex_id": 621, - "genId": "5", - "generation": "Unova", - "types": [ - "Dragon" - ], - "attack": 213, - "defense": 170, - "stamina": 184, - "height": 1.6, - "weight": 139, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Dragon Tail", - "Bite" - ], - "charged_moves": [ - "Dragon Claw", - "Night Slash", - "Hyper Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "622": { - "name": "Golett", - "forms": { - "2258": { - "name": "Normal", - "proto": "GOLETT_NORMAL" - }, - "2259": { - "name": "Shadow", - "proto": "GOLETT_SHADOW" - }, - "2260": { - "name": "Purified", - "proto": "GOLETT_PURIFIED" - } - }, - "default_form_id": 2258, - "pokedex_id": 622, - "genId": "5", - "generation": "Unova", - "types": [ - "Ground", - "Ghost" - ], - "attack": 127, - "defense": 92, - "stamina": 153, - "height": 1, - "weight": 92, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Astonish", - "Mud Slap" - ], - "charged_moves": [ - "Shadow Punch", - "Brick Break", - "Night Shade" - ], - "evolutions": [ - { - "pokemon": 623 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "623": { - "name": "Golurk", - "forms": { - "2261": { - "name": "Normal", - "proto": "GOLURK_NORMAL" - }, - "2262": { - "name": "Shadow", - "proto": "GOLURK_SHADOW" - }, - "2263": { - "name": "Purified", - "proto": "GOLURK_PURIFIED" - } - }, - "default_form_id": 2261, - "pokedex_id": 623, - "genId": "5", - "generation": "Unova", - "types": [ - "Ground", - "Ghost" - ], - "attack": 222, - "defense": 154, - "stamina": 205, - "height": 2.8, - "weight": 330, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Astonish", - "Mud Slap" - ], - "charged_moves": [ - "Shadow Punch", - "Dynamic Punch", - "Earth Power" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "624": { - "name": "Pawniard", - "forms": { - "2264": { - "name": "Normal", - "proto": "PAWNIARD_NORMAL" - }, - "2265": { - "name": "Shadow", - "proto": "PAWNIARD_SHADOW" - }, - "2266": { - "name": "Purified", - "proto": "PAWNIARD_PURIFIED" - } - }, - "default_form_id": 2264, - "pokedex_id": 624, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark", - "Steel" - ], - "attack": 154, - "defense": 114, - "stamina": 128, - "height": 0.5, - "weight": 10.2, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Scratch", - "Fury Cutter" - ], - "charged_moves": [ - "Night Slash", - "Iron Head", - "X Scissor" - ], - "evolutions": [ - { - "pokemon": 625 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "625": { - "name": "Bisharp", - "forms": { - "2267": { - "name": "Normal", - "proto": "BISHARP_NORMAL" - }, - "2268": { - "name": "Shadow", - "proto": "BISHARP_SHADOW" - }, - "2269": { - "name": "Purified", - "proto": "BISHARP_PURIFIED" - } - }, - "default_form_id": 2267, - "pokedex_id": 625, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark", - "Steel" - ], - "attack": 232, - "defense": 176, - "stamina": 163, - "height": 1.6, - "weight": 70, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Snarl", - "Metal Claw" - ], - "charged_moves": [ - "Dark Pulse", - "Iron Head", - "X Scissor", - "Focus Blast" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "626": { - "name": "Bouffalant", - "forms": { - "2270": { - "name": "Normal", - "proto": "BOUFFALANT_NORMAL" - }, - "2271": { - "name": "Shadow", - "proto": "BOUFFALANT_SHADOW" - }, - "2272": { - "name": "Purified", - "proto": "BOUFFALANT_PURIFIED" - } - }, - "default_form_id": 2270, - "pokedex_id": 626, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal" - ], - "attack": 195, - "defense": 182, - "stamina": 216, - "height": 1.6, - "weight": 94.6, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Zen Headbutt", - "Mud Shot" - ], - "charged_moves": [ - "Megahorn", - "Stomp", - "Skull Bash", - "Earthquake" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "627": { - "name": "Rufflet", - "forms": { - "2273": { - "name": "Normal", - "proto": "RUFFLET_NORMAL" - }, - "2274": { - "name": "Shadow", - "proto": "RUFFLET_SHADOW" - }, - "2275": { - "name": "Purified", - "proto": "RUFFLET_PURIFIED" - } - }, - "default_form_id": 2273, - "pokedex_id": 627, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal", - "Flying" - ], - "attack": 150, - "defense": 97, - "stamina": 172, - "height": 0.5, - "weight": 10.5, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Peck", - "Wing Attack" - ], - "charged_moves": [ - "Aerial Ace", - "Brave Bird", - "Rock Tomb" - ], - "evolutions": [ - { - "pokemon": 628 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "628": { - "name": "Braviary", - "forms": { - "2276": { - "name": "Normal", - "proto": "BRAVIARY_NORMAL" - }, - "2277": { - "name": "Shadow", - "proto": "BRAVIARY_SHADOW" - }, - "2278": { - "name": "Purified", - "proto": "BRAVIARY_PURIFIED" - } - }, - "default_form_id": 2276, - "pokedex_id": 628, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal", - "Flying" - ], - "attack": 232, - "defense": 152, - "stamina": 225, - "height": 1.5, - "weight": 41, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Steel Wing", - "Air Slash" - ], - "charged_moves": [ - "Heat Wave", - "Brave Bird", - "Rock Slide", - "Close Combat" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "629": { - "name": "Vullaby", - "forms": { - "2279": { - "name": "Normal", - "proto": "VULLABY_NORMAL" - }, - "2280": { - "name": "Shadow", - "proto": "VULLABY_SHADOW" - }, - "2281": { - "name": "Purified", - "proto": "VULLABY_PURIFIED" - } - }, - "default_form_id": 2279, - "pokedex_id": 629, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark", - "Flying" - ], - "attack": 105, - "defense": 139, - "stamina": 172, - "height": 0.5, - "weight": 9, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Feint Attack", - "Air Slash" - ], - "charged_moves": [ - "Dark Pulse", - "Brave Bird", - "Foul Play" - ], - "evolutions": [ - { - "pokemon": 630 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "630": { - "name": "Mandibuzz", - "forms": { - "2282": { - "name": "Normal", - "proto": "MANDIBUZZ_NORMAL" - }, - "2283": { - "name": "Shadow", - "proto": "MANDIBUZZ_SHADOW" - }, - "2284": { - "name": "Purified", - "proto": "MANDIBUZZ_PURIFIED" - } - }, - "default_form_id": 2282, - "pokedex_id": 630, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark", - "Flying" - ], - "attack": 129, - "defense": 205, - "stamina": 242, - "height": 1.2, - "weight": 39.5, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Snarl", - "Air Slash" - ], - "charged_moves": [ - "Dark Pulse", - "Aerial Ace", - "Foul Play", - "Shadow Ball" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "631": { - "name": "Heatmor", - "forms": { - "2285": { - "name": "Normal", - "proto": "HEATMOR_NORMAL" - }, - "2286": { - "name": "Shadow", - "proto": "HEATMOR_SHADOW" - }, - "2287": { - "name": "Purified", - "proto": "HEATMOR_PURIFIED" - } - }, - "default_form_id": 2285, - "pokedex_id": 631, - "genId": "5", - "generation": "Unova", - "types": [ - "Fire" - ], - "attack": 204, - "defense": 129, - "stamina": 198, - "height": 1.4, - "weight": 58, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Lick", - "Fire Spin" - ], - "charged_moves": [ - "Flamethrower", - "Thunder Punch", - "Power Up" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "632": { - "name": "Durant", - "forms": { - "2288": { - "name": "Normal", - "proto": "DURANT_NORMAL" - }, - "2289": { - "name": "Shadow", - "proto": "DURANT_SHADOW" - }, - "2290": { - "name": "Purified", - "proto": "DURANT_PURIFIED" - } - }, - "default_form_id": 2288, - "pokedex_id": 632, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Steel" - ], - "attack": 217, - "defense": 188, - "stamina": 151, - "height": 0.3, - "weight": 33, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Bug Bite", - "Metal Claw" - ], - "charged_moves": [ - "X Scissor", - "Iron Head", - "Stone Edge" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "633": { - "name": "Deino", - "forms": { - "2291": { - "name": "Normal", - "proto": "DEINO_NORMAL" - }, - "2292": { - "name": "Shadow", - "proto": "DEINO_SHADOW" - }, - "2293": { - "name": "Purified", - "proto": "DEINO_PURIFIED" - } - }, - "default_form_id": 2291, - "pokedex_id": 633, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark", - "Dragon" - ], - "attack": 116, - "defense": 93, - "stamina": 141, - "height": 0.8, - "weight": 17.3, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Tackle", - "Dragon Breath" - ], - "charged_moves": [ - "Dragon Pulse", - "Crunch", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 634 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "634": { - "name": "Zweilous", - "forms": { - "2294": { - "name": "Normal", - "proto": "ZWEILOUS_NORMAL" - }, - "2295": { - "name": "Shadow", - "proto": "ZWEILOUS_SHADOW" - }, - "2296": { - "name": "Purified", - "proto": "ZWEILOUS_PURIFIED" - } - }, - "default_form_id": 2294, - "pokedex_id": 634, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark", - "Dragon" - ], - "attack": 159, - "defense": 135, - "stamina": 176, - "height": 1.4, - "weight": 50, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Bite", - "Dragon Breath" - ], - "charged_moves": [ - "Dragon Pulse", - "Dark Pulse", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 635 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "635": { - "name": "Hydreigon", - "forms": { - "2297": { - "name": "Normal", - "proto": "HYDREIGON_NORMAL" - }, - "2298": { - "name": "Shadow", - "proto": "HYDREIGON_SHADOW" - }, - "2299": { - "name": "Purified", - "proto": "HYDREIGON_PURIFIED" - } - }, - "default_form_id": 2297, - "pokedex_id": 635, - "genId": "5", - "generation": "Unova", - "types": [ - "Dark", - "Dragon" - ], - "attack": 256, - "defense": 188, - "stamina": 211, - "height": 1.8, - "weight": 160, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Bite", - "Dragon Breath" - ], - "charged_moves": [ - "Dragon Pulse", - "Dark Pulse", - "Flash Cannon" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 6, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "636": { - "name": "Larvesta", - "forms": { - "2300": { - "name": "Normal", - "proto": "LARVESTA_NORMAL" - }, - "2301": { - "name": "Shadow", - "proto": "LARVESTA_SHADOW" - }, - "2302": { - "name": "Purified", - "proto": "LARVESTA_PURIFIED" - } - }, - "default_form_id": 2300, - "pokedex_id": 636, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Fire" - ], - "attack": 156, - "defense": 107, - "stamina": 146, - "height": 1.1, - "weight": 28.8, - "flee_rate": 0.15, - "capture_rate": 0.7, - "quick_moves": [ - "Ember", - "Bug Bite" - ], - "charged_moves": [ - "Flame Charge", - "Bug Buzz", - "Flame Wheel" - ], - "evolutions": [ - { - "pokemon": 637 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "637": { - "name": "Volcarona", - "forms": { - "2303": { - "name": "Normal", - "proto": "VOLCARONA_NORMAL" - }, - "2304": { - "name": "Shadow", - "proto": "VOLCARONA_SHADOW" - }, - "2305": { - "name": "Purified", - "proto": "VOLCARONA_PURIFIED" - } - }, - "default_form_id": 2303, - "pokedex_id": 637, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Fire" - ], - "attack": 264, - "defense": 189, - "stamina": 198, - "height": 1.6, - "weight": 46, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Fire Spin", - "Bug Bite" - ], - "charged_moves": [ - "Overheat", - "Bug Buzz", - "Solar Beam", - "Hurricane" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "638": { - "name": "Cobalion", - "forms": { - "2306": { - "name": "Normal", - "proto": "COBALION_NORMAL" - }, - "2307": { - "name": "Shadow", - "proto": "COBALION_SHADOW" - }, - "2308": { - "name": "Purified", - "proto": "COBALION_PURIFIED" - } - }, - "default_form_id": 2306, - "pokedex_id": 638, - "genId": "5", - "generation": "Unova", - "types": [ - "Steel", - "Fighting" - ], - "attack": 192, - "defense": 229, - "stamina": 209, - "height": 2.1, - "weight": 250, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Metal Claw", - "Zen Headbutt" - ], - "charged_moves": [ - "Close Combat", - "Iron Head", - "Stone Edge" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "639": { - "name": "Terrakion", - "forms": { - "2309": { - "name": "Normal", - "proto": "TERRAKION_NORMAL" - }, - "2310": { - "name": "Shadow", - "proto": "TERRAKION_SHADOW" - }, - "2311": { - "name": "Purified", - "proto": "TERRAKION_PURIFIED" - } - }, - "default_form_id": 2309, - "pokedex_id": 639, - "genId": "5", - "generation": "Unova", - "types": [ - "Rock", - "Fighting" - ], - "attack": 260, - "defense": 192, - "stamina": 209, - "height": 1.9, - "weight": 260, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Smack Down", - "Zen Headbutt" - ], - "charged_moves": [ - "Close Combat", - "Earthquake", - "Rock Slide" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "640": { - "name": "Virizion", - "forms": { - "2312": { - "name": "Normal", - "proto": "VIRIZION_NORMAL" - }, - "2313": { - "name": "Shadow", - "proto": "VIRIZION_SHADOW" - }, - "2314": { - "name": "Purified", - "proto": "VIRIZION_PURIFIED" - } - }, - "default_form_id": 2312, - "pokedex_id": 640, - "genId": "5", - "generation": "Unova", - "types": [ - "Grass", - "Fighting" - ], - "attack": 192, - "defense": 229, - "stamina": 209, - "height": 2, - "weight": 200, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Quick Attack", - "Zen Headbutt" - ], - "charged_moves": [ - "Close Combat", - "Leaf Blade", - "Stone Edge" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "641": { - "name": "Tornadus", - "forms": { - "140": { - "name": "Incarnate", - "proto": "TORNADUS_INCARNATE" - }, - "141": { - "name": "Therian", - "proto": "TORNADUS_THERIAN", - "attack": 238, - "defense": 189, - "stamina": 188, - "height": 1.4, - "weight": 63, - "quick_moves": [ - "Astonish", - "Gust" - ], - "charged_moves": [ - "Heat Wave", - "Psychic", - "Focus Blast", - "Hurricane" - ] - } - }, - "default_form_id": 140, - "pokedex_id": 641, - "genId": "5", - "generation": "Unova", - "types": [ - "Flying" - ], - "attack": 266, - "defense": 164, - "stamina": 188, - "height": 1.5, - "weight": 63, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Bite", - "Air Slash" - ], - "charged_moves": [ - "Grass Knot", - "Dark Pulse", - "Hyper Beam", - "Hurricane" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "642": { - "name": "Thundurus", - "forms": { - "142": { - "name": "Incarnate", - "proto": "THUNDURUS_INCARNATE" - }, - "143": { - "name": "Therian", - "proto": "THUNDURUS_THERIAN", - "attack": 295, - "defense": 161, - "stamina": 188, - "height": 3, - "weight": 61, - "quick_moves": [ - "Bite", - "Volt Switch" - ], - "charged_moves": [ - "Sludge Wave", - "Thunder", - "Focus Blast", - "Thunderbolt" - ] - } - }, - "default_form_id": 142, - "pokedex_id": 642, - "genId": "5", - "generation": "Unova", - "types": [ - "Electric", - "Flying" - ], - "attack": 266, - "defense": 164, - "stamina": 188, - "height": 1.5, - "weight": 61, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Astonish", - "Thunder Shock" - ], - "charged_moves": [ - "Crunch", - "Thunder", - "Brick Break", - "Thunder Punch" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "643": { - "name": "Reshiram", - "forms": { - "2315": { - "name": "Normal", - "proto": "RESHIRAM_NORMAL" - }, - "2316": { - "name": "Shadow", - "proto": "RESHIRAM_SHADOW" - }, - "2317": { - "name": "Purified", - "proto": "RESHIRAM_PURIFIED" - } - }, - "default_form_id": 2315, - "pokedex_id": 643, - "genId": "5", - "generation": "Unova", - "types": [ - "Dragon", - "Fire" - ], - "attack": 275, - "defense": 211, - "stamina": 205, - "height": 3.2, - "weight": 330, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Dragon Breath", - "Fire Fang" - ], - "charged_moves": [ - "Crunch", - "Overheat", - "Draco Meteor", - "Stone Edge" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "644": { - "name": "Zekrom", - "forms": { - "2318": { - "name": "Normal", - "proto": "ZEKROM_NORMAL" - }, - "2319": { - "name": "Shadow", - "proto": "ZEKROM_SHADOW" - }, - "2320": { - "name": "Purified", - "proto": "ZEKROM_PURIFIED" - } - }, - "default_form_id": 2318, - "pokedex_id": 644, - "genId": "5", - "generation": "Unova", - "types": [ - "Dragon", - "Electric" - ], - "attack": 275, - "defense": 211, - "stamina": 205, - "height": 2.9, - "weight": 345, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Dragon Breath", - "Charge Beam" - ], - "charged_moves": [ - "Outrage", - "Wild Charge", - "Flash Cannon", - "Crunch" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "645": { - "name": "Landorus", - "forms": { - "144": { - "name": "Incarnate", - "proto": "LANDORUS_INCARNATE" - }, - "145": { - "name": "Therian", - "proto": "LANDORUS_THERIAN", - "attack": 289, - "defense": 179, - "stamina": 205, - "height": 1.3, - "weight": 68, - "quick_moves": [ - "Mud Shot", - "Extrasensory" - ], - "charged_moves": [ - "Earthquake", - "Bulldoze", - "Stone Edge", - "Super Power" - ] - } - }, - "default_form_id": 144, - "pokedex_id": 645, - "genId": "5", - "generation": "Unova", - "types": [ - "Ground", - "Flying" - ], - "attack": 261, - "defense": 182, - "stamina": 205, - "height": 1.5, - "weight": 68, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Mud Shot", - "Rock Throw" - ], - "charged_moves": [ - "Earth Power", - "Outrage", - "Rock Slide", - "Focus Blast" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "646": { - "name": "Kyurem", - "forms": { - "146": { - "name": "Normal", - "proto": "KYUREM_NORMAL" - }, - "147": { - "name": "Black", - "proto": "KYUREM_BLACK", - "attack": 310, - "defense": 183, - "stamina": 245, - "quick_moves": [ - "Dragon Tail", - "Shadow Claw" - ], - "charged_moves": [ - "Iron Head", - "Blizzard", - "Stone Edge", - "Outrage" - ] - }, - "148": { - "name": "White", - "proto": "KYUREM_WHITE", - "attack": 310, - "defense": 183, - "stamina": 245, - "charged_moves": [ - "Dragon Pulse", - "Blizzard", - "Ancient Power", - "Focus Blast" - ] - } - }, - "default_form_id": 146, - "pokedex_id": 646, - "genId": "5", - "generation": "Unova", - "types": [ - "Dragon", - "Ice" - ], - "attack": 246, - "defense": 170, - "stamina": 245, - "height": 3, - "weight": 325, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Dragon Breath", - "Steel Wing" - ], - "charged_moves": [ - "Dragon Claw", - "Blizzard", - "Draco Meteor" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "647": { - "name": "Keldeo", - "forms": { - "149": { - "name": "Ordinary", - "proto": "KELDEO_ORDINARY" - }, - "150": { - "name": "Resolute", - "proto": "KELDEO_RESOLUTE" - } - }, - "default_form_id": 149, - "pokedex_id": 647, - "genId": "5", - "generation": "Unova", - "types": [ - "Water", - "Fighting" - ], - "attack": 260, - "defense": 192, - "stamina": 209, - "height": 1.4, - "weight": 48.5, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Poison Jab", - "Low Kick" - ], - "charged_moves": [ - "Aqua Jet", - "Close Combat", - "Hydro Pump", - "X Scissor" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "648": { - "name": "Meloetta", - "forms": { - "151": { - "name": "Aria", - "proto": "MELOETTA_ARIA", - "quick_moves": [ - "Quick Attack", - "Confusion" - ], - "charged_moves": [ - "Psyshock", - "Thunderbolt", - "Dazzling Gleam", - "Hyper Beam" - ] - }, - "152": { - "name": "Pirouette", - "proto": "MELOETTA_PIROUETTE", - "attack": 269, - "defense": 188, - "stamina": 225, - "types": [ - "Normal", - "Fighting" - ] - } - }, - "default_form_id": 151, - "pokedex_id": 648, - "genId": "5", - "generation": "Unova", - "types": [ - "Normal", - "Psychic" - ], - "attack": 250, - "defense": 225, - "stamina": 225, - "height": 0.6, - "weight": 6.5, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Quick Attack", - "Low Kick" - ], - "charged_moves": [ - "Close Combat", - "Fire Punch", - "Ice Punch", - "Hyper Beam" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "649": { - "name": "Genesect", - "forms": { - "593": { - "name": "Normal", - "proto": "GENESECT_NORMAL" - }, - "594": { - "name": "Shock", - "proto": "GENESECT_SHOCK", - "charged_moves": [ - "X Scissor", - "Magnet Bomb", - "Zap Cannon" - ] - }, - "595": { - "name": "Burn", - "proto": "GENESECT_BURN", - "charged_moves": [ - "X Scissor", - "Magnet Bomb", - "Flamethrower" - ] - }, - "596": { - "name": "Chill", - "proto": "GENESECT_CHILL", - "charged_moves": [ - "X Scissor", - "Magnet Bomb", - "Ice Beam" - ] - }, - "597": { - "name": "Douse", - "proto": "GENESECT_DOUSE", - "charged_moves": [ - "X Scissor", - "Magnet Bomb", - "Gunk Shot" - ] - } - }, - "default_form_id": 593, - "pokedex_id": 649, - "genId": "5", - "generation": "Unova", - "types": [ - "Bug", - "Steel" - ], - "attack": 252, - "defense": 199, - "stamina": 174, - "height": 1.5, - "weight": 82.5, - "flee_rate": 0.01, - "capture_rate": 0.02, - "quick_moves": [ - "Metal Claw", - "Fury Cutter" - ], - "charged_moves": [ - "X Scissor", - "Magnet Bomb", - "Hyper Beam" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "650": { - "name": "Chespin", - "forms": { - "0": {} - }, - "pokedex_id": 650, - "genId": "6", - "generation": "Kalos", - "types": [ - "Grass" - ], - "attack": 110, - "defense": 106, - "stamina": 148, - "height": 0.4, - "weight": 9, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Take Down", - "Vine Whip" - ], - "charged_moves": [ - "Gyro Ball", - "Seed Bomb", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 651 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "651": { - "name": "Quilladin", - "forms": { - "0": {} - }, - "pokedex_id": 651, - "genId": "6", - "generation": "Kalos", - "types": [ - "Grass" - ], - "attack": 146, - "defense": 156, - "stamina": 156, - "height": 0.7, - "weight": 29, - "flee_rate": 0.1, - "capture_rate": 0.1, - "quick_moves": [ - "Low Kick", - "Vine Whip" - ], - "charged_moves": [ - "Gyro Ball", - "Energy Ball", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 652 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "652": { - "name": "Chesnaught", - "forms": { - "0": {} - }, - "pokedex_id": 652, - "genId": "6", - "generation": "Kalos", - "types": [ - "Grass", - "Fighting" - ], - "attack": 201, - "defense": 204, - "stamina": 204, - "height": 1.6, - "weight": 90, - "flee_rate": 0.1, - "capture_rate": 0.05, - "quick_moves": [ - "Low Kick", - "Vine Whip", - "Smack Down" - ], - "charged_moves": [ - "Gyro Ball", - "Energy Ball", - "Super Power", - "Solar Beam" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "653": { - "name": "Fennekin", - "forms": { - "0": {} - }, - "pokedex_id": 653, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fire" - ], - "attack": 116, - "defense": 102, - "stamina": 120, - "height": 0.4, - "weight": 9.4, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Scratch", - "Ember" - ], - "charged_moves": [ - "Psyshock", - "Flamethrower", - "Flame Charge" - ], - "evolutions": [ - { - "pokemon": 654 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "654": { - "name": "Braixen", - "forms": { - "0": {} - }, - "pokedex_id": 654, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fire" - ], - "attack": 171, - "defense": 130, - "stamina": 153, - "height": 1, - "weight": 14.5, - "flee_rate": 0.1, - "capture_rate": 0.1, - "quick_moves": [ - "Scratch", - "Ember" - ], - "charged_moves": [ - "Psyshock", - "Flamethrower", - "Flame Charge" - ], - "evolutions": [ - { - "pokemon": 655 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "655": { - "name": "Delphox", - "forms": { - "0": {} - }, - "pokedex_id": 655, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fire", - "Psychic" - ], - "attack": 230, - "defense": 189, - "stamina": 181, - "height": 1.5, - "weight": 39, - "flee_rate": 0.1, - "capture_rate": 0.05, - "quick_moves": [ - "Scratch", - "Fire Spin", - "Zen Headbutt" - ], - "charged_moves": [ - "Psychic", - "Flamethrower", - "Flame Charge", - "Fire Blast" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "656": { - "name": "Froakie", - "forms": { - "0": {} - }, - "pokedex_id": 656, - "genId": "6", - "generation": "Kalos", - "types": [ - "Water" - ], - "attack": 122, - "defense": 84, - "stamina": 121, - "height": 0.3, - "weight": 7, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Pound", - "Bubble" - ], - "charged_moves": [ - "Water Pulse", - "Aerial Ace", - "Surf" - ], - "evolutions": [ - { - "pokemon": 657 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "657": { - "name": "Frogadier", - "forms": { - "0": {} - }, - "pokedex_id": 657, - "genId": "6", - "generation": "Kalos", - "types": [ - "Water" - ], - "attack": 168, - "defense": 114, - "stamina": 144, - "height": 0.6, - "weight": 10.9, - "flee_rate": 0.1, - "capture_rate": 0.1, - "quick_moves": [ - "Pound", - "Bubble" - ], - "charged_moves": [ - "Water Pulse", - "Aerial Ace", - "Surf" - ], - "evolutions": [ - { - "pokemon": 658 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "658": { - "name": "Greninja", - "forms": { - "0": {} - }, - "pokedex_id": 658, - "genId": "6", - "generation": "Kalos", - "types": [ - "Water", - "Dark" - ], - "attack": 223, - "defense": 152, - "stamina": 176, - "height": 1.5, - "weight": 40, - "flee_rate": 0.1, - "capture_rate": 0.05, - "quick_moves": [ - "Feint Attack", - "Bubble" - ], - "charged_moves": [ - "Night Slash", - "Aerial Ace", - "Surf", - "Hydro Pump" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "659": { - "name": "Bunnelby", - "forms": { - "0": {} - }, - "pokedex_id": 659, - "genId": "6", - "generation": "Kalos", - "types": [ - "Normal" - ], - "attack": 68, - "defense": 72, - "stamina": 116, - "height": 0.4, - "weight": 5, - "flee_rate": 0.1, - "capture_rate": 0.5, - "quick_moves": [ - "Mud Slap", - "Quick Attack" - ], - "charged_moves": [ - "Dig", - "Bulldoze", - "Earthquake" - ], - "evolutions": [ - { - "pokemon": 660 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "660": { - "name": "Diggersby", - "forms": { - "0": {} - }, - "pokedex_id": 660, - "genId": "6", - "generation": "Kalos", - "types": [ - "Normal", - "Ground" - ], - "attack": 112, - "defense": 155, - "stamina": 198, - "height": 1, - "weight": 42.4, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Mud Shot", - "Quick Attack" - ], - "charged_moves": [ - "Dig", - "Hyper Beam", - "Earthquake", - "Fire Punch" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "661": { - "name": "Fletchling", - "forms": { - "0": {} - }, - "pokedex_id": 661, - "genId": "6", - "generation": "Kalos", - "types": [ - "Normal", - "Flying" - ], - "attack": 95, - "defense": 80, - "stamina": 128, - "height": 0.3, - "weight": 1.7, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Peck", - "Quick Attack" - ], - "charged_moves": [ - "Aerial Ace", - "Heat Wave", - "Swift" - ], - "evolutions": [ - { - "pokemon": 662 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "662": { - "name": "Fletchinder", - "forms": { - "0": {} - }, - "pokedex_id": 662, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fire", - "Flying" - ], - "attack": 145, - "defense": 110, - "stamina": 158, - "height": 0.7, - "weight": 16, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Peck", - "Ember", - "Steel Wing" - ], - "charged_moves": [ - "Aerial Ace", - "Heat Wave", - "Flame Charge" - ], - "evolutions": [ - { - "pokemon": 663 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "663": { - "name": "Talonflame", - "forms": { - "0": {} - }, - "pokedex_id": 663, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fire", - "Flying" - ], - "attack": 176, - "defense": 155, - "stamina": 186, - "height": 1.2, - "weight": 24.5, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Peck", - "Fire Spin", - "Steel Wing" - ], - "charged_moves": [ - "Brave Bird", - "Fire Blast", - "Flame Charge", - "Hurricane" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 5, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "664": { - "name": "Scatterbug", - "forms": { - "0": {} - }, - "pokedex_id": 664, - "genId": "6", - "generation": "Kalos", - "types": [ - "Bug" - ], - "attack": 63, - "defense": 63, - "stamina": 116, - "height": 0.3, - "weight": 2.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Bug Bite", - "Tackle" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 665 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "665": { - "name": "Spewpa", - "forms": { - "0": {} - }, - "pokedex_id": 665, - "genId": "6", - "generation": "Kalos", - "types": [ - "Bug" - ], - "attack": 48, - "defense": 89, - "stamina": 128, - "height": 0.3, - "weight": 8.4, - "flee_rate": 0.09, - "capture_rate": 0.25, - "quick_moves": [ - "Bug Bite", - "Tackle" - ], - "charged_moves": [ - "Struggle" - ], - "evolutions": [ - { - "pokemon": 666 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "666": { - "name": "Vivillon", - "forms": { - "2594": { - "name": "Archipelago", - "proto": "VIVILLON_ARCHIPELAGO" - }, - "2595": { - "name": "Continental", - "proto": "VIVILLON_CONTINENTAL" - }, - "2596": { - "name": "Elegant", - "proto": "VIVILLON_ELEGANT" - }, - "2597": { - "name": "Fancy", - "proto": "VIVILLON_FANCY" - }, - "2598": { - "name": "Garden", - "proto": "VIVILLON_GARDEN" - }, - "2599": { - "name": "High Plains", - "proto": "VIVILLON_HIGH_PLAINS" - }, - "2600": { - "name": "Icy Snow", - "proto": "VIVILLON_ICY_SNOW" - }, - "2601": { - "name": "Jungle", - "proto": "VIVILLON_JUNGLE" - }, - "2602": { - "name": "Marine", - "proto": "VIVILLON_MARINE" - }, - "2603": { - "name": "Meadow", - "proto": "VIVILLON_MEADOW" - }, - "2604": { - "name": "Modern", - "proto": "VIVILLON_MODERN" - }, - "2605": { - "name": "Monsoon", - "proto": "VIVILLON_MONSOON" - }, - "2606": { - "name": "Ocean", - "proto": "VIVILLON_OCEAN" - }, - "2607": { - "name": "Pokeball", - "proto": "VIVILLON_POKEBALL" - }, - "2608": { - "name": "Polar", - "proto": "VIVILLON_POLAR" - }, - "2609": { - "name": "River", - "proto": "VIVILLON_RIVER" - }, - "2610": { - "name": "Sandstorm", - "proto": "VIVILLON_SANDSTORM" - }, - "2611": { - "name": "Savanna", - "proto": "VIVILLON_SAVANNA" - }, - "2612": { - "name": "Sun", - "proto": "VIVILLON_SUN" - }, - "2613": { - "name": "Tundra", - "proto": "VIVILLON_TUNDRA" - } - }, - "pokedex_id": 666, - "genId": "6", - "generation": "Kalos", - "types": [ - "Bug", - "Flying" - ], - "attack": 176, - "defense": 103, - "stamina": 190, - "height": 1.2, - "weight": 17, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Bug Bite", - "Gust", - "Struggle Bug" - ], - "charged_moves": [ - "Bug Buzz", - "Aerial Ace", - "Energy Ball", - "Hurricane" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 1, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "667": { - "name": "Litleo", - "forms": { - "0": {} - }, - "pokedex_id": 667, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fire", - "Normal" - ], - "attack": 139, - "defense": 112, - "stamina": 158, - "height": 0.6, - "weight": 13.5, - "flee_rate": 0.2, - "capture_rate": 0.5, - "quick_moves": [ - "Fire Fang", - "Tackle", - "Ember" - ], - "charged_moves": [ - "Flame Charge", - "Flamethrower", - "Crunch" - ], - "evolutions": [ - { - "pokemon": 668, - "form": 2587, - "gender_requirement": 1 - }, - { - "pokemon": 668, - "form": 2588, - "gender_requirement": 2 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "668": { - "name": "Pyroar", - "forms": { - "2587": { - "name": "Normal", - "proto": "PYROAR_NORMAL", - "quick_moves": [ - "Fire Fang", - "Take Down" - ] - }, - "2588": { - "name": "Female", - "proto": "PYROAR_FEMALE", - "quick_moves": [ - "Fire Fang", - "Take Down" - ] - } - }, - "default_form_id": 2587, - "pokedex_id": 668, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fire", - "Normal" - ], - "attack": 221, - "defense": 149, - "stamina": 200, - "height": 1.5, - "weight": 81.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Fire Fang", - "Take Down", - "Ember" - ], - "charged_moves": [ - "Flame Charge", - "Solar Beam", - "Dark Pulse", - "Overheat" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "669": { - "name": "Flabebe", - "forms": { - "2614": { - "name": "Red", - "proto": "FLABEBE_RED" - }, - "2615": { - "name": "Yellow", - "proto": "FLABEBE_YELLOW" - }, - "2616": { - "name": "Orange", - "proto": "FLABEBE_ORANGE" - }, - "2617": { - "name": "Blue", - "proto": "FLABEBE_BLUE" - }, - "2618": { - "name": "White", - "proto": "FLABEBE_WHITE" - } - }, - "pokedex_id": 669, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fairy" - ], - "attack": 108, - "defense": 120, - "stamina": 127, - "height": 0.1, - "weight": 0.1, - "flee_rate": 0.15, - "capture_rate": 0.5, - "quick_moves": [ - "Vine Whip", - "Tackle" - ], - "charged_moves": [ - "Dazzling Gleam", - "Petal Blizzard", - "Psychic" - ], - "evolutions": [ - { - "pokemon": 670 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "670": { - "name": "Floette", - "forms": { - "2619": { - "name": "Red", - "proto": "FLOETTE_RED" - }, - "2620": { - "name": "Yellow", - "proto": "FLOETTE_YELLOW" - }, - "2621": { - "name": "Orange", - "proto": "FLOETTE_ORANGE" - }, - "2622": { - "name": "Blue", - "proto": "FLOETTE_BLUE" - }, - "2623": { - "name": "White", - "proto": "FLOETTE_WHITE" - } - }, - "pokedex_id": 670, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fairy" - ], - "attack": 136, - "defense": 151, - "stamina": 144, - "height": 0.2, - "weight": 0.9, - "flee_rate": 0.07, - "capture_rate": 0.25, - "quick_moves": [ - "Vine Whip", - "Tackle" - ], - "charged_moves": [ - "Dazzling Gleam", - "Petal Blizzard", - "Psychic" - ], - "evolutions": [ - { - "pokemon": 671 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "671": { - "name": "Florges", - "forms": { - "2624": { - "name": "Red", - "proto": "FLORGES_RED" - }, - "2625": { - "name": "Yellow", - "proto": "FLORGES_YELLOW" - }, - "2626": { - "name": "Orange", - "proto": "FLORGES_ORANGE" - }, - "2627": { - "name": "Blue", - "proto": "FLORGES_BLUE" - }, - "2628": { - "name": "White", - "proto": "FLORGES_WHITE" - } - }, - "pokedex_id": 671, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fairy" - ], - "attack": 212, - "defense": 244, - "stamina": 186, - "height": 1.1, - "weight": 10, - "flee_rate": 0.05, - "capture_rate": 0.125, - "quick_moves": [ - "Vine Whip", - "Tackle", - "Razor Leaf" - ], - "charged_moves": [ - "Moonblast", - "Petal Blizzard", - "Psychic", - "Disarming Voice" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "672": { - "name": "Skiddo", - "forms": { - "0": {} - }, - "pokedex_id": 672, - "genId": "6", - "generation": "Kalos", - "types": [ - "Grass" - ], - "attack": 123, - "defense": 102, - "stamina": 165, - "height": 0.9, - "weight": 31, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Zen Headbutt", - "Rock Smash" - ], - "charged_moves": [ - "Brick Break", - "Rock Slide", - "Seed Bomb" - ], - "evolutions": [ - { - "pokemon": 673 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "673": { - "name": "Gogoat", - "forms": { - "0": {} - }, - "pokedex_id": 673, - "genId": "6", - "generation": "Kalos", - "types": [ - "Grass" - ], - "attack": 196, - "defense": 146, - "stamina": 265, - "height": 1.7, - "weight": 91, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Zen Headbutt", - "Rock Smash", - "Vine Whip" - ], - "charged_moves": [ - "Brick Break", - "Rock Slide", - "Leaf Blade", - "Seed Bomb" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "674": { - "name": "Pancham", - "forms": { - "0": {} - }, - "pokedex_id": 674, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fighting" - ], - "attack": 145, - "defense": 107, - "stamina": 167, - "height": 0.6, - "weight": 8, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Low Kick", - "Tackle" - ], - "charged_moves": [ - "Low Sweep", - "Crunch", - "Body Slam" - ], - "evolutions": [ - { - "pokemon": 675 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "675": { - "name": "Pangoro", - "forms": { - "0": {} - }, - "pokedex_id": 675, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fighting", - "Dark" - ], - "attack": 226, - "defense": 146, - "stamina": 216, - "height": 2.1, - "weight": 136, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Low Kick", - "Snarl", - "Bullet Punch" - ], - "charged_moves": [ - "Close Combat", - "Night Slash", - "Iron Head", - "Rock Slide" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "676": { - "name": "Furfrou", - "forms": { - "2629": { - "name": "Natural", - "proto": "FURFROU_NATURAL" - }, - "2630": { - "name": "Heart", - "proto": "FURFROU_HEART" - }, - "2631": { - "name": "Star", - "proto": "FURFROU_STAR" - }, - "2632": { - "name": "Diamond", - "proto": "FURFROU_DIAMOND" - }, - "2633": { - "name": "Debutante", - "proto": "FURFROU_DEBUTANTE" - }, - "2634": { - "name": "Matron", - "proto": "FURFROU_MATRON" - }, - "2635": { - "name": "Dandy", - "proto": "FURFROU_DANDY" - }, - "2636": { - "name": "La Reine", - "proto": "FURFROU_LA_REINE" - }, - "2637": { - "name": "Kabuki", - "proto": "FURFROU_KABUKI" - }, - "2638": { - "name": "Pharaoh", - "proto": "FURFROU_PHARAOH" - } - }, - "default_form_id": 2629, - "pokedex_id": 676, - "genId": "6", - "generation": "Kalos", - "types": [ - "Normal" - ], - "attack": 164, - "defense": 167, - "stamina": 181, - "height": 1.2, - "weight": 28, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Take Down", - "Bite", - "Sucker Punch" - ], - "charged_moves": [ - "Surf", - "Dark Pulse", - "Grass Knot" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "677": { - "name": "Espurr", - "forms": { - "0": {} - }, - "pokedex_id": 677, - "genId": "6", - "generation": "Kalos", - "types": [ - "Psychic" - ], - "attack": 120, - "defense": 114, - "stamina": 158, - "height": 0.3, - "weight": 3.5, - "flee_rate": 0.1, - "capture_rate": 0.4, - "quick_moves": [ - "Confusion", - "Scratch" - ], - "charged_moves": [ - "Psyshock", - "Energy Ball", - "Psychic" - ], - "evolutions": [ - { - "pokemon": 678, - "form": 2589, - "gender_requirement": 1 - }, - { - "pokemon": 678, - "form": 2590, - "gender_requirement": 2 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 1, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "678": { - "name": "Meowstic", - "forms": { - "2589": { - "name": "Normal", - "proto": "MEOWSTIC_NORMAL" - }, - "2590": { - "name": "Female", - "proto": "MEOWSTIC_FEMALE", - "quick_moves": [ - "Confusion", - "Charm" - ], - "charged_moves": [ - "Psychic", - "Energy Ball", - "Shadow Ball" - ] - } - }, - "default_form_id": 2589, - "pokedex_id": 678, - "genId": "6", - "generation": "Kalos", - "types": [ - "Psychic" - ], - "attack": 166, - "defense": 167, - "stamina": 179, - "height": 0.6, - "weight": 8.5, - "flee_rate": 0.07, - "capture_rate": 0.2, - "quick_moves": [ - "Confusion", - "Sucker Punch" - ], - "charged_moves": [ - "Psychic", - "Energy Ball", - "Thunderbolt" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "679": { - "name": "Honedge", - "forms": { - "0": {} - }, - "pokedex_id": 679, - "genId": "6", - "generation": "Kalos", - "types": [ - "Steel", - "Ghost" - ], - "height": 0.8, - "weight": 2, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Fury Cutter" - ], - "charged_moves": [ - "Iron Head", - "Gyro Ball" - ], - "evolutions": [ - { - "pokemon": 680 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "680": { - "name": "Doublade", - "forms": { - "0": {} - }, - "pokedex_id": 680, - "genId": "6", - "generation": "Kalos", - "types": [ - "Steel", - "Ghost" - ], - "height": 0.8, - "weight": 4.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Psycho Cut", - "Fury Cutter" - ], - "charged_moves": [ - "Iron Head", - "Gyro Ball" - ], - "evolutions": [ - { - "pokemon": 681 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "681": { - "name": "Aegislash", - "forms": { - "2639": { - "name": "Shield", - "proto": "AEGISLASH_SHIELD" - }, - "2640": { - "name": "Blade", - "proto": "AEGISLASH_BLADE" - } - }, - "pokedex_id": 681, - "genId": "6", - "generation": "Kalos", - "types": [ - "Steel", - "Ghost" - ], - "height": 1.7, - "weight": 53, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Psycho Cut", - "Fury Cutter" - ], - "charged_moves": [ - "Flash Cannon", - "Gyro Ball", - "Shadow Ball" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "682": { - "name": "Spritzee", - "forms": { - "0": {} - }, - "pokedex_id": 682, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fairy" - ], - "attack": 110, - "defense": 113, - "stamina": 186, - "height": 0.2, - "weight": 0.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Charm", - "Charge Beam" - ], - "charged_moves": [ - "Draining Kiss", - "Thunderbolt" - ], - "evolutions": [ - { - "pokemon": 683 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "683": { - "name": "Aromatisse", - "forms": { - "0": {} - }, - "pokedex_id": 683, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fairy" - ], - "attack": 173, - "defense": 150, - "stamina": 226, - "height": 0.8, - "weight": 15.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Charm", - "Charge Beam" - ], - "charged_moves": [ - "Moonblast", - "Thunderbolt", - "Psychic", - "Draining Kiss" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "684": { - "name": "Swirlix", - "forms": { - "0": {} - }, - "pokedex_id": 684, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fairy" - ], - "attack": 109, - "defense": 119, - "stamina": 158, - "height": 0.4, - "weight": 3.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle" - ], - "charged_moves": [ - "Draining Kiss", - "Energy Ball" - ], - "evolutions": [ - { - "pokemon": 685 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "685": { - "name": "Slurpuff", - "forms": { - "0": {} - }, - "pokedex_id": 685, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fairy" - ], - "attack": 168, - "defense": 163, - "stamina": 193, - "height": 0.8, - "weight": 5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Charm" - ], - "charged_moves": [ - "Play Rough", - "Energy Ball", - "Flamethrower", - "Draining Kiss" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "686": { - "name": "Inkay", - "forms": { - "0": {} - }, - "pokedex_id": 686, - "genId": "6", - "generation": "Kalos", - "types": [ - "Dark", - "Psychic" - ], - "attack": 98, - "defense": 95, - "stamina": 142, - "height": 0.4, - "weight": 3.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Peck", - "Tackle" - ], - "charged_moves": [ - "Psybeam", - "Night Slash" - ], - "evolutions": [ - { - "pokemon": 687 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "687": { - "name": "Malamar", - "forms": { - "0": {} - }, - "pokedex_id": 687, - "genId": "6", - "generation": "Kalos", - "types": [ - "Dark", - "Psychic" - ], - "attack": 177, - "defense": 165, - "stamina": 200, - "height": 1.5, - "weight": 47, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Peck", - "Psycho Cut" - ], - "charged_moves": [ - "Psybeam", - "Foul Play", - "Super Power", - "Hyper Beam" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "688": { - "name": "Binacle", - "forms": { - "0": {} - }, - "pokedex_id": 688, - "genId": "6", - "generation": "Kalos", - "types": [ - "Rock", - "Water" - ], - "attack": 96, - "defense": 120, - "stamina": 123, - "height": 0.5, - "weight": 31, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Scratch", - "Mud Slap" - ], - "charged_moves": [ - "Ancient Power", - "Cross Chop", - "Dig" - ], - "evolutions": [ - { - "pokemon": 689 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "689": { - "name": "Barbaracle", - "forms": { - "0": {} - }, - "pokedex_id": 689, - "genId": "6", - "generation": "Kalos", - "types": [ - "Rock", - "Water" - ], - "attack": 194, - "defense": 205, - "stamina": 176, - "height": 1.3, - "weight": 96, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Mud Slap", - "Fury Cutter" - ], - "charged_moves": [ - "Skull Bash", - "Cross Chop", - "Stone Edge", - "Grass Knot" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "690": { - "name": "Skrelp", - "forms": { - "0": {} - }, - "pokedex_id": 690, - "genId": "6", - "generation": "Kalos", - "types": [ - "Poison", - "Water" - ], - "attack": 109, - "defense": 109, - "stamina": 137, - "height": 0.5, - "weight": 7.3, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Acid" - ], - "charged_moves": [ - "Aqua Tail", - "Water Pulse", - "Twister", - "Sludge Bomb" - ], - "evolutions": [ - { - "pokemon": 691 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "691": { - "name": "Dragalge", - "forms": { - "0": {} - }, - "pokedex_id": 691, - "genId": "6", - "generation": "Kalos", - "types": [ - "Poison", - "Dragon" - ], - "attack": 177, - "defense": 207, - "stamina": 163, - "height": 1.8, - "weight": 81.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Acid", - "Dragon Tail" - ], - "charged_moves": [ - "Hydro Pump", - "Aqua Tail", - "Outrage", - "Gunk Shot" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "692": { - "name": "Clauncher", - "forms": { - "0": {} - }, - "pokedex_id": 692, - "genId": "6", - "generation": "Kalos", - "types": [ - "Water" - ], - "attack": 108, - "defense": 117, - "stamina": 137, - "height": 0.5, - "weight": 8.3, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Smack Down" - ], - "charged_moves": [ - "Water Pulse", - "Crabhammer", - "Aqua Jet" - ], - "evolutions": [ - { - "pokemon": 693 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "693": { - "name": "Clawitzer", - "forms": { - "0": {} - }, - "pokedex_id": 693, - "genId": "6", - "generation": "Kalos", - "types": [ - "Water" - ], - "attack": 221, - "defense": 171, - "stamina": 174, - "height": 1.3, - "weight": 35.3, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Water Gun", - "Smack Down" - ], - "charged_moves": [ - "Water Pulse", - "Dark Pulse", - "Ice Beam", - "Crabhammer" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "694": { - "name": "Helioptile", - "forms": { - "0": {} - }, - "pokedex_id": 694, - "genId": "6", - "generation": "Kalos", - "types": [ - "Electric", - "Normal" - ], - "attack": 115, - "defense": 78, - "stamina": 127, - "height": 0.5, - "weight": 6, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Quick Attack", - "Thunder Shock" - ], - "charged_moves": [ - "Parabolic Charge", - "Bulldoze", - "Discharge" - ], - "evolutions": [ - { - "pokemon": 695 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "695": { - "name": "Heliolisk", - "forms": { - "0": {} - }, - "pokedex_id": 695, - "genId": "6", - "generation": "Kalos", - "types": [ - "Electric", - "Normal" - ], - "attack": 219, - "defense": 168, - "stamina": 158, - "height": 1, - "weight": 21, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Quick Attack", - "Volt Switch", - "Mud Slap" - ], - "charged_moves": [ - "Parabolic Charge", - "Bulldoze", - "Thunderbolt", - "Grass Knot" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "696": { - "name": "Tyrunt", - "forms": { - "0": {} - }, - "pokedex_id": 696, - "genId": "6", - "generation": "Kalos", - "types": [ - "Rock", - "Dragon" - ], - "attack": 158, - "defense": 123, - "stamina": 151, - "height": 0.8, - "weight": 26, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Dragon Tail", - "Tackle" - ], - "charged_moves": [ - "Stomp", - "Ancient Power", - "Dragon Claw" - ], - "evolutions": [ - { - "pokemon": 697 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "697": { - "name": "Tyrantrum", - "forms": { - "0": {} - }, - "pokedex_id": 697, - "genId": "6", - "generation": "Kalos", - "types": [ - "Rock", - "Dragon" - ], - "attack": 227, - "defense": 191, - "stamina": 193, - "height": 2.5, - "weight": 270, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Dragon Tail", - "Charm", - "Rock Throw" - ], - "charged_moves": [ - "Crunch", - "Stone Edge", - "Outrage", - "Earthquake" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "698": { - "name": "Amaura", - "forms": { - "0": {} - }, - "pokedex_id": 698, - "genId": "6", - "generation": "Kalos", - "types": [ - "Rock", - "Ice" - ], - "attack": 124, - "defense": 109, - "stamina": 184, - "height": 1.3, - "weight": 25.2, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Powder Snow", - "Frost Breath" - ], - "charged_moves": [ - "Weather Ball", - "Ancient Power", - "Aurora Beam", - "Thunderbolt" - ], - "evolutions": [ - { - "pokemon": 699 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "699": { - "name": "Aurorus", - "forms": { - "0": {} - }, - "pokedex_id": 699, - "genId": "6", - "generation": "Kalos", - "types": [ - "Rock", - "Ice" - ], - "attack": 186, - "defense": 163, - "stamina": 265, - "height": 2.7, - "weight": 225, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Powder Snow", - "Frost Breath", - "Rock Throw" - ], - "charged_moves": [ - "Weather Ball", - "Ancient Power", - "Blizzard", - "Thunderbolt", - "Hyper Beam" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "700": { - "name": "Sylveon", - "forms": { - "0": {} - }, - "pokedex_id": 700, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fairy" - ], - "attack": 203, - "defense": 205, - "stamina": 216, - "height": 1, - "weight": 23.5, - "flee_rate": 0.06, - "capture_rate": 0.125, - "quick_moves": [ - "Charm", - "Quick Attack" - ], - "charged_moves": [ - "Moonblast", - "Dazzling Gleam", - "Draining Kiss" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "701": { - "name": "Hawlucha", - "forms": { - "0": {} - }, - "pokedex_id": 701, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fighting", - "Flying" - ], - "attack": 195, - "defense": 153, - "stamina": 186, - "height": 0.8, - "weight": 21.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Wing Attack", - "Low Kick", - "Poison Jab" - ], - "charged_moves": [ - "Flying Press", - "Sky Attack", - "X Scissor", - "Power Up" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "702": { - "name": "Dedenne", - "forms": { - "0": {} - }, - "pokedex_id": 702, - "genId": "6", - "generation": "Kalos", - "types": [ - "Electric", - "Fairy" - ], - "attack": 164, - "defense": 134, - "stamina": 167, - "height": 0.2, - "weight": 2.2, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Thunder Shock" - ], - "charged_moves": [ - "Parabolic Charge", - "Discharge", - "Play Rough" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "703": { - "name": "Carbink", - "forms": { - "0": {} - }, - "pokedex_id": 703, - "genId": "6", - "generation": "Kalos", - "types": [ - "Rock", - "Fairy" - ], - "attack": 95, - "defense": 285, - "stamina": 137, - "height": 0.3, - "weight": 5.7, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Tackle", - "Rock Throw" - ], - "charged_moves": [ - "Rock Slide", - "Moonblast", - "Power Gem" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "704": { - "name": "Goomy", - "forms": { - "0": {} - }, - "pokedex_id": 704, - "genId": "6", - "generation": "Kalos", - "types": [ - "Dragon" - ], - "attack": 101, - "defense": 112, - "stamina": 128, - "height": 0.3, - "weight": 2.8, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Water Gun", - "Tackle" - ], - "charged_moves": [ - "Dragon Pulse", - "Sludge Wave", - "Muddy Water" - ], - "evolutions": [ - { - "pokemon": 705 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "705": { - "name": "Sliggoo", - "forms": { - "0": {} - }, - "pokedex_id": 705, - "genId": "6", - "generation": "Kalos", - "types": [ - "Dragon" - ], - "attack": 159, - "defense": 176, - "stamina": 169, - "height": 0.8, - "weight": 17.5, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Water Gun", - "Tackle" - ], - "charged_moves": [ - "Dragon Pulse", - "Sludge Wave", - "Muddy Water", - "Water Pulse" - ], - "evolutions": [ - { - "pokemon": 706 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "706": { - "name": "Goodra", - "forms": { - "0": {} - }, - "pokedex_id": 706, - "genId": "6", - "generation": "Kalos", - "types": [ - "Dragon" - ], - "attack": 220, - "defense": 242, - "stamina": 207, - "height": 2, - "weight": 150.5, - "flee_rate": 0.05, - "capture_rate": 0.05, - "quick_moves": [ - "Water Gun", - "Dragon Breath" - ], - "charged_moves": [ - "Draco Meteor", - "Sludge Wave", - "Muddy Water", - "Power Whip" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "707": { - "name": "Klefki", - "forms": { - "0": {} - }, - "pokedex_id": 707, - "genId": "6", - "generation": "Kalos", - "types": [ - "Steel", - "Fairy" - ], - "attack": 160, - "defense": 179, - "stamina": 149, - "height": 0.2, - "weight": 3, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Astonish", - "Tackle" - ], - "charged_moves": [ - "Flash Cannon", - "Play Rough", - "Draining Kiss", - "Foul Play" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "708": { - "name": "Phantump", - "forms": { - "0": {} - }, - "pokedex_id": 708, - "genId": "6", - "generation": "Kalos", - "types": [ - "Ghost", - "Grass" - ], - "attack": 125, - "defense": 103, - "stamina": 125, - "height": 0.4, - "weight": 7, - "flee_rate": 0.1, - "capture_rate": 0.3, - "quick_moves": [ - "Astonish", - "Tackle" - ], - "charged_moves": [ - "Seed Bomb", - "Shadow Ball", - "Foul Play" - ], - "evolutions": [ - { - "pokemon": 709 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "709": { - "name": "Trevenant", - "forms": { - "0": {} - }, - "pokedex_id": 709, - "genId": "6", - "generation": "Kalos", - "types": [ - "Ghost", - "Grass" - ], - "attack": 201, - "defense": 154, - "stamina": 198, - "height": 1.5, - "weight": 71, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Shadow Claw", - "Sucker Punch" - ], - "charged_moves": [ - "Seed Bomb", - "Shadow Ball", - "Foul Play" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "710": { - "name": "Pumpkaboo", - "forms": { - "2641": { - "name": "Small", - "proto": "PUMPKABOO_SMALL" - }, - "2642": { - "name": "Average", - "proto": "PUMPKABOO_AVERAGE" - }, - "2643": { - "name": "Large", - "proto": "PUMPKABOO_LARGE" - }, - "2644": { - "name": "Super", - "proto": "PUMPKABOO_SUPER" - } - }, - "pokedex_id": 710, - "genId": "6", - "generation": "Kalos", - "types": [ - "Ghost", - "Grass" - ], - "attack": 121, - "defense": 123, - "stamina": 135, - "height": 0.4, - "weight": 5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Astonish", - "Razor Leaf" - ], - "charged_moves": [ - "Grass Knot", - "Shadow Sneak", - "Foul Play", - "Earthquake" - ], - "evolutions": [ - { - "pokemon": 711 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75 - }, - "711": { - "name": "Gourgeist", - "forms": { - "2645": { - "name": "Small", - "proto": "GOURGEIST_SMALL" - }, - "2646": { - "name": "Average", - "proto": "GOURGEIST_AVERAGE" - }, - "2647": { - "name": "Large", - "proto": "GOURGEIST_LARGE" - }, - "2648": { - "name": "Super", - "proto": "GOURGEIST_SUPER" - } - }, - "pokedex_id": 711, - "genId": "6", - "generation": "Kalos", - "types": [ - "Ghost", - "Grass" - ], - "attack": 175, - "defense": 213, - "stamina": 163, - "height": 0.9, - "weight": 12.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Hex", - "Razor Leaf" - ], - "charged_moves": [ - "Seed Bomb", - "Shadow Ball", - "Foul Play", - "Fire Blast" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75 - }, - "712": { - "name": "Bergmite", - "forms": { - "0": {} - }, - "pokedex_id": 712, - "genId": "6", - "generation": "Kalos", - "types": [ - "Ice" - ], - "attack": 117, - "defense": 120, - "stamina": 146, - "height": 1, - "weight": 99.5, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Bite", - "Tackle" - ], - "charged_moves": [ - "Crunch", - "Icy Wind", - "Mirror Coat" - ], - "evolutions": [ - { - "pokemon": 713 - } - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "713": { - "name": "Avalugg", - "forms": { - "0": {} - }, - "pokedex_id": 713, - "genId": "6", - "generation": "Kalos", - "types": [ - "Ice" - ], - "attack": 196, - "defense": 240, - "stamina": 216, - "height": 2, - "weight": 505, - "flee_rate": 0.1, - "capture_rate": 0.2, - "quick_moves": [ - "Bite", - "Ice Fang" - ], - "charged_moves": [ - "Crunch", - "Avalanche", - "Earthquake", - "Body Slam", - "Mirror Coat" - ], - "legendary": false, - "mythic": false, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "714": { - "name": "Noibat", - "forms": { - "0": {} - }, - "pokedex_id": 714, - "genId": "6", - "generation": "Kalos", - "types": [ - "Flying", - "Dragon" - ], - "attack": 83, - "defense": 73, - "stamina": 120, - "height": 0.5, - "weight": 8, - "flee_rate": 0.09, - "capture_rate": 0.4, - "quick_moves": [ - "Wing Attack", - "Bite" - ], - "charged_moves": [ - "Dragon Pulse", - "Air Cutter", - "Heat Wave" - ], - "evolutions": [ - { - "pokemon": 715 - } - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 4, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "715": { - "name": "Noivern", - "forms": { - "0": {} - }, - "pokedex_id": 715, - "genId": "6", - "generation": "Kalos", - "types": [ - "Flying", - "Dragon" - ], - "attack": 205, - "defense": 175, - "stamina": 198, - "height": 1.5, - "weight": 85, - "flee_rate": 0.05, - "capture_rate": 0.15, - "quick_moves": [ - "Air Slash", - "Bite" - ], - "charged_moves": [ - "Draco Meteor", - "Hurricane", - "Heat Wave", - "Psychic" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 6, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "716": { - "name": "Xerneas", - "forms": { - "2649": { - "name": "Neutral", - "proto": "XERNEAS_NEUTRAL" - }, - "2650": { - "name": "Active", - "proto": "XERNEAS_ACTIVE" - } - }, - "pokedex_id": 716, - "genId": "6", - "generation": "Kalos", - "types": [ - "Fairy" - ], - "attack": 250, - "defense": 185, - "stamina": 246, - "height": 3, - "weight": 215, - "flee_rate": 0.1, - "capture_rate": 0.02, - "quick_moves": [ - "Tackle", - "Zen Headbutt" - ], - "charged_moves": [ - "Moonblast", - "Megahorn", - "Close Combat", - "Giga Impact", - "Thunder" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "717": { - "name": "Yveltal", - "forms": { - "0": {} - }, - "pokedex_id": 717, - "genId": "6", - "generation": "Kalos", - "types": [ - "Dark", - "Flying" - ], - "attack": 250, - "defense": 185, - "stamina": 246, - "height": 5.8, - "weight": 203, - "flee_rate": 0.1, - "capture_rate": 0.02, - "quick_moves": [ - "Sucker Punch", - "Snarl", - "Gust" - ], - "charged_moves": [ - "Dark Pulse", - "Hurricane", - "Focus Blast", - "Hyper Beam", - "Psychic" - ], - "legendary": true, - "mythic": false, - "buddy_group_number": 7, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "718": { - "name": "Zygarde", - "forms": { - "2591": { - "name": "Ten Percent", - "proto": "ZYGARDE_TEN_PERCENT" - }, - "2592": { - "name": "Fifty Percent", - "proto": "ZYGARDE_FIFTY_PERCENT" - }, - "2593": { - "name": "Complete", - "proto": "ZYGARDE_COMPLETE" - } - }, - "pokedex_id": 718, - "genId": "6", - "generation": "Kalos", - "types": [ - "Dragon", - "Ground" - ], - "flee_rate": 0.1, - "capture_rate": 0.02, - "quick_moves": [ - "Dragon Tail", - "Bite", - "Zen Headbutt" - ], - "charged_moves": [ - "Outrage", - "Earthquake", - "Crunch", - "Hyper Beam", - "Bulldoze" - ], - "legendary": true, - "mythic": false, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100 - }, - "719": { - "name": "Diancie", - "forms": { - "0": {} - }, - "temp_evolutions": { - "1": { - "attack": 342, - "defense": 235, - "stamina": 137, - "unreleased": true, - "types": [ - "Fairy", - "Rock" - ] - } - } - }, - "720": { - "name": "Hoopa", - "forms": { - "2651": { - "name": "Confined", - "proto": "HOOPA_CONFINED" - }, - "2652": { - "name": "Unbound", - "proto": "HOOPA_UNBOUND" - } - } - }, - "721": { - "name": "Volcanion", - "forms": { - "0": {} - } - }, - "808": { - "name": "Meltan", - "forms": { - "2321": { - "name": "Normal", - "proto": "MELTAN_NORMAL" - }, - "2322": { - "name": "Shadow", - "proto": "MELTAN_SHADOW" - }, - "2323": { - "name": "Purified", - "proto": "MELTAN_PURIFIED" - } - }, - "default_form_id": 2321, - "pokedex_id": 808, - "genId": "7", - "generation": "Alola", - "types": [ - "Steel" - ], - "attack": 118, - "defense": 99, - "stamina": 130, - "height": 0.2, - "weight": 8, - "capture_rate": 0.3, - "quick_moves": [ - "Thunder Shock" - ], - "charged_moves": [ - "Flash Cannon", - "Thunderbolt" - ], - "evolutions": [ - { - "pokemon": 809 - } - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 2, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100, - "gym_defender_eligible": true - }, - "809": { - "name": "Melmetal", - "forms": { - "2324": { - "name": "Normal", - "proto": "MELMETAL_NORMAL" - }, - "2325": { - "name": "Shadow", - "proto": "MELMETAL_SHADOW" - }, - "2326": { - "name": "Purified", - "proto": "MELMETAL_PURIFIED" - } - }, - "default_form_id": 2324, - "pokedex_id": 809, - "genId": "7", - "generation": "Alola", - "types": [ - "Steel" - ], - "attack": 226, - "defense": 190, - "stamina": 264, - "height": 2.5, - "weight": 800, - "capture_rate": 0.3, - "quick_moves": [ - "Thunder Shock" - ], - "charged_moves": [ - "Flash Cannon", - "Thunderbolt", - "Hyper Beam", - "Rock Slide", - "Super Power" - ], - "legendary": false, - "mythic": true, - "buddy_group_number": 3, - "buddy_distance": 20, - "third_move_stardust": 100000, - "third_move_candy": 100, - "gym_defender_eligible": true - }, - "862": { - "name": "Obstagoon", - "forms": { - "2501": { - "name": "Normal", - "proto": "OBSTAGOON_NORMAL" - }, - "2502": { - "name": "Shadow", - "proto": "OBSTAGOON_SHADOW" - }, - "2503": { - "name": "Purified", - "proto": "OBSTAGOON_PURIFIED" - } - }, - "default_form_id": 2501, - "pokedex_id": 862, - "genId": "8", - "generation": "Galar", - "types": [ - "Dark", - "Normal" - ], - "attack": 180, - "defense": 194, - "stamina": 212, - "height": 1.6, - "weight": 46, - "flee_rate": 0.04, - "capture_rate": 0.04, - "quick_moves": [ - "Counter", - "Lick" - ], - "charged_moves": [ - "Cross Chop", - "Night Slash", - "Hyper Beam", - "Gunk Shot" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 10000, - "third_move_candy": 25, - "gym_defender_eligible": true - }, - "863": { - "name": "Perrserker", - "forms": { - "2504": { - "name": "Normal", - "proto": "PERRSERKER_NORMAL" - }, - "2505": { - "name": "Shadow", - "proto": "PERRSERKER_SHADOW" - }, - "2506": { - "name": "Purified", - "proto": "PERRSERKER_PURIFIED" - } - }, - "default_form_id": 2504, - "pokedex_id": 863, - "genId": "8", - "generation": "Galar", - "types": [ - "Steel" - ], - "attack": 195, - "defense": 162, - "stamina": 172, - "height": 0.8, - "weight": 28, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Metal Claw", - "Shadow Claw" - ], - "charged_moves": [ - "Iron Head", - "Close Combat", - "Play Rough", - "Foul Play" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "864": { - "name": "Cursola", - "forms": { - "2507": { - "name": "Normal", - "proto": "CURSOLA_NORMAL" - }, - "2508": { - "name": "Shadow", - "proto": "CURSOLA_SHADOW" - }, - "2509": { - "name": "Purified", - "proto": "CURSOLA_PURIFIED" - } - } - }, - "865": { - "name": "Sirfetchd", - "forms": { - "2510": { - "name": "Normal", - "proto": "SIRFETCHD_NORMAL" - }, - "2511": { - "name": "Shadow", - "proto": "SIRFETCHD_SHADOW" - }, - "2512": { - "name": "Purified", - "proto": "SIRFETCHD_PURIFIED" - } - }, - "default_form_id": 2510, - "pokedex_id": 865, - "genId": "8", - "generation": "Galar", - "types": [ - "Fighting" - ], - "attack": 248, - "defense": 176, - "stamina": 158, - "height": 0.8, - "weight": 117, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Counter", - "Fury Cutter" - ], - "charged_moves": [ - "Close Combat", - "Brave Bird", - "Leaf Blade", - "Night Slash" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 2, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - }, - "866": { - "name": "Mr Rime", - "forms": { - "2513": { - "name": "Normal", - "proto": "MR_RIME_NORMAL" - }, - "2514": { - "name": "Shadow", - "proto": "MR_RIME_SHADOW" - }, - "2515": { - "name": "Purified", - "proto": "MR_RIME_PURIFIED" - } - }, - "default_form_id": 2513, - "pokedex_id": 866, - "genId": "8", - "generation": "Galar", - "types": [ - "Ice", - "Psychic" - ], - "attack": 212, - "defense": 179, - "stamina": 190, - "height": 1.5, - "weight": 58.2, - "flee_rate": 0.09, - "capture_rate": 0.3, - "quick_moves": [ - "Confusion", - "Zen Headbutt", - "Ice Shard" - ], - "charged_moves": [ - "Psybeam", - "Psychic", - "Ice Punch", - "Icy Wind" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 5, - "third_move_stardust": 75000, - "third_move_candy": 75, - "gym_defender_eligible": true - }, - "867": { - "name": "Runerigus", - "forms": { - "2516": { - "name": "Normal", - "proto": "RUNERIGUS_NORMAL" - }, - "2517": { - "name": "Shadow", - "proto": "RUNERIGUS_SHADOW" - }, - "2518": { - "name": "Purified", - "proto": "RUNERIGUS_PURIFIED" - } - }, - "default_form_id": 2516, - "pokedex_id": 867, - "genId": "8", - "generation": "Galar", - "types": [ - "Ground", - "Ghost" - ], - "attack": 163, - "defense": 237, - "stamina": 151, - "height": 1.6, - "weight": 66.6, - "flee_rate": 0.07, - "capture_rate": 0.1, - "quick_moves": [ - "Astonish" - ], - "charged_moves": [ - "Shadow Ball", - "Sand Tomb", - "Rock Tomb" - ], - "legendary": false, - "mythic": false, - "buddy_group_number": 3, - "buddy_distance": 3, - "third_move_stardust": 50000, - "third_move_candy": 50, - "gym_defender_eligible": true - } - }, - "pokemon_types": { - "Normal": { - "immunes": [ - "Ghost" - ], - "weaknesses": [ - "Fighting" - ], - "resistances": [ - "None" - ], - "strengths": [] - }, - "Fighting": { - "immunes": [], - "weaknesses": [ - "Flying", - "Psychic", - "Fairy" - ], - "resistances": [ - "Bug", - "Rock", - "Dark" - ], - "strengths": [ - "Normal", - "Ice", - "Rock", - "Dark", - "Steel" - ] - }, - "Flying": { - "immunes": [ - "Flying" - ], - "weaknesses": [ - "Electric", - "Ice", - "Rock" - ], - "resistances": [ - "Grass", - "Fighting", - "Bug" - ], - "strengths": [ - "Grass", - "Fighting", - "Bug" - ] - }, - "Poison": { - "immunes": [], - "weaknesses": [ - "Ground", - "Psychic" - ], - "resistances": [ - "Grass", - "Fighting", - "Poison", - "Bug", - "Fairy" - ], - "strengths": [ - "Grass", - "Fairy" - ] - }, - "Ground": { - "immunes": [ - "Flying" - ], - "weaknesses": [ - "Water", - "Grass", - "Ice" - ], - "resistances": [ - "Poison", - "Rock" - ], - "strengths": [ - "Fire", - "Electric", - "Poison", - "Rock", - "Steel" - ] - }, - "Rock": { - "immunes": [], - "weaknesses": [ - "Water", - "Grass", - "Fighting", - "Ground", - "Steel" - ], - "resistances": [ - "Normal", - "Fire", - "Poison", - "Flying" - ], - "strengths": [ - "Fire", - "Ice", - "Flying", - "Bug" - ] - }, - "Bug": { - "immunes": [], - "weaknesses": [ - "Fire", - "Flying", - "Rock" - ], - "resistances": [ - "Grass", - "Fighting", - "Ground" - ], - "strengths": [ - "Grass", - "Psychic", - "Dark" - ] - }, - "Ghost": { - "immunes": [ - "Normal", - "Fighting" - ], - "weaknesses": [ - "Ghost", - "Dark" - ], - "resistances": [ - "Poison", - "Bug" - ], - "strengths": [ - "Psychic", - "Ghost" - ] - }, - "Steel": { - "immunes": [ - "Poison" - ], - "weaknesses": [ - "Fire", - "Fighting", - "Ground" - ], - "resistances": [ - "Normal", - "Grass", - "Ice", - "Flying", - "Psychic", - "Bug", - "Rock", - "Dragon", - "Steel", - "Fairy" - ], - "strengths": [ - "Ice", - "Rock", - "Fairy" - ] - }, - "Fire": { - "immunes": [], - "weaknesses": [ - "Water", - "Ground", - "Rock" - ], - "resistances": [ - "Fire", - "Grass", - "Ice", - "Bug", - "Steel", - "Fairy" - ], - "strengths": [ - "Grass", - "Ice", - "Bug", - "Steel" - ] - }, - "Water": { - "immunes": [], - "weaknesses": [ - "Grass", - "Electric" - ], - "resistances": [ - "Fire", - "Water", - "Ice", - "Steel" - ], - "strengths": [ - "Water", - "Ground", - "Rock" - ] - }, - "Grass": { - "immunes": [], - "weaknesses": [ - "Fire", - "Ice", - "Poison", - "Flying", - "Bug" - ], - "resistances": [ - "Water", - "Grass", - "Electric", - "Ground" - ], - "strengths": [ - "Water", - "Ground", - "Rock" - ] - }, - "Electric": { - "immunes": [], - "weaknesses": [ - "Ground" - ], - "resistances": [ - "Electric", - "Flying", - "Steel" - ], - "strengths": [ - "Water", - "Flying" - ] - }, - "Psychic": { - "immunes": [], - "weaknesses": [ - "Bug", - "Ghost", - "Dark" - ], - "resistances": [ - "Fighting", - "Psychic" - ], - "strengths": [ - "Fighting", - "Poison" - ] - }, - "Ice": { - "immunes": [], - "weaknesses": [ - "Fire", - "Fighting", - "Rock", - "Steel" - ], - "resistances": [ - "Ice" - ], - "strengths": [ - "Grass", - "Ground", - "Flying", - "Dragon" - ] - }, - "Dragon": { - "immunes": [], - "weaknesses": [ - "Ice", - "Dragon", - "Fairy" - ], - "resistances": [ - "Fire", - "Water", - "Grass", - "Electric" - ], - "strengths": [ - "Dragon" - ] - }, - "Dark": { - "immunes": [ - "Psychic" - ], - "weaknesses": [ - "Fighting", - "Bug", - "Fairy" - ], - "resistances": [ - "Ghost", - "Dark" - ], - "strengths": [ - "Psychic", - "Ghost" - ] - }, - "Fairy": { - "immunes": [ - "Dragon" - ], - "weaknesses": [ - "Poison", - "Steel" - ], - "resistances": [ - "Fighting", - "Bug", - "Dark" - ], - "strengths": [ - "Fighting", - "Dragon", - "Dark" - ] - } - }, - "moves": { - "0": { - "name": "Move Unset" - }, - "1": { - "name": "Thunder Shock" - }, - "2": { - "name": "Quick Attack" - }, - "3": { - "name": "Scratch" - }, - "4": { - "name": "Ember" - }, - "5": { - "name": "Vine Whip" - }, - "6": { - "name": "Tackle" - }, - "7": { - "name": "Razor Leaf" - }, - "8": { - "name": "Take Down" - }, - "9": { - "name": "Water Gun" - }, - "10": { - "name": "Bite" - }, - "11": { - "name": "Pound" - }, - "12": { - "name": "Double Slap" - }, - "13": { - "name": "Wrap", - "proto": "V0013_MOVE_WRAP", - "type": "Normal", - "power": 60 - }, - "14": { - "name": "Hyper Beam", - "proto": "V0014_MOVE_HYPER_BEAM", - "type": "Normal", - "power": 150 - }, - "15": { - "name": "Lick" - }, - "16": { - "name": "Dark Pulse", - "proto": "V0016_MOVE_DARK_PULSE", - "type": "Dark", - "power": 80 - }, - "17": { - "name": "Smog" - }, - "18": { - "name": "Sludge", - "proto": "V0018_MOVE_SLUDGE", - "type": "Poison", - "power": 50 - }, - "19": { - "name": "Metal Claw" - }, - "20": { - "name": "Vice Grip", - "proto": "V0020_MOVE_VICE_GRIP", - "type": "Normal", - "power": 40 - }, - "21": { - "name": "Flame Wheel", - "proto": "V0021_MOVE_FLAME_WHEEL", - "type": "Fire", - "power": 60 - }, - "22": { - "name": "Megahorn", - "proto": "V0022_MOVE_MEGAHORN", - "type": "Bug", - "power": 100 - }, - "23": { - "name": "Wing Attack" - }, - "24": { - "name": "Flamethrower", - "proto": "V0024_MOVE_FLAMETHROWER", - "type": "Fire", - "power": 90 - }, - "25": { - "name": "Sucker Punch" - }, - "26": { - "name": "Dig", - "proto": "V0026_MOVE_DIG", - "type": "Ground", - "power": 100 - }, - "27": { - "name": "Low Kick" - }, - "28": { - "name": "Cross Chop", - "proto": "V0028_MOVE_CROSS_CHOP", - "type": "Fighting", - "power": 50 - }, - "29": { - "name": "Psycho Cut" - }, - "30": { - "name": "Psybeam", - "proto": "V0030_MOVE_PSYBEAM", - "type": "Psychic", - "power": 70 - }, - "31": { - "name": "Earthquake", - "proto": "V0031_MOVE_EARTHQUAKE", - "type": "Ground", - "power": 120 - }, - "32": { - "name": "Stone Edge", - "proto": "V0032_MOVE_STONE_EDGE", - "type": "Rock", - "power": 100 - }, - "33": { - "name": "Ice Punch", - "proto": "V0033_MOVE_ICE_PUNCH", - "type": "Ice", - "power": 55 - }, - "34": { - "name": "Heart Stamp", - "proto": "V0034_MOVE_HEART_STAMP", - "type": "Psychic", - "power": 40 - }, - "35": { - "name": "Discharge", - "proto": "V0035_MOVE_DISCHARGE", - "type": "Electric", - "power": 65 - }, - "36": { - "name": "Flash Cannon", - "proto": "V0036_MOVE_FLASH_CANNON", - "type": "Steel", - "power": 110 - }, - "37": { - "name": "Peck" - }, - "38": { - "name": "Drill Peck", - "proto": "V0038_MOVE_DRILL_PECK", - "type": "Flying", - "power": 65 - }, - "39": { - "name": "Ice Beam", - "proto": "V0039_MOVE_ICE_BEAM", - "type": "Ice", - "power": 90 - }, - "40": { - "name": "Blizzard", - "proto": "V0040_MOVE_BLIZZARD", - "type": "Ice", - "power": 140 - }, - "41": { - "name": "Air Slash" - }, - "42": { - "name": "Heat Wave", - "proto": "V0042_MOVE_HEAT_WAVE", - "type": "Fire", - "power": 95 - }, - "43": { - "name": "Twineedle" - }, - "44": { - "name": "Poison Jab" - }, - "45": { - "name": "Aerial Ace", - "proto": "V0045_MOVE_AERIAL_ACE", - "type": "Flying", - "power": 55 - }, - "46": { - "name": "Drill Run", - "proto": "V0046_MOVE_DRILL_RUN", - "type": "Ground", - "power": 80 - }, - "47": { - "name": "Petal Blizzard", - "proto": "V0047_MOVE_PETAL_BLIZZARD", - "type": "Grass", - "power": 110 - }, - "48": { - "name": "Mega Drain", - "proto": "V0048_MOVE_MEGA_DRAIN", - "type": "Grass", - "power": 25 - }, - "49": { - "name": "Bug Buzz", - "proto": "V0049_MOVE_BUG_BUZZ", - "type": "Bug", - "power": 90 - }, - "50": { - "name": "Poison Fang", - "proto": "V0050_MOVE_POISON_FANG", - "type": "Poison", - "power": 40 - }, - "51": { - "name": "Night Slash", - "proto": "V0051_MOVE_NIGHT_SLASH", - "type": "Dark", - "power": 50 - }, - "52": { - "name": "Slash" - }, - "53": { - "name": "Bubble Beam", - "proto": "V0053_MOVE_BUBBLE_BEAM", - "type": "Water", - "power": 25 - }, - "54": { - "name": "Submission", - "proto": "V0054_MOVE_SUBMISSION", - "type": "Fighting", - "power": 60 - }, - "55": { - "name": "Karate Chop" - }, - "56": { - "name": "Low Sweep", - "proto": "V0056_MOVE_LOW_SWEEP", - "type": "Fighting", - "power": 40 - }, - "57": { - "name": "Aqua Jet", - "proto": "V0057_MOVE_AQUA_JET", - "type": "Water", - "power": 45 - }, - "58": { - "name": "Aqua Tail", - "proto": "V0058_MOVE_AQUA_TAIL", - "type": "Water", - "power": 50 - }, - "59": { - "name": "Seed Bomb", - "proto": "V0059_MOVE_SEED_BOMB", - "type": "Grass", - "power": 55 - }, - "60": { - "name": "Psyshock", - "proto": "V0060_MOVE_PSYSHOCK", - "type": "Psychic", - "power": 70 - }, - "61": { - "name": "Rock Throw" - }, - "62": { - "name": "Ancient Power", - "proto": "V0062_MOVE_ANCIENT_POWER", - "type": "Rock", - "power": 45 - }, - "63": { - "name": "Rock Tomb", - "proto": "V0063_MOVE_ROCK_TOMB", - "type": "Rock", - "power": 70 - }, - "64": { - "name": "Rock Slide", - "proto": "V0064_MOVE_ROCK_SLIDE", - "type": "Rock", - "power": 75 - }, - "65": { - "name": "Power Gem", - "proto": "V0065_MOVE_POWER_GEM", - "type": "Rock", - "power": 80 - }, - "66": { - "name": "Shadow Sneak", - "proto": "V0066_MOVE_SHADOW_SNEAK", - "type": "Ghost", - "power": 50 - }, - "67": { - "name": "Shadow Punch", - "proto": "V0067_MOVE_SHADOW_PUNCH", - "type": "Ghost", - "power": 40 - }, - "68": { - "name": "Shadow Claw" - }, - "69": { - "name": "Ominous Wind", - "proto": "V0069_MOVE_OMINOUS_WIND", - "type": "Ghost", - "power": 45 - }, - "70": { - "name": "Shadow Ball", - "proto": "V0070_MOVE_SHADOW_BALL", - "type": "Ghost", - "power": 100 - }, - "71": { - "name": "Bullet Punch" - }, - "72": { - "name": "Magnet Bomb", - "proto": "V0072_MOVE_MAGNET_BOMB", - "type": "Steel", - "power": 70 - }, - "73": { - "name": "Steel Wing" - }, - "74": { - "name": "Iron Head", - "proto": "V0074_MOVE_IRON_HEAD", - "type": "Steel", - "power": 70 - }, - "75": { - "name": "Parabolic Charge", - "proto": "V0075_MOVE_PARABOLIC_CHARGE", - "type": "Electric", - "power": 25 - }, - "76": { - "name": "Spark" - }, - "77": { - "name": "Thunder Punch", - "proto": "V0077_MOVE_THUNDER_PUNCH", - "type": "Electric", - "power": 55 - }, - "78": { - "name": "Thunder", - "proto": "V0078_MOVE_THUNDER", - "type": "Electric", - "power": 100 - }, - "79": { - "name": "Thunderbolt", - "proto": "V0079_MOVE_THUNDERBOLT", - "type": "Electric", - "power": 90 - }, - "80": { - "name": "Twister", - "proto": "V0080_MOVE_TWISTER", - "type": "Dragon", - "power": 45 - }, - "81": { - "name": "Dragon Breath" - }, - "82": { - "name": "Dragon Pulse", - "proto": "V0082_MOVE_DRAGON_PULSE", - "type": "Dragon", - "power": 90 - }, - "83": { - "name": "Dragon Claw", - "proto": "V0083_MOVE_DRAGON_CLAW", - "type": "Dragon", - "power": 50 - }, - "84": { - "name": "Disarming Voice", - "proto": "V0084_MOVE_DISARMING_VOICE", - "type": "Fairy", - "power": 70 - }, - "85": { - "name": "Draining Kiss", - "proto": "V0085_MOVE_DRAINING_KISS", - "type": "Fairy", - "power": 60 - }, - "86": { - "name": "Dazzling Gleam", - "proto": "V0086_MOVE_DAZZLING_GLEAM", - "type": "Fairy", - "power": 110 - }, - "87": { - "name": "Moonblast", - "proto": "V0087_MOVE_MOONBLAST", - "type": "Fairy", - "power": 110 - }, - "88": { - "name": "Play Rough", - "proto": "V0088_MOVE_PLAY_ROUGH", - "type": "Fairy", - "power": 90 - }, - "89": { - "name": "Cross Poison", - "proto": "V0089_MOVE_CROSS_POISON", - "type": "Poison", - "power": 40 - }, - "90": { - "name": "Sludge Bomb", - "proto": "V0090_MOVE_SLUDGE_BOMB", - "type": "Poison", - "power": 80 - }, - "91": { - "name": "Sludge Wave", - "proto": "V0091_MOVE_SLUDGE_WAVE", - "type": "Poison", - "power": 110 - }, - "92": { - "name": "Gunk Shot", - "proto": "V0092_MOVE_GUNK_SHOT", - "type": "Poison", - "power": 130 - }, - "93": { - "name": "Mud Shot" - }, - "94": { - "name": "Bone Club", - "proto": "V0094_MOVE_BONE_CLUB", - "type": "Ground", - "power": 40 - }, - "95": { - "name": "Bulldoze", - "proto": "V0095_MOVE_BULLDOZE", - "type": "Ground", - "power": 80 - }, - "96": { - "name": "Mud Bomb", - "proto": "V0096_MOVE_MUD_BOMB", - "type": "Ground", - "power": 55 - }, - "97": { - "name": "Fury Cutter" - }, - "98": { - "name": "Bug Bite" - }, - "99": { - "name": "Signal Beam", - "proto": "V0099_MOVE_SIGNAL_BEAM", - "type": "Bug", - "power": 75 - }, - "100": { - "name": "X Scissor", - "proto": "V0100_MOVE_X_SCISSOR", - "type": "Bug", - "power": 45 - }, - "101": { - "name": "Flame Charge", - "proto": "V0101_MOVE_FLAME_CHARGE", - "type": "Fire", - "power": 65 - }, - "102": { - "name": "Flame Burst", - "proto": "V0102_MOVE_FLAME_BURST", - "type": "Fire", - "power": 70 - }, - "103": { - "name": "Fire Blast", - "proto": "V0103_MOVE_FIRE_BLAST", - "type": "Fire", - "power": 140 - }, - "104": { - "name": "Brine", - "proto": "V0104_MOVE_BRINE", - "type": "Water", - "power": 60 - }, - "105": { - "name": "Water Pulse", - "proto": "V0105_MOVE_WATER_PULSE", - "type": "Water", - "power": 70 - }, - "106": { - "name": "Scald", - "proto": "V0106_MOVE_SCALD", - "type": "Water", - "power": 80 - }, - "107": { - "name": "Hydro Pump", - "proto": "V0107_MOVE_HYDRO_PUMP", - "type": "Water", - "power": 130 - }, - "108": { - "name": "Psychic", - "proto": "V0108_MOVE_PSYCHIC", - "type": "Psychic", - "power": 90 - }, - "109": { - "name": "Psystrike", - "proto": "V0109_MOVE_PSYSTRIKE", - "type": "Psychic", - "power": 90 - }, - "110": { - "name": "Ice Shard" - }, - "111": { - "name": "Icy Wind", - "proto": "V0111_MOVE_ICY_WIND", - "type": "Ice", - "power": 60 - }, - "112": { - "name": "Frost Breath" - }, - "113": { - "name": "Absorb" - }, - "114": { - "name": "Giga Drain", - "proto": "V0114_MOVE_GIGA_DRAIN", - "type": "Grass", - "power": 50 - }, - "115": { - "name": "Fire Punch", - "proto": "V0115_MOVE_FIRE_PUNCH", - "type": "Fire", - "power": 55 - }, - "116": { - "name": "Solar Beam", - "proto": "V0116_MOVE_SOLAR_BEAM", - "type": "Grass", - "power": 150 - }, - "117": { - "name": "Leaf Blade", - "proto": "V0117_MOVE_LEAF_BLADE", - "type": "Grass", - "power": 70 - }, - "118": { - "name": "Power Whip", - "proto": "V0118_MOVE_POWER_WHIP", - "type": "Grass", - "power": 90 - }, - "119": { - "name": "Splash" - }, - "120": { - "name": "Acid" - }, - "121": { - "name": "Air Cutter", - "proto": "V0121_MOVE_AIR_CUTTER", - "type": "Flying", - "power": 60 - }, - "122": { - "name": "Hurricane", - "proto": "V0122_MOVE_HURRICANE", - "type": "Flying", - "power": 110 - }, - "123": { - "name": "Brick Break", - "proto": "V0123_MOVE_BRICK_BREAK", - "type": "Fighting", - "power": 40 - }, - "124": { - "name": "Cut" - }, - "125": { - "name": "Swift", - "proto": "V0125_MOVE_SWIFT", - "type": "Normal", - "power": 60 - }, - "126": { - "name": "Horn Attack", - "proto": "V0126_MOVE_HORN_ATTACK", - "type": "Normal", - "power": 40 - }, - "127": { - "name": "Stomp", - "proto": "V0127_MOVE_STOMP", - "type": "Normal", - "power": 55 - }, - "128": { - "name": "Headbutt" - }, - "129": { - "name": "Hyper Fang", - "proto": "V0129_MOVE_HYPER_FANG", - "type": "Normal", - "power": 80 - }, - "130": { - "name": "Slam" - }, - "131": { - "name": "Body Slam", - "proto": "V0131_MOVE_BODY_SLAM", - "type": "Normal", - "power": 60 - }, - "132": { - "name": "Rest", - "proto": "V0132_MOVE_REST", - "type": "Normal", - "power": 50 - }, - "133": { - "name": "Struggle", - "proto": "V0133_MOVE_STRUGGLE", - "type": "Normal", - "power": 35 - }, - "134": { - "name": "Scald Blastoise", - "proto": "V0134_MOVE_SCALD_BLASTOISE", - "type": "Water", - "power": 50 - }, - "135": { - "name": "Hydro Pump Blastoise", - "proto": "V0135_MOVE_HYDRO_PUMP_BLASTOISE", - "type": "Water", - "power": 90 - }, - "136": { - "name": "Wrap Green", - "proto": "V0136_MOVE_WRAP_GREEN", - "type": "Normal", - "power": 25 - }, - "137": { - "name": "Wrap Pink", - "proto": "V0137_MOVE_WRAP_PINK", - "type": "Normal", - "power": 25 - }, - "200": { - "name": "Fury Cutter", - "proto": "V0200_MOVE_FURY_CUTTER_FAST", - "type": "Bug", - "power": 2 - }, - "201": { - "name": "Bug Bite", - "proto": "V0201_MOVE_BUG_BITE_FAST", - "type": "Bug", - "power": 3 - }, - "202": { - "name": "Bite", - "proto": "V0202_MOVE_BITE_FAST", - "type": "Dark", - "power": 4 - }, - "203": { - "name": "Sucker Punch", - "proto": "V0203_MOVE_SUCKER_PUNCH_FAST", - "type": "Dark", - "power": 5 - }, - "204": { - "name": "Dragon Breath", - "proto": "V0204_MOVE_DRAGON_BREATH_FAST", - "type": "Dragon", - "power": 4 - }, - "205": { - "name": "Thunder Shock", - "proto": "V0205_MOVE_THUNDER_SHOCK_FAST", - "type": "Electric", - "power": 3 - }, - "206": { - "name": "Spark", - "proto": "V0206_MOVE_SPARK_FAST", - "type": "Electric", - "power": 4 - }, - "207": { - "name": "Low Kick", - "proto": "V0207_MOVE_LOW_KICK_FAST", - "type": "Fighting", - "power": 4 - }, - "208": { - "name": "Karate Chop", - "proto": "V0208_MOVE_KARATE_CHOP_FAST", - "type": "Fighting", - "power": 5 - }, - "209": { - "name": "Ember", - "proto": "V0209_MOVE_EMBER_FAST", - "type": "Fire", - "power": 7 - }, - "210": { - "name": "Wing Attack", - "proto": "V0210_MOVE_WING_ATTACK_FAST", - "type": "Flying", - "power": 5 - }, - "211": { - "name": "Peck", - "proto": "V0211_MOVE_PECK_FAST", - "type": "Flying", - "power": 6 - }, - "212": { - "name": "Lick", - "proto": "V0212_MOVE_LICK_FAST", - "type": "Ghost", - "power": 3 - }, - "213": { - "name": "Shadow Claw", - "proto": "V0213_MOVE_SHADOW_CLAW_FAST", - "type": "Ghost", - "power": 6 - }, - "214": { - "name": "Vine Whip", - "proto": "V0214_MOVE_VINE_WHIP_FAST", - "type": "Grass", - "power": 5 - }, - "215": { - "name": "Razor Leaf", - "proto": "V0215_MOVE_RAZOR_LEAF_FAST", - "type": "Grass", - "power": 10 - }, - "216": { - "name": "Mud Shot", - "proto": "V0216_MOVE_MUD_SHOT_FAST", - "type": "Ground", - "power": 3 - }, - "217": { - "name": "Ice Shard", - "proto": "V0217_MOVE_ICE_SHARD_FAST", - "type": "Ice", - "power": 9 - }, - "218": { - "name": "Frost Breath", - "proto": "V0218_MOVE_FROST_BREATH_FAST", - "type": "Ice", - "power": 7 - }, - "219": { - "name": "Quick Attack", - "proto": "V0219_MOVE_QUICK_ATTACK_FAST", - "type": "Normal", - "power": 5 - }, - "220": { - "name": "Scratch", - "proto": "V0220_MOVE_SCRATCH_FAST", - "type": "Normal", - "power": 4 - }, - "221": { - "name": "Tackle", - "proto": "V0221_MOVE_TACKLE_FAST", - "type": "Normal", - "power": 3 - }, - "222": { - "name": "Pound", - "proto": "V0222_MOVE_POUND_FAST", - "type": "Normal", - "power": 5 - }, - "223": { - "name": "Cut", - "proto": "V0223_MOVE_CUT_FAST", - "type": "Normal", - "power": 3 - }, - "224": { - "name": "Poison Jab", - "proto": "V0224_MOVE_POISON_JAB_FAST", - "type": "Poison", - "power": 6 - }, - "225": { - "name": "Acid", - "proto": "V0225_MOVE_ACID_FAST", - "type": "Poison", - "power": 6 - }, - "226": { - "name": "Psycho Cut", - "proto": "V0226_MOVE_PSYCHO_CUT_FAST", - "type": "Psychic", - "power": 3 - }, - "227": { - "name": "Rock Throw", - "proto": "V0227_MOVE_ROCK_THROW_FAST", - "type": "Rock", - "power": 8 - }, - "228": { - "name": "Metal Claw", - "proto": "V0228_MOVE_METAL_CLAW_FAST", - "type": "Steel", - "power": 5 - }, - "229": { - "name": "Bullet Punch", - "proto": "V0229_MOVE_BULLET_PUNCH_FAST", - "type": "Steel", - "power": 6 - }, - "230": { - "name": "Water Gun", - "proto": "V0230_MOVE_WATER_GUN_FAST", - "type": "Water", - "power": 3 - }, - "231": { - "name": "Splash", - "proto": "V0231_MOVE_SPLASH_FAST", - "type": "Water" - }, - "232": { - "name": "Water Gun Blastoise", - "proto": "V0232_MOVE_WATER_GUN_FAST_BLASTOISE", - "type": "Water", - "power": 6 - }, - "233": { - "name": "Mud Slap", - "proto": "V0233_MOVE_MUD_SLAP_FAST", - "type": "Ground", - "power": 11 - }, - "234": { - "name": "Zen Headbutt", - "proto": "V0234_MOVE_ZEN_HEADBUTT_FAST", - "type": "Psychic", - "power": 8 - }, - "235": { - "name": "Confusion", - "proto": "V0235_MOVE_CONFUSION_FAST", - "type": "Psychic", - "power": 16 - }, - "236": { - "name": "Poison Sting", - "proto": "V0236_MOVE_POISON_STING_FAST", - "type": "Poison", - "power": 3 - }, - "237": { - "name": "Bubble", - "proto": "V0237_MOVE_BUBBLE_FAST", - "type": "Water", - "power": 7 - }, - "238": { - "name": "Feint Attack", - "proto": "V0238_MOVE_FEINT_ATTACK_FAST", - "type": "Dark", - "power": 6 - }, - "239": { - "name": "Steel Wing", - "proto": "V0239_MOVE_STEEL_WING_FAST", - "type": "Steel", - "power": 7 - }, - "240": { - "name": "Fire Fang", - "proto": "V0240_MOVE_FIRE_FANG_FAST", - "type": "Fire", - "power": 8 - }, - "241": { - "name": "Rock Smash", - "proto": "V0241_MOVE_ROCK_SMASH_FAST", - "type": "Fighting", - "power": 9 - }, - "242": { - "name": "Transform", - "proto": "V0242_MOVE_TRANSFORM_FAST", - "type": "Normal" - }, - "243": { - "name": "Counter", - "proto": "V0243_MOVE_COUNTER_FAST", - "type": "Fighting", - "power": 8 - }, - "244": { - "name": "Powder Snow", - "proto": "V0244_MOVE_POWDER_SNOW_FAST", - "type": "Ice", - "power": 5 - }, - "245": { - "name": "Close Combat", - "proto": "V0245_MOVE_CLOSE_COMBAT", - "type": "Fighting", - "power": 100 - }, - "246": { - "name": "Dynamic Punch", - "proto": "V0246_MOVE_DYNAMIC_PUNCH", - "type": "Fighting", - "power": 90 - }, - "247": { - "name": "Focus Blast", - "proto": "V0247_MOVE_FOCUS_BLAST", - "type": "Fighting", - "power": 140 - }, - "248": { - "name": "Aurora Beam", - "proto": "V0248_MOVE_AURORA_BEAM", - "type": "Ice", - "power": 80 - }, - "249": { - "name": "Charge Beam", - "proto": "V0249_MOVE_CHARGE_BEAM_FAST", - "type": "Electric", - "power": 5 - }, - "250": { - "name": "Volt Switch", - "proto": "V0250_MOVE_VOLT_SWITCH_FAST", - "type": "Electric", - "power": 12 - }, - "251": { - "name": "Wild Charge", - "proto": "V0251_MOVE_WILD_CHARGE", - "type": "Electric", - "power": 100 - }, - "252": { - "name": "Zap Cannon", - "proto": "V0252_MOVE_ZAP_CANNON", - "type": "Electric", - "power": 150 - }, - "253": { - "name": "Dragon Tail", - "proto": "V0253_MOVE_DRAGON_TAIL_FAST", - "type": "Dragon", - "power": 9 - }, - "254": { - "name": "Avalanche", - "proto": "V0254_MOVE_AVALANCHE", - "type": "Ice", - "power": 90 - }, - "255": { - "name": "Air Slash", - "proto": "V0255_MOVE_AIR_SLASH_FAST", - "type": "Flying", - "power": 9 - }, - "256": { - "name": "Brave Bird", - "proto": "V0256_MOVE_BRAVE_BIRD", - "type": "Flying", - "power": 130 - }, - "257": { - "name": "Sky Attack", - "proto": "V0257_MOVE_SKY_ATTACK", - "type": "Flying", - "power": 75 - }, - "258": { - "name": "Sand Tomb", - "proto": "V0258_MOVE_SAND_TOMB", - "type": "Ground", - "power": 25 - }, - "259": { - "name": "Rock Blast", - "proto": "V0259_MOVE_ROCK_BLAST", - "type": "Rock", - "power": 50 - }, - "260": { - "name": "Infestation", - "proto": "V0260_MOVE_INFESTATION_FAST", - "type": "Bug", - "power": 6 - }, - "261": { - "name": "Struggle Bug", - "proto": "V0261_MOVE_STRUGGLE_BUG_FAST", - "type": "Bug", - "power": 9 - }, - "262": { - "name": "Silver Wind", - "proto": "V0262_MOVE_SILVER_WIND", - "type": "Bug", - "power": 45 - }, - "263": { - "name": "Astonish", - "proto": "V0263_MOVE_ASTONISH_FAST", - "type": "Ghost", - "power": 5 - }, - "264": { - "name": "Hex", - "proto": "V0264_MOVE_HEX_FAST", - "type": "Ghost", - "power": 6 - }, - "265": { - "name": "Night Shade", - "proto": "V0265_MOVE_NIGHT_SHADE", - "type": "Ghost", - "power": 60 - }, - "266": { - "name": "Iron Tail", - "proto": "V0266_MOVE_IRON_TAIL_FAST", - "type": "Steel", - "power": 9 - }, - "267": { - "name": "Gyro Ball", - "proto": "V0267_MOVE_GYRO_BALL", - "type": "Steel", - "power": 80 - }, - "268": { - "name": "Heavy Slam", - "proto": "V0268_MOVE_HEAVY_SLAM", - "type": "Steel", - "power": 70 - }, - "269": { - "name": "Fire Spin", - "proto": "V0269_MOVE_FIRE_SPIN_FAST", - "type": "Fire", - "power": 9 - }, - "270": { - "name": "Overheat", - "proto": "V0270_MOVE_OVERHEAT", - "type": "Fire", - "power": 130 - }, - "271": { - "name": "Bullet Seed", - "proto": "V0271_MOVE_BULLET_SEED_FAST", - "type": "Grass", - "power": 5 - }, - "272": { - "name": "Grass Knot", - "proto": "V0272_MOVE_GRASS_KNOT", - "type": "Grass", - "power": 90 - }, - "273": { - "name": "Energy Ball", - "proto": "V0273_MOVE_ENERGY_BALL", - "type": "Grass", - "power": 90 - }, - "274": { - "name": "Extrasensory", - "proto": "V0274_MOVE_EXTRASENSORY_FAST", - "type": "Psychic", - "power": 8 - }, - "275": { - "name": "Futuresight", - "proto": "V0275_MOVE_FUTURESIGHT", - "type": "Psychic", - "power": 120 - }, - "276": { - "name": "Mirror Coat", - "proto": "V0276_MOVE_MIRROR_COAT", - "type": "Psychic", - "power": 60 - }, - "277": { - "name": "Outrage", - "proto": "V0277_MOVE_OUTRAGE", - "type": "Dragon", - "power": 110 - }, - "278": { - "name": "Snarl", - "proto": "V0278_MOVE_SNARL_FAST", - "type": "Dark", - "power": 5 - }, - "279": { - "name": "Crunch", - "proto": "V0279_MOVE_CRUNCH", - "type": "Dark", - "power": 70 - }, - "280": { - "name": "Foul Play", - "proto": "V0280_MOVE_FOUL_PLAY", - "type": "Dark", - "power": 70 - }, - "281": { - "name": "Hidden Power", - "proto": "V0281_MOVE_HIDDEN_POWER_FAST", - "type": "Normal", - "power": 9 - }, - "282": { - "name": "Take Down", - "proto": "V0282_MOVE_TAKE_DOWN_FAST", - "type": "Normal", - "power": 5 - }, - "283": { - "name": "Waterfall", - "proto": "V0283_MOVE_WATERFALL_FAST", - "type": "Water", - "power": 12 - }, - "284": { - "name": "Surf", - "proto": "V0284_MOVE_SURF", - "type": "Water", - "power": 65 - }, - "285": { - "name": "Draco Meteor", - "proto": "V0285_MOVE_DRACO_METEOR", - "type": "Dragon", - "power": 150 - }, - "286": { - "name": "Doom Desire", - "proto": "V0286_MOVE_DOOM_DESIRE", - "type": "Steel", - "power": 75 - }, - "287": { - "name": "Yawn", - "proto": "V0287_MOVE_YAWN_FAST", - "type": "Normal" - }, - "288": { - "name": "Psycho Boost", - "proto": "V0288_MOVE_PSYCHO_BOOST", - "type": "Psychic", - "power": 70 - }, - "289": { - "name": "Origin Pulse", - "proto": "V0289_MOVE_ORIGIN_PULSE", - "type": "Water", - "power": 130 - }, - "290": { - "name": "Precipice Blades", - "proto": "V0290_MOVE_PRECIPICE_BLADES", - "type": "Ground", - "power": 130 - }, - "291": { - "name": "Present", - "proto": "V0291_MOVE_PRESENT_FAST", - "type": "Normal", - "power": 3 - }, - "292": { - "name": "Weather Ball Fire", - "proto": "V0292_MOVE_WEATHER_BALL_FIRE", - "type": "Fire", - "power": 60 - }, - "293": { - "name": "Weather Ball Ice", - "proto": "V0293_MOVE_WEATHER_BALL_ICE", - "type": "Ice", - "power": 60 - }, - "294": { - "name": "Weather Ball Rock", - "proto": "V0294_MOVE_WEATHER_BALL_ROCK", - "type": "Normal", - "power": 60 - }, - "295": { - "name": "Weather Ball Water", - "proto": "V0295_MOVE_WEATHER_BALL_WATER", - "type": "Water", - "power": 60 - }, - "296": { - "name": "Frenzy Plant", - "proto": "V0296_MOVE_FRENZY_PLANT", - "type": "Grass", - "power": 100 - }, - "297": { - "name": "Smack Down", - "proto": "V0297_MOVE_SMACK_DOWN_FAST", - "type": "Rock", - "power": 12 - }, - "298": { - "name": "Blast Burn", - "proto": "V0298_MOVE_BLAST_BURN", - "type": "Fire", - "power": 110 - }, - "299": { - "name": "Hydro Cannon", - "proto": "V0299_MOVE_HYDRO_CANNON", - "type": "Water", - "power": 80 - }, - "300": { - "name": "Last Resort", - "proto": "V0300_MOVE_LAST_RESORT", - "type": "Normal", - "power": 90 - }, - "301": { - "name": "Meteor Mash", - "proto": "V0301_MOVE_METEOR_MASH", - "type": "Steel", - "power": 100 - }, - "302": { - "name": "Skull Bash", - "proto": "V0302_MOVE_SKULL_BASH", - "type": "Normal", - "power": 130 - }, - "303": { - "name": "Acid Spray", - "proto": "V0303_MOVE_ACID_SPRAY", - "type": "Poison", - "power": 20 - }, - "304": { - "name": "Earth Power", - "proto": "V0304_MOVE_EARTH_POWER", - "type": "Ground", - "power": 90 - }, - "305": { - "name": "Crabhammer", - "proto": "V0305_MOVE_CRABHAMMER", - "type": "Water", - "power": 85 - }, - "306": { - "name": "Lunge", - "proto": "V0306_MOVE_LUNGE", - "type": "Bug", - "power": 60 - }, - "307": { - "name": "Crush Claw" - }, - "308": { - "name": "Octazooka", - "proto": "V0308_MOVE_OCTAZOOKA", - "type": "Water", - "power": 50 - }, - "309": { - "name": "Mirror Shot", - "proto": "V0309_MOVE_MIRROR_SHOT", - "type": "Steel", - "power": 35 - }, - "310": { - "name": "Super Power", - "proto": "V0310_MOVE_SUPER_POWER", - "type": "Fighting", - "power": 85 - }, - "311": { - "name": "Fell Stinger", - "proto": "V0311_MOVE_FELL_STINGER", - "type": "Bug", - "power": 20 - }, - "312": { - "name": "Leaf Tornado", - "proto": "V0312_MOVE_LEAF_TORNADO", - "type": "Grass", - "power": 45 - }, - "313": { - "name": "Leech Life" - }, - "314": { - "name": "Drain Punch" - }, - "315": { - "name": "Shadow Bone", - "proto": "V0315_MOVE_SHADOW_BONE", - "type": "Ghost", - "power": 75 - }, - "316": { - "name": "Muddy Water", - "proto": "V0316_MOVE_MUDDY_WATER", - "type": "Water", - "power": 35 - }, - "317": { - "name": "Blaze Kick", - "proto": "V0317_MOVE_BLAZE_KICK", - "type": "Fire", - "power": 55 - }, - "318": { - "name": "Razor Shell" - }, - "319": { - "name": "Power Up Punch", - "proto": "V0319_MOVE_POWER_UP_PUNCH", - "type": "Fighting", - "power": 20 - }, - "320": { - "name": "Charm", - "proto": "V0320_MOVE_CHARM_FAST", - "type": "Fairy", - "power": 16 - }, - "321": { - "name": "Giga Impact", - "proto": "V0321_MOVE_GIGA_IMPACT", - "type": "Normal", - "power": 150 - }, - "322": { - "name": "Frustration", - "proto": "V0322_MOVE_FRUSTRATION", - "type": "Normal", - "power": 10 - }, - "323": { - "name": "Return", - "proto": "V0323_MOVE_RETURN", - "type": "Normal", - "power": 130 - }, - "324": { - "name": "Synchronoise", - "proto": "V0324_MOVE_SYNCHRONOISE", - "type": "Psychic", - "power": 80 - }, - "325": { - "name": "Lock On", - "proto": "V0325_MOVE_LOCK_ON_FAST", - "type": "Normal", - "power": 1 - }, - "326": { - "name": "Thunder Fang", - "proto": "V0326_MOVE_THUNDER_FANG_FAST", - "type": "Electric", - "power": 8 - }, - "327": { - "name": "Ice Fang", - "proto": "V0327_MOVE_ICE_FANG_FAST", - "type": "Ice", - "power": 8 - }, - "328": { - "name": "Horn Drill" - }, - "329": { - "name": "Fissure" - }, - "330": { - "name": "Sacred Sword", - "proto": "V0330_MOVE_SACRED_SWORD", - "type": "Fighting", - "power": 60 - }, - "331": { - "name": "Flying Press", - "proto": "V0331_MOVE_FLYING_PRESS", - "type": "Fighting", - "power": 90 - }, - "332": { - "name": "Aura Sphere", - "proto": "V0332_MOVE_AURA_SPHERE", - "type": "Fighting", - "power": 100 - }, - "333": { - "name": "Payback", - "proto": "V0333_MOVE_PAYBACK", - "type": "Dark", - "power": 110 - }, - "334": { - "name": "Rock Wrecker", - "proto": "V0334_MOVE_ROCK_WRECKER", - "type": "Rock", - "power": 110 - }, - "335": { - "name": "Aeroblast", - "proto": "V0335_MOVE_AEROBLAST", - "type": "Flying", - "power": 170 - }, - "336": { - "name": "Techno Blast Normal", - "proto": "V0336_MOVE_TECHNO_BLAST_NORMAL", - "type": "Normal", - "power": 120 - }, - "337": { - "name": "Techno Blast Burn", - "proto": "V0337_MOVE_TECHNO_BLAST_BURN", - "type": "Fire", - "power": 120 - }, - "338": { - "name": "Techno Blast Chill", - "proto": "V0338_MOVE_TECHNO_BLAST_CHILL", - "type": "Ice", - "power": 120 - }, - "339": { - "name": "Techno Blast Water", - "proto": "V0339_MOVE_TECHNO_BLAST_WATER", - "type": "Water", - "power": 120 - }, - "340": { - "name": "Techno Blast Shock", - "proto": "V0340_MOVE_TECHNO_BLAST_SHOCK", - "type": "Electric", - "power": 120 - }, - "341": { - "name": "Fly", - "proto": "V0341_MOVE_FLY", - "type": "Flying", - "power": 80 - }, - "342": { - "name": "V Create", - "proto": "V0342_MOVE_V_CREATE", - "type": "Fire", - "power": 95 - }, - "343": { - "name": "Leaf Storm", - "proto": "V0343_MOVE_LEAF_STORM", - "type": "Grass", - "power": 130 - }, - "344": { - "name": "Tri Attack", - "proto": "V0344_MOVE_TRI_ATTACK", - "type": "Normal", - "power": 65 - }, - "345": { - "name": "Gust", - "proto": "V0345_MOVE_GUST_FAST", - "type": "Flying", - "power": 16 - }, - "346": { - "name": "Incinerate", - "proto": "V0346_MOVE_INCINERATE_FAST", - "type": "Fire", - "power": 15 - }, - "347": { - "name": "Dark Void" - }, - "348": { - "name": "Feather Dance" - } - }, - "throw_types": { - "10": "Nice", - "11": "Great", - "12": "Excellent" - }, - "quest_types": { - "0": { - "prototext": "QUEST_UNKNOWN_TYPE", - "text": "Unknown quest type" - }, - "1": { - "prototext": "QUEST_FIRST_CATCH_OF_THE_DAY", - "text": "First catch of the day" - }, - "2": { - "prototext": "QUEST_FIRST_POKESTOP_OF_THE_DAY", - "text": "First pokéstop of the day" - }, - "3": { - "prototext": "QUEST_MULTI_PART", - "text": "Multi part" - }, - "4": { - "prototext": "QUEST_CATCH_POKEMON", - "text": "Catch {0} pokémon" - }, - "5": { - "prototext": "QUEST_SPIN_POKESTOP", - "text": "Spin {0} pokéstop(s)" - }, - "6": { - "prototext": "QUEST_HATCH_EGG", - "text": "Hatch {0} egg(s)" - }, - "7": { - "prototext": "QUEST_COMPLETE_GYM_BATTLE", - "text": "Complete {0} gym battle(s)" - }, - "8": { - "prototext": "QUEST_COMPLETE_RAID_BATTLE", - "text": "Complete {0} raid battle(s)" - }, - "9": { - "prototext": "QUEST_COMPLETE_QUEST", - "text": "Complete {0} quest(s)" - }, - "10": { - "prototext": "QUEST_TRANSFER_POKEMON", - "text": "Transfer {0} pokémon" - }, - "11": { - "prototext": "QUEST_FAVORITE_POKEMON", - "text": "Favorite {0} pokémon" - }, - "12": { - "prototext": "QUEST_AUTOCOMPLETE", - "text": "Autocomplete" - }, - "13": { - "prototext": "QUEST_USE_BERRY_IN_ENCOUNTER", - "text": "Catch {0} pokémon with berrie(s)" - }, - "14": { - "prototext": "QUEST_UPGRADE_POKEMON", - "text": "Power up a pokémon {0} times" - }, - "15": { - "prototext": "QUEST_EVOLVE_POKEMON", - "text": "Evolve {0} pokémon" - }, - "16": { - "prototext": "QUEST_LAND_TROW", - "text": "Land {0} throw(s)" - }, - "17": { - "prototext": "QUEST_GET_BUDDY_CANDY", - "text": "Walk your buddy to earn {0} candy" - }, - "18": { - "prototext": "QUEST_BADGE_RANK", - "text": "Collect {0} badge(s)" - }, - "19": { - "prototext": "QUEST_PLAYER_LEVEL", - "text": "Become level {0}" - }, - "20": { - "prototext": "QUEST_JOIN_RAID", - "text": "Join {0} raid(s)" - }, - "21": { - "prototext": "QUEST_COMPLETE_BATTLE", - "text": "Complete {0} raid battle(s)" - }, - "22": { - "prototext": "QUEST_ADD_FRIEND", - "text": "Make {0} new friends" - }, - "23": { - "prototext": "QUEST_TRADE_POKEMON", - "text": "Trade {0} pokémon" - }, - "24": { - "prototext": "QUEST_SEND_GIFT", - "text": "Send {0} gift(s)" - }, - "25": { - "prototext": "QUEST_EVOLVE_INTO_POKEMON", - "text": "Evolve {0} pokémon into" - }, - "27": { - "prototext": "QUEST_COMPLETE_COMBAT", - "text": "Win {0} pvp battle(s)" - }, - "28": { - "prototext": "QUEST_TAKE_SNAPSHOT", - "text": "Take {0} Snapshot(s)" - }, - "29": { - "prototext": "QUEST_BATTLE_TEAM_ROCKET", - "text": "Battle against {0} Team GO Rocket Grunt(s)" - }, - "30": { - "prototext": "QUEST_PURIFY_POKEMON", - "text": "Purify {0} pokémon" - }, - "31": { - "prototext": "QUEST_FIND_TEAM_ROCKET", - "text": "Find Team Rocket {0} times" - }, - "32": { - "prototext": "QUEST_FIRST_GRUNT_OF_THE_DAY", - "text": "First Grunt of the day" - }, - "33": { - "prototext": "QUEST_BUDDY_FEED", - "text": "Give your buddy {0} treat(s)" - }, - "34": { - "prototext": "QUEST_BUDDY_EARN_AFFECTION_POINTS", - "text": "Earn {0} Heart(s) with your Buddy" - }, - "35": { - "prototext": "QUEST_BUDDY_PET", - "text": "Play with your Buddy {0} times" - }, - "36": { - "prototext": "QUEST_BUDDY_LEVEL", - "text": "Increase your Buddy Level {0} times" - }, - "37": { - "prototext": "QUEST_BUDDY_WALK", - "text": "Earn {0} Friendship points by Walking with your Buddy" - }, - "38": { - "prototext": "QUEST_BUDDY_YATTA", - "text": "Earn {0} Souvenirs from your Buddy" - }, - "39": { - "prototext": "QUEST_USE_INCENSE", - "text": "Use Incense {0} times" - }, - "40": { - "prototext": "QUEST_BUDDY_FIND_SOUVENIR", - "text": "QUEST_BUDDY_FIND_SOUVENIR" - }, - "41": { - "prototext": "QUEST_COLLECT_AS_REWARDS", - "text": "QUEST_COLLECT_AS_REWARDS" - }, - "42": { - "prototext": "QUEST_WALK", - "text": "QUEST_WALK" - }, - "43": { - "prototext": "QUEST_MEGA_EVOLVE_POKEMON", - "text": "Mega-Evolve {0} Pokemon" - }, - "44": { - "prototext": "QUEST_GET_STARDUST", - "text": "QUEST_GET_STARDUST" - }, - "45": { - "prototext": "QUEST_MINI_COLLECTION", - "text": "QUEST_MINI_COLLECTION" - }, - "46": { - "prototext": "QUEST_GEOTARGETED_AR_SCAN", - "text": "AR-Scan {0} pokéstop(s)" - }, - "50": { - "prototext": "QUEST_BUDDY_EVOLUTION_WALK", - "text": "QUEST_BUDDY_EVOLUTION_WALK" - }, - "51": { - "prototext": "QUEST_GBL_RANK", - "text": "QUEST_GBL_RANK" - }, - "53": { - "prototext": "QUEST_CHARGE_ATTACK", - "text": "QUEST_CHARGE_ATTACK" - }, - "54": { - "prototext": "QUEST_CHANGE_POKEMON_FORM", - "text": "QUEST_CHANGE_POKEMON_FORM" - }, - "55": { - "prototext": "QUEST_BATTLE_EVENT_NPC", - "text": "QUEST_BATTLE_EVENT_NPC" - }, - "57": { - "prototext": "QUEST_TAKE_WILD_SNAPSHOT", - "text": "Take {0} snapshot(s) of wild pokémon" - } - }, - "quest_conditions": { - "0": { - "prototext": "WITH_UNSET", - "text": "Unset" - }, - "1": { - "prototext": "WITH_POKEMON_TYPE", - "text": "Pokémon Type" - }, - "2": { - "prototext": "WITH_POKEMON_CATEGORY", - "text": "Pokémon" - }, - "3": { - "prototext": "WITH_WEATHER_BOOST", - "text": "Weatherboosted" - }, - "4": { - "prototext": "WITH_DAILY_CAPTURE_BONUS", - "text": "Daily capture bonus" - }, - "5": { - "prototext": "WITH_DAILY_SPIN_BONUS", - "text": "Daily spin bonus" - }, - "6": { - "prototext": "WITH_WIN_RAID_STATUS", - "text": "Win raid" - }, - "7": { - "prototext": "WITH_RAID_LEVEL", - "text": "With raid level" - }, - "8": { - "prototext": "WITH_TROW_TYPE", - "text": "Throw type" - }, - "9": { - "prototext": "WITH_WIN_GYM_BATTLE_STATUS", - "text": "Win gym battle(s)" - }, - "10": { - "prototext": "WITH_SUPER_EFFECTIVE_CHARGE", - "text": "Super effective charge move" - }, - "11": { - "prototext": "WITH_ITEM", - "text": "Item" - }, - "12": { - "prototext": "WITH_UNIQUE_POKESTOP", - "text": "Unique pokéstop(s)" - }, - "13": { - "prototext": "WITH_QUEST_CONTEXT", - "text": "Quest context" - }, - "14": { - "prototext": "WITH_THROW_TYPE_IN_A_ROW", - "text": "Throw type(s) in a row" - }, - "15": { - "prototext": "WITH_CURVE_BALL", - "text": "Curve ball" - }, - "16": { - "prototext": "WITH_BADGE_TYPE", - "text": "Badge type" - }, - "17": { - "prototext": "WITH_PLAYER_LEVEL", - "text": "Player level" - }, - "18": { - "prototext": "WITH_WIN_BATTLE_STATUS", - "text": "Win battle status" - }, - "19": { - "prototext": "WITH_NEW_FRIEND", - "text": "New friend" - }, - "20": { - "prototext": "WITH_DAYS_IN_A_ROW", - "text": "Days in a row" - }, - "21": { - "prototext": "WITH_UNIQUE_POKEMON", - "text": "" - }, - "22": { - "prototext": "WITH_NPC_COMBAT", - "text": "" - }, - "23": { - "prototext": "WITH_PVP_COMBAT", - "text": "" - }, - "24": { - "prototext": "WITH_LOCATION", - "text": "" - }, - "25": { - "prototext": "WITH_DISTANCE", - "text": "" - }, - "26": { - "prototext": "WITH_POKEMON_ALIGNMENT", - "text": "" - }, - "27": { - "prototext": "WITH_INVASION_CHARACTER", - "text": "" - }, - "28": { - "prototext": "WITH_BUDDY", - "text": "" - }, - "29": { - "prototext": "WITH_BUDDY_INTERESTING_POI", - "text": "" - }, - "30": { - "prototext": "WITH_DAILY_BUDDY_EFFECTION", - "text": "" - } - }, - "quest_reward_types": { - "0": { - "prototext": "UNSET", - "text": "Unset" - }, - "1": { - "prototext": "EXPERIENCE", - "text": "Experience points" - }, - "2": { - "prototext": "ITEM", - "text": "Items" - }, - "3": { - "prototext": "STARDUST", - "text": "Stardust" - }, - "4": { - "prototext": "CANDY", - "text": "Candy" - }, - "5": { - "prototext": "AVATAR_CLOTHING", - "text": "Avatar clothing" - }, - "6": { - "prototext": "QUEST", - "text": "Quest" - }, - "7": { - "prototext": "POKEMON_ENCOUNTER", - "text": "Pokémon encounter" - } - }, - "grunt_types": { - "1": { - "type": "Blanche", - "grunt": "" - }, - "2": { - "type": "Candela", - "grunt": "" - }, - "3": { - "type": "Spark", - "grunt": "" - }, - "4": { - "type": "", - "grunt": "Male" - }, - "5": { - "type": "", - "grunt": "Female", - "second_reward": "false", - "encounters": { - "first": [ - "143_00" - ], - "second": [ - "062_00", - "143_00", - "282_00" - ], - "third": [ - "130_00", - "149_00" - ] - } - }, - "6": { - "type": "Bug", - "grunt": "Female" - }, - "7": { - "type": "Bug", - "grunt": "Male", - "second_reward": "false", - "encounters": { - "first": [ - "213_00", - "347_00", - "451_00" - ], - "second": [ - "049_00", - "127_00", - "212_00" - ], - "third": [ - "015_00", - "123_00", - "212_00" - ] - } - }, - "8": { - "type": "Ghost", - "grunt": "Female" - }, - "9": { - "type": "Ghost", - "grunt": "Male" - }, - "10": { - "type": "Dark", - "grunt": "Female", - "second_reward": "true", - "encounters": { - "first": [ - "198_00", - "261_00" - ], - "second": [ - "262_00", - "302_00" - ], - "third": [ - "275_00", - "332_00" - ] - } - }, - "11": { - "type": "Dark", - "grunt": "Male" - }, - "12": { - "type": "Dragon", - "grunt": "Female", - "second_reward": "false", - "encounters": { - "first": [ - "147_00" - ], - "second": [ - "148_00" - ], - "third": [ - "130_00" - ] - } - }, - "13": { - "type": "Dragon", - "grunt": "Male" - }, - "14": { - "type": "Fairy", - "grunt": "Female", - "second_reward": "false", - "encounters": { - "first": [ - "209_00" - ], - "second": [ - "209_00", - "210_00" - ], - "third": [ - "210_00" - ] - } - }, - "15": { - "type": "Fairy", - "grunt": "Male" - }, - "16": { - "type": "Fighting", - "grunt": "Female", - "second_reward": "false", - "encounters": { - "first": [ - "066_00", - "296_00" - ], - "second": [ - "067_00" - ], - "third": [ - "106_00", - "107_00", - "297_00" - ] - } - }, - "17": { - "type": "Fighting", - "grunt": "Male" - }, - "18": { - "type": "Fire", - "grunt": "Female", - "second_reward": "true", - "encounters": { - "first": [ - "037_00", - "126_00", - "228_00" - ], - "second": [ - "038_00", - "126_00", - "229_00" - ], - "third": [ - "005_00", - "038_00", - "059_00" - ] - } - }, - "19": { - "type": "Fire", - "grunt": "Male" - }, - "20": { - "type": "Flying", - "grunt": "Female", - "second_reward": "false", - "encounters": { - "first": [ - "041_00", - "396_00" - ], - "second": [ - "042_00", - "397_00" - ], - "third": [ - "130_00", - "149_00", - "169_00" - ] - } - }, - "21": { - "type": "Flying", - "grunt": "Male" - }, - "22": { - "type": "Grass", - "grunt": "Female" - }, - "23": { - "type": "Grass", - "grunt": "Male", - "second_reward": "true", - "encounters": { - "first": [ - "043_00", - "114_00", - "187_00" - ], - "second": [ - "044_00", - "114_00", - "188_00" - ], - "third": [ - "045_00", - "071_00", - "275_00" - ] - } - }, - "24": { - "type": "Ground", - "grunt": "Female" - }, - "25": { - "type": "Ground", - "grunt": "Male", - "second_reward": "false", - "encounters": { - "first": [ - "050_00", - "220_00" - ], - "second": [ - "105_00", - "329_00" - ], - "third": [ - "330_00", - "472_00" - ] - } - }, - "26": { - "type": "Ice", - "grunt": "Female", - "second_reward": "true", - "encounters": { - "first": [ - "363_00", - "459_00" - ], - "second": [ - "091_00", - "220_00", - "364_00" - ], - "third": [ - "131_00", - "460_00" - ] - } - }, - "27": { - "type": "Ice", - "grunt": "Male" - }, - "28": { - "type": "Metal", - "grunt": "Female" - }, - "29": { - "type": "Metal", - "grunt": "Male" - }, - "30": { - "type": "Normal", - "grunt": "Female" - }, - "31": { - "type": "Normal", - "grunt": "Male", - "second_reward": "false", - "encounters": { - "first": [ - "216_00" - ], - "second": [ - "020_00", - "233_00" - ], - "third": [ - "143_00", - "474_00" - ] - } - }, - "32": { - "type": "Poison", - "grunt": "Female", - "second_reward": "false", - "encounters": { - "first": [ - "029_00", - "088_00", - "451_00" - ], - "second": [ - "030_00", - "033_00" - ], - "third": [ - "030_00", - "089_00", - "110_00" - ] - } - }, - "33": { - "type": "Poison", - "grunt": "Male" - }, - "34": { - "type": "Psychic", - "grunt": "Female" - }, - "35": { - "type": "Psychic", - "grunt": "Male", - "second_reward": "false", - "encounters": { - "first": [ - "079_00", - "202_00" - ], - "second": [ - "064_00", - "096_00", - "281_00" - ], - "third": [ - "097_00", - "103_00", - "281_00" - ] - } - }, - "36": { - "type": "Rock", - "grunt": "Female" - }, - "37": { - "type": "Rock", - "grunt": "Male", - "second_reward": "true", - "encounters": { - "first": [ - "299_00", - "304_00" - ], - "second": [ - "246_00", - "247_00", - "305_00" - ], - "third": [ - "247_00", - "248_00" - ] - } - }, - "38": { - "type": "Water", - "grunt": "Female", - "second_reward": "false", - "encounters": { - "first": [ - "060_00", - "116_00", - "363_00" - ], - "second": [ - "195_00", - "259_00" - ], - "third": [ - "062_00", - "186_00" - ] - } - }, - "39": { - "type": "Water", - "grunt": "Male", - "second_reward": "false", - "encounters": { - "first": [ - "129_00" - ], - "second": [ - "129_00" - ], - "third": [ - "129_00" - ] - } - }, - "40": { - "type": "Player Team Leader", - "grunt": "" - }, - "41": { - "type": "Executive Cliff", - "grunt": "", - "second_reward": "false", - "encounters": { - "first": [ - "273_00" - ], - "second": [ - "062_00", - "099_00", - "297_00" - ], - "third": [ - "248_00", - "389_00" - ] - } - }, - "42": { - "type": "Executive Arlo", - "grunt": "", - "second_reward": "false", - "encounters": { - "first": [ - "048_00" - ], - "second": [ - "169_00", - "310_00" - ], - "third": [ - "045_00", - "212_00", - "462_00" - ] - } - }, - "43": { - "type": "Executive Sierra", - "grunt": "", - "second_reward": "false", - "encounters": { - "first": [ - "215_00" - ], - "second": [ - "181_00", - "210_00", - "472_00" - ], - "third": [ - "229_00", - "230_00", - "452_00" - ] - } - }, - "44": { - "type": "Giovanni or Decoy", - "grunt": "", - "second_reward": "false", - "encounters": { - "first": [ - "146_00" - ], - "second": [], - "third": [] - } - }, - "45": { - "type": "Decoy", - "grunt": "Male" - }, - "46": { - "type": "Decoy", - "grunt": "Female", - "second_reward": "false", - "encounters": { - "first": [ - "069_00" - ], - "second": [ - "020_00", - "070_00" - ], - "third": [ - "020_00", - "143_00" - ] - } - }, - "47": { - "type": "Ghost", - "grunt": "Female" - }, - "48": { - "type": "Ghost", - "grunt": "Male", - "second_reward": "false", - "encounters": { - "first": [ - "200_00", - "353_00", - "355_00" - ], - "second": [ - "354_00", - "356_00" - ], - "third": [ - "302_00", - "354_00", - "477_00" - ] - } - }, - "49": { - "type": "Electric", - "grunt": "Female", - "second_reward": "false", - "encounters": { - "first": [ - "125_00", - "179_00", - "309_00" - ], - "second": [ - "125_00", - "180_00" - ], - "third": [ - "125_00", - "181_00" - ] - } - }, - "50": { - "type": "Electric", - "grunt": "Male" - }, - "500": { - "type": "LenTao9", - "grunt": "" - }, - "501": { - "type": "oneslapguy", - "grunt": "" - }, - "502": { - "type": "DieCurryWurst", - "grunt": "" - }, - "503": { - "type": "DieCurryWurst", - "grunt": "" - }, - "504": { - "type": "Juanevoli", - "grunt": "" - }, - "506": { - "type": "CashmereFeline", - "grunt": "" - }, - "507": { - "type": "enjoyryde", - "grunt": "" - }, - "509": { - "type": "Telli997", - "grunt": "" - }, - "510": { - "type": "malibuleo", - "grunt": "" - } - }, - "items": { - "1": { - "name": "Poke Ball", - "proto": "ITEM_POKE_BALL", - "type": "Pokeball", - "category": "Pokeball", - "min_trainer_level": 1 - }, - "2": { - "name": "Great Ball", - "proto": "ITEM_GREAT_BALL", - "type": "Pokeball", - "category": "Pokeball", - "min_trainer_level": 12 - }, - "3": { - "name": "Ultra Ball", - "proto": "ITEM_ULTRA_BALL", - "type": "Pokeball", - "category": "Pokeball", - "min_trainer_level": 20 - }, - "4": { - "name": "Master Ball", - "proto": "ITEM_MASTER_BALL", - "type": "Pokeball", - "category": "Pokeball" - }, - "5": { - "name": "Premier Ball", - "proto": "ITEM_PREMIER_BALL", - "type": "Pokeball", - "category": "Pokeball" - }, - "101": { - "name": "Potion", - "proto": "ITEM_POTION", - "type": "Potion", - "category": "Medicine", - "min_trainer_level": 5 - }, - "102": { - "name": "Super Potion", - "proto": "ITEM_SUPER_POTION", - "type": "Potion", - "category": "Medicine", - "min_trainer_level": 10 - }, - "103": { - "name": "Hyper Potion", - "proto": "ITEM_HYPER_POTION", - "type": "Potion", - "category": "Medicine", - "min_trainer_level": 15 - }, - "104": { - "name": "Max Potion", - "proto": "ITEM_MAX_POTION", - "type": "Potion", - "category": "Medicine", - "min_trainer_level": 25 - }, - "201": { - "name": "Revive", - "proto": "ITEM_REVIVE", - "type": "Revive", - "category": "Medicine", - "min_trainer_level": 5 - }, - "202": { - "name": "Max Revive", - "proto": "ITEM_MAX_REVIVE", - "type": "Revive", - "category": "Medicine", - "min_trainer_level": 30 - }, - "301": { - "name": "Lucky Egg", - "proto": "ITEM_LUCKY_EGG", - "type": "Xp Boost", - "category": "Xp Boost", - "min_trainer_level": 1 - }, - "401": { - "name": "Incense Ordinary", - "proto": "ITEM_INCENSE_ORDINARY", - "type": "Incense", - "category": "Incense", - "min_trainer_level": 1 - }, - "405": { - "name": "Incense Beluga Box", - "proto": "ITEM_INCENSE_BELUGA_BOX", - "type": "Incense", - "category": "Incense", - "min_trainer_level": 1 - }, - "501": { - "name": "Troy Disk", - "proto": "ITEM_TROY_DISK", - "type": "Disk", - "category": "Disk", - "min_trainer_level": 1 - }, - "502": { - "name": "Troy Disk Glacial", - "proto": "ITEM_TROY_DISK_GLACIAL", - "type": "Disk", - "category": "Disk", - "min_trainer_level": 1 - }, - "503": { - "name": "Troy Disk Mossy", - "proto": "ITEM_TROY_DISK_MOSSY", - "type": "Disk", - "category": "Disk", - "min_trainer_level": 1 - }, - "504": { - "name": "Troy Disk Magnetic", - "proto": "ITEM_TROY_DISK_MAGNETIC", - "type": "Disk", - "category": "Disk", - "min_trainer_level": 1 - }, - "505": { - "name": "Troy Disk Rainy", - "proto": "ITEM_TROY_DISK_RAINY", - "type": "Disk", - "category": "Disk", - "min_trainer_level": 1 - }, - "602": { - "name": "X Attack", - "proto": "ITEM_X_ATTACK", - "type": "Battle", - "category": "Boost" - }, - "603": { - "name": "X Defense", - "proto": "ITEM_X_DEFENSE", - "type": "Battle", - "category": "Boost" - }, - "604": { - "name": "X Miracle", - "proto": "ITEM_X_MIRACLE", - "type": "Battle", - "category": "Boost" - }, - "701": { - "name": "Razz Berry", - "proto": "ITEM_RAZZ_BERRY", - "type": "Food", - "category": "Food", - "min_trainer_level": 8 - }, - "702": { - "name": "Bluk Berry", - "proto": "ITEM_BLUK_BERRY", - "type": "Food", - "category": "Food" - }, - "703": { - "name": "Nanab Berry", - "proto": "ITEM_NANAB_BERRY", - "type": "Food", - "category": "Food", - "min_trainer_level": 4 - }, - "704": { - "name": "Wepar Berry", - "proto": "ITEM_WEPAR_BERRY", - "type": "Food", - "category": "Food" - }, - "705": { - "name": "Pinap Berry", - "proto": "ITEM_PINAP_BERRY", - "type": "Food", - "category": "Food", - "min_trainer_level": 18 - }, - "706": { - "name": "Golden Razz Berry", - "proto": "ITEM_GOLDEN_RAZZ_BERRY", - "type": "Food", - "category": "Food", - "min_trainer_level": 10 - }, - "708": { - "name": "Golden Pinap Berry", - "proto": "ITEM_GOLDEN_PINAP_BERRY", - "type": "Food", - "category": "Food", - "min_trainer_level": 20 - }, - "709": { - "name": "Poffin", - "proto": "ITEM_POFFIN", - "type": "Food", - "category": "Buddy Exclusive Food" - }, - "801": { - "name": "Special Camera", - "proto": "ITEM_SPECIAL_CAMERA", - "type": "Camera", - "category": "Camera" - }, - "802": { - "name": "Sticker Inventory", - "proto": "ITEM_STICKER_INVENTORY", - "type": "Sticker Inventory", - "category": "Sticker" - }, - "901": { - "name": "Incubator Basic Unlimited", - "proto": "ITEM_INCUBATOR_BASIC_UNLIMITED", - "type": "Incubator", - "category": "Incubator" - }, - "902": { - "name": "Incubator Basic", - "proto": "ITEM_INCUBATOR_BASIC", - "type": "Incubator", - "category": "Incubator", - "min_trainer_level": 1 - }, - "903": { - "name": "Incubator Super", - "proto": "ITEM_INCUBATOR_SUPER", - "type": "Incubator", - "category": "Incubator", - "min_trainer_level": 1 - }, - "1001": { - "name": "Pokemon Storage Upgrade", - "proto": "ITEM_POKEMON_STORAGE_UPGRADE", - "type": "Inventory Upgrade", - "category": "Inventory Upgrade" - }, - "1002": { - "name": "Item Storage Upgrade", - "proto": "ITEM_ITEM_STORAGE_UPGRADE", - "type": "Inventory Upgrade", - "category": "Inventory Upgrade" - }, - "1101": { - "name": "Sun Stone", - "proto": "ITEM_SUN_STONE", - "type": "Evolution Requirement", - "category": "Evolution Requirement", - "min_trainer_level": 10 - }, - "1102": { - "name": "Kings Rock", - "proto": "ITEM_KINGS_ROCK", - "type": "Evolution Requirement", - "category": "Evolution Requirement", - "min_trainer_level": 10 - }, - "1103": { - "name": "Metal Coat", - "proto": "ITEM_METAL_COAT", - "type": "Evolution Requirement", - "category": "Evolution Requirement", - "min_trainer_level": 10 - }, - "1104": { - "name": "Dragon Scale", - "proto": "ITEM_DRAGON_SCALE", - "type": "Evolution Requirement", - "category": "Evolution Requirement", - "min_trainer_level": 10 - }, - "1105": { - "name": "Up Grade", - "proto": "ITEM_UP_GRADE", - "type": "Evolution Requirement", - "category": "Evolution Requirement", - "min_trainer_level": 10 - }, - "1106": { - "name": "Gen4 Evolution Stone", - "proto": "ITEM_GEN4_EVOLUTION_STONE", - "type": "Evolution Requirement", - "category": "Evolution Requirement", - "min_trainer_level": 10 - }, - "1107": { - "name": "Gen5 Evolution Stone", - "proto": "ITEM_GEN5_EVOLUTION_STONE", - "type": "Evolution Requirement", - "category": "Evolution Requirement", - "min_trainer_level": 10 - }, - "1201": { - "name": "Move Reroll Fast Attack", - "proto": "ITEM_MOVE_REROLL_FAST_ATTACK", - "type": "Move Reroll", - "category": "Move Reroll", - "min_trainer_level": 15 - }, - "1202": { - "name": "Move Reroll Special Attack", - "proto": "ITEM_MOVE_REROLL_SPECIAL_ATTACK", - "type": "Move Reroll", - "category": "Move Reroll", - "min_trainer_level": 25 - }, - "1203": { - "name": "Move Reroll Elite Fast Attack", - "proto": "ITEM_MOVE_REROLL_ELITE_FAST_ATTACK", - "type": "Move Reroll", - "category": "Move Reroll", - "min_trainer_level": 1 - }, - "1204": { - "name": "Move Reroll Elite Special Attack", - "proto": "ITEM_MOVE_REROLL_ELITE_SPECIAL_ATTACK", - "type": "Move Reroll", - "category": "Move Reroll", - "min_trainer_level": 1 - }, - "1301": { - "name": "Rare Candy", - "proto": "ITEM_RARE_CANDY", - "type": "Candy", - "category": "Candy", - "min_trainer_level": 5 - }, - "1302": { - "name": "Xl Rare Candy", - "proto": "ITEM_XL_RARE_CANDY", - "type": "Candy", - "category": "Candy", - "min_trainer_level": 40 - }, - "1401": { - "name": "Free Raid Ticket", - "proto": "ITEM_FREE_RAID_TICKET", - "type": "Raid Ticket", - "category": "Raid Ticket" - }, - "1402": { - "name": "Paid Raid Ticket", - "proto": "ITEM_PAID_RAID_TICKET", - "type": "Raid Ticket", - "category": "Raid Ticket", - "min_trainer_level": 1 - }, - "1403": { - "name": "Legendary Raid Ticket", - "proto": "ITEM_LEGENDARY_RAID_TICKET", - "type": "Raid Ticket", - "category": "Raid Ticket" - }, - "1404": { - "name": "Star Piece", - "proto": "ITEM_STAR_PIECE", - "type": "Stardust Boost", - "category": "Stardust Boost", - "min_trainer_level": 1 - }, - "1405": { - "name": "Friend Gift Box", - "proto": "ITEM_FRIEND_GIFT_BOX", - "type": "Friend Gift Box", - "category": "Friend Gift Box" - }, - "1406": { - "name": "Team Change", - "proto": "ITEM_TEAM_CHANGE", - "type": "Team Change", - "category": "Team Change" - }, - "1408": { - "name": "Remote Raid Ticket", - "proto": "ITEM_REMOTE_RAID_TICKET", - "type": "Raid Ticket", - "category": "Raid Ticket", - "min_trainer_level": 5 - }, - "1501": { - "name": "Leader Map Fragment", - "proto": "ITEM_LEADER_MAP_FRAGMENT", - "type": "Incident Ticket", - "category": "Incident Ticket", - "min_trainer_level": 8 - }, - "1502": { - "name": "Leader Map", - "proto": "ITEM_LEADER_MAP", - "type": "Incident Ticket", - "category": "Incident Ticket", - "min_trainer_level": 8 - }, - "1503": { - "name": "Giovanni Map", - "proto": "ITEM_GIOVANNI_MAP", - "type": "Incident Ticket", - "category": "Incident Ticket", - "min_trainer_level": 8 - }, - "1600": { - "name": "Global Event Ticket", - "proto": "ITEM_GLOBAL_EVENT_TICKET", - "type": "Global Event Ticket", - "category": "Global Event Ticket" - }, - "1601": { - "name": "Event Ticket Pink", - "proto": "ITEM_EVENT_TICKET_PINK", - "type": "Global Event Ticket", - "category": "Global Event Ticket" - } - } -} + "pokemon": { + "1": { + "name": "Bulbasaur", + "pokedex_id": 1, + "default_form_id": 163, + "forms": { + "163": { + "name": "Normal", + "proto": "BULBASAUR_NORMAL", + "evolutions": [ + { + "pokemon": 2, + "form": 166 + } + ] + }, + "164": { + "name": "Shadow", + "proto": "BULBASAUR_SHADOW", + "evolutions": [ + { + "pokemon": 2, + "form": 167 + } + ] + }, + "165": { + "name": "Purified", + "proto": "BULBASAUR_PURIFIED", + "evolutions": [ + { + "pokemon": 2, + "form": 168 + } + ] + }, + "897": { + "name": "Fall 2019", + "proto": "BULBASAUR_FALL_2019", + "is_costume": true + } + }, + "types": [ + "Grass", + "Poison" + ], + "attack": 118, + "defense": 111, + "stamina": 128, + "height": 0.7, + "weight": 6.9, + "quick_moves": [ + "Vine Whip", + "Tackle" + ], + "charged_moves": [ + "Sludge Bomb", + "Seed Bomb", + "Power Whip" + ], + "family": 1, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 2, + "form": 166 + } + ], + "little": true + }, + "2": { + "name": "Ivysaur", + "pokedex_id": 2, + "default_form_id": 166, + "forms": { + "166": { + "name": "Normal", + "proto": "IVYSAUR_NORMAL", + "evolutions": [ + { + "pokemon": 3, + "form": 169 + } + ] + }, + "167": { + "name": "Shadow", + "proto": "IVYSAUR_SHADOW", + "evolutions": [ + { + "pokemon": 3, + "form": 170 + } + ] + }, + "168": { + "name": "Purified", + "proto": "IVYSAUR_PURIFIED", + "evolutions": [ + { + "pokemon": 3, + "form": 171 + } + ] + } + }, + "types": [ + "Grass", + "Poison" + ], + "attack": 151, + "defense": 143, + "stamina": 155, + "height": 1, + "weight": 13, + "quick_moves": [ + "Razor Leaf", + "Vine Whip" + ], + "charged_moves": [ + "Sludge Bomb", + "Solar Beam", + "Power Whip" + ], + "family": 1, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 3, + "form": 169 + } + ] + }, + "3": { + "name": "Venusaur", + "pokedex_id": 3, + "default_form_id": 169, + "forms": { + "169": { + "name": "Normal", + "proto": "VENUSAUR_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "170": { + "name": "Shadow", + "proto": "VENUSAUR_SHADOW" + }, + "171": { + "name": "Purified", + "proto": "VENUSAUR_PURIFIED", + "temp_evolutions": { + "1": {} + } + }, + "950": { + "name": "Copy 2019", + "proto": "VENUSAUR_COPY_2019" + } + }, + "types": [ + "Grass", + "Poison" + ], + "attack": 198, + "defense": 189, + "stamina": 190, + "height": 2, + "weight": 100, + "quick_moves": [ + "Razor Leaf", + "Vine Whip" + ], + "charged_moves": [ + "Sludge Bomb", + "Petal Blizzard", + "Solar Beam" + ], + "family": 1, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "1": { + "attack": 241, + "defense": 246, + "stamina": 190, + "height": 2.4, + "weight": 155.5 + } + } + }, + "4": { + "name": "Charmander", + "pokedex_id": 4, + "default_form_id": 172, + "forms": { + "172": { + "name": "Normal", + "proto": "CHARMANDER_NORMAL", + "evolutions": [ + { + "pokemon": 5, + "form": 175 + } + ] + }, + "173": { + "name": "Shadow", + "proto": "CHARMANDER_SHADOW", + "evolutions": [ + { + "pokemon": 5, + "form": 176 + } + ] + }, + "174": { + "name": "Purified", + "proto": "CHARMANDER_PURIFIED", + "evolutions": [ + { + "pokemon": 5, + "form": 177 + } + ] + }, + "896": { + "name": "Fall 2019", + "proto": "CHARMANDER_FALL_2019", + "is_costume": true + } + }, + "types": [ + "Fire" + ], + "attack": 116, + "defense": 93, + "stamina": 118, + "height": 0.6, + "weight": 8.5, + "quick_moves": [ + "Ember", + "Scratch" + ], + "charged_moves": [ + "Flame Charge", + "Flame Burst", + "Flamethrower" + ], + "family": 4, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 5, + "form": 175 + } + ], + "little": true + }, + "5": { + "name": "Charmeleon", + "pokedex_id": 5, + "default_form_id": 175, + "forms": { + "175": { + "name": "Normal", + "proto": "CHARMELEON_NORMAL", + "evolutions": [ + { + "pokemon": 6, + "form": 178 + } + ] + }, + "176": { + "name": "Shadow", + "proto": "CHARMELEON_SHADOW", + "evolutions": [ + { + "pokemon": 6, + "form": 179 + } + ] + }, + "177": { + "name": "Purified", + "proto": "CHARMELEON_PURIFIED", + "evolutions": [ + { + "pokemon": 6, + "form": 180 + } + ] + } + }, + "types": [ + "Fire" + ], + "attack": 158, + "defense": 126, + "stamina": 151, + "height": 1.1, + "weight": 19, + "quick_moves": [ + "Ember", + "Fire Fang" + ], + "charged_moves": [ + "Fire Punch", + "Flame Burst", + "Flamethrower" + ], + "family": 4, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 6, + "form": 178 + } + ] + }, + "6": { + "name": "Charizard", + "pokedex_id": 6, + "default_form_id": 178, + "forms": { + "178": { + "name": "Normal", + "proto": "CHARIZARD_NORMAL", + "temp_evolutions": { + "2": {}, + "3": {} + } + }, + "179": { + "name": "Shadow", + "proto": "CHARIZARD_SHADOW" + }, + "180": { + "name": "Purified", + "proto": "CHARIZARD_PURIFIED", + "temp_evolutions": { + "2": {}, + "3": {} + } + }, + "951": { + "name": "Copy 2019", + "proto": "CHARIZARD_COPY_2019" + } + }, + "types": [ + "Fire", + "Flying" + ], + "attack": 223, + "defense": 173, + "stamina": 186, + "height": 1.7, + "weight": 90.5, + "quick_moves": [ + "Fire Spin", + "Air Slash" + ], + "charged_moves": [ + "Fire Blast", + "Dragon Claw", + "Overheat" + ], + "family": 4, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "2": { + "attack": 273, + "defense": 213, + "stamina": 186, + "weight": 110.5, + "types": [ + "Fire", + "Dragon" + ] + }, + "3": { + "attack": 319, + "defense": 212, + "stamina": 186, + "weight": 100.5 + } + } + }, + "7": { + "name": "Squirtle", + "pokedex_id": 7, + "default_form_id": 181, + "forms": { + "181": { + "name": "Normal", + "proto": "SQUIRTLE_NORMAL", + "evolutions": [ + { + "pokemon": 8, + "form": 184 + } + ] + }, + "182": { + "name": "Shadow", + "proto": "SQUIRTLE_SHADOW", + "evolutions": [ + { + "pokemon": 8, + "form": 185 + } + ] + }, + "183": { + "name": "Purified", + "proto": "SQUIRTLE_PURIFIED", + "evolutions": [ + { + "pokemon": 8, + "form": 186 + } + ] + }, + "895": { + "name": "Fall 2019", + "proto": "SQUIRTLE_FALL_2019", + "is_costume": true + } + }, + "types": [ + "Water" + ], + "attack": 94, + "defense": 121, + "stamina": 127, + "height": 0.5, + "weight": 9, + "quick_moves": [ + "Bubble", + "Tackle" + ], + "charged_moves": [ + "Aqua Jet", + "Aqua Tail", + "Water Pulse" + ], + "family": 7, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 8, + "form": 184 + } + ], + "little": true + }, + "8": { + "name": "Wartortle", + "pokedex_id": 8, + "default_form_id": 184, + "forms": { + "184": { + "name": "Normal", + "proto": "WARTORTLE_NORMAL", + "evolutions": [ + { + "pokemon": 9, + "form": 187 + } + ] + }, + "185": { + "name": "Shadow", + "proto": "WARTORTLE_SHADOW", + "evolutions": [ + { + "pokemon": 9, + "form": 188 + } + ] + }, + "186": { + "name": "Purified", + "proto": "WARTORTLE_PURIFIED", + "evolutions": [ + { + "pokemon": 9, + "form": 189 + } + ] + } + }, + "types": [ + "Water" + ], + "attack": 126, + "defense": 155, + "stamina": 153, + "height": 1, + "weight": 22.5, + "quick_moves": [ + "Water Gun", + "Bite" + ], + "charged_moves": [ + "Aqua Jet", + "Ice Beam", + "Hydro Pump" + ], + "family": 7, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 9, + "form": 187 + } + ] + }, + "9": { + "name": "Blastoise", + "pokedex_id": 9, + "default_form_id": 187, + "forms": { + "187": { + "name": "Normal", + "proto": "BLASTOISE_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "188": { + "name": "Shadow", + "proto": "BLASTOISE_SHADOW" + }, + "189": { + "name": "Purified", + "proto": "BLASTOISE_PURIFIED", + "temp_evolutions": { + "1": {} + } + }, + "952": { + "name": "Copy 2019", + "proto": "BLASTOISE_COPY_2019" + } + }, + "types": [ + "Water" + ], + "attack": 171, + "defense": 207, + "stamina": 188, + "height": 1.6, + "weight": 85.5, + "quick_moves": [ + "Water Gun", + "Bite" + ], + "charged_moves": [ + "Flash Cannon", + "Ice Beam", + "Hydro Pump", + "Skull Bash" + ], + "family": 7, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "1": { + "attack": 264, + "defense": 237, + "stamina": 188, + "weight": 101.1 + } + } + }, + "10": { + "name": "Caterpie", + "pokedex_id": 10, + "default_form_id": 953, + "forms": { + "953": { + "name": "Normal", + "proto": "CATERPIE_NORMAL" + }, + "954": { + "name": "Shadow", + "proto": "CATERPIE_SHADOW" + }, + "955": { + "name": "Purified", + "proto": "CATERPIE_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Bug" + ], + "attack": 55, + "defense": 55, + "stamina": 128, + "height": 0.3, + "weight": 2.9, + "quick_moves": [ + "Bug Bite", + "Tackle" + ], + "charged_moves": [ + "Struggle" + ], + "family": 10, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 11 + } + ], + "little": true + }, + "11": { + "name": "Metapod", + "pokedex_id": 11, + "default_form_id": 956, + "forms": { + "956": { + "name": "Normal", + "proto": "METAPOD_NORMAL" + }, + "957": { + "name": "Shadow", + "proto": "METAPOD_SHADOW" + }, + "958": { + "name": "Purified", + "proto": "METAPOD_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Bug" + ], + "attack": 45, + "defense": 80, + "stamina": 137, + "height": 0.7, + "weight": 9.9, + "quick_moves": [ + "Bug Bite", + "Tackle" + ], + "charged_moves": [ + "Struggle" + ], + "family": 10, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 12 + } + ] + }, + "12": { + "name": "Butterfree", + "pokedex_id": 12, + "default_form_id": 959, + "forms": { + "959": { + "name": "Normal", + "proto": "BUTTERFREE_NORMAL" + }, + "960": { + "name": "Shadow", + "proto": "BUTTERFREE_SHADOW" + }, + "961": { + "name": "Purified", + "proto": "BUTTERFREE_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Bug", + "Flying" + ], + "attack": 167, + "defense": 137, + "stamina": 155, + "height": 1.1, + "weight": 32, + "quick_moves": [ + "Struggle Bug", + "Confusion" + ], + "charged_moves": [ + "Bug Buzz", + "Psychic", + "Signal Beam" + ], + "family": 10, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "13": { + "name": "Weedle", + "pokedex_id": 13, + "default_form_id": 616, + "forms": { + "616": { + "name": "Normal", + "proto": "WEEDLE_NORMAL", + "evolutions": [ + { + "pokemon": 14, + "form": 619 + } + ] + }, + "617": { + "name": "Shadow", + "proto": "WEEDLE_SHADOW", + "evolutions": [ + { + "pokemon": 14, + "form": 620 + } + ] + }, + "618": { + "name": "Purified", + "proto": "WEEDLE_PURIFIED", + "evolutions": [ + { + "pokemon": 14, + "form": 621 + } + ] + } + }, + "types": [ + "Bug", + "Poison" + ], + "attack": 63, + "defense": 50, + "stamina": 120, + "height": 0.3, + "weight": 3.2, + "quick_moves": [ + "Bug Bite", + "Poison Sting" + ], + "charged_moves": [ + "Struggle" + ], + "family": 13, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 14, + "form": 619 + } + ], + "little": true + }, + "14": { + "name": "Kakuna", + "pokedex_id": 14, + "default_form_id": 619, + "forms": { + "619": { + "name": "Normal", + "proto": "KAKUNA_NORMAL", + "evolutions": [ + { + "pokemon": 15, + "form": 622 + } + ] + }, + "620": { + "name": "Shadow", + "proto": "KAKUNA_SHADOW", + "evolutions": [ + { + "pokemon": 15, + "form": 623 + } + ] + }, + "621": { + "name": "Purified", + "proto": "KAKUNA_PURIFIED", + "evolutions": [ + { + "pokemon": 15, + "form": 624 + } + ] + } + }, + "types": [ + "Bug", + "Poison" + ], + "attack": 46, + "defense": 75, + "stamina": 128, + "height": 0.6, + "weight": 10, + "quick_moves": [ + "Bug Bite", + "Poison Sting" + ], + "charged_moves": [ + "Struggle" + ], + "family": 13, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 15, + "form": 622 + } + ] + }, + "15": { + "name": "Beedrill", + "pokedex_id": 15, + "default_form_id": 622, + "forms": { + "622": { + "name": "Normal", + "proto": "BEEDRILL_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "623": { + "name": "Shadow", + "proto": "BEEDRILL_SHADOW" + }, + "624": { + "name": "Purified", + "proto": "BEEDRILL_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Bug", + "Poison" + ], + "attack": 169, + "defense": 130, + "stamina": 163, + "height": 1, + "weight": 29.5, + "quick_moves": [ + "Infestation", + "Poison Jab" + ], + "charged_moves": [ + "Sludge Bomb", + "Aerial Ace", + "X Scissor", + "Fell Stinger" + ], + "family": 13, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "1": { + "attack": 303, + "defense": 148, + "stamina": 163, + "height": 1.4, + "weight": 40.5 + } + } + }, + "16": { + "name": "Pidgey", + "pokedex_id": 16, + "default_form_id": 962, + "forms": { + "962": { + "name": "Normal", + "proto": "PIDGEY_NORMAL" + }, + "963": { + "name": "Shadow", + "proto": "PIDGEY_SHADOW" + }, + "964": { + "name": "Purified", + "proto": "PIDGEY_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal", + "Flying" + ], + "attack": 85, + "defense": 73, + "stamina": 120, + "height": 0.3, + "weight": 1.8, + "quick_moves": [ + "Quick Attack", + "Tackle" + ], + "charged_moves": [ + "Twister", + "Aerial Ace", + "Air Cutter" + ], + "family": 16, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 17 + } + ], + "little": true + }, + "17": { + "name": "Pidgeotto", + "pokedex_id": 17, + "default_form_id": 965, + "forms": { + "965": { + "name": "Normal", + "proto": "PIDGEOTTO_NORMAL" + }, + "966": { + "name": "Shadow", + "proto": "PIDGEOTTO_SHADOW" + }, + "967": { + "name": "Purified", + "proto": "PIDGEOTTO_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal", + "Flying" + ], + "attack": 117, + "defense": 105, + "stamina": 160, + "height": 1.1, + "weight": 30, + "quick_moves": [ + "Wing Attack", + "Steel Wing" + ], + "charged_moves": [ + "Twister", + "Aerial Ace", + "Air Cutter" + ], + "family": 16, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 18 + } + ] + }, + "18": { + "name": "Pidgeot", + "pokedex_id": 18, + "default_form_id": 968, + "forms": { + "968": { + "name": "Normal", + "proto": "PIDGEOT_NORMAL" + }, + "969": { + "name": "Shadow", + "proto": "PIDGEOT_SHADOW" + }, + "970": { + "name": "Purified", + "proto": "PIDGEOT_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal", + "Flying" + ], + "attack": 166, + "defense": 154, + "stamina": 195, + "height": 1.5, + "weight": 39.5, + "quick_moves": [ + "Air Slash", + "Steel Wing" + ], + "charged_moves": [ + "Hurricane", + "Aerial Ace", + "Brave Bird", + "Feather Dance" + ], + "family": 16, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "temp_evolutions": { + "1": { + "attack": 280, + "defense": 175, + "stamina": 195, + "height": 2.2, + "weight": 50.5 + } + } + }, + "19": { + "name": "Rattata", + "pokedex_id": 19, + "default_form_id": 45, + "forms": { + "45": { + "name": "Normal", + "proto": "RATTATA_NORMAL", + "evolutions": [ + { + "pokemon": 20, + "form": 47 + } + ] + }, + "46": { + "name": "Alola", + "proto": "RATTATA_ALOLA", + "height": 0.3, + "weight": 3.8, + "charged_moves": [ + "Crunch", + "Hyper Fang", + "Shadow Ball" + ], + "types": [ + "Dark", + "Normal" + ], + "evolutions": [ + { + "pokemon": 20, + "form": 48 + } + ] + }, + "153": { + "name": "Shadow", + "proto": "RATTATA_SHADOW", + "evolutions": [ + { + "pokemon": 20, + "form": 155 + } + ] + }, + "154": { + "name": "Purified", + "proto": "RATTATA_PURIFIED", + "evolutions": [ + { + "pokemon": 20, + "form": 156 + } + ] + } + }, + "types": [ + "Normal" + ], + "attack": 103, + "defense": 70, + "stamina": 102, + "height": 0.3, + "weight": 3.5, + "quick_moves": [ + "Tackle", + "Quick Attack" + ], + "charged_moves": [ + "Dig", + "Hyper Fang", + "Body Slam" + ], + "family": 19, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 20, + "form": 47 + } + ], + "little": true + }, + "20": { + "name": "Raticate", + "pokedex_id": 20, + "default_form_id": 47, + "forms": { + "47": { + "name": "Normal", + "proto": "RATICATE_NORMAL" + }, + "48": { + "name": "Alola", + "proto": "RATICATE_ALOLA", + "attack": 135, + "defense": 154, + "stamina": 181, + "height": 0.7, + "weight": 25.5, + "charged_moves": [ + "Crunch", + "Hyper Fang", + "Hyper Beam" + ], + "types": [ + "Dark", + "Normal" + ] + }, + "155": { + "name": "Shadow", + "proto": "RATICATE_SHADOW" + }, + "156": { + "name": "Purified", + "proto": "RATICATE_PURIFIED" + }, + "2329": { + "name": "Spring 2020", + "proto": "RATICATE_SPRING_2020" + } + }, + "types": [ + "Normal" + ], + "attack": 161, + "defense": 139, + "stamina": 146, + "height": 0.7, + "weight": 18.5, + "quick_moves": [ + "Bite", + "Quick Attack" + ], + "charged_moves": [ + "Dig", + "Hyper Fang", + "Hyper Beam" + ], + "family": 19, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "21": { + "name": "Spearow", + "pokedex_id": 21, + "default_form_id": 971, + "forms": { + "971": { + "name": "Normal", + "proto": "SPEAROW_NORMAL" + }, + "972": { + "name": "Shadow", + "proto": "SPEAROW_SHADOW" + }, + "973": { + "name": "Purified", + "proto": "SPEAROW_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal", + "Flying" + ], + "attack": 112, + "defense": 60, + "stamina": 120, + "height": 0.3, + "weight": 2, + "quick_moves": [ + "Peck", + "Quick Attack" + ], + "charged_moves": [ + "Aerial Ace", + "Drill Peck", + "Sky Attack" + ], + "family": 21, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 22 + } + ], + "little": true + }, + "22": { + "name": "Fearow", + "pokedex_id": 22, + "default_form_id": 974, + "forms": { + "974": { + "name": "Normal", + "proto": "FEAROW_NORMAL" + }, + "975": { + "name": "Shadow", + "proto": "FEAROW_SHADOW" + }, + "976": { + "name": "Purified", + "proto": "FEAROW_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal", + "Flying" + ], + "attack": 182, + "defense": 133, + "stamina": 163, + "height": 1.2, + "weight": 38, + "quick_moves": [ + "Peck", + "Steel Wing" + ], + "charged_moves": [ + "Aerial Ace", + "Drill Run", + "Sky Attack" + ], + "family": 21, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "23": { + "name": "Ekans", + "pokedex_id": 23, + "default_form_id": 697, + "forms": { + "697": { + "name": "Normal", + "proto": "EKANS_NORMAL", + "evolutions": [ + { + "pokemon": 24, + "form": 700 + } + ] + }, + "698": { + "name": "Shadow", + "proto": "EKANS_SHADOW", + "evolutions": [ + { + "pokemon": 24, + "form": 701 + } + ] + }, + "699": { + "name": "Purified", + "proto": "EKANS_PURIFIED", + "evolutions": [ + { + "pokemon": 24, + "form": 702 + } + ] + } + }, + "types": [ + "Poison" + ], + "attack": 110, + "defense": 97, + "stamina": 111, + "height": 2, + "weight": 6.9, + "quick_moves": [ + "Poison Sting", + "Acid" + ], + "charged_moves": [ + "Wrap", + "Poison Fang", + "Sludge Bomb" + ], + "family": 23, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 24, + "form": 700 + } + ], + "little": true + }, + "24": { + "name": "Arbok", + "pokedex_id": 24, + "default_form_id": 700, + "forms": { + "700": { + "name": "Normal", + "proto": "ARBOK_NORMAL" + }, + "701": { + "name": "Shadow", + "proto": "ARBOK_SHADOW" + }, + "702": { + "name": "Purified", + "proto": "ARBOK_PURIFIED" + } + }, + "types": [ + "Poison" + ], + "attack": 167, + "defense": 153, + "stamina": 155, + "height": 3.5, + "weight": 65, + "quick_moves": [ + "Bite", + "Acid", + "Dragon Tail" + ], + "charged_moves": [ + "Dark Pulse", + "Sludge Wave", + "Gunk Shot", + "Acid Spray" + ], + "family": 23, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "25": { + "name": "Pikachu", + "pokedex_id": 25, + "default_form_id": 598, + "forms": { + "598": { + "name": "Normal", + "proto": "PIKACHU_NORMAL", + "evolutions": [ + { + "pokemon": 26 + } + ] + }, + "894": { + "name": "Fall 2019", + "proto": "PIKACHU_FALL_2019", + "is_costume": true + }, + "901": { + "name": "Vs 2019", + "proto": "PIKACHU_VS_2019", + "is_costume": true, + "quick_moves": [ + "Thunder Shock", + "Charm" + ], + "charged_moves": [ + "Flying Press", + "Thunder Punch", + "Play Rough" + ] + }, + "949": { + "name": "Copy 2019", + "proto": "PIKACHU_COPY_2019" + }, + "977": { + "name": "Shadow", + "proto": "PIKACHU_SHADOW" + }, + "978": { + "name": "Purified", + "proto": "PIKACHU_PURIFIED" + }, + "2332": { + "name": "Costume 2020", + "proto": "PIKACHU_COSTUME_2020", + "is_costume": true, + "charged_moves": [ + "Discharge", + "Thunderbolt", + "Wild Charge", + "Fly" + ] + }, + "2669": { + "name": "Adventure Hat 2020", + "proto": "PIKACHU_ADVENTURE_HAT_2020", + "is_costume": true + }, + "2670": { + "name": "Winter 2020", + "proto": "PIKACHU_WINTER_2020", + "is_costume": true + }, + "2675": { + "name": "Kariyushi", + "proto": "PIKACHU_KARIYUSHI", + "is_costume": true + }, + "2676": { + "name": "Pop Star", + "proto": "PIKACHU_POP_STAR", + "is_costume": true, + "quick_moves": [ + "Thunder Shock", + "Charm" + ], + "charged_moves": [ + "Draining Kiss", + "Thunder Punch", + "Play Rough" + ] + }, + "2677": { + "name": "Rock Star", + "proto": "PIKACHU_ROCK_STAR", + "is_costume": true, + "quick_moves": [ + "Thunder Shock", + "Charm" + ], + "charged_moves": [ + "Meteor Mash", + "Thunder Punch", + "Play Rough" + ] + }, + "2678": { + "name": "Flying 5th Anniv", + "proto": "PIKACHU_FLYING_5TH_ANNIV", + "is_costume": true, + "charged_moves": [ + "Discharge", + "Thunderbolt", + "Wild Charge", + "Fly" + ] + } + }, + "types": [ + "Electric" + ], + "attack": 112, + "defense": 96, + "stamina": 111, + "height": 0.4, + "weight": 6, + "quick_moves": [ + "Thunder Shock", + "Quick Attack" + ], + "charged_moves": [ + "Discharge", + "Thunderbolt", + "Wild Charge" + ], + "family": 25, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 26 + } + ] + }, + "26": { + "name": "Raichu", + "pokedex_id": 26, + "default_form_id": 49, + "forms": { + "49": { + "name": "Normal", + "proto": "RAICHU_NORMAL" + }, + "50": { + "name": "Alola", + "proto": "RAICHU_ALOLA", + "attack": 201, + "defense": 154, + "stamina": 155, + "height": 0.7, + "weight": 21, + "quick_moves": [ + "Volt Switch", + "Spark", + "Thunder Shock" + ], + "charged_moves": [ + "Psychic", + "Thunder Punch", + "Wild Charge", + "Grass Knot" + ], + "types": [ + "Electric", + "Psychic" + ] + }, + "979": { + "name": "Shadow", + "proto": "RAICHU_SHADOW" + }, + "980": { + "name": "Purified", + "proto": "RAICHU_PURIFIED" + } + }, + "types": [ + "Electric" + ], + "attack": 193, + "defense": 151, + "stamina": 155, + "height": 0.8, + "weight": 30, + "quick_moves": [ + "Volt Switch", + "Spark", + "Charm", + "Thunder Shock" + ], + "charged_moves": [ + "Brick Break", + "Thunder Punch", + "Wild Charge", + "Skull Bash" + ], + "family": 25, + "flee_rate": 0.06, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "27": { + "name": "Sandshrew", + "pokedex_id": 27, + "default_form_id": 51, + "forms": { + "51": { + "name": "Normal", + "proto": "SANDSHREW_NORMAL", + "evolutions": [ + { + "pokemon": 28, + "form": 53 + } + ] + }, + "52": { + "name": "Alola", + "proto": "SANDSHREW_ALOLA", + "attack": 125, + "defense": 129, + "stamina": 137, + "height": 0.7, + "weight": 40, + "quick_moves": [ + "Metal Claw", + "Powder Snow" + ], + "charged_moves": [ + "Blizzard", + "Gyro Ball", + "Night Slash" + ], + "types": [ + "Ice", + "Steel" + ], + "evolutions": [ + { + "pokemon": 28, + "form": 54 + } + ] + }, + "673": { + "name": "Shadow", + "proto": "SANDSHREW_SHADOW", + "evolutions": [ + { + "pokemon": 28, + "form": 675 + } + ] + }, + "674": { + "name": "Purified", + "proto": "SANDSHREW_PURIFIED", + "evolutions": [ + { + "pokemon": 28, + "form": 676 + } + ] + } + }, + "types": [ + "Ground" + ], + "attack": 126, + "defense": 120, + "stamina": 137, + "height": 0.6, + "weight": 12, + "quick_moves": [ + "Scratch", + "Mud Shot" + ], + "charged_moves": [ + "Dig", + "Rock Slide", + "Sand Tomb" + ], + "family": 27, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 28, + "form": 53 + } + ], + "little": true + }, + "28": { + "name": "Sandslash", + "pokedex_id": 28, + "default_form_id": 53, + "forms": { + "53": { + "name": "Normal", + "proto": "SANDSLASH_NORMAL" + }, + "54": { + "name": "Alola", + "proto": "SANDSLASH_ALOLA", + "attack": 177, + "defense": 195, + "stamina": 181, + "height": 1.2, + "weight": 55, + "quick_moves": [ + "Metal Claw", + "Powder Snow" + ], + "charged_moves": [ + "Blizzard", + "Gyro Ball", + "Bulldoze", + "Ice Punch" + ], + "types": [ + "Ice", + "Steel" + ] + }, + "675": { + "name": "Shadow", + "proto": "SANDSLASH_SHADOW" + }, + "676": { + "name": "Purified", + "proto": "SANDSLASH_PURIFIED" + } + }, + "types": [ + "Ground" + ], + "attack": 182, + "defense": 175, + "stamina": 181, + "height": 1, + "weight": 29.5, + "quick_moves": [ + "Metal Claw", + "Mud Shot" + ], + "charged_moves": [ + "Earthquake", + "Rock Tomb", + "Bulldoze" + ], + "family": 27, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "29": { + "name": "Nidoran♀", + "pokedex_id": 29, + "default_form_id": 776, + "forms": { + "776": { + "name": "Normal", + "proto": "NIDORAN_NORMAL", + "evolutions": [ + { + "pokemon": 30, + "form": 779 + } + ] + }, + "777": { + "name": "Shadow", + "proto": "NIDORAN_SHADOW", + "evolutions": [ + { + "pokemon": 30, + "form": 780 + } + ] + }, + "778": { + "name": "Purified", + "proto": "NIDORAN_PURIFIED", + "evolutions": [ + { + "pokemon": 30, + "form": 781 + } + ] + } + }, + "types": [ + "Poison" + ], + "attack": 86, + "defense": 89, + "stamina": 146, + "height": 0.4, + "weight": 7, + "quick_moves": [ + "Bite", + "Poison Sting" + ], + "charged_moves": [ + "Poison Fang", + "Body Slam", + "Sludge Bomb" + ], + "family": 29, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 30, + "form": 779 + } + ], + "little": true + }, + "30": { + "name": "Nidorina", + "pokedex_id": 30, + "default_form_id": 779, + "forms": { + "779": { + "name": "Normal", + "proto": "NIDORINA_NORMAL", + "evolutions": [ + { + "pokemon": 31, + "form": 782 + } + ] + }, + "780": { + "name": "Shadow", + "proto": "NIDORINA_SHADOW", + "evolutions": [ + { + "pokemon": 31, + "form": 783 + } + ] + }, + "781": { + "name": "Purified", + "proto": "NIDORINA_PURIFIED", + "evolutions": [ + { + "pokemon": 31, + "form": 784 + } + ] + } + }, + "types": [ + "Poison" + ], + "attack": 117, + "defense": 120, + "stamina": 172, + "height": 0.8, + "weight": 20, + "quick_moves": [ + "Bite", + "Poison Sting" + ], + "charged_moves": [ + "Poison Fang", + "Dig", + "Sludge Bomb" + ], + "family": 29, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 31, + "form": 782 + } + ] + }, + "31": { + "name": "Nidoqueen", + "pokedex_id": 31, + "default_form_id": 782, + "forms": { + "782": { + "name": "Normal", + "proto": "NIDOQUEEN_NORMAL" + }, + "783": { + "name": "Shadow", + "proto": "NIDOQUEEN_SHADOW" + }, + "784": { + "name": "Purified", + "proto": "NIDOQUEEN_PURIFIED" + } + }, + "types": [ + "Poison", + "Ground" + ], + "attack": 180, + "defense": 173, + "stamina": 207, + "height": 1.3, + "weight": 60, + "quick_moves": [ + "Poison Jab", + "Bite" + ], + "charged_moves": [ + "Earthquake", + "Sludge Wave", + "Stone Edge", + "Earth Power", + "Poison Fang" + ], + "family": 29, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "32": { + "name": "Nidoran♂", + "pokedex_id": 32, + "default_form_id": 776, + "forms": { + "776": { + "name": "Normal", + "proto": "NIDORAN_NORMAL", + "evolutions": [ + { + "pokemon": 33, + "form": 785 + } + ] + }, + "777": { + "name": "Shadow", + "proto": "NIDORAN_SHADOW", + "evolutions": [ + { + "pokemon": 33, + "form": 786 + } + ] + }, + "778": { + "name": "Purified", + "proto": "NIDORAN_PURIFIED", + "evolutions": [ + { + "pokemon": 33, + "form": 787 + } + ] + } + }, + "types": [ + "Poison" + ], + "attack": 105, + "defense": 76, + "stamina": 130, + "height": 0.5, + "weight": 9, + "quick_moves": [ + "Peck", + "Poison Sting" + ], + "charged_moves": [ + "Horn Attack", + "Body Slam", + "Sludge Bomb" + ], + "family": 32, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 33, + "form": 785 + } + ], + "little": true + }, + "33": { + "name": "Nidorino", + "pokedex_id": 33, + "default_form_id": 785, + "forms": { + "785": { + "name": "Normal", + "proto": "NIDORINO_NORMAL", + "evolutions": [ + { + "pokemon": 34, + "form": 788 + } + ] + }, + "786": { + "name": "Shadow", + "proto": "NIDORINO_SHADOW", + "evolutions": [ + { + "pokemon": 34, + "form": 789 + } + ] + }, + "787": { + "name": "Purified", + "proto": "NIDORINO_PURIFIED", + "evolutions": [ + { + "pokemon": 34, + "form": 790 + } + ] + } + }, + "types": [ + "Poison" + ], + "attack": 137, + "defense": 111, + "stamina": 156, + "height": 0.9, + "weight": 19.5, + "quick_moves": [ + "Poison Jab", + "Poison Sting" + ], + "charged_moves": [ + "Horn Attack", + "Dig", + "Sludge Bomb" + ], + "family": 32, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 34, + "form": 788 + } + ] + }, + "34": { + "name": "Nidoking", + "pokedex_id": 34, + "default_form_id": 788, + "forms": { + "788": { + "name": "Normal", + "proto": "NIDOKING_NORMAL" + }, + "789": { + "name": "Shadow", + "proto": "NIDOKING_SHADOW" + }, + "790": { + "name": "Purified", + "proto": "NIDOKING_PURIFIED" + } + }, + "types": [ + "Poison", + "Ground" + ], + "attack": 204, + "defense": 156, + "stamina": 191, + "height": 1.4, + "weight": 62, + "quick_moves": [ + "Poison Jab", + "Iron Tail" + ], + "charged_moves": [ + "Earthquake", + "Sludge Wave", + "Megahorn", + "Earth Power" + ], + "family": 32, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "35": { + "name": "Clefairy", + "pokedex_id": 35, + "default_form_id": 981, + "forms": { + "981": { + "name": "Normal", + "proto": "CLEFAIRY_NORMAL" + }, + "982": { + "name": "Shadow", + "proto": "CLEFAIRY_SHADOW" + }, + "983": { + "name": "Purified", + "proto": "CLEFAIRY_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Fairy" + ], + "attack": 107, + "defense": 108, + "stamina": 172, + "height": 0.6, + "weight": 7.5, + "quick_moves": [ + "Pound", + "Zen Headbutt" + ], + "charged_moves": [ + "Disarming Voice", + "Body Slam", + "Moonblast" + ], + "family": 35, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 36 + } + ] + }, + "36": { + "name": "Clefable", + "pokedex_id": 36, + "default_form_id": 984, + "forms": { + "984": { + "name": "Normal", + "proto": "CLEFABLE_NORMAL" + }, + "985": { + "name": "Shadow", + "proto": "CLEFABLE_SHADOW" + }, + "986": { + "name": "Purified", + "proto": "CLEFABLE_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Fairy" + ], + "attack": 178, + "defense": 162, + "stamina": 216, + "height": 1.3, + "weight": 40, + "quick_moves": [ + "Charge Beam", + "Zen Headbutt", + "Charm" + ], + "charged_moves": [ + "Dazzling Gleam", + "Psychic", + "Moonblast", + "Meteor Mash" + ], + "family": 35, + "flee_rate": 0.06, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "37": { + "name": "Vulpix", + "pokedex_id": 37, + "default_form_id": 55, + "forms": { + "55": { + "name": "Normal", + "proto": "VULPIX_NORMAL", + "evolutions": [ + { + "pokemon": 38, + "form": 57 + } + ] + }, + "56": { + "name": "Alola", + "proto": "VULPIX_ALOLA", + "quick_moves": [ + "Zen Headbutt", + "Powder Snow" + ], + "charged_moves": [ + "Dark Pulse", + "Ice Beam", + "Blizzard", + "Weather Ball Ice" + ], + "types": [ + "Ice" + ], + "evolutions": [ + { + "pokemon": 38, + "form": 58 + } + ] + }, + "725": { + "name": "Shadow", + "proto": "VULPIX_SHADOW", + "evolutions": [ + { + "pokemon": 38, + "form": 727 + } + ] + }, + "726": { + "name": "Purified", + "proto": "VULPIX_PURIFIED", + "evolutions": [ + { + "pokemon": 38, + "form": 728 + } + ] + } + }, + "types": [ + "Fire" + ], + "attack": 96, + "defense": 109, + "stamina": 116, + "height": 0.6, + "weight": 9.9, + "quick_moves": [ + "Quick Attack", + "Ember" + ], + "charged_moves": [ + "Body Slam", + "Flamethrower", + "Flame Charge", + "Weather Ball Fire" + ], + "family": 37, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 38, + "form": 57 + } + ], + "little": true + }, + "38": { + "name": "Ninetales", + "pokedex_id": 38, + "default_form_id": 57, + "forms": { + "57": { + "name": "Normal", + "proto": "NINETALES_NORMAL" + }, + "58": { + "name": "Alola", + "proto": "NINETALES_ALOLA", + "attack": 170, + "defense": 193, + "stamina": 177, + "quick_moves": [ + "Feint Attack", + "Powder Snow", + "Charm" + ], + "charged_moves": [ + "Dazzling Gleam", + "Ice Beam", + "Blizzard", + "Psyshock", + "Weather Ball Ice" + ], + "types": [ + "Ice", + "Fairy" + ] + }, + "727": { + "name": "Shadow", + "proto": "NINETALES_SHADOW" + }, + "728": { + "name": "Purified", + "proto": "NINETALES_PURIFIED" + } + }, + "types": [ + "Fire" + ], + "attack": 169, + "defense": 190, + "stamina": 177, + "height": 1.1, + "weight": 19.9, + "quick_moves": [ + "Feint Attack", + "Fire Spin" + ], + "charged_moves": [ + "Heat Wave", + "Overheat", + "Solar Beam", + "Psyshock", + "Weather Ball Fire" + ], + "family": 37, + "flee_rate": 0.06, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "39": { + "name": "Jigglypuff", + "pokedex_id": 39, + "default_form_id": 987, + "forms": { + "987": { + "name": "Normal", + "proto": "JIGGLYPUFF_NORMAL" + }, + "988": { + "name": "Shadow", + "proto": "JIGGLYPUFF_SHADOW" + }, + "989": { + "name": "Purified", + "proto": "JIGGLYPUFF_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal", + "Fairy" + ], + "attack": 80, + "defense": 41, + "stamina": 251, + "height": 0.5, + "weight": 5.5, + "quick_moves": [ + "Pound", + "Feint Attack" + ], + "charged_moves": [ + "Disarming Voice", + "Gyro Ball", + "Dazzling Gleam" + ], + "family": 39, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 40 + } + ] + }, + "40": { + "name": "Wigglytuff", + "pokedex_id": 40, + "default_form_id": 990, + "forms": { + "990": { + "name": "Normal", + "proto": "WIGGLYTUFF_NORMAL" + }, + "991": { + "name": "Shadow", + "proto": "WIGGLYTUFF_SHADOW" + }, + "992": { + "name": "Purified", + "proto": "WIGGLYTUFF_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal", + "Fairy" + ], + "attack": 156, + "defense": 90, + "stamina": 295, + "height": 1, + "weight": 12, + "quick_moves": [ + "Pound", + "Feint Attack", + "Charm" + ], + "charged_moves": [ + "Dazzling Gleam", + "Hyper Beam", + "Play Rough", + "Ice Beam" + ], + "family": 39, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "41": { + "name": "Zubat", + "pokedex_id": 41, + "default_form_id": 157, + "forms": { + "157": { + "name": "Normal", + "proto": "ZUBAT_NORMAL", + "evolutions": [ + { + "pokemon": 42, + "form": 160 + } + ] + }, + "158": { + "name": "Shadow", + "proto": "ZUBAT_SHADOW", + "evolutions": [ + { + "pokemon": 42, + "form": 161 + } + ] + }, + "159": { + "name": "Purified", + "proto": "ZUBAT_PURIFIED", + "evolutions": [ + { + "pokemon": 42, + "form": 162 + } + ] + } + }, + "types": [ + "Poison", + "Flying" + ], + "attack": 83, + "defense": 73, + "stamina": 120, + "height": 0.8, + "weight": 7.5, + "quick_moves": [ + "Quick Attack", + "Bite" + ], + "charged_moves": [ + "Poison Fang", + "Air Cutter", + "Swift" + ], + "family": 41, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 42, + "form": 160 + } + ], + "little": true + }, + "42": { + "name": "Golbat", + "pokedex_id": 42, + "default_form_id": 160, + "forms": { + "160": { + "name": "Normal", + "proto": "GOLBAT_NORMAL", + "evolutions": [ + { + "pokemon": 169, + "form": 202 + } + ] + }, + "161": { + "name": "Shadow", + "proto": "GOLBAT_SHADOW", + "evolutions": [ + { + "pokemon": 169, + "form": 203 + } + ] + }, + "162": { + "name": "Purified", + "proto": "GOLBAT_PURIFIED", + "evolutions": [ + { + "pokemon": 169, + "form": 204 + } + ] + } + }, + "types": [ + "Poison", + "Flying" + ], + "attack": 161, + "defense": 150, + "stamina": 181, + "height": 1.6, + "weight": 55, + "quick_moves": [ + "Wing Attack", + "Bite" + ], + "charged_moves": [ + "Shadow Ball", + "Air Cutter", + "Poison Fang" + ], + "family": 41, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 169, + "form": 202 + } + ] + }, + "43": { + "name": "Oddish", + "pokedex_id": 43, + "default_form_id": 265, + "forms": { + "265": { + "name": "Normal", + "proto": "ODDISH_NORMAL", + "evolutions": [ + { + "pokemon": 44, + "form": 268 + } + ] + }, + "266": { + "name": "Shadow", + "proto": "ODDISH_SHADOW", + "evolutions": [ + { + "pokemon": 44, + "form": 269 + } + ] + }, + "267": { + "name": "Purified", + "proto": "ODDISH_PURIFIED", + "evolutions": [ + { + "pokemon": 44, + "form": 270 + } + ] + } + }, + "types": [ + "Grass", + "Poison" + ], + "attack": 131, + "defense": 112, + "stamina": 128, + "height": 0.5, + "weight": 5.4, + "quick_moves": [ + "Razor Leaf", + "Acid" + ], + "charged_moves": [ + "Seed Bomb", + "Sludge Bomb", + "Moonblast" + ], + "family": 43, + "flee_rate": 0.15, + "capture_rate": 0.6, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 44, + "form": 268 + } + ], + "little": true + }, + "44": { + "name": "Gloom", + "pokedex_id": 44, + "default_form_id": 268, + "forms": { + "268": { + "name": "Normal", + "proto": "GLOOM_NORMAL", + "evolutions": [ + { + "pokemon": 45, + "form": 271 + }, + { + "pokemon": 182, + "form": 274 + } + ] + }, + "269": { + "name": "Shadow", + "proto": "GLOOM_SHADOW", + "evolutions": [ + { + "pokemon": 45, + "form": 272 + }, + { + "pokemon": 182, + "form": 275 + } + ] + }, + "270": { + "name": "Purified", + "proto": "GLOOM_PURIFIED", + "evolutions": [ + { + "pokemon": 45, + "form": 273 + }, + { + "pokemon": 182, + "form": 276 + } + ] + } + }, + "types": [ + "Grass", + "Poison" + ], + "attack": 153, + "defense": 136, + "stamina": 155, + "height": 0.8, + "weight": 8.6, + "quick_moves": [ + "Razor Leaf", + "Acid" + ], + "charged_moves": [ + "Petal Blizzard", + "Sludge Bomb", + "Moonblast" + ], + "family": 43, + "flee_rate": 0.07, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 45, + "form": 271 + }, + { + "pokemon": 182, + "form": 274 + } + ] + }, + "45": { + "name": "Vileplume", + "pokedex_id": 45, + "default_form_id": 271, + "forms": { + "271": { + "name": "Normal", + "proto": "VILEPLUME_NORMAL" + }, + "272": { + "name": "Shadow", + "proto": "VILEPLUME_SHADOW" + }, + "273": { + "name": "Purified", + "proto": "VILEPLUME_PURIFIED" + } + }, + "types": [ + "Grass", + "Poison" + ], + "attack": 202, + "defense": 167, + "stamina": 181, + "height": 1.2, + "weight": 18.6, + "quick_moves": [ + "Razor Leaf", + "Acid" + ], + "charged_moves": [ + "Petal Blizzard", + "Solar Beam", + "Moonblast", + "Sludge Bomb" + ], + "family": 43, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "46": { + "name": "Paras", + "pokedex_id": 46, + "default_form_id": 993, + "forms": { + "993": { + "name": "Normal", + "proto": "PARAS_NORMAL" + }, + "994": { + "name": "Shadow", + "proto": "PARAS_SHADOW" + }, + "995": { + "name": "Purified", + "proto": "PARAS_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Bug", + "Grass" + ], + "attack": 121, + "defense": 99, + "stamina": 111, + "height": 0.3, + "weight": 5.4, + "quick_moves": [ + "Scratch", + "Bug Bite" + ], + "charged_moves": [ + "Cross Poison", + "X Scissor", + "Seed Bomb" + ], + "family": 46, + "flee_rate": 0.15, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 47 + } + ], + "little": true + }, + "47": { + "name": "Parasect", + "pokedex_id": 47, + "default_form_id": 996, + "forms": { + "996": { + "name": "Normal", + "proto": "PARASECT_NORMAL" + }, + "997": { + "name": "Shadow", + "proto": "PARASECT_SHADOW" + }, + "998": { + "name": "Purified", + "proto": "PARASECT_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Bug", + "Grass" + ], + "attack": 165, + "defense": 146, + "stamina": 155, + "height": 1, + "weight": 29.5, + "quick_moves": [ + "Struggle Bug", + "Fury Cutter" + ], + "charged_moves": [ + "Cross Poison", + "X Scissor", + "Solar Beam" + ], + "family": 46, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "48": { + "name": "Venonat", + "pokedex_id": 48, + "default_form_id": 259, + "forms": { + "259": { + "name": "Normal", + "proto": "VENONAT_NORMAL", + "evolutions": [ + { + "pokemon": 49, + "form": 262 + } + ] + }, + "260": { + "name": "Shadow", + "proto": "VENONAT_SHADOW", + "evolutions": [ + { + "pokemon": 49, + "form": 263 + } + ] + }, + "261": { + "name": "Purified", + "proto": "VENONAT_PURIFIED", + "evolutions": [ + { + "pokemon": 49, + "form": 264 + } + ] + } + }, + "types": [ + "Bug", + "Poison" + ], + "attack": 100, + "defense": 100, + "stamina": 155, + "height": 1, + "weight": 30, + "quick_moves": [ + "Bug Bite", + "Confusion" + ], + "charged_moves": [ + "Poison Fang", + "Psybeam", + "Signal Beam" + ], + "family": 48, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 49, + "form": 262 + } + ], + "little": true + }, + "49": { + "name": "Venomoth", + "pokedex_id": 49, + "default_form_id": 262, + "forms": { + "262": { + "name": "Normal", + "proto": "VENOMOTH_NORMAL" + }, + "263": { + "name": "Shadow", + "proto": "VENOMOTH_SHADOW" + }, + "264": { + "name": "Purified", + "proto": "VENOMOTH_PURIFIED" + } + }, + "types": [ + "Bug", + "Poison" + ], + "attack": 179, + "defense": 143, + "stamina": 172, + "height": 1.5, + "weight": 12.5, + "quick_moves": [ + "Infestation", + "Confusion" + ], + "charged_moves": [ + "Silver Wind", + "Psychic", + "Bug Buzz", + "Poison Fang" + ], + "family": 48, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "50": { + "name": "Diglett", + "pokedex_id": 50, + "default_form_id": 59, + "forms": { + "59": { + "name": "Normal", + "proto": "DIGLETT_NORMAL", + "evolutions": [ + { + "pokemon": 51, + "form": 61 + } + ] + }, + "60": { + "name": "Alola", + "proto": "DIGLETT_ALOLA", + "attack": 108, + "defense": 81, + "stamina": 67, + "height": 0.2, + "weight": 1, + "quick_moves": [ + "Mud Slap", + "Metal Claw" + ], + "types": [ + "Ground", + "Steel" + ], + "evolutions": [ + { + "pokemon": 51, + "form": 62 + } + ] + }, + "842": { + "name": "Shadow", + "proto": "DIGLETT_SHADOW", + "evolutions": [ + { + "pokemon": 51, + "form": 844 + } + ] + }, + "843": { + "name": "Purified", + "proto": "DIGLETT_PURIFIED", + "evolutions": [ + { + "pokemon": 51, + "form": 845 + } + ] + } + }, + "types": [ + "Ground" + ], + "attack": 109, + "defense": 78, + "stamina": 67, + "height": 0.2, + "weight": 0.8, + "quick_moves": [ + "Mud Slap", + "Scratch" + ], + "charged_moves": [ + "Dig", + "Mud Bomb", + "Rock Tomb" + ], + "family": 50, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 51, + "form": 61 + } + ], + "little": true + }, + "51": { + "name": "Dugtrio", + "pokedex_id": 51, + "default_form_id": 61, + "forms": { + "61": { + "name": "Normal", + "proto": "DUGTRIO_NORMAL", + "attack": 167, + "defense": 136, + "stamina": 111 + }, + "62": { + "name": "Alola", + "proto": "DUGTRIO_ALOLA", + "attack": 201, + "defense": 142, + "stamina": 111, + "height": 0.7, + "weight": 66.6, + "quick_moves": [ + "Metal Claw", + "Mud Slap" + ], + "charged_moves": [ + "Earthquake", + "Mud Bomb", + "Iron Head" + ], + "types": [ + "Ground", + "Steel" + ] + }, + "844": { + "name": "Shadow", + "proto": "DUGTRIO_SHADOW" + }, + "845": { + "name": "Purified", + "proto": "DUGTRIO_PURIFIED" + } + }, + "types": [ + "Ground" + ], + "attack": 167, + "defense": 134, + "stamina": 111, + "height": 0.7, + "weight": 33.3, + "quick_moves": [ + "Sucker Punch", + "Mud Slap" + ], + "charged_moves": [ + "Earthquake", + "Mud Bomb", + "Stone Edge" + ], + "family": 50, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "52": { + "name": "Meowth", + "pokedex_id": 52, + "default_form_id": 63, + "forms": { + "63": { + "name": "Normal", + "proto": "MEOWTH_NORMAL", + "evolutions": [ + { + "pokemon": 53, + "form": 65 + } + ] + }, + "64": { + "name": "Alola", + "proto": "MEOWTH_ALOLA", + "attack": 99, + "defense": 78, + "stamina": 120, + "types": [ + "Dark" + ], + "evolutions": [ + { + "pokemon": 53, + "form": 66 + } + ] + }, + "709": { + "name": "Shadow", + "proto": "MEOWTH_SHADOW", + "evolutions": [ + { + "pokemon": 53, + "form": 711 + } + ] + }, + "710": { + "name": "Purified", + "proto": "MEOWTH_PURIFIED", + "evolutions": [ + { + "pokemon": 53, + "form": 712 + } + ] + }, + "2335": { + "name": "Galarian", + "proto": "MEOWTH_GALARIAN", + "attack": 115, + "defense": 92, + "stamina": 137, + "height": 0.4, + "weight": 7.5, + "quick_moves": [ + "Scratch", + "Metal Claw" + ], + "charged_moves": [ + "Night Slash", + "Gyro Ball", + "Dig" + ], + "types": [ + "Steel" + ], + "evolutions": [ + { + "pokemon": 863, + "form": 2504 + } + ] + } + }, + "types": [ + "Normal" + ], + "attack": 92, + "defense": 78, + "stamina": 120, + "height": 0.4, + "weight": 4.2, + "quick_moves": [ + "Scratch", + "Bite" + ], + "charged_moves": [ + "Night Slash", + "Dark Pulse", + "Foul Play" + ], + "family": 52, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 53, + "form": 65 + } + ], + "little": true + }, + "53": { + "name": "Persian", + "pokedex_id": 53, + "default_form_id": 65, + "forms": { + "65": { + "name": "Normal", + "proto": "PERSIAN_NORMAL" + }, + "66": { + "name": "Alola", + "proto": "PERSIAN_ALOLA", + "attack": 158, + "defense": 136, + "stamina": 163, + "height": 1.1, + "weight": 33, + "charged_moves": [ + "Foul Play", + "Dark Pulse", + "Play Rough", + "Payback" + ], + "types": [ + "Dark" + ] + }, + "711": { + "name": "Shadow", + "proto": "PERSIAN_SHADOW" + }, + "712": { + "name": "Purified", + "proto": "PERSIAN_PURIFIED" + } + }, + "types": [ + "Normal" + ], + "attack": 150, + "defense": 136, + "stamina": 163, + "height": 1, + "weight": 32, + "quick_moves": [ + "Scratch", + "Feint Attack" + ], + "charged_moves": [ + "Foul Play", + "Power Gem", + "Play Rough", + "Payback" + ], + "family": 52, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "54": { + "name": "Psyduck", + "pokedex_id": 54, + "default_form_id": 286, + "forms": { + "286": { + "name": "Normal", + "proto": "PSYDUCK_NORMAL", + "evolutions": [ + { + "pokemon": 55, + "form": 289 + } + ] + }, + "287": { + "name": "Shadow", + "proto": "PSYDUCK_SHADOW", + "evolutions": [ + { + "pokemon": 55, + "form": 290 + } + ] + }, + "288": { + "name": "Purified", + "proto": "PSYDUCK_PURIFIED", + "evolutions": [ + { + "pokemon": 55, + "form": 291 + } + ] + } + }, + "types": [ + "Water" + ], + "attack": 122, + "defense": 95, + "stamina": 137, + "height": 0.8, + "weight": 19.6, + "quick_moves": [ + "Water Gun", + "Zen Headbutt" + ], + "charged_moves": [ + "Psybeam", + "Aqua Tail", + "Cross Chop" + ], + "family": 54, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 55, + "form": 289 + } + ], + "little": true + }, + "55": { + "name": "Golduck", + "pokedex_id": 55, + "default_form_id": 289, + "forms": { + "289": { + "name": "Normal", + "proto": "GOLDUCK_NORMAL" + }, + "290": { + "name": "Shadow", + "proto": "GOLDUCK_SHADOW" + }, + "291": { + "name": "Purified", + "proto": "GOLDUCK_PURIFIED" + } + }, + "types": [ + "Water" + ], + "attack": 191, + "defense": 162, + "stamina": 190, + "height": 1.7, + "weight": 76.6, + "quick_moves": [ + "Water Gun", + "Confusion" + ], + "charged_moves": [ + "Psychic", + "Hydro Pump", + "Ice Beam", + "Bubble Beam", + "Synchronoise", + "Cross Chop" + ], + "family": 54, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "56": { + "name": "Mankey", + "pokedex_id": 56, + "default_form_id": 999, + "forms": { + "999": { + "name": "Normal", + "proto": "MANKEY_NORMAL" + }, + "1000": { + "name": "Shadow", + "proto": "MANKEY_SHADOW" + }, + "1001": { + "name": "Purified", + "proto": "MANKEY_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Fighting" + ], + "attack": 148, + "defense": 82, + "stamina": 120, + "height": 0.5, + "weight": 28, + "quick_moves": [ + "Karate Chop", + "Scratch" + ], + "charged_moves": [ + "Cross Chop", + "Low Sweep", + "Brick Break" + ], + "family": 56, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 57 + } + ], + "little": true + }, + "57": { + "name": "Primeape", + "pokedex_id": 57, + "default_form_id": 1002, + "forms": { + "1002": { + "name": "Normal", + "proto": "PRIMEAPE_NORMAL" + }, + "1003": { + "name": "Shadow", + "proto": "PRIMEAPE_SHADOW" + }, + "1004": { + "name": "Purified", + "proto": "PRIMEAPE_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Fighting" + ], + "attack": 207, + "defense": 138, + "stamina": 163, + "height": 1, + "weight": 32, + "quick_moves": [ + "Low Kick", + "Counter" + ], + "charged_moves": [ + "Close Combat", + "Low Sweep", + "Night Slash", + "Ice Punch" + ], + "family": 56, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "58": { + "name": "Growlithe", + "pokedex_id": 58, + "default_form_id": 280, + "forms": { + "280": { + "name": "Normal", + "proto": "GROWLITHE_NORMAL", + "evolutions": [ + { + "pokemon": 59, + "form": 283 + } + ] + }, + "281": { + "name": "Shadow", + "proto": "GROWLITHE_SHADOW", + "evolutions": [ + { + "pokemon": 59, + "form": 284 + } + ] + }, + "282": { + "name": "Purified", + "proto": "GROWLITHE_PURIFIED", + "evolutions": [ + { + "pokemon": 59, + "form": 285 + } + ] + } + }, + "types": [ + "Fire" + ], + "attack": 136, + "defense": 93, + "stamina": 146, + "height": 0.7, + "weight": 19, + "quick_moves": [ + "Ember", + "Bite" + ], + "charged_moves": [ + "Flame Wheel", + "Body Slam", + "Flamethrower" + ], + "family": 58, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 59, + "form": 283 + } + ], + "little": true + }, + "59": { + "name": "Arcanine", + "pokedex_id": 59, + "default_form_id": 283, + "forms": { + "283": { + "name": "Normal", + "proto": "ARCANINE_NORMAL" + }, + "284": { + "name": "Shadow", + "proto": "ARCANINE_SHADOW" + }, + "285": { + "name": "Purified", + "proto": "ARCANINE_PURIFIED" + } + }, + "types": [ + "Fire" + ], + "attack": 227, + "defense": 166, + "stamina": 207, + "height": 1.9, + "weight": 155, + "quick_moves": [ + "Fire Fang", + "Snarl", + "Thunder Fang" + ], + "charged_moves": [ + "Fire Blast", + "Wild Charge", + "Crunch", + "Flamethrower" + ], + "family": 58, + "flee_rate": 0.06, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "60": { + "name": "Poliwag", + "pokedex_id": 60, + "default_form_id": 235, + "forms": { + "235": { + "name": "Normal", + "proto": "POLIWAG_NORMAL", + "evolutions": [ + { + "pokemon": 61, + "form": 238 + } + ] + }, + "236": { + "name": "Shadow", + "proto": "POLIWAG_SHADOW", + "evolutions": [ + { + "pokemon": 61, + "form": 239 + } + ] + }, + "237": { + "name": "Purified", + "proto": "POLIWAG_PURIFIED", + "evolutions": [ + { + "pokemon": 61, + "form": 240 + } + ] + } + }, + "types": [ + "Water" + ], + "attack": 101, + "defense": 82, + "stamina": 120, + "height": 0.6, + "weight": 12.4, + "quick_moves": [ + "Bubble", + "Mud Shot" + ], + "charged_moves": [ + "Bubble Beam", + "Mud Bomb", + "Body Slam" + ], + "family": 60, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 61, + "form": 238 + } + ], + "little": true + }, + "61": { + "name": "Poliwhirl", + "pokedex_id": 61, + "default_form_id": 238, + "forms": { + "238": { + "name": "Normal", + "proto": "POLIWHIRL_NORMAL", + "evolutions": [ + { + "pokemon": 62, + "form": 241 + }, + { + "pokemon": 186, + "form": 244 + } + ] + }, + "239": { + "name": "Shadow", + "proto": "POLIWHIRL_SHADOW", + "evolutions": [ + { + "pokemon": 62, + "form": 242 + }, + { + "pokemon": 186, + "form": 245 + } + ] + }, + "240": { + "name": "Purified", + "proto": "POLIWHIRL_PURIFIED", + "evolutions": [ + { + "pokemon": 62, + "form": 243 + }, + { + "pokemon": 186, + "form": 246 + } + ] + } + }, + "types": [ + "Water" + ], + "attack": 130, + "defense": 123, + "stamina": 163, + "height": 1, + "weight": 20, + "quick_moves": [ + "Bubble", + "Mud Shot" + ], + "charged_moves": [ + "Water Pulse", + "Mud Bomb", + "Bubble Beam" + ], + "family": 60, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 62, + "form": 241 + }, + { + "pokemon": 186, + "form": 244 + } + ] + }, + "62": { + "name": "Poliwrath", + "pokedex_id": 62, + "default_form_id": 241, + "forms": { + "241": { + "name": "Normal", + "proto": "POLIWRATH_NORMAL" + }, + "242": { + "name": "Shadow", + "proto": "POLIWRATH_SHADOW" + }, + "243": { + "name": "Purified", + "proto": "POLIWRATH_PURIFIED" + } + }, + "types": [ + "Water", + "Fighting" + ], + "attack": 182, + "defense": 184, + "stamina": 207, + "height": 1.3, + "weight": 54, + "quick_moves": [ + "Bubble", + "Rock Smash", + "Mud Shot" + ], + "charged_moves": [ + "Hydro Pump", + "Dynamic Punch", + "Ice Punch", + "Power Up Punch" + ], + "family": 60, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "63": { + "name": "Abra", + "pokedex_id": 63, + "default_form_id": 304, + "forms": { + "304": { + "name": "Normal", + "proto": "ABRA_NORMAL", + "evolutions": [ + { + "pokemon": 64, + "form": 307 + } + ] + }, + "305": { + "name": "Shadow", + "proto": "ABRA_SHADOW", + "evolutions": [ + { + "pokemon": 64, + "form": 308 + } + ] + }, + "306": { + "name": "Purified", + "proto": "ABRA_PURIFIED", + "evolutions": [ + { + "pokemon": 64, + "form": 309 + } + ] + } + }, + "types": [ + "Psychic" + ], + "attack": 195, + "defense": 82, + "stamina": 93, + "height": 0.9, + "weight": 19.5, + "quick_moves": [ + "Zen Headbutt", + "Charge Beam" + ], + "charged_moves": [ + "Psyshock", + "Signal Beam", + "Shadow Ball" + ], + "family": 63, + "flee_rate": 0.99, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 64, + "form": 307 + } + ], + "little": true + }, + "64": { + "name": "Kadabra", + "pokedex_id": 64, + "default_form_id": 307, + "forms": { + "307": { + "name": "Normal", + "proto": "KADABRA_NORMAL", + "evolutions": [ + { + "pokemon": 65, + "form": 310 + } + ] + }, + "308": { + "name": "Shadow", + "proto": "KADABRA_SHADOW", + "evolutions": [ + { + "pokemon": 65, + "form": 311 + } + ] + }, + "309": { + "name": "Purified", + "proto": "KADABRA_PURIFIED", + "evolutions": [ + { + "pokemon": 65, + "form": 312 + } + ] + } + }, + "types": [ + "Psychic" + ], + "attack": 232, + "defense": 117, + "stamina": 120, + "height": 1.3, + "weight": 56.5, + "quick_moves": [ + "Psycho Cut", + "Confusion" + ], + "charged_moves": [ + "Psybeam", + "Dazzling Gleam", + "Shadow Ball" + ], + "family": 63, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 65, + "form": 310 + } + ] + }, + "65": { + "name": "Alakazam", + "pokedex_id": 65, + "default_form_id": 310, + "forms": { + "310": { + "name": "Normal", + "proto": "ALAKAZAM_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "311": { + "name": "Shadow", + "proto": "ALAKAZAM_SHADOW" + }, + "312": { + "name": "Purified", + "proto": "ALAKAZAM_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Psychic" + ], + "attack": 271, + "defense": 167, + "stamina": 146, + "height": 1.5, + "weight": 48, + "quick_moves": [ + "Psycho Cut", + "Confusion" + ], + "charged_moves": [ + "Futuresight", + "Focus Blast", + "Shadow Ball", + "Fire Punch" + ], + "family": 63, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "1": { + "attack": 367, + "defense": 207, + "stamina": 146, + "unreleased": true + } + } + }, + "66": { + "name": "Machop", + "pokedex_id": 66, + "default_form_id": 809, + "forms": { + "809": { + "name": "Normal", + "proto": "MACHOP_NORMAL", + "evolutions": [ + { + "pokemon": 67, + "form": 812 + } + ] + }, + "810": { + "name": "Shadow", + "proto": "MACHOP_SHADOW", + "evolutions": [ + { + "pokemon": 67, + "form": 813 + } + ] + }, + "811": { + "name": "Purified", + "proto": "MACHOP_PURIFIED", + "evolutions": [ + { + "pokemon": 67, + "form": 814 + } + ] + } + }, + "types": [ + "Fighting" + ], + "attack": 137, + "defense": 82, + "stamina": 172, + "height": 0.8, + "weight": 19.5, + "quick_moves": [ + "Rock Smash", + "Karate Chop" + ], + "charged_moves": [ + "Low Sweep", + "Brick Break", + "Cross Chop" + ], + "family": 66, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 67, + "form": 812 + } + ], + "little": true + }, + "67": { + "name": "Machoke", + "pokedex_id": 67, + "default_form_id": 812, + "forms": { + "812": { + "name": "Normal", + "proto": "MACHOKE_NORMAL", + "evolutions": [ + { + "pokemon": 68, + "form": 815 + } + ] + }, + "813": { + "name": "Shadow", + "proto": "MACHOKE_SHADOW", + "evolutions": [ + { + "pokemon": 68, + "form": 816 + } + ] + }, + "814": { + "name": "Purified", + "proto": "MACHOKE_PURIFIED", + "evolutions": [ + { + "pokemon": 68, + "form": 817 + } + ] + } + }, + "types": [ + "Fighting" + ], + "attack": 177, + "defense": 125, + "stamina": 190, + "height": 1.5, + "weight": 70.5, + "quick_moves": [ + "Low Kick", + "Karate Chop" + ], + "charged_moves": [ + "Submission", + "Brick Break", + "Dynamic Punch" + ], + "family": 66, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 68, + "form": 815 + } + ] + }, + "68": { + "name": "Machamp", + "pokedex_id": 68, + "default_form_id": 815, + "forms": { + "815": { + "name": "Normal", + "proto": "MACHAMP_NORMAL" + }, + "816": { + "name": "Shadow", + "proto": "MACHAMP_SHADOW" + }, + "817": { + "name": "Purified", + "proto": "MACHAMP_PURIFIED" + } + }, + "types": [ + "Fighting" + ], + "attack": 234, + "defense": 159, + "stamina": 207, + "height": 1.6, + "weight": 130, + "quick_moves": [ + "Bullet Punch", + "Counter" + ], + "charged_moves": [ + "Heavy Slam", + "Dynamic Punch", + "Close Combat", + "Rock Slide", + "Cross Chop" + ], + "family": 66, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "69": { + "name": "Bellsprout", + "pokedex_id": 69, + "default_form_id": 664, + "forms": { + "664": { + "name": "Normal", + "proto": "BELLSPROUT_NORMAL", + "evolutions": [ + { + "pokemon": 70, + "form": 667 + } + ] + }, + "665": { + "name": "Shadow", + "proto": "BELLSPROUT_SHADOW", + "evolutions": [ + { + "pokemon": 70, + "form": 668 + } + ] + }, + "666": { + "name": "Purified", + "proto": "BELLSPROUT_PURIFIED", + "evolutions": [ + { + "pokemon": 70, + "form": 669 + } + ] + } + }, + "types": [ + "Grass", + "Poison" + ], + "attack": 139, + "defense": 61, + "stamina": 137, + "height": 0.7, + "weight": 4, + "quick_moves": [ + "Vine Whip", + "Acid" + ], + "charged_moves": [ + "Power Whip", + "Sludge Bomb", + "Wrap" + ], + "family": 69, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 70, + "form": 667 + } + ], + "little": true + }, + "70": { + "name": "Weepinbell", + "pokedex_id": 70, + "default_form_id": 667, + "forms": { + "667": { + "name": "Normal", + "proto": "WEEPINBELL_NORMAL", + "evolutions": [ + { + "pokemon": 71, + "form": 670 + } + ] + }, + "668": { + "name": "Shadow", + "proto": "WEEPINBELL_SHADOW", + "evolutions": [ + { + "pokemon": 71, + "form": 671 + } + ] + }, + "669": { + "name": "Purified", + "proto": "WEEPINBELL_PURIFIED", + "evolutions": [ + { + "pokemon": 71, + "form": 672 + } + ] + } + }, + "types": [ + "Grass", + "Poison" + ], + "attack": 172, + "defense": 92, + "stamina": 163, + "height": 1, + "weight": 6.4, + "quick_moves": [ + "Bullet Seed", + "Acid" + ], + "charged_moves": [ + "Power Whip", + "Sludge Bomb", + "Seed Bomb" + ], + "family": 69, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 71, + "form": 670 + } + ] + }, + "71": { + "name": "Victreebel", + "pokedex_id": 71, + "default_form_id": 670, + "forms": { + "670": { + "name": "Normal", + "proto": "VICTREEBEL_NORMAL" + }, + "671": { + "name": "Shadow", + "proto": "VICTREEBEL_SHADOW" + }, + "672": { + "name": "Purified", + "proto": "VICTREEBEL_PURIFIED" + } + }, + "types": [ + "Grass", + "Poison" + ], + "attack": 207, + "defense": 135, + "stamina": 190, + "height": 1.7, + "weight": 15.5, + "quick_moves": [ + "Razor Leaf", + "Acid" + ], + "charged_moves": [ + "Leaf Blade", + "Sludge Bomb", + "Solar Beam", + "Leaf Tornado", + "Acid Spray" + ], + "family": 69, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "72": { + "name": "Tentacool", + "pokedex_id": 72, + "default_form_id": 1005, + "forms": { + "1005": { + "name": "Normal", + "proto": "TENTACOOL_NORMAL" + }, + "1006": { + "name": "Shadow", + "proto": "TENTACOOL_SHADOW" + }, + "1007": { + "name": "Purified", + "proto": "TENTACOOL_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Water", + "Poison" + ], + "attack": 97, + "defense": 149, + "stamina": 120, + "height": 0.9, + "weight": 45.5, + "quick_moves": [ + "Bubble", + "Poison Sting" + ], + "charged_moves": [ + "Bubble Beam", + "Water Pulse", + "Wrap" + ], + "family": 72, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 73 + } + ], + "little": true + }, + "73": { + "name": "Tentacruel", + "pokedex_id": 73, + "default_form_id": 1008, + "forms": { + "1008": { + "name": "Normal", + "proto": "TENTACRUEL_NORMAL" + }, + "1009": { + "name": "Shadow", + "proto": "TENTACRUEL_SHADOW" + }, + "1010": { + "name": "Purified", + "proto": "TENTACRUEL_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Water", + "Poison" + ], + "attack": 166, + "defense": 209, + "stamina": 190, + "height": 1.6, + "weight": 55, + "quick_moves": [ + "Acid", + "Poison Jab" + ], + "charged_moves": [ + "Hydro Pump", + "Sludge Wave", + "Blizzard", + "Acid Spray" + ], + "family": 72, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "74": { + "name": "Geodude", + "pokedex_id": 74, + "default_form_id": 67, + "forms": { + "67": { + "name": "Normal", + "proto": "GEODUDE_NORMAL", + "evolutions": [ + { + "pokemon": 75, + "form": 69 + } + ] + }, + "68": { + "name": "Alola", + "proto": "GEODUDE_ALOLA", + "height": 0.4, + "weight": 20.3, + "quick_moves": [ + "Rock Throw", + "Volt Switch" + ], + "charged_moves": [ + "Rock Slide", + "Rock Tomb", + "Thunderbolt" + ], + "types": [ + "Rock", + "Electric" + ], + "evolutions": [ + { + "pokemon": 75, + "form": 70 + } + ] + }, + "882": { + "name": "Shadow", + "proto": "GEODUDE_SHADOW", + "evolutions": [ + { + "pokemon": 75, + "form": 884 + } + ] + }, + "883": { + "name": "Purified", + "proto": "GEODUDE_PURIFIED", + "evolutions": [ + { + "pokemon": 75, + "form": 885 + } + ] + } + }, + "types": [ + "Rock", + "Ground" + ], + "attack": 132, + "defense": 132, + "stamina": 120, + "height": 0.4, + "weight": 20, + "quick_moves": [ + "Rock Throw", + "Tackle" + ], + "charged_moves": [ + "Rock Slide", + "Rock Tomb", + "Dig" + ], + "family": 74, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 75, + "form": 69 + } + ], + "little": true + }, + "75": { + "name": "Graveler", + "pokedex_id": 75, + "default_form_id": 69, + "forms": { + "69": { + "name": "Normal", + "proto": "GRAVELER_NORMAL", + "evolutions": [ + { + "pokemon": 76, + "form": 71 + } + ] + }, + "70": { + "name": "Alola", + "proto": "GRAVELER_ALOLA", + "height": 1, + "weight": 110, + "quick_moves": [ + "Rock Throw", + "Volt Switch" + ], + "charged_moves": [ + "Thunderbolt", + "Stone Edge", + "Rock Blast" + ], + "types": [ + "Rock", + "Electric" + ], + "evolutions": [ + { + "pokemon": 76, + "form": 72 + } + ] + }, + "884": { + "name": "Shadow", + "proto": "GRAVELER_SHADOW", + "evolutions": [ + { + "pokemon": 76, + "form": 886 + } + ] + }, + "885": { + "name": "Purified", + "proto": "GRAVELER_PURIFIED", + "evolutions": [ + { + "pokemon": 76, + "form": 887 + } + ] + } + }, + "types": [ + "Rock", + "Ground" + ], + "attack": 164, + "defense": 164, + "stamina": 146, + "height": 1, + "weight": 105, + "quick_moves": [ + "Rock Throw", + "Mud Slap" + ], + "charged_moves": [ + "Dig", + "Stone Edge", + "Rock Blast" + ], + "family": 74, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 76, + "form": 71 + } + ] + }, + "76": { + "name": "Golem", + "pokedex_id": 76, + "default_form_id": 71, + "forms": { + "71": { + "name": "Normal", + "proto": "GOLEM_NORMAL" + }, + "72": { + "name": "Alola", + "proto": "GOLEM_ALOLA", + "height": 1.7, + "weight": 316, + "quick_moves": [ + "Rock Throw", + "Volt Switch" + ], + "charged_moves": [ + "Stone Edge", + "Rock Blast", + "Wild Charge" + ], + "types": [ + "Rock", + "Electric" + ] + }, + "886": { + "name": "Shadow", + "proto": "GOLEM_SHADOW" + }, + "887": { + "name": "Purified", + "proto": "GOLEM_PURIFIED" + } + }, + "types": [ + "Rock", + "Ground" + ], + "attack": 211, + "defense": 198, + "stamina": 190, + "height": 1.4, + "weight": 300, + "quick_moves": [ + "Rock Throw", + "Mud Slap" + ], + "charged_moves": [ + "Stone Edge", + "Rock Blast", + "Earthquake", + "Ancient Power" + ], + "family": 74, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "77": { + "name": "Ponyta", + "pokedex_id": 77, + "default_form_id": 1011, + "forms": { + "1011": { + "name": "Normal", + "proto": "PONYTA_NORMAL", + "evolutions": [ + { + "pokemon": 78, + "form": 1014 + } + ] + }, + "1012": { + "name": "Shadow", + "proto": "PONYTA_SHADOW", + "evolutions": [ + { + "pokemon": 78, + "form": 1015 + } + ] + }, + "1013": { + "name": "Purified", + "proto": "PONYTA_PURIFIED", + "evolutions": [ + { + "pokemon": 78, + "form": 1016 + } + ] + }, + "2336": { + "name": "Galarian", + "proto": "PONYTA_GALARIAN", + "height": 0.8, + "weight": 24, + "quick_moves": [ + "Low Kick", + "Psycho Cut" + ], + "charged_moves": [ + "Play Rough", + "Psybeam", + "Swift" + ], + "types": [ + "Psychic" + ], + "evolutions": [ + { + "pokemon": 78, + "form": 2337 + } + ] + } + }, + "types": [ + "Fire" + ], + "attack": 170, + "defense": 127, + "stamina": 137, + "height": 1, + "weight": 30, + "quick_moves": [ + "Tackle", + "Ember" + ], + "charged_moves": [ + "Flame Charge", + "Flame Wheel", + "Stomp" + ], + "family": 77, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 78, + "form": 1014 + } + ], + "little": true + }, + "78": { + "name": "Rapidash", + "pokedex_id": 78, + "default_form_id": 1014, + "forms": { + "1014": { + "name": "Normal", + "proto": "RAPIDASH_NORMAL" + }, + "1015": { + "name": "Shadow", + "proto": "RAPIDASH_SHADOW" + }, + "1016": { + "name": "Purified", + "proto": "RAPIDASH_PURIFIED" + }, + "2337": { + "name": "Galarian", + "proto": "RAPIDASH_GALARIAN", + "height": 1.7, + "weight": 80, + "quick_moves": [ + "Low Kick", + "Psycho Cut" + ], + "charged_moves": [ + "Play Rough", + "Psychic", + "Body Slam", + "Megahorn" + ], + "types": [ + "Psychic", + "Fairy" + ] + } + }, + "types": [ + "Fire" + ], + "attack": 207, + "defense": 162, + "stamina": 163, + "height": 1.7, + "weight": 95, + "quick_moves": [ + "Low Kick", + "Fire Spin", + "Incinerate" + ], + "charged_moves": [ + "Fire Blast", + "Drill Run", + "Heat Wave", + "Flame Charge" + ], + "family": 77, + "flee_rate": 0.06, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "79": { + "name": "Slowpoke", + "pokedex_id": 79, + "default_form_id": 1017, + "forms": { + "1017": { + "name": "Normal", + "proto": "SLOWPOKE_NORMAL", + "evolutions": [ + { + "pokemon": 80, + "form": 1020 + }, + { + "pokemon": 199, + "form": 1238 + } + ] + }, + "1018": { + "name": "Shadow", + "proto": "SLOWPOKE_SHADOW", + "evolutions": [ + { + "pokemon": 80, + "form": 1021 + }, + { + "pokemon": 199, + "form": 1239 + } + ] + }, + "1019": { + "name": "Purified", + "proto": "SLOWPOKE_PURIFIED", + "evolutions": [ + { + "pokemon": 80, + "form": 1022 + }, + { + "pokemon": 199, + "form": 1240 + } + ] + }, + "2582": { + "name": "Galarian", + "proto": "SLOWPOKE_GALARIAN", + "quick_moves": [ + "Confusion", + "Iron Tail" + ], + "charged_moves": [ + "Surf", + "Psyshock", + "Psychic" + ], + "types": [ + "Psychic" + ], + "evolutions": [ + { + "pokemon": 80, + "form": 2583 + } + ] + }, + "2673": { + "name": "2020", + "proto": "SLOWPOKE_2020", + "is_costume": true, + "evolutions": [ + { + "pokemon": 80, + "form": 2674 + } + ] + } + }, + "types": [ + "Water", + "Psychic" + ], + "attack": 109, + "defense": 98, + "stamina": 207, + "height": 1.2, + "weight": 36, + "quick_moves": [ + "Water Gun", + "Confusion" + ], + "charged_moves": [ + "Water Pulse", + "Psyshock", + "Psychic" + ], + "family": 79, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 80, + "form": 1020 + }, + { + "pokemon": 199, + "form": 1238 + } + ], + "little": true + }, + "80": { + "name": "Slowbro", + "pokedex_id": 80, + "default_form_id": 1020, + "forms": { + "1020": { + "name": "Normal", + "proto": "SLOWBRO_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1021": { + "name": "Shadow", + "proto": "SLOWBRO_SHADOW" + }, + "1022": { + "name": "Purified", + "proto": "SLOWBRO_PURIFIED", + "temp_evolutions": { + "1": {} + } + }, + "2583": { + "name": "Galarian", + "proto": "SLOWBRO_GALARIAN", + "attack": 182, + "defense": 156, + "stamina": 216, + "height": 1.6, + "weight": 70.5, + "quick_moves": [ + "Confusion", + "Poison Jab" + ], + "charged_moves": [ + "Focus Blast", + "Psychic", + "Sludge Bomb" + ], + "types": [ + "Poison", + "Psychic" + ] + }, + "2674": { + "name": "2021", + "proto": "SLOWBRO_2021", + "is_costume": true, + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Water", + "Psychic" + ], + "attack": 177, + "defense": 180, + "stamina": 216, + "height": 1.6, + "weight": 78.5, + "quick_moves": [ + "Water Gun", + "Confusion" + ], + "charged_moves": [ + "Water Pulse", + "Psychic", + "Ice Beam" + ], + "family": 79, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "1": { + "attack": 224, + "defense": 259, + "stamina": 216, + "height": 2, + "weight": 120 + } + } + }, + "81": { + "name": "Magnemite", + "pokedex_id": 81, + "default_form_id": 655, + "forms": { + "655": { + "name": "Normal", + "proto": "MAGNEMITE_NORMAL", + "evolutions": [ + { + "pokemon": 82, + "form": 658 + } + ] + }, + "656": { + "name": "Shadow", + "proto": "MAGNEMITE_SHADOW", + "evolutions": [ + { + "pokemon": 82, + "form": 659 + } + ] + }, + "657": { + "name": "Purified", + "proto": "MAGNEMITE_PURIFIED", + "evolutions": [ + { + "pokemon": 82, + "form": 660 + } + ] + } + }, + "types": [ + "Electric", + "Steel" + ], + "attack": 165, + "defense": 121, + "stamina": 93, + "height": 0.3, + "weight": 6, + "quick_moves": [ + "Spark", + "Thunder Shock" + ], + "charged_moves": [ + "Discharge", + "Magnet Bomb", + "Thunderbolt" + ], + "family": 81, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 82, + "form": 658 + } + ], + "little": true + }, + "82": { + "name": "Magneton", + "pokedex_id": 82, + "default_form_id": 658, + "forms": { + "658": { + "name": "Normal", + "proto": "MAGNETON_NORMAL", + "evolutions": [ + { + "pokemon": 462, + "form": 661 + } + ] + }, + "659": { + "name": "Shadow", + "proto": "MAGNETON_SHADOW", + "evolutions": [ + { + "pokemon": 462, + "form": 662 + } + ] + }, + "660": { + "name": "Purified", + "proto": "MAGNETON_PURIFIED", + "evolutions": [ + { + "pokemon": 462, + "form": 663 + } + ] + } + }, + "types": [ + "Electric", + "Steel" + ], + "attack": 223, + "defense": 169, + "stamina": 137, + "height": 1, + "weight": 60, + "quick_moves": [ + "Spark", + "Charge Beam", + "Thunder Shock" + ], + "charged_moves": [ + "Zap Cannon", + "Magnet Bomb", + "Flash Cannon", + "Discharge" + ], + "family": 81, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 462 + } + ] + }, + "83": { + "name": "Farfetchd", + "pokedex_id": 83, + "default_form_id": 1023, + "forms": { + "1023": { + "name": "Normal", + "proto": "FARFETCHD_NORMAL" + }, + "1024": { + "name": "Shadow", + "proto": "FARFETCHD_SHADOW" + }, + "1025": { + "name": "Purified", + "proto": "FARFETCHD_PURIFIED" + }, + "2338": { + "name": "Galarian", + "proto": "FARFETCHD_GALARIAN", + "attack": 174, + "defense": 114, + "stamina": 141, + "height": 0.8, + "weight": 42, + "quick_moves": [ + "Rock Smash", + "Fury Cutter" + ], + "charged_moves": [ + "Brick Break", + "Brave Bird", + "Leaf Blade" + ], + "types": [ + "Fighting" + ], + "evolutions": [ + { + "pokemon": 865, + "form": 2510 + } + ], + "little": true + } + }, + "types": [ + "Normal", + "Flying" + ], + "attack": 124, + "defense": 115, + "stamina": 141, + "height": 0.8, + "weight": 15, + "quick_moves": [ + "Air Slash", + "Fury Cutter" + ], + "charged_moves": [ + "Aerial Ace", + "Air Cutter", + "Leaf Blade" + ], + "family": 83, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "84": { + "name": "Doduo", + "pokedex_id": 84, + "default_form_id": 1026, + "forms": { + "1026": { + "name": "Normal", + "proto": "DODUO_NORMAL" + }, + "1027": { + "name": "Shadow", + "proto": "DODUO_SHADOW" + }, + "1028": { + "name": "Purified", + "proto": "DODUO_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal", + "Flying" + ], + "attack": 158, + "defense": 83, + "stamina": 111, + "height": 1.4, + "weight": 39.2, + "quick_moves": [ + "Peck", + "Quick Attack" + ], + "charged_moves": [ + "Drill Peck", + "Aerial Ace", + "Brave Bird" + ], + "family": 84, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 85 + } + ], + "little": true + }, + "85": { + "name": "Dodrio", + "pokedex_id": 85, + "default_form_id": 1029, + "forms": { + "1029": { + "name": "Normal", + "proto": "DODRIO_NORMAL" + }, + "1030": { + "name": "Shadow", + "proto": "DODRIO_SHADOW" + }, + "1031": { + "name": "Purified", + "proto": "DODRIO_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal", + "Flying" + ], + "attack": 218, + "defense": 140, + "stamina": 155, + "height": 1.8, + "weight": 85.2, + "quick_moves": [ + "Feint Attack", + "Steel Wing" + ], + "charged_moves": [ + "Drill Peck", + "Aerial Ace", + "Brave Bird" + ], + "family": 84, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "86": { + "name": "Seel", + "pokedex_id": 86, + "default_form_id": 1032, + "forms": { + "1032": { + "name": "Normal", + "proto": "SEEL_NORMAL" + }, + "1033": { + "name": "Shadow", + "proto": "SEEL_SHADOW" + }, + "1034": { + "name": "Purified", + "proto": "SEEL_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Water" + ], + "attack": 85, + "defense": 121, + "stamina": 163, + "height": 1.1, + "weight": 90, + "quick_moves": [ + "Ice Shard", + "Lick" + ], + "charged_moves": [ + "Aurora Beam", + "Icy Wind", + "Aqua Tail" + ], + "family": 86, + "flee_rate": 0.09, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 87 + } + ], + "little": true + }, + "87": { + "name": "Dewgong", + "pokedex_id": 87, + "default_form_id": 1035, + "forms": { + "1035": { + "name": "Normal", + "proto": "DEWGONG_NORMAL" + }, + "1036": { + "name": "Shadow", + "proto": "DEWGONG_SHADOW" + }, + "1037": { + "name": "Purified", + "proto": "DEWGONG_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Water", + "Ice" + ], + "attack": 139, + "defense": 177, + "stamina": 207, + "height": 1.7, + "weight": 120, + "quick_moves": [ + "Frost Breath", + "Iron Tail" + ], + "charged_moves": [ + "Aurora Beam", + "Water Pulse", + "Blizzard" + ], + "family": 86, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "88": { + "name": "Grimer", + "pokedex_id": 88, + "default_form_id": 73, + "forms": { + "73": { + "name": "Normal", + "proto": "GRIMER_NORMAL", + "evolutions": [ + { + "pokemon": 89, + "form": 75 + } + ] + }, + "74": { + "name": "Alola", + "proto": "GRIMER_ALOLA", + "height": 0.7, + "weight": 42, + "quick_moves": [ + "Poison Jab", + "Bite" + ], + "charged_moves": [ + "Crunch", + "Gunk Shot", + "Sludge Bomb" + ], + "types": [ + "Poison", + "Dark" + ], + "evolutions": [ + { + "pokemon": 89, + "form": 76 + } + ] + }, + "220": { + "name": "Shadow", + "proto": "GRIMER_SHADOW", + "evolutions": [ + { + "pokemon": 89, + "form": 222 + } + ] + }, + "221": { + "name": "Purified", + "proto": "GRIMER_PURIFIED", + "evolutions": [ + { + "pokemon": 89, + "form": 223 + } + ] + } + }, + "types": [ + "Poison" + ], + "attack": 135, + "defense": 90, + "stamina": 190, + "height": 0.9, + "weight": 30, + "quick_moves": [ + "Poison Jab", + "Mud Slap" + ], + "charged_moves": [ + "Sludge", + "Mud Bomb", + "Sludge Bomb" + ], + "family": 88, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 89, + "form": 75 + } + ], + "little": true + }, + "89": { + "name": "Muk", + "pokedex_id": 89, + "default_form_id": 75, + "forms": { + "75": { + "name": "Normal", + "proto": "MUK_NORMAL" + }, + "76": { + "name": "Alola", + "proto": "MUK_ALOLA", + "height": 1, + "weight": 52, + "quick_moves": [ + "Bite", + "Poison Jab", + "Snarl" + ], + "charged_moves": [ + "Dark Pulse", + "Gunk Shot", + "Sludge Wave", + "Acid Spray" + ], + "types": [ + "Poison", + "Dark" + ] + }, + "222": { + "name": "Shadow", + "proto": "MUK_SHADOW" + }, + "223": { + "name": "Purified", + "proto": "MUK_PURIFIED" + } + }, + "types": [ + "Poison" + ], + "attack": 190, + "defense": 172, + "stamina": 233, + "height": 1.2, + "weight": 30, + "quick_moves": [ + "Infestation", + "Poison Jab" + ], + "charged_moves": [ + "Dark Pulse", + "Gunk Shot", + "Sludge Wave", + "Thunder Punch", + "Acid Spray" + ], + "family": 88, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "90": { + "name": "Shellder", + "pokedex_id": 90, + "default_form_id": 876, + "forms": { + "876": { + "name": "Normal", + "proto": "SHELLDER_NORMAL", + "evolutions": [ + { + "pokemon": 91, + "form": 879 + } + ] + }, + "877": { + "name": "Shadow", + "proto": "SHELLDER_SHADOW", + "evolutions": [ + { + "pokemon": 91, + "form": 880 + } + ] + }, + "878": { + "name": "Purified", + "proto": "SHELLDER_PURIFIED", + "evolutions": [ + { + "pokemon": 91, + "form": 881 + } + ] + } + }, + "types": [ + "Water" + ], + "attack": 116, + "defense": 134, + "stamina": 102, + "height": 0.3, + "weight": 4, + "quick_moves": [ + "Ice Shard", + "Tackle" + ], + "charged_moves": [ + "Bubble Beam", + "Water Pulse", + "Icy Wind" + ], + "family": 90, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 91, + "form": 879 + } + ], + "little": true + }, + "91": { + "name": "Cloyster", + "pokedex_id": 91, + "default_form_id": 879, + "forms": { + "879": { + "name": "Normal", + "proto": "CLOYSTER_NORMAL" + }, + "880": { + "name": "Shadow", + "proto": "CLOYSTER_SHADOW" + }, + "881": { + "name": "Purified", + "proto": "CLOYSTER_PURIFIED" + } + }, + "types": [ + "Water", + "Ice" + ], + "attack": 186, + "defense": 256, + "stamina": 137, + "height": 1.5, + "weight": 132.5, + "quick_moves": [ + "Frost Breath", + "Ice Shard" + ], + "charged_moves": [ + "Aurora Beam", + "Hydro Pump", + "Avalanche", + "Icy Wind" + ], + "family": 90, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "92": { + "name": "Gastly", + "pokedex_id": 92, + "default_form_id": 1038, + "forms": { + "1038": { + "name": "Normal", + "proto": "GASTLY_NORMAL" + }, + "1039": { + "name": "Shadow", + "proto": "GASTLY_SHADOW" + }, + "1040": { + "name": "Purified", + "proto": "GASTLY_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Ghost", + "Poison" + ], + "attack": 186, + "defense": 67, + "stamina": 102, + "height": 1.3, + "weight": 0.1, + "quick_moves": [ + "Lick", + "Astonish" + ], + "charged_moves": [ + "Night Shade", + "Dark Pulse", + "Sludge Bomb" + ], + "family": 92, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 93 + } + ], + "little": true + }, + "93": { + "name": "Haunter", + "pokedex_id": 93, + "default_form_id": 1041, + "forms": { + "1041": { + "name": "Normal", + "proto": "HAUNTER_NORMAL" + }, + "1042": { + "name": "Shadow", + "proto": "HAUNTER_SHADOW" + }, + "1043": { + "name": "Purified", + "proto": "HAUNTER_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Ghost", + "Poison" + ], + "attack": 223, + "defense": 107, + "stamina": 128, + "height": 1.6, + "weight": 0.1, + "quick_moves": [ + "Shadow Claw", + "Astonish" + ], + "charged_moves": [ + "Shadow Punch", + "Dark Pulse", + "Sludge Bomb", + "Shadow Ball" + ], + "family": 92, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 94 + } + ] + }, + "94": { + "name": "Gengar", + "pokedex_id": 94, + "default_form_id": 1044, + "forms": { + "1044": { + "name": "Normal", + "proto": "GENGAR_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1045": { + "name": "Shadow", + "proto": "GENGAR_SHADOW" + }, + "1046": { + "name": "Purified", + "proto": "GENGAR_PURIFIED" + }, + "2586": { + "name": "Costume 2020", + "proto": "GENGAR_COSTUME_2020", + "is_costume": true, + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Ghost", + "Poison" + ], + "attack": 261, + "defense": 149, + "stamina": 155, + "height": 1.5, + "weight": 40.5, + "quick_moves": [ + "Sucker Punch", + "Hex", + "Shadow Claw" + ], + "charged_moves": [ + "Shadow Ball", + "Focus Blast", + "Sludge Bomb" + ], + "family": 92, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "1": { + "attack": 349, + "defense": 199, + "stamina": 155, + "height": 1.4 + } + } + }, + "95": { + "name": "Onix", + "pokedex_id": 95, + "default_form_id": 902, + "forms": { + "902": { + "name": "Normal", + "proto": "ONIX_NORMAL", + "evolutions": [ + { + "pokemon": 208, + "form": 905 + } + ] + }, + "903": { + "name": "Shadow", + "proto": "ONIX_SHADOW", + "evolutions": [ + { + "pokemon": 208, + "form": 906 + } + ] + }, + "904": { + "name": "Purified", + "proto": "ONIX_PURIFIED", + "evolutions": [ + { + "pokemon": 208, + "form": 907 + } + ] + }, + "2334": { + "name": "Costume 2020", + "proto": "ONIX_COSTUME_2020" + } + }, + "types": [ + "Rock", + "Ground" + ], + "attack": 85, + "defense": 232, + "stamina": 111, + "height": 8.8, + "weight": 210, + "quick_moves": [ + "Rock Throw", + "Tackle" + ], + "charged_moves": [ + "Sand Tomb", + "Stone Edge", + "Heavy Slam" + ], + "family": 95, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 208, + "form": 905 + } + ], + "little": true + }, + "96": { + "name": "Drowzee", + "pokedex_id": 96, + "default_form_id": 214, + "forms": { + "214": { + "name": "Normal", + "proto": "DROWZEE_NORMAL", + "evolutions": [ + { + "pokemon": 97, + "form": 217 + } + ] + }, + "215": { + "name": "Shadow", + "proto": "DROWZEE_SHADOW", + "evolutions": [ + { + "pokemon": 97, + "form": 218 + } + ] + }, + "216": { + "name": "Purified", + "proto": "DROWZEE_PURIFIED", + "evolutions": [ + { + "pokemon": 97, + "form": 219 + } + ] + } + }, + "types": [ + "Psychic" + ], + "attack": 89, + "defense": 136, + "stamina": 155, + "height": 1, + "weight": 32.4, + "quick_moves": [ + "Pound", + "Confusion" + ], + "charged_moves": [ + "Psybeam", + "Psyshock", + "Psychic" + ], + "family": 96, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 97, + "form": 217 + } + ], + "little": true + }, + "97": { + "name": "Hypno", + "pokedex_id": 97, + "default_form_id": 217, + "forms": { + "217": { + "name": "Normal", + "proto": "HYPNO_NORMAL" + }, + "218": { + "name": "Shadow", + "proto": "HYPNO_SHADOW" + }, + "219": { + "name": "Purified", + "proto": "HYPNO_PURIFIED" + } + }, + "types": [ + "Psychic" + ], + "attack": 144, + "defense": 193, + "stamina": 198, + "height": 1.6, + "weight": 75.6, + "quick_moves": [ + "Zen Headbutt", + "Confusion" + ], + "charged_moves": [ + "Futuresight", + "Psychic", + "Focus Blast", + "Fire Punch", + "Ice Punch", + "Thunder Punch", + "Shadow Ball" + ], + "family": 96, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "98": { + "name": "Krabby", + "pokedex_id": 98, + "default_form_id": 870, + "forms": { + "870": { + "name": "Normal", + "proto": "KRABBY_NORMAL", + "evolutions": [ + { + "pokemon": 99, + "form": 873 + } + ] + }, + "871": { + "name": "Shadow", + "proto": "KRABBY_SHADOW", + "evolutions": [ + { + "pokemon": 99, + "form": 874 + } + ] + }, + "872": { + "name": "Purified", + "proto": "KRABBY_PURIFIED", + "evolutions": [ + { + "pokemon": 99, + "form": 875 + } + ] + } + }, + "types": [ + "Water" + ], + "attack": 181, + "defense": 124, + "stamina": 102, + "height": 0.4, + "weight": 6.5, + "quick_moves": [ + "Bubble", + "Mud Shot" + ], + "charged_moves": [ + "Vice Grip", + "Bubble Beam", + "Water Pulse" + ], + "family": 98, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 99, + "form": 873 + } + ], + "little": true + }, + "99": { + "name": "Kingler", + "pokedex_id": 99, + "default_form_id": 873, + "forms": { + "873": { + "name": "Normal", + "proto": "KINGLER_NORMAL" + }, + "874": { + "name": "Shadow", + "proto": "KINGLER_SHADOW" + }, + "875": { + "name": "Purified", + "proto": "KINGLER_PURIFIED" + } + }, + "types": [ + "Water" + ], + "attack": 240, + "defense": 181, + "stamina": 146, + "height": 1.3, + "weight": 60, + "quick_moves": [ + "Bubble", + "Metal Claw" + ], + "charged_moves": [ + "Vice Grip", + "X Scissor", + "Water Pulse", + "Crabhammer" + ], + "family": 98, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "100": { + "name": "Voltorb", + "pokedex_id": 100, + "default_form_id": 1047, + "forms": { + "1047": { + "name": "Normal", + "proto": "VOLTORB_NORMAL" + }, + "1048": { + "name": "Shadow", + "proto": "VOLTORB_SHADOW" + }, + "1049": { + "name": "Purified", + "proto": "VOLTORB_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Electric" + ], + "attack": 109, + "defense": 111, + "stamina": 120, + "height": 0.5, + "weight": 10.4, + "quick_moves": [ + "Spark", + "Tackle" + ], + "charged_moves": [ + "Discharge", + "Thunderbolt", + "Gyro Ball" + ], + "family": 100, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 101 + } + ], + "little": true + }, + "101": { + "name": "Electrode", + "pokedex_id": 101, + "default_form_id": 1050, + "forms": { + "1050": { + "name": "Normal", + "proto": "ELECTRODE_NORMAL" + }, + "1051": { + "name": "Shadow", + "proto": "ELECTRODE_SHADOW" + }, + "1052": { + "name": "Purified", + "proto": "ELECTRODE_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Electric" + ], + "attack": 173, + "defense": 173, + "stamina": 155, + "height": 1.2, + "weight": 66.6, + "quick_moves": [ + "Spark", + "Volt Switch" + ], + "charged_moves": [ + "Discharge", + "Thunderbolt", + "Hyper Beam", + "Foul Play" + ], + "family": 100, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "102": { + "name": "Exeggcute", + "pokedex_id": 102, + "default_form_id": 729, + "forms": { + "729": { + "name": "Normal", + "proto": "EXEGGCUTE_NORMAL", + "evolutions": [ + { + "pokemon": 103, + "form": 77 + } + ] + }, + "730": { + "name": "Shadow", + "proto": "EXEGGCUTE_SHADOW", + "evolutions": [ + { + "pokemon": 103, + "form": 732 + } + ] + }, + "731": { + "name": "Purified", + "proto": "EXEGGCUTE_PURIFIED", + "evolutions": [ + { + "pokemon": 103, + "form": 733 + } + ] + } + }, + "types": [ + "Grass", + "Psychic" + ], + "attack": 107, + "defense": 125, + "stamina": 155, + "height": 0.4, + "weight": 2.5, + "quick_moves": [ + "Confusion", + "Bullet Seed" + ], + "charged_moves": [ + "Seed Bomb", + "Psychic", + "Ancient Power" + ], + "family": 102, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 103, + "form": 77 + } + ], + "little": true + }, + "103": { + "name": "Exeggutor", + "pokedex_id": 103, + "default_form_id": 77, + "forms": { + "77": { + "name": "Normal", + "proto": "EXEGGUTOR_NORMAL" + }, + "78": { + "name": "Alola", + "proto": "EXEGGUTOR_ALOLA", + "attack": 230, + "defense": 153, + "stamina": 216, + "height": 10.9, + "weight": 415.6, + "quick_moves": [ + "Bullet Seed", + "Dragon Tail" + ], + "charged_moves": [ + "Seed Bomb", + "Dragon Pulse", + "Solar Beam" + ], + "types": [ + "Grass", + "Dragon" + ] + }, + "732": { + "name": "Shadow", + "proto": "EXEGGUTOR_SHADOW" + }, + "733": { + "name": "Purified", + "proto": "EXEGGUTOR_PURIFIED" + } + }, + "types": [ + "Grass", + "Psychic" + ], + "attack": 233, + "defense": 149, + "stamina": 216, + "height": 2, + "weight": 120, + "quick_moves": [ + "Bullet Seed", + "Extrasensory", + "Confusion" + ], + "charged_moves": [ + "Seed Bomb", + "Psychic", + "Solar Beam" + ], + "family": 102, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "104": { + "name": "Cubone", + "pokedex_id": 104, + "default_form_id": 224, + "forms": { + "224": { + "name": "Normal", + "proto": "CUBONE_NORMAL", + "evolutions": [ + { + "pokemon": 105, + "form": 79 + } + ] + }, + "225": { + "name": "Shadow", + "proto": "CUBONE_SHADOW", + "evolutions": [ + { + "pokemon": 105, + "form": 227 + } + ] + }, + "226": { + "name": "Purified", + "proto": "CUBONE_PURIFIED", + "evolutions": [ + { + "pokemon": 105, + "form": 228 + } + ] + } + }, + "types": [ + "Ground" + ], + "attack": 90, + "defense": 144, + "stamina": 137, + "height": 0.4, + "weight": 6.5, + "quick_moves": [ + "Mud Slap", + "Rock Smash" + ], + "charged_moves": [ + "Bone Club", + "Dig", + "Bulldoze" + ], + "family": 104, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 105, + "form": 79 + } + ], + "little": true + }, + "105": { + "name": "Marowak", + "pokedex_id": 105, + "default_form_id": 79, + "forms": { + "79": { + "name": "Normal", + "proto": "MAROWAK_NORMAL" + }, + "80": { + "name": "Alola", + "proto": "MAROWAK_ALOLA", + "height": 1, + "weight": 34, + "quick_moves": [ + "Hex", + "Rock Smash", + "Fire Spin" + ], + "charged_moves": [ + "Bone Club", + "Shadow Ball", + "Fire Blast", + "Flame Wheel" + ], + "types": [ + "Fire", + "Ghost" + ] + }, + "227": { + "name": "Shadow", + "proto": "MAROWAK_SHADOW" + }, + "228": { + "name": "Purified", + "proto": "MAROWAK_PURIFIED" + } + }, + "types": [ + "Ground" + ], + "attack": 144, + "defense": 186, + "stamina": 155, + "height": 1, + "weight": 45, + "quick_moves": [ + "Mud Slap", + "Rock Smash" + ], + "charged_moves": [ + "Bone Club", + "Dig", + "Earthquake" + ], + "family": 104, + "flee_rate": 0.06, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "106": { + "name": "Hitmonlee", + "pokedex_id": 106, + "default_form_id": 713, + "forms": { + "713": { + "name": "Normal", + "proto": "HITMONLEE_NORMAL" + }, + "714": { + "name": "Shadow", + "proto": "HITMONLEE_SHADOW" + }, + "715": { + "name": "Purified", + "proto": "HITMONLEE_PURIFIED" + } + }, + "types": [ + "Fighting" + ], + "attack": 224, + "defense": 181, + "stamina": 137, + "height": 1.5, + "weight": 49.8, + "quick_moves": [ + "Low Kick", + "Rock Smash" + ], + "charged_moves": [ + "Close Combat", + "Low Sweep", + "Stone Edge" + ], + "family": 236, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "107": { + "name": "Hitmonchan", + "pokedex_id": 107, + "default_form_id": 277, + "forms": { + "277": { + "name": "Normal", + "proto": "HITMONCHAN_NORMAL" + }, + "278": { + "name": "Shadow", + "proto": "HITMONCHAN_SHADOW" + }, + "279": { + "name": "Purified", + "proto": "HITMONCHAN_PURIFIED" + } + }, + "types": [ + "Fighting" + ], + "attack": 193, + "defense": 197, + "stamina": 137, + "height": 1.4, + "weight": 50.2, + "quick_moves": [ + "Bullet Punch", + "Counter" + ], + "charged_moves": [ + "Fire Punch", + "Ice Punch", + "Thunder Punch", + "Close Combat", + "Power Up Punch" + ], + "family": 236, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "108": { + "name": "Lickitung", + "pokedex_id": 108, + "default_form_id": 1053, + "forms": { + "1053": { + "name": "Normal", + "proto": "LICKITUNG_NORMAL" + }, + "1054": { + "name": "Shadow", + "proto": "LICKITUNG_SHADOW" + }, + "1055": { + "name": "Purified", + "proto": "LICKITUNG_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal" + ], + "attack": 108, + "defense": 137, + "stamina": 207, + "height": 1.2, + "weight": 65.5, + "quick_moves": [ + "Lick", + "Zen Headbutt" + ], + "charged_moves": [ + "Hyper Beam", + "Stomp", + "Power Whip" + ], + "family": 108, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 463 + } + ], + "little": true + }, + "109": { + "name": "Koffing", + "pokedex_id": 109, + "default_form_id": 703, + "forms": { + "703": { + "name": "Normal", + "proto": "KOFFING_NORMAL", + "evolutions": [ + { + "pokemon": 110, + "form": 706 + } + ] + }, + "704": { + "name": "Shadow", + "proto": "KOFFING_SHADOW", + "evolutions": [ + { + "pokemon": 110, + "form": 707 + } + ] + }, + "705": { + "name": "Purified", + "proto": "KOFFING_PURIFIED", + "evolutions": [ + { + "pokemon": 110, + "form": 708 + } + ] + } + }, + "types": [ + "Poison" + ], + "attack": 119, + "defense": 141, + "stamina": 120, + "height": 0.6, + "weight": 1, + "quick_moves": [ + "Tackle", + "Infestation" + ], + "charged_moves": [ + "Sludge", + "Sludge Bomb", + "Dark Pulse" + ], + "family": 109, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 110, + "form": 706 + } + ], + "little": true + }, + "110": { + "name": "Weezing", + "pokedex_id": 110, + "default_form_id": 706, + "forms": { + "706": { + "name": "Normal", + "proto": "WEEZING_NORMAL" + }, + "707": { + "name": "Shadow", + "proto": "WEEZING_SHADOW" + }, + "708": { + "name": "Purified", + "proto": "WEEZING_PURIFIED" + }, + "944": { + "name": "Galarian", + "proto": "WEEZING_GALARIAN", + "height": 3, + "weight": 16, + "quick_moves": [ + "Tackle" + ], + "charged_moves": [ + "Sludge", + "Hyper Beam", + "Play Rough", + "Hyper Beam", + "Overheat" + ], + "types": [ + "Poison", + "Fairy" + ] + } + }, + "types": [ + "Poison" + ], + "attack": 174, + "defense": 197, + "stamina": 163, + "height": 1.2, + "weight": 9.5, + "quick_moves": [ + "Tackle", + "Infestation" + ], + "charged_moves": [ + "Sludge Bomb", + "Shadow Ball", + "Dark Pulse", + "Thunderbolt" + ], + "family": 109, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "111": { + "name": "Rhyhorn", + "pokedex_id": 111, + "default_form_id": 846, + "forms": { + "846": { + "name": "Normal", + "proto": "RHYHORN_NORMAL", + "evolutions": [ + { + "pokemon": 112, + "form": 849 + } + ] + }, + "847": { + "name": "Shadow", + "proto": "RHYHORN_SHADOW", + "evolutions": [ + { + "pokemon": 112, + "form": 850 + } + ] + }, + "848": { + "name": "Purified", + "proto": "RHYHORN_PURIFIED", + "evolutions": [ + { + "pokemon": 112, + "form": 851 + } + ] + } + }, + "types": [ + "Ground", + "Rock" + ], + "attack": 140, + "defense": 127, + "stamina": 190, + "height": 1, + "weight": 115, + "quick_moves": [ + "Mud Slap", + "Rock Smash" + ], + "charged_moves": [ + "Bulldoze", + "Horn Attack", + "Stomp" + ], + "family": 111, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 112, + "form": 849 + } + ], + "little": true + }, + "112": { + "name": "Rhydon", + "pokedex_id": 112, + "default_form_id": 849, + "forms": { + "849": { + "name": "Normal", + "proto": "RHYDON_NORMAL", + "evolutions": [ + { + "pokemon": 464, + "form": 852 + } + ] + }, + "850": { + "name": "Shadow", + "proto": "RHYDON_SHADOW", + "evolutions": [ + { + "pokemon": 464, + "form": 853 + } + ] + }, + "851": { + "name": "Purified", + "proto": "RHYDON_PURIFIED", + "evolutions": [ + { + "pokemon": 464, + "form": 854 + } + ] + } + }, + "types": [ + "Ground", + "Rock" + ], + "attack": 222, + "defense": 171, + "stamina": 233, + "height": 1.9, + "weight": 120, + "quick_moves": [ + "Mud Slap", + "Rock Smash" + ], + "charged_moves": [ + "Surf", + "Earthquake", + "Stone Edge" + ], + "family": 111, + "flee_rate": 0.06, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 464, + "form": 852 + } + ] + }, + "113": { + "name": "Chansey", + "pokedex_id": 113, + "default_form_id": 1056, + "forms": { + "1056": { + "name": "Normal", + "proto": "CHANSEY_NORMAL" + }, + "1057": { + "name": "Shadow", + "proto": "CHANSEY_SHADOW" + }, + "1058": { + "name": "Purified", + "proto": "CHANSEY_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal" + ], + "attack": 60, + "defense": 128, + "stamina": 487, + "height": 1.1, + "weight": 34.6, + "quick_moves": [ + "Pound", + "Zen Headbutt" + ], + "charged_moves": [ + "Psychic", + "Hyper Beam", + "Dazzling Gleam" + ], + "family": 113, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 242 + } + ] + }, + "114": { + "name": "Tangela", + "pokedex_id": 114, + "default_form_id": 1059, + "forms": { + "1059": { + "name": "Normal", + "proto": "TANGELA_NORMAL", + "evolutions": [ + { + "pokemon": 465, + "form": 1823 + } + ] + }, + "1060": { + "name": "Shadow", + "proto": "TANGELA_SHADOW", + "evolutions": [ + { + "pokemon": 465, + "form": 1824 + } + ] + }, + "1061": { + "name": "Purified", + "proto": "TANGELA_PURIFIED", + "evolutions": [ + { + "pokemon": 465, + "form": 1825 + } + ] + } + }, + "types": [ + "Grass" + ], + "attack": 183, + "defense": 169, + "stamina": 163, + "height": 1, + "weight": 35, + "quick_moves": [ + "Vine Whip", + "Infestation" + ], + "charged_moves": [ + "Grass Knot", + "Sludge Bomb", + "Solar Beam" + ], + "family": 114, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 465, + "form": 1823 + } + ], + "little": true + }, + "115": { + "name": "Kangaskhan", + "pokedex_id": 115, + "default_form_id": 839, + "forms": { + "839": { + "name": "Normal", + "proto": "KANGASKHAN_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "840": { + "name": "Shadow", + "proto": "KANGASKHAN_SHADOW" + }, + "841": { + "name": "Purified", + "proto": "KANGASKHAN_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Normal" + ], + "attack": 181, + "defense": 165, + "stamina": 233, + "height": 2.2, + "weight": 80, + "quick_moves": [ + "Mud Slap", + "Low Kick" + ], + "charged_moves": [ + "Crunch", + "Earthquake", + "Outrage", + "Power Up Punch" + ], + "family": 115, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "1": { + "attack": 246, + "defense": 210, + "stamina": 233, + "unreleased": true + } + } + }, + "116": { + "name": "Horsea", + "pokedex_id": 116, + "default_form_id": 1062, + "forms": { + "1062": { + "name": "Normal", + "proto": "HORSEA_NORMAL", + "evolutions": [ + { + "pokemon": 117, + "form": 1065 + } + ] + }, + "1063": { + "name": "Shadow", + "proto": "HORSEA_SHADOW", + "evolutions": [ + { + "pokemon": 117, + "form": 1066 + } + ] + }, + "1064": { + "name": "Purified", + "proto": "HORSEA_PURIFIED", + "evolutions": [ + { + "pokemon": 117, + "form": 1067 + } + ] + } + }, + "types": [ + "Water" + ], + "attack": 129, + "defense": 103, + "stamina": 102, + "height": 0.4, + "weight": 8, + "quick_moves": [ + "Water Gun", + "Bubble" + ], + "charged_moves": [ + "Bubble Beam", + "Dragon Pulse", + "Flash Cannon" + ], + "family": 116, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 117, + "form": 1065 + } + ], + "little": true + }, + "117": { + "name": "Seadra", + "pokedex_id": 117, + "default_form_id": 1065, + "forms": { + "1065": { + "name": "Normal", + "proto": "SEADRA_NORMAL", + "evolutions": [ + { + "pokemon": 230, + "form": 1298 + } + ] + }, + "1066": { + "name": "Shadow", + "proto": "SEADRA_SHADOW", + "evolutions": [ + { + "pokemon": 230, + "form": 1299 + } + ] + }, + "1067": { + "name": "Purified", + "proto": "SEADRA_PURIFIED", + "evolutions": [ + { + "pokemon": 230, + "form": 1300 + } + ] + } + }, + "types": [ + "Water" + ], + "attack": 187, + "defense": 156, + "stamina": 146, + "height": 1.2, + "weight": 25, + "quick_moves": [ + "Water Gun", + "Dragon Breath" + ], + "charged_moves": [ + "Aurora Beam", + "Dragon Pulse", + "Hydro Pump" + ], + "family": 116, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 230, + "form": 1298 + } + ] + }, + "118": { + "name": "Goldeen", + "pokedex_id": 118, + "default_form_id": 1068, + "forms": { + "1068": { + "name": "Normal", + "proto": "GOLDEEN_NORMAL" + }, + "1069": { + "name": "Shadow", + "proto": "GOLDEEN_SHADOW" + }, + "1070": { + "name": "Purified", + "proto": "GOLDEEN_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Water" + ], + "attack": 123, + "defense": 110, + "stamina": 128, + "height": 0.6, + "weight": 15, + "quick_moves": [ + "Peck", + "Mud Shot" + ], + "charged_moves": [ + "Water Pulse", + "Horn Attack", + "Aqua Tail" + ], + "family": 118, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 119 + } + ], + "little": true + }, + "119": { + "name": "Seaking", + "pokedex_id": 119, + "default_form_id": 1071, + "forms": { + "1071": { + "name": "Normal", + "proto": "SEAKING_NORMAL" + }, + "1072": { + "name": "Shadow", + "proto": "SEAKING_SHADOW" + }, + "1073": { + "name": "Purified", + "proto": "SEAKING_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Water" + ], + "attack": 175, + "defense": 147, + "stamina": 190, + "height": 1.3, + "weight": 39, + "quick_moves": [ + "Peck", + "Waterfall" + ], + "charged_moves": [ + "Ice Beam", + "Water Pulse", + "Megahorn" + ], + "family": 118, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "120": { + "name": "Staryu", + "pokedex_id": 120, + "default_form_id": 1074, + "forms": { + "1074": { + "name": "Normal", + "proto": "STARYU_NORMAL" + }, + "1075": { + "name": "Shadow", + "proto": "STARYU_SHADOW" + }, + "1076": { + "name": "Purified", + "proto": "STARYU_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Water" + ], + "attack": 137, + "defense": 112, + "stamina": 102, + "height": 0.8, + "weight": 34.5, + "quick_moves": [ + "Tackle", + "Water Gun" + ], + "charged_moves": [ + "Swift", + "Bubble Beam", + "Power Gem" + ], + "family": 120, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 121 + } + ], + "little": true + }, + "121": { + "name": "Starmie", + "pokedex_id": 121, + "default_form_id": 1077, + "forms": { + "1077": { + "name": "Normal", + "proto": "STARMIE_NORMAL" + }, + "1078": { + "name": "Shadow", + "proto": "STARMIE_SHADOW" + }, + "1079": { + "name": "Purified", + "proto": "STARMIE_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Water", + "Psychic" + ], + "attack": 210, + "defense": 184, + "stamina": 155, + "height": 1.1, + "weight": 80, + "quick_moves": [ + "Hidden Power", + "Water Gun" + ], + "charged_moves": [ + "Hydro Pump", + "Power Gem", + "Psychic", + "Thunder", + "Ice Beam" + ], + "family": 120, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "122": { + "name": "Mr Mime", + "pokedex_id": 122, + "default_form_id": 1080, + "forms": { + "1080": { + "name": "Normal", + "proto": "MR_MIME_NORMAL" + }, + "1081": { + "name": "Shadow", + "proto": "MR_MIME_SHADOW" + }, + "1082": { + "name": "Purified", + "proto": "MR_MIME_PURIFIED" + }, + "2339": { + "name": "Galarian", + "proto": "MR_MIME_GALARIAN", + "attack": 183, + "defense": 169, + "stamina": 137, + "height": 1.4, + "weight": 56.8, + "charged_moves": [ + "Psybeam", + "Psychic", + "Ice Punch" + ], + "types": [ + "Ice", + "Psychic" + ], + "evolutions": [ + { + "pokemon": 866, + "form": 2513 + } + ] + } + }, + "types": [ + "Psychic", + "Fairy" + ], + "attack": 192, + "defense": 205, + "stamina": 120, + "height": 1.3, + "weight": 54.5, + "quick_moves": [ + "Confusion", + "Zen Headbutt" + ], + "charged_moves": [ + "Psybeam", + "Psychic", + "Shadow Ball" + ], + "family": 122, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "123": { + "name": "Scyther", + "pokedex_id": 123, + "default_form_id": 247, + "forms": { + "247": { + "name": "Normal", + "proto": "SCYTHER_NORMAL", + "evolutions": [ + { + "pokemon": 212, + "form": 250 + } + ] + }, + "248": { + "name": "Shadow", + "proto": "SCYTHER_SHADOW", + "evolutions": [ + { + "pokemon": 212, + "form": 251 + } + ] + }, + "249": { + "name": "Purified", + "proto": "SCYTHER_PURIFIED", + "evolutions": [ + { + "pokemon": 212, + "form": 252 + } + ] + } + }, + "types": [ + "Bug", + "Flying" + ], + "attack": 218, + "defense": 170, + "stamina": 172, + "height": 1.5, + "weight": 56, + "quick_moves": [ + "Fury Cutter", + "Air Slash" + ], + "charged_moves": [ + "Night Slash", + "X Scissor", + "Aerial Ace" + ], + "family": 123, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 212, + "form": 250 + } + ], + "little": true + }, + "124": { + "name": "Jynx", + "pokedex_id": 124, + "default_form_id": 1083, + "forms": { + "1083": { + "name": "Normal", + "proto": "JYNX_NORMAL" + }, + "1084": { + "name": "Shadow", + "proto": "JYNX_SHADOW" + }, + "1085": { + "name": "Purified", + "proto": "JYNX_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Ice", + "Psychic" + ], + "attack": 223, + "defense": 151, + "stamina": 163, + "height": 1.4, + "weight": 40.6, + "quick_moves": [ + "Frost Breath", + "Confusion" + ], + "charged_moves": [ + "Draining Kiss", + "Avalanche", + "Psyshock", + "Focus Blast" + ], + "family": 124, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "125": { + "name": "Electabuzz", + "pokedex_id": 125, + "default_form_id": 640, + "forms": { + "640": { + "name": "Normal", + "proto": "ELECTABUZZ_NORMAL", + "evolutions": [ + { + "pokemon": 466, + "form": 643 + } + ] + }, + "641": { + "name": "Shadow", + "proto": "ELECTABUZZ_SHADOW", + "evolutions": [ + { + "pokemon": 466, + "form": 644 + } + ] + }, + "642": { + "name": "Purified", + "proto": "ELECTABUZZ_PURIFIED", + "evolutions": [ + { + "pokemon": 466, + "form": 645 + } + ] + } + }, + "types": [ + "Electric" + ], + "attack": 198, + "defense": 158, + "stamina": 163, + "height": 1.1, + "weight": 30, + "quick_moves": [ + "Thunder Shock", + "Low Kick" + ], + "charged_moves": [ + "Thunder Punch", + "Thunderbolt", + "Thunder" + ], + "family": 125, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 466, + "form": 643 + } + ] + }, + "126": { + "name": "Magmar", + "pokedex_id": 126, + "default_form_id": 634, + "forms": { + "634": { + "name": "Normal", + "proto": "MAGMAR_NORMAL", + "evolutions": [ + { + "pokemon": 467, + "form": 637 + } + ] + }, + "635": { + "name": "Shadow", + "proto": "MAGMAR_SHADOW", + "evolutions": [ + { + "pokemon": 467, + "form": 638 + } + ] + }, + "636": { + "name": "Purified", + "proto": "MAGMAR_PURIFIED", + "evolutions": [ + { + "pokemon": 467, + "form": 639 + } + ] + } + }, + "types": [ + "Fire" + ], + "attack": 206, + "defense": 154, + "stamina": 163, + "height": 1.3, + "weight": 44.5, + "quick_moves": [ + "Ember", + "Karate Chop" + ], + "charged_moves": [ + "Fire Blast", + "Fire Punch", + "Flamethrower" + ], + "family": 126, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 467, + "form": 637 + } + ] + }, + "127": { + "name": "Pinsir", + "pokedex_id": 127, + "default_form_id": 898, + "forms": { + "898": { + "name": "Normal", + "proto": "PINSIR_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "899": { + "name": "Shadow", + "proto": "PINSIR_SHADOW" + }, + "900": { + "name": "Purified", + "proto": "PINSIR_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Bug" + ], + "attack": 238, + "defense": 182, + "stamina": 163, + "height": 1.5, + "weight": 55, + "quick_moves": [ + "Rock Smash", + "Bug Bite", + "Fury Cutter" + ], + "charged_moves": [ + "Vice Grip", + "X Scissor", + "Close Combat", + "Super Power" + ], + "family": 127, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "1": { + "attack": 305, + "defense": 231, + "stamina": 163, + "unreleased": true, + "types": [ + "Bug", + "Flying" + ] + } + } + }, + "128": { + "name": "Tauros", + "pokedex_id": 128, + "default_form_id": 1086, + "forms": { + "1086": { + "name": "Normal", + "proto": "TAUROS_NORMAL" + }, + "1087": { + "name": "Shadow", + "proto": "TAUROS_SHADOW" + }, + "1088": { + "name": "Purified", + "proto": "TAUROS_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal" + ], + "attack": 198, + "defense": 183, + "stamina": 181, + "height": 1.4, + "weight": 88.4, + "quick_moves": [ + "Tackle", + "Zen Headbutt" + ], + "charged_moves": [ + "Horn Attack", + "Iron Head", + "Earthquake" + ], + "family": 128, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "129": { + "name": "Magikarp", + "pokedex_id": 129, + "default_form_id": 253, + "forms": { + "253": { + "name": "Normal", + "proto": "MAGIKARP_NORMAL", + "evolutions": [ + { + "pokemon": 130, + "form": 256 + } + ] + }, + "254": { + "name": "Shadow", + "proto": "MAGIKARP_SHADOW", + "evolutions": [ + { + "pokemon": 130, + "form": 257 + } + ] + }, + "255": { + "name": "Purified", + "proto": "MAGIKARP_PURIFIED", + "evolutions": [ + { + "pokemon": 130, + "form": 258 + } + ] + } + }, + "types": [ + "Water" + ], + "attack": 29, + "defense": 85, + "stamina": 85, + "height": 0.9, + "weight": 10, + "quick_moves": [ + "Splash" + ], + "charged_moves": [ + "Struggle" + ], + "family": 129, + "flee_rate": 0.15, + "capture_rate": 0.7, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 130, + "form": 256 + } + ], + "little": true + }, + "130": { + "name": "Gyarados", + "pokedex_id": 130, + "default_form_id": 256, + "forms": { + "256": { + "name": "Normal", + "proto": "GYARADOS_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "257": { + "name": "Shadow", + "proto": "GYARADOS_SHADOW" + }, + "258": { + "name": "Purified", + "proto": "GYARADOS_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Water", + "Flying" + ], + "attack": 237, + "defense": 186, + "stamina": 216, + "height": 6.5, + "weight": 235, + "quick_moves": [ + "Bite", + "Waterfall", + "Dragon Breath" + ], + "charged_moves": [ + "Hydro Pump", + "Crunch", + "Outrage", + "Twister" + ], + "family": 129, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "1": { + "attack": 292, + "defense": 247, + "stamina": 216, + "weight": 305, + "types": [ + "Water", + "Dark" + ] + } + } + }, + "131": { + "name": "Lapras", + "pokedex_id": 131, + "default_form_id": 322, + "forms": { + "322": { + "name": "Normal", + "proto": "LAPRAS_NORMAL" + }, + "323": { + "name": "Shadow", + "proto": "LAPRAS_SHADOW" + }, + "324": { + "name": "Purified", + "proto": "LAPRAS_PURIFIED" + }, + "2585": { + "name": "Costume 2020", + "proto": "LAPRAS_COSTUME_2020" + } + }, + "types": [ + "Water", + "Ice" + ], + "attack": 165, + "defense": 174, + "stamina": 277, + "height": 2.5, + "weight": 220, + "quick_moves": [ + "Frost Breath", + "Water Gun" + ], + "charged_moves": [ + "Hydro Pump", + "Surf", + "Blizzard", + "Skull Bash" + ], + "family": 131, + "flee_rate": 0.09, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "132": { + "name": "Ditto", + "pokedex_id": 132, + "default_form_id": 1089, + "forms": { + "1089": { + "name": "Normal", + "proto": "DITTO_NORMAL" + }, + "1090": { + "name": "Shadow", + "proto": "DITTO_SHADOW" + }, + "1091": { + "name": "Purified", + "proto": "DITTO_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal" + ], + "attack": 91, + "defense": 91, + "stamina": 134, + "height": 0.3, + "weight": 4, + "quick_moves": [ + "Transform" + ], + "charged_moves": [ + "Struggle" + ], + "family": 132, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "133": { + "name": "Eevee", + "pokedex_id": 133, + "default_form_id": 1092, + "forms": { + "1092": { + "name": "Normal", + "proto": "EEVEE_NORMAL" + }, + "1093": { + "name": "Shadow", + "proto": "EEVEE_SHADOW" + }, + "1094": { + "name": "Purified", + "proto": "EEVEE_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Normal" + ], + "attack": 104, + "defense": 114, + "stamina": 146, + "height": 0.3, + "weight": 6.5, + "quick_moves": [ + "Quick Attack", + "Tackle" + ], + "charged_moves": [ + "Dig", + "Swift" + ], + "family": 133, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 134 + }, + { + "pokemon": 135 + }, + { + "pokemon": 136 + }, + { + "pokemon": 196 + }, + { + "pokemon": 197 + }, + { + "pokemon": 470 + }, + { + "pokemon": 471 + }, + { + "pokemon": 700 + } + ], + "little": true + }, + "134": { + "name": "Vaporeon", + "pokedex_id": 134, + "default_form_id": 1095, + "forms": { + "1095": { + "name": "Normal", + "proto": "VAPOREON_NORMAL" + }, + "1096": { + "name": "Shadow", + "proto": "VAPOREON_SHADOW" + }, + "1097": { + "name": "Purified", + "proto": "VAPOREON_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Water" + ], + "attack": 205, + "defense": 161, + "stamina": 277, + "height": 1, + "weight": 29, + "quick_moves": [ + "Water Gun" + ], + "charged_moves": [ + "Water Pulse", + "Hydro Pump", + "Aqua Tail" + ], + "family": 133, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "135": { + "name": "Jolteon", + "pokedex_id": 135, + "default_form_id": 1098, + "forms": { + "1098": { + "name": "Normal", + "proto": "JOLTEON_NORMAL" + }, + "1099": { + "name": "Shadow", + "proto": "JOLTEON_SHADOW" + }, + "1100": { + "name": "Purified", + "proto": "JOLTEON_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Electric" + ], + "attack": 232, + "defense": 182, + "stamina": 163, + "height": 0.8, + "weight": 24.5, + "quick_moves": [ + "Thunder Shock", + "Volt Switch" + ], + "charged_moves": [ + "Discharge", + "Thunderbolt", + "Thunder" + ], + "family": 133, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "136": { + "name": "Flareon", + "pokedex_id": 136, + "default_form_id": 1101, + "forms": { + "1101": { + "name": "Normal", + "proto": "FLAREON_NORMAL" + }, + "1102": { + "name": "Shadow", + "proto": "FLAREON_SHADOW" + }, + "1103": { + "name": "Purified", + "proto": "FLAREON_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Fire" + ], + "attack": 246, + "defense": 179, + "stamina": 163, + "height": 0.9, + "weight": 25, + "quick_moves": [ + "Ember", + "Fire Spin" + ], + "charged_moves": [ + "Fire Blast", + "Flamethrower", + "Overheat" + ], + "family": 133, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "137": { + "name": "Porygon", + "pokedex_id": 137, + "default_form_id": 677, + "forms": { + "677": { + "name": "Normal", + "proto": "PORYGON_NORMAL", + "evolutions": [ + { + "pokemon": 233, + "form": 680 + } + ] + }, + "678": { + "name": "Shadow", + "proto": "PORYGON_SHADOW", + "evolutions": [ + { + "pokemon": 233, + "form": 681 + } + ] + }, + "679": { + "name": "Purified", + "proto": "PORYGON_PURIFIED", + "evolutions": [ + { + "pokemon": 233, + "form": 682 + } + ] + } + }, + "types": [ + "Normal" + ], + "attack": 153, + "defense": 136, + "stamina": 163, + "height": 0.8, + "weight": 36.5, + "quick_moves": [ + "Charge Beam", + "Hidden Power" + ], + "charged_moves": [ + "Solar Beam", + "Hyper Beam", + "Zap Cannon" + ], + "family": 137, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 233, + "form": 680 + } + ], + "little": true + }, + "138": { + "name": "Omanyte", + "pokedex_id": 138, + "default_form_id": 740, + "forms": { + "740": { + "name": "Normal", + "proto": "OMANYTE_NORMAL", + "evolutions": [ + { + "pokemon": 139, + "form": 743 + } + ] + }, + "741": { + "name": "Shadow", + "proto": "OMANYTE_SHADOW", + "evolutions": [ + { + "pokemon": 139, + "form": 744 + } + ] + }, + "742": { + "name": "Purified", + "proto": "OMANYTE_PURIFIED", + "evolutions": [ + { + "pokemon": 139, + "form": 745 + } + ] + } + }, + "types": [ + "Rock", + "Water" + ], + "attack": 155, + "defense": 153, + "stamina": 111, + "height": 0.4, + "weight": 7.5, + "quick_moves": [ + "Water Gun", + "Mud Shot" + ], + "charged_moves": [ + "Ancient Power", + "Bubble Beam", + "Rock Blast" + ], + "family": 138, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 139, + "form": 743 + } + ], + "little": true + }, + "139": { + "name": "Omastar", + "pokedex_id": 139, + "default_form_id": 743, + "forms": { + "743": { + "name": "Normal", + "proto": "OMASTAR_NORMAL" + }, + "744": { + "name": "Shadow", + "proto": "OMASTAR_SHADOW" + }, + "745": { + "name": "Purified", + "proto": "OMASTAR_PURIFIED" + } + }, + "types": [ + "Rock", + "Water" + ], + "attack": 207, + "defense": 201, + "stamina": 172, + "height": 1, + "weight": 35, + "quick_moves": [ + "Mud Shot", + "Water Gun" + ], + "charged_moves": [ + "Ancient Power", + "Hydro Pump", + "Rock Blast" + ], + "family": 138, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "140": { + "name": "Kabuto", + "pokedex_id": 140, + "default_form_id": 1104, + "forms": { + "1104": { + "name": "Normal", + "proto": "KABUTO_NORMAL", + "evolutions": [ + { + "pokemon": 141, + "form": 1107 + } + ] + }, + "1105": { + "name": "Shadow", + "proto": "KABUTO_SHADOW", + "evolutions": [ + { + "pokemon": 141, + "form": 1108 + } + ] + }, + "1106": { + "name": "Purified", + "proto": "KABUTO_PURIFIED", + "evolutions": [ + { + "pokemon": 141, + "form": 1109 + } + ] + } + }, + "types": [ + "Rock", + "Water" + ], + "attack": 148, + "defense": 140, + "stamina": 102, + "height": 0.5, + "weight": 11.5, + "quick_moves": [ + "Scratch", + "Mud Shot" + ], + "charged_moves": [ + "Ancient Power", + "Aqua Jet", + "Rock Tomb" + ], + "family": 140, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 141, + "form": 1107 + } + ], + "little": true + }, + "141": { + "name": "Kabutops", + "pokedex_id": 141, + "default_form_id": 1107, + "forms": { + "1107": { + "name": "Normal", + "proto": "KABUTOPS_NORMAL" + }, + "1108": { + "name": "Shadow", + "proto": "KABUTOPS_SHADOW" + }, + "1109": { + "name": "Purified", + "proto": "KABUTOPS_PURIFIED" + } + }, + "types": [ + "Rock", + "Water" + ], + "attack": 220, + "defense": 186, + "stamina": 155, + "height": 1.3, + "weight": 40.5, + "quick_moves": [ + "Mud Shot", + "Rock Smash", + "Waterfall" + ], + "charged_moves": [ + "Ancient Power", + "Water Pulse", + "Stone Edge" + ], + "family": 140, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "142": { + "name": "Aerodactyl", + "pokedex_id": 142, + "default_form_id": 1110, + "forms": { + "1110": { + "name": "Normal", + "proto": "AERODACTYL_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1111": { + "name": "Shadow", + "proto": "AERODACTYL_SHADOW" + }, + "1112": { + "name": "Purified", + "proto": "AERODACTYL_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Rock", + "Flying" + ], + "attack": 221, + "defense": 159, + "stamina": 190, + "height": 1.8, + "weight": 59, + "quick_moves": [ + "Steel Wing", + "Bite", + "Rock Throw" + ], + "charged_moves": [ + "Ancient Power", + "Iron Head", + "Hyper Beam", + "Rock Slide", + "Earth Power" + ], + "family": 142, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "1": { + "attack": 292, + "defense": 210, + "stamina": 190, + "unreleased": true + } + } + }, + "143": { + "name": "Snorlax", + "pokedex_id": 143, + "default_form_id": 199, + "forms": { + "199": { + "name": "Normal", + "proto": "SNORLAX_NORMAL" + }, + "200": { + "name": "Shadow", + "proto": "SNORLAX_SHADOW" + }, + "201": { + "name": "Purified", + "proto": "SNORLAX_PURIFIED" + } + }, + "types": [ + "Normal" + ], + "attack": 190, + "defense": 169, + "stamina": 330, + "height": 2.1, + "weight": 460, + "quick_moves": [ + "Zen Headbutt", + "Lick" + ], + "charged_moves": [ + "Heavy Slam", + "Hyper Beam", + "Earthquake", + "Outrage", + "Skull Bash", + "Body Slam", + "Super Power" + ], + "family": 143, + "flee_rate": 0.09, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "144": { + "name": "Articuno", + "pokedex_id": 144, + "default_form_id": 716, + "forms": { + "716": { + "name": "Normal", + "proto": "ARTICUNO_NORMAL" + }, + "717": { + "name": "Shadow", + "proto": "ARTICUNO_SHADOW" + }, + "718": { + "name": "Purified", + "proto": "ARTICUNO_PURIFIED" + } + }, + "types": [ + "Ice", + "Flying" + ], + "attack": 192, + "defense": 236, + "stamina": 207, + "height": 1.7, + "weight": 55.4, + "quick_moves": [ + "Frost Breath", + "Ice Shard" + ], + "charged_moves": [ + "Ice Beam", + "Icy Wind", + "Blizzard", + "Ancient Power" + ], + "family": 144, + "flee_rate": 0.1, + "capture_rate": 0.03, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 1, + "generation": "Kanto" + }, + "145": { + "name": "Zapdos", + "pokedex_id": 145, + "default_form_id": 773, + "forms": { + "773": { + "name": "Normal", + "proto": "ZAPDOS_NORMAL" + }, + "774": { + "name": "Shadow", + "proto": "ZAPDOS_SHADOW" + }, + "775": { + "name": "Purified", + "proto": "ZAPDOS_PURIFIED" + } + }, + "types": [ + "Electric", + "Flying" + ], + "attack": 253, + "defense": 185, + "stamina": 207, + "height": 1.6, + "weight": 52.6, + "quick_moves": [ + "Charge Beam" + ], + "charged_moves": [ + "Zap Cannon", + "Thunderbolt", + "Thunder", + "Ancient Power", + "Drill Peck" + ], + "family": 145, + "flee_rate": 0.1, + "capture_rate": 0.03, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 1, + "generation": "Kanto" + }, + "146": { + "name": "Moltres", + "pokedex_id": 146, + "default_form_id": 836, + "forms": { + "836": { + "name": "Normal", + "proto": "MOLTRES_NORMAL" + }, + "837": { + "name": "Shadow", + "proto": "MOLTRES_SHADOW" + }, + "838": { + "name": "Purified", + "proto": "MOLTRES_PURIFIED" + } + }, + "types": [ + "Fire", + "Flying" + ], + "attack": 251, + "defense": 181, + "stamina": 207, + "height": 2, + "weight": 60, + "quick_moves": [ + "Fire Spin", + "Wing Attack" + ], + "charged_moves": [ + "Fire Blast", + "Heat Wave", + "Overheat", + "Ancient Power" + ], + "family": 146, + "flee_rate": 0.1, + "capture_rate": 0.03, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 1, + "generation": "Kanto" + }, + "147": { + "name": "Dratini", + "pokedex_id": 147, + "default_form_id": 190, + "forms": { + "190": { + "name": "Normal", + "proto": "DRATINI_NORMAL", + "evolutions": [ + { + "pokemon": 148, + "form": 193 + } + ] + }, + "191": { + "name": "Shadow", + "proto": "DRATINI_SHADOW", + "evolutions": [ + { + "pokemon": 148, + "form": 194 + } + ] + }, + "192": { + "name": "Purified", + "proto": "DRATINI_PURIFIED", + "evolutions": [ + { + "pokemon": 148, + "form": 195 + } + ] + } + }, + "types": [ + "Dragon" + ], + "attack": 119, + "defense": 91, + "stamina": 121, + "height": 1.8, + "weight": 3.3, + "quick_moves": [ + "Dragon Breath", + "Iron Tail" + ], + "charged_moves": [ + "Wrap", + "Twister", + "Aqua Tail" + ], + "family": 147, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 148, + "form": 193 + } + ], + "little": true + }, + "148": { + "name": "Dragonair", + "pokedex_id": 148, + "default_form_id": 193, + "forms": { + "193": { + "name": "Normal", + "proto": "DRAGONAIR_NORMAL", + "evolutions": [ + { + "pokemon": 149, + "form": 196 + } + ] + }, + "194": { + "name": "Shadow", + "proto": "DRAGONAIR_SHADOW", + "evolutions": [ + { + "pokemon": 149, + "form": 197 + } + ] + }, + "195": { + "name": "Purified", + "proto": "DRAGONAIR_PURIFIED", + "evolutions": [ + { + "pokemon": 149, + "form": 198 + } + ] + } + }, + "types": [ + "Dragon" + ], + "attack": 163, + "defense": 135, + "stamina": 156, + "height": 4, + "weight": 16.5, + "quick_moves": [ + "Dragon Breath", + "Iron Tail" + ], + "charged_moves": [ + "Wrap", + "Aqua Tail", + "Dragon Pulse" + ], + "family": 147, + "flee_rate": 0.06, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto", + "evolutions": [ + { + "pokemon": 149, + "form": 196 + } + ] + }, + "149": { + "name": "Dragonite", + "pokedex_id": 149, + "default_form_id": 196, + "forms": { + "196": { + "name": "Normal", + "proto": "DRAGONITE_NORMAL" + }, + "197": { + "name": "Shadow", + "proto": "DRAGONITE_SHADOW" + }, + "198": { + "name": "Purified", + "proto": "DRAGONITE_PURIFIED" + }, + "2333": { + "name": "Costume 2020", + "proto": "DRAGONITE_COSTUME_2020" + } + }, + "types": [ + "Dragon", + "Flying" + ], + "attack": 263, + "defense": 198, + "stamina": 209, + "height": 2.2, + "weight": 210, + "quick_moves": [ + "Dragon Tail", + "Steel Wing", + "Dragon Breath" + ], + "charged_moves": [ + "Hurricane", + "Hyper Beam", + "Outrage", + "Dragon Claw" + ], + "family": 147, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 1, + "generation": "Kanto" + }, + "150": { + "name": "Mewtwo", + "pokedex_id": 150, + "default_form_id": 135, + "forms": { + "133": { + "name": "A", + "proto": "MEWTWO_A", + "is_costume": true, + "attack": 182, + "defense": 278, + "stamina": 214, + "quick_moves": [ + "Confusion", + "Iron Tail" + ], + "charged_moves": [ + "Rock Slide", + "Dynamic Punch", + "Earthquake", + "Futuresight" + ] + }, + "135": { + "name": "Normal", + "proto": "MEWTWO_NORMAL", + "temp_evolutions": { + "2": {}, + "3": {} + } + }, + "1113": { + "name": "Shadow", + "proto": "MEWTWO_SHADOW" + }, + "1114": { + "name": "Purified", + "proto": "MEWTWO_PURIFIED", + "temp_evolutions": { + "2": {}, + "3": {} + } + } + }, + "types": [ + "Psychic" + ], + "attack": 300, + "defense": 182, + "stamina": 214, + "height": 2, + "weight": 122, + "quick_moves": [ + "Psycho Cut", + "Confusion" + ], + "charged_moves": [ + "Psychic", + "Thunderbolt", + "Ice Beam", + "Focus Blast", + "Flamethrower" + ], + "family": 150, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 1, + "generation": "Kanto", + "temp_evolutions": { + "2": { + "attack": 412, + "defense": 222, + "stamina": 235, + "unreleased": true, + "types": [ + "Psychic", + "Fighting" + ] + }, + "3": { + "attack": 426, + "defense": 229, + "stamina": 235, + "unreleased": true + } + } + }, + "151": { + "name": "Mew", + "pokedex_id": 151, + "default_form_id": 1115, + "forms": { + "1115": { + "name": "Normal", + "proto": "MEW_NORMAL" + }, + "1116": { + "name": "Shadow", + "proto": "MEW_SHADOW" + }, + "1117": { + "name": "Purified", + "proto": "MEW_PURIFIED" + } + }, + "gen_id": 1, + "generation": "Kanto", + "types": [ + "Psychic" + ], + "attack": 210, + "defense": 210, + "stamina": 225, + "height": 0.4, + "weight": 4, + "quick_moves": [ + "Pound", + "Steel Wing", + "Charge Beam", + "Shadow Claw", + "Volt Switch", + "Struggle Bug", + "Frost Breath", + "Dragon Tail", + "Infestation", + "Poison Jab", + "Rock Smash", + "Snarl", + "Cut", + "Waterfall" + ], + "charged_moves": [ + "Psychic", + "Ancient Power", + "Dragon Claw", + "Psyshock", + "Ice Beam", + "Blizzard", + "Hyper Beam", + "Solar Beam", + "Thunderbolt", + "Thunder", + "Flame Charge", + "Low Sweep", + "Overheat", + "Focus Blast", + "Energy Ball", + "Stone Edge", + "Gyro Ball", + "Bulldoze", + "Rock Slide", + "Grass Knot", + "Flash Cannon", + "Wild Charge", + "Dark Pulse", + "Dazzling Gleam", + "Surf" + ], + "family": 151, + "capture_rate": 100, + "legendary": false, + "mythic": true, + "buddy_group_number": 4, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "152": { + "name": "Chikorita", + "pokedex_id": 152, + "default_form_id": 1118, + "forms": { + "1118": { + "name": "Normal", + "proto": "CHIKORITA_NORMAL" + }, + "1119": { + "name": "Shadow", + "proto": "CHIKORITA_SHADOW" + }, + "1120": { + "name": "Purified", + "proto": "CHIKORITA_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Grass" + ], + "attack": 92, + "defense": 122, + "stamina": 128, + "height": 0.89, + "weight": 6.4, + "quick_moves": [ + "Vine Whip", + "Tackle" + ], + "charged_moves": [ + "Energy Ball", + "Grass Knot", + "Body Slam" + ], + "family": 152, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 153 + } + ], + "little": true + }, + "153": { + "name": "Bayleef", + "pokedex_id": 153, + "default_form_id": 1121, + "forms": { + "1121": { + "name": "Normal", + "proto": "BAYLEEF_NORMAL" + }, + "1122": { + "name": "Shadow", + "proto": "BAYLEEF_SHADOW" + }, + "1123": { + "name": "Purified", + "proto": "BAYLEEF_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Grass" + ], + "attack": 122, + "defense": 155, + "stamina": 155, + "height": 1.19, + "weight": 15.8, + "quick_moves": [ + "Razor Leaf", + "Tackle" + ], + "charged_moves": [ + "Energy Ball", + "Grass Knot", + "Ancient Power" + ], + "family": 152, + "flee_rate": 0.07, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 154 + } + ] + }, + "154": { + "name": "Meganium", + "pokedex_id": 154, + "default_form_id": 1124, + "forms": { + "1124": { + "name": "Normal", + "proto": "MEGANIUM_NORMAL" + }, + "1125": { + "name": "Shadow", + "proto": "MEGANIUM_SHADOW" + }, + "1126": { + "name": "Purified", + "proto": "MEGANIUM_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Grass" + ], + "attack": 168, + "defense": 202, + "stamina": 190, + "height": 1.8, + "weight": 100.5, + "quick_moves": [ + "Razor Leaf", + "Vine Whip" + ], + "charged_moves": [ + "Petal Blizzard", + "Solar Beam", + "Earthquake" + ], + "family": 152, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "155": { + "name": "Cyndaquil", + "pokedex_id": 155, + "default_form_id": 1127, + "forms": { + "1127": { + "name": "Normal", + "proto": "CYNDAQUIL_NORMAL" + }, + "1128": { + "name": "Shadow", + "proto": "CYNDAQUIL_SHADOW" + }, + "1129": { + "name": "Purified", + "proto": "CYNDAQUIL_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Fire" + ], + "attack": 116, + "defense": 93, + "stamina": 118, + "height": 0.51, + "weight": 7.9, + "quick_moves": [ + "Ember", + "Tackle" + ], + "charged_moves": [ + "Flame Charge", + "Swift", + "Flamethrower" + ], + "family": 155, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 156 + } + ], + "little": true + }, + "156": { + "name": "Quilava", + "pokedex_id": 156, + "default_form_id": 1130, + "forms": { + "1130": { + "name": "Normal", + "proto": "QUILAVA_NORMAL" + }, + "1131": { + "name": "Shadow", + "proto": "QUILAVA_SHADOW" + }, + "1132": { + "name": "Purified", + "proto": "QUILAVA_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Fire" + ], + "attack": 158, + "defense": 126, + "stamina": 151, + "height": 0.89, + "weight": 19, + "quick_moves": [ + "Ember", + "Tackle" + ], + "charged_moves": [ + "Flame Charge", + "Dig", + "Flamethrower" + ], + "family": 155, + "flee_rate": 0.07, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 157 + } + ] + }, + "157": { + "name": "Typhlosion", + "pokedex_id": 157, + "default_form_id": 1133, + "forms": { + "1133": { + "name": "Normal", + "proto": "TYPHLOSION_NORMAL" + }, + "1134": { + "name": "Shadow", + "proto": "TYPHLOSION_SHADOW" + }, + "1135": { + "name": "Purified", + "proto": "TYPHLOSION_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Fire" + ], + "attack": 223, + "defense": 173, + "stamina": 186, + "height": 1.7, + "weight": 79.5, + "quick_moves": [ + "Ember", + "Shadow Claw", + "Incinerate" + ], + "charged_moves": [ + "Fire Blast", + "Overheat", + "Solar Beam" + ], + "family": 155, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "158": { + "name": "Totodile", + "pokedex_id": 158, + "default_form_id": 1136, + "forms": { + "1136": { + "name": "Normal", + "proto": "TOTODILE_NORMAL" + }, + "1137": { + "name": "Shadow", + "proto": "TOTODILE_SHADOW" + }, + "1138": { + "name": "Purified", + "proto": "TOTODILE_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water" + ], + "attack": 117, + "defense": 109, + "stamina": 137, + "height": 0.61, + "weight": 9.5, + "quick_moves": [ + "Water Gun", + "Scratch" + ], + "charged_moves": [ + "Crunch", + "Aqua Jet", + "Water Pulse" + ], + "family": 158, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 159 + } + ], + "little": true + }, + "159": { + "name": "Croconaw", + "pokedex_id": 159, + "default_form_id": 1139, + "forms": { + "1139": { + "name": "Normal", + "proto": "CROCONAW_NORMAL" + }, + "1140": { + "name": "Shadow", + "proto": "CROCONAW_SHADOW" + }, + "1141": { + "name": "Purified", + "proto": "CROCONAW_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water" + ], + "attack": 150, + "defense": 142, + "stamina": 163, + "height": 1.09, + "weight": 25, + "quick_moves": [ + "Water Gun", + "Scratch" + ], + "charged_moves": [ + "Crunch", + "Ice Punch", + "Water Pulse" + ], + "family": 158, + "flee_rate": 0.07, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 160 + } + ] + }, + "160": { + "name": "Feraligatr", + "pokedex_id": 160, + "default_form_id": 1142, + "forms": { + "1142": { + "name": "Normal", + "proto": "FERALIGATR_NORMAL" + }, + "1143": { + "name": "Shadow", + "proto": "FERALIGATR_SHADOW" + }, + "1144": { + "name": "Purified", + "proto": "FERALIGATR_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water" + ], + "attack": 205, + "defense": 188, + "stamina": 198, + "height": 2.31, + "weight": 88.8, + "quick_moves": [ + "Waterfall", + "Bite", + "Ice Fang" + ], + "charged_moves": [ + "Crunch", + "Hydro Pump", + "Ice Beam" + ], + "family": 158, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "161": { + "name": "Sentret", + "pokedex_id": 161, + "default_form_id": 1145, + "forms": { + "1145": { + "name": "Normal", + "proto": "SENTRET_NORMAL" + }, + "1146": { + "name": "Shadow", + "proto": "SENTRET_SHADOW" + }, + "1147": { + "name": "Purified", + "proto": "SENTRET_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Normal" + ], + "attack": 79, + "defense": 73, + "stamina": 111, + "height": 0.79, + "weight": 6, + "quick_moves": [ + "Scratch", + "Quick Attack" + ], + "charged_moves": [ + "Dig", + "Brick Break", + "Grass Knot" + ], + "family": 161, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 162 + } + ], + "little": true + }, + "162": { + "name": "Furret", + "pokedex_id": 162, + "default_form_id": 1148, + "forms": { + "1148": { + "name": "Normal", + "proto": "FURRET_NORMAL" + }, + "1149": { + "name": "Shadow", + "proto": "FURRET_SHADOW" + }, + "1150": { + "name": "Purified", + "proto": "FURRET_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Normal" + ], + "attack": 148, + "defense": 125, + "stamina": 198, + "height": 1.8, + "weight": 32.5, + "quick_moves": [ + "Quick Attack", + "Sucker Punch" + ], + "charged_moves": [ + "Dig", + "Brick Break", + "Hyper Beam" + ], + "family": 161, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "163": { + "name": "Hoothoot", + "pokedex_id": 163, + "default_form_id": 1151, + "forms": { + "1151": { + "name": "Normal", + "proto": "HOOTHOOT_NORMAL" + }, + "1152": { + "name": "Shadow", + "proto": "HOOTHOOT_SHADOW" + }, + "1153": { + "name": "Purified", + "proto": "HOOTHOOT_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Normal", + "Flying" + ], + "attack": 67, + "defense": 88, + "stamina": 155, + "height": 0.71, + "weight": 21.2, + "quick_moves": [ + "Feint Attack", + "Peck" + ], + "charged_moves": [ + "Aerial Ace", + "Sky Attack", + "Night Shade" + ], + "family": 163, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 164 + } + ], + "little": true + }, + "164": { + "name": "Noctowl", + "pokedex_id": 164, + "default_form_id": 1154, + "forms": { + "1154": { + "name": "Normal", + "proto": "NOCTOWL_NORMAL" + }, + "1155": { + "name": "Shadow", + "proto": "NOCTOWL_SHADOW" + }, + "1156": { + "name": "Purified", + "proto": "NOCTOWL_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Normal", + "Flying" + ], + "attack": 145, + "defense": 156, + "stamina": 225, + "height": 1.6, + "weight": 40.8, + "quick_moves": [ + "Wing Attack", + "Extrasensory" + ], + "charged_moves": [ + "Psychic", + "Sky Attack", + "Night Shade" + ], + "family": 163, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "165": { + "name": "Ledyba", + "pokedex_id": 165, + "default_form_id": 1157, + "forms": { + "1157": { + "name": "Normal", + "proto": "LEDYBA_NORMAL" + }, + "1158": { + "name": "Shadow", + "proto": "LEDYBA_SHADOW" + }, + "1159": { + "name": "Purified", + "proto": "LEDYBA_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Bug", + "Flying" + ], + "attack": 72, + "defense": 118, + "stamina": 120, + "height": 0.99, + "weight": 10.8, + "quick_moves": [ + "Tackle", + "Bug Bite" + ], + "charged_moves": [ + "Silver Wind", + "Swift", + "Aerial Ace" + ], + "family": 165, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 166 + } + ], + "little": true + }, + "166": { + "name": "Ledian", + "pokedex_id": 166, + "default_form_id": 1160, + "forms": { + "1160": { + "name": "Normal", + "proto": "LEDIAN_NORMAL" + }, + "1161": { + "name": "Shadow", + "proto": "LEDIAN_SHADOW" + }, + "1162": { + "name": "Purified", + "proto": "LEDIAN_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Bug", + "Flying" + ], + "attack": 107, + "defense": 179, + "stamina": 146, + "height": 1.4, + "weight": 35.6, + "quick_moves": [ + "Struggle Bug", + "Bug Bite" + ], + "charged_moves": [ + "Bug Buzz", + "Silver Wind", + "Aerial Ace" + ], + "family": 165, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "167": { + "name": "Spinarak", + "pokedex_id": 167, + "default_form_id": 1163, + "forms": { + "1163": { + "name": "Normal", + "proto": "SPINARAK_NORMAL" + }, + "1164": { + "name": "Shadow", + "proto": "SPINARAK_SHADOW" + }, + "1165": { + "name": "Purified", + "proto": "SPINARAK_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Bug", + "Poison" + ], + "attack": 105, + "defense": 73, + "stamina": 120, + "height": 0.51, + "weight": 8.5, + "quick_moves": [ + "Poison Sting", + "Bug Bite" + ], + "charged_moves": [ + "Night Slash", + "Signal Beam", + "Cross Poison" + ], + "family": 167, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 168 + } + ], + "little": true + }, + "168": { + "name": "Ariados", + "pokedex_id": 168, + "default_form_id": 1166, + "forms": { + "1166": { + "name": "Normal", + "proto": "ARIADOS_NORMAL" + }, + "1167": { + "name": "Shadow", + "proto": "ARIADOS_SHADOW" + }, + "1168": { + "name": "Purified", + "proto": "ARIADOS_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Bug", + "Poison" + ], + "attack": 161, + "defense": 124, + "stamina": 172, + "height": 1.09, + "weight": 33.5, + "quick_moves": [ + "Poison Sting", + "Infestation" + ], + "charged_moves": [ + "Shadow Sneak", + "Megahorn", + "Cross Poison", + "Lunge" + ], + "family": 167, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "169": { + "name": "Crobat", + "pokedex_id": 169, + "default_form_id": 202, + "forms": { + "202": { + "name": "Normal", + "proto": "CROBAT_NORMAL" + }, + "203": { + "name": "Shadow", + "proto": "CROBAT_SHADOW" + }, + "204": { + "name": "Purified", + "proto": "CROBAT_PURIFIED" + } + }, + "types": [ + "Poison", + "Flying" + ], + "attack": 194, + "defense": 178, + "stamina": 198, + "height": 1.8, + "weight": 75, + "quick_moves": [ + "Air Slash", + "Bite" + ], + "charged_moves": [ + "Shadow Ball", + "Air Cutter", + "Sludge Bomb", + "Poison Fang", + "Cross Poison" + ], + "family": 41, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "170": { + "name": "Chinchou", + "pokedex_id": 170, + "default_form_id": 1169, + "forms": { + "1169": { + "name": "Normal", + "proto": "CHINCHOU_NORMAL" + }, + "1170": { + "name": "Shadow", + "proto": "CHINCHOU_SHADOW" + }, + "1171": { + "name": "Purified", + "proto": "CHINCHOU_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water", + "Electric" + ], + "attack": 106, + "defense": 97, + "stamina": 181, + "height": 0.51, + "weight": 12, + "quick_moves": [ + "Bubble", + "Spark" + ], + "charged_moves": [ + "Water Pulse", + "Thunderbolt", + "Bubble Beam" + ], + "family": 170, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 171 + } + ], + "little": true + }, + "171": { + "name": "Lanturn", + "pokedex_id": 171, + "default_form_id": 1172, + "forms": { + "1172": { + "name": "Normal", + "proto": "LANTURN_NORMAL" + }, + "1173": { + "name": "Shadow", + "proto": "LANTURN_SHADOW" + }, + "1174": { + "name": "Purified", + "proto": "LANTURN_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water", + "Electric" + ], + "attack": 146, + "defense": 137, + "stamina": 268, + "height": 1.19, + "weight": 22.5, + "quick_moves": [ + "Water Gun", + "Charge Beam", + "Spark" + ], + "charged_moves": [ + "Hydro Pump", + "Thunderbolt", + "Thunder" + ], + "family": 170, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "172": { + "name": "Pichu", + "pokedex_id": 172, + "default_form_id": 1175, + "forms": { + "1175": { + "name": "Normal", + "proto": "PICHU_NORMAL" + }, + "1176": { + "name": "Shadow", + "proto": "PICHU_SHADOW" + }, + "1177": { + "name": "Purified", + "proto": "PICHU_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Electric" + ], + "attack": 77, + "defense": 53, + "stamina": 85, + "height": 0.3, + "weight": 2, + "quick_moves": [ + "Thunder Shock" + ], + "charged_moves": [ + "Thunderbolt", + "Disarming Voice", + "Thunder Punch" + ], + "family": 25, + "flee_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 25 + } + ], + "little": true + }, + "173": { + "name": "Cleffa", + "pokedex_id": 173, + "default_form_id": 1178, + "forms": { + "1178": { + "name": "Normal", + "proto": "CLEFFA_NORMAL" + }, + "1179": { + "name": "Shadow", + "proto": "CLEFFA_SHADOW" + }, + "1180": { + "name": "Purified", + "proto": "CLEFFA_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Fairy" + ], + "attack": 75, + "defense": 79, + "stamina": 137, + "height": 0.3, + "weight": 3, + "quick_moves": [ + "Pound", + "Zen Headbutt" + ], + "charged_moves": [ + "Grass Knot", + "Psyshock", + "Signal Beam" + ], + "family": 35, + "flee_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 35 + } + ], + "little": true + }, + "174": { + "name": "Igglybuff", + "pokedex_id": 174, + "default_form_id": 1181, + "forms": { + "1181": { + "name": "Normal", + "proto": "IGGLYBUFF_NORMAL" + }, + "1182": { + "name": "Shadow", + "proto": "IGGLYBUFF_SHADOW" + }, + "1183": { + "name": "Purified", + "proto": "IGGLYBUFF_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Normal", + "Fairy" + ], + "attack": 69, + "defense": 32, + "stamina": 207, + "height": 0.3, + "weight": 1, + "quick_moves": [ + "Pound", + "Feint Attack" + ], + "charged_moves": [ + "Wild Charge", + "Shadow Ball", + "Psychic" + ], + "family": 39, + "flee_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 39 + } + ], + "little": true + }, + "175": { + "name": "Togepi", + "pokedex_id": 175, + "default_form_id": 1184, + "forms": { + "1184": { + "name": "Normal", + "proto": "TOGEPI_NORMAL" + }, + "1185": { + "name": "Shadow", + "proto": "TOGEPI_SHADOW" + }, + "1186": { + "name": "Purified", + "proto": "TOGEPI_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Fairy" + ], + "attack": 67, + "defense": 116, + "stamina": 111, + "height": 0.3, + "weight": 1.5, + "quick_moves": [ + "Hidden Power", + "Peck" + ], + "charged_moves": [ + "Ancient Power", + "Psyshock", + "Dazzling Gleam" + ], + "family": 175, + "flee_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 176 + } + ], + "little": true + }, + "176": { + "name": "Togetic", + "pokedex_id": 176, + "default_form_id": 1187, + "forms": { + "1187": { + "name": "Normal", + "proto": "TOGETIC_NORMAL" + }, + "1188": { + "name": "Shadow", + "proto": "TOGETIC_SHADOW" + }, + "1189": { + "name": "Purified", + "proto": "TOGETIC_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Fairy", + "Flying" + ], + "attack": 139, + "defense": 181, + "stamina": 146, + "height": 0.61, + "weight": 3.2, + "quick_moves": [ + "Extrasensory", + "Hidden Power" + ], + "charged_moves": [ + "Ancient Power", + "Dazzling Gleam", + "Aerial Ace" + ], + "family": 175, + "flee_rate": 0.05, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 468 + } + ] + }, + "177": { + "name": "Natu", + "pokedex_id": 177, + "default_form_id": 1190, + "forms": { + "1190": { + "name": "Normal", + "proto": "NATU_NORMAL" + }, + "1191": { + "name": "Shadow", + "proto": "NATU_SHADOW" + }, + "1192": { + "name": "Purified", + "proto": "NATU_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Psychic", + "Flying" + ], + "attack": 134, + "defense": 89, + "stamina": 120, + "height": 0.2, + "weight": 2, + "quick_moves": [ + "Peck", + "Quick Attack" + ], + "charged_moves": [ + "Night Shade", + "Psyshock", + "Drill Peck" + ], + "family": 177, + "flee_rate": 0.15, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 178 + } + ], + "little": true + }, + "178": { + "name": "Xatu", + "pokedex_id": 178, + "default_form_id": 1193, + "forms": { + "1193": { + "name": "Normal", + "proto": "XATU_NORMAL" + }, + "1194": { + "name": "Shadow", + "proto": "XATU_SHADOW" + }, + "1195": { + "name": "Purified", + "proto": "XATU_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Psychic", + "Flying" + ], + "attack": 192, + "defense": 146, + "stamina": 163, + "height": 1.5, + "weight": 15, + "quick_moves": [ + "Air Slash", + "Feint Attack" + ], + "charged_moves": [ + "Ominous Wind", + "Futuresight", + "Aerial Ace" + ], + "family": 177, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "179": { + "name": "Mareep", + "pokedex_id": 179, + "default_form_id": 646, + "forms": { + "646": { + "name": "Normal", + "proto": "MAREEP_NORMAL", + "evolutions": [ + { + "pokemon": 180, + "form": 649 + } + ] + }, + "647": { + "name": "Shadow", + "proto": "MAREEP_SHADOW", + "evolutions": [ + { + "pokemon": 180, + "form": 650 + } + ] + }, + "648": { + "name": "Purified", + "proto": "MAREEP_PURIFIED", + "evolutions": [ + { + "pokemon": 180, + "form": 651 + } + ] + } + }, + "types": [ + "Electric" + ], + "attack": 114, + "defense": 79, + "stamina": 146, + "height": 0.61, + "weight": 7.8, + "quick_moves": [ + "Tackle", + "Thunder Shock" + ], + "charged_moves": [ + "Body Slam", + "Thunderbolt", + "Discharge" + ], + "family": 179, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 180, + "form": 649 + } + ], + "little": true + }, + "180": { + "name": "Flaaffy", + "pokedex_id": 180, + "default_form_id": 649, + "forms": { + "649": { + "name": "Normal", + "proto": "FLAAFFY_NORMAL", + "evolutions": [ + { + "pokemon": 181, + "form": 652 + } + ] + }, + "650": { + "name": "Shadow", + "proto": "FLAAFFY_SHADOW", + "evolutions": [ + { + "pokemon": 181, + "form": 653 + } + ] + }, + "651": { + "name": "Purified", + "proto": "FLAAFFY_PURIFIED", + "evolutions": [ + { + "pokemon": 181, + "form": 654 + } + ] + } + }, + "types": [ + "Electric" + ], + "attack": 145, + "defense": 109, + "stamina": 172, + "height": 0.79, + "weight": 13.3, + "quick_moves": [ + "Tackle", + "Charge Beam" + ], + "charged_moves": [ + "Power Gem", + "Thunderbolt", + "Discharge" + ], + "family": 179, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 181, + "form": 652 + } + ] + }, + "181": { + "name": "Ampharos", + "pokedex_id": 181, + "default_form_id": 652, + "forms": { + "652": { + "name": "Normal", + "proto": "AMPHAROS_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "653": { + "name": "Shadow", + "proto": "AMPHAROS_SHADOW" + }, + "654": { + "name": "Purified", + "proto": "AMPHAROS_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Electric" + ], + "attack": 211, + "defense": 169, + "stamina": 207, + "height": 1.4, + "weight": 61.5, + "quick_moves": [ + "Charge Beam", + "Volt Switch" + ], + "charged_moves": [ + "Zap Cannon", + "Focus Blast", + "Thunder", + "Power Gem", + "Thunder Punch" + ], + "family": 179, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "temp_evolutions": { + "1": { + "attack": 294, + "defense": 203, + "stamina": 207, + "types": [ + "Electric", + "Dragon" + ] + } + } + }, + "182": { + "name": "Bellossom", + "pokedex_id": 182, + "default_form_id": 274, + "forms": { + "274": { + "name": "Normal", + "proto": "BELLOSSOM_NORMAL" + }, + "275": { + "name": "Shadow", + "proto": "BELLOSSOM_SHADOW" + }, + "276": { + "name": "Purified", + "proto": "BELLOSSOM_PURIFIED" + } + }, + "types": [ + "Grass" + ], + "attack": 169, + "defense": 186, + "stamina": 181, + "height": 0.41, + "weight": 5.8, + "quick_moves": [ + "Razor Leaf", + "Acid", + "Bullet Seed" + ], + "charged_moves": [ + "Leaf Blade", + "Petal Blizzard", + "Dazzling Gleam" + ], + "family": 43, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "183": { + "name": "Marill", + "pokedex_id": 183, + "default_form_id": 1196, + "forms": { + "1196": { + "name": "Normal", + "proto": "MARILL_NORMAL" + }, + "1197": { + "name": "Shadow", + "proto": "MARILL_SHADOW" + }, + "1198": { + "name": "Purified", + "proto": "MARILL_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water", + "Fairy" + ], + "attack": 37, + "defense": 93, + "stamina": 172, + "height": 0.41, + "weight": 8.5, + "quick_moves": [ + "Tackle", + "Bubble" + ], + "charged_moves": [ + "Bubble Beam", + "Aqua Tail", + "Body Slam" + ], + "family": 183, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 184 + } + ] + }, + "184": { + "name": "Azumarill", + "pokedex_id": 184, + "default_form_id": 1199, + "forms": { + "1199": { + "name": "Normal", + "proto": "AZUMARILL_NORMAL" + }, + "1200": { + "name": "Shadow", + "proto": "AZUMARILL_SHADOW" + }, + "1201": { + "name": "Purified", + "proto": "AZUMARILL_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water", + "Fairy" + ], + "attack": 112, + "defense": 152, + "stamina": 225, + "height": 0.79, + "weight": 28.5, + "quick_moves": [ + "Rock Smash", + "Bubble" + ], + "charged_moves": [ + "Play Rough", + "Hydro Pump", + "Ice Beam" + ], + "family": 183, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "185": { + "name": "Sudowoodo", + "pokedex_id": 185, + "default_form_id": 1202, + "forms": { + "1202": { + "name": "Normal", + "proto": "SUDOWOODO_NORMAL" + }, + "1203": { + "name": "Shadow", + "proto": "SUDOWOODO_SHADOW" + }, + "1204": { + "name": "Purified", + "proto": "SUDOWOODO_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Rock" + ], + "attack": 167, + "defense": 176, + "stamina": 172, + "height": 1.19, + "weight": 38, + "quick_moves": [ + "Rock Throw", + "Counter" + ], + "charged_moves": [ + "Stone Edge", + "Earthquake", + "Rock Slide" + ], + "family": 185, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "186": { + "name": "Politoed", + "pokedex_id": 186, + "default_form_id": 244, + "forms": { + "244": { + "name": "Normal", + "proto": "POLITOED_NORMAL" + }, + "245": { + "name": "Shadow", + "proto": "POLITOED_SHADOW" + }, + "246": { + "name": "Purified", + "proto": "POLITOED_PURIFIED" + } + }, + "types": [ + "Water" + ], + "attack": 174, + "defense": 179, + "stamina": 207, + "height": 1.09, + "weight": 33.9, + "quick_moves": [ + "Mud Shot", + "Bubble" + ], + "charged_moves": [ + "Hydro Pump", + "Blizzard", + "Surf", + "Weather Ball Water" + ], + "family": 60, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "187": { + "name": "Hoppip", + "pokedex_id": 187, + "default_form_id": 1205, + "forms": { + "1205": { + "name": "Normal", + "proto": "HOPPIP_NORMAL", + "evolutions": [ + { + "pokemon": 188, + "form": 1208 + } + ] + }, + "1206": { + "name": "Shadow", + "proto": "HOPPIP_SHADOW", + "evolutions": [ + { + "pokemon": 188, + "form": 1209 + } + ] + }, + "1207": { + "name": "Purified", + "proto": "HOPPIP_PURIFIED", + "evolutions": [ + { + "pokemon": 188, + "form": 1210 + } + ] + } + }, + "types": [ + "Grass", + "Flying" + ], + "attack": 67, + "defense": 94, + "stamina": 111, + "height": 0.41, + "weight": 0.5, + "quick_moves": [ + "Tackle", + "Bullet Seed" + ], + "charged_moves": [ + "Grass Knot", + "Dazzling Gleam", + "Seed Bomb" + ], + "family": 187, + "flee_rate": 0.12, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 188, + "form": 1208 + } + ], + "little": true + }, + "188": { + "name": "Skiploom", + "pokedex_id": 188, + "default_form_id": 1208, + "forms": { + "1208": { + "name": "Normal", + "proto": "SKIPLOOM_NORMAL", + "evolutions": [ + { + "pokemon": 189, + "form": 1211 + } + ] + }, + "1209": { + "name": "Shadow", + "proto": "SKIPLOOM_SHADOW", + "evolutions": [ + { + "pokemon": 189, + "form": 1212 + } + ] + }, + "1210": { + "name": "Purified", + "proto": "SKIPLOOM_PURIFIED", + "evolutions": [ + { + "pokemon": 189, + "form": 1213 + } + ] + } + }, + "types": [ + "Grass", + "Flying" + ], + "attack": 91, + "defense": 120, + "stamina": 146, + "height": 0.61, + "weight": 1, + "quick_moves": [ + "Tackle", + "Bullet Seed" + ], + "charged_moves": [ + "Grass Knot", + "Dazzling Gleam", + "Energy Ball" + ], + "family": 187, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 189, + "form": 1211 + } + ] + }, + "189": { + "name": "Jumpluff", + "pokedex_id": 189, + "default_form_id": 1211, + "forms": { + "1211": { + "name": "Normal", + "proto": "JUMPLUFF_NORMAL" + }, + "1212": { + "name": "Shadow", + "proto": "JUMPLUFF_SHADOW" + }, + "1213": { + "name": "Purified", + "proto": "JUMPLUFF_PURIFIED" + } + }, + "types": [ + "Grass", + "Flying" + ], + "attack": 118, + "defense": 183, + "stamina": 181, + "height": 0.79, + "weight": 3, + "quick_moves": [ + "Infestation", + "Bullet Seed" + ], + "charged_moves": [ + "Energy Ball", + "Dazzling Gleam", + "Solar Beam", + "Aerial Ace" + ], + "family": 187, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "190": { + "name": "Aipom", + "pokedex_id": 190, + "default_form_id": 1214, + "forms": { + "1214": { + "name": "Normal", + "proto": "AIPOM_NORMAL", + "evolutions": [ + { + "pokemon": 424, + "form": 1742 + } + ] + }, + "1215": { + "name": "Shadow", + "proto": "AIPOM_SHADOW", + "evolutions": [ + { + "pokemon": 424, + "form": 1743 + } + ] + }, + "1216": { + "name": "Purified", + "proto": "AIPOM_PURIFIED", + "evolutions": [ + { + "pokemon": 424, + "form": 1744 + } + ] + } + }, + "types": [ + "Normal" + ], + "attack": 136, + "defense": 112, + "stamina": 146, + "height": 0.79, + "weight": 11.5, + "quick_moves": [ + "Scratch", + "Astonish" + ], + "charged_moves": [ + "Low Sweep", + "Swift", + "Aerial Ace" + ], + "family": 190, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 424, + "form": 1742 + } + ], + "little": true + }, + "191": { + "name": "Sunkern", + "pokedex_id": 191, + "default_form_id": 1217, + "forms": { + "1217": { + "name": "Normal", + "proto": "SUNKERN_NORMAL" + }, + "1218": { + "name": "Shadow", + "proto": "SUNKERN_SHADOW" + }, + "1219": { + "name": "Purified", + "proto": "SUNKERN_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Grass" + ], + "attack": 55, + "defense": 55, + "stamina": 102, + "height": 0.3, + "weight": 1.8, + "quick_moves": [ + "Razor Leaf", + "Cut" + ], + "charged_moves": [ + "Energy Ball", + "Grass Knot", + "Seed Bomb" + ], + "family": 191, + "flee_rate": 0.09, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 192 + } + ], + "little": true + }, + "192": { + "name": "Sunflora", + "pokedex_id": 192, + "default_form_id": 1220, + "forms": { + "1220": { + "name": "Normal", + "proto": "SUNFLORA_NORMAL" + }, + "1221": { + "name": "Shadow", + "proto": "SUNFLORA_SHADOW" + }, + "1222": { + "name": "Purified", + "proto": "SUNFLORA_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Grass" + ], + "attack": 185, + "defense": 135, + "stamina": 181, + "height": 0.79, + "weight": 8.5, + "quick_moves": [ + "Razor Leaf", + "Bullet Seed" + ], + "charged_moves": [ + "Solar Beam", + "Petal Blizzard", + "Sludge Bomb", + "Leaf Storm" + ], + "family": 191, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "193": { + "name": "Yanma", + "pokedex_id": 193, + "default_form_id": 1223, + "forms": { + "1223": { + "name": "Normal", + "proto": "YANMA_NORMAL" + }, + "1224": { + "name": "Shadow", + "proto": "YANMA_SHADOW" + }, + "1225": { + "name": "Purified", + "proto": "YANMA_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Bug", + "Flying" + ], + "attack": 154, + "defense": 94, + "stamina": 163, + "height": 1.19, + "weight": 38, + "quick_moves": [ + "Quick Attack", + "Wing Attack" + ], + "charged_moves": [ + "Ancient Power", + "Aerial Ace", + "Silver Wind" + ], + "family": 193, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 469 + } + ], + "little": true + }, + "194": { + "name": "Wooper", + "pokedex_id": 194, + "default_form_id": 1226, + "forms": { + "1226": { + "name": "Normal", + "proto": "WOOPER_NORMAL", + "evolutions": [ + { + "pokemon": 195, + "form": 1229 + } + ] + }, + "1227": { + "name": "Shadow", + "proto": "WOOPER_SHADOW", + "evolutions": [ + { + "pokemon": 195, + "form": 1230 + } + ] + }, + "1228": { + "name": "Purified", + "proto": "WOOPER_PURIFIED", + "evolutions": [ + { + "pokemon": 195, + "form": 1231 + } + ] + } + }, + "types": [ + "Water", + "Ground" + ], + "attack": 75, + "defense": 66, + "stamina": 146, + "height": 0.41, + "weight": 8.5, + "quick_moves": [ + "Water Gun", + "Mud Shot" + ], + "charged_moves": [ + "Mud Bomb", + "Dig", + "Body Slam" + ], + "family": 194, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 195, + "form": 1229 + } + ], + "little": true + }, + "195": { + "name": "Quagsire", + "pokedex_id": 195, + "default_form_id": 1229, + "forms": { + "1229": { + "name": "Normal", + "proto": "QUAGSIRE_NORMAL" + }, + "1230": { + "name": "Shadow", + "proto": "QUAGSIRE_SHADOW" + }, + "1231": { + "name": "Purified", + "proto": "QUAGSIRE_PURIFIED" + } + }, + "types": [ + "Water", + "Ground" + ], + "attack": 152, + "defense": 143, + "stamina": 216, + "height": 1.4, + "weight": 75, + "quick_moves": [ + "Water Gun", + "Mud Shot" + ], + "charged_moves": [ + "Sludge Bomb", + "Earthquake", + "Stone Edge", + "Acid Spray" + ], + "family": 194, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "196": { + "name": "Espeon", + "pokedex_id": 196, + "default_form_id": 1232, + "forms": { + "1232": { + "name": "Normal", + "proto": "ESPEON_NORMAL" + }, + "1233": { + "name": "Shadow", + "proto": "ESPEON_SHADOW" + }, + "1234": { + "name": "Purified", + "proto": "ESPEON_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Psychic" + ], + "attack": 261, + "defense": 175, + "stamina": 163, + "height": 0.89, + "weight": 26.5, + "quick_moves": [ + "Confusion", + "Zen Headbutt" + ], + "charged_moves": [ + "Psybeam", + "Psychic", + "Futuresight" + ], + "family": 133, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "197": { + "name": "Umbreon", + "pokedex_id": 197, + "default_form_id": 1235, + "forms": { + "1235": { + "name": "Normal", + "proto": "UMBREON_NORMAL" + }, + "1236": { + "name": "Shadow", + "proto": "UMBREON_SHADOW" + }, + "1237": { + "name": "Purified", + "proto": "UMBREON_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Dark" + ], + "attack": 126, + "defense": 240, + "stamina": 216, + "height": 0.99, + "weight": 27, + "quick_moves": [ + "Feint Attack", + "Snarl" + ], + "charged_moves": [ + "Dark Pulse", + "Foul Play" + ], + "family": 133, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "198": { + "name": "Murkrow", + "pokedex_id": 198, + "default_form_id": 855, + "forms": { + "855": { + "name": "Normal", + "proto": "MURKROW_NORMAL", + "evolutions": [ + { + "pokemon": 430, + "form": 858 + } + ] + }, + "856": { + "name": "Shadow", + "proto": "MURKROW_SHADOW", + "evolutions": [ + { + "pokemon": 430, + "form": 859 + } + ] + }, + "857": { + "name": "Purified", + "proto": "MURKROW_PURIFIED", + "evolutions": [ + { + "pokemon": 430, + "form": 860 + } + ] + } + }, + "types": [ + "Dark", + "Flying" + ], + "attack": 175, + "defense": 87, + "stamina": 155, + "height": 0.51, + "weight": 2.1, + "quick_moves": [ + "Peck", + "Feint Attack" + ], + "charged_moves": [ + "Drill Peck", + "Foul Play", + "Dark Pulse" + ], + "family": 198, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 430, + "form": 858 + } + ], + "little": true + }, + "199": { + "name": "Slowking", + "pokedex_id": 199, + "default_form_id": 1238, + "forms": { + "1238": { + "name": "Normal", + "proto": "SLOWKING_NORMAL" + }, + "1239": { + "name": "Shadow", + "proto": "SLOWKING_SHADOW" + }, + "1240": { + "name": "Purified", + "proto": "SLOWKING_PURIFIED" + }, + "2584": { + "name": "Galarian", + "proto": "SLOWKING_GALARIAN", + "attack": 190, + "defense": 180, + "stamina": 216, + "height": 1.8, + "weight": 79.5, + "quick_moves": [ + "Hex", + "Confusion", + "Acid" + ], + "charged_moves": [ + "Futuresight", + "Shadow Ball", + "Sludge Wave" + ], + "types": [ + "Poison", + "Psychic" + ] + } + }, + "types": [ + "Water", + "Psychic" + ], + "attack": 177, + "defense": 180, + "stamina": 216, + "height": 2.01, + "weight": 79.5, + "quick_moves": [ + "Water Gun", + "Confusion" + ], + "charged_moves": [ + "Blizzard", + "Psychic", + "Fire Blast" + ], + "family": 79, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "200": { + "name": "Misdreavus", + "pokedex_id": 200, + "default_form_id": 719, + "forms": { + "719": { + "name": "Normal", + "proto": "MISDREAVUS_NORMAL", + "evolutions": [ + { + "pokemon": 429, + "form": 722 + } + ] + }, + "720": { + "name": "Shadow", + "proto": "MISDREAVUS_SHADOW", + "evolutions": [ + { + "pokemon": 429, + "form": 723 + } + ] + }, + "721": { + "name": "Purified", + "proto": "MISDREAVUS_PURIFIED", + "evolutions": [ + { + "pokemon": 429, + "form": 724 + } + ] + } + }, + "types": [ + "Ghost" + ], + "attack": 167, + "defense": 154, + "stamina": 155, + "height": 0.71, + "weight": 1, + "quick_moves": [ + "Astonish", + "Hex" + ], + "charged_moves": [ + "Shadow Sneak", + "Dark Pulse", + "Ominous Wind" + ], + "family": 200, + "flee_rate": 0.07, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 429 + } + ], + "little": true + }, + "201": { + "name": "Unown", + "pokedex_id": 201, + "default_form_id": 6, + "forms": { + "1": { + "name": "A", + "proto": "UNOWN_A" + }, + "2": { + "name": "B", + "proto": "UNOWN_B" + }, + "3": { + "name": "C", + "proto": "UNOWN_C" + }, + "4": { + "name": "D", + "proto": "UNOWN_D" + }, + "5": { + "name": "E", + "proto": "UNOWN_E" + }, + "6": { + "name": "F", + "proto": "UNOWN_F" + }, + "7": { + "name": "G", + "proto": "UNOWN_G" + }, + "8": { + "name": "H", + "proto": "UNOWN_H" + }, + "9": { + "name": "I", + "proto": "UNOWN_I" + }, + "10": { + "name": "J", + "proto": "UNOWN_J" + }, + "11": { + "name": "K", + "proto": "UNOWN_K" + }, + "12": { + "name": "L", + "proto": "UNOWN_L" + }, + "13": { + "name": "M", + "proto": "UNOWN_M" + }, + "14": { + "name": "N", + "proto": "UNOWN_N" + }, + "15": { + "name": "O", + "proto": "UNOWN_O" + }, + "16": { + "name": "P", + "proto": "UNOWN_P" + }, + "17": { + "name": "Q", + "proto": "UNOWN_Q" + }, + "18": { + "name": "R", + "proto": "UNOWN_R" + }, + "19": { + "name": "S", + "proto": "UNOWN_S" + }, + "20": { + "name": "T", + "proto": "UNOWN_T" + }, + "21": { + "name": "U", + "proto": "UNOWN_U" + }, + "22": { + "name": "V", + "proto": "UNOWN_V" + }, + "23": { + "name": "W", + "proto": "UNOWN_W" + }, + "24": { + "name": "X", + "proto": "UNOWN_X" + }, + "25": { + "name": "Y", + "proto": "UNOWN_Y" + }, + "26": { + "name": "Z", + "proto": "UNOWN_Z" + }, + "27": { + "name": "Exclamation Point", + "proto": "UNOWN_EXCLAMATION_POINT" + }, + "28": { + "name": "Question Mark", + "proto": "UNOWN_QUESTION_MARK" + } + }, + "types": [ + "Psychic" + ], + "attack": 136, + "defense": 91, + "stamina": 134, + "height": 0.51, + "weight": 5, + "quick_moves": [ + "Hidden Power" + ], + "charged_moves": [ + "Struggle" + ], + "family": 201, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "202": { + "name": "Wobbuffet", + "pokedex_id": 202, + "default_form_id": 602, + "forms": { + "602": { + "name": "Normal", + "proto": "WOBBUFFET_NORMAL" + }, + "686": { + "name": "Shadow", + "proto": "WOBBUFFET_SHADOW" + }, + "687": { + "name": "Purified", + "proto": "WOBBUFFET_PURIFIED" + }, + "2328": { + "name": "Spring 2020", + "proto": "WOBBUFFET_SPRING_2020" + } + }, + "types": [ + "Psychic" + ], + "attack": 60, + "defense": 106, + "stamina": 382, + "height": 1.3, + "weight": 28.5, + "quick_moves": [ + "Counter", + "Splash", + "Charm" + ], + "charged_moves": [ + "Mirror Coat" + ], + "family": 202, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "203": { + "name": "Girafarig", + "pokedex_id": 203, + "default_form_id": 1241, + "forms": { + "1241": { + "name": "Normal", + "proto": "GIRAFARIG_NORMAL" + }, + "1242": { + "name": "Shadow", + "proto": "GIRAFARIG_SHADOW" + }, + "1243": { + "name": "Purified", + "proto": "GIRAFARIG_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Normal", + "Psychic" + ], + "attack": 182, + "defense": 133, + "stamina": 172, + "height": 1.5, + "weight": 41.5, + "quick_moves": [ + "Tackle", + "Confusion" + ], + "charged_moves": [ + "Psychic", + "Thunderbolt", + "Mirror Coat" + ], + "family": 203, + "flee_rate": 0.07, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "204": { + "name": "Pineco", + "pokedex_id": 204, + "default_form_id": 1244, + "forms": { + "1244": { + "name": "Normal", + "proto": "PINECO_NORMAL", + "evolutions": [ + { + "pokemon": 205, + "form": 1247 + } + ] + }, + "1245": { + "name": "Shadow", + "proto": "PINECO_SHADOW", + "evolutions": [ + { + "pokemon": 205, + "form": 1248 + } + ] + }, + "1246": { + "name": "Purified", + "proto": "PINECO_PURIFIED", + "evolutions": [ + { + "pokemon": 205, + "form": 1249 + } + ] + } + }, + "types": [ + "Bug" + ], + "attack": 108, + "defense": 122, + "stamina": 137, + "height": 0.61, + "weight": 7.2, + "quick_moves": [ + "Tackle", + "Bug Bite" + ], + "charged_moves": [ + "Gyro Ball", + "Rock Tomb", + "Sand Tomb" + ], + "family": 204, + "flee_rate": 0.12, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 205, + "form": 1247 + } + ], + "little": true + }, + "205": { + "name": "Forretress", + "pokedex_id": 205, + "default_form_id": 1247, + "forms": { + "1247": { + "name": "Normal", + "proto": "FORRETRESS_NORMAL" + }, + "1248": { + "name": "Shadow", + "proto": "FORRETRESS_SHADOW" + }, + "1249": { + "name": "Purified", + "proto": "FORRETRESS_PURIFIED" + } + }, + "types": [ + "Bug", + "Steel" + ], + "attack": 161, + "defense": 205, + "stamina": 181, + "height": 1.19, + "weight": 125.8, + "quick_moves": [ + "Bug Bite", + "Struggle Bug" + ], + "charged_moves": [ + "Heavy Slam", + "Earthquake", + "Rock Tomb", + "Sand Tomb", + "Mirror Shot" + ], + "family": 204, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "206": { + "name": "Dunsparce", + "pokedex_id": 206, + "default_form_id": 1250, + "forms": { + "1250": { + "name": "Normal", + "proto": "DUNSPARCE_NORMAL" + }, + "1251": { + "name": "Shadow", + "proto": "DUNSPARCE_SHADOW" + }, + "1252": { + "name": "Purified", + "proto": "DUNSPARCE_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Normal" + ], + "attack": 131, + "defense": 128, + "stamina": 225, + "height": 1.5, + "weight": 14, + "quick_moves": [ + "Bite", + "Astonish" + ], + "charged_moves": [ + "Dig", + "Rock Slide", + "Drill Run" + ], + "family": 206, + "flee_rate": 0.2, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "207": { + "name": "Gligar", + "pokedex_id": 207, + "default_form_id": 803, + "forms": { + "803": { + "name": "Normal", + "proto": "GLIGAR_NORMAL", + "evolutions": [ + { + "pokemon": 472, + "form": 806 + } + ] + }, + "804": { + "name": "Shadow", + "proto": "GLIGAR_SHADOW", + "evolutions": [ + { + "pokemon": 472, + "form": 807 + } + ] + }, + "805": { + "name": "Purified", + "proto": "GLIGAR_PURIFIED", + "evolutions": [ + { + "pokemon": 472, + "form": 808 + } + ] + } + }, + "types": [ + "Ground", + "Flying" + ], + "attack": 143, + "defense": 184, + "stamina": 163, + "height": 1.09, + "weight": 64.8, + "quick_moves": [ + "Fury Cutter", + "Wing Attack" + ], + "charged_moves": [ + "Dig", + "Aerial Ace", + "Night Slash" + ], + "family": 207, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 472, + "form": 806 + } + ], + "little": true + }, + "208": { + "name": "Steelix", + "pokedex_id": 208, + "default_form_id": 905, + "forms": { + "905": { + "name": "Normal", + "proto": "STEELIX_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "906": { + "name": "Shadow", + "proto": "STEELIX_SHADOW" + }, + "907": { + "name": "Purified", + "proto": "STEELIX_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Steel", + "Ground" + ], + "attack": 148, + "defense": 272, + "stamina": 181, + "height": 9.19, + "weight": 400, + "quick_moves": [ + "Iron Tail", + "Dragon Tail", + "Thunder Fang" + ], + "charged_moves": [ + "Earthquake", + "Heavy Slam", + "Crunch" + ], + "family": 95, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "temp_evolutions": { + "1": { + "attack": 212, + "defense": 327, + "stamina": 181, + "unreleased": true + } + } + }, + "209": { + "name": "Snubbull", + "pokedex_id": 209, + "default_form_id": 1253, + "forms": { + "1253": { + "name": "Normal", + "proto": "SNUBBULL_NORMAL", + "evolutions": [ + { + "pokemon": 210, + "form": 1256 + } + ] + }, + "1254": { + "name": "Shadow", + "proto": "SNUBBULL_SHADOW", + "evolutions": [ + { + "pokemon": 210, + "form": 1257 + } + ] + }, + "1255": { + "name": "Purified", + "proto": "SNUBBULL_PURIFIED", + "evolutions": [ + { + "pokemon": 210, + "form": 1258 + } + ] + } + }, + "types": [ + "Fairy" + ], + "attack": 137, + "defense": 85, + "stamina": 155, + "height": 0.61, + "weight": 7.8, + "quick_moves": [ + "Tackle", + "Bite" + ], + "charged_moves": [ + "Crunch", + "Dazzling Gleam", + "Brick Break" + ], + "family": 209, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 210, + "form": 1256 + } + ], + "little": true + }, + "210": { + "name": "Granbull", + "pokedex_id": 210, + "default_form_id": 1256, + "forms": { + "1256": { + "name": "Normal", + "proto": "GRANBULL_NORMAL" + }, + "1257": { + "name": "Shadow", + "proto": "GRANBULL_SHADOW" + }, + "1258": { + "name": "Purified", + "proto": "GRANBULL_PURIFIED" + } + }, + "types": [ + "Fairy" + ], + "attack": 212, + "defense": 131, + "stamina": 207, + "height": 1.4, + "weight": 48.7, + "quick_moves": [ + "Bite", + "Snarl", + "Charm" + ], + "charged_moves": [ + "Crunch", + "Play Rough", + "Close Combat" + ], + "family": 209, + "flee_rate": 0.08, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "211": { + "name": "Qwilfish", + "pokedex_id": 211, + "default_form_id": 1259, + "forms": { + "1259": { + "name": "Normal", + "proto": "QWILFISH_NORMAL" + }, + "1260": { + "name": "Shadow", + "proto": "QWILFISH_SHADOW" + }, + "1261": { + "name": "Purified", + "proto": "QWILFISH_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water", + "Poison" + ], + "attack": 184, + "defense": 138, + "stamina": 163, + "height": 0.51, + "weight": 3.9, + "quick_moves": [ + "Poison Sting", + "Water Gun" + ], + "charged_moves": [ + "Aqua Tail", + "Ice Beam", + "Sludge Wave", + "Acid Spray", + "Fell Stinger" + ], + "family": 211, + "flee_rate": 0.08, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "212": { + "name": "Scizor", + "pokedex_id": 212, + "default_form_id": 250, + "forms": { + "250": { + "name": "Normal", + "proto": "SCIZOR_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "251": { + "name": "Shadow", + "proto": "SCIZOR_SHADOW" + }, + "252": { + "name": "Purified", + "proto": "SCIZOR_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Bug", + "Steel" + ], + "attack": 236, + "defense": 181, + "stamina": 172, + "height": 2.01, + "weight": 125, + "quick_moves": [ + "Bullet Punch", + "Fury Cutter" + ], + "charged_moves": [ + "X Scissor", + "Iron Head", + "Night Slash" + ], + "family": 123, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "temp_evolutions": { + "1": { + "attack": 279, + "defense": 250, + "stamina": 172, + "unreleased": true + } + } + }, + "213": { + "name": "Shuckle", + "pokedex_id": 213, + "default_form_id": 827, + "forms": { + "827": { + "name": "Normal", + "proto": "SHUCKLE_NORMAL" + }, + "828": { + "name": "Shadow", + "proto": "SHUCKLE_SHADOW" + }, + "829": { + "name": "Purified", + "proto": "SHUCKLE_PURIFIED" + } + }, + "types": [ + "Bug", + "Rock" + ], + "attack": 17, + "defense": 396, + "stamina": 85, + "height": 0.61, + "weight": 20.5, + "quick_moves": [ + "Struggle Bug", + "Rock Throw" + ], + "charged_moves": [ + "Rock Blast", + "Stone Edge", + "Gyro Ball" + ], + "family": 213, + "flee_rate": 0.07, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "214": { + "name": "Heracross", + "pokedex_id": 214, + "default_form_id": 1262, + "forms": { + "1262": { + "name": "Normal", + "proto": "HERACROSS_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1263": { + "name": "Shadow", + "proto": "HERACROSS_SHADOW" + }, + "1264": { + "name": "Purified", + "proto": "HERACROSS_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Bug", + "Fighting" + ], + "attack": 234, + "defense": 179, + "stamina": 190, + "height": 1.5, + "weight": 54, + "quick_moves": [ + "Counter", + "Struggle Bug" + ], + "charged_moves": [ + "Megahorn", + "Close Combat", + "Earthquake" + ], + "family": 214, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "temp_evolutions": { + "1": { + "attack": 334, + "defense": 223, + "stamina": 190, + "unreleased": true + } + } + }, + "215": { + "name": "Sneasel", + "pokedex_id": 215, + "default_form_id": 797, + "forms": { + "797": { + "name": "Normal", + "proto": "SNEASEL_NORMAL", + "evolutions": [ + { + "pokemon": 461, + "form": 800 + } + ] + }, + "798": { + "name": "Shadow", + "proto": "SNEASEL_SHADOW", + "evolutions": [ + { + "pokemon": 461, + "form": 801 + } + ] + }, + "799": { + "name": "Purified", + "proto": "SNEASEL_PURIFIED", + "evolutions": [ + { + "pokemon": 461, + "form": 802 + } + ] + } + }, + "types": [ + "Dark", + "Ice" + ], + "attack": 189, + "defense": 146, + "stamina": 146, + "height": 0.89, + "weight": 28, + "quick_moves": [ + "Ice Shard", + "Feint Attack" + ], + "charged_moves": [ + "Avalanche", + "Ice Punch", + "Foul Play" + ], + "family": 215, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 461, + "form": 800 + } + ], + "little": true + }, + "216": { + "name": "Teddiursa", + "pokedex_id": 216, + "default_form_id": 1265, + "forms": { + "1265": { + "name": "Normal", + "proto": "TEDDIURSA_NORMAL", + "evolutions": [ + { + "pokemon": 217, + "form": 1268 + } + ] + }, + "1266": { + "name": "Shadow", + "proto": "TEDDIURSA_SHADOW", + "evolutions": [ + { + "pokemon": 217, + "form": 1269 + } + ] + }, + "1267": { + "name": "Purified", + "proto": "TEDDIURSA_PURIFIED", + "evolutions": [ + { + "pokemon": 217, + "form": 1270 + } + ] + } + }, + "types": [ + "Normal" + ], + "attack": 142, + "defense": 93, + "stamina": 155, + "height": 0.61, + "weight": 8.8, + "quick_moves": [ + "Scratch", + "Lick" + ], + "charged_moves": [ + "Cross Chop", + "Crunch", + "Play Rough" + ], + "family": 216, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 217, + "form": 1268 + } + ], + "little": true + }, + "217": { + "name": "Ursaring", + "pokedex_id": 217, + "default_form_id": 1268, + "forms": { + "1268": { + "name": "Normal", + "proto": "URSARING_NORMAL" + }, + "1269": { + "name": "Shadow", + "proto": "URSARING_SHADOW" + }, + "1270": { + "name": "Purified", + "proto": "URSARING_PURIFIED" + } + }, + "types": [ + "Normal" + ], + "attack": 236, + "defense": 144, + "stamina": 207, + "height": 1.8, + "weight": 125.8, + "quick_moves": [ + "Metal Claw", + "Counter", + "Shadow Claw" + ], + "charged_moves": [ + "Close Combat", + "Hyper Beam", + "Play Rough" + ], + "family": 216, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "218": { + "name": "Slugma", + "pokedex_id": 218, + "default_form_id": 1271, + "forms": { + "1271": { + "name": "Normal", + "proto": "SLUGMA_NORMAL" + }, + "1272": { + "name": "Shadow", + "proto": "SLUGMA_SHADOW" + }, + "1273": { + "name": "Purified", + "proto": "SLUGMA_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Fire" + ], + "attack": 118, + "defense": 71, + "stamina": 120, + "height": 0.71, + "weight": 35, + "quick_moves": [ + "Ember", + "Rock Throw" + ], + "charged_moves": [ + "Flame Burst", + "Flame Charge", + "Rock Slide" + ], + "family": 218, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 219 + } + ], + "little": true + }, + "219": { + "name": "Magcargo", + "pokedex_id": 219, + "default_form_id": 1274, + "forms": { + "1274": { + "name": "Normal", + "proto": "MAGCARGO_NORMAL" + }, + "1275": { + "name": "Shadow", + "proto": "MAGCARGO_SHADOW" + }, + "1276": { + "name": "Purified", + "proto": "MAGCARGO_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Fire", + "Rock" + ], + "attack": 139, + "defense": 191, + "stamina": 137, + "height": 0.79, + "weight": 55, + "quick_moves": [ + "Ember", + "Rock Throw" + ], + "charged_moves": [ + "Heat Wave", + "Overheat", + "Stone Edge" + ], + "family": 218, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "220": { + "name": "Swinub", + "pokedex_id": 220, + "default_form_id": 1277, + "forms": { + "1277": { + "name": "Normal", + "proto": "SWINUB_NORMAL", + "evolutions": [ + { + "pokemon": 221, + "form": 1280 + } + ] + }, + "1278": { + "name": "Shadow", + "proto": "SWINUB_SHADOW", + "evolutions": [ + { + "pokemon": 221, + "form": 1281 + } + ] + }, + "1279": { + "name": "Purified", + "proto": "SWINUB_PURIFIED", + "evolutions": [ + { + "pokemon": 221, + "form": 1282 + } + ] + } + }, + "types": [ + "Ice", + "Ground" + ], + "attack": 90, + "defense": 69, + "stamina": 137, + "height": 0.41, + "weight": 6.5, + "quick_moves": [ + "Tackle", + "Powder Snow" + ], + "charged_moves": [ + "Icy Wind", + "Body Slam", + "Rock Slide" + ], + "family": 220, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 221, + "form": 1280 + } + ], + "little": true + }, + "221": { + "name": "Piloswine", + "pokedex_id": 221, + "default_form_id": 1280, + "forms": { + "1280": { + "name": "Normal", + "proto": "PILOSWINE_NORMAL", + "evolutions": [ + { + "pokemon": 473, + "form": 1838 + } + ] + }, + "1281": { + "name": "Shadow", + "proto": "PILOSWINE_SHADOW", + "evolutions": [ + { + "pokemon": 473, + "form": 1839 + } + ] + }, + "1282": { + "name": "Purified", + "proto": "PILOSWINE_PURIFIED", + "evolutions": [ + { + "pokemon": 473, + "form": 1840 + } + ] + } + }, + "types": [ + "Ice", + "Ground" + ], + "attack": 181, + "defense": 138, + "stamina": 225, + "height": 1.09, + "weight": 55.8, + "quick_moves": [ + "Ice Shard", + "Powder Snow" + ], + "charged_moves": [ + "Avalanche", + "Bulldoze", + "Stone Edge" + ], + "family": 220, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 473, + "form": 1838 + } + ] + }, + "222": { + "name": "Corsola", + "pokedex_id": 222, + "default_form_id": 1283, + "forms": { + "1283": { + "name": "Normal", + "proto": "CORSOLA_NORMAL" + }, + "1284": { + "name": "Shadow", + "proto": "CORSOLA_SHADOW" + }, + "1285": { + "name": "Purified", + "proto": "CORSOLA_PURIFIED" + }, + "2340": { + "name": "Galarian", + "proto": "CORSOLA_GALARIAN" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water", + "Rock" + ], + "attack": 118, + "defense": 156, + "stamina": 146, + "height": 0.61, + "weight": 5, + "quick_moves": [ + "Tackle", + "Bubble" + ], + "charged_moves": [ + "Rock Blast", + "Power Gem", + "Bubble Beam" + ], + "family": 222, + "flee_rate": 0.12, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "223": { + "name": "Remoraid", + "pokedex_id": 223, + "default_form_id": 1286, + "forms": { + "1286": { + "name": "Normal", + "proto": "REMORAID_NORMAL" + }, + "1287": { + "name": "Shadow", + "proto": "REMORAID_SHADOW" + }, + "1288": { + "name": "Purified", + "proto": "REMORAID_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water" + ], + "attack": 127, + "defense": 69, + "stamina": 111, + "height": 0.61, + "weight": 12, + "quick_moves": [ + "Water Gun", + "Mud Shot" + ], + "charged_moves": [ + "Aurora Beam", + "Water Pulse", + "Rock Blast" + ], + "family": 223, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 224 + } + ], + "little": true + }, + "224": { + "name": "Octillery", + "pokedex_id": 224, + "default_form_id": 1289, + "forms": { + "1289": { + "name": "Normal", + "proto": "OCTILLERY_NORMAL" + }, + "1290": { + "name": "Shadow", + "proto": "OCTILLERY_SHADOW" + }, + "1291": { + "name": "Purified", + "proto": "OCTILLERY_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water" + ], + "attack": 197, + "defense": 141, + "stamina": 181, + "height": 0.89, + "weight": 28.5, + "quick_moves": [ + "Water Gun", + "Mud Shot" + ], + "charged_moves": [ + "Gunk Shot", + "Water Pulse", + "Aurora Beam", + "Acid Spray", + "Octazooka" + ], + "family": 223, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "225": { + "name": "Delibird", + "pokedex_id": 225, + "default_form_id": 938, + "forms": { + "938": { + "name": "Normal", + "proto": "DELIBIRD_NORMAL" + }, + "939": { + "name": "Shadow", + "proto": "DELIBIRD_SHADOW" + }, + "940": { + "name": "Purified", + "proto": "DELIBIRD_PURIFIED" + }, + "2671": { + "name": "Winter 2020", + "proto": "DELIBIRD_WINTER_2020", + "is_costume": true + } + }, + "types": [ + "Ice", + "Flying" + ], + "attack": 128, + "defense": 90, + "stamina": 128, + "height": 0.89, + "weight": 16, + "quick_moves": [ + "Present" + ], + "charged_moves": [ + "Ice Punch", + "Icy Wind", + "Aerial Ace" + ], + "family": 225, + "flee_rate": 0.2, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "226": { + "name": "Mantine", + "pokedex_id": 226, + "default_form_id": 1292, + "forms": { + "1292": { + "name": "Normal", + "proto": "MANTINE_NORMAL" + }, + "1293": { + "name": "Shadow", + "proto": "MANTINE_SHADOW" + }, + "1294": { + "name": "Purified", + "proto": "MANTINE_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Water", + "Flying" + ], + "attack": 148, + "defense": 226, + "stamina": 163, + "height": 2.11, + "weight": 220, + "quick_moves": [ + "Bubble", + "Wing Attack", + "Bullet Seed" + ], + "charged_moves": [ + "Water Pulse", + "Ice Beam", + "Aerial Ace", + "Bubble Beam" + ], + "family": 226, + "flee_rate": 0.07, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "227": { + "name": "Skarmory", + "pokedex_id": 227, + "default_form_id": 1295, + "forms": { + "1295": { + "name": "Normal", + "proto": "SKARMORY_NORMAL" + }, + "1296": { + "name": "Shadow", + "proto": "SKARMORY_SHADOW" + }, + "1297": { + "name": "Purified", + "proto": "SKARMORY_PURIFIED" + } + }, + "types": [ + "Steel", + "Flying" + ], + "attack": 148, + "defense": 226, + "stamina": 163, + "height": 1.7, + "weight": 50.5, + "quick_moves": [ + "Steel Wing", + "Air Slash" + ], + "charged_moves": [ + "Brave Bird", + "Sky Attack", + "Flash Cannon" + ], + "family": 227, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "228": { + "name": "Houndour", + "pokedex_id": 228, + "default_form_id": 229, + "forms": { + "229": { + "name": "Normal", + "proto": "HOUNDOUR_NORMAL", + "evolutions": [ + { + "pokemon": 229, + "form": 232 + } + ] + }, + "230": { + "name": "Shadow", + "proto": "HOUNDOUR_SHADOW", + "evolutions": [ + { + "pokemon": 229, + "form": 233 + } + ] + }, + "231": { + "name": "Purified", + "proto": "HOUNDOUR_PURIFIED", + "evolutions": [ + { + "pokemon": 229, + "form": 234 + } + ] + } + }, + "types": [ + "Dark", + "Fire" + ], + "attack": 152, + "defense": 83, + "stamina": 128, + "height": 0.61, + "weight": 10.8, + "quick_moves": [ + "Feint Attack", + "Ember" + ], + "charged_moves": [ + "Crunch", + "Flamethrower", + "Dark Pulse" + ], + "family": 228, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 229, + "form": 232 + } + ], + "little": true + }, + "229": { + "name": "Houndoom", + "pokedex_id": 229, + "default_form_id": 232, + "forms": { + "232": { + "name": "Normal", + "proto": "HOUNDOOM_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "233": { + "name": "Shadow", + "proto": "HOUNDOOM_SHADOW" + }, + "234": { + "name": "Purified", + "proto": "HOUNDOOM_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Dark", + "Fire" + ], + "attack": 224, + "defense": 144, + "stamina": 181, + "height": 1.4, + "weight": 35, + "quick_moves": [ + "Snarl", + "Fire Fang" + ], + "charged_moves": [ + "Crunch", + "Fire Blast", + "Foul Play", + "Flamethrower" + ], + "family": 228, + "flee_rate": 0.06, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "temp_evolutions": { + "1": { + "attack": 289, + "defense": 194, + "stamina": 181, + "height": 1.9, + "weight": 49.5 + } + } + }, + "230": { + "name": "Kingdra", + "pokedex_id": 230, + "default_form_id": 1298, + "forms": { + "1298": { + "name": "Normal", + "proto": "KINGDRA_NORMAL" + }, + "1299": { + "name": "Shadow", + "proto": "KINGDRA_SHADOW" + }, + "1300": { + "name": "Purified", + "proto": "KINGDRA_PURIFIED" + } + }, + "types": [ + "Water", + "Dragon" + ], + "attack": 194, + "defense": 194, + "stamina": 181, + "height": 1.8, + "weight": 152, + "quick_moves": [ + "Waterfall", + "Dragon Breath" + ], + "charged_moves": [ + "Hydro Pump", + "Blizzard", + "Outrage", + "Octazooka" + ], + "family": 116, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "231": { + "name": "Phanpy", + "pokedex_id": 231, + "default_form_id": 1301, + "forms": { + "1301": { + "name": "Normal", + "proto": "PHANPY_NORMAL" + }, + "1302": { + "name": "Shadow", + "proto": "PHANPY_SHADOW" + }, + "1303": { + "name": "Purified", + "proto": "PHANPY_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Ground" + ], + "attack": 107, + "defense": 98, + "stamina": 207, + "height": 0.51, + "weight": 33.5, + "quick_moves": [ + "Tackle", + "Rock Smash" + ], + "charged_moves": [ + "Bulldoze", + "Rock Slide", + "Body Slam" + ], + "family": 231, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 232 + } + ], + "little": true + }, + "232": { + "name": "Donphan", + "pokedex_id": 232, + "default_form_id": 1304, + "forms": { + "1304": { + "name": "Normal", + "proto": "DONPHAN_NORMAL" + }, + "1305": { + "name": "Shadow", + "proto": "DONPHAN_SHADOW" + }, + "1306": { + "name": "Purified", + "proto": "DONPHAN_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Ground" + ], + "attack": 214, + "defense": 185, + "stamina": 207, + "height": 1.09, + "weight": 120, + "quick_moves": [ + "Tackle", + "Counter", + "Mud Slap", + "Charm" + ], + "charged_moves": [ + "Earthquake", + "Heavy Slam", + "Play Rough" + ], + "family": 231, + "flee_rate": 0.07, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "233": { + "name": "Porygon2", + "pokedex_id": 233, + "default_form_id": 680, + "forms": { + "680": { + "name": "Normal", + "proto": "PORYGON2_NORMAL", + "evolutions": [ + { + "pokemon": 474, + "form": 683 + } + ] + }, + "681": { + "name": "Shadow", + "proto": "PORYGON2_SHADOW", + "evolutions": [ + { + "pokemon": 474, + "form": 684 + } + ] + }, + "682": { + "name": "Purified", + "proto": "PORYGON2_PURIFIED", + "evolutions": [ + { + "pokemon": 474, + "form": 685 + } + ] + } + }, + "types": [ + "Normal" + ], + "attack": 198, + "defense": 180, + "stamina": 198, + "height": 0.61, + "weight": 32.5, + "quick_moves": [ + "Hidden Power", + "Charge Beam", + "Lock On" + ], + "charged_moves": [ + "Solar Beam", + "Hyper Beam", + "Zap Cannon", + "Tri Attack" + ], + "family": 137, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 474, + "form": 683 + } + ] + }, + "234": { + "name": "Stantler", + "pokedex_id": 234, + "default_form_id": 941, + "forms": { + "941": { + "name": "Normal", + "proto": "STANTLER_NORMAL" + }, + "942": { + "name": "Shadow", + "proto": "STANTLER_SHADOW" + }, + "943": { + "name": "Purified", + "proto": "STANTLER_PURIFIED" + } + }, + "types": [ + "Normal" + ], + "attack": 192, + "defense": 131, + "stamina": 177, + "height": 1.4, + "weight": 71.2, + "quick_moves": [ + "Tackle", + "Zen Headbutt" + ], + "charged_moves": [ + "Stomp", + "Wild Charge", + "Megahorn" + ], + "family": 234, + "flee_rate": 0.08, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto" + }, + "235": { + "name": "Smeargle", + "pokedex_id": 235, + "default_form_id": 1307, + "forms": { + "1307": { + "name": "Normal", + "proto": "SMEARGLE_NORMAL" + }, + "1308": { + "name": "Shadow", + "proto": "SMEARGLE_SHADOW" + }, + "1309": { + "name": "Purified", + "proto": "SMEARGLE_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Normal" + ], + "attack": 40, + "defense": 83, + "stamina": 146, + "height": 1.19, + "weight": 58, + "quick_moves": [], + "charged_moves": [], + "family": 235, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_candy": 9999999, + "gym_defender_eligible": true + }, + "236": { + "name": "Tyrogue", + "pokedex_id": 236, + "default_form_id": 1310, + "forms": { + "1310": { + "name": "Normal", + "proto": "TYROGUE_NORMAL" + }, + "1311": { + "name": "Shadow", + "proto": "TYROGUE_SHADOW" + }, + "1312": { + "name": "Purified", + "proto": "TYROGUE_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Fighting" + ], + "attack": 64, + "defense": 64, + "stamina": 111, + "height": 0.71, + "weight": 21, + "quick_moves": [ + "Rock Smash", + "Tackle" + ], + "charged_moves": [ + "Brick Break", + "Rock Slide", + "Low Sweep" + ], + "family": 236, + "flee_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 106 + }, + { + "pokemon": 107 + }, + { + "pokemon": 237 + } + ], + "little": true + }, + "237": { + "name": "Hitmontop", + "pokedex_id": 237, + "default_form_id": 1313, + "forms": { + "1313": { + "name": "Normal", + "proto": "HITMONTOP_NORMAL" + }, + "1314": { + "name": "Shadow", + "proto": "HITMONTOP_SHADOW" + }, + "1315": { + "name": "Purified", + "proto": "HITMONTOP_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Fighting" + ], + "attack": 173, + "defense": 207, + "stamina": 137, + "height": 1.4, + "weight": 48, + "quick_moves": [ + "Rock Smash", + "Counter" + ], + "charged_moves": [ + "Close Combat", + "Gyro Ball", + "Stone Edge" + ], + "family": 236, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "238": { + "name": "Smoochum", + "pokedex_id": 238, + "default_form_id": 1316, + "forms": { + "1316": { + "name": "Normal", + "proto": "SMOOCHUM_NORMAL" + }, + "1317": { + "name": "Shadow", + "proto": "SMOOCHUM_SHADOW" + }, + "1318": { + "name": "Purified", + "proto": "SMOOCHUM_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Ice", + "Psychic" + ], + "attack": 153, + "defense": 91, + "stamina": 128, + "height": 0.41, + "weight": 6, + "quick_moves": [ + "Powder Snow", + "Pound" + ], + "charged_moves": [ + "Ice Beam", + "Ice Punch", + "Psyshock" + ], + "family": 124, + "flee_rate": 0.2, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 5, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 124 + } + ], + "little": true + }, + "239": { + "name": "Elekid", + "pokedex_id": 239, + "default_form_id": 1319, + "forms": { + "1319": { + "name": "Normal", + "proto": "ELEKID_NORMAL" + }, + "1320": { + "name": "Shadow", + "proto": "ELEKID_SHADOW" + }, + "1321": { + "name": "Purified", + "proto": "ELEKID_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Electric" + ], + "attack": 135, + "defense": 101, + "stamina": 128, + "height": 0.61, + "weight": 23.5, + "quick_moves": [ + "Thunder Shock", + "Low Kick" + ], + "charged_moves": [ + "Thunder Punch", + "Brick Break", + "Discharge" + ], + "family": 125, + "flee_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 5, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 125 + } + ], + "little": true + }, + "240": { + "name": "Magby", + "pokedex_id": 240, + "default_form_id": 1322, + "forms": { + "1322": { + "name": "Normal", + "proto": "MAGBY_NORMAL" + }, + "1323": { + "name": "Shadow", + "proto": "MAGBY_SHADOW" + }, + "1324": { + "name": "Purified", + "proto": "MAGBY_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Fire" + ], + "attack": 151, + "defense": 99, + "stamina": 128, + "height": 0.71, + "weight": 21.4, + "quick_moves": [ + "Ember", + "Karate Chop" + ], + "charged_moves": [ + "Brick Break", + "Fire Punch", + "Flame Burst" + ], + "family": 126, + "flee_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 5, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 126 + } + ], + "little": true + }, + "241": { + "name": "Miltank", + "pokedex_id": 241, + "default_form_id": 1325, + "forms": { + "1325": { + "name": "Normal", + "proto": "MILTANK_NORMAL" + }, + "1326": { + "name": "Shadow", + "proto": "MILTANK_SHADOW" + }, + "1327": { + "name": "Purified", + "proto": "MILTANK_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Normal" + ], + "attack": 157, + "defense": 193, + "stamina": 216, + "height": 1.19, + "weight": 75.5, + "quick_moves": [ + "Tackle", + "Zen Headbutt" + ], + "charged_moves": [ + "Stomp", + "Body Slam", + "Gyro Ball", + "Thunderbolt", + "Ice Beam" + ], + "family": 241, + "flee_rate": 0.08, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "242": { + "name": "Blissey", + "pokedex_id": 242, + "default_form_id": 1328, + "forms": { + "1328": { + "name": "Normal", + "proto": "BLISSEY_NORMAL" + }, + "1329": { + "name": "Shadow", + "proto": "BLISSEY_SHADOW" + }, + "1330": { + "name": "Purified", + "proto": "BLISSEY_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Normal" + ], + "attack": 129, + "defense": 169, + "stamina": 496, + "height": 1.5, + "weight": 46.8, + "quick_moves": [ + "Pound", + "Zen Headbutt" + ], + "charged_moves": [ + "Psychic", + "Hyper Beam", + "Dazzling Gleam" + ], + "family": 113, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "243": { + "name": "Raikou", + "pokedex_id": 243, + "default_form_id": 1331, + "forms": { + "1331": { + "name": "Normal", + "proto": "RAIKOU_NORMAL" + }, + "1332": { + "name": "Shadow", + "proto": "RAIKOU_SHADOW" + }, + "1333": { + "name": "Purified", + "proto": "RAIKOU_PURIFIED" + } + }, + "types": [ + "Electric" + ], + "attack": 241, + "defense": 195, + "stamina": 207, + "height": 1.91, + "weight": 178, + "quick_moves": [ + "Thunder Shock", + "Volt Switch" + ], + "charged_moves": [ + "Thunder", + "Thunderbolt", + "Wild Charge", + "Shadow Ball" + ], + "family": 243, + "flee_rate": 0.04, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 2, + "generation": "Johto" + }, + "244": { + "name": "Entei", + "pokedex_id": 244, + "default_form_id": 1334, + "forms": { + "1334": { + "name": "Normal", + "proto": "ENTEI_NORMAL" + }, + "1335": { + "name": "Shadow", + "proto": "ENTEI_SHADOW" + }, + "1336": { + "name": "Purified", + "proto": "ENTEI_PURIFIED" + } + }, + "types": [ + "Fire" + ], + "attack": 235, + "defense": 171, + "stamina": 251, + "height": 2.11, + "weight": 198, + "quick_moves": [ + "Fire Spin", + "Fire Fang" + ], + "charged_moves": [ + "Flamethrower", + "Fire Blast", + "Overheat", + "Iron Head", + "Flame Charge" + ], + "family": 244, + "flee_rate": 0.04, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 2, + "generation": "Johto" + }, + "245": { + "name": "Suicune", + "pokedex_id": 245, + "default_form_id": 1337, + "forms": { + "1337": { + "name": "Normal", + "proto": "SUICUNE_NORMAL" + }, + "1338": { + "name": "Shadow", + "proto": "SUICUNE_SHADOW" + }, + "1339": { + "name": "Purified", + "proto": "SUICUNE_PURIFIED" + } + }, + "types": [ + "Water" + ], + "attack": 180, + "defense": 235, + "stamina": 225, + "height": 2.01, + "weight": 187, + "quick_moves": [ + "Extrasensory", + "Snarl", + "Ice Fang" + ], + "charged_moves": [ + "Hydro Pump", + "Bubble Beam", + "Water Pulse", + "Ice Beam" + ], + "family": 245, + "flee_rate": 0.04, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 2, + "generation": "Johto" + }, + "246": { + "name": "Larvitar", + "pokedex_id": 246, + "default_form_id": 313, + "forms": { + "313": { + "name": "Normal", + "proto": "LARVITAR_NORMAL", + "evolutions": [ + { + "pokemon": 247, + "form": 316 + } + ] + }, + "314": { + "name": "Shadow", + "proto": "LARVITAR_SHADOW", + "evolutions": [ + { + "pokemon": 247, + "form": 317 + } + ] + }, + "315": { + "name": "Purified", + "proto": "LARVITAR_PURIFIED", + "evolutions": [ + { + "pokemon": 247, + "form": 318 + } + ] + } + }, + "types": [ + "Rock", + "Ground" + ], + "attack": 115, + "defense": 93, + "stamina": 137, + "height": 0.61, + "weight": 72, + "quick_moves": [ + "Bite", + "Rock Smash" + ], + "charged_moves": [ + "Stomp", + "Crunch", + "Ancient Power" + ], + "family": 246, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 247, + "form": 316 + } + ], + "little": true + }, + "247": { + "name": "Pupitar", + "pokedex_id": 247, + "default_form_id": 316, + "forms": { + "316": { + "name": "Normal", + "proto": "PUPITAR_NORMAL", + "evolutions": [ + { + "pokemon": 248, + "form": 319 + } + ] + }, + "317": { + "name": "Shadow", + "proto": "PUPITAR_SHADOW", + "evolutions": [ + { + "pokemon": 248, + "form": 320 + } + ] + }, + "318": { + "name": "Purified", + "proto": "PUPITAR_PURIFIED", + "evolutions": [ + { + "pokemon": 248, + "form": 321 + } + ] + } + }, + "types": [ + "Rock", + "Ground" + ], + "attack": 155, + "defense": 133, + "stamina": 172, + "height": 1.19, + "weight": 152, + "quick_moves": [ + "Bite", + "Rock Smash" + ], + "charged_moves": [ + "Dig", + "Crunch", + "Ancient Power" + ], + "family": 246, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "evolutions": [ + { + "pokemon": 248, + "form": 319 + } + ] + }, + "248": { + "name": "Tyranitar", + "pokedex_id": 248, + "default_form_id": 319, + "forms": { + "319": { + "name": "Normal", + "proto": "TYRANITAR_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "320": { + "name": "Shadow", + "proto": "TYRANITAR_SHADOW" + }, + "321": { + "name": "Purified", + "proto": "TYRANITAR_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Rock", + "Dark" + ], + "attack": 251, + "defense": 207, + "stamina": 225, + "height": 2.01, + "weight": 202, + "quick_moves": [ + "Bite", + "Iron Tail" + ], + "charged_moves": [ + "Fire Blast", + "Crunch", + "Stone Edge" + ], + "family": 246, + "flee_rate": 0.04, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 2, + "generation": "Johto", + "temp_evolutions": { + "1": { + "attack": 309, + "defense": 276, + "stamina": 225, + "unreleased": true + } + } + }, + "249": { + "name": "Lugia", + "pokedex_id": 249, + "default_form_id": 1340, + "forms": { + "1340": { + "name": "Normal", + "proto": "LUGIA_NORMAL" + }, + "1341": { + "name": "Shadow", + "proto": "LUGIA_SHADOW" + }, + "1342": { + "name": "Purified", + "proto": "LUGIA_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Psychic", + "Flying" + ], + "attack": 193, + "defense": 310, + "stamina": 235, + "height": 5.21, + "weight": 216, + "quick_moves": [ + "Extrasensory", + "Dragon Tail" + ], + "charged_moves": [ + "Sky Attack", + "Hydro Pump", + "Futuresight" + ], + "family": 249, + "flee_rate": 0.04, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "250": { + "name": "Ho Oh", + "pokedex_id": 250, + "default_form_id": 1343, + "forms": { + "1343": { + "name": "Normal", + "proto": "HO_OH_NORMAL" + }, + "1344": { + "name": "Shadow", + "proto": "HO_OH_SHADOW" + }, + "1345": { + "name": "Purified", + "proto": "HO_OH_PURIFIED" + } + }, + "types": [ + "Fire", + "Flying" + ], + "attack": 239, + "defense": 244, + "stamina": 214, + "height": 3.81, + "weight": 199, + "quick_moves": [ + "Extrasensory", + "Steel Wing", + "Hidden Power", + "Incinerate" + ], + "charged_moves": [ + "Brave Bird", + "Fire Blast", + "Solar Beam" + ], + "family": 250, + "flee_rate": 0.04, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 2, + "generation": "Johto" + }, + "251": { + "name": "Celebi", + "pokedex_id": 251, + "default_form_id": 1346, + "forms": { + "1346": { + "name": "Normal", + "proto": "CELEBI_NORMAL" + }, + "1347": { + "name": "Shadow", + "proto": "CELEBI_SHADOW" + }, + "1348": { + "name": "Purified", + "proto": "CELEBI_PURIFIED" + } + }, + "gen_id": 2, + "generation": "Johto", + "types": [ + "Psychic", + "Grass" + ], + "attack": 210, + "defense": 210, + "stamina": 225, + "height": 0.61, + "weight": 5, + "quick_moves": [ + "Confusion", + "Charge Beam" + ], + "charged_moves": [ + "Hyper Beam", + "Psychic", + "Dazzling Gleam", + "Seed Bomb", + "Leaf Storm" + ], + "family": 251, + "capture_rate": 100, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "252": { + "name": "Treecko", + "pokedex_id": 252, + "default_form_id": 1349, + "forms": { + "1349": { + "name": "Normal", + "proto": "TREECKO_NORMAL" + }, + "1350": { + "name": "Shadow", + "proto": "TREECKO_SHADOW" + }, + "1351": { + "name": "Purified", + "proto": "TREECKO_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Grass" + ], + "attack": 124, + "defense": 94, + "stamina": 120, + "height": 0.51, + "weight": 5, + "quick_moves": [ + "Pound", + "Bullet Seed" + ], + "charged_moves": [ + "Energy Ball", + "Aerial Ace", + "Grass Knot" + ], + "family": 252, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 253 + } + ], + "little": true + }, + "253": { + "name": "Grovyle", + "pokedex_id": 253, + "default_form_id": 1352, + "forms": { + "1352": { + "name": "Normal", + "proto": "GROVYLE_NORMAL" + }, + "1353": { + "name": "Shadow", + "proto": "GROVYLE_SHADOW" + }, + "1354": { + "name": "Purified", + "proto": "GROVYLE_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Grass" + ], + "attack": 172, + "defense": 120, + "stamina": 137, + "height": 0.89, + "weight": 21.6, + "quick_moves": [ + "Quick Attack", + "Bullet Seed" + ], + "charged_moves": [ + "Leaf Blade", + "Aerial Ace", + "Grass Knot" + ], + "family": 252, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 254 + } + ] + }, + "254": { + "name": "Sceptile", + "pokedex_id": 254, + "default_form_id": 1355, + "forms": { + "1355": { + "name": "Normal", + "proto": "SCEPTILE_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1356": { + "name": "Shadow", + "proto": "SCEPTILE_SHADOW" + }, + "1357": { + "name": "Purified", + "proto": "SCEPTILE_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Grass" + ], + "attack": 223, + "defense": 169, + "stamina": 172, + "height": 1.7, + "weight": 52.2, + "quick_moves": [ + "Fury Cutter", + "Bullet Seed" + ], + "charged_moves": [ + "Leaf Blade", + "Aerial Ace", + "Earthquake", + "Dragon Claw" + ], + "family": 252, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "temp_evolutions": { + "1": { + "attack": 320, + "defense": 186, + "stamina": 172, + "unreleased": true, + "types": [ + "Grass", + "Dragon" + ] + } + } + }, + "255": { + "name": "Torchic", + "pokedex_id": 255, + "default_form_id": 1358, + "forms": { + "1358": { + "name": "Normal", + "proto": "TORCHIC_NORMAL", + "evolutions": [ + { + "pokemon": 256, + "form": 1361 + } + ] + }, + "1359": { + "name": "Shadow", + "proto": "TORCHIC_SHADOW", + "evolutions": [ + { + "pokemon": 256, + "form": 1362 + } + ] + }, + "1360": { + "name": "Purified", + "proto": "TORCHIC_PURIFIED", + "evolutions": [ + { + "pokemon": 256, + "form": 1363 + } + ] + } + }, + "types": [ + "Fire" + ], + "attack": 130, + "defense": 87, + "stamina": 128, + "height": 0.41, + "weight": 2.5, + "quick_moves": [ + "Scratch", + "Ember" + ], + "charged_moves": [ + "Flame Charge", + "Flamethrower", + "Rock Tomb" + ], + "family": 255, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 256, + "form": 1361 + } + ], + "little": true + }, + "256": { + "name": "Combusken", + "pokedex_id": 256, + "default_form_id": 1361, + "forms": { + "1361": { + "name": "Normal", + "proto": "COMBUSKEN_NORMAL", + "evolutions": [ + { + "pokemon": 257, + "form": 1364 + } + ] + }, + "1362": { + "name": "Shadow", + "proto": "COMBUSKEN_SHADOW", + "evolutions": [ + { + "pokemon": 257, + "form": 1365 + } + ] + }, + "1363": { + "name": "Purified", + "proto": "COMBUSKEN_PURIFIED", + "evolutions": [ + { + "pokemon": 257, + "form": 1366 + } + ] + } + }, + "types": [ + "Fire", + "Fighting" + ], + "attack": 163, + "defense": 115, + "stamina": 155, + "height": 0.89, + "weight": 19.5, + "quick_moves": [ + "Peck", + "Ember" + ], + "charged_moves": [ + "Flame Charge", + "Flamethrower", + "Rock Slide" + ], + "family": 255, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 257, + "form": 1364 + } + ] + }, + "257": { + "name": "Blaziken", + "pokedex_id": 257, + "default_form_id": 1364, + "forms": { + "1364": { + "name": "Normal", + "proto": "BLAZIKEN_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1365": { + "name": "Shadow", + "proto": "BLAZIKEN_SHADOW" + }, + "1366": { + "name": "Purified", + "proto": "BLAZIKEN_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Fire", + "Fighting" + ], + "attack": 240, + "defense": 141, + "stamina": 190, + "height": 1.91, + "weight": 52, + "quick_moves": [ + "Counter", + "Fire Spin" + ], + "charged_moves": [ + "Focus Blast", + "Overheat", + "Brave Bird", + "Blaze Kick" + ], + "family": 255, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 329, + "defense": 168, + "stamina": 190, + "unreleased": true + } + } + }, + "258": { + "name": "Mudkip", + "pokedex_id": 258, + "default_form_id": 205, + "forms": { + "205": { + "name": "Normal", + "proto": "MUDKIP_NORMAL", + "evolutions": [ + { + "pokemon": 259, + "form": 208 + } + ] + }, + "206": { + "name": "Shadow", + "proto": "MUDKIP_SHADOW", + "evolutions": [ + { + "pokemon": 259, + "form": 209 + } + ] + }, + "207": { + "name": "Purified", + "proto": "MUDKIP_PURIFIED", + "evolutions": [ + { + "pokemon": 259, + "form": 210 + } + ] + } + }, + "types": [ + "Water" + ], + "attack": 126, + "defense": 93, + "stamina": 137, + "height": 0.41, + "weight": 7.6, + "quick_moves": [ + "Tackle", + "Water Gun" + ], + "charged_moves": [ + "Dig", + "Sludge", + "Stomp" + ], + "family": 258, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 259, + "form": 208 + } + ], + "little": true + }, + "259": { + "name": "Marshtomp", + "pokedex_id": 259, + "default_form_id": 208, + "forms": { + "208": { + "name": "Normal", + "proto": "MARSHTOMP_NORMAL", + "evolutions": [ + { + "pokemon": 260, + "form": 211 + } + ] + }, + "209": { + "name": "Shadow", + "proto": "MARSHTOMP_SHADOW", + "evolutions": [ + { + "pokemon": 260, + "form": 212 + } + ] + }, + "210": { + "name": "Purified", + "proto": "MARSHTOMP_PURIFIED", + "evolutions": [ + { + "pokemon": 260, + "form": 213 + } + ] + } + }, + "types": [ + "Water", + "Ground" + ], + "attack": 156, + "defense": 133, + "stamina": 172, + "height": 0.71, + "weight": 28, + "quick_moves": [ + "Mud Shot", + "Water Gun" + ], + "charged_moves": [ + "Mud Bomb", + "Sludge", + "Surf" + ], + "family": 258, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 260, + "form": 211 + } + ] + }, + "260": { + "name": "Swampert", + "pokedex_id": 260, + "default_form_id": 211, + "forms": { + "211": { + "name": "Normal", + "proto": "SWAMPERT_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "212": { + "name": "Shadow", + "proto": "SWAMPERT_SHADOW" + }, + "213": { + "name": "Purified", + "proto": "SWAMPERT_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Water", + "Ground" + ], + "attack": 208, + "defense": 175, + "stamina": 225, + "height": 1.5, + "weight": 81.9, + "quick_moves": [ + "Mud Shot", + "Water Gun" + ], + "charged_moves": [ + "Earthquake", + "Sludge Wave", + "Surf", + "Muddy Water" + ], + "family": 258, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 283, + "defense": 218, + "stamina": 225, + "unreleased": true + } + } + }, + "261": { + "name": "Poochyena", + "pokedex_id": 261, + "default_form_id": 1367, + "forms": { + "1367": { + "name": "Normal", + "proto": "POOCHYENA_NORMAL", + "evolutions": [ + { + "pokemon": 262, + "form": 1370 + } + ] + }, + "1368": { + "name": "Shadow", + "proto": "POOCHYENA_SHADOW", + "evolutions": [ + { + "pokemon": 262, + "form": 1371 + } + ] + }, + "1369": { + "name": "Purified", + "proto": "POOCHYENA_PURIFIED", + "evolutions": [ + { + "pokemon": 262, + "form": 1372 + } + ] + } + }, + "types": [ + "Dark" + ], + "attack": 96, + "defense": 61, + "stamina": 111, + "height": 0.51, + "weight": 13.6, + "quick_moves": [ + "Tackle", + "Snarl" + ], + "charged_moves": [ + "Crunch", + "Dig", + "Poison Fang" + ], + "family": 261, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 262, + "form": 1370 + } + ], + "little": true + }, + "262": { + "name": "Mightyena", + "pokedex_id": 262, + "default_form_id": 1370, + "forms": { + "1370": { + "name": "Normal", + "proto": "MIGHTYENA_NORMAL" + }, + "1371": { + "name": "Shadow", + "proto": "MIGHTYENA_SHADOW" + }, + "1372": { + "name": "Purified", + "proto": "MIGHTYENA_PURIFIED" + } + }, + "types": [ + "Dark" + ], + "attack": 171, + "defense": 132, + "stamina": 172, + "height": 0.99, + "weight": 37, + "quick_moves": [ + "Bite", + "Fire Fang", + "Thunder Fang", + "Ice Fang" + ], + "charged_moves": [ + "Crunch", + "Play Rough", + "Poison Fang" + ], + "family": 261, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn" + }, + "263": { + "name": "Zigzagoon", + "pokedex_id": 263, + "default_form_id": 945, + "forms": { + "945": { + "name": "Normal", + "proto": "ZIGZAGOON_NORMAL", + "evolutions": [ + { + "pokemon": 264, + "form": 947 + } + ] + }, + "946": { + "name": "Galarian", + "proto": "ZIGZAGOON_GALARIAN", + "quick_moves": [ + "Tackle", + "Take Down" + ], + "charged_moves": [ + "Dig", + "Body Slam", + "Swift" + ], + "types": [ + "Dark", + "Normal" + ], + "evolutions": [ + { + "pokemon": 264, + "form": 948 + } + ] + }, + "1373": { + "name": "Shadow", + "proto": "ZIGZAGOON_SHADOW", + "evolutions": [ + { + "pokemon": 264, + "form": 1375 + } + ] + }, + "1374": { + "name": "Purified", + "proto": "ZIGZAGOON_PURIFIED", + "evolutions": [ + { + "pokemon": 264, + "form": 1376 + } + ] + } + }, + "types": [ + "Normal" + ], + "attack": 58, + "defense": 80, + "stamina": 116, + "height": 0.4, + "weight": 17.5, + "quick_moves": [ + "Tackle", + "Rock Smash" + ], + "charged_moves": [ + "Dig", + "Grass Knot", + "Thunderbolt" + ], + "family": 263, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 264, + "form": 947 + } + ], + "little": true + }, + "264": { + "name": "Linoone", + "pokedex_id": 264, + "default_form_id": 947, + "forms": { + "947": { + "name": "Normal", + "proto": "LINOONE_NORMAL" + }, + "948": { + "name": "Galarian", + "proto": "LINOONE_GALARIAN", + "quick_moves": [ + "Snarl", + "Lick" + ], + "charged_moves": [ + "Dig", + "Body Slam", + "Gunk Shot" + ], + "types": [ + "Dark", + "Normal" + ], + "evolutions": [ + { + "pokemon": 862, + "form": 2501 + } + ] + }, + "1375": { + "name": "Shadow", + "proto": "LINOONE_SHADOW" + }, + "1376": { + "name": "Purified", + "proto": "LINOONE_PURIFIED" + } + }, + "types": [ + "Normal" + ], + "attack": 142, + "defense": 128, + "stamina": 186, + "height": 0.5, + "weight": 32.5, + "quick_moves": [ + "Shadow Claw", + "Tackle" + ], + "charged_moves": [ + "Dig", + "Grass Knot", + "Thunder" + ], + "family": 263, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn" + }, + "265": { + "name": "Wurmple", + "pokedex_id": 265, + "default_form_id": 600, + "forms": { + "600": { + "name": "Normal", + "proto": "WURMPLE_NORMAL" + }, + "1377": { + "name": "Shadow", + "proto": "WURMPLE_SHADOW" + }, + "1378": { + "name": "Purified", + "proto": "WURMPLE_PURIFIED" + }, + "2327": { + "name": "Spring 2020", + "proto": "WURMPLE_SPRING_2020" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug" + ], + "attack": 75, + "defense": 59, + "stamina": 128, + "height": 0.3, + "weight": 3.6, + "quick_moves": [ + "Tackle", + "Bug Bite" + ], + "charged_moves": [ + "Struggle" + ], + "family": 265, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 266 + }, + { + "pokemon": 268 + } + ], + "little": true + }, + "266": { + "name": "Silcoon", + "pokedex_id": 266, + "default_form_id": 1379, + "forms": { + "1379": { + "name": "Normal", + "proto": "SILCOON_NORMAL" + }, + "1380": { + "name": "Shadow", + "proto": "SILCOON_SHADOW" + }, + "1381": { + "name": "Purified", + "proto": "SILCOON_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug" + ], + "attack": 60, + "defense": 77, + "stamina": 137, + "height": 0.61, + "weight": 10, + "quick_moves": [ + "Poison Sting", + "Bug Bite" + ], + "charged_moves": [ + "Struggle" + ], + "family": 265, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 267 + } + ] + }, + "267": { + "name": "Beautifly", + "pokedex_id": 267, + "default_form_id": 1382, + "forms": { + "1382": { + "name": "Normal", + "proto": "BEAUTIFLY_NORMAL" + }, + "1383": { + "name": "Shadow", + "proto": "BEAUTIFLY_SHADOW" + }, + "1384": { + "name": "Purified", + "proto": "BEAUTIFLY_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug", + "Flying" + ], + "attack": 189, + "defense": 98, + "stamina": 155, + "height": 0.99, + "weight": 28.4, + "quick_moves": [ + "Struggle Bug", + "Infestation" + ], + "charged_moves": [ + "Silver Wind", + "Air Cutter", + "Bug Buzz" + ], + "family": 265, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "268": { + "name": "Cascoon", + "pokedex_id": 268, + "default_form_id": 1385, + "forms": { + "1385": { + "name": "Normal", + "proto": "CASCOON_NORMAL" + }, + "1386": { + "name": "Shadow", + "proto": "CASCOON_SHADOW" + }, + "1387": { + "name": "Purified", + "proto": "CASCOON_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug" + ], + "attack": 60, + "defense": 77, + "stamina": 137, + "height": 0.71, + "weight": 11.5, + "quick_moves": [ + "Poison Sting", + "Bug Bite" + ], + "charged_moves": [ + "Struggle" + ], + "family": 265, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 269 + } + ] + }, + "269": { + "name": "Dustox", + "pokedex_id": 269, + "default_form_id": 1388, + "forms": { + "1388": { + "name": "Normal", + "proto": "DUSTOX_NORMAL" + }, + "1389": { + "name": "Shadow", + "proto": "DUSTOX_SHADOW" + }, + "1390": { + "name": "Purified", + "proto": "DUSTOX_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug", + "Poison" + ], + "attack": 98, + "defense": 162, + "stamina": 155, + "height": 1.19, + "weight": 31.6, + "quick_moves": [ + "Struggle Bug", + "Confusion" + ], + "charged_moves": [ + "Silver Wind", + "Sludge Bomb", + "Bug Buzz" + ], + "family": 265, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "270": { + "name": "Lotad", + "pokedex_id": 270, + "default_form_id": 1391, + "forms": { + "1391": { + "name": "Normal", + "proto": "LOTAD_NORMAL" + }, + "1392": { + "name": "Shadow", + "proto": "LOTAD_SHADOW" + }, + "1393": { + "name": "Purified", + "proto": "LOTAD_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water", + "Grass" + ], + "attack": 71, + "defense": 77, + "stamina": 120, + "height": 0.51, + "weight": 2.6, + "quick_moves": [ + "Water Gun", + "Razor Leaf" + ], + "charged_moves": [ + "Bubble Beam", + "Energy Ball" + ], + "family": 270, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 271 + } + ], + "little": true + }, + "271": { + "name": "Lombre", + "pokedex_id": 271, + "default_form_id": 1394, + "forms": { + "1394": { + "name": "Normal", + "proto": "LOMBRE_NORMAL" + }, + "1395": { + "name": "Shadow", + "proto": "LOMBRE_SHADOW" + }, + "1396": { + "name": "Purified", + "proto": "LOMBRE_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water", + "Grass" + ], + "attack": 112, + "defense": 119, + "stamina": 155, + "height": 1.19, + "weight": 32.5, + "quick_moves": [ + "Bubble", + "Razor Leaf" + ], + "charged_moves": [ + "Bubble Beam", + "Ice Beam", + "Grass Knot" + ], + "family": 270, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 272 + } + ] + }, + "272": { + "name": "Ludicolo", + "pokedex_id": 272, + "default_form_id": 1397, + "forms": { + "1397": { + "name": "Normal", + "proto": "LUDICOLO_NORMAL" + }, + "1398": { + "name": "Shadow", + "proto": "LUDICOLO_SHADOW" + }, + "1399": { + "name": "Purified", + "proto": "LUDICOLO_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water", + "Grass" + ], + "attack": 173, + "defense": 176, + "stamina": 190, + "height": 1.5, + "weight": 55, + "quick_moves": [ + "Bubble", + "Razor Leaf" + ], + "charged_moves": [ + "Hydro Pump", + "Blizzard", + "Solar Beam", + "Ice Beam", + "Energy Ball", + "Leaf Storm" + ], + "family": 270, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "273": { + "name": "Seedot", + "pokedex_id": 273, + "default_form_id": 625, + "forms": { + "625": { + "name": "Normal", + "proto": "SEEDOT_NORMAL", + "evolutions": [ + { + "pokemon": 274, + "form": 628 + } + ] + }, + "626": { + "name": "Shadow", + "proto": "SEEDOT_SHADOW", + "evolutions": [ + { + "pokemon": 274, + "form": 629 + } + ] + }, + "627": { + "name": "Purified", + "proto": "SEEDOT_PURIFIED", + "evolutions": [ + { + "pokemon": 274, + "form": 630 + } + ] + } + }, + "types": [ + "Grass" + ], + "attack": 71, + "defense": 77, + "stamina": 120, + "height": 0.51, + "weight": 4, + "quick_moves": [ + "Bullet Seed", + "Quick Attack" + ], + "charged_moves": [ + "Energy Ball", + "Grass Knot", + "Foul Play" + ], + "family": 273, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 274, + "form": 628 + } + ], + "little": true + }, + "274": { + "name": "Nuzleaf", + "pokedex_id": 274, + "default_form_id": 628, + "forms": { + "628": { + "name": "Normal", + "proto": "NUZLEAF_NORMAL", + "evolutions": [ + { + "pokemon": 275, + "form": 631 + } + ] + }, + "629": { + "name": "Shadow", + "proto": "NUZLEAF_SHADOW", + "evolutions": [ + { + "pokemon": 275, + "form": 632 + } + ] + }, + "630": { + "name": "Purified", + "proto": "NUZLEAF_PURIFIED", + "evolutions": [ + { + "pokemon": 275, + "form": 633 + } + ] + } + }, + "types": [ + "Grass", + "Dark" + ], + "attack": 134, + "defense": 78, + "stamina": 172, + "height": 0.99, + "weight": 28, + "quick_moves": [ + "Razor Leaf", + "Feint Attack" + ], + "charged_moves": [ + "Leaf Blade", + "Grass Knot", + "Foul Play" + ], + "family": 273, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 275, + "form": 631 + } + ] + }, + "275": { + "name": "Shiftry", + "pokedex_id": 275, + "default_form_id": 631, + "forms": { + "631": { + "name": "Normal", + "proto": "SHIFTRY_NORMAL" + }, + "632": { + "name": "Shadow", + "proto": "SHIFTRY_SHADOW" + }, + "633": { + "name": "Purified", + "proto": "SHIFTRY_PURIFIED" + } + }, + "types": [ + "Grass", + "Dark" + ], + "attack": 200, + "defense": 121, + "stamina": 207, + "height": 1.3, + "weight": 59.6, + "quick_moves": [ + "Razor Leaf", + "Feint Attack", + "Snarl" + ], + "charged_moves": [ + "Leaf Blade", + "Hurricane", + "Foul Play", + "Leaf Tornado" + ], + "family": 273, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn" + }, + "276": { + "name": "Taillow", + "pokedex_id": 276, + "default_form_id": 1400, + "forms": { + "1400": { + "name": "Normal", + "proto": "TAILLOW_NORMAL" + }, + "1401": { + "name": "Shadow", + "proto": "TAILLOW_SHADOW" + }, + "1402": { + "name": "Purified", + "proto": "TAILLOW_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal", + "Flying" + ], + "attack": 106, + "defense": 61, + "stamina": 120, + "height": 0.3, + "weight": 2.3, + "quick_moves": [ + "Peck", + "Quick Attack" + ], + "charged_moves": [ + "Aerial Ace" + ], + "family": 276, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 277 + } + ], + "little": true + }, + "277": { + "name": "Swellow", + "pokedex_id": 277, + "default_form_id": 1403, + "forms": { + "1403": { + "name": "Normal", + "proto": "SWELLOW_NORMAL" + }, + "1404": { + "name": "Shadow", + "proto": "SWELLOW_SHADOW" + }, + "1405": { + "name": "Purified", + "proto": "SWELLOW_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal", + "Flying" + ], + "attack": 185, + "defense": 124, + "stamina": 155, + "height": 0.71, + "weight": 19.8, + "quick_moves": [ + "Wing Attack", + "Steel Wing" + ], + "charged_moves": [ + "Aerial Ace", + "Brave Bird", + "Sky Attack" + ], + "family": 276, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "278": { + "name": "Wingull", + "pokedex_id": 278, + "default_form_id": 1406, + "forms": { + "1406": { + "name": "Normal", + "proto": "WINGULL_NORMAL" + }, + "1407": { + "name": "Shadow", + "proto": "WINGULL_SHADOW" + }, + "1408": { + "name": "Purified", + "proto": "WINGULL_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water", + "Flying" + ], + "attack": 106, + "defense": 61, + "stamina": 120, + "height": 0.61, + "weight": 9.5, + "quick_moves": [ + "Water Gun", + "Quick Attack" + ], + "charged_moves": [ + "Water Pulse", + "Air Cutter", + "Ice Beam" + ], + "family": 278, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 279 + } + ], + "little": true + }, + "279": { + "name": "Pelipper", + "pokedex_id": 279, + "default_form_id": 1409, + "forms": { + "1409": { + "name": "Normal", + "proto": "PELIPPER_NORMAL" + }, + "1410": { + "name": "Shadow", + "proto": "PELIPPER_SHADOW" + }, + "1411": { + "name": "Purified", + "proto": "PELIPPER_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water", + "Flying" + ], + "attack": 175, + "defense": 174, + "stamina": 155, + "height": 1.19, + "weight": 28, + "quick_moves": [ + "Water Gun", + "Wing Attack" + ], + "charged_moves": [ + "Hydro Pump", + "Hurricane", + "Blizzard", + "Weather Ball Water" + ], + "family": 278, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "280": { + "name": "Ralts", + "pokedex_id": 280, + "default_form_id": 292, + "forms": { + "292": { + "name": "Normal", + "proto": "RALTS_NORMAL", + "evolutions": [ + { + "pokemon": 281, + "form": 295 + } + ] + }, + "293": { + "name": "Shadow", + "proto": "RALTS_SHADOW", + "evolutions": [ + { + "pokemon": 281, + "form": 296 + } + ] + }, + "294": { + "name": "Purified", + "proto": "RALTS_PURIFIED", + "evolutions": [ + { + "pokemon": 281, + "form": 297 + } + ] + } + }, + "types": [ + "Psychic", + "Fairy" + ], + "attack": 79, + "defense": 59, + "stamina": 99, + "height": 0.41, + "weight": 6.6, + "quick_moves": [ + "Confusion", + "Charge Beam" + ], + "charged_moves": [ + "Psyshock", + "Disarming Voice", + "Shadow Sneak" + ], + "family": 280, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 281, + "form": 295 + } + ], + "little": true + }, + "281": { + "name": "Kirlia", + "pokedex_id": 281, + "default_form_id": 295, + "forms": { + "295": { + "name": "Normal", + "proto": "KIRLIA_NORMAL", + "evolutions": [ + { + "pokemon": 475, + "form": 301, + "gender_requirement": 1 + }, + { + "pokemon": 282, + "form": 298 + } + ] + }, + "296": { + "name": "Shadow", + "proto": "KIRLIA_SHADOW", + "evolutions": [ + { + "pokemon": 475, + "form": 302, + "gender_requirement": 1 + }, + { + "pokemon": 282, + "form": 299 + } + ] + }, + "297": { + "name": "Purified", + "proto": "KIRLIA_PURIFIED", + "evolutions": [ + { + "pokemon": 475, + "form": 303, + "gender_requirement": 1 + }, + { + "pokemon": 282, + "form": 300 + } + ] + } + }, + "types": [ + "Psychic", + "Fairy" + ], + "attack": 117, + "defense": 90, + "stamina": 116, + "height": 0.79, + "weight": 20.2, + "quick_moves": [ + "Confusion", + "Charge Beam" + ], + "charged_moves": [ + "Psychic", + "Disarming Voice", + "Shadow Sneak" + ], + "family": 280, + "flee_rate": 0.06, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 475, + "form": 301, + "gender_requirement": 1 + }, + { + "pokemon": 282, + "form": 298 + } + ] + }, + "282": { + "name": "Gardevoir", + "pokedex_id": 282, + "default_form_id": 298, + "forms": { + "298": { + "name": "Normal", + "proto": "GARDEVOIR_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "299": { + "name": "Shadow", + "proto": "GARDEVOIR_SHADOW" + }, + "300": { + "name": "Purified", + "proto": "GARDEVOIR_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Psychic", + "Fairy" + ], + "attack": 237, + "defense": 195, + "stamina": 169, + "height": 1.6, + "weight": 48.4, + "quick_moves": [ + "Confusion", + "Charge Beam", + "Charm" + ], + "charged_moves": [ + "Psychic", + "Dazzling Gleam", + "Shadow Ball" + ], + "family": 280, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 326, + "defense": 229, + "stamina": 169, + "unreleased": true + } + } + }, + "283": { + "name": "Surskit", + "pokedex_id": 283, + "default_form_id": 1412, + "forms": { + "1412": { + "name": "Normal", + "proto": "SURSKIT_NORMAL" + }, + "1413": { + "name": "Shadow", + "proto": "SURSKIT_SHADOW" + }, + "1414": { + "name": "Purified", + "proto": "SURSKIT_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug", + "Water" + ], + "attack": 93, + "defense": 87, + "stamina": 120, + "height": 0.51, + "weight": 1.7, + "quick_moves": [ + "Bubble", + "Bug Bite" + ], + "charged_moves": [ + "Aqua Jet", + "Bubble Beam", + "Signal Beam" + ], + "family": 283, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 284 + } + ], + "little": true + }, + "284": { + "name": "Masquerain", + "pokedex_id": 284, + "default_form_id": 1415, + "forms": { + "1415": { + "name": "Normal", + "proto": "MASQUERAIN_NORMAL" + }, + "1416": { + "name": "Shadow", + "proto": "MASQUERAIN_SHADOW" + }, + "1417": { + "name": "Purified", + "proto": "MASQUERAIN_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug", + "Flying" + ], + "attack": 192, + "defense": 150, + "stamina": 172, + "height": 0.79, + "weight": 3.6, + "quick_moves": [ + "Infestation", + "Air Slash" + ], + "charged_moves": [ + "Air Cutter", + "Ominous Wind", + "Silver Wind", + "Bubble Beam", + "Lunge" + ], + "family": 283, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "285": { + "name": "Shroomish", + "pokedex_id": 285, + "default_form_id": 1418, + "forms": { + "1418": { + "name": "Normal", + "proto": "SHROOMISH_NORMAL" + }, + "1419": { + "name": "Shadow", + "proto": "SHROOMISH_SHADOW" + }, + "1420": { + "name": "Purified", + "proto": "SHROOMISH_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Grass" + ], + "attack": 74, + "defense": 110, + "stamina": 155, + "height": 0.41, + "weight": 4.5, + "quick_moves": [ + "Tackle", + "Bullet Seed" + ], + "charged_moves": [ + "Seed Bomb", + "Grass Knot", + "Energy Ball" + ], + "family": 285, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 286 + } + ], + "little": true + }, + "286": { + "name": "Breloom", + "pokedex_id": 286, + "default_form_id": 1421, + "forms": { + "1421": { + "name": "Normal", + "proto": "BRELOOM_NORMAL" + }, + "1422": { + "name": "Shadow", + "proto": "BRELOOM_SHADOW" + }, + "1423": { + "name": "Purified", + "proto": "BRELOOM_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Grass", + "Fighting" + ], + "attack": 241, + "defense": 144, + "stamina": 155, + "height": 1.19, + "weight": 39.2, + "quick_moves": [ + "Counter", + "Bullet Seed" + ], + "charged_moves": [ + "Dynamic Punch", + "Seed Bomb", + "Sludge Bomb" + ], + "family": 285, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "287": { + "name": "Slakoth", + "pokedex_id": 287, + "default_form_id": 1424, + "forms": { + "1424": { + "name": "Normal", + "proto": "SLAKOTH_NORMAL" + }, + "1425": { + "name": "Shadow", + "proto": "SLAKOTH_SHADOW" + }, + "1426": { + "name": "Purified", + "proto": "SLAKOTH_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal" + ], + "attack": 104, + "defense": 92, + "stamina": 155, + "height": 0.79, + "weight": 24, + "quick_moves": [ + "Yawn" + ], + "charged_moves": [ + "Body Slam", + "Night Slash", + "Brick Break" + ], + "family": 287, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 288 + } + ], + "little": true + }, + "288": { + "name": "Vigoroth", + "pokedex_id": 288, + "default_form_id": 1427, + "forms": { + "1427": { + "name": "Normal", + "proto": "VIGOROTH_NORMAL" + }, + "1428": { + "name": "Shadow", + "proto": "VIGOROTH_SHADOW" + }, + "1429": { + "name": "Purified", + "proto": "VIGOROTH_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal" + ], + "attack": 159, + "defense": 145, + "stamina": 190, + "height": 1.4, + "weight": 46.5, + "quick_moves": [ + "Scratch", + "Counter" + ], + "charged_moves": [ + "Body Slam", + "Bulldoze", + "Brick Break" + ], + "family": 287, + "flee_rate": 0.06, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 289 + } + ] + }, + "289": { + "name": "Slaking", + "pokedex_id": 289, + "default_form_id": 1430, + "forms": { + "1430": { + "name": "Normal", + "proto": "SLAKING_NORMAL" + }, + "1431": { + "name": "Shadow", + "proto": "SLAKING_SHADOW" + }, + "1432": { + "name": "Purified", + "proto": "SLAKING_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal" + ], + "attack": 290, + "defense": 166, + "stamina": 284, + "height": 2.01, + "weight": 130.5, + "quick_moves": [ + "Yawn" + ], + "charged_moves": [ + "Hyper Beam", + "Play Rough", + "Earthquake" + ], + "family": 287, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "290": { + "name": "Nincada", + "pokedex_id": 290, + "default_form_id": 1433, + "forms": { + "1433": { + "name": "Normal", + "proto": "NINCADA_NORMAL" + }, + "1434": { + "name": "Shadow", + "proto": "NINCADA_SHADOW" + }, + "1435": { + "name": "Purified", + "proto": "NINCADA_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug", + "Ground" + ], + "attack": 80, + "defense": 126, + "stamina": 104, + "height": 0.51, + "weight": 5.5, + "quick_moves": [ + "Scratch", + "Bug Bite" + ], + "charged_moves": [ + "Night Slash", + "Bug Buzz", + "Aerial Ace" + ], + "family": 290, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 291 + } + ], + "little": true + }, + "291": { + "name": "Ninjask", + "pokedex_id": 291, + "default_form_id": 1436, + "forms": { + "1436": { + "name": "Normal", + "proto": "NINJASK_NORMAL" + }, + "1437": { + "name": "Shadow", + "proto": "NINJASK_SHADOW" + }, + "1438": { + "name": "Purified", + "proto": "NINJASK_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug", + "Flying" + ], + "attack": 199, + "defense": 112, + "stamina": 156, + "height": 0.79, + "weight": 12, + "quick_moves": [ + "Fury Cutter", + "Metal Claw" + ], + "charged_moves": [ + "Shadow Ball", + "Bug Buzz", + "Aerial Ace" + ], + "family": 290, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "292": { + "name": "Shedinja", + "pokedex_id": 292, + "default_form_id": 1439, + "forms": { + "1439": { + "name": "Normal", + "proto": "SHEDINJA_NORMAL" + }, + "1440": { + "name": "Shadow", + "proto": "SHEDINJA_SHADOW" + }, + "1441": { + "name": "Purified", + "proto": "SHEDINJA_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug", + "Ghost" + ], + "attack": 153, + "defense": 73, + "stamina": 1, + "height": 0.79, + "weight": 1.2, + "quick_moves": [ + "Bug Bite", + "Shadow Claw" + ], + "charged_moves": [ + "Shadow Sneak", + "Aerial Ace", + "Dig" + ], + "family": 290, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "293": { + "name": "Whismur", + "pokedex_id": 293, + "default_form_id": 1442, + "forms": { + "1442": { + "name": "Normal", + "proto": "WHISMUR_NORMAL" + }, + "1443": { + "name": "Shadow", + "proto": "WHISMUR_SHADOW" + }, + "1444": { + "name": "Purified", + "proto": "WHISMUR_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal" + ], + "attack": 92, + "defense": 42, + "stamina": 162, + "height": 0.61, + "weight": 16.3, + "quick_moves": [ + "Pound", + "Astonish" + ], + "charged_moves": [ + "Stomp", + "Disarming Voice", + "Flamethrower" + ], + "family": 293, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 294 + } + ], + "little": true + }, + "294": { + "name": "Loudred", + "pokedex_id": 294, + "default_form_id": 1445, + "forms": { + "1445": { + "name": "Normal", + "proto": "LOUDRED_NORMAL" + }, + "1446": { + "name": "Shadow", + "proto": "LOUDRED_SHADOW" + }, + "1447": { + "name": "Purified", + "proto": "LOUDRED_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal" + ], + "attack": 134, + "defense": 81, + "stamina": 197, + "height": 0.99, + "weight": 40.5, + "quick_moves": [ + "Bite", + "Rock Smash" + ], + "charged_moves": [ + "Stomp", + "Disarming Voice", + "Flamethrower" + ], + "family": 293, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 295 + } + ] + }, + "295": { + "name": "Exploud", + "pokedex_id": 295, + "default_form_id": 1448, + "forms": { + "1448": { + "name": "Normal", + "proto": "EXPLOUD_NORMAL" + }, + "1449": { + "name": "Shadow", + "proto": "EXPLOUD_SHADOW" + }, + "1450": { + "name": "Purified", + "proto": "EXPLOUD_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal" + ], + "attack": 179, + "defense": 137, + "stamina": 232, + "height": 1.5, + "weight": 84, + "quick_moves": [ + "Bite", + "Astonish" + ], + "charged_moves": [ + "Crunch", + "Disarming Voice", + "Fire Blast" + ], + "family": 293, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "296": { + "name": "Makuhita", + "pokedex_id": 296, + "default_form_id": 1451, + "forms": { + "1451": { + "name": "Normal", + "proto": "MAKUHITA_NORMAL", + "evolutions": [ + { + "pokemon": 297, + "form": 1454 + } + ] + }, + "1452": { + "name": "Shadow", + "proto": "MAKUHITA_SHADOW", + "evolutions": [ + { + "pokemon": 297, + "form": 1455 + } + ] + }, + "1453": { + "name": "Purified", + "proto": "MAKUHITA_PURIFIED", + "evolutions": [ + { + "pokemon": 297, + "form": 1456 + } + ] + } + }, + "types": [ + "Fighting" + ], + "attack": 99, + "defense": 54, + "stamina": 176, + "height": 0.99, + "weight": 86.4, + "quick_moves": [ + "Rock Smash", + "Tackle" + ], + "charged_moves": [ + "Heavy Slam", + "Low Sweep", + "Cross Chop" + ], + "family": 296, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 297, + "form": 1454 + } + ], + "little": true + }, + "297": { + "name": "Hariyama", + "pokedex_id": 297, + "default_form_id": 1454, + "forms": { + "1454": { + "name": "Normal", + "proto": "HARIYAMA_NORMAL" + }, + "1455": { + "name": "Shadow", + "proto": "HARIYAMA_SHADOW" + }, + "1456": { + "name": "Purified", + "proto": "HARIYAMA_PURIFIED" + } + }, + "types": [ + "Fighting" + ], + "attack": 209, + "defense": 114, + "stamina": 302, + "height": 2.31, + "weight": 253.8, + "quick_moves": [ + "Counter", + "Bullet Punch" + ], + "charged_moves": [ + "Heavy Slam", + "Close Combat", + "Dynamic Punch", + "Super Power" + ], + "family": 296, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn" + }, + "298": { + "name": "Azurill", + "pokedex_id": 298, + "default_form_id": 1457, + "forms": { + "1457": { + "name": "Normal", + "proto": "AZURILL_NORMAL" + }, + "1458": { + "name": "Shadow", + "proto": "AZURILL_SHADOW" + }, + "1459": { + "name": "Purified", + "proto": "AZURILL_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal", + "Fairy" + ], + "attack": 36, + "defense": 71, + "stamina": 137, + "height": 0.2, + "weight": 2, + "quick_moves": [ + "Splash", + "Bubble" + ], + "charged_moves": [ + "Bubble Beam", + "Ice Beam", + "Body Slam" + ], + "family": 183, + "flee_rate": 0.04, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 183 + } + ], + "little": true + }, + "299": { + "name": "Nosepass", + "pokedex_id": 299, + "default_form_id": 1460, + "forms": { + "1460": { + "name": "Normal", + "proto": "NOSEPASS_NORMAL", + "evolutions": [ + { + "pokemon": 476, + "form": 1841 + } + ] + }, + "1461": { + "name": "Shadow", + "proto": "NOSEPASS_SHADOW", + "evolutions": [ + { + "pokemon": 476, + "form": 1842 + } + ] + }, + "1462": { + "name": "Purified", + "proto": "NOSEPASS_PURIFIED", + "evolutions": [ + { + "pokemon": 476, + "form": 1843 + } + ] + } + }, + "types": [ + "Rock" + ], + "attack": 82, + "defense": 215, + "stamina": 102, + "height": 0.99, + "weight": 97, + "quick_moves": [ + "Rock Throw", + "Spark" + ], + "charged_moves": [ + "Rock Blast", + "Rock Slide", + "Thunderbolt" + ], + "family": 299, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 476 + } + ], + "little": true + }, + "300": { + "name": "Skitty", + "pokedex_id": 300, + "default_form_id": 1463, + "forms": { + "1463": { + "name": "Normal", + "proto": "SKITTY_NORMAL" + }, + "1464": { + "name": "Shadow", + "proto": "SKITTY_SHADOW" + }, + "1465": { + "name": "Purified", + "proto": "SKITTY_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal" + ], + "attack": 84, + "defense": 79, + "stamina": 137, + "height": 0.61, + "weight": 11, + "quick_moves": [ + "Feint Attack", + "Tackle" + ], + "charged_moves": [ + "Dig", + "Disarming Voice", + "Wild Charge" + ], + "family": 300, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 301 + } + ], + "little": true + }, + "301": { + "name": "Delcatty", + "pokedex_id": 301, + "default_form_id": 1466, + "forms": { + "1466": { + "name": "Normal", + "proto": "DELCATTY_NORMAL" + }, + "1467": { + "name": "Shadow", + "proto": "DELCATTY_SHADOW" + }, + "1468": { + "name": "Purified", + "proto": "DELCATTY_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal" + ], + "attack": 132, + "defense": 127, + "stamina": 172, + "height": 1.09, + "weight": 32.6, + "quick_moves": [ + "Feint Attack", + "Zen Headbutt", + "Charm" + ], + "charged_moves": [ + "Play Rough", + "Disarming Voice", + "Wild Charge" + ], + "family": 300, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "302": { + "name": "Sableye", + "pokedex_id": 302, + "default_form_id": 923, + "forms": { + "923": { + "name": "Normal", + "proto": "SABLEYE_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "924": { + "name": "Shadow", + "proto": "SABLEYE_SHADOW" + }, + "925": { + "name": "Purified", + "proto": "SABLEYE_PURIFIED", + "temp_evolutions": { + "1": {} + } + }, + "2666": { + "name": "Costume 2020 Deprecated", + "proto": "SABLEYE_COSTUME_2020_DEPRECATED" + }, + "2668": { + "name": "Costume 2020", + "proto": "SABLEYE_COSTUME_2020", + "is_costume": true + } + }, + "types": [ + "Dark", + "Ghost" + ], + "attack": 141, + "defense": 136, + "stamina": 137, + "height": 0.51, + "weight": 11, + "quick_moves": [ + "Shadow Claw", + "Feint Attack" + ], + "charged_moves": [ + "Power Gem", + "Foul Play", + "Shadow Sneak" + ], + "family": 302, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 151, + "defense": 216, + "stamina": 137, + "unreleased": true + } + } + }, + "303": { + "name": "Mawile", + "pokedex_id": 303, + "default_form_id": 833, + "forms": { + "833": { + "name": "Normal", + "proto": "MAWILE_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "834": { + "name": "Shadow", + "proto": "MAWILE_SHADOW" + }, + "835": { + "name": "Purified", + "proto": "MAWILE_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Steel", + "Fairy" + ], + "attack": 155, + "defense": 141, + "stamina": 137, + "height": 0.61, + "weight": 11.5, + "quick_moves": [ + "Bite", + "Astonish", + "Ice Fang", + "Fire Fang" + ], + "charged_moves": [ + "Play Rough", + "Vice Grip", + "Iron Head", + "Power Up Punch" + ], + "family": 303, + "flee_rate": 0.09, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 188, + "defense": 217, + "stamina": 137, + "unreleased": true + } + } + }, + "304": { + "name": "Aron", + "pokedex_id": 304, + "default_form_id": 1469, + "forms": { + "1469": { + "name": "Normal", + "proto": "ARON_NORMAL", + "evolutions": [ + { + "pokemon": 305, + "form": 1472 + } + ] + }, + "1470": { + "name": "Shadow", + "proto": "ARON_SHADOW", + "evolutions": [ + { + "pokemon": 305, + "form": 1473 + } + ] + }, + "1471": { + "name": "Purified", + "proto": "ARON_PURIFIED", + "evolutions": [ + { + "pokemon": 305, + "form": 1474 + } + ] + } + }, + "types": [ + "Steel", + "Rock" + ], + "attack": 121, + "defense": 141, + "stamina": 137, + "height": 0.41, + "weight": 60, + "quick_moves": [ + "Tackle", + "Metal Claw" + ], + "charged_moves": [ + "Iron Head", + "Rock Tomb", + "Body Slam" + ], + "family": 304, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 305, + "form": 1472 + } + ], + "little": true + }, + "305": { + "name": "Lairon", + "pokedex_id": 305, + "default_form_id": 1472, + "forms": { + "1472": { + "name": "Normal", + "proto": "LAIRON_NORMAL", + "evolutions": [ + { + "pokemon": 306, + "form": 1475 + } + ] + }, + "1473": { + "name": "Shadow", + "proto": "LAIRON_SHADOW", + "evolutions": [ + { + "pokemon": 306, + "form": 1476 + } + ] + }, + "1474": { + "name": "Purified", + "proto": "LAIRON_PURIFIED", + "evolutions": [ + { + "pokemon": 306, + "form": 1477 + } + ] + } + }, + "types": [ + "Steel", + "Rock" + ], + "attack": 158, + "defense": 198, + "stamina": 155, + "height": 0.89, + "weight": 120, + "quick_moves": [ + "Metal Claw", + "Iron Tail" + ], + "charged_moves": [ + "Body Slam", + "Rock Slide", + "Heavy Slam" + ], + "family": 304, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 306, + "form": 1475 + } + ] + }, + "306": { + "name": "Aggron", + "pokedex_id": 306, + "default_form_id": 1475, + "forms": { + "1475": { + "name": "Normal", + "proto": "AGGRON_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1476": { + "name": "Shadow", + "proto": "AGGRON_SHADOW" + }, + "1477": { + "name": "Purified", + "proto": "AGGRON_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Steel", + "Rock" + ], + "attack": 198, + "defense": 257, + "stamina": 172, + "height": 2.11, + "weight": 360, + "quick_moves": [ + "Dragon Tail", + "Iron Tail", + "Smack Down" + ], + "charged_moves": [ + "Thunder", + "Stone Edge", + "Heavy Slam" + ], + "family": 304, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 247, + "defense": 331, + "stamina": 172, + "unreleased": true, + "types": [ + "Steel" + ] + } + } + }, + "307": { + "name": "Meditite", + "pokedex_id": 307, + "default_form_id": 1478, + "forms": { + "1478": { + "name": "Normal", + "proto": "MEDITITE_NORMAL" + }, + "1479": { + "name": "Shadow", + "proto": "MEDITITE_SHADOW" + }, + "1480": { + "name": "Purified", + "proto": "MEDITITE_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Fighting", + "Psychic" + ], + "attack": 78, + "defense": 107, + "stamina": 102, + "height": 0.61, + "weight": 11.2, + "quick_moves": [ + "Confusion", + "Rock Smash" + ], + "charged_moves": [ + "Ice Punch", + "Psyshock", + "Low Sweep" + ], + "family": 307, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 308 + } + ], + "little": true + }, + "308": { + "name": "Medicham", + "pokedex_id": 308, + "default_form_id": 1481, + "forms": { + "1481": { + "name": "Normal", + "proto": "MEDICHAM_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1482": { + "name": "Shadow", + "proto": "MEDICHAM_SHADOW" + }, + "1483": { + "name": "Purified", + "proto": "MEDICHAM_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Fighting", + "Psychic" + ], + "attack": 121, + "defense": 152, + "stamina": 155, + "height": 1.3, + "weight": 31.5, + "quick_moves": [ + "Psycho Cut", + "Counter" + ], + "charged_moves": [ + "Ice Punch", + "Psychic", + "Dynamic Punch", + "Power Up Punch" + ], + "family": 307, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "temp_evolutions": { + "1": { + "attack": 205, + "defense": 179, + "stamina": 155, + "unreleased": true + } + } + }, + "309": { + "name": "Electrike", + "pokedex_id": 309, + "default_form_id": 1484, + "forms": { + "1484": { + "name": "Normal", + "proto": "ELECTRIKE_NORMAL", + "evolutions": [ + { + "pokemon": 310, + "form": 1487 + } + ] + }, + "1485": { + "name": "Shadow", + "proto": "ELECTRIKE_SHADOW", + "evolutions": [ + { + "pokemon": 310, + "form": 1488 + } + ] + }, + "1486": { + "name": "Purified", + "proto": "ELECTRIKE_PURIFIED", + "evolutions": [ + { + "pokemon": 310, + "form": 1489 + } + ] + } + }, + "types": [ + "Electric" + ], + "attack": 123, + "defense": 78, + "stamina": 120, + "height": 0.61, + "weight": 15.2, + "quick_moves": [ + "Quick Attack", + "Spark" + ], + "charged_moves": [ + "Thunderbolt", + "Discharge", + "Swift" + ], + "family": 309, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 310, + "form": 1487 + } + ], + "little": true + }, + "310": { + "name": "Manectric", + "pokedex_id": 310, + "default_form_id": 1487, + "forms": { + "1487": { + "name": "Normal", + "proto": "MANECTRIC_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1488": { + "name": "Shadow", + "proto": "MANECTRIC_SHADOW" + }, + "1489": { + "name": "Purified", + "proto": "MANECTRIC_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Electric" + ], + "attack": 215, + "defense": 127, + "stamina": 172, + "height": 1.5, + "weight": 40.2, + "quick_moves": [ + "Snarl", + "Charge Beam" + ], + "charged_moves": [ + "Thunder", + "Wild Charge", + "Flame Burst" + ], + "family": 309, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 286, + "defense": 179, + "stamina": 172, + "height": 1.8, + "weight": 44 + } + } + }, + "311": { + "name": "Plusle", + "pokedex_id": 311, + "default_form_id": 1490, + "forms": { + "1490": { + "name": "Normal", + "proto": "PLUSLE_NORMAL" + }, + "1491": { + "name": "Shadow", + "proto": "PLUSLE_SHADOW" + }, + "1492": { + "name": "Purified", + "proto": "PLUSLE_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Electric" + ], + "attack": 167, + "defense": 129, + "stamina": 155, + "height": 0.41, + "weight": 4.2, + "quick_moves": [ + "Spark", + "Quick Attack" + ], + "charged_moves": [ + "Thunderbolt", + "Discharge", + "Swift", + "Grass Knot" + ], + "family": 311, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "312": { + "name": "Minun", + "pokedex_id": 312, + "default_form_id": 1493, + "forms": { + "1493": { + "name": "Normal", + "proto": "MINUN_NORMAL" + }, + "1494": { + "name": "Shadow", + "proto": "MINUN_SHADOW" + }, + "1495": { + "name": "Purified", + "proto": "MINUN_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Electric" + ], + "attack": 147, + "defense": 150, + "stamina": 155, + "height": 0.41, + "weight": 4.2, + "quick_moves": [ + "Spark", + "Quick Attack" + ], + "charged_moves": [ + "Thunderbolt", + "Discharge", + "Swift", + "Grass Knot" + ], + "family": 312, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "313": { + "name": "Volbeat", + "pokedex_id": 313, + "default_form_id": 1496, + "forms": { + "1496": { + "name": "Normal", + "proto": "VOLBEAT_NORMAL" + }, + "1497": { + "name": "Shadow", + "proto": "VOLBEAT_SHADOW" + }, + "1498": { + "name": "Purified", + "proto": "VOLBEAT_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug" + ], + "attack": 143, + "defense": 166, + "stamina": 163, + "height": 0.71, + "weight": 17.7, + "quick_moves": [ + "Struggle Bug", + "Tackle" + ], + "charged_moves": [ + "Signal Beam", + "Bug Buzz", + "Thunderbolt" + ], + "family": 313, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "314": { + "name": "Illumise", + "pokedex_id": 314, + "default_form_id": 1499, + "forms": { + "1499": { + "name": "Normal", + "proto": "ILLUMISE_NORMAL" + }, + "1500": { + "name": "Shadow", + "proto": "ILLUMISE_SHADOW" + }, + "1501": { + "name": "Purified", + "proto": "ILLUMISE_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Bug" + ], + "attack": 143, + "defense": 166, + "stamina": 163, + "height": 0.61, + "weight": 17.7, + "quick_moves": [ + "Struggle Bug", + "Tackle" + ], + "charged_moves": [ + "Silver Wind", + "Bug Buzz", + "Dazzling Gleam" + ], + "family": 314, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "315": { + "name": "Roselia", + "pokedex_id": 315, + "default_form_id": 1502, + "forms": { + "1502": { + "name": "Normal", + "proto": "ROSELIA_NORMAL" + }, + "1503": { + "name": "Shadow", + "proto": "ROSELIA_SHADOW" + }, + "1504": { + "name": "Purified", + "proto": "ROSELIA_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Grass", + "Poison" + ], + "attack": 186, + "defense": 131, + "stamina": 137, + "height": 0.3, + "weight": 2, + "quick_moves": [ + "Poison Jab", + "Razor Leaf" + ], + "charged_moves": [ + "Petal Blizzard", + "Sludge Bomb", + "Dazzling Gleam" + ], + "family": 315, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 407 + } + ] + }, + "316": { + "name": "Gulpin", + "pokedex_id": 316, + "default_form_id": 1505, + "forms": { + "1505": { + "name": "Normal", + "proto": "GULPIN_NORMAL" + }, + "1506": { + "name": "Shadow", + "proto": "GULPIN_SHADOW" + }, + "1507": { + "name": "Purified", + "proto": "GULPIN_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Poison" + ], + "attack": 80, + "defense": 99, + "stamina": 172, + "height": 0.41, + "weight": 10.3, + "quick_moves": [ + "Pound", + "Rock Smash" + ], + "charged_moves": [ + "Sludge", + "Gunk Shot", + "Ice Beam" + ], + "family": 316, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 317 + } + ], + "little": true + }, + "317": { + "name": "Swalot", + "pokedex_id": 317, + "default_form_id": 1508, + "forms": { + "1508": { + "name": "Normal", + "proto": "SWALOT_NORMAL" + }, + "1509": { + "name": "Shadow", + "proto": "SWALOT_SHADOW" + }, + "1510": { + "name": "Purified", + "proto": "SWALOT_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Poison" + ], + "attack": 140, + "defense": 159, + "stamina": 225, + "height": 1.7, + "weight": 80, + "quick_moves": [ + "Rock Smash", + "Infestation" + ], + "charged_moves": [ + "Gunk Shot", + "Sludge Bomb", + "Ice Beam", + "Acid Spray" + ], + "family": 316, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "318": { + "name": "Carvanha", + "pokedex_id": 318, + "default_form_id": 734, + "forms": { + "734": { + "name": "Normal", + "proto": "CARVANHA_NORMAL", + "evolutions": [ + { + "pokemon": 319, + "form": 737 + } + ] + }, + "735": { + "name": "Shadow", + "proto": "CARVANHA_SHADOW", + "evolutions": [ + { + "pokemon": 319, + "form": 738 + } + ] + }, + "736": { + "name": "Purified", + "proto": "CARVANHA_PURIFIED", + "evolutions": [ + { + "pokemon": 319, + "form": 739 + } + ] + } + }, + "types": [ + "Water", + "Dark" + ], + "attack": 171, + "defense": 39, + "stamina": 128, + "height": 0.79, + "weight": 20.8, + "quick_moves": [ + "Bite", + "Snarl" + ], + "charged_moves": [ + "Aqua Jet", + "Crunch", + "Poison Fang" + ], + "family": 318, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 319, + "form": 737 + } + ], + "little": true + }, + "319": { + "name": "Sharpedo", + "pokedex_id": 319, + "default_form_id": 737, + "forms": { + "737": { + "name": "Normal", + "proto": "SHARPEDO_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "738": { + "name": "Shadow", + "proto": "SHARPEDO_SHADOW" + }, + "739": { + "name": "Purified", + "proto": "SHARPEDO_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Water", + "Dark" + ], + "attack": 243, + "defense": 83, + "stamina": 172, + "height": 1.8, + "weight": 88.8, + "quick_moves": [ + "Bite", + "Waterfall" + ], + "charged_moves": [ + "Hydro Pump", + "Crunch", + "Poison Fang" + ], + "family": 318, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 289, + "defense": 144, + "stamina": 172, + "unreleased": true + } + } + }, + "320": { + "name": "Wailmer", + "pokedex_id": 320, + "default_form_id": 1511, + "forms": { + "1511": { + "name": "Normal", + "proto": "WAILMER_NORMAL" + }, + "1512": { + "name": "Shadow", + "proto": "WAILMER_SHADOW" + }, + "1513": { + "name": "Purified", + "proto": "WAILMER_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water" + ], + "attack": 136, + "defense": 68, + "stamina": 277, + "height": 2.01, + "weight": 130, + "quick_moves": [ + "Splash", + "Water Gun" + ], + "charged_moves": [ + "Heavy Slam", + "Water Pulse", + "Body Slam" + ], + "family": 320, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 321 + } + ], + "little": true + }, + "321": { + "name": "Wailord", + "pokedex_id": 321, + "default_form_id": 1514, + "forms": { + "1514": { + "name": "Normal", + "proto": "WAILORD_NORMAL" + }, + "1515": { + "name": "Shadow", + "proto": "WAILORD_SHADOW" + }, + "1516": { + "name": "Purified", + "proto": "WAILORD_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water" + ], + "attack": 175, + "defense": 87, + "stamina": 347, + "height": 14.5, + "weight": 398, + "quick_moves": [ + "Zen Headbutt", + "Water Gun" + ], + "charged_moves": [ + "Surf", + "Blizzard", + "Hyper Beam" + ], + "family": 320, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "322": { + "name": "Numel", + "pokedex_id": 322, + "default_form_id": 1517, + "forms": { + "1517": { + "name": "Normal", + "proto": "NUMEL_NORMAL" + }, + "1518": { + "name": "Shadow", + "proto": "NUMEL_SHADOW" + }, + "1519": { + "name": "Purified", + "proto": "NUMEL_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Fire", + "Ground" + ], + "attack": 119, + "defense": 79, + "stamina": 155, + "height": 0.71, + "weight": 24, + "quick_moves": [ + "Ember", + "Tackle" + ], + "charged_moves": [ + "Bulldoze", + "Heat Wave", + "Stomp" + ], + "family": 322, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 323 + } + ], + "little": true + }, + "323": { + "name": "Camerupt", + "pokedex_id": 323, + "default_form_id": 1520, + "forms": { + "1520": { + "name": "Normal", + "proto": "CAMERUPT_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1521": { + "name": "Shadow", + "proto": "CAMERUPT_SHADOW" + }, + "1522": { + "name": "Purified", + "proto": "CAMERUPT_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Fire", + "Ground" + ], + "attack": 194, + "defense": 136, + "stamina": 172, + "height": 1.91, + "weight": 220, + "quick_moves": [ + "Ember", + "Rock Smash" + ], + "charged_moves": [ + "Earthquake", + "Overheat", + "Solar Beam", + "Earth Power" + ], + "family": 322, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "temp_evolutions": { + "1": { + "attack": 253, + "defense": 183, + "stamina": 172, + "unreleased": true + } + } + }, + "324": { + "name": "Torkoal", + "pokedex_id": 324, + "default_form_id": 1523, + "forms": { + "1523": { + "name": "Normal", + "proto": "TORKOAL_NORMAL" + }, + "1524": { + "name": "Shadow", + "proto": "TORKOAL_SHADOW" + }, + "1525": { + "name": "Purified", + "proto": "TORKOAL_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Fire" + ], + "attack": 151, + "defense": 203, + "stamina": 172, + "height": 0.51, + "weight": 80.4, + "quick_moves": [ + "Fire Spin", + "Ember" + ], + "charged_moves": [ + "Overheat", + "Solar Beam", + "Earthquake" + ], + "family": 324, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "325": { + "name": "Spoink", + "pokedex_id": 325, + "default_form_id": 1526, + "forms": { + "1526": { + "name": "Normal", + "proto": "SPOINK_NORMAL" + }, + "1527": { + "name": "Shadow", + "proto": "SPOINK_SHADOW" + }, + "1528": { + "name": "Purified", + "proto": "SPOINK_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Psychic" + ], + "attack": 125, + "defense": 122, + "stamina": 155, + "height": 0.71, + "weight": 30.6, + "quick_moves": [ + "Splash", + "Zen Headbutt" + ], + "charged_moves": [ + "Psybeam", + "Shadow Ball", + "Mirror Coat" + ], + "family": 325, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 326 + } + ], + "little": true + }, + "326": { + "name": "Grumpig", + "pokedex_id": 326, + "default_form_id": 1529, + "forms": { + "1529": { + "name": "Normal", + "proto": "GRUMPIG_NORMAL" + }, + "1530": { + "name": "Shadow", + "proto": "GRUMPIG_SHADOW" + }, + "1531": { + "name": "Purified", + "proto": "GRUMPIG_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Psychic" + ], + "attack": 171, + "defense": 188, + "stamina": 190, + "height": 0.89, + "weight": 71.5, + "quick_moves": [ + "Charge Beam", + "Extrasensory" + ], + "charged_moves": [ + "Psychic", + "Shadow Ball", + "Mirror Coat" + ], + "family": 325, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "327": { + "name": "Spinda", + "pokedex_id": 327, + "default_form_id": 37, + "forms": { + "37": { + "name": "00", + "proto": "SPINDA_00" + }, + "38": { + "name": "01", + "proto": "SPINDA_01" + }, + "39": { + "name": "02", + "proto": "SPINDA_02" + }, + "40": { + "name": "03", + "proto": "SPINDA_03" + }, + "41": { + "name": "04", + "proto": "SPINDA_04" + }, + "42": { + "name": "05", + "proto": "SPINDA_05" + }, + "43": { + "name": "06", + "proto": "SPINDA_06" + }, + "44": { + "name": "07", + "proto": "SPINDA_07" + }, + "121": { + "name": "08", + "proto": "SPINDA_08" + }, + "122": { + "name": "09", + "proto": "SPINDA_09" + }, + "123": { + "name": "10", + "proto": "SPINDA_10" + }, + "124": { + "name": "11", + "proto": "SPINDA_11" + }, + "125": { + "name": "12", + "proto": "SPINDA_12" + }, + "126": { + "name": "13", + "proto": "SPINDA_13" + }, + "127": { + "name": "14", + "proto": "SPINDA_14" + }, + "128": { + "name": "15", + "proto": "SPINDA_15" + }, + "129": { + "name": "16", + "proto": "SPINDA_16" + }, + "130": { + "name": "17", + "proto": "SPINDA_17" + }, + "131": { + "name": "18", + "proto": "SPINDA_18" + }, + "132": { + "name": "19", + "proto": "SPINDA_19" + } + }, + "types": [ + "Normal" + ], + "attack": 116, + "defense": 116, + "stamina": 155, + "height": 1.09, + "weight": 5, + "quick_moves": [ + "Sucker Punch", + "Psycho Cut" + ], + "charged_moves": [ + "Dig", + "Rock Tomb", + "Icy Wind" + ], + "family": 327, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn" + }, + "328": { + "name": "Trapinch", + "pokedex_id": 328, + "default_form_id": 746, + "forms": { + "746": { + "name": "Normal", + "proto": "TRAPINCH_NORMAL", + "evolutions": [ + { + "pokemon": 329, + "form": 749 + } + ] + }, + "747": { + "name": "Shadow", + "proto": "TRAPINCH_SHADOW", + "evolutions": [ + { + "pokemon": 329, + "form": 750 + } + ] + }, + "748": { + "name": "Purified", + "proto": "TRAPINCH_PURIFIED", + "evolutions": [ + { + "pokemon": 329, + "form": 751 + } + ] + } + }, + "types": [ + "Ground" + ], + "attack": 162, + "defense": 78, + "stamina": 128, + "height": 0.71, + "weight": 15, + "quick_moves": [ + "Mud Shot", + "Struggle Bug" + ], + "charged_moves": [ + "Sand Tomb", + "Dig", + "Crunch" + ], + "family": 328, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 329, + "form": 749 + } + ], + "little": true + }, + "329": { + "name": "Vibrava", + "pokedex_id": 329, + "default_form_id": 749, + "forms": { + "749": { + "name": "Normal", + "proto": "VIBRAVA_NORMAL", + "evolutions": [ + { + "pokemon": 330, + "form": 752 + } + ] + }, + "750": { + "name": "Shadow", + "proto": "VIBRAVA_SHADOW", + "evolutions": [ + { + "pokemon": 330, + "form": 753 + } + ] + }, + "751": { + "name": "Purified", + "proto": "VIBRAVA_PURIFIED", + "evolutions": [ + { + "pokemon": 330, + "form": 754 + } + ] + } + }, + "types": [ + "Ground", + "Dragon" + ], + "attack": 134, + "defense": 99, + "stamina": 137, + "height": 1.09, + "weight": 15.3, + "quick_moves": [ + "Mud Shot", + "Dragon Breath" + ], + "charged_moves": [ + "Sand Tomb", + "Bulldoze", + "Bug Buzz" + ], + "family": 328, + "flee_rate": 0.06, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 330, + "form": 752 + } + ] + }, + "330": { + "name": "Flygon", + "pokedex_id": 330, + "default_form_id": 752, + "forms": { + "752": { + "name": "Normal", + "proto": "FLYGON_NORMAL" + }, + "753": { + "name": "Shadow", + "proto": "FLYGON_SHADOW" + }, + "754": { + "name": "Purified", + "proto": "FLYGON_PURIFIED" + } + }, + "types": [ + "Ground", + "Dragon" + ], + "attack": 205, + "defense": 168, + "stamina": 190, + "height": 2.01, + "weight": 82, + "quick_moves": [ + "Mud Shot", + "Dragon Tail" + ], + "charged_moves": [ + "Earthquake", + "Dragon Claw", + "Stone Edge" + ], + "family": 328, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn" + }, + "331": { + "name": "Cacnea", + "pokedex_id": 331, + "default_form_id": 610, + "forms": { + "610": { + "name": "Normal", + "proto": "CACNEA_NORMAL", + "evolutions": [ + { + "pokemon": 332, + "form": 613 + } + ] + }, + "611": { + "name": "Shadow", + "proto": "CACNEA_SHADOW", + "evolutions": [ + { + "pokemon": 332, + "form": 614 + } + ] + }, + "612": { + "name": "Purified", + "proto": "CACNEA_PURIFIED", + "evolutions": [ + { + "pokemon": 332, + "form": 615 + } + ] + } + }, + "types": [ + "Grass" + ], + "attack": 156, + "defense": 74, + "stamina": 137, + "height": 0.41, + "weight": 51.3, + "quick_moves": [ + "Poison Sting", + "Sucker Punch" + ], + "charged_moves": [ + "Grass Knot", + "Brick Break", + "Seed Bomb", + "Payback" + ], + "family": 331, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 332, + "form": 613 + } + ], + "little": true + }, + "332": { + "name": "Cacturne", + "pokedex_id": 332, + "default_form_id": 613, + "forms": { + "613": { + "name": "Normal", + "proto": "CACTURNE_NORMAL" + }, + "614": { + "name": "Shadow", + "proto": "CACTURNE_SHADOW" + }, + "615": { + "name": "Purified", + "proto": "CACTURNE_PURIFIED" + } + }, + "types": [ + "Grass", + "Dark" + ], + "attack": 221, + "defense": 115, + "stamina": 172, + "height": 1.3, + "weight": 77.4, + "quick_moves": [ + "Poison Jab", + "Sucker Punch" + ], + "charged_moves": [ + "Dark Pulse", + "Dynamic Punch", + "Grass Knot", + "Payback" + ], + "family": 331, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn" + }, + "333": { + "name": "Swablu", + "pokedex_id": 333, + "default_form_id": 1532, + "forms": { + "1532": { + "name": "Normal", + "proto": "SWABLU_NORMAL" + }, + "1533": { + "name": "Shadow", + "proto": "SWABLU_SHADOW" + }, + "1534": { + "name": "Purified", + "proto": "SWABLU_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal", + "Flying" + ], + "attack": 76, + "defense": 132, + "stamina": 128, + "height": 0.41, + "weight": 1.2, + "quick_moves": [ + "Peck", + "Astonish" + ], + "charged_moves": [ + "Disarming Voice", + "Aerial Ace", + "Ice Beam" + ], + "family": 333, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 334 + } + ], + "little": true + }, + "334": { + "name": "Altaria", + "pokedex_id": 334, + "default_form_id": 1535, + "forms": { + "1535": { + "name": "Normal", + "proto": "ALTARIA_NORMAL" + }, + "1536": { + "name": "Shadow", + "proto": "ALTARIA_SHADOW" + }, + "1537": { + "name": "Purified", + "proto": "ALTARIA_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Dragon", + "Flying" + ], + "attack": 141, + "defense": 201, + "stamina": 181, + "height": 1.09, + "weight": 20.6, + "quick_moves": [ + "Peck", + "Dragon Breath" + ], + "charged_moves": [ + "Sky Attack", + "Dazzling Gleam", + "Dragon Pulse" + ], + "family": 333, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "temp_evolutions": { + "1": { + "attack": 222, + "defense": 218, + "stamina": 181, + "height": 1.5, + "types": [ + "Dragon", + "Fairy" + ] + } + } + }, + "335": { + "name": "Zangoose", + "pokedex_id": 335, + "default_form_id": 1538, + "forms": { + "1538": { + "name": "Normal", + "proto": "ZANGOOSE_NORMAL" + }, + "1539": { + "name": "Shadow", + "proto": "ZANGOOSE_SHADOW" + }, + "1540": { + "name": "Purified", + "proto": "ZANGOOSE_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal" + ], + "attack": 222, + "defense": 124, + "stamina": 177, + "height": 1.3, + "weight": 40.3, + "quick_moves": [ + "Fury Cutter", + "Shadow Claw" + ], + "charged_moves": [ + "Close Combat", + "Night Slash", + "Dig" + ], + "family": 335, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "336": { + "name": "Seviper", + "pokedex_id": 336, + "default_form_id": 1541, + "forms": { + "1541": { + "name": "Normal", + "proto": "SEVIPER_NORMAL" + }, + "1542": { + "name": "Shadow", + "proto": "SEVIPER_SHADOW" + }, + "1543": { + "name": "Purified", + "proto": "SEVIPER_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Poison" + ], + "attack": 196, + "defense": 118, + "stamina": 177, + "height": 2.69, + "weight": 52.5, + "quick_moves": [ + "Poison Jab", + "Iron Tail" + ], + "charged_moves": [ + "Poison Fang", + "Crunch", + "Wrap" + ], + "family": 336, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "337": { + "name": "Lunatone", + "pokedex_id": 337, + "default_form_id": 1544, + "forms": { + "1544": { + "name": "Normal", + "proto": "LUNATONE_NORMAL" + }, + "1545": { + "name": "Shadow", + "proto": "LUNATONE_SHADOW" + }, + "1546": { + "name": "Purified", + "proto": "LUNATONE_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Rock", + "Psychic" + ], + "attack": 178, + "defense": 153, + "stamina": 207, + "height": 0.99, + "weight": 168, + "quick_moves": [ + "Rock Throw", + "Confusion" + ], + "charged_moves": [ + "Psychic", + "Rock Slide", + "Moonblast" + ], + "family": 337, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "338": { + "name": "Solrock", + "pokedex_id": 338, + "default_form_id": 1547, + "forms": { + "1547": { + "name": "Normal", + "proto": "SOLROCK_NORMAL" + }, + "1548": { + "name": "Shadow", + "proto": "SOLROCK_SHADOW" + }, + "1549": { + "name": "Purified", + "proto": "SOLROCK_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Rock", + "Psychic" + ], + "attack": 178, + "defense": 153, + "stamina": 207, + "height": 1.19, + "weight": 154, + "quick_moves": [ + "Rock Throw", + "Confusion" + ], + "charged_moves": [ + "Psychic", + "Rock Slide", + "Solar Beam" + ], + "family": 338, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "339": { + "name": "Barboach", + "pokedex_id": 339, + "default_form_id": 1550, + "forms": { + "1550": { + "name": "Normal", + "proto": "BARBOACH_NORMAL" + }, + "1551": { + "name": "Shadow", + "proto": "BARBOACH_SHADOW" + }, + "1552": { + "name": "Purified", + "proto": "BARBOACH_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water", + "Ground" + ], + "attack": 93, + "defense": 82, + "stamina": 137, + "height": 0.41, + "weight": 1.9, + "quick_moves": [ + "Water Gun", + "Mud Shot" + ], + "charged_moves": [ + "Aqua Tail", + "Ice Beam", + "Mud Bomb" + ], + "family": 339, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 340 + } + ], + "little": true + }, + "340": { + "name": "Whiscash", + "pokedex_id": 340, + "default_form_id": 1553, + "forms": { + "1553": { + "name": "Normal", + "proto": "WHISCASH_NORMAL" + }, + "1554": { + "name": "Shadow", + "proto": "WHISCASH_SHADOW" + }, + "1555": { + "name": "Purified", + "proto": "WHISCASH_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water", + "Ground" + ], + "attack": 151, + "defense": 141, + "stamina": 242, + "height": 0.89, + "weight": 23.6, + "quick_moves": [ + "Water Gun", + "Mud Shot" + ], + "charged_moves": [ + "Water Pulse", + "Blizzard", + "Mud Bomb" + ], + "family": 339, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "341": { + "name": "Corphish", + "pokedex_id": 341, + "default_form_id": 1556, + "forms": { + "1556": { + "name": "Normal", + "proto": "CORPHISH_NORMAL" + }, + "1557": { + "name": "Shadow", + "proto": "CORPHISH_SHADOW" + }, + "1558": { + "name": "Purified", + "proto": "CORPHISH_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water" + ], + "attack": 141, + "defense": 99, + "stamina": 125, + "height": 0.61, + "weight": 11.5, + "quick_moves": [ + "Bubble", + "Rock Smash" + ], + "charged_moves": [ + "Vice Grip", + "Bubble Beam", + "Aqua Jet" + ], + "family": 341, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 342 + } + ], + "little": true + }, + "342": { + "name": "Crawdaunt", + "pokedex_id": 342, + "default_form_id": 1559, + "forms": { + "1559": { + "name": "Normal", + "proto": "CRAWDAUNT_NORMAL" + }, + "1560": { + "name": "Shadow", + "proto": "CRAWDAUNT_SHADOW" + }, + "1561": { + "name": "Purified", + "proto": "CRAWDAUNT_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water", + "Dark" + ], + "attack": 224, + "defense": 142, + "stamina": 160, + "height": 1.09, + "weight": 32.8, + "quick_moves": [ + "Waterfall", + "Snarl" + ], + "charged_moves": [ + "Vice Grip", + "Bubble Beam", + "Night Slash", + "Crabhammer" + ], + "family": 341, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "343": { + "name": "Baltoy", + "pokedex_id": 343, + "default_form_id": 1562, + "forms": { + "1562": { + "name": "Normal", + "proto": "BALTOY_NORMAL" + }, + "1563": { + "name": "Shadow", + "proto": "BALTOY_SHADOW" + }, + "1564": { + "name": "Purified", + "proto": "BALTOY_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Ground", + "Psychic" + ], + "attack": 77, + "defense": 124, + "stamina": 120, + "height": 0.51, + "weight": 21.5, + "quick_moves": [ + "Confusion", + "Extrasensory" + ], + "charged_moves": [ + "Gyro Ball", + "Psybeam", + "Dig" + ], + "family": 343, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 344 + } + ], + "little": true + }, + "344": { + "name": "Claydol", + "pokedex_id": 344, + "default_form_id": 1565, + "forms": { + "1565": { + "name": "Normal", + "proto": "CLAYDOL_NORMAL" + }, + "1566": { + "name": "Shadow", + "proto": "CLAYDOL_SHADOW" + }, + "1567": { + "name": "Purified", + "proto": "CLAYDOL_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Ground", + "Psychic" + ], + "attack": 140, + "defense": 229, + "stamina": 155, + "height": 1.5, + "weight": 108, + "quick_moves": [ + "Extrasensory", + "Confusion", + "Mud Slap" + ], + "charged_moves": [ + "Gyro Ball", + "Psychic", + "Earthquake", + "Earth Power", + "Ice Beam", + "Shadow Ball" + ], + "family": 343, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "345": { + "name": "Lileep", + "pokedex_id": 345, + "default_form_id": 1568, + "forms": { + "1568": { + "name": "Normal", + "proto": "LILEEP_NORMAL", + "evolutions": [ + { + "pokemon": 346, + "form": 1571 + } + ] + }, + "1569": { + "name": "Shadow", + "proto": "LILEEP_SHADOW", + "evolutions": [ + { + "pokemon": 346, + "form": 1572 + } + ] + }, + "1570": { + "name": "Purified", + "proto": "LILEEP_PURIFIED", + "evolutions": [ + { + "pokemon": 346, + "form": 1573 + } + ] + } + }, + "types": [ + "Rock", + "Grass" + ], + "attack": 105, + "defense": 150, + "stamina": 165, + "height": 0.99, + "weight": 23.8, + "quick_moves": [ + "Acid", + "Infestation" + ], + "charged_moves": [ + "Grass Knot", + "Mirror Coat", + "Ancient Power" + ], + "family": 345, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 346, + "form": 1571 + } + ], + "little": true + }, + "346": { + "name": "Cradily", + "pokedex_id": 346, + "default_form_id": 1571, + "forms": { + "1571": { + "name": "Normal", + "proto": "CRADILY_NORMAL" + }, + "1572": { + "name": "Shadow", + "proto": "CRADILY_SHADOW" + }, + "1573": { + "name": "Purified", + "proto": "CRADILY_PURIFIED" + } + }, + "types": [ + "Rock", + "Grass" + ], + "attack": 152, + "defense": 194, + "stamina": 200, + "height": 1.5, + "weight": 60.4, + "quick_moves": [ + "Acid", + "Infestation", + "Bullet Seed" + ], + "charged_moves": [ + "Grass Knot", + "Bulldoze", + "Stone Edge" + ], + "family": 345, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn" + }, + "347": { + "name": "Anorith", + "pokedex_id": 347, + "default_form_id": 1574, + "forms": { + "1574": { + "name": "Normal", + "proto": "ANORITH_NORMAL", + "evolutions": [ + { + "pokemon": 348, + "form": 1577 + } + ] + }, + "1575": { + "name": "Shadow", + "proto": "ANORITH_SHADOW", + "evolutions": [ + { + "pokemon": 348, + "form": 1578 + } + ] + }, + "1576": { + "name": "Purified", + "proto": "ANORITH_PURIFIED", + "evolutions": [ + { + "pokemon": 348, + "form": 1579 + } + ] + } + }, + "types": [ + "Rock", + "Bug" + ], + "attack": 176, + "defense": 100, + "stamina": 128, + "height": 0.71, + "weight": 12.5, + "quick_moves": [ + "Struggle Bug", + "Scratch" + ], + "charged_moves": [ + "Cross Poison", + "Aqua Jet", + "Ancient Power" + ], + "family": 347, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 348, + "form": 1577 + } + ], + "little": true + }, + "348": { + "name": "Armaldo", + "pokedex_id": 348, + "default_form_id": 1577, + "forms": { + "1577": { + "name": "Normal", + "proto": "ARMALDO_NORMAL" + }, + "1578": { + "name": "Shadow", + "proto": "ARMALDO_SHADOW" + }, + "1579": { + "name": "Purified", + "proto": "ARMALDO_PURIFIED" + } + }, + "types": [ + "Rock", + "Bug" + ], + "attack": 222, + "defense": 174, + "stamina": 181, + "height": 1.5, + "weight": 68.2, + "quick_moves": [ + "Fury Cutter", + "Struggle Bug" + ], + "charged_moves": [ + "Cross Poison", + "Water Pulse", + "Rock Blast" + ], + "family": 347, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn" + }, + "349": { + "name": "Feebas", + "pokedex_id": 349, + "default_form_id": 1580, + "forms": { + "1580": { + "name": "Normal", + "proto": "FEEBAS_NORMAL" + }, + "1581": { + "name": "Shadow", + "proto": "FEEBAS_SHADOW" + }, + "1582": { + "name": "Purified", + "proto": "FEEBAS_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water" + ], + "attack": 29, + "defense": 85, + "stamina": 85, + "height": 0.61, + "weight": 7.4, + "quick_moves": [ + "Splash", + "Tackle" + ], + "charged_moves": [ + "Mirror Coat" + ], + "family": 349, + "flee_rate": 0.15, + "capture_rate": 0.7, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 350 + } + ], + "little": true + }, + "350": { + "name": "Milotic", + "pokedex_id": 350, + "default_form_id": 1583, + "forms": { + "1583": { + "name": "Normal", + "proto": "MILOTIC_NORMAL" + }, + "1584": { + "name": "Shadow", + "proto": "MILOTIC_SHADOW" + }, + "1585": { + "name": "Purified", + "proto": "MILOTIC_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water" + ], + "attack": 192, + "defense": 219, + "stamina": 216, + "height": 6.2, + "weight": 162, + "quick_moves": [ + "Waterfall", + "Dragon Tail" + ], + "charged_moves": [ + "Surf", + "Blizzard", + "Hyper Beam" + ], + "family": 349, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "351": { + "name": "Castform", + "pokedex_id": 351, + "default_form_id": 29, + "forms": { + "29": { + "name": "Normal", + "proto": "CASTFORM_NORMAL", + "charged_moves": [ + "Hurricane", + "Energy Ball", + "Weather Ball Rock" + ] + }, + "30": { + "name": "Sunny", + "proto": "CASTFORM_SUNNY", + "quick_moves": [ + "Ember", + "Tackle" + ], + "charged_moves": [ + "Fire Blast", + "Solar Beam", + "Weather Ball Fire" + ], + "types": [ + "Fire" + ] + }, + "31": { + "name": "Rainy", + "proto": "CASTFORM_RAINY", + "quick_moves": [ + "Water Gun", + "Tackle" + ], + "charged_moves": [ + "Hydro Pump", + "Thunder", + "Weather Ball Water" + ], + "types": [ + "Water" + ] + }, + "32": { + "name": "Snowy", + "proto": "CASTFORM_SNOWY", + "quick_moves": [ + "Powder Snow", + "Tackle" + ], + "charged_moves": [ + "Blizzard", + "Ice Beam", + "Weather Ball Ice" + ], + "types": [ + "Ice" + ] + } + }, + "types": [ + "Normal" + ], + "attack": 139, + "defense": 139, + "stamina": 172, + "height": 0.3, + "weight": 0.8, + "quick_moves": [ + "Tackle", + "Hex" + ], + "charged_moves": [ + "Hurricane", + "Energy Ball" + ], + "family": 351, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn" + }, + "352": { + "name": "Kecleon", + "pokedex_id": 352, + "default_form_id": 1586, + "forms": { + "1586": { + "name": "Normal", + "proto": "KECLEON_NORMAL" + }, + "1587": { + "name": "Shadow", + "proto": "KECLEON_SHADOW" + }, + "1588": { + "name": "Purified", + "proto": "KECLEON_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Normal" + ], + "attack": 161, + "defense": 189, + "stamina": 155, + "height": 0.99, + "weight": 22, + "quick_moves": [ + "Lick", + "Sucker Punch" + ], + "charged_moves": [ + "Foul Play", + "Flamethrower", + "Thunder", + "Ice Beam", + "Aerial Ace", + "Shadow Sneak" + ], + "family": 352, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "353": { + "name": "Shuppet", + "pokedex_id": 353, + "default_form_id": 908, + "forms": { + "908": { + "name": "Normal", + "proto": "SHUPPET_NORMAL", + "evolutions": [ + { + "pokemon": 354, + "form": 911 + } + ] + }, + "909": { + "name": "Shadow", + "proto": "SHUPPET_SHADOW", + "evolutions": [ + { + "pokemon": 354, + "form": 912 + } + ] + }, + "910": { + "name": "Purified", + "proto": "SHUPPET_PURIFIED", + "evolutions": [ + { + "pokemon": 354, + "form": 913 + } + ] + } + }, + "types": [ + "Ghost" + ], + "attack": 138, + "defense": 65, + "stamina": 127, + "height": 0.61, + "weight": 2.3, + "quick_moves": [ + "Feint Attack", + "Astonish" + ], + "charged_moves": [ + "Ominous Wind", + "Night Shade", + "Shadow Sneak" + ], + "family": 353, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 354, + "form": 911 + } + ], + "little": true + }, + "354": { + "name": "Banette", + "pokedex_id": 354, + "default_form_id": 911, + "forms": { + "911": { + "name": "Normal", + "proto": "BANETTE_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "912": { + "name": "Shadow", + "proto": "BANETTE_SHADOW" + }, + "913": { + "name": "Purified", + "proto": "BANETTE_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Ghost" + ], + "attack": 218, + "defense": 126, + "stamina": 162, + "height": 1.09, + "weight": 12.5, + "quick_moves": [ + "Hex", + "Shadow Claw" + ], + "charged_moves": [ + "Shadow Ball", + "Dazzling Gleam", + "Thunder" + ], + "family": 353, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 312, + "defense": 160, + "stamina": 162, + "unreleased": true + } + } + }, + "355": { + "name": "Duskull", + "pokedex_id": 355, + "default_form_id": 914, + "forms": { + "914": { + "name": "Normal", + "proto": "DUSKULL_NORMAL", + "evolutions": [ + { + "pokemon": 356, + "form": 917 + } + ] + }, + "915": { + "name": "Shadow", + "proto": "DUSKULL_SHADOW", + "evolutions": [ + { + "pokemon": 356, + "form": 918 + } + ] + }, + "916": { + "name": "Purified", + "proto": "DUSKULL_PURIFIED", + "evolutions": [ + { + "pokemon": 356, + "form": 919 + } + ] + } + }, + "types": [ + "Ghost" + ], + "attack": 70, + "defense": 162, + "stamina": 85, + "height": 0.79, + "weight": 15, + "quick_moves": [ + "Hex", + "Astonish" + ], + "charged_moves": [ + "Ominous Wind", + "Night Shade", + "Shadow Sneak" + ], + "family": 355, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 356, + "form": 917 + } + ], + "little": true + }, + "356": { + "name": "Dusclops", + "pokedex_id": 356, + "default_form_id": 917, + "forms": { + "917": { + "name": "Normal", + "proto": "DUSCLOPS_NORMAL", + "evolutions": [ + { + "pokemon": 477, + "form": 920 + } + ] + }, + "918": { + "name": "Shadow", + "proto": "DUSCLOPS_SHADOW", + "evolutions": [ + { + "pokemon": 477, + "form": 921 + } + ] + }, + "919": { + "name": "Purified", + "proto": "DUSCLOPS_PURIFIED", + "evolutions": [ + { + "pokemon": 477, + "form": 922 + } + ] + } + }, + "types": [ + "Ghost" + ], + "attack": 124, + "defense": 234, + "stamina": 120, + "height": 1.6, + "weight": 30.6, + "quick_moves": [ + "Hex", + "Feint Attack" + ], + "charged_moves": [ + "Shadow Punch", + "Ice Punch", + "Fire Punch" + ], + "family": 355, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 477, + "form": 920 + } + ] + }, + "357": { + "name": "Tropius", + "pokedex_id": 357, + "default_form_id": 1589, + "forms": { + "1589": { + "name": "Normal", + "proto": "TROPIUS_NORMAL" + }, + "1590": { + "name": "Shadow", + "proto": "TROPIUS_SHADOW" + }, + "1591": { + "name": "Purified", + "proto": "TROPIUS_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Grass", + "Flying" + ], + "attack": 136, + "defense": 163, + "stamina": 223, + "height": 2.01, + "weight": 100, + "quick_moves": [ + "Air Slash", + "Razor Leaf" + ], + "charged_moves": [ + "Stomp", + "Aerial Ace", + "Leaf Blade" + ], + "family": 357, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "358": { + "name": "Chimecho", + "pokedex_id": 358, + "default_form_id": 1592, + "forms": { + "1592": { + "name": "Normal", + "proto": "CHIMECHO_NORMAL" + }, + "1593": { + "name": "Shadow", + "proto": "CHIMECHO_SHADOW" + }, + "1594": { + "name": "Purified", + "proto": "CHIMECHO_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Psychic" + ], + "attack": 175, + "defense": 170, + "stamina": 181, + "height": 0.61, + "weight": 1, + "quick_moves": [ + "Extrasensory", + "Astonish" + ], + "charged_moves": [ + "Energy Ball", + "Shadow Ball", + "Psyshock", + "Psyshock" + ], + "family": 358, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "359": { + "name": "Absol", + "pokedex_id": 359, + "default_form_id": 830, + "forms": { + "830": { + "name": "Normal", + "proto": "ABSOL_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "831": { + "name": "Shadow", + "proto": "ABSOL_SHADOW" + }, + "832": { + "name": "Purified", + "proto": "ABSOL_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Dark" + ], + "attack": 246, + "defense": 120, + "stamina": 163, + "height": 1.19, + "weight": 47, + "quick_moves": [ + "Psycho Cut", + "Snarl" + ], + "charged_moves": [ + "Dark Pulse", + "Thunder", + "Megahorn", + "Payback" + ], + "family": 359, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 314, + "defense": 130, + "stamina": 163, + "unreleased": true + } + } + }, + "360": { + "name": "Wynaut", + "pokedex_id": 360, + "default_form_id": 1595, + "forms": { + "1595": { + "name": "Normal", + "proto": "WYNAUT_NORMAL" + }, + "1596": { + "name": "Shadow", + "proto": "WYNAUT_SHADOW" + }, + "1597": { + "name": "Purified", + "proto": "WYNAUT_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Psychic" + ], + "attack": 41, + "defense": 86, + "stamina": 216, + "height": 0.61, + "weight": 14, + "quick_moves": [ + "Splash", + "Counter" + ], + "charged_moves": [ + "Mirror Coat" + ], + "family": 202, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 202 + } + ], + "little": true + }, + "361": { + "name": "Snorunt", + "pokedex_id": 361, + "default_form_id": 926, + "forms": { + "926": { + "name": "Normal", + "proto": "SNORUNT_NORMAL" + }, + "927": { + "name": "Shadow", + "proto": "SNORUNT_SHADOW" + }, + "928": { + "name": "Purified", + "proto": "SNORUNT_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Ice" + ], + "attack": 95, + "defense": 95, + "stamina": 137, + "height": 0.71, + "weight": 16.8, + "quick_moves": [ + "Powder Snow", + "Hex" + ], + "charged_moves": [ + "Avalanche", + "Icy Wind", + "Shadow Ball" + ], + "family": 361, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 478, + "gender_requirement": 2 + }, + { + "pokemon": 362 + } + ], + "little": true + }, + "362": { + "name": "Glalie", + "pokedex_id": 362, + "default_form_id": 929, + "forms": { + "929": { + "name": "Normal", + "proto": "GLALIE_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "930": { + "name": "Shadow", + "proto": "GLALIE_SHADOW" + }, + "931": { + "name": "Purified", + "proto": "GLALIE_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Ice" + ], + "attack": 162, + "defense": 162, + "stamina": 190, + "height": 1.5, + "weight": 256.5, + "quick_moves": [ + "Ice Shard", + "Frost Breath" + ], + "charged_moves": [ + "Avalanche", + "Gyro Ball", + "Shadow Ball" + ], + "family": 361, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "temp_evolutions": { + "1": { + "attack": 252, + "defense": 168, + "stamina": 190, + "unreleased": true + } + } + }, + "363": { + "name": "Spheal", + "pokedex_id": 363, + "default_form_id": 1598, + "forms": { + "1598": { + "name": "Normal", + "proto": "SPHEAL_NORMAL", + "evolutions": [ + { + "pokemon": 364, + "form": 1601 + } + ] + }, + "1599": { + "name": "Shadow", + "proto": "SPHEAL_SHADOW", + "evolutions": [ + { + "pokemon": 364, + "form": 1602 + } + ] + }, + "1600": { + "name": "Purified", + "proto": "SPHEAL_PURIFIED", + "evolutions": [ + { + "pokemon": 364, + "form": 1603 + } + ] + } + }, + "types": [ + "Ice", + "Water" + ], + "attack": 95, + "defense": 90, + "stamina": 172, + "height": 0.79, + "weight": 39.5, + "quick_moves": [ + "Water Gun", + "Rock Smash" + ], + "charged_moves": [ + "Aurora Beam", + "Body Slam", + "Water Pulse" + ], + "family": 363, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 364, + "form": 1601 + } + ], + "little": true + }, + "364": { + "name": "Sealeo", + "pokedex_id": 364, + "default_form_id": 1601, + "forms": { + "1601": { + "name": "Normal", + "proto": "SEALEO_NORMAL", + "evolutions": [ + { + "pokemon": 365, + "form": 1604 + } + ] + }, + "1602": { + "name": "Shadow", + "proto": "SEALEO_SHADOW", + "evolutions": [ + { + "pokemon": 365, + "form": 1605 + } + ] + }, + "1603": { + "name": "Purified", + "proto": "SEALEO_PURIFIED", + "evolutions": [ + { + "pokemon": 365, + "form": 1606 + } + ] + } + }, + "types": [ + "Ice", + "Water" + ], + "attack": 137, + "defense": 132, + "stamina": 207, + "height": 1.09, + "weight": 87.6, + "quick_moves": [ + "Water Gun", + "Powder Snow" + ], + "charged_moves": [ + "Aurora Beam", + "Body Slam", + "Water Pulse" + ], + "family": 363, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 365, + "form": 1604 + } + ] + }, + "365": { + "name": "Walrein", + "pokedex_id": 365, + "default_form_id": 1604, + "forms": { + "1604": { + "name": "Normal", + "proto": "WALREIN_NORMAL" + }, + "1605": { + "name": "Shadow", + "proto": "WALREIN_SHADOW" + }, + "1606": { + "name": "Purified", + "proto": "WALREIN_PURIFIED" + } + }, + "types": [ + "Ice", + "Water" + ], + "attack": 182, + "defense": 176, + "stamina": 242, + "height": 1.4, + "weight": 150.6, + "quick_moves": [ + "Waterfall", + "Frost Breath" + ], + "charged_moves": [ + "Blizzard", + "Earthquake", + "Water Pulse" + ], + "family": 363, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn" + }, + "366": { + "name": "Clamperl", + "pokedex_id": 366, + "default_form_id": 1607, + "forms": { + "1607": { + "name": "Normal", + "proto": "CLAMPERL_NORMAL" + }, + "1608": { + "name": "Shadow", + "proto": "CLAMPERL_SHADOW" + }, + "1609": { + "name": "Purified", + "proto": "CLAMPERL_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water" + ], + "attack": 133, + "defense": 135, + "stamina": 111, + "height": 0.41, + "weight": 52.5, + "quick_moves": [ + "Water Gun" + ], + "charged_moves": [ + "Body Slam", + "Ice Beam", + "Water Pulse" + ], + "family": 366, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 367 + }, + { + "pokemon": 368 + } + ], + "little": true + }, + "367": { + "name": "Huntail", + "pokedex_id": 367, + "default_form_id": 1610, + "forms": { + "1610": { + "name": "Normal", + "proto": "HUNTAIL_NORMAL" + }, + "1611": { + "name": "Shadow", + "proto": "HUNTAIL_SHADOW" + }, + "1612": { + "name": "Purified", + "proto": "HUNTAIL_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water" + ], + "attack": 197, + "defense": 179, + "stamina": 146, + "height": 1.7, + "weight": 27, + "quick_moves": [ + "Water Gun", + "Bite" + ], + "charged_moves": [ + "Crunch", + "Ice Beam", + "Aqua Tail" + ], + "family": 366, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "368": { + "name": "Gorebyss", + "pokedex_id": 368, + "default_form_id": 1613, + "forms": { + "1613": { + "name": "Normal", + "proto": "GOREBYSS_NORMAL" + }, + "1614": { + "name": "Shadow", + "proto": "GOREBYSS_SHADOW" + }, + "1615": { + "name": "Purified", + "proto": "GOREBYSS_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water" + ], + "attack": 211, + "defense": 179, + "stamina": 146, + "height": 1.8, + "weight": 22.6, + "quick_moves": [ + "Water Gun", + "Confusion" + ], + "charged_moves": [ + "Draining Kiss", + "Psychic", + "Water Pulse" + ], + "family": 366, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "369": { + "name": "Relicanth", + "pokedex_id": 369, + "default_form_id": 1616, + "forms": { + "1616": { + "name": "Normal", + "proto": "RELICANTH_NORMAL" + }, + "1617": { + "name": "Shadow", + "proto": "RELICANTH_SHADOW" + }, + "1618": { + "name": "Purified", + "proto": "RELICANTH_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water", + "Rock" + ], + "attack": 162, + "defense": 203, + "stamina": 225, + "height": 0.99, + "weight": 23.4, + "quick_moves": [ + "Water Gun", + "Zen Headbutt" + ], + "charged_moves": [ + "Ancient Power", + "Aqua Tail", + "Hydro Pump" + ], + "family": 369, + "flee_rate": 0.01, + "capture_rate": 0.9, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "370": { + "name": "Luvdisc", + "pokedex_id": 370, + "default_form_id": 1619, + "forms": { + "1619": { + "name": "Normal", + "proto": "LUVDISC_NORMAL" + }, + "1620": { + "name": "Shadow", + "proto": "LUVDISC_SHADOW" + }, + "1621": { + "name": "Purified", + "proto": "LUVDISC_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water" + ], + "attack": 81, + "defense": 128, + "stamina": 125, + "height": 0.61, + "weight": 8.7, + "quick_moves": [ + "Water Gun", + "Splash" + ], + "charged_moves": [ + "Draining Kiss", + "Water Pulse", + "Aqua Jet" + ], + "family": 370, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "371": { + "name": "Bagon", + "pokedex_id": 371, + "default_form_id": 755, + "forms": { + "755": { + "name": "Normal", + "proto": "BAGON_NORMAL", + "evolutions": [ + { + "pokemon": 372, + "form": 758 + } + ] + }, + "756": { + "name": "Shadow", + "proto": "BAGON_SHADOW", + "evolutions": [ + { + "pokemon": 372, + "form": 759 + } + ] + }, + "757": { + "name": "Purified", + "proto": "BAGON_PURIFIED", + "evolutions": [ + { + "pokemon": 372, + "form": 760 + } + ] + } + }, + "types": [ + "Dragon" + ], + "attack": 134, + "defense": 93, + "stamina": 128, + "height": 0.61, + "weight": 42.1, + "quick_moves": [ + "Bite", + "Ember" + ], + "charged_moves": [ + "Flamethrower", + "Twister", + "Crunch" + ], + "family": 371, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 372, + "form": 758 + } + ], + "little": true + }, + "372": { + "name": "Shelgon", + "pokedex_id": 372, + "default_form_id": 758, + "forms": { + "758": { + "name": "Normal", + "proto": "SHELGON_NORMAL", + "evolutions": [ + { + "pokemon": 373, + "form": 761 + } + ] + }, + "759": { + "name": "Shadow", + "proto": "SHELGON_SHADOW", + "evolutions": [ + { + "pokemon": 373, + "form": 762 + } + ] + }, + "760": { + "name": "Purified", + "proto": "SHELGON_PURIFIED", + "evolutions": [ + { + "pokemon": 373, + "form": 763 + } + ] + } + }, + "types": [ + "Dragon" + ], + "attack": 172, + "defense": 155, + "stamina": 163, + "height": 1.09, + "weight": 110.5, + "quick_moves": [ + "Ember", + "Dragon Breath" + ], + "charged_moves": [ + "Flamethrower", + "Dragon Pulse", + "Twister" + ], + "family": 371, + "flee_rate": 0.06, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 373, + "form": 761 + } + ] + }, + "373": { + "name": "Salamence", + "pokedex_id": 373, + "default_form_id": 761, + "forms": { + "761": { + "name": "Normal", + "proto": "SALAMENCE_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "762": { + "name": "Shadow", + "proto": "SALAMENCE_SHADOW" + }, + "763": { + "name": "Purified", + "proto": "SALAMENCE_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Dragon", + "Flying" + ], + "attack": 277, + "defense": 168, + "stamina": 216, + "height": 1.5, + "weight": 102.6, + "quick_moves": [ + "Dragon Tail", + "Fire Fang", + "Bite" + ], + "charged_moves": [ + "Fire Blast", + "Hydro Pump", + "Draco Meteor" + ], + "family": 371, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 310, + "defense": 251, + "stamina": 216, + "unreleased": true + } + } + }, + "374": { + "name": "Beldum", + "pokedex_id": 374, + "default_form_id": 764, + "forms": { + "764": { + "name": "Normal", + "proto": "BELDUM_NORMAL", + "evolutions": [ + { + "pokemon": 375, + "form": 767 + } + ] + }, + "765": { + "name": "Shadow", + "proto": "BELDUM_SHADOW", + "evolutions": [ + { + "pokemon": 375, + "form": 768 + } + ] + }, + "766": { + "name": "Purified", + "proto": "BELDUM_PURIFIED", + "evolutions": [ + { + "pokemon": 375, + "form": 769 + } + ] + } + }, + "types": [ + "Steel", + "Psychic" + ], + "attack": 96, + "defense": 132, + "stamina": 120, + "height": 0.61, + "weight": 95.2, + "quick_moves": [ + "Take Down" + ], + "charged_moves": [ + "Struggle" + ], + "family": 374, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 375, + "form": 767 + } + ], + "little": true + }, + "375": { + "name": "Metang", + "pokedex_id": 375, + "default_form_id": 767, + "forms": { + "767": { + "name": "Normal", + "proto": "METANG_NORMAL", + "evolutions": [ + { + "pokemon": 376, + "form": 770 + } + ] + }, + "768": { + "name": "Shadow", + "proto": "METANG_SHADOW", + "evolutions": [ + { + "pokemon": 376, + "form": 771 + } + ] + }, + "769": { + "name": "Purified", + "proto": "METANG_PURIFIED", + "evolutions": [ + { + "pokemon": 376, + "form": 772 + } + ] + } + }, + "types": [ + "Steel", + "Psychic" + ], + "attack": 138, + "defense": 176, + "stamina": 155, + "height": 1.19, + "weight": 202.5, + "quick_moves": [ + "Zen Headbutt", + "Metal Claw" + ], + "charged_moves": [ + "Psychic", + "Gyro Ball", + "Psyshock" + ], + "family": 374, + "flee_rate": 0.06, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "evolutions": [ + { + "pokemon": 376, + "form": 770 + } + ] + }, + "376": { + "name": "Metagross", + "pokedex_id": 376, + "default_form_id": 770, + "forms": { + "770": { + "name": "Normal", + "proto": "METAGROSS_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "771": { + "name": "Shadow", + "proto": "METAGROSS_SHADOW" + }, + "772": { + "name": "Purified", + "proto": "METAGROSS_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Steel", + "Psychic" + ], + "attack": 257, + "defense": 228, + "stamina": 190, + "height": 1.6, + "weight": 550, + "quick_moves": [ + "Bullet Punch", + "Zen Headbutt" + ], + "charged_moves": [ + "Psychic", + "Flash Cannon", + "Earthquake" + ], + "family": 374, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 3, + "generation": "Hoenn", + "temp_evolutions": { + "1": { + "attack": 300, + "defense": 289, + "stamina": 190, + "unreleased": true + } + } + }, + "377": { + "name": "Regirock", + "pokedex_id": 377, + "default_form_id": 1622, + "forms": { + "1622": { + "name": "Normal", + "proto": "REGIROCK_NORMAL" + }, + "1623": { + "name": "Shadow", + "proto": "REGIROCK_SHADOW" + }, + "1624": { + "name": "Purified", + "proto": "REGIROCK_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Rock" + ], + "attack": 179, + "defense": 309, + "stamina": 190, + "height": 1.7, + "weight": 230, + "quick_moves": [ + "Rock Throw", + "Rock Smash", + "Lock On" + ], + "charged_moves": [ + "Stone Edge", + "Zap Cannon", + "Focus Blast" + ], + "family": 377, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "378": { + "name": "Regice", + "pokedex_id": 378, + "default_form_id": 1625, + "forms": { + "1625": { + "name": "Normal", + "proto": "REGICE_NORMAL" + }, + "1626": { + "name": "Shadow", + "proto": "REGICE_SHADOW" + }, + "1627": { + "name": "Purified", + "proto": "REGICE_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Ice" + ], + "attack": 179, + "defense": 309, + "stamina": 190, + "height": 1.8, + "weight": 175, + "quick_moves": [ + "Frost Breath", + "Rock Smash", + "Lock On" + ], + "charged_moves": [ + "Blizzard", + "Earthquake", + "Focus Blast" + ], + "family": 378, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "379": { + "name": "Registeel", + "pokedex_id": 379, + "default_form_id": 1628, + "forms": { + "1628": { + "name": "Normal", + "proto": "REGISTEEL_NORMAL" + }, + "1629": { + "name": "Shadow", + "proto": "REGISTEEL_SHADOW" + }, + "1630": { + "name": "Purified", + "proto": "REGISTEEL_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Steel" + ], + "attack": 143, + "defense": 285, + "stamina": 190, + "height": 1.91, + "weight": 205, + "quick_moves": [ + "Metal Claw", + "Rock Smash", + "Lock On" + ], + "charged_moves": [ + "Flash Cannon", + "Hyper Beam", + "Focus Blast" + ], + "family": 379, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "380": { + "name": "Latias", + "pokedex_id": 380, + "default_form_id": 1631, + "forms": { + "1631": { + "name": "Normal", + "proto": "LATIAS_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1632": { + "name": "Shadow", + "proto": "LATIAS_SHADOW" + }, + "1633": { + "name": "Purified", + "proto": "LATIAS_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Dragon", + "Psychic" + ], + "attack": 228, + "defense": 246, + "stamina": 190, + "height": 1.4, + "weight": 40, + "quick_moves": [ + "Dragon Breath", + "Zen Headbutt", + "Charm" + ], + "charged_moves": [ + "Psychic", + "Outrage", + "Thunder" + ], + "family": 380, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "temp_evolutions": { + "1": { + "attack": 289, + "defense": 297, + "stamina": 190, + "unreleased": true + } + } + }, + "381": { + "name": "Latios", + "pokedex_id": 381, + "default_form_id": 1634, + "forms": { + "1634": { + "name": "Normal", + "proto": "LATIOS_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1635": { + "name": "Shadow", + "proto": "LATIOS_SHADOW" + }, + "1636": { + "name": "Purified", + "proto": "LATIOS_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Dragon", + "Psychic" + ], + "attack": 268, + "defense": 212, + "stamina": 190, + "height": 2.01, + "weight": 60, + "quick_moves": [ + "Dragon Breath", + "Zen Headbutt" + ], + "charged_moves": [ + "Psychic", + "Dragon Claw", + "Solar Beam" + ], + "family": 381, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "temp_evolutions": { + "1": { + "attack": 335, + "defense": 241, + "stamina": 190, + "unreleased": true + } + } + }, + "382": { + "name": "Kyogre", + "pokedex_id": 382, + "default_form_id": 1637, + "forms": { + "1637": { + "name": "Normal", + "proto": "KYOGRE_NORMAL" + }, + "1638": { + "name": "Shadow", + "proto": "KYOGRE_SHADOW" + }, + "1639": { + "name": "Purified", + "proto": "KYOGRE_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Water" + ], + "attack": 270, + "defense": 228, + "stamina": 205, + "height": 4.5, + "weight": 352, + "quick_moves": [ + "Waterfall" + ], + "charged_moves": [ + "Hydro Pump", + "Blizzard", + "Thunder", + "Surf" + ], + "family": 382, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "383": { + "name": "Groudon", + "pokedex_id": 383, + "default_form_id": 1640, + "forms": { + "1640": { + "name": "Normal", + "proto": "GROUDON_NORMAL" + }, + "1641": { + "name": "Shadow", + "proto": "GROUDON_SHADOW" + }, + "1642": { + "name": "Purified", + "proto": "GROUDON_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Ground" + ], + "attack": 270, + "defense": 228, + "stamina": 205, + "height": 3.51, + "weight": 950, + "quick_moves": [ + "Mud Shot", + "Dragon Tail" + ], + "charged_moves": [ + "Earthquake", + "Fire Blast", + "Solar Beam" + ], + "family": 383, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "384": { + "name": "Rayquaza", + "pokedex_id": 384, + "default_form_id": 1643, + "forms": { + "1643": { + "name": "Normal", + "proto": "RAYQUAZA_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1644": { + "name": "Shadow", + "proto": "RAYQUAZA_SHADOW" + }, + "1645": { + "name": "Purified", + "proto": "RAYQUAZA_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Dragon", + "Flying" + ], + "attack": 284, + "defense": 170, + "stamina": 213, + "height": 7.01, + "weight": 206.5, + "quick_moves": [ + "Air Slash", + "Dragon Tail" + ], + "charged_moves": [ + "Outrage", + "Aerial Ace", + "Ancient Power" + ], + "family": 384, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "temp_evolutions": { + "1": { + "attack": 389, + "defense": 216, + "stamina": 233, + "unreleased": true + } + } + }, + "385": { + "name": "Jirachi", + "pokedex_id": 385, + "default_form_id": 1646, + "forms": { + "1646": { + "name": "Normal", + "proto": "JIRACHI_NORMAL" + }, + "1647": { + "name": "Shadow", + "proto": "JIRACHI_SHADOW" + }, + "1648": { + "name": "Purified", + "proto": "JIRACHI_PURIFIED" + } + }, + "gen_id": 3, + "generation": "Hoenn", + "types": [ + "Steel", + "Psychic" + ], + "attack": 210, + "defense": 210, + "stamina": 225, + "height": 0.3, + "weight": 1.1, + "quick_moves": [ + "Confusion", + "Charge Beam" + ], + "charged_moves": [ + "Dazzling Gleam", + "Psychic", + "Doom Desire" + ], + "family": 385, + "capture_rate": 100, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "386": { + "name": "Deoxys", + "pokedex_id": 386, + "default_form_id": 33, + "forms": { + "33": { + "name": "Normal", + "proto": "DEOXYS_NORMAL", + "charged_moves": [ + "Psycho Boost", + "Thunderbolt", + "Hyper Beam" + ] + }, + "34": { + "name": "Attack", + "proto": "DEOXYS_ATTACK", + "attack": 414, + "defense": 46, + "stamina": 137, + "quick_moves": [ + "Zen Headbutt", + "Poison Jab" + ], + "charged_moves": [ + "Psycho Boost", + "Zap Cannon", + "Dark Pulse" + ] + }, + "35": { + "name": "Defense", + "proto": "DEOXYS_DEFENSE", + "attack": 144, + "defense": 330, + "stamina": 137, + "quick_moves": [ + "Zen Headbutt", + "Counter" + ], + "charged_moves": [ + "Psycho Boost", + "Thunderbolt", + "Rock Slide" + ] + }, + "36": { + "name": "Speed", + "proto": "DEOXYS_SPEED", + "attack": 230, + "defense": 218, + "stamina": 137, + "charged_moves": [ + "Psycho Boost", + "Thunderbolt", + "Swift" + ] + } + }, + "types": [ + "Psychic" + ], + "attack": 345, + "defense": 115, + "stamina": 137, + "height": 1.7, + "weight": 60.8, + "quick_moves": [ + "Zen Headbutt", + "Charge Beam" + ], + "charged_moves": [ + "Psycho Boost", + "Zap Cannon", + "Hyper Beam" + ], + "family": 386, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": false, + "mythic": true, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 3, + "generation": "Hoenn" + }, + "387": { + "name": "Turtwig", + "pokedex_id": 387, + "default_form_id": 688, + "forms": { + "688": { + "name": "Normal", + "proto": "TURTWIG_NORMAL", + "evolutions": [ + { + "pokemon": 388, + "form": 691 + } + ] + }, + "689": { + "name": "Shadow", + "proto": "TURTWIG_SHADOW", + "evolutions": [ + { + "pokemon": 388, + "form": 692 + } + ] + }, + "690": { + "name": "Purified", + "proto": "TURTWIG_PURIFIED", + "evolutions": [ + { + "pokemon": 388, + "form": 693 + } + ] + } + }, + "types": [ + "Grass" + ], + "attack": 119, + "defense": 110, + "stamina": 146, + "height": 0.4, + "weight": 10.2, + "quick_moves": [ + "Tackle", + "Razor Leaf" + ], + "charged_moves": [ + "Energy Ball", + "Seed Bomb", + "Body Slam" + ], + "family": 387, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 388, + "form": 691 + } + ], + "little": true + }, + "388": { + "name": "Grotle", + "pokedex_id": 388, + "default_form_id": 691, + "forms": { + "691": { + "name": "Normal", + "proto": "GROTLE_NORMAL", + "evolutions": [ + { + "pokemon": 389, + "form": 694 + } + ] + }, + "692": { + "name": "Shadow", + "proto": "GROTLE_SHADOW", + "evolutions": [ + { + "pokemon": 389, + "form": 695 + } + ] + }, + "693": { + "name": "Purified", + "proto": "GROTLE_PURIFIED", + "evolutions": [ + { + "pokemon": 389, + "form": 696 + } + ] + } + }, + "types": [ + "Grass" + ], + "attack": 157, + "defense": 143, + "stamina": 181, + "height": 1.1, + "weight": 97, + "quick_moves": [ + "Bite", + "Razor Leaf" + ], + "charged_moves": [ + "Energy Ball", + "Solar Beam", + "Body Slam" + ], + "family": 387, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 389, + "form": 694 + } + ] + }, + "389": { + "name": "Torterra", + "pokedex_id": 389, + "default_form_id": 694, + "forms": { + "694": { + "name": "Normal", + "proto": "TORTERRA_NORMAL" + }, + "695": { + "name": "Shadow", + "proto": "TORTERRA_SHADOW" + }, + "696": { + "name": "Purified", + "proto": "TORTERRA_PURIFIED" + } + }, + "types": [ + "Grass", + "Ground" + ], + "attack": 202, + "defense": 188, + "stamina": 216, + "height": 2.2, + "weight": 310, + "quick_moves": [ + "Bite", + "Razor Leaf" + ], + "charged_moves": [ + "Stone Edge", + "Solar Beam", + "Earthquake", + "Sand Tomb" + ], + "family": 387, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "390": { + "name": "Chimchar", + "pokedex_id": 390, + "default_form_id": 818, + "forms": { + "818": { + "name": "Normal", + "proto": "CHIMCHAR_NORMAL", + "evolutions": [ + { + "pokemon": 391, + "form": 821 + } + ] + }, + "819": { + "name": "Shadow", + "proto": "CHIMCHAR_SHADOW", + "evolutions": [ + { + "pokemon": 391, + "form": 822 + } + ] + }, + "820": { + "name": "Purified", + "proto": "CHIMCHAR_PURIFIED", + "evolutions": [ + { + "pokemon": 391, + "form": 823 + } + ] + } + }, + "types": [ + "Fire" + ], + "attack": 113, + "defense": 86, + "stamina": 127, + "height": 0.5, + "weight": 6.2, + "quick_moves": [ + "Ember", + "Scratch" + ], + "charged_moves": [ + "Flame Wheel", + "Flamethrower", + "Flame Charge" + ], + "family": 390, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 391, + "form": 821 + } + ], + "little": true + }, + "391": { + "name": "Monferno", + "pokedex_id": 391, + "default_form_id": 821, + "forms": { + "821": { + "name": "Normal", + "proto": "MONFERNO_NORMAL", + "evolutions": [ + { + "pokemon": 392, + "form": 824 + } + ] + }, + "822": { + "name": "Shadow", + "proto": "MONFERNO_SHADOW", + "evolutions": [ + { + "pokemon": 392, + "form": 825 + } + ] + }, + "823": { + "name": "Purified", + "proto": "MONFERNO_PURIFIED", + "evolutions": [ + { + "pokemon": 392, + "form": 826 + } + ] + } + }, + "types": [ + "Fire", + "Fighting" + ], + "attack": 158, + "defense": 105, + "stamina": 162, + "height": 0.9, + "weight": 22, + "quick_moves": [ + "Ember", + "Rock Smash" + ], + "charged_moves": [ + "Flame Wheel", + "Flamethrower", + "Low Sweep" + ], + "family": 390, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 392, + "form": 824 + } + ] + }, + "392": { + "name": "Infernape", + "pokedex_id": 392, + "default_form_id": 824, + "forms": { + "824": { + "name": "Normal", + "proto": "INFERNAPE_NORMAL" + }, + "825": { + "name": "Shadow", + "proto": "INFERNAPE_SHADOW" + }, + "826": { + "name": "Purified", + "proto": "INFERNAPE_PURIFIED" + } + }, + "types": [ + "Fire", + "Fighting" + ], + "attack": 222, + "defense": 151, + "stamina": 183, + "height": 1.2, + "weight": 55, + "quick_moves": [ + "Fire Spin", + "Rock Smash" + ], + "charged_moves": [ + "Solar Beam", + "Flamethrower", + "Close Combat" + ], + "family": 390, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "393": { + "name": "Piplup", + "pokedex_id": 393, + "default_form_id": 1649, + "forms": { + "1649": { + "name": "Normal", + "proto": "PIPLUP_NORMAL" + }, + "1650": { + "name": "Shadow", + "proto": "PIPLUP_SHADOW" + }, + "1651": { + "name": "Purified", + "proto": "PIPLUP_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Water" + ], + "attack": 112, + "defense": 102, + "stamina": 142, + "height": 0.4, + "weight": 5.2, + "quick_moves": [ + "Bubble", + "Pound" + ], + "charged_moves": [ + "Bubble Beam", + "Drill Peck", + "Icy Wind" + ], + "family": 393, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 394 + } + ], + "little": true + }, + "394": { + "name": "Prinplup", + "pokedex_id": 394, + "default_form_id": 1652, + "forms": { + "1652": { + "name": "Normal", + "proto": "PRINPLUP_NORMAL" + }, + "1653": { + "name": "Shadow", + "proto": "PRINPLUP_SHADOW" + }, + "1654": { + "name": "Purified", + "proto": "PRINPLUP_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Water" + ], + "attack": 150, + "defense": 139, + "stamina": 162, + "height": 0.8, + "weight": 23, + "quick_moves": [ + "Bubble", + "Metal Claw" + ], + "charged_moves": [ + "Bubble Beam", + "Hydro Pump", + "Icy Wind" + ], + "family": 393, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 395 + } + ] + }, + "395": { + "name": "Empoleon", + "pokedex_id": 395, + "default_form_id": 1655, + "forms": { + "1655": { + "name": "Normal", + "proto": "EMPOLEON_NORMAL" + }, + "1656": { + "name": "Shadow", + "proto": "EMPOLEON_SHADOW" + }, + "1657": { + "name": "Purified", + "proto": "EMPOLEON_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Water", + "Steel" + ], + "attack": 210, + "defense": 186, + "stamina": 197, + "height": 1.7, + "weight": 84.5, + "quick_moves": [ + "Waterfall", + "Metal Claw" + ], + "charged_moves": [ + "Hydro Pump", + "Blizzard", + "Flash Cannon", + "Drill Peck" + ], + "family": 393, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "396": { + "name": "Starly", + "pokedex_id": 396, + "default_form_id": 1658, + "forms": { + "1658": { + "name": "Normal", + "proto": "STARLY_NORMAL", + "evolutions": [ + { + "pokemon": 397, + "form": 1661 + } + ] + }, + "1659": { + "name": "Shadow", + "proto": "STARLY_SHADOW", + "evolutions": [ + { + "pokemon": 397, + "form": 1662 + } + ] + }, + "1660": { + "name": "Purified", + "proto": "STARLY_PURIFIED", + "evolutions": [ + { + "pokemon": 397, + "form": 1663 + } + ] + } + }, + "types": [ + "Normal", + "Flying" + ], + "attack": 101, + "defense": 58, + "stamina": 120, + "height": 0.3, + "weight": 2, + "quick_moves": [ + "Tackle", + "Quick Attack" + ], + "charged_moves": [ + "Aerial Ace", + "Brave Bird" + ], + "family": 396, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 397, + "form": 1661 + } + ], + "little": true + }, + "397": { + "name": "Staravia", + "pokedex_id": 397, + "default_form_id": 1661, + "forms": { + "1661": { + "name": "Normal", + "proto": "STARAVIA_NORMAL", + "evolutions": [ + { + "pokemon": 398, + "form": 1664 + } + ] + }, + "1662": { + "name": "Shadow", + "proto": "STARAVIA_SHADOW", + "evolutions": [ + { + "pokemon": 398, + "form": 1665 + } + ] + }, + "1663": { + "name": "Purified", + "proto": "STARAVIA_PURIFIED", + "evolutions": [ + { + "pokemon": 398, + "form": 1666 + } + ] + } + }, + "types": [ + "Normal", + "Flying" + ], + "attack": 142, + "defense": 94, + "stamina": 146, + "height": 0.6, + "weight": 15.5, + "quick_moves": [ + "Wing Attack", + "Quick Attack" + ], + "charged_moves": [ + "Aerial Ace", + "Brave Bird", + "Heat Wave" + ], + "family": 396, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 398, + "form": 1664 + } + ] + }, + "398": { + "name": "Staraptor", + "pokedex_id": 398, + "default_form_id": 1664, + "forms": { + "1664": { + "name": "Normal", + "proto": "STARAPTOR_NORMAL" + }, + "1665": { + "name": "Shadow", + "proto": "STARAPTOR_SHADOW" + }, + "1666": { + "name": "Purified", + "proto": "STARAPTOR_PURIFIED" + } + }, + "types": [ + "Normal", + "Flying" + ], + "attack": 234, + "defense": 140, + "stamina": 198, + "height": 1.2, + "weight": 24.9, + "quick_moves": [ + "Wing Attack", + "Quick Attack" + ], + "charged_moves": [ + "Brave Bird", + "Heat Wave", + "Close Combat" + ], + "family": 396, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "399": { + "name": "Bidoof", + "pokedex_id": 399, + "default_form_id": 1667, + "forms": { + "1667": { + "name": "Normal", + "proto": "BIDOOF_NORMAL", + "evolutions": [ + { + "pokemon": 400, + "form": 1670 + } + ] + }, + "1668": { + "name": "Shadow", + "proto": "BIDOOF_SHADOW", + "evolutions": [ + { + "pokemon": 400, + "form": 1671 + } + ] + }, + "1669": { + "name": "Purified", + "proto": "BIDOOF_PURIFIED", + "evolutions": [ + { + "pokemon": 400, + "form": 1672 + } + ] + } + }, + "types": [ + "Normal" + ], + "attack": 80, + "defense": 73, + "stamina": 153, + "height": 0.5, + "weight": 20, + "quick_moves": [ + "Tackle", + "Take Down" + ], + "charged_moves": [ + "Hyper Fang", + "Crunch", + "Grass Knot" + ], + "family": 399, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 400, + "form": 1670 + } + ], + "little": true + }, + "400": { + "name": "Bibarel", + "pokedex_id": 400, + "default_form_id": 1670, + "forms": { + "1670": { + "name": "Normal", + "proto": "BIBAREL_NORMAL" + }, + "1671": { + "name": "Shadow", + "proto": "BIBAREL_SHADOW" + }, + "1672": { + "name": "Purified", + "proto": "BIBAREL_PURIFIED" + } + }, + "types": [ + "Normal", + "Water" + ], + "attack": 162, + "defense": 119, + "stamina": 188, + "height": 1, + "weight": 31.5, + "quick_moves": [ + "Water Gun", + "Take Down" + ], + "charged_moves": [ + "Hyper Fang", + "Hyper Beam", + "Surf" + ], + "family": 399, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "401": { + "name": "Kricketot", + "pokedex_id": 401, + "default_form_id": 1673, + "forms": { + "1673": { + "name": "Normal", + "proto": "KRICKETOT_NORMAL" + }, + "1674": { + "name": "Shadow", + "proto": "KRICKETOT_SHADOW" + }, + "1675": { + "name": "Purified", + "proto": "KRICKETOT_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Bug" + ], + "attack": 45, + "defense": 74, + "stamina": 114, + "height": 0.3, + "weight": 2.2, + "quick_moves": [ + "Struggle Bug", + "Bug Bite" + ], + "charged_moves": [ + "Struggle" + ], + "family": 401, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 402 + } + ], + "little": true + }, + "402": { + "name": "Kricketune", + "pokedex_id": 402, + "default_form_id": 1676, + "forms": { + "1676": { + "name": "Normal", + "proto": "KRICKETUNE_NORMAL" + }, + "1677": { + "name": "Shadow", + "proto": "KRICKETUNE_SHADOW" + }, + "1678": { + "name": "Purified", + "proto": "KRICKETUNE_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Bug" + ], + "attack": 160, + "defense": 100, + "stamina": 184, + "height": 1, + "weight": 25.5, + "quick_moves": [ + "Struggle Bug", + "Fury Cutter" + ], + "charged_moves": [ + "Bug Buzz", + "X Scissor", + "Aerial Ace" + ], + "family": 401, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "403": { + "name": "Shinx", + "pokedex_id": 403, + "default_form_id": 1679, + "forms": { + "1679": { + "name": "Normal", + "proto": "SHINX_NORMAL" + }, + "1680": { + "name": "Shadow", + "proto": "SHINX_SHADOW" + }, + "1681": { + "name": "Purified", + "proto": "SHINX_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Electric" + ], + "attack": 117, + "defense": 64, + "stamina": 128, + "height": 0.5, + "weight": 9.5, + "quick_moves": [ + "Tackle", + "Spark" + ], + "charged_moves": [ + "Discharge", + "Thunderbolt", + "Swift" + ], + "family": 403, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 404 + } + ], + "little": true + }, + "404": { + "name": "Luxio", + "pokedex_id": 404, + "default_form_id": 1682, + "forms": { + "1682": { + "name": "Normal", + "proto": "LUXIO_NORMAL" + }, + "1683": { + "name": "Shadow", + "proto": "LUXIO_SHADOW" + }, + "1684": { + "name": "Purified", + "proto": "LUXIO_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Electric" + ], + "attack": 159, + "defense": 95, + "stamina": 155, + "height": 0.9, + "weight": 30.5, + "quick_moves": [ + "Spark", + "Bite" + ], + "charged_moves": [ + "Thunderbolt", + "Wild Charge", + "Crunch" + ], + "family": 403, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 405 + } + ] + }, + "405": { + "name": "Luxray", + "pokedex_id": 405, + "default_form_id": 1685, + "forms": { + "1685": { + "name": "Normal", + "proto": "LUXRAY_NORMAL" + }, + "1686": { + "name": "Shadow", + "proto": "LUXRAY_SHADOW" + }, + "1687": { + "name": "Purified", + "proto": "LUXRAY_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Electric" + ], + "attack": 232, + "defense": 156, + "stamina": 190, + "height": 1.4, + "weight": 42, + "quick_moves": [ + "Spark", + "Snarl", + "Hidden Power" + ], + "charged_moves": [ + "Hyper Beam", + "Wild Charge", + "Crunch" + ], + "family": 403, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "406": { + "name": "Budew", + "pokedex_id": 406, + "default_form_id": 1688, + "forms": { + "1688": { + "name": "Normal", + "proto": "BUDEW_NORMAL" + }, + "1689": { + "name": "Shadow", + "proto": "BUDEW_SHADOW" + }, + "1690": { + "name": "Purified", + "proto": "BUDEW_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Grass", + "Poison" + ], + "attack": 91, + "defense": 109, + "stamina": 120, + "height": 0.2, + "weight": 1.2, + "quick_moves": [ + "Hidden Power", + "Razor Leaf" + ], + "charged_moves": [ + "Energy Ball", + "Grass Knot" + ], + "family": 315, + "flee_rate": 0.04, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 315 + } + ], + "little": true + }, + "407": { + "name": "Roserade", + "pokedex_id": 407, + "default_form_id": 1691, + "forms": { + "1691": { + "name": "Normal", + "proto": "ROSERADE_NORMAL" + }, + "1692": { + "name": "Shadow", + "proto": "ROSERADE_SHADOW" + }, + "1693": { + "name": "Purified", + "proto": "ROSERADE_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Grass", + "Poison" + ], + "attack": 243, + "defense": 185, + "stamina": 155, + "height": 0.9, + "weight": 14.5, + "quick_moves": [ + "Poison Jab", + "Razor Leaf" + ], + "charged_moves": [ + "Solar Beam", + "Sludge Bomb", + "Dazzling Gleam", + "Grass Knot", + "Leaf Storm" + ], + "family": 315, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "408": { + "name": "Cranidos", + "pokedex_id": 408, + "default_form_id": 1694, + "forms": { + "1694": { + "name": "Normal", + "proto": "CRANIDOS_NORMAL" + }, + "1695": { + "name": "Shadow", + "proto": "CRANIDOS_SHADOW" + }, + "1696": { + "name": "Purified", + "proto": "CRANIDOS_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Rock" + ], + "attack": 218, + "defense": 71, + "stamina": 167, + "height": 0.9, + "weight": 31.5, + "quick_moves": [ + "Zen Headbutt", + "Take Down" + ], + "charged_moves": [ + "Rock Tomb", + "Ancient Power", + "Bulldoze" + ], + "family": 408, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 409 + } + ], + "little": true + }, + "409": { + "name": "Rampardos", + "pokedex_id": 409, + "default_form_id": 1697, + "forms": { + "1697": { + "name": "Normal", + "proto": "RAMPARDOS_NORMAL" + }, + "1698": { + "name": "Shadow", + "proto": "RAMPARDOS_SHADOW" + }, + "1699": { + "name": "Purified", + "proto": "RAMPARDOS_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Rock" + ], + "attack": 295, + "defense": 109, + "stamina": 219, + "height": 1.6, + "weight": 102.5, + "quick_moves": [ + "Zen Headbutt", + "Smack Down" + ], + "charged_moves": [ + "Rock Slide", + "Outrage", + "Flamethrower" + ], + "family": 408, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "410": { + "name": "Shieldon", + "pokedex_id": 410, + "default_form_id": 1700, + "forms": { + "1700": { + "name": "Normal", + "proto": "SHIELDON_NORMAL" + }, + "1701": { + "name": "Shadow", + "proto": "SHIELDON_SHADOW" + }, + "1702": { + "name": "Purified", + "proto": "SHIELDON_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Rock", + "Steel" + ], + "attack": 76, + "defense": 195, + "stamina": 102, + "height": 0.5, + "weight": 57, + "quick_moves": [ + "Tackle", + "Iron Tail" + ], + "charged_moves": [ + "Rock Tomb", + "Ancient Power", + "Heavy Slam" + ], + "family": 410, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 411 + } + ], + "little": true + }, + "411": { + "name": "Bastiodon", + "pokedex_id": 411, + "default_form_id": 1703, + "forms": { + "1703": { + "name": "Normal", + "proto": "BASTIODON_NORMAL" + }, + "1704": { + "name": "Shadow", + "proto": "BASTIODON_SHADOW" + }, + "1705": { + "name": "Purified", + "proto": "BASTIODON_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Rock", + "Steel" + ], + "attack": 94, + "defense": 286, + "stamina": 155, + "height": 1.3, + "weight": 149.5, + "quick_moves": [ + "Smack Down", + "Iron Tail" + ], + "charged_moves": [ + "Stone Edge", + "Flamethrower", + "Flash Cannon" + ], + "family": 410, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "412": { + "name": "Burmy", + "pokedex_id": 412, + "default_form_id": 118, + "forms": { + "118": { + "name": "Plant", + "proto": "BURMY_PLANT", + "evolutions": [ + { + "pokemon": 413, + "form": 87, + "gender_requirement": 2 + }, + { + "pokemon": 414, + "gender_requirement": 1 + } + ] + }, + "119": { + "name": "Sandy", + "proto": "BURMY_SANDY", + "evolutions": [ + { + "pokemon": 413, + "form": 88, + "gender_requirement": 2 + }, + { + "pokemon": 414, + "gender_requirement": 1 + } + ] + }, + "120": { + "name": "Trash", + "proto": "BURMY_TRASH", + "evolutions": [ + { + "pokemon": 413, + "form": 89, + "gender_requirement": 2 + }, + { + "pokemon": 414, + "gender_requirement": 1 + } + ] + }, + "1706": { + "name": "Normal", + "proto": "BURMY_NORMAL" + }, + "1707": { + "name": "Shadow", + "proto": "BURMY_SHADOW" + }, + "1708": { + "name": "Purified", + "proto": "BURMY_PURIFIED" + } + }, + "types": [ + "Bug" + ], + "attack": 53, + "defense": 83, + "stamina": 120, + "height": 0.2, + "weight": 3.4, + "quick_moves": [ + "Tackle", + "Bug Bite" + ], + "charged_moves": [ + "Struggle" + ], + "family": 412, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 413, + "form": 87, + "gender_requirement": 2 + }, + { + "pokemon": 414, + "gender_requirement": 1 + } + ], + "little": true + }, + "413": { + "name": "Wormadam", + "pokedex_id": 413, + "default_form_id": 87, + "forms": { + "87": { + "name": "Plant", + "proto": "WORMADAM_PLANT", + "quick_moves": [ + "Confusion", + "Bug Bite" + ], + "charged_moves": [ + "Psybeam", + "Energy Ball", + "Bug Buzz" + ] + }, + "88": { + "name": "Sandy", + "proto": "WORMADAM_SANDY", + "quick_moves": [ + "Confusion", + "Bug Bite" + ], + "charged_moves": [ + "Psybeam", + "Bulldoze", + "Bug Buzz" + ], + "types": [ + "Bug", + "Ground" + ] + }, + "89": { + "name": "Trash", + "proto": "WORMADAM_TRASH", + "attack": 127, + "defense": 175, + "stamina": 155, + "quick_moves": [ + "Confusion", + "Bug Bite" + ], + "charged_moves": [ + "Psybeam", + "Iron Head", + "Bug Buzz" + ], + "types": [ + "Bug", + "Steel" + ] + }, + "1709": { + "name": "Normal", + "proto": "WORMADAM_NORMAL" + }, + "1710": { + "name": "Shadow", + "proto": "WORMADAM_SHADOW" + }, + "1711": { + "name": "Purified", + "proto": "WORMADAM_PURIFIED" + } + }, + "types": [ + "Bug", + "Grass" + ], + "attack": 141, + "defense": 180, + "stamina": 155, + "height": 0.5, + "weight": 6.5, + "quick_moves": [ + "Tackle", + "Bug Bite" + ], + "charged_moves": [ + "Struggle" + ], + "family": 412, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "414": { + "name": "Mothim", + "pokedex_id": 414, + "default_form_id": 1712, + "forms": { + "1712": { + "name": "Normal", + "proto": "MOTHIM_NORMAL" + }, + "1713": { + "name": "Shadow", + "proto": "MOTHIM_SHADOW" + }, + "1714": { + "name": "Purified", + "proto": "MOTHIM_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Bug", + "Flying" + ], + "attack": 185, + "defense": 98, + "stamina": 172, + "height": 0.9, + "weight": 23.3, + "quick_moves": [ + "Air Slash", + "Bug Bite" + ], + "charged_moves": [ + "Psybeam", + "Aerial Ace", + "Bug Buzz" + ], + "family": 412, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "415": { + "name": "Combee", + "pokedex_id": 415, + "default_form_id": 1715, + "forms": { + "1715": { + "name": "Normal", + "proto": "COMBEE_NORMAL" + }, + "1716": { + "name": "Shadow", + "proto": "COMBEE_SHADOW" + }, + "1717": { + "name": "Purified", + "proto": "COMBEE_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Bug", + "Flying" + ], + "attack": 59, + "defense": 83, + "stamina": 102, + "height": 0.3, + "weight": 5.5, + "quick_moves": [ + "Bug Bite" + ], + "charged_moves": [ + "Bug Buzz" + ], + "family": 415, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 416, + "gender_requirement": 2 + } + ], + "little": true + }, + "416": { + "name": "Vespiquen", + "pokedex_id": 416, + "default_form_id": 1718, + "forms": { + "1718": { + "name": "Normal", + "proto": "VESPIQUEN_NORMAL" + }, + "1719": { + "name": "Shadow", + "proto": "VESPIQUEN_SHADOW" + }, + "1720": { + "name": "Purified", + "proto": "VESPIQUEN_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Bug", + "Flying" + ], + "attack": 149, + "defense": 190, + "stamina": 172, + "height": 1.2, + "weight": 38.5, + "quick_moves": [ + "Bug Bite", + "Poison Sting", + "Fury Cutter", + "Air Slash" + ], + "charged_moves": [ + "Bug Buzz", + "Power Gem", + "X Scissor", + "Fell Stinger", + "Signal Beam" + ], + "family": 415, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "417": { + "name": "Pachirisu", + "pokedex_id": 417, + "default_form_id": 1721, + "forms": { + "1721": { + "name": "Normal", + "proto": "PACHIRISU_NORMAL" + }, + "1722": { + "name": "Shadow", + "proto": "PACHIRISU_SHADOW" + }, + "1723": { + "name": "Purified", + "proto": "PACHIRISU_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Electric" + ], + "attack": 94, + "defense": 172, + "stamina": 155, + "height": 0.4, + "weight": 3.9, + "quick_moves": [ + "Spark", + "Volt Switch" + ], + "charged_moves": [ + "Thunder", + "Thunderbolt", + "Thunder Punch" + ], + "family": 417, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "418": { + "name": "Buizel", + "pokedex_id": 418, + "default_form_id": 1724, + "forms": { + "1724": { + "name": "Normal", + "proto": "BUIZEL_NORMAL" + }, + "1725": { + "name": "Shadow", + "proto": "BUIZEL_SHADOW" + }, + "1726": { + "name": "Purified", + "proto": "BUIZEL_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Water" + ], + "attack": 132, + "defense": 67, + "stamina": 146, + "height": 0.7, + "weight": 29.5, + "quick_moves": [ + "Water Gun", + "Quick Attack" + ], + "charged_moves": [ + "Aqua Jet", + "Water Pulse", + "Swift" + ], + "family": 418, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 419 + } + ], + "little": true + }, + "419": { + "name": "Floatzel", + "pokedex_id": 419, + "default_form_id": 1727, + "forms": { + "1727": { + "name": "Normal", + "proto": "FLOATZEL_NORMAL" + }, + "1728": { + "name": "Shadow", + "proto": "FLOATZEL_SHADOW" + }, + "1729": { + "name": "Purified", + "proto": "FLOATZEL_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Water" + ], + "attack": 221, + "defense": 114, + "stamina": 198, + "height": 1.1, + "weight": 33.5, + "quick_moves": [ + "Water Gun", + "Waterfall" + ], + "charged_moves": [ + "Aqua Jet", + "Hydro Pump", + "Swift" + ], + "family": 418, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "420": { + "name": "Cherubi", + "pokedex_id": 420, + "default_form_id": 1730, + "forms": { + "1730": { + "name": "Normal", + "proto": "CHERUBI_NORMAL" + }, + "1731": { + "name": "Shadow", + "proto": "CHERUBI_SHADOW" + }, + "1732": { + "name": "Purified", + "proto": "CHERUBI_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Grass" + ], + "attack": 108, + "defense": 92, + "stamina": 128, + "height": 0.4, + "weight": 3.3, + "quick_moves": [ + "Tackle", + "Bullet Seed" + ], + "charged_moves": [ + "Dazzling Gleam", + "Petal Blizzard", + "Seed Bomb" + ], + "family": 420, + "flee_rate": 0.09, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 421, + "form": 94 + }, + { + "pokemon": 421, + "form": 95 + } + ], + "little": true + }, + "421": { + "name": "Cherrim", + "pokedex_id": 421, + "default_form_id": 94, + "forms": { + "94": { + "name": "Overcast", + "proto": "CHERRIM_OVERCAST" + }, + "95": { + "name": "Sunny", + "proto": "CHERRIM_SUNNY", + "charged_moves": [ + "Dazzling Gleam", + "Hyper Beam", + "Solar Beam", + "Weather Ball Fire" + ] + }, + "1733": { + "name": "Normal", + "proto": "CHERRIM_NORMAL" + }, + "1734": { + "name": "Shadow", + "proto": "CHERRIM_SHADOW" + }, + "1735": { + "name": "Purified", + "proto": "CHERRIM_PURIFIED" + } + }, + "types": [ + "Grass" + ], + "attack": 170, + "defense": 153, + "stamina": 172, + "height": 0.5, + "weight": 9.3, + "quick_moves": [ + "Razor Leaf", + "Bullet Seed" + ], + "charged_moves": [ + "Dazzling Gleam", + "Hyper Beam", + "Solar Beam" + ], + "family": 420, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "422": { + "name": "Shellos", + "pokedex_id": 422, + "default_form_id": 96, + "forms": { + "96": { + "name": "West Sea", + "proto": "SHELLOS_WEST_SEA", + "evolutions": [ + { + "pokemon": 423, + "form": 98 + } + ] + }, + "97": { + "name": "East Sea", + "proto": "SHELLOS_EAST_SEA", + "evolutions": [ + { + "pokemon": 423, + "form": 99 + } + ] + }, + "1736": { + "name": "Normal", + "proto": "SHELLOS_NORMAL" + }, + "1737": { + "name": "Shadow", + "proto": "SHELLOS_SHADOW" + }, + "1738": { + "name": "Purified", + "proto": "SHELLOS_PURIFIED" + } + }, + "types": [ + "Water" + ], + "attack": 103, + "defense": 105, + "stamina": 183, + "height": 0.3, + "weight": 6.3, + "quick_moves": [ + "Mud Slap", + "Hidden Power" + ], + "charged_moves": [ + "Water Pulse", + "Mud Bomb", + "Body Slam" + ], + "family": 422, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 423, + "form": 99 + } + ], + "little": true + }, + "423": { + "name": "Gastrodon", + "pokedex_id": 423, + "default_form_id": 98, + "forms": { + "98": { + "name": "West Sea", + "proto": "GASTRODON_WEST_SEA" + }, + "99": { + "name": "East Sea", + "proto": "GASTRODON_EAST_SEA" + }, + "1739": { + "name": "Normal", + "proto": "GASTRODON_NORMAL" + }, + "1740": { + "name": "Shadow", + "proto": "GASTRODON_SHADOW" + }, + "1741": { + "name": "Purified", + "proto": "GASTRODON_PURIFIED" + } + }, + "types": [ + "Water", + "Ground" + ], + "attack": 169, + "defense": 143, + "stamina": 244, + "height": 0.9, + "weight": 29.9, + "quick_moves": [ + "Mud Slap", + "Hidden Power" + ], + "charged_moves": [ + "Water Pulse", + "Earth Power", + "Body Slam" + ], + "family": 422, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "424": { + "name": "Ambipom", + "pokedex_id": 424, + "default_form_id": 1742, + "forms": { + "1742": { + "name": "Normal", + "proto": "AMBIPOM_NORMAL" + }, + "1743": { + "name": "Shadow", + "proto": "AMBIPOM_SHADOW" + }, + "1744": { + "name": "Purified", + "proto": "AMBIPOM_PURIFIED" + } + }, + "types": [ + "Normal" + ], + "attack": 205, + "defense": 143, + "stamina": 181, + "height": 1.2, + "weight": 20.3, + "quick_moves": [ + "Scratch", + "Astonish" + ], + "charged_moves": [ + "Low Sweep", + "Hyper Beam", + "Aerial Ace" + ], + "family": 190, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "425": { + "name": "Drifloon", + "pokedex_id": 425, + "default_form_id": 1745, + "forms": { + "1745": { + "name": "Normal", + "proto": "DRIFLOON_NORMAL" + }, + "1746": { + "name": "Shadow", + "proto": "DRIFLOON_SHADOW" + }, + "1747": { + "name": "Purified", + "proto": "DRIFLOON_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Ghost", + "Flying" + ], + "attack": 117, + "defense": 80, + "stamina": 207, + "height": 0.4, + "weight": 1.2, + "quick_moves": [ + "Hex", + "Astonish" + ], + "charged_moves": [ + "Ominous Wind", + "Icy Wind", + "Shadow Ball" + ], + "family": 425, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 426 + } + ], + "little": true + }, + "426": { + "name": "Drifblim", + "pokedex_id": 426, + "default_form_id": 1748, + "forms": { + "1748": { + "name": "Normal", + "proto": "DRIFBLIM_NORMAL" + }, + "1749": { + "name": "Shadow", + "proto": "DRIFBLIM_SHADOW" + }, + "1750": { + "name": "Purified", + "proto": "DRIFBLIM_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Ghost", + "Flying" + ], + "attack": 180, + "defense": 102, + "stamina": 312, + "height": 1.2, + "weight": 15, + "quick_moves": [ + "Hex", + "Astonish" + ], + "charged_moves": [ + "Ominous Wind", + "Icy Wind", + "Shadow Ball" + ], + "family": 425, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "427": { + "name": "Buneary", + "pokedex_id": 427, + "default_form_id": 1751, + "forms": { + "1751": { + "name": "Normal", + "proto": "BUNEARY_NORMAL" + }, + "1752": { + "name": "Shadow", + "proto": "BUNEARY_SHADOW" + }, + "1753": { + "name": "Purified", + "proto": "BUNEARY_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Normal" + ], + "attack": 130, + "defense": 105, + "stamina": 146, + "height": 0.4, + "weight": 5.5, + "quick_moves": [ + "Pound", + "Quick Attack" + ], + "charged_moves": [ + "Fire Punch", + "Swift" + ], + "family": 427, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 428 + } + ], + "little": true + }, + "428": { + "name": "Lopunny", + "pokedex_id": 428, + "default_form_id": 1754, + "forms": { + "1754": { + "name": "Normal", + "proto": "LOPUNNY_NORMAL" + }, + "1755": { + "name": "Shadow", + "proto": "LOPUNNY_SHADOW" + }, + "1756": { + "name": "Purified", + "proto": "LOPUNNY_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Normal" + ], + "attack": 156, + "defense": 194, + "stamina": 163, + "height": 1.2, + "weight": 33.3, + "quick_moves": [ + "Pound", + "Low Kick" + ], + "charged_moves": [ + "Fire Punch", + "Hyper Beam", + "Focus Blast" + ], + "family": 427, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "temp_evolutions": { + "1": { + "attack": 282, + "defense": 214, + "stamina": 163, + "height": 1.3, + "weight": 28.3, + "types": [ + "Normal", + "Fighting" + ] + } + } + }, + "429": { + "name": "Mismagius", + "pokedex_id": 429, + "default_form_id": 722, + "forms": { + "722": { + "name": "Normal", + "proto": "MISMAGIUS_NORMAL" + }, + "723": { + "name": "Shadow", + "proto": "MISMAGIUS_SHADOW" + }, + "724": { + "name": "Purified", + "proto": "MISMAGIUS_PURIFIED" + } + }, + "types": [ + "Ghost" + ], + "attack": 211, + "defense": 187, + "stamina": 155, + "height": 0.9, + "weight": 4.4, + "quick_moves": [ + "Sucker Punch", + "Hex" + ], + "charged_moves": [ + "Shadow Ball", + "Dark Pulse", + "Dazzling Gleam" + ], + "family": 200, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "430": { + "name": "Honchkrow", + "pokedex_id": 430, + "default_form_id": 858, + "forms": { + "858": { + "name": "Normal", + "proto": "HONCHKROW_NORMAL" + }, + "859": { + "name": "Shadow", + "proto": "HONCHKROW_SHADOW" + }, + "860": { + "name": "Purified", + "proto": "HONCHKROW_PURIFIED" + } + }, + "types": [ + "Dark", + "Flying" + ], + "attack": 243, + "defense": 103, + "stamina": 225, + "height": 0.9, + "weight": 27.3, + "quick_moves": [ + "Peck", + "Snarl" + ], + "charged_moves": [ + "Brave Bird", + "Psychic", + "Dark Pulse", + "Sky Attack" + ], + "family": 198, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "431": { + "name": "Glameow", + "pokedex_id": 431, + "default_form_id": 1757, + "forms": { + "1757": { + "name": "Normal", + "proto": "GLAMEOW_NORMAL" + }, + "1758": { + "name": "Shadow", + "proto": "GLAMEOW_SHADOW" + }, + "1759": { + "name": "Purified", + "proto": "GLAMEOW_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Normal" + ], + "attack": 109, + "defense": 82, + "stamina": 135, + "height": 0.5, + "weight": 3.9, + "quick_moves": [ + "Scratch", + "Quick Attack" + ], + "charged_moves": [ + "Play Rough", + "Thunderbolt", + "Aerial Ace" + ], + "family": 431, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 432 + } + ], + "little": true + }, + "432": { + "name": "Purugly", + "pokedex_id": 432, + "default_form_id": 1760, + "forms": { + "1760": { + "name": "Normal", + "proto": "PURUGLY_NORMAL" + }, + "1761": { + "name": "Shadow", + "proto": "PURUGLY_SHADOW" + }, + "1762": { + "name": "Purified", + "proto": "PURUGLY_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Normal" + ], + "attack": 172, + "defense": 133, + "stamina": 174, + "height": 1, + "weight": 43.8, + "quick_moves": [ + "Scratch", + "Shadow Claw" + ], + "charged_moves": [ + "Play Rough", + "Thunder", + "Aerial Ace" + ], + "family": 431, + "flee_rate": 0.08, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "433": { + "name": "Chingling", + "pokedex_id": 433, + "default_form_id": 1763, + "forms": { + "1763": { + "name": "Normal", + "proto": "CHINGLING_NORMAL" + }, + "1764": { + "name": "Shadow", + "proto": "CHINGLING_SHADOW" + }, + "1765": { + "name": "Purified", + "proto": "CHINGLING_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Psychic" + ], + "attack": 114, + "defense": 94, + "stamina": 128, + "height": 0.2, + "weight": 0.6, + "quick_moves": [ + "Zen Headbutt", + "Astonish" + ], + "charged_moves": [ + "Wrap", + "Shadow Ball", + "Psyshock" + ], + "family": 358, + "flee_rate": 0.04, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 358 + } + ], + "little": true + }, + "434": { + "name": "Stunky", + "pokedex_id": 434, + "default_form_id": 791, + "forms": { + "791": { + "name": "Normal", + "proto": "STUNKY_NORMAL", + "evolutions": [ + { + "pokemon": 435, + "form": 794 + } + ] + }, + "792": { + "name": "Shadow", + "proto": "STUNKY_SHADOW", + "evolutions": [ + { + "pokemon": 435, + "form": 795 + } + ] + }, + "793": { + "name": "Purified", + "proto": "STUNKY_PURIFIED", + "evolutions": [ + { + "pokemon": 435, + "form": 796 + } + ] + } + }, + "types": [ + "Poison", + "Dark" + ], + "attack": 121, + "defense": 90, + "stamina": 160, + "height": 0.4, + "weight": 19.2, + "quick_moves": [ + "Scratch", + "Bite" + ], + "charged_moves": [ + "Crunch", + "Flamethrower", + "Sludge Bomb" + ], + "family": 434, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 435, + "form": 794 + } + ], + "little": true + }, + "435": { + "name": "Skuntank", + "pokedex_id": 435, + "default_form_id": 794, + "forms": { + "794": { + "name": "Normal", + "proto": "SKUNTANK_NORMAL" + }, + "795": { + "name": "Shadow", + "proto": "SKUNTANK_SHADOW" + }, + "796": { + "name": "Purified", + "proto": "SKUNTANK_PURIFIED" + } + }, + "types": [ + "Poison", + "Dark" + ], + "attack": 184, + "defense": 132, + "stamina": 230, + "height": 1, + "weight": 38, + "quick_moves": [ + "Poison Jab", + "Bite" + ], + "charged_moves": [ + "Crunch", + "Flamethrower", + "Sludge Bomb" + ], + "family": 434, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "436": { + "name": "Bronzor", + "pokedex_id": 436, + "default_form_id": 1766, + "forms": { + "1766": { + "name": "Normal", + "proto": "BRONZOR_NORMAL" + }, + "1767": { + "name": "Shadow", + "proto": "BRONZOR_SHADOW" + }, + "1768": { + "name": "Purified", + "proto": "BRONZOR_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Steel", + "Psychic" + ], + "attack": 43, + "defense": 154, + "stamina": 149, + "height": 0.5, + "weight": 60.5, + "quick_moves": [ + "Tackle", + "Confusion" + ], + "charged_moves": [ + "Gyro Ball", + "Psyshock", + "Heavy Slam", + "Payback" + ], + "family": 436, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 437 + } + ], + "little": true + }, + "437": { + "name": "Bronzong", + "pokedex_id": 437, + "default_form_id": 1769, + "forms": { + "1769": { + "name": "Normal", + "proto": "BRONZONG_NORMAL" + }, + "1770": { + "name": "Shadow", + "proto": "BRONZONG_SHADOW" + }, + "1771": { + "name": "Purified", + "proto": "BRONZONG_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Steel", + "Psychic" + ], + "attack": 161, + "defense": 213, + "stamina": 167, + "height": 1.3, + "weight": 187, + "quick_moves": [ + "Feint Attack", + "Confusion" + ], + "charged_moves": [ + "Flash Cannon", + "Psychic", + "Heavy Slam", + "Bulldoze", + "Psyshock", + "Payback" + ], + "family": 436, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "438": { + "name": "Bonsly", + "pokedex_id": 438, + "default_form_id": 1772, + "forms": { + "1772": { + "name": "Normal", + "proto": "BONSLY_NORMAL" + }, + "1773": { + "name": "Shadow", + "proto": "BONSLY_SHADOW" + }, + "1774": { + "name": "Purified", + "proto": "BONSLY_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Rock" + ], + "attack": 124, + "defense": 133, + "stamina": 137, + "height": 0.5, + "weight": 15, + "quick_moves": [ + "Rock Throw", + "Counter" + ], + "charged_moves": [ + "Rock Tomb", + "Earthquake", + "Rock Slide" + ], + "family": 185, + "flee_rate": 0.04, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 185 + } + ], + "little": true + }, + "439": { + "name": "Mime Jr", + "pokedex_id": 439, + "default_form_id": 1775, + "forms": { + "1775": { + "name": "Normal", + "proto": "MIME_JR_NORMAL" + }, + "1776": { + "name": "Shadow", + "proto": "MIME_JR_SHADOW" + }, + "1777": { + "name": "Purified", + "proto": "MIME_JR_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Psychic", + "Fairy" + ], + "attack": 125, + "defense": 142, + "stamina": 85, + "height": 0.6, + "weight": 13, + "quick_moves": [ + "Confusion", + "Pound" + ], + "charged_moves": [ + "Psybeam", + "Psychic", + "Psyshock" + ], + "family": 122, + "flee_rate": 0.04, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 122 + } + ], + "little": true + }, + "440": { + "name": "Happiny", + "pokedex_id": 440, + "default_form_id": 1778, + "forms": { + "1778": { + "name": "Normal", + "proto": "HAPPINY_NORMAL" + }, + "1779": { + "name": "Shadow", + "proto": "HAPPINY_SHADOW" + }, + "1780": { + "name": "Purified", + "proto": "HAPPINY_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Normal" + ], + "attack": 25, + "defense": 77, + "stamina": 225, + "height": 0.6, + "weight": 24.4, + "quick_moves": [ + "Pound", + "Zen Headbutt" + ], + "charged_moves": [ + "Psychic" + ], + "family": 113, + "flee_rate": 0.04, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 113 + } + ], + "little": true + }, + "441": { + "name": "Chatot", + "pokedex_id": 441, + "default_form_id": 1781, + "forms": { + "1781": { + "name": "Normal", + "proto": "CHATOT_NORMAL" + }, + "1782": { + "name": "Shadow", + "proto": "CHATOT_SHADOW" + }, + "1783": { + "name": "Purified", + "proto": "CHATOT_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Normal", + "Flying" + ], + "attack": 183, + "defense": 91, + "stamina": 183, + "height": 0.5, + "weight": 1.9, + "quick_moves": [ + "Peck", + "Steel Wing" + ], + "charged_moves": [ + "Night Shade", + "Sky Attack", + "Heat Wave" + ], + "family": 441, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "442": { + "name": "Spiritomb", + "pokedex_id": 442, + "default_form_id": 1784, + "forms": { + "1784": { + "name": "Normal", + "proto": "SPIRITOMB_NORMAL" + }, + "1785": { + "name": "Shadow", + "proto": "SPIRITOMB_SHADOW" + }, + "1786": { + "name": "Purified", + "proto": "SPIRITOMB_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Ghost", + "Dark" + ], + "attack": 169, + "defense": 199, + "stamina": 137, + "height": 1, + "weight": 108, + "quick_moves": [ + "Feint Attack", + "Sucker Punch" + ], + "charged_moves": [ + "Shadow Sneak", + "Ominous Wind", + "Shadow Ball" + ], + "family": 442, + "flee_rate": 0.04, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "443": { + "name": "Gible", + "pokedex_id": 443, + "default_form_id": 861, + "forms": { + "861": { + "name": "Normal", + "proto": "GIBLE_NORMAL", + "evolutions": [ + { + "pokemon": 444, + "form": 864 + } + ] + }, + "862": { + "name": "Shadow", + "proto": "GIBLE_SHADOW", + "evolutions": [ + { + "pokemon": 444, + "form": 865 + } + ] + }, + "863": { + "name": "Purified", + "proto": "GIBLE_PURIFIED", + "evolutions": [ + { + "pokemon": 444, + "form": 866 + } + ] + } + }, + "types": [ + "Dragon", + "Ground" + ], + "attack": 124, + "defense": 84, + "stamina": 151, + "height": 0.7, + "weight": 20.5, + "quick_moves": [ + "Take Down", + "Mud Shot" + ], + "charged_moves": [ + "Dig", + "Twister", + "Body Slam" + ], + "family": 443, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 444, + "form": 864 + } + ], + "little": true + }, + "444": { + "name": "Gabite", + "pokedex_id": 444, + "default_form_id": 864, + "forms": { + "864": { + "name": "Normal", + "proto": "GABITE_NORMAL", + "evolutions": [ + { + "pokemon": 445, + "form": 867 + } + ] + }, + "865": { + "name": "Shadow", + "proto": "GABITE_SHADOW", + "evolutions": [ + { + "pokemon": 445, + "form": 868 + } + ] + }, + "866": { + "name": "Purified", + "proto": "GABITE_PURIFIED", + "evolutions": [ + { + "pokemon": 445, + "form": 869 + } + ] + } + }, + "types": [ + "Dragon", + "Ground" + ], + "attack": 172, + "defense": 125, + "stamina": 169, + "height": 1.4, + "weight": 56, + "quick_moves": [ + "Take Down", + "Mud Shot" + ], + "charged_moves": [ + "Dig", + "Twister", + "Flamethrower" + ], + "family": 443, + "flee_rate": 0.06, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 445, + "form": 867 + } + ] + }, + "445": { + "name": "Garchomp", + "pokedex_id": 445, + "default_form_id": 867, + "forms": { + "867": { + "name": "Normal", + "proto": "GARCHOMP_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "868": { + "name": "Shadow", + "proto": "GARCHOMP_SHADOW" + }, + "869": { + "name": "Purified", + "proto": "GARCHOMP_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Dragon", + "Ground" + ], + "attack": 261, + "defense": 193, + "stamina": 239, + "height": 1.9, + "weight": 95, + "quick_moves": [ + "Dragon Tail", + "Mud Shot" + ], + "charged_moves": [ + "Outrage", + "Earthquake", + "Fire Blast", + "Sand Tomb" + ], + "family": 443, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "temp_evolutions": { + "1": { + "attack": 339, + "defense": 222, + "stamina": 239, + "unreleased": true + } + } + }, + "446": { + "name": "Munchlax", + "pokedex_id": 446, + "default_form_id": 1787, + "forms": { + "1787": { + "name": "Normal", + "proto": "MUNCHLAX_NORMAL" + }, + "1788": { + "name": "Shadow", + "proto": "MUNCHLAX_SHADOW" + }, + "1789": { + "name": "Purified", + "proto": "MUNCHLAX_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Normal" + ], + "attack": 137, + "defense": 117, + "stamina": 286, + "height": 0.6, + "weight": 105, + "quick_moves": [ + "Tackle", + "Lick" + ], + "charged_moves": [ + "Gunk Shot", + "Body Slam", + "Bulldoze" + ], + "family": 143, + "flee_rate": 0.04, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 143 + } + ], + "little": true + }, + "447": { + "name": "Riolu", + "pokedex_id": 447, + "default_form_id": 1790, + "forms": { + "1790": { + "name": "Normal", + "proto": "RIOLU_NORMAL" + }, + "1791": { + "name": "Shadow", + "proto": "RIOLU_SHADOW" + }, + "1792": { + "name": "Purified", + "proto": "RIOLU_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Fighting" + ], + "attack": 127, + "defense": 78, + "stamina": 120, + "height": 0.7, + "weight": 20.2, + "quick_moves": [ + "Counter", + "Quick Attack" + ], + "charged_moves": [ + "Brick Break", + "Low Sweep", + "Cross Chop" + ], + "family": 448, + "flee_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 448 + } + ], + "little": true + }, + "448": { + "name": "Lucario", + "pokedex_id": 448, + "default_form_id": 1793, + "forms": { + "1793": { + "name": "Normal", + "proto": "LUCARIO_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1794": { + "name": "Shadow", + "proto": "LUCARIO_SHADOW" + }, + "1795": { + "name": "Purified", + "proto": "LUCARIO_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Fighting", + "Steel" + ], + "attack": 236, + "defense": 144, + "stamina": 172, + "height": 1.2, + "weight": 54, + "quick_moves": [ + "Counter", + "Bullet Punch" + ], + "charged_moves": [ + "Flash Cannon", + "Shadow Ball", + "Close Combat", + "Power Up Punch", + "Aura Sphere" + ], + "family": 448, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "temp_evolutions": { + "1": { + "attack": 310, + "defense": 175, + "stamina": 172, + "unreleased": true + } + } + }, + "449": { + "name": "Hippopotas", + "pokedex_id": 449, + "default_form_id": 888, + "forms": { + "888": { + "name": "Normal", + "proto": "HIPPOPOTAS_NORMAL", + "evolutions": [ + { + "pokemon": 450, + "form": 891 + } + ] + }, + "889": { + "name": "Shadow", + "proto": "HIPPOPOTAS_SHADOW", + "evolutions": [ + { + "pokemon": 450, + "form": 892 + } + ] + }, + "890": { + "name": "Purified", + "proto": "HIPPOPOTAS_PURIFIED", + "evolutions": [ + { + "pokemon": 450, + "form": 893 + } + ] + } + }, + "types": [ + "Ground" + ], + "attack": 124, + "defense": 118, + "stamina": 169, + "height": 0.8, + "weight": 49.5, + "quick_moves": [ + "Tackle", + "Bite" + ], + "charged_moves": [ + "Dig", + "Rock Tomb", + "Body Slam" + ], + "family": 449, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 450, + "form": 891 + } + ], + "little": true + }, + "450": { + "name": "Hippowdon", + "pokedex_id": 450, + "default_form_id": 891, + "forms": { + "891": { + "name": "Normal", + "proto": "HIPPOWDON_NORMAL" + }, + "892": { + "name": "Shadow", + "proto": "HIPPOWDON_SHADOW" + }, + "893": { + "name": "Purified", + "proto": "HIPPOWDON_PURIFIED" + } + }, + "types": [ + "Ground" + ], + "attack": 201, + "defense": 191, + "stamina": 239, + "height": 2, + "weight": 300, + "quick_moves": [ + "Fire Fang", + "Bite", + "Thunder Fang", + "Ice Fang" + ], + "charged_moves": [ + "Earthquake", + "Stone Edge", + "Body Slam", + "Earth Power", + "Weather Ball Rock" + ], + "family": 449, + "flee_rate": 0.08, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "451": { + "name": "Skorupi", + "pokedex_id": 451, + "default_form_id": 1796, + "forms": { + "1796": { + "name": "Normal", + "proto": "SKORUPI_NORMAL", + "evolutions": [ + { + "pokemon": 452, + "form": 1799 + } + ] + }, + "1797": { + "name": "Shadow", + "proto": "SKORUPI_SHADOW", + "evolutions": [ + { + "pokemon": 452, + "form": 1800 + } + ] + }, + "1798": { + "name": "Purified", + "proto": "SKORUPI_PURIFIED", + "evolutions": [ + { + "pokemon": 452, + "form": 1801 + } + ] + } + }, + "types": [ + "Poison", + "Bug" + ], + "attack": 93, + "defense": 151, + "stamina": 120, + "height": 0.8, + "weight": 12, + "quick_moves": [ + "Poison Sting", + "Infestation" + ], + "charged_moves": [ + "Cross Poison", + "Aqua Tail", + "Sludge Bomb" + ], + "family": 451, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 452, + "form": 1799 + } + ], + "little": true + }, + "452": { + "name": "Drapion", + "pokedex_id": 452, + "default_form_id": 1799, + "forms": { + "1799": { + "name": "Normal", + "proto": "DRAPION_NORMAL" + }, + "1800": { + "name": "Shadow", + "proto": "DRAPION_SHADOW" + }, + "1801": { + "name": "Purified", + "proto": "DRAPION_PURIFIED" + } + }, + "types": [ + "Poison", + "Dark" + ], + "attack": 180, + "defense": 202, + "stamina": 172, + "height": 1.3, + "weight": 61.5, + "quick_moves": [ + "Poison Sting", + "Infestation", + "Bite", + "Ice Fang" + ], + "charged_moves": [ + "Crunch", + "Aqua Tail", + "Sludge Bomb", + "Fell Stinger" + ], + "family": 451, + "flee_rate": 0.08, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "453": { + "name": "Croagunk", + "pokedex_id": 453, + "default_form_id": 1802, + "forms": { + "1802": { + "name": "Normal", + "proto": "CROAGUNK_NORMAL" + }, + "1803": { + "name": "Shadow", + "proto": "CROAGUNK_SHADOW" + }, + "1804": { + "name": "Purified", + "proto": "CROAGUNK_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Poison", + "Fighting" + ], + "attack": 116, + "defense": 76, + "stamina": 134, + "height": 0.7, + "weight": 23, + "quick_moves": [ + "Poison Sting", + "Poison Jab" + ], + "charged_moves": [ + "Brick Break", + "Low Sweep", + "Sludge Bomb" + ], + "family": 453, + "flee_rate": 0.12, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 454 + } + ], + "little": true + }, + "454": { + "name": "Toxicroak", + "pokedex_id": 454, + "default_form_id": 1805, + "forms": { + "1805": { + "name": "Normal", + "proto": "TOXICROAK_NORMAL" + }, + "1806": { + "name": "Shadow", + "proto": "TOXICROAK_SHADOW" + }, + "1807": { + "name": "Purified", + "proto": "TOXICROAK_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Poison", + "Fighting" + ], + "attack": 211, + "defense": 133, + "stamina": 195, + "height": 1.3, + "weight": 44.4, + "quick_moves": [ + "Poison Jab", + "Counter" + ], + "charged_moves": [ + "Dynamic Punch", + "Mud Bomb", + "Sludge Bomb" + ], + "family": 453, + "flee_rate": 0.07, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "455": { + "name": "Carnivine", + "pokedex_id": 455, + "default_form_id": 1808, + "forms": { + "1808": { + "name": "Normal", + "proto": "CARNIVINE_NORMAL" + }, + "1809": { + "name": "Shadow", + "proto": "CARNIVINE_SHADOW" + }, + "1810": { + "name": "Purified", + "proto": "CARNIVINE_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Grass" + ], + "attack": 187, + "defense": 136, + "stamina": 179, + "height": 1.4, + "weight": 27, + "quick_moves": [ + "Bite", + "Vine Whip" + ], + "charged_moves": [ + "Power Whip", + "Energy Ball", + "Crunch" + ], + "family": 455, + "flee_rate": 0.01, + "capture_rate": 0.9, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "456": { + "name": "Finneon", + "pokedex_id": 456, + "default_form_id": 1811, + "forms": { + "1811": { + "name": "Normal", + "proto": "FINNEON_NORMAL" + }, + "1812": { + "name": "Shadow", + "proto": "FINNEON_SHADOW" + }, + "1813": { + "name": "Purified", + "proto": "FINNEON_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Water" + ], + "attack": 96, + "defense": 116, + "stamina": 135, + "height": 0.4, + "weight": 7, + "quick_moves": [ + "Pound", + "Water Gun" + ], + "charged_moves": [ + "Water Pulse", + "Ice Beam", + "Silver Wind" + ], + "family": 456, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 457 + } + ], + "little": true + }, + "457": { + "name": "Lumineon", + "pokedex_id": 457, + "default_form_id": 1814, + "forms": { + "1814": { + "name": "Normal", + "proto": "LUMINEON_NORMAL" + }, + "1815": { + "name": "Shadow", + "proto": "LUMINEON_SHADOW" + }, + "1816": { + "name": "Purified", + "proto": "LUMINEON_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Water" + ], + "attack": 142, + "defense": 170, + "stamina": 170, + "height": 1.2, + "weight": 24, + "quick_moves": [ + "Waterfall", + "Water Gun" + ], + "charged_moves": [ + "Water Pulse", + "Blizzard", + "Silver Wind" + ], + "family": 456, + "flee_rate": 0.06, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "458": { + "name": "Mantyke", + "pokedex_id": 458, + "default_form_id": 1817, + "forms": { + "1817": { + "name": "Normal", + "proto": "MANTYKE_NORMAL" + }, + "1818": { + "name": "Shadow", + "proto": "MANTYKE_SHADOW" + }, + "1819": { + "name": "Purified", + "proto": "MANTYKE_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Water", + "Flying" + ], + "attack": 105, + "defense": 179, + "stamina": 128, + "height": 1, + "weight": 65, + "quick_moves": [ + "Bubble", + "Tackle" + ], + "charged_moves": [ + "Water Pulse", + "Ice Beam", + "Aerial Ace" + ], + "family": 226, + "flee_rate": 0.04, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 226 + } + ], + "little": true + }, + "459": { + "name": "Snover", + "pokedex_id": 459, + "default_form_id": 932, + "forms": { + "932": { + "name": "Normal", + "proto": "SNOVER_NORMAL", + "evolutions": [ + { + "pokemon": 460, + "form": 935 + } + ] + }, + "933": { + "name": "Shadow", + "proto": "SNOVER_SHADOW", + "evolutions": [ + { + "pokemon": 460, + "form": 936 + } + ] + }, + "934": { + "name": "Purified", + "proto": "SNOVER_PURIFIED", + "evolutions": [ + { + "pokemon": 460, + "form": 937 + } + ] + } + }, + "types": [ + "Grass", + "Ice" + ], + "attack": 115, + "defense": 105, + "stamina": 155, + "height": 1, + "weight": 50.5, + "quick_moves": [ + "Powder Snow", + "Ice Shard" + ], + "charged_moves": [ + "Ice Beam", + "Energy Ball", + "Stomp" + ], + "family": 459, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "evolutions": [ + { + "pokemon": 460, + "form": 935 + } + ], + "little": true + }, + "460": { + "name": "Abomasnow", + "pokedex_id": 460, + "default_form_id": 935, + "forms": { + "935": { + "name": "Normal", + "proto": "ABOMASNOW_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "936": { + "name": "Shadow", + "proto": "ABOMASNOW_SHADOW" + }, + "937": { + "name": "Purified", + "proto": "ABOMASNOW_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Grass", + "Ice" + ], + "attack": 178, + "defense": 158, + "stamina": 207, + "height": 2.2, + "weight": 135.5, + "quick_moves": [ + "Powder Snow", + "Razor Leaf" + ], + "charged_moves": [ + "Blizzard", + "Energy Ball", + "Outrage", + "Weather Ball Ice" + ], + "family": 459, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "temp_evolutions": { + "1": { + "attack": 240, + "defense": 191, + "stamina": 207, + "height": 2.7, + "weight": 185 + } + } + }, + "461": { + "name": "Weavile", + "pokedex_id": 461, + "default_form_id": 800, + "forms": { + "800": { + "name": "Normal", + "proto": "WEAVILE_NORMAL" + }, + "801": { + "name": "Shadow", + "proto": "WEAVILE_SHADOW" + }, + "802": { + "name": "Purified", + "proto": "WEAVILE_PURIFIED" + } + }, + "types": [ + "Dark", + "Ice" + ], + "attack": 243, + "defense": 171, + "stamina": 172, + "height": 1.1, + "weight": 34, + "quick_moves": [ + "Ice Shard", + "Feint Attack", + "Snarl" + ], + "charged_moves": [ + "Avalanche", + "Focus Blast", + "Foul Play" + ], + "family": 215, + "flee_rate": 0.09, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "462": { + "name": "Magnezone", + "pokedex_id": 462, + "default_form_id": 661, + "forms": { + "661": { + "name": "Normal", + "proto": "MAGNEZONE_NORMAL" + }, + "662": { + "name": "Shadow", + "proto": "MAGNEZONE_SHADOW" + }, + "663": { + "name": "Purified", + "proto": "MAGNEZONE_PURIFIED" + } + }, + "types": [ + "Electric", + "Steel" + ], + "attack": 238, + "defense": 205, + "stamina": 172, + "height": 1.2, + "weight": 180, + "quick_moves": [ + "Spark", + "Charge Beam" + ], + "charged_moves": [ + "Zap Cannon", + "Wild Charge", + "Flash Cannon", + "Mirror Shot" + ], + "family": 81, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "463": { + "name": "Lickilicky", + "pokedex_id": 463, + "default_form_id": 1820, + "forms": { + "1820": { + "name": "Normal", + "proto": "LICKILICKY_NORMAL" + }, + "1821": { + "name": "Shadow", + "proto": "LICKILICKY_SHADOW" + }, + "1822": { + "name": "Purified", + "proto": "LICKILICKY_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Normal" + ], + "attack": 161, + "defense": 181, + "stamina": 242, + "height": 1.7, + "weight": 140, + "quick_moves": [ + "Lick", + "Zen Headbutt" + ], + "charged_moves": [ + "Hyper Beam", + "Earthquake", + "Solar Beam", + "Shadow Ball" + ], + "family": 108, + "flee_rate": 0.09, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "464": { + "name": "Rhyperior", + "pokedex_id": 464, + "default_form_id": 852, + "forms": { + "852": { + "name": "Normal", + "proto": "RHYPERIOR_NORMAL" + }, + "853": { + "name": "Shadow", + "proto": "RHYPERIOR_SHADOW" + }, + "854": { + "name": "Purified", + "proto": "RHYPERIOR_PURIFIED" + } + }, + "types": [ + "Ground", + "Rock" + ], + "attack": 241, + "defense": 190, + "stamina": 251, + "height": 2.4, + "weight": 282.8, + "quick_moves": [ + "Mud Slap", + "Smack Down" + ], + "charged_moves": [ + "Surf", + "Earthquake", + "Stone Edge", + "Skull Bash", + "Super Power" + ], + "family": 111, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "465": { + "name": "Tangrowth", + "pokedex_id": 465, + "default_form_id": 1823, + "forms": { + "1823": { + "name": "Normal", + "proto": "TANGROWTH_NORMAL" + }, + "1824": { + "name": "Shadow", + "proto": "TANGROWTH_SHADOW" + }, + "1825": { + "name": "Purified", + "proto": "TANGROWTH_PURIFIED" + } + }, + "types": [ + "Grass" + ], + "attack": 207, + "defense": 184, + "stamina": 225, + "height": 2, + "weight": 128.6, + "quick_moves": [ + "Vine Whip", + "Infestation" + ], + "charged_moves": [ + "Ancient Power", + "Sludge Bomb", + "Solar Beam", + "Power Whip", + "Rock Slide" + ], + "family": 114, + "flee_rate": 0.1, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "466": { + "name": "Electivire", + "pokedex_id": 466, + "default_form_id": 643, + "forms": { + "643": { + "name": "Normal", + "proto": "ELECTIVIRE_NORMAL" + }, + "644": { + "name": "Shadow", + "proto": "ELECTIVIRE_SHADOW" + }, + "645": { + "name": "Purified", + "proto": "ELECTIVIRE_PURIFIED" + } + }, + "types": [ + "Electric" + ], + "attack": 249, + "defense": 163, + "stamina": 181, + "height": 1.8, + "weight": 138.6, + "quick_moves": [ + "Thunder Shock", + "Low Kick" + ], + "charged_moves": [ + "Thunder Punch", + "Wild Charge", + "Thunder", + "Ice Punch" + ], + "family": 125, + "flee_rate": 0.1, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "467": { + "name": "Magmortar", + "pokedex_id": 467, + "default_form_id": 637, + "forms": { + "637": { + "name": "Normal", + "proto": "MAGMORTAR_NORMAL" + }, + "638": { + "name": "Shadow", + "proto": "MAGMORTAR_SHADOW" + }, + "639": { + "name": "Purified", + "proto": "MAGMORTAR_PURIFIED" + } + }, + "types": [ + "Fire" + ], + "attack": 247, + "defense": 172, + "stamina": 181, + "height": 1.6, + "weight": 68, + "quick_moves": [ + "Fire Spin", + "Karate Chop" + ], + "charged_moves": [ + "Brick Break", + "Fire Punch", + "Fire Blast", + "Psychic" + ], + "family": 126, + "flee_rate": 0.1, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "468": { + "name": "Togekiss", + "pokedex_id": 468, + "default_form_id": 1826, + "forms": { + "1826": { + "name": "Normal", + "proto": "TOGEKISS_NORMAL" + }, + "1827": { + "name": "Shadow", + "proto": "TOGEKISS_SHADOW" + }, + "1828": { + "name": "Purified", + "proto": "TOGEKISS_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Fairy", + "Flying" + ], + "attack": 225, + "defense": 217, + "stamina": 198, + "height": 1.5, + "weight": 38, + "quick_moves": [ + "Air Slash", + "Hidden Power", + "Charm" + ], + "charged_moves": [ + "Ancient Power", + "Dazzling Gleam", + "Aerial Ace", + "Flamethrower" + ], + "family": 175, + "flee_rate": 0.05, + "capture_rate": 0.01, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "469": { + "name": "Yanmega", + "pokedex_id": 469, + "default_form_id": 1829, + "forms": { + "1829": { + "name": "Normal", + "proto": "YANMEGA_NORMAL" + }, + "1830": { + "name": "Shadow", + "proto": "YANMEGA_SHADOW" + }, + "1831": { + "name": "Purified", + "proto": "YANMEGA_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Bug", + "Flying" + ], + "attack": 231, + "defense": 156, + "stamina": 200, + "height": 1.9, + "weight": 51.5, + "quick_moves": [ + "Bug Bite", + "Wing Attack" + ], + "charged_moves": [ + "Ancient Power", + "Aerial Ace", + "Bug Buzz" + ], + "family": 193, + "flee_rate": 0.05, + "capture_rate": 0.175, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "470": { + "name": "Leafeon", + "pokedex_id": 470, + "default_form_id": 1832, + "forms": { + "1832": { + "name": "Normal", + "proto": "LEAFEON_NORMAL" + }, + "1833": { + "name": "Shadow", + "proto": "LEAFEON_SHADOW" + }, + "1834": { + "name": "Purified", + "proto": "LEAFEON_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Grass" + ], + "attack": 216, + "defense": 219, + "stamina": 163, + "height": 1, + "weight": 25.5, + "quick_moves": [ + "Razor Leaf", + "Quick Attack" + ], + "charged_moves": [ + "Solar Beam", + "Leaf Blade", + "Energy Ball" + ], + "family": 133, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "471": { + "name": "Glaceon", + "pokedex_id": 471, + "default_form_id": 1835, + "forms": { + "1835": { + "name": "Normal", + "proto": "GLACEON_NORMAL" + }, + "1836": { + "name": "Shadow", + "proto": "GLACEON_SHADOW" + }, + "1837": { + "name": "Purified", + "proto": "GLACEON_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Ice" + ], + "attack": 238, + "defense": 205, + "stamina": 163, + "height": 0.8, + "weight": 25.9, + "quick_moves": [ + "Ice Shard", + "Frost Breath" + ], + "charged_moves": [ + "Avalanche", + "Icy Wind", + "Ice Beam" + ], + "family": 133, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "472": { + "name": "Gliscor", + "pokedex_id": 472, + "default_form_id": 806, + "forms": { + "806": { + "name": "Normal", + "proto": "GLISCOR_NORMAL" + }, + "807": { + "name": "Shadow", + "proto": "GLISCOR_SHADOW" + }, + "808": { + "name": "Purified", + "proto": "GLISCOR_PURIFIED" + } + }, + "types": [ + "Ground", + "Flying" + ], + "attack": 185, + "defense": 222, + "stamina": 181, + "height": 2, + "weight": 42.5, + "quick_moves": [ + "Fury Cutter", + "Wing Attack" + ], + "charged_moves": [ + "Earthquake", + "Aerial Ace", + "Night Slash", + "Sand Tomb" + ], + "family": 207, + "flee_rate": 0.09, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "473": { + "name": "Mamoswine", + "pokedex_id": 473, + "default_form_id": 1838, + "forms": { + "1838": { + "name": "Normal", + "proto": "MAMOSWINE_NORMAL" + }, + "1839": { + "name": "Shadow", + "proto": "MAMOSWINE_SHADOW" + }, + "1840": { + "name": "Purified", + "proto": "MAMOSWINE_PURIFIED" + } + }, + "types": [ + "Ice", + "Ground" + ], + "attack": 247, + "defense": 146, + "stamina": 242, + "height": 2.5, + "weight": 291, + "quick_moves": [ + "Mud Slap", + "Powder Snow" + ], + "charged_moves": [ + "Avalanche", + "Bulldoze", + "Stone Edge" + ], + "family": 220, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "474": { + "name": "Porygon Z", + "pokedex_id": 474, + "default_form_id": 683, + "forms": { + "683": { + "name": "Normal", + "proto": "PORYGON_Z_NORMAL" + }, + "684": { + "name": "Shadow", + "proto": "PORYGON_Z_SHADOW" + }, + "685": { + "name": "Purified", + "proto": "PORYGON_Z_PURIFIED" + } + }, + "types": [ + "Normal" + ], + "attack": 264, + "defense": 150, + "stamina": 198, + "height": 0.9, + "weight": 34, + "quick_moves": [ + "Hidden Power", + "Charge Beam", + "Lock On" + ], + "charged_moves": [ + "Solar Beam", + "Hyper Beam", + "Zap Cannon", + "Blizzard" + ], + "family": 137, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "475": { + "name": "Gallade", + "pokedex_id": 475, + "default_form_id": 301, + "forms": { + "301": { + "name": "Normal", + "proto": "GALLADE_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "302": { + "name": "Shadow", + "proto": "GALLADE_SHADOW" + }, + "303": { + "name": "Purified", + "proto": "GALLADE_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "types": [ + "Psychic", + "Fighting" + ], + "attack": 237, + "defense": 195, + "stamina": 169, + "height": 1.6, + "weight": 52, + "quick_moves": [ + "Confusion", + "Low Kick", + "Charm" + ], + "charged_moves": [ + "Close Combat", + "Psychic", + "Leaf Blade" + ], + "family": 280, + "flee_rate": 0.05, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh", + "temp_evolutions": { + "1": { + "attack": 326, + "defense": 230, + "stamina": 169, + "unreleased": true + } + } + }, + "476": { + "name": "Probopass", + "pokedex_id": 476, + "default_form_id": 1841, + "forms": { + "1841": { + "name": "Normal", + "proto": "PROBOPASS_NORMAL" + }, + "1842": { + "name": "Shadow", + "proto": "PROBOPASS_SHADOW" + }, + "1843": { + "name": "Purified", + "proto": "PROBOPASS_PURIFIED" + } + }, + "types": [ + "Rock", + "Steel" + ], + "attack": 135, + "defense": 275, + "stamina": 155, + "height": 1.4, + "weight": 340, + "quick_moves": [ + "Rock Throw", + "Spark" + ], + "charged_moves": [ + "Magnet Bomb", + "Rock Slide", + "Thunderbolt" + ], + "family": 299, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "477": { + "name": "Dusknoir", + "pokedex_id": 477, + "default_form_id": 920, + "forms": { + "920": { + "name": "Normal", + "proto": "DUSKNOIR_NORMAL" + }, + "921": { + "name": "Shadow", + "proto": "DUSKNOIR_SHADOW" + }, + "922": { + "name": "Purified", + "proto": "DUSKNOIR_PURIFIED" + } + }, + "types": [ + "Ghost" + ], + "attack": 180, + "defense": 254, + "stamina": 128, + "height": 2.2, + "weight": 106.6, + "quick_moves": [ + "Hex", + "Astonish" + ], + "charged_moves": [ + "Ominous Wind", + "Psychic", + "Dark Pulse" + ], + "family": 355, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "478": { + "name": "Froslass", + "pokedex_id": 478, + "default_form_id": 1844, + "forms": { + "1844": { + "name": "Normal", + "proto": "FROSLASS_NORMAL" + }, + "1845": { + "name": "Shadow", + "proto": "FROSLASS_SHADOW" + }, + "1846": { + "name": "Purified", + "proto": "FROSLASS_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Ice", + "Ghost" + ], + "attack": 171, + "defense": 150, + "stamina": 172, + "height": 1.3, + "weight": 26.6, + "quick_moves": [ + "Powder Snow", + "Hex" + ], + "charged_moves": [ + "Avalanche", + "Crunch", + "Shadow Ball" + ], + "family": 361, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "479": { + "name": "Rotom", + "pokedex_id": 479, + "default_form_id": 81, + "forms": { + "81": { + "name": "Normal", + "proto": "ROTOM_NORMAL" + }, + "82": { + "name": "Frost", + "proto": "ROTOM_FROST", + "attack": 204, + "defense": 219, + "stamina": 137, + "charged_moves": [ + "Blizzard", + "Thunderbolt", + "Thunder" + ], + "types": [ + "Electric", + "Ice" + ] + }, + "83": { + "name": "Fan", + "proto": "ROTOM_FAN", + "attack": 204, + "defense": 219, + "stamina": 137, + "quick_moves": [ + "Astonish", + "Air Slash" + ], + "types": [ + "Electric", + "Flying" + ] + }, + "84": { + "name": "Mow", + "proto": "ROTOM_MOW", + "attack": 204, + "defense": 219, + "stamina": 137, + "types": [ + "Electric", + "Grass" + ] + }, + "85": { + "name": "Wash", + "proto": "ROTOM_WASH", + "attack": 204, + "defense": 219, + "stamina": 137, + "charged_moves": [ + "Hydro Pump", + "Thunderbolt", + "Thunder" + ], + "types": [ + "Electric", + "Water" + ] + }, + "86": { + "name": "Heat", + "proto": "ROTOM_HEAT", + "attack": 204, + "defense": 219, + "stamina": 137, + "charged_moves": [ + "Overheat", + "Thunderbolt", + "Thunder" + ], + "types": [ + "Electric", + "Fire" + ] + } + }, + "types": [ + "Electric", + "Ghost" + ], + "attack": 185, + "defense": 159, + "stamina": 137, + "height": 0.3, + "weight": 0.3, + "quick_moves": [ + "Astonish", + "Thunder Shock" + ], + "charged_moves": [ + "Ominous Wind", + "Thunderbolt", + "Thunder" + ], + "family": 479, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 4, + "generation": "Sinnoh" + }, + "480": { + "name": "Uxie", + "pokedex_id": 480, + "default_form_id": 1847, + "forms": { + "1847": { + "name": "Normal", + "proto": "UXIE_NORMAL" + }, + "1848": { + "name": "Shadow", + "proto": "UXIE_SHADOW" + }, + "1849": { + "name": "Purified", + "proto": "UXIE_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Psychic" + ], + "attack": 156, + "defense": 270, + "stamina": 181, + "height": 0.3, + "weight": 0.3, + "quick_moves": [ + "Confusion", + "Extrasensory" + ], + "charged_moves": [ + "Futuresight", + "Swift", + "Thunder" + ], + "family": 480, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "481": { + "name": "Mesprit", + "pokedex_id": 481, + "default_form_id": 1850, + "forms": { + "1850": { + "name": "Normal", + "proto": "MESPRIT_NORMAL" + }, + "1851": { + "name": "Shadow", + "proto": "MESPRIT_SHADOW" + }, + "1852": { + "name": "Purified", + "proto": "MESPRIT_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Psychic" + ], + "attack": 212, + "defense": 212, + "stamina": 190, + "height": 0.3, + "weight": 0.3, + "quick_moves": [ + "Confusion", + "Extrasensory" + ], + "charged_moves": [ + "Futuresight", + "Swift", + "Blizzard" + ], + "family": 481, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "482": { + "name": "Azelf", + "pokedex_id": 482, + "default_form_id": 1853, + "forms": { + "1853": { + "name": "Normal", + "proto": "AZELF_NORMAL" + }, + "1854": { + "name": "Shadow", + "proto": "AZELF_SHADOW" + }, + "1855": { + "name": "Purified", + "proto": "AZELF_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Psychic" + ], + "attack": 270, + "defense": 151, + "stamina": 181, + "height": 0.3, + "weight": 0.3, + "quick_moves": [ + "Confusion", + "Extrasensory" + ], + "charged_moves": [ + "Futuresight", + "Swift", + "Fire Blast" + ], + "family": 482, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "483": { + "name": "Dialga", + "pokedex_id": 483, + "default_form_id": 1856, + "forms": { + "1856": { + "name": "Normal", + "proto": "DIALGA_NORMAL" + }, + "1857": { + "name": "Shadow", + "proto": "DIALGA_SHADOW" + }, + "1858": { + "name": "Purified", + "proto": "DIALGA_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Steel", + "Dragon" + ], + "attack": 275, + "defense": 211, + "stamina": 205, + "height": 5.4, + "weight": 683, + "quick_moves": [ + "Dragon Breath", + "Metal Claw" + ], + "charged_moves": [ + "Draco Meteor", + "Iron Head", + "Thunder" + ], + "family": 483, + "flee_rate": 0.04, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "484": { + "name": "Palkia", + "pokedex_id": 484, + "default_form_id": 1859, + "forms": { + "1859": { + "name": "Normal", + "proto": "PALKIA_NORMAL" + }, + "1860": { + "name": "Shadow", + "proto": "PALKIA_SHADOW" + }, + "1861": { + "name": "Purified", + "proto": "PALKIA_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Water", + "Dragon" + ], + "attack": 280, + "defense": 215, + "stamina": 189, + "height": 4.2, + "weight": 336, + "quick_moves": [ + "Dragon Breath", + "Dragon Tail" + ], + "charged_moves": [ + "Draco Meteor", + "Fire Blast", + "Hydro Pump", + "Aqua Tail" + ], + "family": 484, + "flee_rate": 0.04, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "485": { + "name": "Heatran", + "pokedex_id": 485, + "default_form_id": 1862, + "forms": { + "1862": { + "name": "Normal", + "proto": "HEATRAN_NORMAL" + }, + "1863": { + "name": "Shadow", + "proto": "HEATRAN_SHADOW" + }, + "1864": { + "name": "Purified", + "proto": "HEATRAN_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Fire", + "Steel" + ], + "attack": 251, + "defense": 213, + "stamina": 209, + "height": 1.7, + "weight": 430, + "quick_moves": [ + "Fire Spin", + "Bug Bite" + ], + "charged_moves": [ + "Fire Blast", + "Iron Head", + "Stone Edge", + "Flamethrower" + ], + "family": 485, + "flee_rate": 0.04, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "486": { + "name": "Regigigas", + "pokedex_id": 486, + "default_form_id": 1865, + "forms": { + "1865": { + "name": "Normal", + "proto": "REGIGIGAS_NORMAL" + }, + "1866": { + "name": "Shadow", + "proto": "REGIGIGAS_SHADOW" + }, + "1867": { + "name": "Purified", + "proto": "REGIGIGAS_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Normal" + ], + "attack": 287, + "defense": 210, + "stamina": 221, + "height": 3.7, + "weight": 420, + "quick_moves": [ + "Zen Headbutt", + "Hidden Power" + ], + "charged_moves": [ + "Giga Impact", + "Focus Blast", + "Thunder" + ], + "family": 486, + "flee_rate": 0.04, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "487": { + "name": "Giratina", + "pokedex_id": 487, + "default_form_id": 90, + "forms": { + "90": { + "name": "Altered", + "proto": "GIRATINA_ALTERED" + }, + "91": { + "name": "Origin", + "proto": "GIRATINA_ORIGIN", + "attack": 225, + "defense": 187, + "stamina": 284, + "height": 6.9, + "weight": 650, + "quick_moves": [ + "Dragon Tail", + "Shadow Claw" + ], + "charged_moves": [ + "Dragon Pulse", + "Ominous Wind", + "Shadow Ball" + ] + }, + "1868": { + "name": "Normal", + "proto": "GIRATINA_NORMAL" + }, + "1869": { + "name": "Shadow", + "proto": "GIRATINA_SHADOW" + }, + "1870": { + "name": "Purified", + "proto": "GIRATINA_PURIFIED" + } + }, + "types": [ + "Ghost", + "Dragon" + ], + "attack": 187, + "defense": 225, + "stamina": 284, + "height": 4.5, + "weight": 750, + "quick_moves": [ + "Dragon Breath", + "Shadow Claw" + ], + "charged_moves": [ + "Dragon Claw", + "Ancient Power", + "Shadow Sneak" + ], + "family": 487, + "flee_rate": 0.04, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 4, + "generation": "Sinnoh" + }, + "488": { + "name": "Cresselia", + "pokedex_id": 488, + "default_form_id": 1871, + "forms": { + "1871": { + "name": "Normal", + "proto": "CRESSELIA_NORMAL" + }, + "1872": { + "name": "Shadow", + "proto": "CRESSELIA_SHADOW" + }, + "1873": { + "name": "Purified", + "proto": "CRESSELIA_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Psychic" + ], + "attack": 152, + "defense": 258, + "stamina": 260, + "height": 1.5, + "weight": 85.6, + "quick_moves": [ + "Psycho Cut", + "Confusion" + ], + "charged_moves": [ + "Aurora Beam", + "Moonblast", + "Futuresight" + ], + "family": 488, + "flee_rate": 0.04, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "489": { + "name": "Phione", + "pokedex_id": 489, + "default_form_id": 1874, + "forms": { + "1874": { + "name": "Normal", + "proto": "PHIONE_NORMAL" + }, + "1875": { + "name": "Shadow", + "proto": "PHIONE_SHADOW" + }, + "1876": { + "name": "Purified", + "proto": "PHIONE_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Water" + ], + "attack": 162, + "defense": 162, + "stamina": 190, + "height": 0.4, + "weight": 3.1, + "quick_moves": [ + "Waterfall", + "Bubble" + ], + "charged_moves": [ + "Bubble Beam", + "Water Pulse", + "Surf" + ], + "family": 489, + "capture_rate": 0.02, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "490": { + "name": "Manaphy", + "pokedex_id": 490, + "default_form_id": 1877, + "forms": { + "1877": { + "name": "Normal", + "proto": "MANAPHY_NORMAL" + }, + "1878": { + "name": "Shadow", + "proto": "MANAPHY_SHADOW" + }, + "1879": { + "name": "Purified", + "proto": "MANAPHY_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Water" + ], + "attack": 210, + "defense": 210, + "stamina": 225, + "height": 0.3, + "weight": 1.4, + "quick_moves": [ + "Waterfall", + "Bubble" + ], + "charged_moves": [ + "Bubble Beam", + "Psychic", + "Surf" + ], + "family": 490, + "capture_rate": 0.02, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "491": { + "name": "Darkrai", + "pokedex_id": 491, + "default_form_id": 1880, + "forms": { + "1880": { + "name": "Normal", + "proto": "DARKRAI_NORMAL" + }, + "1881": { + "name": "Shadow", + "proto": "DARKRAI_SHADOW" + }, + "1882": { + "name": "Purified", + "proto": "DARKRAI_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Dark" + ], + "attack": 285, + "defense": 198, + "stamina": 172, + "height": 1.5, + "weight": 50.5, + "quick_moves": [ + "Snarl", + "Feint Attack" + ], + "charged_moves": [ + "Focus Blast", + "Shadow Ball", + "Dark Pulse" + ], + "family": 491, + "capture_rate": 0.02, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "492": { + "name": "Shaymin", + "pokedex_id": 492, + "default_form_id": 93, + "forms": { + "92": { + "name": "Sky", + "proto": "SHAYMIN_SKY", + "attack": 261, + "defense": 166, + "stamina": 225, + "height": 0.4, + "weight": 5.2, + "types": [ + "Grass", + "Flying" + ] + }, + "93": { + "name": "Land", + "proto": "SHAYMIN_LAND" + }, + "1883": { + "name": "Normal", + "proto": "SHAYMIN_NORMAL" + }, + "1884": { + "name": "Shadow", + "proto": "SHAYMIN_SHADOW" + }, + "1885": { + "name": "Purified", + "proto": "SHAYMIN_PURIFIED" + } + }, + "types": [ + "Grass" + ], + "attack": 210, + "defense": 210, + "stamina": 225, + "height": 0.2, + "weight": 2.1, + "quick_moves": [ + "Hidden Power", + "Zen Headbutt" + ], + "charged_moves": [ + "Energy Ball", + "Grass Knot", + "Solar Beam" + ], + "family": 492, + "capture_rate": 0.02, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 4, + "generation": "Sinnoh" + }, + "493": { + "name": "Arceus", + "pokedex_id": 493, + "default_form_id": 100, + "forms": { + "100": { + "name": "Normal", + "proto": "ARCEUS_NORMAL" + }, + "101": { + "name": "Fighting", + "proto": "ARCEUS_FIGHTING", + "types": [ + "Fighting" + ] + }, + "102": { + "name": "Flying", + "proto": "ARCEUS_FLYING", + "types": [ + "Flying" + ] + }, + "103": { + "name": "Poison", + "proto": "ARCEUS_POISON", + "types": [ + "Poison" + ] + }, + "104": { + "name": "Ground", + "proto": "ARCEUS_GROUND", + "types": [ + "Ground" + ] + }, + "105": { + "name": "Rock", + "proto": "ARCEUS_ROCK", + "types": [ + "Rock" + ] + }, + "106": { + "name": "Bug", + "proto": "ARCEUS_BUG", + "types": [ + "Bug" + ] + }, + "107": { + "name": "Ghost", + "proto": "ARCEUS_GHOST", + "types": [ + "Ghost" + ] + }, + "108": { + "name": "Steel", + "proto": "ARCEUS_STEEL", + "types": [ + "Steel" + ] + }, + "109": { + "name": "Fire", + "proto": "ARCEUS_FIRE", + "types": [ + "Fire" + ] + }, + "110": { + "name": "Water", + "proto": "ARCEUS_WATER", + "types": [ + "Water" + ] + }, + "111": { + "name": "Grass", + "proto": "ARCEUS_GRASS", + "types": [ + "Grass" + ] + }, + "112": { + "name": "Electric", + "proto": "ARCEUS_ELECTRIC", + "types": [ + "Electric" + ] + }, + "113": { + "name": "Psychic", + "proto": "ARCEUS_PSYCHIC", + "types": [ + "Psychic" + ] + }, + "114": { + "name": "Ice", + "proto": "ARCEUS_ICE", + "types": [ + "Ice" + ] + }, + "115": { + "name": "Dragon", + "proto": "ARCEUS_DRAGON", + "types": [ + "Dragon" + ] + }, + "116": { + "name": "Dark", + "proto": "ARCEUS_DARK", + "types": [ + "Dark" + ] + }, + "117": { + "name": "Fairy", + "proto": "ARCEUS_FAIRY", + "types": [ + "Fairy" + ] + } + }, + "types": [ + "Normal" + ], + "attack": 238, + "defense": 238, + "stamina": 237, + "height": 3.2, + "weight": 320, + "quick_moves": [ + "Iron Tail", + "Shadow Claw" + ], + "charged_moves": [ + "Futuresight", + "Hyper Beam", + "Outrage" + ], + "family": 493, + "capture_rate": 0.02, + "legendary": false, + "mythic": true, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 4, + "generation": "Sinnoh" + }, + "494": { + "name": "Victini", + "pokedex_id": 494, + "default_form_id": 1886, + "forms": { + "1886": { + "name": "Normal", + "proto": "VICTINI_NORMAL" + }, + "1887": { + "name": "Shadow", + "proto": "VICTINI_SHADOW" + }, + "1888": { + "name": "Purified", + "proto": "VICTINI_PURIFIED" + } + }, + "gen_id": 4, + "generation": "Sinnoh", + "types": [ + "Psychic", + "Fire" + ], + "attack": 210, + "defense": 210, + "stamina": 225, + "height": 0.4, + "weight": 4, + "quick_moves": [ + "Confusion", + "Quick Attack" + ], + "charged_moves": [ + "Overheat", + "Focus Blast", + "Psychic", + "V Create" + ], + "family": 494, + "capture_rate": 100, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "495": { + "name": "Snivy", + "pokedex_id": 495, + "default_form_id": 1889, + "forms": { + "1889": { + "name": "Normal", + "proto": "SNIVY_NORMAL" + }, + "1890": { + "name": "Shadow", + "proto": "SNIVY_SHADOW" + }, + "1891": { + "name": "Purified", + "proto": "SNIVY_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass" + ], + "attack": 88, + "defense": 107, + "stamina": 128, + "height": 0.6, + "weight": 8.1, + "quick_moves": [ + "Tackle", + "Vine Whip" + ], + "charged_moves": [ + "Energy Ball", + "Seed Bomb", + "Wrap" + ], + "family": 495, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 496 + } + ], + "little": true + }, + "496": { + "name": "Servine", + "pokedex_id": 496, + "default_form_id": 1892, + "forms": { + "1892": { + "name": "Normal", + "proto": "SERVINE_NORMAL" + }, + "1893": { + "name": "Shadow", + "proto": "SERVINE_SHADOW" + }, + "1894": { + "name": "Purified", + "proto": "SERVINE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass" + ], + "attack": 122, + "defense": 152, + "stamina": 155, + "height": 0.8, + "weight": 16, + "quick_moves": [ + "Iron Tail", + "Vine Whip" + ], + "charged_moves": [ + "Grass Knot", + "Leaf Tornado", + "Wrap" + ], + "family": 495, + "flee_rate": 0.1, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 497 + } + ] + }, + "497": { + "name": "Serperior", + "pokedex_id": 497, + "default_form_id": 1895, + "forms": { + "1895": { + "name": "Normal", + "proto": "SERPERIOR_NORMAL" + }, + "1896": { + "name": "Shadow", + "proto": "SERPERIOR_SHADOW" + }, + "1897": { + "name": "Purified", + "proto": "SERPERIOR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass" + ], + "attack": 161, + "defense": 204, + "stamina": 181, + "height": 3.3, + "weight": 63, + "quick_moves": [ + "Iron Tail", + "Vine Whip" + ], + "charged_moves": [ + "Grass Knot", + "Leaf Tornado", + "Aerial Ace" + ], + "family": 495, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "498": { + "name": "Tepig", + "pokedex_id": 498, + "default_form_id": 1898, + "forms": { + "1898": { + "name": "Normal", + "proto": "TEPIG_NORMAL" + }, + "1899": { + "name": "Shadow", + "proto": "TEPIG_SHADOW" + }, + "1900": { + "name": "Purified", + "proto": "TEPIG_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fire" + ], + "attack": 115, + "defense": 85, + "stamina": 163, + "height": 0.5, + "weight": 9.9, + "quick_moves": [ + "Tackle", + "Ember" + ], + "charged_moves": [ + "Flame Charge", + "Flamethrower", + "Body Slam" + ], + "family": 498, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 499 + } + ], + "little": true + }, + "499": { + "name": "Pignite", + "pokedex_id": 499, + "default_form_id": 1901, + "forms": { + "1901": { + "name": "Normal", + "proto": "PIGNITE_NORMAL" + }, + "1902": { + "name": "Shadow", + "proto": "PIGNITE_SHADOW" + }, + "1903": { + "name": "Purified", + "proto": "PIGNITE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fire", + "Fighting" + ], + "attack": 173, + "defense": 106, + "stamina": 207, + "height": 1, + "weight": 55.5, + "quick_moves": [ + "Tackle", + "Ember" + ], + "charged_moves": [ + "Flame Charge", + "Flamethrower", + "Rock Tomb" + ], + "family": 498, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 500 + } + ] + }, + "500": { + "name": "Emboar", + "pokedex_id": 500, + "default_form_id": 1904, + "forms": { + "1904": { + "name": "Normal", + "proto": "EMBOAR_NORMAL" + }, + "1905": { + "name": "Shadow", + "proto": "EMBOAR_SHADOW" + }, + "1906": { + "name": "Purified", + "proto": "EMBOAR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fire", + "Fighting" + ], + "attack": 235, + "defense": 127, + "stamina": 242, + "height": 1.6, + "weight": 150, + "quick_moves": [ + "Low Kick", + "Ember" + ], + "charged_moves": [ + "Heat Wave", + "Rock Slide", + "Focus Blast", + "Flame Charge" + ], + "family": 498, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "501": { + "name": "Oshawott", + "pokedex_id": 501, + "default_form_id": 1907, + "forms": { + "1907": { + "name": "Normal", + "proto": "OSHAWOTT_NORMAL" + }, + "1908": { + "name": "Shadow", + "proto": "OSHAWOTT_SHADOW" + }, + "1909": { + "name": "Purified", + "proto": "OSHAWOTT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water" + ], + "attack": 117, + "defense": 85, + "stamina": 146, + "height": 0.5, + "weight": 5.9, + "quick_moves": [ + "Tackle", + "Water Gun" + ], + "charged_moves": [ + "Aqua Tail", + "Water Pulse", + "Night Slash" + ], + "family": 501, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 502 + } + ], + "little": true + }, + "502": { + "name": "Dewott", + "pokedex_id": 502, + "default_form_id": 1910, + "forms": { + "1910": { + "name": "Normal", + "proto": "DEWOTT_NORMAL" + }, + "1911": { + "name": "Shadow", + "proto": "DEWOTT_SHADOW" + }, + "1912": { + "name": "Purified", + "proto": "DEWOTT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water" + ], + "attack": 159, + "defense": 116, + "stamina": 181, + "height": 0.8, + "weight": 24.5, + "quick_moves": [ + "Fury Cutter", + "Water Gun" + ], + "charged_moves": [ + "Aqua Tail", + "Water Pulse", + "X Scissor" + ], + "family": 501, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 503 + } + ] + }, + "503": { + "name": "Samurott", + "pokedex_id": 503, + "default_form_id": 1913, + "forms": { + "1913": { + "name": "Normal", + "proto": "SAMUROTT_NORMAL" + }, + "1914": { + "name": "Shadow", + "proto": "SAMUROTT_SHADOW" + }, + "1915": { + "name": "Purified", + "proto": "SAMUROTT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water" + ], + "attack": 212, + "defense": 157, + "stamina": 216, + "height": 1.5, + "weight": 94.6, + "quick_moves": [ + "Fury Cutter", + "Waterfall" + ], + "charged_moves": [ + "Hydro Pump", + "Blizzard", + "Megahorn" + ], + "family": 501, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "504": { + "name": "Patrat", + "pokedex_id": 504, + "default_form_id": 1916, + "forms": { + "1916": { + "name": "Normal", + "proto": "PATRAT_NORMAL" + }, + "1917": { + "name": "Shadow", + "proto": "PATRAT_SHADOW" + }, + "1918": { + "name": "Purified", + "proto": "PATRAT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal" + ], + "attack": 98, + "defense": 73, + "stamina": 128, + "height": 0.5, + "weight": 11.6, + "quick_moves": [ + "Tackle", + "Bite" + ], + "charged_moves": [ + "Dig", + "Hyper Fang", + "Grass Knot" + ], + "family": 504, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 505 + } + ], + "little": true + }, + "505": { + "name": "Watchog", + "pokedex_id": 505, + "default_form_id": 1919, + "forms": { + "1919": { + "name": "Normal", + "proto": "WATCHOG_NORMAL" + }, + "1920": { + "name": "Shadow", + "proto": "WATCHOG_SHADOW" + }, + "1921": { + "name": "Purified", + "proto": "WATCHOG_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal" + ], + "attack": 165, + "defense": 139, + "stamina": 155, + "height": 1.1, + "weight": 27, + "quick_moves": [ + "Low Kick", + "Bite" + ], + "charged_moves": [ + "Crunch", + "Hyper Fang", + "Grass Knot" + ], + "family": 504, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "506": { + "name": "Lillipup", + "pokedex_id": 506, + "default_form_id": 1922, + "forms": { + "1922": { + "name": "Normal", + "proto": "LILLIPUP_NORMAL" + }, + "1923": { + "name": "Shadow", + "proto": "LILLIPUP_SHADOW" + }, + "1924": { + "name": "Purified", + "proto": "LILLIPUP_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal" + ], + "attack": 107, + "defense": 86, + "stamina": 128, + "height": 0.4, + "weight": 4.1, + "quick_moves": [ + "Tackle", + "Take Down" + ], + "charged_moves": [ + "Thunderbolt", + "Rock Tomb", + "Dig" + ], + "family": 506, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 507 + } + ], + "little": true + }, + "507": { + "name": "Herdier", + "pokedex_id": 507, + "default_form_id": 1925, + "forms": { + "1925": { + "name": "Normal", + "proto": "HERDIER_NORMAL" + }, + "1926": { + "name": "Shadow", + "proto": "HERDIER_SHADOW" + }, + "1927": { + "name": "Purified", + "proto": "HERDIER_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal" + ], + "attack": 145, + "defense": 126, + "stamina": 163, + "height": 0.9, + "weight": 14.7, + "quick_moves": [ + "Lick", + "Take Down" + ], + "charged_moves": [ + "Thunderbolt", + "Play Rough", + "Dig" + ], + "family": 506, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 508 + } + ] + }, + "508": { + "name": "Stoutland", + "pokedex_id": 508, + "default_form_id": 1928, + "forms": { + "1928": { + "name": "Normal", + "proto": "STOUTLAND_NORMAL" + }, + "1929": { + "name": "Shadow", + "proto": "STOUTLAND_SHADOW" + }, + "1930": { + "name": "Purified", + "proto": "STOUTLAND_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal" + ], + "attack": 206, + "defense": 182, + "stamina": 198, + "height": 1.2, + "weight": 61, + "quick_moves": [ + "Lick", + "Take Down", + "Ice Fang" + ], + "charged_moves": [ + "Wild Charge", + "Play Rough", + "Crunch" + ], + "family": 506, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "509": { + "name": "Purrloin", + "pokedex_id": 509, + "default_form_id": 1931, + "forms": { + "1931": { + "name": "Normal", + "proto": "PURRLOIN_NORMAL" + }, + "1932": { + "name": "Shadow", + "proto": "PURRLOIN_SHADOW" + }, + "1933": { + "name": "Purified", + "proto": "PURRLOIN_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark" + ], + "attack": 98, + "defense": 73, + "stamina": 121, + "height": 0.4, + "weight": 10.1, + "quick_moves": [ + "Scratch", + "Sucker Punch" + ], + "charged_moves": [ + "Night Slash", + "Play Rough", + "Dark Pulse" + ], + "family": 509, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 510 + } + ], + "little": true + }, + "510": { + "name": "Liepard", + "pokedex_id": 510, + "default_form_id": 1934, + "forms": { + "1934": { + "name": "Normal", + "proto": "LIEPARD_NORMAL" + }, + "1935": { + "name": "Shadow", + "proto": "LIEPARD_SHADOW" + }, + "1936": { + "name": "Purified", + "proto": "LIEPARD_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark" + ], + "attack": 187, + "defense": 106, + "stamina": 162, + "height": 1.1, + "weight": 37.5, + "quick_moves": [ + "Charm", + "Snarl" + ], + "charged_moves": [ + "Gunk Shot", + "Play Rough", + "Dark Pulse", + "Payback" + ], + "family": 509, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "511": { + "name": "Pansage", + "pokedex_id": 511, + "default_form_id": 1937, + "forms": { + "1937": { + "name": "Normal", + "proto": "PANSAGE_NORMAL" + }, + "1938": { + "name": "Shadow", + "proto": "PANSAGE_SHADOW" + }, + "1939": { + "name": "Purified", + "proto": "PANSAGE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass" + ], + "attack": 104, + "defense": 94, + "stamina": 137, + "height": 0.6, + "weight": 10.5, + "quick_moves": [ + "Scratch", + "Vine Whip" + ], + "charged_moves": [ + "Energy Ball", + "Seed Bomb", + "Crunch" + ], + "family": 511, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 512 + } + ], + "little": true + }, + "512": { + "name": "Simisage", + "pokedex_id": 512, + "default_form_id": 1940, + "forms": { + "1940": { + "name": "Normal", + "proto": "SIMISAGE_NORMAL" + }, + "1941": { + "name": "Shadow", + "proto": "SIMISAGE_SHADOW" + }, + "1942": { + "name": "Purified", + "proto": "SIMISAGE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass" + ], + "attack": 206, + "defense": 133, + "stamina": 181, + "height": 1.1, + "weight": 30.5, + "quick_moves": [ + "Bite", + "Vine Whip" + ], + "charged_moves": [ + "Solar Beam", + "Grass Knot", + "Crunch" + ], + "family": 511, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "513": { + "name": "Pansear", + "pokedex_id": 513, + "default_form_id": 1943, + "forms": { + "1943": { + "name": "Normal", + "proto": "PANSEAR_NORMAL" + }, + "1944": { + "name": "Shadow", + "proto": "PANSEAR_SHADOW" + }, + "1945": { + "name": "Purified", + "proto": "PANSEAR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fire" + ], + "attack": 104, + "defense": 94, + "stamina": 137, + "height": 0.6, + "weight": 11, + "quick_moves": [ + "Scratch", + "Fire Spin" + ], + "charged_moves": [ + "Flame Burst", + "Flame Charge", + "Crunch" + ], + "family": 513, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 514 + } + ], + "little": true + }, + "514": { + "name": "Simisear", + "pokedex_id": 514, + "default_form_id": 1946, + "forms": { + "1946": { + "name": "Normal", + "proto": "SIMISEAR_NORMAL" + }, + "1947": { + "name": "Shadow", + "proto": "SIMISEAR_SHADOW" + }, + "1948": { + "name": "Purified", + "proto": "SIMISEAR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fire" + ], + "attack": 206, + "defense": 133, + "stamina": 181, + "height": 1, + "weight": 28, + "quick_moves": [ + "Bite", + "Fire Spin" + ], + "charged_moves": [ + "Flamethrower", + "Fire Blast", + "Crunch" + ], + "family": 513, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "515": { + "name": "Panpour", + "pokedex_id": 515, + "default_form_id": 1949, + "forms": { + "1949": { + "name": "Normal", + "proto": "PANPOUR_NORMAL" + }, + "1950": { + "name": "Shadow", + "proto": "PANPOUR_SHADOW" + }, + "1951": { + "name": "Purified", + "proto": "PANPOUR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water" + ], + "attack": 104, + "defense": 94, + "stamina": 137, + "height": 0.6, + "weight": 13.5, + "quick_moves": [ + "Scratch", + "Water Gun" + ], + "charged_moves": [ + "Surf", + "Water Pulse", + "Crunch" + ], + "family": 515, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 516 + } + ], + "little": true + }, + "516": { + "name": "Simipour", + "pokedex_id": 516, + "default_form_id": 1952, + "forms": { + "1952": { + "name": "Normal", + "proto": "SIMIPOUR_NORMAL" + }, + "1953": { + "name": "Shadow", + "proto": "SIMIPOUR_SHADOW" + }, + "1954": { + "name": "Purified", + "proto": "SIMIPOUR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water" + ], + "attack": 206, + "defense": 133, + "stamina": 181, + "height": 1, + "weight": 29, + "quick_moves": [ + "Bite", + "Water Gun" + ], + "charged_moves": [ + "Surf", + "Hydro Pump", + "Crunch" + ], + "family": 515, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "517": { + "name": "Munna", + "pokedex_id": 517, + "default_form_id": 1955, + "forms": { + "1955": { + "name": "Normal", + "proto": "MUNNA_NORMAL" + }, + "1956": { + "name": "Shadow", + "proto": "MUNNA_SHADOW" + }, + "1957": { + "name": "Purified", + "proto": "MUNNA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic" + ], + "attack": 111, + "defense": 92, + "stamina": 183, + "height": 0.6, + "weight": 23.3, + "quick_moves": [ + "Zen Headbutt", + "Charge Beam" + ], + "charged_moves": [ + "Psybeam", + "Dazzling Gleam", + "Psyshock" + ], + "family": 517, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 518 + } + ], + "little": true + }, + "518": { + "name": "Musharna", + "pokedex_id": 518, + "default_form_id": 1958, + "forms": { + "1958": { + "name": "Normal", + "proto": "MUSHARNA_NORMAL" + }, + "1959": { + "name": "Shadow", + "proto": "MUSHARNA_SHADOW" + }, + "1960": { + "name": "Purified", + "proto": "MUSHARNA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic" + ], + "attack": 183, + "defense": 166, + "stamina": 253, + "height": 1.1, + "weight": 60.5, + "quick_moves": [ + "Zen Headbutt", + "Charge Beam" + ], + "charged_moves": [ + "Futuresight", + "Dazzling Gleam", + "Psyshock" + ], + "family": 517, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "519": { + "name": "Pidove", + "pokedex_id": 519, + "default_form_id": 1961, + "forms": { + "1961": { + "name": "Normal", + "proto": "PIDOVE_NORMAL" + }, + "1962": { + "name": "Shadow", + "proto": "PIDOVE_SHADOW" + }, + "1963": { + "name": "Purified", + "proto": "PIDOVE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal", + "Flying" + ], + "attack": 98, + "defense": 80, + "stamina": 137, + "height": 0.3, + "weight": 2.1, + "quick_moves": [ + "Quick Attack", + "Air Slash" + ], + "charged_moves": [ + "Heat Wave", + "Aerial Ace", + "Air Cutter" + ], + "family": 519, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 520 + } + ], + "little": true + }, + "520": { + "name": "Tranquill", + "pokedex_id": 520, + "default_form_id": 1964, + "forms": { + "1964": { + "name": "Normal", + "proto": "TRANQUILL_NORMAL" + }, + "1965": { + "name": "Shadow", + "proto": "TRANQUILL_SHADOW" + }, + "1966": { + "name": "Purified", + "proto": "TRANQUILL_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal", + "Flying" + ], + "attack": 144, + "defense": 107, + "stamina": 158, + "height": 0.6, + "weight": 15, + "quick_moves": [ + "Air Slash", + "Steel Wing" + ], + "charged_moves": [ + "Heat Wave", + "Aerial Ace", + "Sky Attack" + ], + "family": 519, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 521 + } + ] + }, + "521": { + "name": "Unfezant", + "pokedex_id": 521, + "default_form_id": 1967, + "forms": { + "1967": { + "name": "Normal", + "proto": "UNFEZANT_NORMAL" + }, + "1968": { + "name": "Shadow", + "proto": "UNFEZANT_SHADOW" + }, + "1969": { + "name": "Purified", + "proto": "UNFEZANT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal", + "Flying" + ], + "attack": 226, + "defense": 146, + "stamina": 190, + "height": 1.2, + "weight": 29, + "quick_moves": [ + "Air Slash", + "Steel Wing" + ], + "charged_moves": [ + "Heat Wave", + "Hyper Beam", + "Sky Attack" + ], + "family": 519, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "522": { + "name": "Blitzle", + "pokedex_id": 522, + "default_form_id": 1970, + "forms": { + "1970": { + "name": "Normal", + "proto": "BLITZLE_NORMAL" + }, + "1971": { + "name": "Shadow", + "proto": "BLITZLE_SHADOW" + }, + "1972": { + "name": "Purified", + "proto": "BLITZLE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Electric" + ], + "attack": 118, + "defense": 64, + "stamina": 128, + "height": 0.8, + "weight": 29.8, + "quick_moves": [ + "Quick Attack", + "Spark" + ], + "charged_moves": [ + "Flame Charge", + "Discharge", + "Thunderbolt" + ], + "family": 522, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 523 + } + ], + "little": true + }, + "523": { + "name": "Zebstrika", + "pokedex_id": 523, + "default_form_id": 1973, + "forms": { + "1973": { + "name": "Normal", + "proto": "ZEBSTRIKA_NORMAL" + }, + "1974": { + "name": "Shadow", + "proto": "ZEBSTRIKA_SHADOW" + }, + "1975": { + "name": "Purified", + "proto": "ZEBSTRIKA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Electric" + ], + "attack": 211, + "defense": 136, + "stamina": 181, + "height": 1.6, + "weight": 79.5, + "quick_moves": [ + "Low Kick", + "Spark" + ], + "charged_moves": [ + "Flame Charge", + "Discharge", + "Wild Charge" + ], + "family": 522, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "524": { + "name": "Roggenrola", + "pokedex_id": 524, + "default_form_id": 1976, + "forms": { + "1976": { + "name": "Normal", + "proto": "ROGGENROLA_NORMAL" + }, + "1977": { + "name": "Shadow", + "proto": "ROGGENROLA_SHADOW" + }, + "1978": { + "name": "Purified", + "proto": "ROGGENROLA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Rock" + ], + "attack": 121, + "defense": 110, + "stamina": 146, + "height": 0.4, + "weight": 18, + "quick_moves": [ + "Tackle", + "Smack Down" + ], + "charged_moves": [ + "Bulldoze", + "Rock Blast", + "Stone Edge" + ], + "family": 524, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 525 + } + ], + "little": true + }, + "525": { + "name": "Boldore", + "pokedex_id": 525, + "default_form_id": 1979, + "forms": { + "1979": { + "name": "Normal", + "proto": "BOLDORE_NORMAL" + }, + "1980": { + "name": "Shadow", + "proto": "BOLDORE_SHADOW" + }, + "1981": { + "name": "Purified", + "proto": "BOLDORE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Rock" + ], + "attack": 174, + "defense": 143, + "stamina": 172, + "height": 0.9, + "weight": 102, + "quick_moves": [ + "Mud Slap", + "Smack Down" + ], + "charged_moves": [ + "Rock Slide", + "Bulldoze", + "Stone Edge" + ], + "family": 524, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 526 + } + ] + }, + "526": { + "name": "Gigalith", + "pokedex_id": 526, + "default_form_id": 1982, + "forms": { + "1982": { + "name": "Normal", + "proto": "GIGALITH_NORMAL" + }, + "1983": { + "name": "Shadow", + "proto": "GIGALITH_SHADOW" + }, + "1984": { + "name": "Purified", + "proto": "GIGALITH_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Rock" + ], + "attack": 226, + "defense": 201, + "stamina": 198, + "height": 1.7, + "weight": 260, + "quick_moves": [ + "Mud Slap", + "Smack Down" + ], + "charged_moves": [ + "Rock Slide", + "Solar Beam", + "Super Power", + "Heavy Slam" + ], + "family": 524, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "527": { + "name": "Woobat", + "pokedex_id": 527, + "default_form_id": 1985, + "forms": { + "1985": { + "name": "Normal", + "proto": "WOOBAT_NORMAL" + }, + "1986": { + "name": "Shadow", + "proto": "WOOBAT_SHADOW" + }, + "1987": { + "name": "Purified", + "proto": "WOOBAT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic", + "Flying" + ], + "attack": 107, + "defense": 85, + "stamina": 163, + "height": 0.4, + "weight": 2.1, + "quick_moves": [ + "Confusion", + "Air Slash" + ], + "charged_moves": [ + "Air Cutter", + "Aerial Ace", + "Psyshock" + ], + "family": 527, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 528 + } + ], + "little": true + }, + "528": { + "name": "Swoobat", + "pokedex_id": 528, + "default_form_id": 1988, + "forms": { + "1988": { + "name": "Normal", + "proto": "SWOOBAT_NORMAL" + }, + "1989": { + "name": "Shadow", + "proto": "SWOOBAT_SHADOW" + }, + "1990": { + "name": "Purified", + "proto": "SWOOBAT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic", + "Flying" + ], + "attack": 161, + "defense": 119, + "stamina": 167, + "height": 0.9, + "weight": 10.5, + "quick_moves": [ + "Confusion", + "Air Slash" + ], + "charged_moves": [ + "Psychic", + "Aerial Ace", + "Futuresight" + ], + "family": 527, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "529": { + "name": "Drilbur", + "pokedex_id": 529, + "default_form_id": 1991, + "forms": { + "1991": { + "name": "Normal", + "proto": "DRILBUR_NORMAL" + }, + "1992": { + "name": "Shadow", + "proto": "DRILBUR_SHADOW" + }, + "1993": { + "name": "Purified", + "proto": "DRILBUR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ground" + ], + "attack": 154, + "defense": 85, + "stamina": 155, + "height": 0.3, + "weight": 8.5, + "quick_moves": [ + "Scratch", + "Mud Slap" + ], + "charged_moves": [ + "Rock Tomb", + "Dig", + "Drill Run" + ], + "family": 529, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 530 + } + ], + "little": true + }, + "530": { + "name": "Excadrill", + "pokedex_id": 530, + "default_form_id": 1994, + "forms": { + "1994": { + "name": "Normal", + "proto": "EXCADRILL_NORMAL" + }, + "1995": { + "name": "Shadow", + "proto": "EXCADRILL_SHADOW" + }, + "1996": { + "name": "Purified", + "proto": "EXCADRILL_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ground", + "Steel" + ], + "attack": 255, + "defense": 129, + "stamina": 242, + "height": 0.7, + "weight": 40.4, + "quick_moves": [ + "Metal Claw", + "Mud Slap", + "Mud Shot" + ], + "charged_moves": [ + "Rock Slide", + "Earthquake", + "Drill Run", + "Iron Head" + ], + "family": 529, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "531": { + "name": "Audino", + "pokedex_id": 531, + "default_form_id": 1997, + "forms": { + "1997": { + "name": "Normal", + "proto": "AUDINO_NORMAL", + "temp_evolutions": { + "1": {} + } + }, + "1998": { + "name": "Shadow", + "proto": "AUDINO_SHADOW" + }, + "1999": { + "name": "Purified", + "proto": "AUDINO_PURIFIED", + "temp_evolutions": { + "1": {} + } + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal" + ], + "attack": 114, + "defense": 163, + "stamina": 230, + "height": 1.1, + "weight": 31, + "quick_moves": [ + "Pound", + "Zen Headbutt" + ], + "charged_moves": [ + "Disarming Voice", + "Dazzling Gleam", + "Hyper Beam" + ], + "family": 531, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "temp_evolutions": { + "1": { + "attack": 147, + "defense": 239, + "stamina": 230, + "unreleased": true, + "types": [ + "Normal", + "Fairy" + ] + } + } + }, + "532": { + "name": "Timburr", + "pokedex_id": 532, + "default_form_id": 2000, + "forms": { + "2000": { + "name": "Normal", + "proto": "TIMBURR_NORMAL" + }, + "2001": { + "name": "Shadow", + "proto": "TIMBURR_SHADOW" + }, + "2002": { + "name": "Purified", + "proto": "TIMBURR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fighting" + ], + "attack": 134, + "defense": 87, + "stamina": 181, + "height": 0.6, + "weight": 12.5, + "quick_moves": [ + "Low Kick", + "Pound" + ], + "charged_moves": [ + "Low Sweep", + "Brick Break", + "Rock Tomb" + ], + "family": 532, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 533 + } + ], + "little": true + }, + "533": { + "name": "Gurdurr", + "pokedex_id": 533, + "default_form_id": 2003, + "forms": { + "2003": { + "name": "Normal", + "proto": "GURDURR_NORMAL" + }, + "2004": { + "name": "Shadow", + "proto": "GURDURR_SHADOW" + }, + "2005": { + "name": "Purified", + "proto": "GURDURR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fighting" + ], + "attack": 180, + "defense": 134, + "stamina": 198, + "height": 1.2, + "weight": 40, + "quick_moves": [ + "Low Kick", + "Poison Jab" + ], + "charged_moves": [ + "Low Sweep", + "Brick Break", + "Stone Edge" + ], + "family": 532, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 534 + } + ] + }, + "534": { + "name": "Conkeldurr", + "pokedex_id": 534, + "default_form_id": 2006, + "forms": { + "2006": { + "name": "Normal", + "proto": "CONKELDURR_NORMAL" + }, + "2007": { + "name": "Shadow", + "proto": "CONKELDURR_SHADOW" + }, + "2008": { + "name": "Purified", + "proto": "CONKELDURR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fighting" + ], + "attack": 243, + "defense": 158, + "stamina": 233, + "height": 1.4, + "weight": 87, + "quick_moves": [ + "Counter", + "Poison Jab" + ], + "charged_moves": [ + "Dynamic Punch", + "Focus Blast", + "Stone Edge" + ], + "family": 532, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "535": { + "name": "Tympole", + "pokedex_id": 535, + "default_form_id": 2009, + "forms": { + "2009": { + "name": "Normal", + "proto": "TYMPOLE_NORMAL" + }, + "2010": { + "name": "Shadow", + "proto": "TYMPOLE_SHADOW" + }, + "2011": { + "name": "Purified", + "proto": "TYMPOLE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water" + ], + "attack": 98, + "defense": 78, + "stamina": 137, + "height": 0.5, + "weight": 4.5, + "quick_moves": [ + "Mud Shot", + "Bubble" + ], + "charged_moves": [ + "Water Pulse", + "Mud Bomb", + "Sludge Wave" + ], + "family": 535, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 536 + } + ], + "little": true + }, + "536": { + "name": "Palpitoad", + "pokedex_id": 536, + "default_form_id": 2012, + "forms": { + "2012": { + "name": "Normal", + "proto": "PALPITOAD_NORMAL" + }, + "2013": { + "name": "Shadow", + "proto": "PALPITOAD_SHADOW" + }, + "2014": { + "name": "Purified", + "proto": "PALPITOAD_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water", + "Ground" + ], + "attack": 128, + "defense": 109, + "stamina": 181, + "height": 0.8, + "weight": 17, + "quick_moves": [ + "Mud Shot", + "Bubble" + ], + "charged_moves": [ + "Water Pulse", + "Earth Power", + "Sludge Wave" + ], + "family": 535, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 537 + } + ] + }, + "537": { + "name": "Seismitoad", + "pokedex_id": 537, + "default_form_id": 2015, + "forms": { + "2015": { + "name": "Normal", + "proto": "SEISMITOAD_NORMAL" + }, + "2016": { + "name": "Shadow", + "proto": "SEISMITOAD_SHADOW" + }, + "2017": { + "name": "Purified", + "proto": "SEISMITOAD_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water", + "Ground" + ], + "attack": 188, + "defense": 150, + "stamina": 233, + "height": 1.5, + "weight": 62, + "quick_moves": [ + "Mud Shot", + "Bubble" + ], + "charged_moves": [ + "Muddy Water", + "Earth Power", + "Sludge Bomb" + ], + "family": 535, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "538": { + "name": "Throh", + "pokedex_id": 538, + "default_form_id": 2018, + "forms": { + "2018": { + "name": "Normal", + "proto": "THROH_NORMAL" + }, + "2019": { + "name": "Shadow", + "proto": "THROH_SHADOW" + }, + "2020": { + "name": "Purified", + "proto": "THROH_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fighting" + ], + "attack": 172, + "defense": 160, + "stamina": 260, + "height": 1.3, + "weight": 55.5, + "quick_moves": [ + "Low Kick", + "Zen Headbutt" + ], + "charged_moves": [ + "Focus Blast", + "Low Sweep", + "Body Slam" + ], + "family": 538, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "539": { + "name": "Sawk", + "pokedex_id": 539, + "default_form_id": 2021, + "forms": { + "2021": { + "name": "Normal", + "proto": "SAWK_NORMAL" + }, + "2022": { + "name": "Shadow", + "proto": "SAWK_SHADOW" + }, + "2023": { + "name": "Purified", + "proto": "SAWK_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fighting" + ], + "attack": 231, + "defense": 153, + "stamina": 181, + "height": 1.4, + "weight": 51, + "quick_moves": [ + "Low Kick", + "Poison Jab" + ], + "charged_moves": [ + "Focus Blast", + "Low Sweep", + "Body Slam" + ], + "family": 539, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "540": { + "name": "Sewaddle", + "pokedex_id": 540, + "default_form_id": 2024, + "forms": { + "2024": { + "name": "Normal", + "proto": "SEWADDLE_NORMAL" + }, + "2025": { + "name": "Shadow", + "proto": "SEWADDLE_SHADOW" + }, + "2026": { + "name": "Purified", + "proto": "SEWADDLE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Grass" + ], + "attack": 96, + "defense": 124, + "stamina": 128, + "height": 0.3, + "weight": 2.5, + "quick_moves": [ + "Struggle Bug", + "Bug Bite" + ], + "charged_moves": [ + "Energy Ball", + "Seed Bomb", + "Silver Wind" + ], + "family": 540, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 541 + } + ], + "little": true + }, + "541": { + "name": "Swadloon", + "pokedex_id": 541, + "default_form_id": 2027, + "forms": { + "2027": { + "name": "Normal", + "proto": "SWADLOON_NORMAL" + }, + "2028": { + "name": "Shadow", + "proto": "SWADLOON_SHADOW" + }, + "2029": { + "name": "Purified", + "proto": "SWADLOON_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Grass" + ], + "attack": 115, + "defense": 162, + "stamina": 146, + "height": 0.5, + "weight": 7.3, + "quick_moves": [ + "Struggle Bug", + "Bug Bite" + ], + "charged_moves": [ + "Energy Ball", + "Bug Buzz", + "Silver Wind" + ], + "family": 540, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 542 + } + ] + }, + "542": { + "name": "Leavanny", + "pokedex_id": 542, + "default_form_id": 2030, + "forms": { + "2030": { + "name": "Normal", + "proto": "LEAVANNY_NORMAL" + }, + "2031": { + "name": "Shadow", + "proto": "LEAVANNY_SHADOW" + }, + "2032": { + "name": "Purified", + "proto": "LEAVANNY_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Grass" + ], + "attack": 205, + "defense": 165, + "stamina": 181, + "height": 1.2, + "weight": 20.5, + "quick_moves": [ + "Razor Leaf", + "Bug Bite" + ], + "charged_moves": [ + "Leaf Blade", + "X Scissor", + "Silver Wind", + "Leaf Storm" + ], + "family": 540, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "543": { + "name": "Venipede", + "pokedex_id": 543, + "default_form_id": 2033, + "forms": { + "2033": { + "name": "Normal", + "proto": "VENIPEDE_NORMAL" + }, + "2034": { + "name": "Shadow", + "proto": "VENIPEDE_SHADOW" + }, + "2035": { + "name": "Purified", + "proto": "VENIPEDE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Poison" + ], + "attack": 83, + "defense": 99, + "stamina": 102, + "height": 0.4, + "weight": 5.3, + "quick_moves": [ + "Bug Bite", + "Poison Sting" + ], + "charged_moves": [ + "Signal Beam", + "Sludge Bomb", + "Gyro Ball" + ], + "family": 543, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 544 + } + ], + "little": true + }, + "544": { + "name": "Whirlipede", + "pokedex_id": 544, + "default_form_id": 2036, + "forms": { + "2036": { + "name": "Normal", + "proto": "WHIRLIPEDE_NORMAL" + }, + "2037": { + "name": "Shadow", + "proto": "WHIRLIPEDE_SHADOW" + }, + "2038": { + "name": "Purified", + "proto": "WHIRLIPEDE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Poison" + ], + "attack": 100, + "defense": 173, + "stamina": 120, + "height": 1.2, + "weight": 58.5, + "quick_moves": [ + "Bug Bite", + "Poison Sting" + ], + "charged_moves": [ + "Signal Beam", + "Sludge Bomb", + "Gyro Ball" + ], + "family": 543, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 545 + } + ] + }, + "545": { + "name": "Scolipede", + "pokedex_id": 545, + "default_form_id": 2039, + "forms": { + "2039": { + "name": "Normal", + "proto": "SCOLIPEDE_NORMAL" + }, + "2040": { + "name": "Shadow", + "proto": "SCOLIPEDE_SHADOW" + }, + "2041": { + "name": "Purified", + "proto": "SCOLIPEDE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Poison" + ], + "attack": 203, + "defense": 175, + "stamina": 155, + "height": 2.5, + "weight": 200.5, + "quick_moves": [ + "Bug Bite", + "Poison Jab" + ], + "charged_moves": [ + "Megahorn", + "Sludge Bomb", + "Gyro Ball", + "X Scissor" + ], + "family": 543, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "546": { + "name": "Cottonee", + "pokedex_id": 546, + "default_form_id": 2042, + "forms": { + "2042": { + "name": "Normal", + "proto": "COTTONEE_NORMAL" + }, + "2043": { + "name": "Shadow", + "proto": "COTTONEE_SHADOW" + }, + "2044": { + "name": "Purified", + "proto": "COTTONEE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass", + "Fairy" + ], + "attack": 71, + "defense": 111, + "stamina": 120, + "height": 0.3, + "weight": 0.6, + "quick_moves": [ + "Charm", + "Razor Leaf" + ], + "charged_moves": [ + "Energy Ball", + "Seed Bomb", + "Grass Knot" + ], + "family": 546, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 547 + } + ], + "little": true + }, + "547": { + "name": "Whimsicott", + "pokedex_id": 547, + "default_form_id": 2045, + "forms": { + "2045": { + "name": "Normal", + "proto": "WHIMSICOTT_NORMAL" + }, + "2046": { + "name": "Shadow", + "proto": "WHIMSICOTT_SHADOW" + }, + "2047": { + "name": "Purified", + "proto": "WHIMSICOTT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass", + "Fairy" + ], + "attack": 164, + "defense": 176, + "stamina": 155, + "height": 0.7, + "weight": 6.6, + "quick_moves": [ + "Charm", + "Razor Leaf" + ], + "charged_moves": [ + "Grass Knot", + "Hurricane", + "Moonblast" + ], + "family": 546, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "548": { + "name": "Petilil", + "pokedex_id": 548, + "default_form_id": 2048, + "forms": { + "2048": { + "name": "Normal", + "proto": "PETILIL_NORMAL" + }, + "2049": { + "name": "Shadow", + "proto": "PETILIL_SHADOW" + }, + "2050": { + "name": "Purified", + "proto": "PETILIL_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass" + ], + "attack": 119, + "defense": 91, + "stamina": 128, + "height": 0.5, + "weight": 6.6, + "quick_moves": [ + "Charm", + "Hidden Power" + ], + "charged_moves": [ + "Energy Ball", + "Seed Bomb" + ], + "family": 548, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 549 + } + ], + "little": true + }, + "549": { + "name": "Lilligant", + "pokedex_id": 549, + "default_form_id": 2051, + "forms": { + "2051": { + "name": "Normal", + "proto": "LILLIGANT_NORMAL" + }, + "2052": { + "name": "Shadow", + "proto": "LILLIGANT_SHADOW" + }, + "2053": { + "name": "Purified", + "proto": "LILLIGANT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass" + ], + "attack": 214, + "defense": 155, + "stamina": 172, + "height": 1.1, + "weight": 16.3, + "quick_moves": [ + "Charm", + "Hidden Power" + ], + "charged_moves": [ + "Petal Blizzard", + "Hyper Beam", + "Solar Beam" + ], + "family": 548, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "550": { + "name": "Basculin", + "pokedex_id": 550, + "default_form_id": 136, + "forms": { + "136": { + "name": "Red Striped", + "proto": "BASCULIN_RED_STRIPED" + }, + "137": { + "name": "Blue Striped", + "proto": "BASCULIN_BLUE_STRIPED" + } + }, + "types": [ + "Water" + ], + "attack": 189, + "defense": 129, + "stamina": 172, + "height": 1, + "weight": 18, + "quick_moves": [ + "Tackle", + "Water Gun" + ], + "charged_moves": [ + "Aqua Jet", + "Aqua Tail", + "Muddy Water" + ], + "family": 550, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 5, + "generation": "Unova" + }, + "551": { + "name": "Sandile", + "pokedex_id": 551, + "default_form_id": 2054, + "forms": { + "2054": { + "name": "Normal", + "proto": "SANDILE_NORMAL" + }, + "2055": { + "name": "Shadow", + "proto": "SANDILE_SHADOW" + }, + "2056": { + "name": "Purified", + "proto": "SANDILE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ground", + "Dark" + ], + "attack": 132, + "defense": 69, + "stamina": 137, + "height": 0.7, + "weight": 15.2, + "quick_moves": [ + "Bite", + "Mud Slap" + ], + "charged_moves": [ + "Dig", + "Crunch", + "Bulldoze" + ], + "family": 551, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 552 + } + ], + "little": true + }, + "552": { + "name": "Krokorok", + "pokedex_id": 552, + "default_form_id": 2057, + "forms": { + "2057": { + "name": "Normal", + "proto": "KROKOROK_NORMAL" + }, + "2058": { + "name": "Shadow", + "proto": "KROKOROK_SHADOW" + }, + "2059": { + "name": "Purified", + "proto": "KROKOROK_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ground", + "Dark" + ], + "attack": 155, + "defense": 90, + "stamina": 155, + "height": 1, + "weight": 33.4, + "quick_moves": [ + "Bite", + "Mud Slap" + ], + "charged_moves": [ + "Earthquake", + "Crunch", + "Bulldoze" + ], + "family": 551, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 553 + } + ] + }, + "553": { + "name": "Krookodile", + "pokedex_id": 553, + "default_form_id": 2060, + "forms": { + "2060": { + "name": "Normal", + "proto": "KROOKODILE_NORMAL" + }, + "2061": { + "name": "Shadow", + "proto": "KROOKODILE_SHADOW" + }, + "2062": { + "name": "Purified", + "proto": "KROOKODILE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ground", + "Dark" + ], + "attack": 229, + "defense": 158, + "stamina": 216, + "height": 1.5, + "weight": 96.3, + "quick_moves": [ + "Snarl", + "Mud Slap" + ], + "charged_moves": [ + "Earthquake", + "Crunch", + "Outrage" + ], + "family": 551, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "554": { + "name": "Darumaka", + "pokedex_id": 554, + "default_form_id": 2063, + "forms": { + "2063": { + "name": "Normal", + "proto": "DARUMAKA_NORMAL", + "evolutions": [ + { + "pokemon": 555, + "form": 138 + } + ] + }, + "2064": { + "name": "Shadow", + "proto": "DARUMAKA_SHADOW" + }, + "2065": { + "name": "Purified", + "proto": "DARUMAKA_PURIFIED" + }, + "2341": { + "name": "Galarian", + "proto": "DARUMAKA_GALARIAN", + "height": 0.7, + "weight": 40, + "quick_moves": [ + "Tackle", + "Ice Fang" + ], + "charged_moves": [ + "Ice Punch", + "Ice Beam" + ], + "types": [ + "Ice" + ], + "evolutions": [ + { + "pokemon": 555, + "form": 2342 + } + ] + } + }, + "types": [ + "Fire" + ], + "attack": 153, + "defense": 86, + "stamina": 172, + "height": 0.6, + "weight": 37.5, + "quick_moves": [ + "Tackle", + "Fire Fang" + ], + "charged_moves": [ + "Fire Punch", + "Flame Charge" + ], + "family": 554, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 5, + "generation": "Unova", + "evolutions": [ + { + "pokemon": 555, + "form": 138 + } + ], + "little": true + }, + "555": { + "name": "Darmanitan", + "pokedex_id": 555, + "default_form_id": 138, + "forms": { + "138": { + "name": "Standard", + "proto": "DARMANITAN_STANDARD" + }, + "139": { + "name": "Zen", + "proto": "DARMANITAN_ZEN", + "attack": 243, + "defense": 202, + "stamina": 233, + "types": [ + "Fire", + "Psychic" + ] + }, + "2342": { + "name": "Galarian Standard", + "proto": "DARMANITAN_GALARIAN_STANDARD", + "height": 1.7, + "weight": 120, + "quick_moves": [ + "Tackle", + "Ice Fang" + ], + "charged_moves": [ + "Overheat", + "Avalanche", + "Super Power", + "Ice Punch" + ], + "types": [ + "Ice" + ] + }, + "2343": { + "name": "Galarian Zen", + "proto": "DARMANITAN_GALARIAN_ZEN", + "attack": 323, + "defense": 123, + "stamina": 233, + "height": 1.7, + "weight": 120, + "quick_moves": [ + "Tackle", + "Ice Fang" + ], + "charged_moves": [ + "Overheat", + "Avalanche", + "Super Power", + "Ice Punch" + ], + "types": [ + "Ice", + "Fire" + ] + } + }, + "types": [ + "Fire" + ], + "attack": 263, + "defense": 114, + "stamina": 233, + "height": 1.3, + "weight": 92.9, + "quick_moves": [ + "Tackle", + "Fire Fang", + "Incinerate" + ], + "charged_moves": [ + "Overheat", + "Focus Blast", + "Psychic", + "Rock Slide" + ], + "family": 554, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 5, + "generation": "Unova" + }, + "556": { + "name": "Maractus", + "pokedex_id": 556, + "default_form_id": 2066, + "forms": { + "2066": { + "name": "Normal", + "proto": "MARACTUS_NORMAL" + }, + "2067": { + "name": "Shadow", + "proto": "MARACTUS_SHADOW" + }, + "2068": { + "name": "Purified", + "proto": "MARACTUS_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass" + ], + "attack": 201, + "defense": 130, + "stamina": 181, + "height": 1, + "weight": 28, + "quick_moves": [ + "Bullet Seed", + "Poison Jab" + ], + "charged_moves": [ + "Aerial Ace", + "Petal Blizzard", + "Solar Beam" + ], + "family": 556, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "557": { + "name": "Dwebble", + "pokedex_id": 557, + "default_form_id": 2069, + "forms": { + "2069": { + "name": "Normal", + "proto": "DWEBBLE_NORMAL" + }, + "2070": { + "name": "Shadow", + "proto": "DWEBBLE_SHADOW" + }, + "2071": { + "name": "Purified", + "proto": "DWEBBLE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Rock" + ], + "attack": 118, + "defense": 128, + "stamina": 137, + "height": 0.3, + "weight": 14.5, + "quick_moves": [ + "Cut", + "Smack Down" + ], + "charged_moves": [ + "Rock Blast", + "X Scissor", + "Rock Tomb" + ], + "family": 557, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 558 + } + ], + "little": true + }, + "558": { + "name": "Crustle", + "pokedex_id": 558, + "default_form_id": 2072, + "forms": { + "2072": { + "name": "Normal", + "proto": "CRUSTLE_NORMAL" + }, + "2073": { + "name": "Shadow", + "proto": "CRUSTLE_SHADOW" + }, + "2074": { + "name": "Purified", + "proto": "CRUSTLE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Rock" + ], + "attack": 188, + "defense": 200, + "stamina": 172, + "height": 1.4, + "weight": 200, + "quick_moves": [ + "Fury Cutter", + "Smack Down" + ], + "charged_moves": [ + "Rock Blast", + "X Scissor", + "Rock Slide" + ], + "family": 557, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "559": { + "name": "Scraggy", + "pokedex_id": 559, + "default_form_id": 2075, + "forms": { + "2075": { + "name": "Normal", + "proto": "SCRAGGY_NORMAL" + }, + "2076": { + "name": "Shadow", + "proto": "SCRAGGY_SHADOW" + }, + "2077": { + "name": "Purified", + "proto": "SCRAGGY_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark", + "Fighting" + ], + "attack": 132, + "defense": 132, + "stamina": 137, + "height": 0.6, + "weight": 11.8, + "quick_moves": [ + "Rock Smash", + "Feint Attack" + ], + "charged_moves": [ + "Acid Spray", + "Brick Break", + "Foul Play" + ], + "family": 559, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 560 + } + ], + "little": true + }, + "560": { + "name": "Scrafty", + "pokedex_id": 560, + "default_form_id": 2078, + "forms": { + "2078": { + "name": "Normal", + "proto": "SCRAFTY_NORMAL" + }, + "2079": { + "name": "Shadow", + "proto": "SCRAFTY_SHADOW" + }, + "2080": { + "name": "Purified", + "proto": "SCRAFTY_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark", + "Fighting" + ], + "attack": 163, + "defense": 222, + "stamina": 163, + "height": 1.1, + "weight": 30, + "quick_moves": [ + "Counter", + "Snarl" + ], + "charged_moves": [ + "Acid Spray", + "Power Up Punch", + "Foul Play" + ], + "family": 559, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "561": { + "name": "Sigilyph", + "pokedex_id": 561, + "default_form_id": 2081, + "forms": { + "2081": { + "name": "Normal", + "proto": "SIGILYPH_NORMAL" + }, + "2082": { + "name": "Shadow", + "proto": "SIGILYPH_SHADOW" + }, + "2083": { + "name": "Purified", + "proto": "SIGILYPH_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic", + "Flying" + ], + "attack": 204, + "defense": 167, + "stamina": 176, + "height": 1.4, + "weight": 14, + "quick_moves": [ + "Air Slash", + "Zen Headbutt" + ], + "charged_moves": [ + "Air Cutter", + "Psybeam", + "Ancient Power", + "Signal Beam" + ], + "family": 561, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "562": { + "name": "Yamask", + "pokedex_id": 562, + "default_form_id": 2084, + "forms": { + "2084": { + "name": "Normal", + "proto": "YAMASK_NORMAL", + "evolutions": [ + { + "pokemon": 563, + "form": 2087 + } + ] + }, + "2085": { + "name": "Shadow", + "proto": "YAMASK_SHADOW", + "evolutions": [ + { + "pokemon": 563, + "form": 2088 + } + ] + }, + "2086": { + "name": "Purified", + "proto": "YAMASK_PURIFIED", + "evolutions": [ + { + "pokemon": 563, + "form": 2089 + } + ] + }, + "2344": { + "name": "Galarian", + "proto": "YAMASK_GALARIAN", + "quick_moves": [ + "Astonish" + ], + "charged_moves": [ + "Night Shade", + "Rock Tomb" + ], + "types": [ + "Ground", + "Ghost" + ], + "evolutions": [ + { + "pokemon": 867, + "form": 2516 + } + ] + } + }, + "types": [ + "Ghost" + ], + "attack": 95, + "defense": 141, + "stamina": 116, + "height": 0.5, + "weight": 1.5, + "quick_moves": [ + "Astonish", + "Zen Headbutt" + ], + "charged_moves": [ + "Shadow Ball", + "Dark Pulse", + "Ominous Wind" + ], + "family": 562, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 5, + "generation": "Unova", + "evolutions": [ + { + "pokemon": 563, + "form": 2087 + } + ], + "little": true + }, + "563": { + "name": "Cofagrigus", + "pokedex_id": 563, + "default_form_id": 2087, + "forms": { + "2087": { + "name": "Normal", + "proto": "COFAGRIGUS_NORMAL" + }, + "2088": { + "name": "Shadow", + "proto": "COFAGRIGUS_SHADOW" + }, + "2089": { + "name": "Purified", + "proto": "COFAGRIGUS_PURIFIED" + } + }, + "types": [ + "Ghost" + ], + "attack": 163, + "defense": 237, + "stamina": 151, + "height": 1.7, + "weight": 76.5, + "quick_moves": [ + "Astonish", + "Zen Headbutt" + ], + "charged_moves": [ + "Shadow Ball", + "Dark Pulse", + "Psychic" + ], + "family": 562, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 5, + "generation": "Unova" + }, + "564": { + "name": "Tirtouga", + "pokedex_id": 564, + "default_form_id": 2090, + "forms": { + "2090": { + "name": "Normal", + "proto": "TIRTOUGA_NORMAL" + }, + "2091": { + "name": "Shadow", + "proto": "TIRTOUGA_SHADOW" + }, + "2092": { + "name": "Purified", + "proto": "TIRTOUGA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water", + "Rock" + ], + "attack": 134, + "defense": 146, + "stamina": 144, + "height": 0.7, + "weight": 16.5, + "quick_moves": [ + "Water Gun", + "Bite" + ], + "charged_moves": [ + "Surf", + "Ancient Power", + "Body Slam" + ], + "family": 564, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 565 + } + ], + "little": true + }, + "565": { + "name": "Carracosta", + "pokedex_id": 565, + "default_form_id": 2093, + "forms": { + "2093": { + "name": "Normal", + "proto": "CARRACOSTA_NORMAL" + }, + "2094": { + "name": "Shadow", + "proto": "CARRACOSTA_SHADOW" + }, + "2095": { + "name": "Purified", + "proto": "CARRACOSTA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water", + "Rock" + ], + "attack": 192, + "defense": 197, + "stamina": 179, + "height": 1.2, + "weight": 81, + "quick_moves": [ + "Water Gun", + "Rock Throw" + ], + "charged_moves": [ + "Surf", + "Ancient Power", + "Body Slam" + ], + "family": 564, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "566": { + "name": "Archen", + "pokedex_id": 566, + "default_form_id": 2096, + "forms": { + "2096": { + "name": "Normal", + "proto": "ARCHEN_NORMAL" + }, + "2097": { + "name": "Shadow", + "proto": "ARCHEN_SHADOW" + }, + "2098": { + "name": "Purified", + "proto": "ARCHEN_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Rock", + "Flying" + ], + "attack": 213, + "defense": 89, + "stamina": 146, + "height": 0.5, + "weight": 9.5, + "quick_moves": [ + "Quick Attack", + "Wing Attack" + ], + "charged_moves": [ + "Dragon Claw", + "Ancient Power", + "Crunch" + ], + "family": 566, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 567 + } + ], + "little": true + }, + "567": { + "name": "Archeops", + "pokedex_id": 567, + "default_form_id": 2099, + "forms": { + "2099": { + "name": "Normal", + "proto": "ARCHEOPS_NORMAL" + }, + "2100": { + "name": "Shadow", + "proto": "ARCHEOPS_SHADOW" + }, + "2101": { + "name": "Purified", + "proto": "ARCHEOPS_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Rock", + "Flying" + ], + "attack": 292, + "defense": 139, + "stamina": 181, + "height": 1.4, + "weight": 32, + "quick_moves": [ + "Steel Wing", + "Wing Attack" + ], + "charged_moves": [ + "Dragon Claw", + "Ancient Power", + "Crunch" + ], + "family": 566, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "568": { + "name": "Trubbish", + "pokedex_id": 568, + "default_form_id": 2102, + "forms": { + "2102": { + "name": "Normal", + "proto": "TRUBBISH_NORMAL" + }, + "2103": { + "name": "Shadow", + "proto": "TRUBBISH_SHADOW" + }, + "2104": { + "name": "Purified", + "proto": "TRUBBISH_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Poison" + ], + "attack": 96, + "defense": 122, + "stamina": 137, + "height": 0.6, + "weight": 31, + "quick_moves": [ + "Pound", + "Take Down" + ], + "charged_moves": [ + "Gunk Shot", + "Seed Bomb", + "Gunk Shot" + ], + "family": 568, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 569 + } + ], + "little": true + }, + "569": { + "name": "Garbodor", + "pokedex_id": 569, + "default_form_id": 2105, + "forms": { + "2105": { + "name": "Normal", + "proto": "GARBODOR_NORMAL" + }, + "2106": { + "name": "Shadow", + "proto": "GARBODOR_SHADOW" + }, + "2107": { + "name": "Purified", + "proto": "GARBODOR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Poison" + ], + "attack": 181, + "defense": 164, + "stamina": 190, + "height": 1.9, + "weight": 107.3, + "quick_moves": [ + "Infestation", + "Take Down" + ], + "charged_moves": [ + "Acid Spray", + "Seed Bomb", + "Gunk Shot", + "Body Slam" + ], + "family": 568, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "570": { + "name": "Zorua", + "pokedex_id": 570, + "default_form_id": 2108, + "forms": { + "2108": { + "name": "Normal", + "proto": "ZORUA_NORMAL" + }, + "2109": { + "name": "Shadow", + "proto": "ZORUA_SHADOW" + }, + "2110": { + "name": "Purified", + "proto": "ZORUA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark" + ], + "attack": 153, + "defense": 78, + "stamina": 120, + "height": 0.7, + "weight": 12.5, + "quick_moves": [ + "Scratch", + "Feint Attack" + ], + "charged_moves": [ + "Foul Play", + "Aerial Ace", + "Dark Pulse" + ], + "family": 570, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 571 + } + ], + "little": true + }, + "571": { + "name": "Zoroark", + "pokedex_id": 571, + "default_form_id": 2111, + "forms": { + "2111": { + "name": "Normal", + "proto": "ZOROARK_NORMAL" + }, + "2112": { + "name": "Shadow", + "proto": "ZOROARK_SHADOW" + }, + "2113": { + "name": "Purified", + "proto": "ZOROARK_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark" + ], + "attack": 250, + "defense": 127, + "stamina": 155, + "height": 1.6, + "weight": 81.1, + "quick_moves": [ + "Shadow Claw", + "Snarl" + ], + "charged_moves": [ + "Foul Play", + "Sludge Bomb", + "Flamethrower" + ], + "family": 570, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "572": { + "name": "Minccino", + "pokedex_id": 572, + "default_form_id": 2114, + "forms": { + "2114": { + "name": "Normal", + "proto": "MINCCINO_NORMAL" + }, + "2115": { + "name": "Shadow", + "proto": "MINCCINO_SHADOW" + }, + "2116": { + "name": "Purified", + "proto": "MINCCINO_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal" + ], + "attack": 98, + "defense": 80, + "stamina": 146, + "height": 0.4, + "weight": 5.8, + "quick_moves": [ + "Pound", + "Charm" + ], + "charged_moves": [ + "Swift", + "Thunderbolt", + "Aqua Tail" + ], + "family": 572, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 573 + } + ], + "little": true + }, + "573": { + "name": "Cinccino", + "pokedex_id": 573, + "default_form_id": 2117, + "forms": { + "2117": { + "name": "Normal", + "proto": "CINCCINO_NORMAL" + }, + "2118": { + "name": "Shadow", + "proto": "CINCCINO_SHADOW" + }, + "2119": { + "name": "Purified", + "proto": "CINCCINO_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal" + ], + "attack": 198, + "defense": 130, + "stamina": 181, + "height": 0.5, + "weight": 7.5, + "quick_moves": [ + "Pound", + "Charm" + ], + "charged_moves": [ + "Hyper Beam", + "Thunderbolt", + "Aqua Tail" + ], + "family": 572, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "574": { + "name": "Gothita", + "pokedex_id": 574, + "default_form_id": 2120, + "forms": { + "2120": { + "name": "Normal", + "proto": "GOTHITA_NORMAL" + }, + "2121": { + "name": "Shadow", + "proto": "GOTHITA_SHADOW" + }, + "2122": { + "name": "Purified", + "proto": "GOTHITA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic" + ], + "attack": 98, + "defense": 112, + "stamina": 128, + "height": 0.4, + "weight": 5.8, + "quick_moves": [ + "Pound", + "Confusion" + ], + "charged_moves": [ + "Psybeam", + "Psyshock", + "Psychic" + ], + "family": 574, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 575 + } + ], + "little": true + }, + "575": { + "name": "Gothorita", + "pokedex_id": 575, + "default_form_id": 2123, + "forms": { + "2123": { + "name": "Normal", + "proto": "GOTHORITA_NORMAL" + }, + "2124": { + "name": "Shadow", + "proto": "GOTHORITA_SHADOW" + }, + "2125": { + "name": "Purified", + "proto": "GOTHORITA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic" + ], + "attack": 137, + "defense": 153, + "stamina": 155, + "height": 0.7, + "weight": 18, + "quick_moves": [ + "Pound", + "Confusion" + ], + "charged_moves": [ + "Psybeam", + "Futuresight", + "Psychic" + ], + "family": 574, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 576 + } + ] + }, + "576": { + "name": "Gothitelle", + "pokedex_id": 576, + "default_form_id": 2126, + "forms": { + "2126": { + "name": "Normal", + "proto": "GOTHITELLE_NORMAL" + }, + "2127": { + "name": "Shadow", + "proto": "GOTHITELLE_SHADOW" + }, + "2128": { + "name": "Purified", + "proto": "GOTHITELLE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic" + ], + "attack": 176, + "defense": 205, + "stamina": 172, + "height": 1.5, + "weight": 44, + "quick_moves": [ + "Charm", + "Confusion" + ], + "charged_moves": [ + "Rock Slide", + "Futuresight", + "Psychic" + ], + "family": 574, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "577": { + "name": "Solosis", + "pokedex_id": 577, + "default_form_id": 2129, + "forms": { + "2129": { + "name": "Normal", + "proto": "SOLOSIS_NORMAL" + }, + "2130": { + "name": "Shadow", + "proto": "SOLOSIS_SHADOW" + }, + "2131": { + "name": "Purified", + "proto": "SOLOSIS_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic" + ], + "attack": 170, + "defense": 83, + "stamina": 128, + "height": 0.3, + "weight": 1, + "quick_moves": [ + "Hidden Power", + "Zen Headbutt" + ], + "charged_moves": [ + "Psyshock", + "Night Shade", + "Thunder" + ], + "family": 577, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 578 + } + ], + "little": true + }, + "578": { + "name": "Duosion", + "pokedex_id": 578, + "default_form_id": 2132, + "forms": { + "2132": { + "name": "Normal", + "proto": "DUOSION_NORMAL" + }, + "2133": { + "name": "Shadow", + "proto": "DUOSION_SHADOW" + }, + "2134": { + "name": "Purified", + "proto": "DUOSION_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic" + ], + "attack": 208, + "defense": 103, + "stamina": 163, + "height": 0.6, + "weight": 8, + "quick_moves": [ + "Hidden Power", + "Zen Headbutt" + ], + "charged_moves": [ + "Psyshock", + "Night Shade", + "Thunder" + ], + "family": 577, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 579 + } + ] + }, + "579": { + "name": "Reuniclus", + "pokedex_id": 579, + "default_form_id": 2135, + "forms": { + "2135": { + "name": "Normal", + "proto": "REUNICLUS_NORMAL" + }, + "2136": { + "name": "Shadow", + "proto": "REUNICLUS_SHADOW" + }, + "2137": { + "name": "Purified", + "proto": "REUNICLUS_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic" + ], + "attack": 214, + "defense": 148, + "stamina": 242, + "height": 1, + "weight": 20.1, + "quick_moves": [ + "Hidden Power", + "Zen Headbutt" + ], + "charged_moves": [ + "Futuresight", + "Shadow Ball", + "Thunder" + ], + "family": 577, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "580": { + "name": "Ducklett", + "pokedex_id": 580, + "default_form_id": 2138, + "forms": { + "2138": { + "name": "Normal", + "proto": "DUCKLETT_NORMAL" + }, + "2139": { + "name": "Shadow", + "proto": "DUCKLETT_SHADOW" + }, + "2140": { + "name": "Purified", + "proto": "DUCKLETT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water", + "Flying" + ], + "attack": 84, + "defense": 96, + "stamina": 158, + "height": 0.5, + "weight": 5.5, + "quick_moves": [ + "Water Gun", + "Wing Attack" + ], + "charged_moves": [ + "Aerial Ace", + "Bubble Beam", + "Brave Bird" + ], + "family": 580, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 581 + } + ], + "little": true + }, + "581": { + "name": "Swanna", + "pokedex_id": 581, + "default_form_id": 2141, + "forms": { + "2141": { + "name": "Normal", + "proto": "SWANNA_NORMAL" + }, + "2142": { + "name": "Shadow", + "proto": "SWANNA_SHADOW" + }, + "2143": { + "name": "Purified", + "proto": "SWANNA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water", + "Flying" + ], + "attack": 182, + "defense": 132, + "stamina": 181, + "height": 1.3, + "weight": 24.2, + "quick_moves": [ + "Water Gun", + "Air Slash" + ], + "charged_moves": [ + "Ice Beam", + "Bubble Beam", + "Hurricane" + ], + "family": 580, + "flee_rate": 0.12, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "582": { + "name": "Vanillite", + "pokedex_id": 582, + "default_form_id": 2144, + "forms": { + "2144": { + "name": "Normal", + "proto": "VANILLITE_NORMAL" + }, + "2145": { + "name": "Shadow", + "proto": "VANILLITE_SHADOW" + }, + "2146": { + "name": "Purified", + "proto": "VANILLITE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ice" + ], + "attack": 118, + "defense": 106, + "stamina": 113, + "height": 0.4, + "weight": 5.7, + "quick_moves": [ + "Powder Snow", + "Astonish" + ], + "charged_moves": [ + "Icy Wind", + "Ice Beam", + "Signal Beam" + ], + "family": 582, + "flee_rate": 0.07, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 583 + } + ], + "little": true + }, + "583": { + "name": "Vanillish", + "pokedex_id": 583, + "default_form_id": 2147, + "forms": { + "2147": { + "name": "Normal", + "proto": "VANILLISH_NORMAL" + }, + "2148": { + "name": "Shadow", + "proto": "VANILLISH_SHADOW" + }, + "2149": { + "name": "Purified", + "proto": "VANILLISH_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ice" + ], + "attack": 151, + "defense": 138, + "stamina": 139, + "height": 1.1, + "weight": 41, + "quick_moves": [ + "Frost Breath", + "Astonish" + ], + "charged_moves": [ + "Icy Wind", + "Ice Beam", + "Signal Beam" + ], + "family": 582, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 584 + } + ] + }, + "584": { + "name": "Vanilluxe", + "pokedex_id": 584, + "default_form_id": 2150, + "forms": { + "2150": { + "name": "Normal", + "proto": "VANILLUXE_NORMAL" + }, + "2151": { + "name": "Shadow", + "proto": "VANILLUXE_SHADOW" + }, + "2152": { + "name": "Purified", + "proto": "VANILLUXE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ice" + ], + "attack": 218, + "defense": 184, + "stamina": 174, + "height": 1.3, + "weight": 57.5, + "quick_moves": [ + "Frost Breath", + "Astonish" + ], + "charged_moves": [ + "Blizzard", + "Flash Cannon", + "Signal Beam" + ], + "family": 582, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "585": { + "name": "Deerling", + "pokedex_id": 585, + "default_form_id": 585, + "forms": { + "585": { + "name": "Spring", + "proto": "DEERLING_SPRING", + "evolutions": [ + { + "pokemon": 586, + "form": 589 + } + ] + }, + "586": { + "name": "Summer", + "proto": "DEERLING_SUMMER", + "evolutions": [ + { + "pokemon": 586, + "form": 590 + } + ] + }, + "587": { + "name": "Autumn", + "proto": "DEERLING_AUTUMN", + "evolutions": [ + { + "pokemon": 586, + "form": 591 + } + ] + }, + "588": { + "name": "Winter", + "proto": "DEERLING_WINTER", + "evolutions": [ + { + "pokemon": 586, + "form": 592 + } + ] + } + }, + "types": [ + "Normal", + "Grass" + ], + "attack": 115, + "defense": 100, + "stamina": 155, + "height": 0.6, + "weight": 19.5, + "quick_moves": [ + "Tackle", + "Take Down" + ], + "charged_moves": [ + "Energy Ball", + "Seed Bomb", + "Wild Charge" + ], + "family": 585, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 5, + "generation": "Unova", + "little": true + }, + "586": { + "name": "Sawsbuck", + "pokedex_id": 586, + "default_form_id": 589, + "forms": { + "589": { + "name": "Spring", + "proto": "SAWSBUCK_SPRING" + }, + "590": { + "name": "Summer", + "proto": "SAWSBUCK_SUMMER" + }, + "591": { + "name": "Autumn", + "proto": "SAWSBUCK_AUTUMN" + }, + "592": { + "name": "Winter", + "proto": "SAWSBUCK_WINTER" + } + }, + "types": [ + "Normal", + "Grass" + ], + "attack": 198, + "defense": 146, + "stamina": 190, + "height": 1.9, + "weight": 92.5, + "quick_moves": [ + "Feint Attack", + "Take Down" + ], + "charged_moves": [ + "Megahorn", + "Solar Beam", + "Wild Charge", + "Hyper Beam" + ], + "family": 585, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 5, + "generation": "Unova" + }, + "587": { + "name": "Emolga", + "pokedex_id": 587, + "default_form_id": 2153, + "forms": { + "2153": { + "name": "Normal", + "proto": "EMOLGA_NORMAL" + }, + "2154": { + "name": "Shadow", + "proto": "EMOLGA_SHADOW" + }, + "2155": { + "name": "Purified", + "proto": "EMOLGA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Electric", + "Flying" + ], + "attack": 158, + "defense": 127, + "stamina": 146, + "height": 0.4, + "weight": 5, + "quick_moves": [ + "Thunder Shock", + "Quick Attack" + ], + "charged_moves": [ + "Discharge", + "Aerial Ace", + "Thunderbolt" + ], + "family": 587, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "588": { + "name": "Karrablast", + "pokedex_id": 588, + "default_form_id": 2156, + "forms": { + "2156": { + "name": "Normal", + "proto": "KARRABLAST_NORMAL" + }, + "2157": { + "name": "Shadow", + "proto": "KARRABLAST_SHADOW" + }, + "2158": { + "name": "Purified", + "proto": "KARRABLAST_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug" + ], + "attack": 137, + "defense": 87, + "stamina": 137, + "height": 0.5, + "weight": 5.9, + "quick_moves": [ + "Peck", + "Fury Cutter" + ], + "charged_moves": [ + "Signal Beam", + "X Scissor", + "Drill Run", + "Aerial Ace" + ], + "family": 588, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 589 + } + ], + "little": true + }, + "589": { + "name": "Escavalier", + "pokedex_id": 589, + "default_form_id": 2159, + "forms": { + "2159": { + "name": "Normal", + "proto": "ESCAVALIER_NORMAL" + }, + "2160": { + "name": "Shadow", + "proto": "ESCAVALIER_SHADOW" + }, + "2161": { + "name": "Purified", + "proto": "ESCAVALIER_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Steel" + ], + "attack": 223, + "defense": 187, + "stamina": 172, + "height": 1, + "weight": 33, + "quick_moves": [ + "Counter", + "Bug Bite" + ], + "charged_moves": [ + "Megahorn", + "Acid Spray", + "Drill Run", + "Aerial Ace" + ], + "family": 588, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "590": { + "name": "Foongus", + "pokedex_id": 590, + "default_form_id": 2162, + "forms": { + "2162": { + "name": "Normal", + "proto": "FOONGUS_NORMAL" + }, + "2163": { + "name": "Shadow", + "proto": "FOONGUS_SHADOW" + }, + "2164": { + "name": "Purified", + "proto": "FOONGUS_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass", + "Poison" + ], + "attack": 97, + "defense": 91, + "stamina": 170, + "height": 0.2, + "weight": 1, + "quick_moves": [ + "Astonish", + "Feint Attack" + ], + "charged_moves": [ + "Energy Ball", + "Body Slam", + "Grass Knot" + ], + "family": 590, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 591 + } + ], + "little": true + }, + "591": { + "name": "Amoonguss", + "pokedex_id": 591, + "default_form_id": 2165, + "forms": { + "2165": { + "name": "Normal", + "proto": "AMOONGUSS_NORMAL" + }, + "2166": { + "name": "Shadow", + "proto": "AMOONGUSS_SHADOW" + }, + "2167": { + "name": "Purified", + "proto": "AMOONGUSS_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass", + "Poison" + ], + "attack": 155, + "defense": 139, + "stamina": 249, + "height": 0.6, + "weight": 10.5, + "quick_moves": [ + "Astonish", + "Feint Attack" + ], + "charged_moves": [ + "Foul Play", + "Sludge Bomb", + "Grass Knot" + ], + "family": 590, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "592": { + "name": "Frillish", + "pokedex_id": 592, + "default_form_id": 2168, + "forms": { + "2168": { + "name": "Normal", + "proto": "FRILLISH_NORMAL", + "evolutions": [ + { + "pokemon": 593, + "form": 2171 + } + ] + }, + "2169": { + "name": "Shadow", + "proto": "FRILLISH_SHADOW" + }, + "2170": { + "name": "Purified", + "proto": "FRILLISH_PURIFIED" + }, + "2330": { + "name": "Female", + "proto": "FRILLISH_FEMALE", + "evolutions": [ + { + "pokemon": 593, + "form": 2331 + } + ] + } + }, + "types": [ + "Water", + "Ghost" + ], + "attack": 115, + "defense": 134, + "stamina": 146, + "height": 1.2, + "weight": 33, + "quick_moves": [ + "Bubble", + "Hex" + ], + "charged_moves": [ + "Night Shade", + "Ice Beam", + "Ominous Wind" + ], + "family": 592, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 5, + "generation": "Unova", + "evolutions": [ + { + "pokemon": 593 + } + ], + "little": true + }, + "593": { + "name": "Jellicent", + "pokedex_id": 593, + "default_form_id": 2171, + "forms": { + "2171": { + "name": "Normal", + "proto": "JELLICENT_NORMAL" + }, + "2172": { + "name": "Shadow", + "proto": "JELLICENT_SHADOW" + }, + "2173": { + "name": "Purified", + "proto": "JELLICENT_PURIFIED" + }, + "2331": { + "name": "Female", + "proto": "JELLICENT_FEMALE" + } + }, + "types": [ + "Water", + "Ghost" + ], + "attack": 159, + "defense": 178, + "stamina": 225, + "height": 2.2, + "weight": 135, + "quick_moves": [ + "Bubble", + "Hex" + ], + "charged_moves": [ + "Shadow Ball", + "Ice Beam", + "Bubble Beam" + ], + "family": 592, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 5, + "generation": "Unova" + }, + "594": { + "name": "Alomomola", + "pokedex_id": 594, + "default_form_id": 2174, + "forms": { + "2174": { + "name": "Normal", + "proto": "ALOMOMOLA_NORMAL" + }, + "2175": { + "name": "Shadow", + "proto": "ALOMOMOLA_SHADOW" + }, + "2176": { + "name": "Purified", + "proto": "ALOMOMOLA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Water" + ], + "attack": 138, + "defense": 131, + "stamina": 338, + "height": 1.2, + "weight": 31.6, + "quick_moves": [ + "Waterfall", + "Hidden Power" + ], + "charged_moves": [ + "Hydro Pump", + "Blizzard", + "Psychic" + ], + "family": 594, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "595": { + "name": "Joltik", + "pokedex_id": 595, + "default_form_id": 2177, + "forms": { + "2177": { + "name": "Normal", + "proto": "JOLTIK_NORMAL" + }, + "2178": { + "name": "Shadow", + "proto": "JOLTIK_SHADOW" + }, + "2179": { + "name": "Purified", + "proto": "JOLTIK_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Electric" + ], + "attack": 110, + "defense": 98, + "stamina": 137, + "height": 0.1, + "weight": 0.6, + "quick_moves": [ + "Charge Beam", + "Sucker Punch" + ], + "charged_moves": [ + "Cross Poison", + "Bug Buzz", + "Discharge" + ], + "family": 595, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 596 + } + ], + "little": true + }, + "596": { + "name": "Galvantula", + "pokedex_id": 596, + "default_form_id": 2180, + "forms": { + "2180": { + "name": "Normal", + "proto": "GALVANTULA_NORMAL" + }, + "2181": { + "name": "Shadow", + "proto": "GALVANTULA_SHADOW" + }, + "2182": { + "name": "Purified", + "proto": "GALVANTULA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Electric" + ], + "attack": 201, + "defense": 128, + "stamina": 172, + "height": 0.8, + "weight": 14.3, + "quick_moves": [ + "Volt Switch", + "Fury Cutter" + ], + "charged_moves": [ + "Cross Poison", + "Bug Buzz", + "Discharge", + "Energy Ball", + "Lunge" + ], + "family": 595, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "597": { + "name": "Ferroseed", + "pokedex_id": 597, + "default_form_id": 2183, + "forms": { + "2183": { + "name": "Normal", + "proto": "FERROSEED_NORMAL" + }, + "2184": { + "name": "Shadow", + "proto": "FERROSEED_SHADOW" + }, + "2185": { + "name": "Purified", + "proto": "FERROSEED_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass", + "Steel" + ], + "attack": 82, + "defense": 155, + "stamina": 127, + "height": 0.6, + "weight": 18.8, + "quick_moves": [ + "Tackle", + "Metal Claw" + ], + "charged_moves": [ + "Gyro Ball", + "Flash Cannon", + "Iron Head" + ], + "family": 597, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 598 + } + ], + "little": true + }, + "598": { + "name": "Ferrothorn", + "pokedex_id": 598, + "default_form_id": 2186, + "forms": { + "2186": { + "name": "Normal", + "proto": "FERROTHORN_NORMAL" + }, + "2187": { + "name": "Shadow", + "proto": "FERROTHORN_SHADOW" + }, + "2188": { + "name": "Purified", + "proto": "FERROTHORN_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass", + "Steel" + ], + "attack": 158, + "defense": 223, + "stamina": 179, + "height": 1, + "weight": 110, + "quick_moves": [ + "Bullet Seed", + "Metal Claw" + ], + "charged_moves": [ + "Power Whip", + "Flash Cannon", + "Acid Spray", + "Thunder", + "Mirror Shot" + ], + "family": 597, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "599": { + "name": "Klink", + "pokedex_id": 599, + "default_form_id": 2189, + "forms": { + "2189": { + "name": "Normal", + "proto": "KLINK_NORMAL" + }, + "2190": { + "name": "Shadow", + "proto": "KLINK_SHADOW" + }, + "2191": { + "name": "Purified", + "proto": "KLINK_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Steel" + ], + "attack": 98, + "defense": 121, + "stamina": 120, + "height": 0.3, + "weight": 21, + "quick_moves": [ + "Volt Switch", + "Charge Beam" + ], + "charged_moves": [ + "Vice Grip", + "Discharge", + "Zap Cannon" + ], + "family": 599, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 600 + } + ], + "little": true + }, + "600": { + "name": "Klang", + "pokedex_id": 600, + "default_form_id": 2192, + "forms": { + "2192": { + "name": "Normal", + "proto": "KLANG_NORMAL" + }, + "2193": { + "name": "Shadow", + "proto": "KLANG_SHADOW" + }, + "2194": { + "name": "Purified", + "proto": "KLANG_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Steel" + ], + "attack": 150, + "defense": 174, + "stamina": 155, + "height": 0.6, + "weight": 51, + "quick_moves": [ + "Thunder Shock", + "Charge Beam" + ], + "charged_moves": [ + "Vice Grip", + "Thunderbolt", + "Zap Cannon" + ], + "family": 599, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 601 + } + ] + }, + "601": { + "name": "Klinklang", + "pokedex_id": 601, + "default_form_id": 2195, + "forms": { + "2195": { + "name": "Normal", + "proto": "KLINKLANG_NORMAL" + }, + "2196": { + "name": "Shadow", + "proto": "KLINKLANG_SHADOW" + }, + "2197": { + "name": "Purified", + "proto": "KLINKLANG_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Steel" + ], + "attack": 199, + "defense": 214, + "stamina": 155, + "height": 0.6, + "weight": 81, + "quick_moves": [ + "Thunder Shock", + "Charge Beam" + ], + "charged_moves": [ + "Hyper Beam", + "Flash Cannon", + "Zap Cannon", + "Mirror Shot" + ], + "family": 599, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "602": { + "name": "Tynamo", + "pokedex_id": 602, + "default_form_id": 2198, + "forms": { + "2198": { + "name": "Normal", + "proto": "TYNAMO_NORMAL" + }, + "2199": { + "name": "Shadow", + "proto": "TYNAMO_SHADOW" + }, + "2200": { + "name": "Purified", + "proto": "TYNAMO_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Electric" + ], + "attack": 105, + "defense": 78, + "stamina": 111, + "height": 0.2, + "weight": 0.3, + "quick_moves": [ + "Tackle", + "Spark" + ], + "charged_moves": [ + "Struggle" + ], + "family": 602, + "flee_rate": 0.15, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 603 + } + ], + "little": true + }, + "603": { + "name": "Eelektrik", + "pokedex_id": 603, + "default_form_id": 2201, + "forms": { + "2201": { + "name": "Normal", + "proto": "EELEKTRIK_NORMAL" + }, + "2202": { + "name": "Shadow", + "proto": "EELEKTRIK_SHADOW" + }, + "2203": { + "name": "Purified", + "proto": "EELEKTRIK_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Electric" + ], + "attack": 156, + "defense": 130, + "stamina": 163, + "height": 1.2, + "weight": 22, + "quick_moves": [ + "Acid", + "Spark" + ], + "charged_moves": [ + "Crunch", + "Thunderbolt", + "Discharge" + ], + "family": 602, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 604 + } + ] + }, + "604": { + "name": "Eelektross", + "pokedex_id": 604, + "default_form_id": 2204, + "forms": { + "2204": { + "name": "Normal", + "proto": "EELEKTROSS_NORMAL" + }, + "2205": { + "name": "Shadow", + "proto": "EELEKTROSS_SHADOW" + }, + "2206": { + "name": "Purified", + "proto": "EELEKTROSS_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Electric" + ], + "attack": 217, + "defense": 152, + "stamina": 198, + "height": 2.1, + "weight": 80.5, + "quick_moves": [ + "Acid", + "Spark" + ], + "charged_moves": [ + "Crunch", + "Thunderbolt", + "Acid Spray", + "Dragon Claw" + ], + "family": 602, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "605": { + "name": "Elgyem", + "pokedex_id": 605, + "default_form_id": 2207, + "forms": { + "2207": { + "name": "Normal", + "proto": "ELGYEM_NORMAL" + }, + "2208": { + "name": "Shadow", + "proto": "ELGYEM_SHADOW" + }, + "2209": { + "name": "Purified", + "proto": "ELGYEM_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic" + ], + "attack": 148, + "defense": 100, + "stamina": 146, + "height": 0.5, + "weight": 9, + "quick_moves": [ + "Confusion", + "Astonish" + ], + "charged_moves": [ + "Psybeam", + "Dark Pulse", + "Psychic" + ], + "family": 605, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 606 + } + ], + "little": true + }, + "606": { + "name": "Beheeyem", + "pokedex_id": 606, + "default_form_id": 2210, + "forms": { + "2210": { + "name": "Normal", + "proto": "BEHEEYEM_NORMAL" + }, + "2211": { + "name": "Shadow", + "proto": "BEHEEYEM_SHADOW" + }, + "2212": { + "name": "Purified", + "proto": "BEHEEYEM_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Psychic" + ], + "attack": 221, + "defense": 163, + "stamina": 181, + "height": 1, + "weight": 34.5, + "quick_moves": [ + "Confusion", + "Astonish" + ], + "charged_moves": [ + "Rock Slide", + "Dark Pulse", + "Psychic" + ], + "family": 605, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "607": { + "name": "Litwick", + "pokedex_id": 607, + "default_form_id": 2213, + "forms": { + "2213": { + "name": "Normal", + "proto": "LITWICK_NORMAL" + }, + "2214": { + "name": "Shadow", + "proto": "LITWICK_SHADOW" + }, + "2215": { + "name": "Purified", + "proto": "LITWICK_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ghost", + "Fire" + ], + "attack": 108, + "defense": 98, + "stamina": 137, + "height": 0.3, + "weight": 3.1, + "quick_moves": [ + "Astonish", + "Ember" + ], + "charged_moves": [ + "Flame Charge", + "Flame Burst", + "Heat Wave" + ], + "family": 607, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 608 + } + ], + "little": true + }, + "608": { + "name": "Lampent", + "pokedex_id": 608, + "default_form_id": 2216, + "forms": { + "2216": { + "name": "Normal", + "proto": "LAMPENT_NORMAL" + }, + "2217": { + "name": "Shadow", + "proto": "LAMPENT_SHADOW" + }, + "2218": { + "name": "Purified", + "proto": "LAMPENT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ghost", + "Fire" + ], + "attack": 169, + "defense": 115, + "stamina": 155, + "height": 0.6, + "weight": 13, + "quick_moves": [ + "Astonish", + "Ember" + ], + "charged_moves": [ + "Energy Ball", + "Flame Burst", + "Heat Wave" + ], + "family": 607, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 609 + } + ] + }, + "609": { + "name": "Chandelure", + "pokedex_id": 609, + "default_form_id": 2219, + "forms": { + "2219": { + "name": "Normal", + "proto": "CHANDELURE_NORMAL" + }, + "2220": { + "name": "Shadow", + "proto": "CHANDELURE_SHADOW" + }, + "2221": { + "name": "Purified", + "proto": "CHANDELURE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ghost", + "Fire" + ], + "attack": 271, + "defense": 182, + "stamina": 155, + "height": 1, + "weight": 34.3, + "quick_moves": [ + "Hex", + "Fire Spin", + "Incinerate" + ], + "charged_moves": [ + "Energy Ball", + "Shadow Ball", + "Overheat", + "Flame Charge" + ], + "family": 607, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "610": { + "name": "Axew", + "pokedex_id": 610, + "default_form_id": 2222, + "forms": { + "2222": { + "name": "Normal", + "proto": "AXEW_NORMAL" + }, + "2223": { + "name": "Shadow", + "proto": "AXEW_SHADOW" + }, + "2224": { + "name": "Purified", + "proto": "AXEW_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dragon" + ], + "attack": 154, + "defense": 101, + "stamina": 130, + "height": 0.6, + "weight": 18, + "quick_moves": [ + "Scratch", + "Iron Tail" + ], + "charged_moves": [ + "Dragon Claw", + "Aqua Tail", + "Dragon Pulse" + ], + "family": 610, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 611 + } + ], + "little": true + }, + "611": { + "name": "Fraxure", + "pokedex_id": 611, + "default_form_id": 2225, + "forms": { + "2225": { + "name": "Normal", + "proto": "FRAXURE_NORMAL" + }, + "2226": { + "name": "Shadow", + "proto": "FRAXURE_SHADOW" + }, + "2227": { + "name": "Purified", + "proto": "FRAXURE_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dragon" + ], + "attack": 212, + "defense": 123, + "stamina": 165, + "height": 1, + "weight": 36, + "quick_moves": [ + "Dragon Tail", + "Iron Tail" + ], + "charged_moves": [ + "Dragon Claw", + "Aqua Tail", + "Night Slash" + ], + "family": 610, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 612 + } + ] + }, + "612": { + "name": "Haxorus", + "pokedex_id": 612, + "default_form_id": 2228, + "forms": { + "2228": { + "name": "Normal", + "proto": "HAXORUS_NORMAL" + }, + "2229": { + "name": "Shadow", + "proto": "HAXORUS_SHADOW" + }, + "2230": { + "name": "Purified", + "proto": "HAXORUS_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dragon" + ], + "attack": 284, + "defense": 172, + "stamina": 183, + "height": 1.8, + "weight": 105.5, + "quick_moves": [ + "Dragon Tail", + "Counter" + ], + "charged_moves": [ + "Dragon Claw", + "Surf", + "Night Slash", + "Earthquake" + ], + "family": 610, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "613": { + "name": "Cubchoo", + "pokedex_id": 613, + "default_form_id": 2231, + "forms": { + "2231": { + "name": "Normal", + "proto": "CUBCHOO_NORMAL", + "evolutions": [ + { + "pokemon": 614 + } + ] + }, + "2232": { + "name": "Shadow", + "proto": "CUBCHOO_SHADOW" + }, + "2233": { + "name": "Purified", + "proto": "CUBCHOO_PURIFIED" + }, + "2672": { + "name": "Winter 2020", + "proto": "CUBCHOO_WINTER_2020", + "is_costume": true + } + }, + "types": [ + "Ice" + ], + "attack": 128, + "defense": 74, + "stamina": 146, + "height": 0.5, + "weight": 8.5, + "quick_moves": [ + "Powder Snow", + "Charm" + ], + "charged_moves": [ + "Ice Punch", + "Icy Wind", + "Play Rough" + ], + "family": 613, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 5, + "generation": "Unova", + "evolutions": [ + { + "pokemon": 614 + } + ], + "little": true + }, + "614": { + "name": "Beartic", + "pokedex_id": 614, + "default_form_id": 2234, + "forms": { + "2234": { + "name": "Normal", + "proto": "BEARTIC_NORMAL" + }, + "2235": { + "name": "Shadow", + "proto": "BEARTIC_SHADOW" + }, + "2236": { + "name": "Purified", + "proto": "BEARTIC_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ice" + ], + "attack": 233, + "defense": 152, + "stamina": 216, + "height": 2.6, + "weight": 260, + "quick_moves": [ + "Powder Snow", + "Charm" + ], + "charged_moves": [ + "Ice Punch", + "Surf", + "Play Rough" + ], + "family": 613, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "615": { + "name": "Cryogonal", + "pokedex_id": 615, + "default_form_id": 2237, + "forms": { + "2237": { + "name": "Normal", + "proto": "CRYOGONAL_NORMAL" + }, + "2238": { + "name": "Shadow", + "proto": "CRYOGONAL_SHADOW" + }, + "2239": { + "name": "Purified", + "proto": "CRYOGONAL_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ice" + ], + "attack": 190, + "defense": 218, + "stamina": 190, + "height": 1.1, + "weight": 148, + "quick_moves": [ + "Ice Shard", + "Frost Breath" + ], + "charged_moves": [ + "Aurora Beam", + "Night Slash", + "Solar Beam", + "Water Pulse" + ], + "family": 615, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "616": { + "name": "Shelmet", + "pokedex_id": 616, + "default_form_id": 2240, + "forms": { + "2240": { + "name": "Normal", + "proto": "SHELMET_NORMAL" + }, + "2241": { + "name": "Shadow", + "proto": "SHELMET_SHADOW" + }, + "2242": { + "name": "Purified", + "proto": "SHELMET_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug" + ], + "attack": 72, + "defense": 140, + "stamina": 137, + "height": 0.4, + "weight": 7.7, + "quick_moves": [ + "Acid", + "Infestation" + ], + "charged_moves": [ + "Bug Buzz", + "Body Slam", + "Signal Beam" + ], + "family": 616, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 617 + } + ], + "little": true + }, + "617": { + "name": "Accelgor", + "pokedex_id": 617, + "default_form_id": 2243, + "forms": { + "2243": { + "name": "Normal", + "proto": "ACCELGOR_NORMAL" + }, + "2244": { + "name": "Shadow", + "proto": "ACCELGOR_SHADOW" + }, + "2245": { + "name": "Purified", + "proto": "ACCELGOR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug" + ], + "attack": 220, + "defense": 120, + "stamina": 190, + "height": 0.8, + "weight": 25.3, + "quick_moves": [ + "Acid", + "Infestation" + ], + "charged_moves": [ + "Bug Buzz", + "Acid Spray", + "Signal Beam", + "Focus Blast" + ], + "family": 616, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "618": { + "name": "Stunfisk", + "pokedex_id": 618, + "default_form_id": 2246, + "forms": { + "2246": { + "name": "Normal", + "proto": "STUNFISK_NORMAL" + }, + "2247": { + "name": "Shadow", + "proto": "STUNFISK_SHADOW" + }, + "2248": { + "name": "Purified", + "proto": "STUNFISK_PURIFIED" + }, + "2345": { + "name": "Galarian", + "proto": "STUNFISK_GALARIAN", + "height": 0.7, + "weight": 20.5, + "quick_moves": [ + "Mud Shot", + "Metal Claw" + ], + "charged_moves": [ + "Earthquake", + "Flash Cannon", + "Muddy Water", + "Rock Slide" + ], + "types": [ + "Ground", + "Steel" + ] + } + }, + "types": [ + "Ground", + "Electric" + ], + "attack": 144, + "defense": 171, + "stamina": 240, + "height": 0.7, + "weight": 11, + "quick_moves": [ + "Thunder Shock", + "Mud Shot" + ], + "charged_moves": [ + "Mud Bomb", + "Discharge", + "Muddy Water" + ], + "family": 618, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 5, + "generation": "Unova" + }, + "619": { + "name": "Mienfoo", + "pokedex_id": 619, + "default_form_id": 2249, + "forms": { + "2249": { + "name": "Normal", + "proto": "MIENFOO_NORMAL" + }, + "2250": { + "name": "Shadow", + "proto": "MIENFOO_SHADOW" + }, + "2251": { + "name": "Purified", + "proto": "MIENFOO_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fighting" + ], + "attack": 160, + "defense": 98, + "stamina": 128, + "height": 0.9, + "weight": 20, + "quick_moves": [ + "Low Kick", + "Pound" + ], + "charged_moves": [ + "Brick Break", + "Low Sweep", + "Focus Blast" + ], + "family": 619, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 620 + } + ], + "little": true + }, + "620": { + "name": "Mienshao", + "pokedex_id": 620, + "default_form_id": 2252, + "forms": { + "2252": { + "name": "Normal", + "proto": "MIENSHAO_NORMAL" + }, + "2253": { + "name": "Shadow", + "proto": "MIENSHAO_SHADOW" + }, + "2254": { + "name": "Purified", + "proto": "MIENSHAO_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fighting" + ], + "attack": 258, + "defense": 127, + "stamina": 163, + "height": 1.4, + "weight": 35.5, + "quick_moves": [ + "Low Kick", + "Poison Jab" + ], + "charged_moves": [ + "Brick Break", + "Grass Knot", + "Stone Edge" + ], + "family": 619, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "621": { + "name": "Druddigon", + "pokedex_id": 621, + "default_form_id": 2255, + "forms": { + "2255": { + "name": "Normal", + "proto": "DRUDDIGON_NORMAL" + }, + "2256": { + "name": "Shadow", + "proto": "DRUDDIGON_SHADOW" + }, + "2257": { + "name": "Purified", + "proto": "DRUDDIGON_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dragon" + ], + "attack": 213, + "defense": 170, + "stamina": 184, + "height": 1.6, + "weight": 139, + "quick_moves": [ + "Dragon Tail", + "Bite" + ], + "charged_moves": [ + "Dragon Claw", + "Night Slash", + "Hyper Beam" + ], + "family": 621, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "622": { + "name": "Golett", + "pokedex_id": 622, + "default_form_id": 2258, + "forms": { + "2258": { + "name": "Normal", + "proto": "GOLETT_NORMAL" + }, + "2259": { + "name": "Shadow", + "proto": "GOLETT_SHADOW" + }, + "2260": { + "name": "Purified", + "proto": "GOLETT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ground", + "Ghost" + ], + "attack": 127, + "defense": 92, + "stamina": 153, + "height": 1, + "weight": 92, + "quick_moves": [ + "Astonish", + "Mud Slap" + ], + "charged_moves": [ + "Shadow Punch", + "Brick Break", + "Night Shade" + ], + "family": 622, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 623 + } + ], + "little": true + }, + "623": { + "name": "Golurk", + "pokedex_id": 623, + "default_form_id": 2261, + "forms": { + "2261": { + "name": "Normal", + "proto": "GOLURK_NORMAL" + }, + "2262": { + "name": "Shadow", + "proto": "GOLURK_SHADOW" + }, + "2263": { + "name": "Purified", + "proto": "GOLURK_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Ground", + "Ghost" + ], + "attack": 222, + "defense": 154, + "stamina": 205, + "height": 2.8, + "weight": 330, + "quick_moves": [ + "Astonish", + "Mud Slap" + ], + "charged_moves": [ + "Shadow Punch", + "Dynamic Punch", + "Earth Power" + ], + "family": 622, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "624": { + "name": "Pawniard", + "pokedex_id": 624, + "default_form_id": 2264, + "forms": { + "2264": { + "name": "Normal", + "proto": "PAWNIARD_NORMAL" + }, + "2265": { + "name": "Shadow", + "proto": "PAWNIARD_SHADOW" + }, + "2266": { + "name": "Purified", + "proto": "PAWNIARD_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark", + "Steel" + ], + "attack": 154, + "defense": 114, + "stamina": 128, + "height": 0.5, + "weight": 10.2, + "quick_moves": [ + "Scratch", + "Fury Cutter" + ], + "charged_moves": [ + "Night Slash", + "Iron Head", + "X Scissor" + ], + "family": 624, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 625 + } + ], + "little": true + }, + "625": { + "name": "Bisharp", + "pokedex_id": 625, + "default_form_id": 2267, + "forms": { + "2267": { + "name": "Normal", + "proto": "BISHARP_NORMAL" + }, + "2268": { + "name": "Shadow", + "proto": "BISHARP_SHADOW" + }, + "2269": { + "name": "Purified", + "proto": "BISHARP_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark", + "Steel" + ], + "attack": 232, + "defense": 176, + "stamina": 163, + "height": 1.6, + "weight": 70, + "quick_moves": [ + "Snarl", + "Metal Claw" + ], + "charged_moves": [ + "Dark Pulse", + "Iron Head", + "X Scissor", + "Focus Blast" + ], + "family": 624, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "626": { + "name": "Bouffalant", + "pokedex_id": 626, + "default_form_id": 2270, + "forms": { + "2270": { + "name": "Normal", + "proto": "BOUFFALANT_NORMAL" + }, + "2271": { + "name": "Shadow", + "proto": "BOUFFALANT_SHADOW" + }, + "2272": { + "name": "Purified", + "proto": "BOUFFALANT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal" + ], + "attack": 195, + "defense": 182, + "stamina": 216, + "height": 1.6, + "weight": 94.6, + "quick_moves": [ + "Zen Headbutt", + "Mud Shot" + ], + "charged_moves": [ + "Megahorn", + "Stomp", + "Skull Bash", + "Earthquake" + ], + "family": 626, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "627": { + "name": "Rufflet", + "pokedex_id": 627, + "default_form_id": 2273, + "forms": { + "2273": { + "name": "Normal", + "proto": "RUFFLET_NORMAL" + }, + "2274": { + "name": "Shadow", + "proto": "RUFFLET_SHADOW" + }, + "2275": { + "name": "Purified", + "proto": "RUFFLET_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal", + "Flying" + ], + "attack": 150, + "defense": 97, + "stamina": 172, + "height": 0.5, + "weight": 10.5, + "quick_moves": [ + "Peck", + "Wing Attack" + ], + "charged_moves": [ + "Aerial Ace", + "Brave Bird", + "Rock Tomb" + ], + "family": 627, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 628 + } + ], + "little": true + }, + "628": { + "name": "Braviary", + "pokedex_id": 628, + "default_form_id": 2276, + "forms": { + "2276": { + "name": "Normal", + "proto": "BRAVIARY_NORMAL" + }, + "2277": { + "name": "Shadow", + "proto": "BRAVIARY_SHADOW" + }, + "2278": { + "name": "Purified", + "proto": "BRAVIARY_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Normal", + "Flying" + ], + "attack": 232, + "defense": 152, + "stamina": 225, + "height": 1.5, + "weight": 41, + "quick_moves": [ + "Steel Wing", + "Air Slash" + ], + "charged_moves": [ + "Heat Wave", + "Brave Bird", + "Rock Slide", + "Close Combat" + ], + "family": 627, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "629": { + "name": "Vullaby", + "pokedex_id": 629, + "default_form_id": 2279, + "forms": { + "2279": { + "name": "Normal", + "proto": "VULLABY_NORMAL" + }, + "2280": { + "name": "Shadow", + "proto": "VULLABY_SHADOW" + }, + "2281": { + "name": "Purified", + "proto": "VULLABY_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark", + "Flying" + ], + "attack": 105, + "defense": 139, + "stamina": 172, + "height": 0.5, + "weight": 9, + "quick_moves": [ + "Feint Attack", + "Air Slash" + ], + "charged_moves": [ + "Dark Pulse", + "Brave Bird", + "Foul Play" + ], + "family": 629, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 630 + } + ], + "little": true + }, + "630": { + "name": "Mandibuzz", + "pokedex_id": 630, + "default_form_id": 2282, + "forms": { + "2282": { + "name": "Normal", + "proto": "MANDIBUZZ_NORMAL" + }, + "2283": { + "name": "Shadow", + "proto": "MANDIBUZZ_SHADOW" + }, + "2284": { + "name": "Purified", + "proto": "MANDIBUZZ_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark", + "Flying" + ], + "attack": 129, + "defense": 205, + "stamina": 242, + "height": 1.2, + "weight": 39.5, + "quick_moves": [ + "Snarl", + "Air Slash" + ], + "charged_moves": [ + "Dark Pulse", + "Aerial Ace", + "Foul Play", + "Shadow Ball" + ], + "family": 629, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "631": { + "name": "Heatmor", + "pokedex_id": 631, + "default_form_id": 2285, + "forms": { + "2285": { + "name": "Normal", + "proto": "HEATMOR_NORMAL" + }, + "2286": { + "name": "Shadow", + "proto": "HEATMOR_SHADOW" + }, + "2287": { + "name": "Purified", + "proto": "HEATMOR_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Fire" + ], + "attack": 204, + "defense": 129, + "stamina": 198, + "height": 1.4, + "weight": 58, + "quick_moves": [ + "Lick", + "Fire Spin" + ], + "charged_moves": [ + "Flamethrower", + "Thunder Punch", + "Power Up Punch" + ], + "family": 631, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "632": { + "name": "Durant", + "pokedex_id": 632, + "default_form_id": 2288, + "forms": { + "2288": { + "name": "Normal", + "proto": "DURANT_NORMAL" + }, + "2289": { + "name": "Shadow", + "proto": "DURANT_SHADOW" + }, + "2290": { + "name": "Purified", + "proto": "DURANT_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Steel" + ], + "attack": 217, + "defense": 188, + "stamina": 151, + "height": 0.3, + "weight": 33, + "quick_moves": [ + "Bug Bite", + "Metal Claw" + ], + "charged_moves": [ + "X Scissor", + "Iron Head", + "Stone Edge" + ], + "family": 632, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "633": { + "name": "Deino", + "pokedex_id": 633, + "default_form_id": 2291, + "forms": { + "2291": { + "name": "Normal", + "proto": "DEINO_NORMAL" + }, + "2292": { + "name": "Shadow", + "proto": "DEINO_SHADOW" + }, + "2293": { + "name": "Purified", + "proto": "DEINO_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark", + "Dragon" + ], + "attack": 116, + "defense": 93, + "stamina": 141, + "height": 0.8, + "weight": 17.3, + "quick_moves": [ + "Tackle", + "Dragon Breath" + ], + "charged_moves": [ + "Dragon Pulse", + "Crunch", + "Body Slam" + ], + "family": 633, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 634 + } + ], + "little": true + }, + "634": { + "name": "Zweilous", + "pokedex_id": 634, + "default_form_id": 2294, + "forms": { + "2294": { + "name": "Normal", + "proto": "ZWEILOUS_NORMAL" + }, + "2295": { + "name": "Shadow", + "proto": "ZWEILOUS_SHADOW" + }, + "2296": { + "name": "Purified", + "proto": "ZWEILOUS_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark", + "Dragon" + ], + "attack": 159, + "defense": 135, + "stamina": 176, + "height": 1.4, + "weight": 50, + "quick_moves": [ + "Bite", + "Dragon Breath" + ], + "charged_moves": [ + "Dragon Pulse", + "Dark Pulse", + "Body Slam" + ], + "family": 633, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 635 + } + ] + }, + "635": { + "name": "Hydreigon", + "pokedex_id": 635, + "default_form_id": 2297, + "forms": { + "2297": { + "name": "Normal", + "proto": "HYDREIGON_NORMAL" + }, + "2298": { + "name": "Shadow", + "proto": "HYDREIGON_SHADOW" + }, + "2299": { + "name": "Purified", + "proto": "HYDREIGON_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dark", + "Dragon" + ], + "attack": 256, + "defense": 188, + "stamina": 211, + "height": 1.8, + "weight": 160, + "quick_moves": [ + "Bite", + "Dragon Breath" + ], + "charged_moves": [ + "Dragon Pulse", + "Dark Pulse", + "Flash Cannon" + ], + "family": 633, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 6, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "636": { + "name": "Larvesta", + "pokedex_id": 636, + "default_form_id": 2300, + "forms": { + "2300": { + "name": "Normal", + "proto": "LARVESTA_NORMAL" + }, + "2301": { + "name": "Shadow", + "proto": "LARVESTA_SHADOW" + }, + "2302": { + "name": "Purified", + "proto": "LARVESTA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Fire" + ], + "attack": 156, + "defense": 107, + "stamina": 146, + "height": 1.1, + "weight": 28.8, + "quick_moves": [ + "Ember", + "Bug Bite" + ], + "charged_moves": [ + "Flame Charge", + "Bug Buzz", + "Flame Wheel" + ], + "family": 636, + "flee_rate": 0.15, + "capture_rate": 0.7, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 637 + } + ], + "little": true + }, + "637": { + "name": "Volcarona", + "pokedex_id": 637, + "default_form_id": 2303, + "forms": { + "2303": { + "name": "Normal", + "proto": "VOLCARONA_NORMAL" + }, + "2304": { + "name": "Shadow", + "proto": "VOLCARONA_SHADOW" + }, + "2305": { + "name": "Purified", + "proto": "VOLCARONA_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Bug", + "Fire" + ], + "attack": 264, + "defense": 189, + "stamina": 198, + "height": 1.6, + "weight": 46, + "quick_moves": [ + "Fire Spin", + "Bug Bite" + ], + "charged_moves": [ + "Overheat", + "Bug Buzz", + "Solar Beam", + "Hurricane" + ], + "family": 636, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "638": { + "name": "Cobalion", + "pokedex_id": 638, + "default_form_id": 2306, + "forms": { + "2306": { + "name": "Normal", + "proto": "COBALION_NORMAL" + }, + "2307": { + "name": "Shadow", + "proto": "COBALION_SHADOW" + }, + "2308": { + "name": "Purified", + "proto": "COBALION_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Steel", + "Fighting" + ], + "attack": 192, + "defense": 229, + "stamina": 209, + "height": 2.1, + "weight": 250, + "quick_moves": [ + "Metal Claw", + "Zen Headbutt" + ], + "charged_moves": [ + "Close Combat", + "Iron Head", + "Stone Edge" + ], + "family": 638, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "639": { + "name": "Terrakion", + "pokedex_id": 639, + "default_form_id": 2309, + "forms": { + "2309": { + "name": "Normal", + "proto": "TERRAKION_NORMAL" + }, + "2310": { + "name": "Shadow", + "proto": "TERRAKION_SHADOW" + }, + "2311": { + "name": "Purified", + "proto": "TERRAKION_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Rock", + "Fighting" + ], + "attack": 260, + "defense": 192, + "stamina": 209, + "height": 1.9, + "weight": 260, + "quick_moves": [ + "Smack Down", + "Zen Headbutt" + ], + "charged_moves": [ + "Close Combat", + "Earthquake", + "Rock Slide" + ], + "family": 639, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "640": { + "name": "Virizion", + "pokedex_id": 640, + "default_form_id": 2312, + "forms": { + "2312": { + "name": "Normal", + "proto": "VIRIZION_NORMAL" + }, + "2313": { + "name": "Shadow", + "proto": "VIRIZION_SHADOW" + }, + "2314": { + "name": "Purified", + "proto": "VIRIZION_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Grass", + "Fighting" + ], + "attack": 192, + "defense": 229, + "stamina": 209, + "height": 2, + "weight": 200, + "quick_moves": [ + "Quick Attack", + "Zen Headbutt" + ], + "charged_moves": [ + "Close Combat", + "Leaf Blade", + "Stone Edge" + ], + "family": 640, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "641": { + "name": "Tornadus", + "pokedex_id": 641, + "default_form_id": 140, + "forms": { + "140": { + "name": "Incarnate", + "proto": "TORNADUS_INCARNATE" + }, + "141": { + "name": "Therian", + "proto": "TORNADUS_THERIAN", + "attack": 238, + "defense": 189, + "stamina": 188, + "height": 1.4, + "weight": 63, + "quick_moves": [ + "Astonish", + "Gust" + ], + "charged_moves": [ + "Heat Wave", + "Psychic", + "Focus Blast", + "Hurricane" + ] + } + }, + "types": [ + "Flying" + ], + "attack": 266, + "defense": 164, + "stamina": 188, + "height": 1.5, + "weight": 63, + "quick_moves": [ + "Bite", + "Air Slash" + ], + "charged_moves": [ + "Grass Knot", + "Dark Pulse", + "Hyper Beam", + "Hurricane" + ], + "family": 641, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 5, + "generation": "Unova" + }, + "642": { + "name": "Thundurus", + "pokedex_id": 642, + "default_form_id": 142, + "forms": { + "142": { + "name": "Incarnate", + "proto": "THUNDURUS_INCARNATE" + }, + "143": { + "name": "Therian", + "proto": "THUNDURUS_THERIAN", + "attack": 295, + "defense": 161, + "stamina": 188, + "height": 3, + "weight": 61, + "quick_moves": [ + "Bite", + "Volt Switch" + ], + "charged_moves": [ + "Sludge Wave", + "Thunder", + "Focus Blast", + "Thunderbolt" + ] + } + }, + "types": [ + "Electric", + "Flying" + ], + "attack": 266, + "defense": 164, + "stamina": 188, + "height": 1.5, + "weight": 61, + "quick_moves": [ + "Astonish", + "Thunder Shock" + ], + "charged_moves": [ + "Crunch", + "Thunder", + "Brick Break", + "Thunder Punch" + ], + "family": 642, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 5, + "generation": "Unova" + }, + "643": { + "name": "Reshiram", + "pokedex_id": 643, + "default_form_id": 2315, + "forms": { + "2315": { + "name": "Normal", + "proto": "RESHIRAM_NORMAL" + }, + "2316": { + "name": "Shadow", + "proto": "RESHIRAM_SHADOW" + }, + "2317": { + "name": "Purified", + "proto": "RESHIRAM_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dragon", + "Fire" + ], + "attack": 275, + "defense": 211, + "stamina": 205, + "height": 3.2, + "weight": 330, + "quick_moves": [ + "Dragon Breath", + "Fire Fang" + ], + "charged_moves": [ + "Crunch", + "Overheat", + "Draco Meteor", + "Stone Edge" + ], + "family": 643, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "644": { + "name": "Zekrom", + "pokedex_id": 644, + "default_form_id": 2318, + "forms": { + "2318": { + "name": "Normal", + "proto": "ZEKROM_NORMAL" + }, + "2319": { + "name": "Shadow", + "proto": "ZEKROM_SHADOW" + }, + "2320": { + "name": "Purified", + "proto": "ZEKROM_PURIFIED" + } + }, + "gen_id": 5, + "generation": "Unova", + "types": [ + "Dragon", + "Electric" + ], + "attack": 275, + "defense": 211, + "stamina": 205, + "height": 2.9, + "weight": 345, + "quick_moves": [ + "Dragon Breath", + "Charge Beam" + ], + "charged_moves": [ + "Outrage", + "Wild Charge", + "Flash Cannon", + "Crunch" + ], + "family": 644, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "645": { + "name": "Landorus", + "pokedex_id": 645, + "default_form_id": 144, + "forms": { + "144": { + "name": "Incarnate", + "proto": "LANDORUS_INCARNATE" + }, + "145": { + "name": "Therian", + "proto": "LANDORUS_THERIAN", + "attack": 289, + "defense": 179, + "stamina": 205, + "height": 1.3, + "weight": 68, + "quick_moves": [ + "Mud Shot", + "Extrasensory" + ], + "charged_moves": [ + "Earthquake", + "Bulldoze", + "Stone Edge", + "Super Power" + ] + } + }, + "types": [ + "Ground", + "Flying" + ], + "attack": 261, + "defense": 182, + "stamina": 205, + "height": 1.5, + "weight": 68, + "quick_moves": [ + "Mud Shot", + "Rock Throw" + ], + "charged_moves": [ + "Earth Power", + "Outrage", + "Rock Slide", + "Focus Blast" + ], + "family": 645, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 5, + "generation": "Unova" + }, + "646": { + "name": "Kyurem", + "pokedex_id": 646, + "default_form_id": 146, + "forms": { + "146": { + "name": "Normal", + "proto": "KYUREM_NORMAL" + }, + "147": { + "name": "Black", + "proto": "KYUREM_BLACK", + "attack": 310, + "defense": 183, + "stamina": 245, + "quick_moves": [ + "Dragon Tail", + "Shadow Claw" + ], + "charged_moves": [ + "Iron Head", + "Blizzard", + "Stone Edge", + "Outrage" + ] + }, + "148": { + "name": "White", + "proto": "KYUREM_WHITE", + "attack": 310, + "defense": 183, + "stamina": 245, + "charged_moves": [ + "Dragon Pulse", + "Blizzard", + "Ancient Power", + "Focus Blast" + ] + } + }, + "types": [ + "Dragon", + "Ice" + ], + "attack": 246, + "defense": 170, + "stamina": 245, + "height": 3, + "weight": 325, + "quick_moves": [ + "Dragon Breath", + "Steel Wing" + ], + "charged_moves": [ + "Dragon Claw", + "Blizzard", + "Draco Meteor" + ], + "family": 646, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 5, + "generation": "Unova" + }, + "647": { + "name": "Keldeo", + "pokedex_id": 647, + "default_form_id": 149, + "forms": { + "149": { + "name": "Ordinary", + "proto": "KELDEO_ORDINARY" + }, + "150": { + "name": "Resolute", + "proto": "KELDEO_RESOLUTE" + } + }, + "types": [ + "Water", + "Fighting" + ], + "attack": 260, + "defense": 192, + "stamina": 209, + "height": 1.4, + "weight": 48.5, + "quick_moves": [ + "Poison Jab", + "Low Kick" + ], + "charged_moves": [ + "Aqua Jet", + "Close Combat", + "Hydro Pump", + "X Scissor" + ], + "family": 647, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 5, + "generation": "Unova" + }, + "648": { + "name": "Meloetta", + "pokedex_id": 648, + "default_form_id": 151, + "forms": { + "151": { + "name": "Aria", + "proto": "MELOETTA_ARIA", + "quick_moves": [ + "Quick Attack", + "Confusion" + ], + "charged_moves": [ + "Psyshock", + "Thunderbolt", + "Dazzling Gleam", + "Hyper Beam" + ] + }, + "152": { + "name": "Pirouette", + "proto": "MELOETTA_PIROUETTE", + "attack": 269, + "defense": 188, + "stamina": 225, + "types": [ + "Normal", + "Fighting" + ] + } + }, + "types": [ + "Normal", + "Psychic" + ], + "attack": 250, + "defense": 225, + "stamina": 225, + "height": 0.6, + "weight": 6.5, + "quick_moves": [ + "Quick Attack", + "Low Kick" + ], + "charged_moves": [ + "Close Combat", + "Fire Punch", + "Ice Punch", + "Hyper Beam" + ], + "family": 648, + "capture_rate": 100, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 5, + "generation": "Unova" + }, + "649": { + "name": "Genesect", + "pokedex_id": 649, + "default_form_id": 593, + "forms": { + "593": { + "name": "Normal", + "proto": "GENESECT_NORMAL" + }, + "594": { + "name": "Shock", + "proto": "GENESECT_SHOCK", + "charged_moves": [ + "X Scissor", + "Magnet Bomb", + "Zap Cannon" + ] + }, + "595": { + "name": "Burn", + "proto": "GENESECT_BURN", + "charged_moves": [ + "X Scissor", + "Magnet Bomb", + "Flamethrower" + ] + }, + "596": { + "name": "Chill", + "proto": "GENESECT_CHILL", + "charged_moves": [ + "X Scissor", + "Magnet Bomb", + "Ice Beam" + ] + }, + "597": { + "name": "Douse", + "proto": "GENESECT_DOUSE", + "charged_moves": [ + "X Scissor", + "Magnet Bomb", + "Gunk Shot" + ] + } + }, + "types": [ + "Bug", + "Steel" + ], + "attack": 252, + "defense": 199, + "stamina": 174, + "height": 1.5, + "weight": 82.5, + "quick_moves": [ + "Metal Claw", + "Fury Cutter" + ], + "charged_moves": [ + "X Scissor", + "Magnet Bomb", + "Hyper Beam" + ], + "family": 649, + "flee_rate": 0.01, + "capture_rate": 0.02, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 5, + "generation": "Unova" + }, + "650": { + "name": "Chespin", + "pokedex_id": 650, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Grass" + ], + "attack": 110, + "defense": 106, + "stamina": 148, + "height": 0.4, + "weight": 9, + "quick_moves": [ + "Take Down", + "Vine Whip" + ], + "charged_moves": [ + "Gyro Ball", + "Seed Bomb", + "Body Slam" + ], + "family": 650, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 651 + } + ], + "little": true + }, + "651": { + "name": "Quilladin", + "pokedex_id": 651, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Grass" + ], + "attack": 146, + "defense": 156, + "stamina": 156, + "height": 0.7, + "weight": 29, + "quick_moves": [ + "Low Kick", + "Vine Whip" + ], + "charged_moves": [ + "Gyro Ball", + "Energy Ball", + "Body Slam" + ], + "family": 650, + "flee_rate": 0.1, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 652 + } + ] + }, + "652": { + "name": "Chesnaught", + "pokedex_id": 652, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Grass", + "Fighting" + ], + "attack": 201, + "defense": 204, + "stamina": 204, + "height": 1.6, + "weight": 90, + "quick_moves": [ + "Low Kick", + "Vine Whip", + "Smack Down" + ], + "charged_moves": [ + "Gyro Ball", + "Energy Ball", + "Super Power", + "Solar Beam" + ], + "family": 650, + "flee_rate": 0.1, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "653": { + "name": "Fennekin", + "pokedex_id": 653, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fire" + ], + "attack": 116, + "defense": 102, + "stamina": 120, + "height": 0.4, + "weight": 9.4, + "quick_moves": [ + "Scratch", + "Ember" + ], + "charged_moves": [ + "Psyshock", + "Flamethrower", + "Flame Charge" + ], + "family": 653, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 654 + } + ], + "little": true + }, + "654": { + "name": "Braixen", + "pokedex_id": 654, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fire" + ], + "attack": 171, + "defense": 130, + "stamina": 153, + "height": 1, + "weight": 14.5, + "quick_moves": [ + "Scratch", + "Ember" + ], + "charged_moves": [ + "Psyshock", + "Flamethrower", + "Flame Charge" + ], + "family": 653, + "flee_rate": 0.1, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 655 + } + ] + }, + "655": { + "name": "Delphox", + "pokedex_id": 655, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fire", + "Psychic" + ], + "attack": 230, + "defense": 189, + "stamina": 181, + "height": 1.5, + "weight": 39, + "quick_moves": [ + "Scratch", + "Fire Spin", + "Zen Headbutt" + ], + "charged_moves": [ + "Psychic", + "Flamethrower", + "Flame Charge", + "Fire Blast" + ], + "family": 653, + "flee_rate": 0.1, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "656": { + "name": "Froakie", + "pokedex_id": 656, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Water" + ], + "attack": 122, + "defense": 84, + "stamina": 121, + "height": 0.3, + "weight": 7, + "quick_moves": [ + "Pound", + "Bubble" + ], + "charged_moves": [ + "Water Pulse", + "Aerial Ace", + "Surf" + ], + "family": 656, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 657 + } + ], + "little": true + }, + "657": { + "name": "Frogadier", + "pokedex_id": 657, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Water" + ], + "attack": 168, + "defense": 114, + "stamina": 144, + "height": 0.6, + "weight": 10.9, + "quick_moves": [ + "Pound", + "Bubble" + ], + "charged_moves": [ + "Water Pulse", + "Aerial Ace", + "Surf" + ], + "family": 656, + "flee_rate": 0.1, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 658 + } + ] + }, + "658": { + "name": "Greninja", + "pokedex_id": 658, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Water", + "Dark" + ], + "attack": 223, + "defense": 152, + "stamina": 176, + "height": 1.5, + "weight": 40, + "quick_moves": [ + "Feint Attack", + "Bubble" + ], + "charged_moves": [ + "Night Slash", + "Aerial Ace", + "Surf", + "Hydro Pump" + ], + "family": 656, + "flee_rate": 0.1, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "659": { + "name": "Bunnelby", + "pokedex_id": 659, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Normal" + ], + "attack": 68, + "defense": 72, + "stamina": 116, + "height": 0.4, + "weight": 5, + "quick_moves": [ + "Mud Slap", + "Quick Attack" + ], + "charged_moves": [ + "Dig", + "Bulldoze", + "Earthquake" + ], + "family": 659, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 660 + } + ], + "little": true + }, + "660": { + "name": "Diggersby", + "pokedex_id": 660, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Normal", + "Ground" + ], + "attack": 112, + "defense": 155, + "stamina": 198, + "height": 1, + "weight": 42.4, + "quick_moves": [ + "Mud Shot", + "Quick Attack" + ], + "charged_moves": [ + "Dig", + "Hyper Beam", + "Earthquake", + "Fire Punch" + ], + "family": 659, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "661": { + "name": "Fletchling", + "pokedex_id": 661, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Normal", + "Flying" + ], + "attack": 95, + "defense": 80, + "stamina": 128, + "height": 0.3, + "weight": 1.7, + "quick_moves": [ + "Peck", + "Quick Attack" + ], + "charged_moves": [ + "Aerial Ace", + "Heat Wave", + "Swift" + ], + "family": 661, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 662 + } + ], + "little": true + }, + "662": { + "name": "Fletchinder", + "pokedex_id": 662, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fire", + "Flying" + ], + "attack": 145, + "defense": 110, + "stamina": 158, + "height": 0.7, + "weight": 16, + "quick_moves": [ + "Peck", + "Ember", + "Steel Wing" + ], + "charged_moves": [ + "Aerial Ace", + "Heat Wave", + "Flame Charge" + ], + "family": 661, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 663 + } + ] + }, + "663": { + "name": "Talonflame", + "pokedex_id": 663, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fire", + "Flying" + ], + "attack": 176, + "defense": 155, + "stamina": 186, + "height": 1.2, + "weight": 24.5, + "quick_moves": [ + "Peck", + "Fire Spin", + "Steel Wing" + ], + "charged_moves": [ + "Brave Bird", + "Fire Blast", + "Flame Charge", + "Hurricane" + ], + "family": 661, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 5, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "664": { + "name": "Scatterbug", + "pokedex_id": 664, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Bug" + ], + "attack": 63, + "defense": 63, + "stamina": 116, + "height": 0.3, + "weight": 2.5, + "quick_moves": [ + "Bug Bite", + "Tackle" + ], + "charged_moves": [ + "Struggle" + ], + "family": 664, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 665 + } + ], + "little": true + }, + "665": { + "name": "Spewpa", + "pokedex_id": 665, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Bug" + ], + "attack": 48, + "defense": 89, + "stamina": 128, + "height": 0.3, + "weight": 8.4, + "quick_moves": [ + "Bug Bite", + "Tackle" + ], + "charged_moves": [ + "Struggle" + ], + "family": 664, + "flee_rate": 0.09, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 666 + } + ] + }, + "666": { + "name": "Vivillon", + "pokedex_id": 666, + "default_form_id": 2594, + "forms": { + "2594": { + "name": "Archipelago", + "proto": "VIVILLON_ARCHIPELAGO" + }, + "2595": { + "name": "Continental", + "proto": "VIVILLON_CONTINENTAL" + }, + "2596": { + "name": "Elegant", + "proto": "VIVILLON_ELEGANT" + }, + "2597": { + "name": "Fancy", + "proto": "VIVILLON_FANCY" + }, + "2598": { + "name": "Garden", + "proto": "VIVILLON_GARDEN" + }, + "2599": { + "name": "High Plains", + "proto": "VIVILLON_HIGH_PLAINS" + }, + "2600": { + "name": "Icy Snow", + "proto": "VIVILLON_ICY_SNOW" + }, + "2601": { + "name": "Jungle", + "proto": "VIVILLON_JUNGLE" + }, + "2602": { + "name": "Marine", + "proto": "VIVILLON_MARINE" + }, + "2603": { + "name": "Meadow", + "proto": "VIVILLON_MEADOW" + }, + "2604": { + "name": "Modern", + "proto": "VIVILLON_MODERN" + }, + "2605": { + "name": "Monsoon", + "proto": "VIVILLON_MONSOON" + }, + "2606": { + "name": "Ocean", + "proto": "VIVILLON_OCEAN" + }, + "2607": { + "name": "Pokeball", + "proto": "VIVILLON_POKEBALL" + }, + "2608": { + "name": "Polar", + "proto": "VIVILLON_POLAR" + }, + "2609": { + "name": "River", + "proto": "VIVILLON_RIVER" + }, + "2610": { + "name": "Sandstorm", + "proto": "VIVILLON_SANDSTORM" + }, + "2611": { + "name": "Savanna", + "proto": "VIVILLON_SAVANNA" + }, + "2612": { + "name": "Sun", + "proto": "VIVILLON_SUN" + }, + "2613": { + "name": "Tundra", + "proto": "VIVILLON_TUNDRA" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Bug", + "Flying" + ], + "attack": 176, + "defense": 103, + "stamina": 190, + "height": 1.2, + "weight": 17, + "quick_moves": [ + "Bug Bite", + "Gust", + "Struggle Bug" + ], + "charged_moves": [ + "Bug Buzz", + "Aerial Ace", + "Energy Ball", + "Hurricane" + ], + "family": 664, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "667": { + "name": "Litleo", + "pokedex_id": 667, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fire", + "Normal" + ], + "attack": 139, + "defense": 112, + "stamina": 158, + "height": 0.6, + "weight": 13.5, + "quick_moves": [ + "Fire Fang", + "Tackle", + "Ember" + ], + "charged_moves": [ + "Flame Charge", + "Flamethrower", + "Crunch" + ], + "family": 667, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 668, + "form": 2587, + "gender_requirement": 1 + }, + { + "pokemon": 668, + "form": 2588, + "gender_requirement": 2 + } + ], + "little": true + }, + "668": { + "name": "Pyroar", + "pokedex_id": 668, + "default_form_id": 2587, + "forms": { + "2587": { + "name": "Normal", + "proto": "PYROAR_NORMAL", + "quick_moves": [ + "Fire Fang", + "Take Down" + ] + }, + "2588": { + "name": "Female", + "proto": "PYROAR_FEMALE", + "quick_moves": [ + "Fire Fang", + "Take Down" + ] + } + }, + "types": [ + "Fire", + "Normal" + ], + "attack": 221, + "defense": 149, + "stamina": 200, + "height": 1.5, + "weight": 81.5, + "quick_moves": [ + "Fire Fang", + "Take Down", + "Ember" + ], + "charged_moves": [ + "Flame Charge", + "Solar Beam", + "Dark Pulse", + "Overheat" + ], + "family": 667, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 6, + "generation": "Kalos" + }, + "669": { + "name": "Flabebe", + "pokedex_id": 669, + "default_form_id": 2614, + "forms": { + "2614": { + "name": "Red", + "proto": "FLABEBE_RED" + }, + "2615": { + "name": "Yellow", + "proto": "FLABEBE_YELLOW" + }, + "2616": { + "name": "Orange", + "proto": "FLABEBE_ORANGE" + }, + "2617": { + "name": "Blue", + "proto": "FLABEBE_BLUE" + }, + "2618": { + "name": "White", + "proto": "FLABEBE_WHITE" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fairy" + ], + "attack": 108, + "defense": 120, + "stamina": 127, + "height": 0.1, + "weight": 0.1, + "quick_moves": [ + "Vine Whip", + "Tackle" + ], + "charged_moves": [ + "Dazzling Gleam", + "Petal Blizzard", + "Psychic" + ], + "family": 669, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 670 + } + ], + "little": true + }, + "670": { + "name": "Floette", + "pokedex_id": 670, + "default_form_id": 2619, + "forms": { + "2619": { + "name": "Red", + "proto": "FLOETTE_RED" + }, + "2620": { + "name": "Yellow", + "proto": "FLOETTE_YELLOW" + }, + "2621": { + "name": "Orange", + "proto": "FLOETTE_ORANGE" + }, + "2622": { + "name": "Blue", + "proto": "FLOETTE_BLUE" + }, + "2623": { + "name": "White", + "proto": "FLOETTE_WHITE" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fairy" + ], + "attack": 136, + "defense": 151, + "stamina": 144, + "height": 0.2, + "weight": 0.9, + "quick_moves": [ + "Vine Whip", + "Tackle" + ], + "charged_moves": [ + "Dazzling Gleam", + "Petal Blizzard", + "Psychic" + ], + "family": 669, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 671 + } + ] + }, + "671": { + "name": "Florges", + "pokedex_id": 671, + "default_form_id": 2624, + "forms": { + "2624": { + "name": "Red", + "proto": "FLORGES_RED" + }, + "2625": { + "name": "Yellow", + "proto": "FLORGES_YELLOW" + }, + "2626": { + "name": "Orange", + "proto": "FLORGES_ORANGE" + }, + "2627": { + "name": "Blue", + "proto": "FLORGES_BLUE" + }, + "2628": { + "name": "White", + "proto": "FLORGES_WHITE" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fairy" + ], + "attack": 212, + "defense": 244, + "stamina": 186, + "height": 1.1, + "weight": 10, + "quick_moves": [ + "Vine Whip", + "Tackle", + "Razor Leaf" + ], + "charged_moves": [ + "Moonblast", + "Petal Blizzard", + "Psychic", + "Disarming Voice" + ], + "family": 669, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "672": { + "name": "Skiddo", + "pokedex_id": 672, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Grass" + ], + "attack": 123, + "defense": 102, + "stamina": 165, + "height": 0.9, + "weight": 31, + "quick_moves": [ + "Zen Headbutt", + "Rock Smash" + ], + "charged_moves": [ + "Brick Break", + "Rock Slide", + "Seed Bomb" + ], + "family": 672, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 673 + } + ], + "little": true + }, + "673": { + "name": "Gogoat", + "pokedex_id": 673, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Grass" + ], + "attack": 196, + "defense": 146, + "stamina": 265, + "height": 1.7, + "weight": 91, + "quick_moves": [ + "Zen Headbutt", + "Rock Smash", + "Vine Whip" + ], + "charged_moves": [ + "Brick Break", + "Rock Slide", + "Leaf Blade", + "Seed Bomb" + ], + "family": 672, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "674": { + "name": "Pancham", + "pokedex_id": 674, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fighting" + ], + "attack": 145, + "defense": 107, + "stamina": 167, + "height": 0.6, + "weight": 8, + "quick_moves": [ + "Low Kick", + "Tackle" + ], + "charged_moves": [ + "Low Sweep", + "Crunch", + "Body Slam" + ], + "family": 674, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 675 + } + ], + "little": true + }, + "675": { + "name": "Pangoro", + "pokedex_id": 675, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fighting", + "Dark" + ], + "attack": 226, + "defense": 146, + "stamina": 216, + "height": 2.1, + "weight": 136, + "quick_moves": [ + "Low Kick", + "Snarl", + "Bullet Punch" + ], + "charged_moves": [ + "Close Combat", + "Night Slash", + "Iron Head", + "Rock Slide" + ], + "family": 674, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "676": { + "name": "Furfrou", + "pokedex_id": 676, + "default_form_id": 2629, + "forms": { + "2629": { + "name": "Natural", + "proto": "FURFROU_NATURAL" + }, + "2630": { + "name": "Heart", + "proto": "FURFROU_HEART" + }, + "2631": { + "name": "Star", + "proto": "FURFROU_STAR" + }, + "2632": { + "name": "Diamond", + "proto": "FURFROU_DIAMOND" + }, + "2633": { + "name": "Debutante", + "proto": "FURFROU_DEBUTANTE" + }, + "2634": { + "name": "Matron", + "proto": "FURFROU_MATRON" + }, + "2635": { + "name": "Dandy", + "proto": "FURFROU_DANDY" + }, + "2636": { + "name": "La Reine", + "proto": "FURFROU_LA_REINE" + }, + "2637": { + "name": "Kabuki", + "proto": "FURFROU_KABUKI" + }, + "2638": { + "name": "Pharaoh", + "proto": "FURFROU_PHARAOH" + } + }, + "types": [ + "Normal" + ], + "attack": 164, + "defense": 167, + "stamina": 181, + "height": 1.2, + "weight": 28, + "quick_moves": [ + "Take Down", + "Bite", + "Sucker Punch" + ], + "charged_moves": [ + "Surf", + "Dark Pulse", + "Grass Knot" + ], + "family": 676, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 6, + "generation": "Kalos" + }, + "677": { + "name": "Espurr", + "pokedex_id": 677, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Psychic" + ], + "attack": 120, + "defense": 114, + "stamina": 158, + "height": 0.3, + "weight": 3.5, + "quick_moves": [ + "Confusion", + "Scratch" + ], + "charged_moves": [ + "Psyshock", + "Energy Ball", + "Psychic" + ], + "family": 677, + "flee_rate": 0.1, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 1, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 678, + "form": 2589, + "gender_requirement": 1 + }, + { + "pokemon": 678, + "form": 2590, + "gender_requirement": 2 + } + ], + "little": true + }, + "678": { + "name": "Meowstic", + "pokedex_id": 678, + "default_form_id": 2589, + "forms": { + "2589": { + "name": "Normal", + "proto": "MEOWSTIC_NORMAL" + }, + "2590": { + "name": "Female", + "proto": "MEOWSTIC_FEMALE", + "quick_moves": [ + "Confusion", + "Charm" + ], + "charged_moves": [ + "Psychic", + "Energy Ball", + "Shadow Ball" + ] + } + }, + "types": [ + "Psychic" + ], + "attack": 166, + "defense": 167, + "stamina": 179, + "height": 0.6, + "weight": 8.5, + "quick_moves": [ + "Confusion", + "Sucker Punch" + ], + "charged_moves": [ + "Psychic", + "Energy Ball", + "Thunderbolt" + ], + "family": 677, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 6, + "generation": "Kalos" + }, + "679": { + "name": "Honedge", + "pokedex_id": 679, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Steel", + "Ghost" + ], + "height": 0.8, + "weight": 2, + "quick_moves": [ + "Tackle", + "Fury Cutter" + ], + "charged_moves": [ + "Iron Head", + "Gyro Ball" + ], + "family": 679, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 680 + } + ], + "little": true + }, + "680": { + "name": "Doublade", + "pokedex_id": 680, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Steel", + "Ghost" + ], + "height": 0.8, + "weight": 4.5, + "quick_moves": [ + "Psycho Cut", + "Fury Cutter" + ], + "charged_moves": [ + "Iron Head", + "Gyro Ball" + ], + "family": 679, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 681 + } + ] + }, + "681": { + "name": "Aegislash", + "pokedex_id": 681, + "default_form_id": 2639, + "forms": { + "2639": { + "name": "Shield", + "proto": "AEGISLASH_SHIELD" + }, + "2640": { + "name": "Blade", + "proto": "AEGISLASH_BLADE" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Steel", + "Ghost" + ], + "height": 1.7, + "weight": 53, + "quick_moves": [ + "Psycho Cut", + "Fury Cutter" + ], + "charged_moves": [ + "Flash Cannon", + "Gyro Ball", + "Shadow Ball" + ], + "family": 679, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "682": { + "name": "Spritzee", + "pokedex_id": 682, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fairy" + ], + "attack": 110, + "defense": 113, + "stamina": 186, + "height": 0.2, + "weight": 0.5, + "quick_moves": [ + "Charm", + "Charge Beam" + ], + "charged_moves": [ + "Draining Kiss", + "Thunderbolt" + ], + "family": 682, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 683 + } + ], + "little": true + }, + "683": { + "name": "Aromatisse", + "pokedex_id": 683, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fairy" + ], + "attack": 173, + "defense": 150, + "stamina": 226, + "height": 0.8, + "weight": 15.5, + "quick_moves": [ + "Charm", + "Charge Beam" + ], + "charged_moves": [ + "Moonblast", + "Thunderbolt", + "Psychic", + "Draining Kiss" + ], + "family": 682, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "684": { + "name": "Swirlix", + "pokedex_id": 684, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fairy" + ], + "attack": 109, + "defense": 119, + "stamina": 158, + "height": 0.4, + "weight": 3.5, + "quick_moves": [ + "Tackle" + ], + "charged_moves": [ + "Draining Kiss", + "Energy Ball" + ], + "family": 684, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 685 + } + ], + "little": true + }, + "685": { + "name": "Slurpuff", + "pokedex_id": 685, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fairy" + ], + "attack": 168, + "defense": 163, + "stamina": 193, + "height": 0.8, + "weight": 5, + "quick_moves": [ + "Tackle", + "Charm" + ], + "charged_moves": [ + "Play Rough", + "Energy Ball", + "Flamethrower", + "Draining Kiss" + ], + "family": 684, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "686": { + "name": "Inkay", + "pokedex_id": 686, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Dark", + "Psychic" + ], + "attack": 98, + "defense": 95, + "stamina": 142, + "height": 0.4, + "weight": 3.5, + "quick_moves": [ + "Peck", + "Tackle" + ], + "charged_moves": [ + "Psybeam", + "Night Slash" + ], + "family": 686, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 687 + } + ], + "little": true + }, + "687": { + "name": "Malamar", + "pokedex_id": 687, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Dark", + "Psychic" + ], + "attack": 177, + "defense": 165, + "stamina": 200, + "height": 1.5, + "weight": 47, + "quick_moves": [ + "Peck", + "Psycho Cut" + ], + "charged_moves": [ + "Psybeam", + "Foul Play", + "Super Power", + "Hyper Beam" + ], + "family": 686, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "688": { + "name": "Binacle", + "pokedex_id": 688, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Rock", + "Water" + ], + "attack": 96, + "defense": 120, + "stamina": 123, + "height": 0.5, + "weight": 31, + "quick_moves": [ + "Scratch", + "Mud Slap" + ], + "charged_moves": [ + "Ancient Power", + "Cross Chop", + "Dig" + ], + "family": 688, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 689 + } + ], + "little": true + }, + "689": { + "name": "Barbaracle", + "pokedex_id": 689, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Rock", + "Water" + ], + "attack": 194, + "defense": 205, + "stamina": 176, + "height": 1.3, + "weight": 96, + "quick_moves": [ + "Water Gun", + "Mud Slap", + "Fury Cutter" + ], + "charged_moves": [ + "Skull Bash", + "Cross Chop", + "Stone Edge", + "Grass Knot" + ], + "family": 688, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "690": { + "name": "Skrelp", + "pokedex_id": 690, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Poison", + "Water" + ], + "attack": 109, + "defense": 109, + "stamina": 137, + "height": 0.5, + "weight": 7.3, + "quick_moves": [ + "Water Gun", + "Acid" + ], + "charged_moves": [ + "Aqua Tail", + "Water Pulse", + "Twister", + "Sludge Bomb" + ], + "family": 690, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 691 + } + ], + "little": true + }, + "691": { + "name": "Dragalge", + "pokedex_id": 691, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Poison", + "Dragon" + ], + "attack": 177, + "defense": 207, + "stamina": 163, + "height": 1.8, + "weight": 81.5, + "quick_moves": [ + "Water Gun", + "Acid", + "Dragon Tail" + ], + "charged_moves": [ + "Hydro Pump", + "Aqua Tail", + "Outrage", + "Gunk Shot" + ], + "family": 690, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "692": { + "name": "Clauncher", + "pokedex_id": 692, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Water" + ], + "attack": 108, + "defense": 117, + "stamina": 137, + "height": 0.5, + "weight": 8.3, + "quick_moves": [ + "Water Gun", + "Smack Down" + ], + "charged_moves": [ + "Water Pulse", + "Crabhammer", + "Aqua Jet" + ], + "family": 692, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 693 + } + ], + "little": true + }, + "693": { + "name": "Clawitzer", + "pokedex_id": 693, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Water" + ], + "attack": 221, + "defense": 171, + "stamina": 174, + "height": 1.3, + "weight": 35.3, + "quick_moves": [ + "Water Gun", + "Smack Down" + ], + "charged_moves": [ + "Water Pulse", + "Dark Pulse", + "Ice Beam", + "Crabhammer" + ], + "family": 692, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "694": { + "name": "Helioptile", + "pokedex_id": 694, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Electric", + "Normal" + ], + "attack": 115, + "defense": 78, + "stamina": 127, + "height": 0.5, + "weight": 6, + "quick_moves": [ + "Quick Attack", + "Thunder Shock" + ], + "charged_moves": [ + "Parabolic Charge", + "Bulldoze", + "Discharge" + ], + "family": 694, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 695 + } + ], + "little": true + }, + "695": { + "name": "Heliolisk", + "pokedex_id": 695, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Electric", + "Normal" + ], + "attack": 219, + "defense": 168, + "stamina": 158, + "height": 1, + "weight": 21, + "quick_moves": [ + "Quick Attack", + "Volt Switch", + "Mud Slap" + ], + "charged_moves": [ + "Parabolic Charge", + "Bulldoze", + "Thunderbolt", + "Grass Knot" + ], + "family": 694, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "696": { + "name": "Tyrunt", + "pokedex_id": 696, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Rock", + "Dragon" + ], + "attack": 158, + "defense": 123, + "stamina": 151, + "height": 0.8, + "weight": 26, + "quick_moves": [ + "Dragon Tail", + "Tackle" + ], + "charged_moves": [ + "Stomp", + "Ancient Power", + "Dragon Claw" + ], + "family": 696, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 697 + } + ], + "little": true + }, + "697": { + "name": "Tyrantrum", + "pokedex_id": 697, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Rock", + "Dragon" + ], + "attack": 227, + "defense": 191, + "stamina": 193, + "height": 2.5, + "weight": 270, + "quick_moves": [ + "Dragon Tail", + "Charm", + "Rock Throw" + ], + "charged_moves": [ + "Crunch", + "Stone Edge", + "Outrage", + "Earthquake" + ], + "family": 696, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "698": { + "name": "Amaura", + "pokedex_id": 698, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Rock", + "Ice" + ], + "attack": 124, + "defense": 109, + "stamina": 184, + "height": 1.3, + "weight": 25.2, + "quick_moves": [ + "Powder Snow", + "Frost Breath" + ], + "charged_moves": [ + "Weather Ball Ice", + "Ancient Power", + "Aurora Beam", + "Thunderbolt" + ], + "family": 698, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 699 + } + ], + "little": true + }, + "699": { + "name": "Aurorus", + "pokedex_id": 699, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Rock", + "Ice" + ], + "attack": 186, + "defense": 163, + "stamina": 265, + "height": 2.7, + "weight": 225, + "quick_moves": [ + "Powder Snow", + "Frost Breath", + "Rock Throw" + ], + "charged_moves": [ + "Weather Ball Ice", + "Ancient Power", + "Blizzard", + "Thunderbolt", + "Hyper Beam" + ], + "family": 698, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "700": { + "name": "Sylveon", + "pokedex_id": 700, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fairy" + ], + "attack": 203, + "defense": 205, + "stamina": 216, + "height": 1, + "weight": 23.5, + "quick_moves": [ + "Charm", + "Quick Attack" + ], + "charged_moves": [ + "Moonblast", + "Dazzling Gleam", + "Draining Kiss" + ], + "family": 133, + "flee_rate": 0.06, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "701": { + "name": "Hawlucha", + "pokedex_id": 701, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fighting", + "Flying" + ], + "attack": 195, + "defense": 153, + "stamina": 186, + "height": 0.8, + "weight": 21.5, + "quick_moves": [ + "Wing Attack", + "Low Kick", + "Poison Jab" + ], + "charged_moves": [ + "Flying Press", + "Sky Attack", + "X Scissor", + "Power Up Punch" + ], + "family": 701, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "702": { + "name": "Dedenne", + "pokedex_id": 702, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Electric", + "Fairy" + ], + "attack": 164, + "defense": 134, + "stamina": 167, + "height": 0.2, + "weight": 2.2, + "quick_moves": [ + "Tackle", + "Thunder Shock" + ], + "charged_moves": [ + "Parabolic Charge", + "Discharge", + "Play Rough" + ], + "family": 702, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "703": { + "name": "Carbink", + "pokedex_id": 703, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Rock", + "Fairy" + ], + "attack": 95, + "defense": 285, + "stamina": 137, + "height": 0.3, + "weight": 5.7, + "quick_moves": [ + "Tackle", + "Rock Throw" + ], + "charged_moves": [ + "Rock Slide", + "Moonblast", + "Power Gem" + ], + "family": 703, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "704": { + "name": "Goomy", + "pokedex_id": 704, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Dragon" + ], + "attack": 101, + "defense": 112, + "stamina": 128, + "height": 0.3, + "weight": 2.8, + "quick_moves": [ + "Water Gun", + "Tackle" + ], + "charged_moves": [ + "Dragon Pulse", + "Sludge Wave", + "Muddy Water" + ], + "family": 704, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 705 + } + ], + "little": true + }, + "705": { + "name": "Sliggoo", + "pokedex_id": 705, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Dragon" + ], + "attack": 159, + "defense": 176, + "stamina": 169, + "height": 0.8, + "weight": 17.5, + "quick_moves": [ + "Water Gun", + "Tackle" + ], + "charged_moves": [ + "Dragon Pulse", + "Sludge Wave", + "Muddy Water", + "Water Pulse" + ], + "family": 704, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 706 + } + ] + }, + "706": { + "name": "Goodra", + "pokedex_id": 706, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Dragon" + ], + "attack": 220, + "defense": 242, + "stamina": 207, + "height": 2, + "weight": 150.5, + "quick_moves": [ + "Water Gun", + "Dragon Breath" + ], + "charged_moves": [ + "Draco Meteor", + "Sludge Wave", + "Muddy Water", + "Power Whip" + ], + "family": 704, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "707": { + "name": "Klefki", + "pokedex_id": 707, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Steel", + "Fairy" + ], + "attack": 160, + "defense": 179, + "stamina": 149, + "height": 0.2, + "weight": 3, + "quick_moves": [ + "Astonish", + "Tackle" + ], + "charged_moves": [ + "Flash Cannon", + "Play Rough", + "Draining Kiss", + "Foul Play" + ], + "family": 707, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "708": { + "name": "Phantump", + "pokedex_id": 708, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Ghost", + "Grass" + ], + "attack": 125, + "defense": 103, + "stamina": 125, + "height": 0.4, + "weight": 7, + "quick_moves": [ + "Astonish", + "Tackle" + ], + "charged_moves": [ + "Seed Bomb", + "Shadow Ball", + "Foul Play" + ], + "family": 708, + "flee_rate": 0.1, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 709 + } + ], + "little": true + }, + "709": { + "name": "Trevenant", + "pokedex_id": 709, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Ghost", + "Grass" + ], + "attack": 201, + "defense": 154, + "stamina": 198, + "height": 1.5, + "weight": 71, + "quick_moves": [ + "Shadow Claw", + "Sucker Punch" + ], + "charged_moves": [ + "Seed Bomb", + "Shadow Ball", + "Foul Play" + ], + "family": 708, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "710": { + "name": "Pumpkaboo", + "pokedex_id": 710, + "default_form_id": 2641, + "forms": { + "2641": { + "name": "Small", + "proto": "PUMPKABOO_SMALL" + }, + "2642": { + "name": "Average", + "proto": "PUMPKABOO_AVERAGE" + }, + "2643": { + "name": "Large", + "proto": "PUMPKABOO_LARGE" + }, + "2644": { + "name": "Super", + "proto": "PUMPKABOO_SUPER" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Ghost", + "Grass" + ], + "attack": 121, + "defense": 123, + "stamina": 135, + "height": 0.4, + "weight": 5, + "quick_moves": [ + "Astonish", + "Razor Leaf" + ], + "charged_moves": [ + "Grass Knot", + "Shadow Sneak", + "Foul Play", + "Earthquake" + ], + "family": 710, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "evolutions": [ + { + "pokemon": 711 + } + ], + "little": true + }, + "711": { + "name": "Gourgeist", + "pokedex_id": 711, + "default_form_id": 2645, + "forms": { + "2645": { + "name": "Small", + "proto": "GOURGEIST_SMALL" + }, + "2646": { + "name": "Average", + "proto": "GOURGEIST_AVERAGE" + }, + "2647": { + "name": "Large", + "proto": "GOURGEIST_LARGE" + }, + "2648": { + "name": "Super", + "proto": "GOURGEIST_SUPER" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Ghost", + "Grass" + ], + "attack": 175, + "defense": 213, + "stamina": 163, + "height": 0.9, + "weight": 12.5, + "quick_moves": [ + "Hex", + "Razor Leaf" + ], + "charged_moves": [ + "Seed Bomb", + "Shadow Ball", + "Foul Play", + "Fire Blast" + ], + "family": 710, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75 + }, + "712": { + "name": "Bergmite", + "pokedex_id": 712, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Ice" + ], + "attack": 117, + "defense": 120, + "stamina": 146, + "height": 1, + "weight": 99.5, + "quick_moves": [ + "Bite", + "Tackle" + ], + "charged_moves": [ + "Crunch", + "Icy Wind", + "Mirror Coat" + ], + "family": 712, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 713 + } + ], + "little": true + }, + "713": { + "name": "Avalugg", + "pokedex_id": 713, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Ice" + ], + "attack": 196, + "defense": 240, + "stamina": 216, + "height": 2, + "weight": 505, + "quick_moves": [ + "Bite", + "Ice Fang" + ], + "charged_moves": [ + "Crunch", + "Avalanche", + "Earthquake", + "Body Slam", + "Mirror Coat" + ], + "family": 712, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "714": { + "name": "Noibat", + "pokedex_id": 714, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Flying", + "Dragon" + ], + "attack": 83, + "defense": 73, + "stamina": 120, + "height": 0.5, + "weight": 8, + "quick_moves": [ + "Wing Attack", + "Bite" + ], + "charged_moves": [ + "Dragon Pulse", + "Air Cutter", + "Heat Wave" + ], + "family": 714, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 4, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 715 + } + ], + "little": true + }, + "715": { + "name": "Noivern", + "pokedex_id": 715, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Flying", + "Dragon" + ], + "attack": 205, + "defense": 175, + "stamina": 198, + "height": 1.5, + "weight": 85, + "quick_moves": [ + "Air Slash", + "Bite" + ], + "charged_moves": [ + "Draco Meteor", + "Hurricane", + "Heat Wave", + "Psychic" + ], + "family": 714, + "flee_rate": 0.05, + "capture_rate": 0.15, + "legendary": false, + "mythic": false, + "buddy_group_number": 6, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "716": { + "name": "Xerneas", + "pokedex_id": 716, + "default_form_id": 2649, + "forms": { + "2649": { + "name": "Neutral", + "proto": "XERNEAS_NEUTRAL" + }, + "2650": { + "name": "Active", + "proto": "XERNEAS_ACTIVE" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fairy" + ], + "attack": 250, + "defense": 185, + "stamina": 246, + "height": 3, + "weight": 215, + "quick_moves": [ + "Tackle", + "Zen Headbutt" + ], + "charged_moves": [ + "Moonblast", + "Megahorn", + "Close Combat", + "Giga Impact", + "Thunder" + ], + "family": 716, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "717": { + "name": "Yveltal", + "pokedex_id": 717, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Dark", + "Flying" + ], + "attack": 250, + "defense": 185, + "stamina": 246, + "height": 5.8, + "weight": 203, + "quick_moves": [ + "Sucker Punch", + "Snarl", + "Gust" + ], + "charged_moves": [ + "Dark Pulse", + "Hurricane", + "Focus Blast", + "Hyper Beam", + "Psychic" + ], + "family": 717, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 7, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "718": { + "name": "Zygarde", + "pokedex_id": 718, + "default_form_id": 2591, + "forms": { + "2591": { + "name": "Ten Percent", + "proto": "ZYGARDE_TEN_PERCENT" + }, + "2592": { + "name": "Fifty Percent", + "proto": "ZYGARDE_FIFTY_PERCENT" + }, + "2593": { + "name": "Complete", + "proto": "ZYGARDE_COMPLETE" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Dragon", + "Ground" + ], + "quick_moves": [ + "Dragon Tail", + "Bite", + "Zen Headbutt" + ], + "charged_moves": [ + "Outrage", + "Earthquake", + "Crunch", + "Hyper Beam", + "Bulldoze" + ], + "family": 718, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "719": { + "name": "Diancie", + "pokedex_id": 719, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Rock", + "Fairy" + ], + "attack": 190, + "defense": 285, + "stamina": 137, + "height": 0.7, + "weight": 8.8, + "quick_moves": [ + "Tackle", + "Rock Throw" + ], + "charged_moves": [ + "Rock Slide", + "Moonblast", + "Power Gem" + ], + "family": 719, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": false, + "mythic": true, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "temp_evolutions": { + "1": { + "attack": 342, + "defense": 235, + "stamina": 137, + "unreleased": true, + "types": [ + "Fairy", + "Rock" + ] + } + } + }, + "720": { + "name": "Hoopa", + "pokedex_id": 720, + "default_form_id": 2651, + "forms": { + "2651": { + "name": "Confined", + "proto": "HOOPA_CONFINED" + }, + "2652": { + "name": "Unbound", + "proto": "HOOPA_UNBOUND", + "attack": 311, + "defense": 191, + "stamina": 173, + "height": 6.5, + "weight": 490, + "charged_moves": [ + "Shadow Ball", + "Dark Pulse", + "Psychic" + ], + "types": [ + "Psychic", + "Dark" + ] + } + }, + "types": [ + "Psychic", + "Ghost" + ], + "attack": 261, + "defense": 187, + "stamina": 173, + "height": 0.5, + "weight": 9, + "quick_moves": [ + "Confusion", + "Astonish" + ], + "charged_moves": [ + "Shadow Ball", + "Psybeam", + "Psychic" + ], + "family": 720, + "flee_rate": 1, + "legendary": false, + "mythic": true, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 6, + "generation": "Kalos" + }, + "721": { + "name": "Volcanion", + "pokedex_id": 721, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 6, + "generation": "Kalos", + "types": [ + "Fire", + "Water" + ], + "attack": 252, + "defense": 216, + "stamina": 190, + "height": 1.7, + "weight": 195, + "quick_moves": [ + "Incinerate", + "Water Gun", + "Take Down" + ], + "charged_moves": [ + "Hydro Pump", + "Overheat", + "Earth Power", + "Sludge Bomb" + ], + "family": 721, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": false, + "mythic": true, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "722": { + "name": "Rowlet", + "pokedex_id": 722, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "723": { + "name": "Dartrix", + "pokedex_id": 723, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "724": { + "name": "Decidueye", + "pokedex_id": 724, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "725": { + "name": "Litten", + "pokedex_id": 725, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "726": { + "name": "Torracat", + "pokedex_id": 726, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "727": { + "name": "Incineroar", + "pokedex_id": 727, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "728": { + "name": "Popplio", + "pokedex_id": 728, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "729": { + "name": "Brionne", + "pokedex_id": 729, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "730": { + "name": "Primarina", + "pokedex_id": 730, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "731": { + "name": "Pikipek", + "pokedex_id": 731, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "732": { + "name": "Trumbeak", + "pokedex_id": 732, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "733": { + "name": "Toucannon", + "pokedex_id": 733, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "734": { + "name": "Yungoos", + "pokedex_id": 734, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "735": { + "name": "Gumshoos", + "pokedex_id": 735, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "736": { + "name": "Grubbin", + "pokedex_id": 736, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "737": { + "name": "Charjabug", + "pokedex_id": 737, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "738": { + "name": "Vikavolt", + "pokedex_id": 738, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "739": { + "name": "Crabrawler", + "pokedex_id": 739, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "740": { + "name": "Crabominable", + "pokedex_id": 740, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "741": { + "name": "Oricorio", + "pokedex_id": 741, + "default_form_id": 2679, + "forms": { + "2679": { + "name": "Baile", + "proto": "ORICORIO_BAILE" + }, + "2680": { + "name": "Pompom", + "proto": "ORICORIO_POMPOM" + }, + "2681": { + "name": "Pau", + "proto": "ORICORIO_PAU" + }, + "2683": { + "name": "Sensu", + "proto": "ORICORIO_SENSU" + } + }, + "gen_id": 7, + "generation": "Alola" + }, + "742": { + "name": "Cutiefly", + "pokedex_id": 742, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "743": { + "name": "Ribombee", + "pokedex_id": 743, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "744": { + "name": "Rockruff", + "pokedex_id": 744, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "745": { + "name": "Lycanroc", + "pokedex_id": 745, + "default_form_id": 2684, + "forms": { + "2684": { + "name": "Midday", + "proto": "LYCANROC_MIDDAY" + }, + "2685": { + "name": "Midnight", + "proto": "LYCANROC_MIDNIGHT" + }, + "2686": { + "name": "Dusk", + "proto": "LYCANROC_DUSK" + } + }, + "gen_id": 7, + "generation": "Alola" + }, + "746": { + "name": "Wishiwashi", + "pokedex_id": 746, + "default_form_id": 2687, + "forms": { + "2687": { + "name": "Solo", + "proto": "WISHIWASHI_SOLO" + }, + "2688": { + "name": "School", + "proto": "WISHIWASHI_SCHOOL" + } + }, + "gen_id": 7, + "generation": "Alola" + }, + "747": { + "name": "Mareanie", + "pokedex_id": 747, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "748": { + "name": "Toxapex", + "pokedex_id": 748, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "749": { + "name": "Mudbray", + "pokedex_id": 749, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "750": { + "name": "Mudsdale", + "pokedex_id": 750, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "751": { + "name": "Dewpider", + "pokedex_id": 751, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "752": { + "name": "Araquanid", + "pokedex_id": 752, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "753": { + "name": "Fomantis", + "pokedex_id": 753, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "754": { + "name": "Lurantis", + "pokedex_id": 754, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "755": { + "name": "Morelull", + "pokedex_id": 755, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "756": { + "name": "Shiinotic", + "pokedex_id": 756, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "757": { + "name": "Salandit", + "pokedex_id": 757, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "758": { + "name": "Salazzle", + "pokedex_id": 758, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "759": { + "name": "Stufful", + "pokedex_id": 759, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "760": { + "name": "Bewear", + "pokedex_id": 760, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "761": { + "name": "Bounsweet", + "pokedex_id": 761, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "762": { + "name": "Steenee", + "pokedex_id": 762, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "763": { + "name": "Tsareena", + "pokedex_id": 763, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "764": { + "name": "Comfey", + "pokedex_id": 764, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "765": { + "name": "Oranguru", + "pokedex_id": 765, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "766": { + "name": "Passimian", + "pokedex_id": 766, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "767": { + "name": "Wimpod", + "pokedex_id": 767, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "768": { + "name": "Golisopod", + "pokedex_id": 768, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "769": { + "name": "Sandygast", + "pokedex_id": 769, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "770": { + "name": "Palossand", + "pokedex_id": 770, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "771": { + "name": "Pyukumuku", + "pokedex_id": 771, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "772": { + "name": "Type Null", + "pokedex_id": 772, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "773": { + "name": "Silvally", + "pokedex_id": 773, + "default_form_id": 2689, + "forms": { + "2689": { + "name": "Normal", + "proto": "SILVALLY_NORMAL" + }, + "2690": { + "name": "Bug", + "proto": "SILVALLY_BUG" + }, + "2691": { + "name": "Dark", + "proto": "SILVALLY_DARK" + }, + "2692": { + "name": "Dragon", + "proto": "SILVALLY_DRAGON" + }, + "2693": { + "name": "Electric", + "proto": "SILVALLY_ELECTRIC" + }, + "2694": { + "name": "Fairy", + "proto": "SILVALLY_FAIRY" + }, + "2695": { + "name": "Fighting", + "proto": "SILVALLY_FIGHTING" + }, + "2696": { + "name": "Fire", + "proto": "SILVALLY_FIRE" + }, + "2697": { + "name": "Flying", + "proto": "SILVALLY_FLYING" + }, + "2698": { + "name": "Ghost", + "proto": "SILVALLY_GHOST" + }, + "2699": { + "name": "Grass", + "proto": "SILVALLY_GRASS" + }, + "2700": { + "name": "Ground", + "proto": "SILVALLY_GROUND" + }, + "2701": { + "name": "Ice", + "proto": "SILVALLY_ICE" + }, + "2702": { + "name": "Poison", + "proto": "SILVALLY_POISON" + }, + "2703": { + "name": "Psychic", + "proto": "SILVALLY_PSYCHIC" + }, + "2704": { + "name": "Rock", + "proto": "SILVALLY_ROCK" + }, + "2705": { + "name": "Steel", + "proto": "SILVALLY_STEEL" + }, + "2706": { + "name": "Water", + "proto": "SILVALLY_WATER" + } + }, + "gen_id": 7, + "generation": "Alola" + }, + "774": { + "name": "Minior", + "pokedex_id": 774, + "default_form_id": 2707, + "forms": { + "2707": { + "name": "Meteor", + "proto": "MINIOR_METEOR" + }, + "2708": { + "name": "Blue", + "proto": "MINIOR_BLUE" + }, + "2709": { + "name": "Green", + "proto": "MINIOR_GREEN" + }, + "2710": { + "name": "Indigo", + "proto": "MINIOR_INDIGO" + }, + "2711": { + "name": "Orange", + "proto": "MINIOR_ORANGE" + }, + "2712": { + "name": "Red", + "proto": "MINIOR_RED" + }, + "2713": { + "name": "Violet", + "proto": "MINIOR_VIOLET" + }, + "2714": { + "name": "Yellow", + "proto": "MINIOR_YELLOW" + } + }, + "gen_id": 7, + "generation": "Alola" + }, + "775": { + "name": "Komala", + "pokedex_id": 775, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "776": { + "name": "Turtonator", + "pokedex_id": 776, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "777": { + "name": "Togedemaru", + "pokedex_id": 777, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "778": { + "name": "Mimikyu", + "pokedex_id": 778, + "default_form_id": 2715, + "forms": { + "2715": { + "name": "Busted", + "proto": "MIMIKYU_BUSTED" + }, + "2716": { + "name": "Disguised", + "proto": "MIMIKYU_DISGUISED" + } + }, + "gen_id": 7, + "generation": "Alola" + }, + "779": { + "name": "Bruxish", + "pokedex_id": 779, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "780": { + "name": "Drampa", + "pokedex_id": 780, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "781": { + "name": "Dhelmise", + "pokedex_id": 781, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "782": { + "name": "Jangmo O", + "pokedex_id": 782, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "783": { + "name": "Hakamo O", + "pokedex_id": 783, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "784": { + "name": "Kommo O", + "pokedex_id": 784, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "785": { + "name": "Tapu Koko", + "pokedex_id": 785, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "786": { + "name": "Tapu Lele", + "pokedex_id": 786, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "787": { + "name": "Tapu Bulu", + "pokedex_id": 787, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "788": { + "name": "Tapu Fini", + "pokedex_id": 788, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "789": { + "name": "Cosmog", + "pokedex_id": 789, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "790": { + "name": "Cosmoem", + "pokedex_id": 790, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "791": { + "name": "Solgaleo", + "pokedex_id": 791, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "792": { + "name": "Lunala", + "pokedex_id": 792, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "793": { + "name": "Nihilego", + "pokedex_id": 793, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "794": { + "name": "Buzzwole", + "pokedex_id": 794, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "795": { + "name": "Pheromosa", + "pokedex_id": 795, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "796": { + "name": "Xurkitree", + "pokedex_id": 796, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "797": { + "name": "Celesteela", + "pokedex_id": 797, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "798": { + "name": "Kartana", + "pokedex_id": 798, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "799": { + "name": "Guzzlord", + "pokedex_id": 799, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "800": { + "name": "Necrozma", + "pokedex_id": 800, + "default_form_id": 2717, + "forms": { + "2717": { + "name": "Normal", + "proto": "NECROZMA_NORMAL" + }, + "2718": { + "name": "Dusk Mane", + "proto": "NECROZMA_DUSK_MANE" + }, + "2719": { + "name": "Dawn Wings", + "proto": "NECROZMA_DAWN_WINGS" + }, + "2720": { + "name": "Ultra", + "proto": "NECROZMA_ULTRA" + } + }, + "gen_id": 7, + "generation": "Alola" + }, + "801": { + "name": "Magearna", + "pokedex_id": 801, + "default_form_id": 2721, + "forms": { + "2721": { + "name": "Normal", + "proto": "MAGEARNA_NORMAL" + }, + "2722": { + "name": "Original Color", + "proto": "MAGEARNA_ORIGINAL_COLOR" + } + }, + "gen_id": 7, + "generation": "Alola" + }, + "802": { + "name": "Marshadow", + "pokedex_id": 802, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "803": { + "name": "Poipole", + "pokedex_id": 803, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "804": { + "name": "Naganadel", + "pokedex_id": 804, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "805": { + "name": "Stakataka", + "pokedex_id": 805, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "806": { + "name": "Blacephalon", + "pokedex_id": 806, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "807": { + "name": "Zeraora", + "pokedex_id": 807, + "default_form_id": 0, + "gen_id": 7, + "generation": "Alola", + "forms": { + "0": { + "proto": "FORM_UNSET" + } + } + }, + "808": { + "name": "Meltan", + "pokedex_id": 808, + "default_form_id": 2321, + "forms": { + "2321": { + "name": "Normal", + "proto": "MELTAN_NORMAL" + }, + "2322": { + "name": "Shadow", + "proto": "MELTAN_SHADOW" + }, + "2323": { + "name": "Purified", + "proto": "MELTAN_PURIFIED" + } + }, + "gen_id": 7, + "generation": "Alola", + "types": [ + "Steel" + ], + "attack": 118, + "defense": 99, + "stamina": 130, + "height": 0.2, + "weight": 8, + "quick_moves": [ + "Thunder Shock" + ], + "charged_moves": [ + "Flash Cannon", + "Thunderbolt" + ], + "family": 808, + "capture_rate": 0.3, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 809 + } + ], + "little": true + }, + "809": { + "name": "Melmetal", + "pokedex_id": 809, + "default_form_id": 2324, + "forms": { + "2324": { + "name": "Normal", + "proto": "MELMETAL_NORMAL" + }, + "2325": { + "name": "Shadow", + "proto": "MELMETAL_SHADOW" + }, + "2326": { + "name": "Purified", + "proto": "MELMETAL_PURIFIED" + } + }, + "gen_id": 7, + "generation": "Alola", + "types": [ + "Steel" + ], + "attack": 226, + "defense": 190, + "stamina": 264, + "height": 2.5, + "weight": 800, + "quick_moves": [ + "Thunder Shock" + ], + "charged_moves": [ + "Flash Cannon", + "Thunderbolt", + "Hyper Beam", + "Rock Slide", + "Super Power" + ], + "family": 808, + "capture_rate": 0.3, + "legendary": false, + "mythic": true, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gym_defender_eligible": true + }, + "810": { + "name": "Grookey", + "pokedex_id": 810, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Grass" + ], + "attack": 122, + "defense": 91, + "stamina": 137, + "height": 0.3, + "weight": 5, + "quick_moves": [ + "Scratch", + "Razor Leaf" + ], + "charged_moves": [ + "Energy Ball", + "Grass Knot" + ], + "family": 810, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 811 + } + ], + "little": true + }, + "811": { + "name": "Thwackey", + "pokedex_id": 811, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Grass" + ], + "attack": 165, + "defense": 134, + "stamina": 172, + "height": 0.7, + "weight": 14, + "quick_moves": [ + "Scratch", + "Razor Leaf" + ], + "charged_moves": [ + "Energy Ball", + "Grass Knot" + ], + "family": 810, + "flee_rate": 0.1, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 812 + } + ] + }, + "812": { + "name": "Rillaboom", + "pokedex_id": 812, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Grass" + ], + "attack": 239, + "defense": 168, + "stamina": 225, + "height": 2.1, + "weight": 90, + "quick_moves": [ + "Scratch", + "Razor Leaf" + ], + "charged_moves": [ + "Energy Ball", + "Grass Knot", + "Earth Power" + ], + "family": 810, + "flee_rate": 0.1, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "813": { + "name": "Scorbunny", + "pokedex_id": 813, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Fire" + ], + "attack": 132, + "defense": 79, + "stamina": 137, + "height": 0.3, + "weight": 4.5, + "quick_moves": [ + "Tackle", + "Ember" + ], + "charged_moves": [ + "Flame Charge", + "Flamethrower" + ], + "family": 813, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 814 + } + ], + "little": true + }, + "814": { + "name": "Raboot", + "pokedex_id": 814, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Fire" + ], + "attack": 170, + "defense": 125, + "stamina": 163, + "height": 0.6, + "weight": 9, + "quick_moves": [ + "Tackle", + "Ember" + ], + "charged_moves": [ + "Flame Charge", + "Flamethrower" + ], + "family": 813, + "flee_rate": 0.1, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 815 + } + ] + }, + "815": { + "name": "Cinderace", + "pokedex_id": 815, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Fire" + ], + "attack": 238, + "defense": 163, + "stamina": 190, + "height": 1.4, + "weight": 33, + "quick_moves": [ + "Tackle", + "Ember" + ], + "charged_moves": [ + "Flame Charge", + "Flamethrower", + "Focus Blast" + ], + "family": 813, + "flee_rate": 0.1, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "816": { + "name": "Sobble", + "pokedex_id": 816, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Water" + ], + "attack": 132, + "defense": 79, + "stamina": 137, + "height": 0.3, + "weight": 4, + "quick_moves": [ + "Pound", + "Water Gun" + ], + "charged_moves": [ + "Water Pulse", + "Surf" + ], + "family": 816, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 817 + } + ], + "little": true + }, + "817": { + "name": "Drizzile", + "pokedex_id": 817, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Water" + ], + "attack": 186, + "defense": 113, + "stamina": 163, + "height": 0.7, + "weight": 11.5, + "quick_moves": [ + "Pound", + "Water Gun" + ], + "charged_moves": [ + "Water Pulse", + "Surf" + ], + "family": 816, + "flee_rate": 0.1, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 818 + } + ] + }, + "818": { + "name": "Inteleon", + "pokedex_id": 818, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Water" + ], + "attack": 262, + "defense": 142, + "stamina": 172, + "height": 1.9, + "weight": 45.2, + "quick_moves": [ + "Pound", + "Water Gun" + ], + "charged_moves": [ + "Water Pulse", + "Surf", + "Shadow Ball" + ], + "family": 816, + "flee_rate": 0.1, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "819": { + "name": "Skwovet", + "pokedex_id": 819, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Normal" + ], + "attack": 95, + "defense": 86, + "stamina": 172, + "height": 0.3, + "weight": 2.5, + "quick_moves": [ + "Tackle", + "Bite", + "Bullet Seed" + ], + "charged_moves": [ + "Body Slam", + "Crunch" + ], + "family": 819, + "flee_rate": 0.1, + "capture_rate": 0.6, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 820 + } + ], + "little": true + }, + "820": { + "name": "Greedent", + "pokedex_id": 820, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Normal" + ], + "attack": 160, + "defense": 156, + "stamina": 260, + "height": 0.6, + "weight": 6, + "quick_moves": [ + "Tackle", + "Bite", + "Bullet Seed" + ], + "charged_moves": [ + "Body Slam", + "Crunch" + ], + "family": 819, + "flee_rate": 0.07, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "821": { + "name": "Rookidee", + "pokedex_id": 821, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Flying" + ], + "attack": 88, + "defense": 67, + "stamina": 116, + "height": 0.2, + "weight": 1.8, + "quick_moves": [ + "Peck", + "Air Slash" + ], + "charged_moves": [ + "Drill Peck", + "Brave Bird" + ], + "family": 821, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 822 + } + ], + "little": true + }, + "822": { + "name": "Corvisquire", + "pokedex_id": 822, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Flying" + ], + "attack": 129, + "defense": 110, + "stamina": 169, + "height": 0.8, + "weight": 16, + "quick_moves": [ + "Peck", + "Air Slash" + ], + "charged_moves": [ + "Drill Peck", + "Brave Bird" + ], + "family": 821, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 823 + } + ] + }, + "823": { + "name": "Corviknight", + "pokedex_id": 823, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Flying", + "Steel" + ], + "attack": 163, + "defense": 192, + "stamina": 221, + "height": 2.2, + "weight": 75, + "quick_moves": [ + "Steel Wing", + "Air Slash" + ], + "charged_moves": [ + "Drill Peck", + "Brave Bird", + "Iron Head" + ], + "family": 821, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "824": { + "name": "Blipbug", + "pokedex_id": 824, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Bug" + ], + "attack": 46, + "defense": 67, + "stamina": 93, + "height": 0.4, + "weight": 8, + "quick_moves": [ + "Struggle Bug" + ], + "charged_moves": [ + "Struggle" + ], + "family": 824, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 825 + } + ], + "little": true + }, + "825": { + "name": "Dottler", + "pokedex_id": 825, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Bug", + "Psychic" + ], + "attack": 87, + "defense": 157, + "stamina": 137, + "height": 0.4, + "weight": 19.5, + "quick_moves": [ + "Struggle Bug", + "Confusion" + ], + "charged_moves": [ + "Bug Buzz", + "Psychic" + ], + "family": 824, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 826 + } + ] + }, + "826": { + "name": "Orbeetle", + "pokedex_id": 826, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Bug", + "Psychic" + ], + "attack": 156, + "defense": 240, + "stamina": 155, + "height": 0.4, + "weight": 40.8, + "quick_moves": [ + "Struggle Bug", + "Confusion" + ], + "charged_moves": [ + "Bug Buzz", + "Psychic" + ], + "family": 824, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "827": { + "name": "Nickit", + "pokedex_id": 827, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Dark" + ], + "attack": 85, + "defense": 82, + "stamina": 120, + "height": 0.6, + "weight": 8.9, + "quick_moves": [ + "Quick Attack", + "Snarl" + ], + "charged_moves": [ + "Night Slash", + "Play Rough" + ], + "family": 827, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 828 + } + ], + "little": true + }, + "828": { + "name": "Thievul", + "pokedex_id": 828, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Dark" + ], + "attack": 172, + "defense": 164, + "stamina": 172, + "height": 1.2, + "weight": 19.9, + "quick_moves": [ + "Quick Attack", + "Snarl" + ], + "charged_moves": [ + "Night Slash", + "Play Rough" + ], + "family": 827, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "829": { + "name": "Gossifleur", + "pokedex_id": 829, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Grass" + ], + "attack": 70, + "defense": 104, + "stamina": 120, + "height": 0.4, + "weight": 2.2, + "quick_moves": [ + "Razor Leaf", + "Bullet Seed" + ], + "charged_moves": [ + "Energy Ball", + "Grass Knot" + ], + "family": 829, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 830 + } + ], + "little": true + }, + "830": { + "name": "Eldegoss", + "pokedex_id": 830, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Grass" + ], + "attack": 148, + "defense": 211, + "stamina": 155, + "height": 0.5, + "weight": 2.5, + "quick_moves": [ + "Razor Leaf", + "Bullet Seed" + ], + "charged_moves": [ + "Energy Ball", + "Grass Knot" + ], + "family": 829, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "831": { + "name": "Wooloo", + "pokedex_id": 831, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Normal" + ], + "attack": 76, + "defense": 97, + "stamina": 123, + "height": 0.6, + "weight": 6, + "quick_moves": [ + "Tackle", + "Take Down" + ], + "charged_moves": [ + "Wild Charge", + "Payback", + "Stomp" + ], + "family": 831, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 832 + } + ], + "little": true + }, + "832": { + "name": "Dubwool", + "pokedex_id": 832, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Normal" + ], + "attack": 159, + "defense": 198, + "stamina": 176, + "height": 1.3, + "weight": 43, + "quick_moves": [ + "Tackle", + "Take Down" + ], + "charged_moves": [ + "Wild Charge", + "Payback", + "Body Slam" + ], + "family": 831, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "833": { + "name": "Chewtle", + "pokedex_id": 833, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Water" + ], + "attack": 114, + "defense": 85, + "stamina": 137, + "height": 0.3, + "weight": 8.5, + "quick_moves": [ + "Water Gun", + "Bite" + ], + "charged_moves": [ + "Body Slam", + "Surf" + ], + "family": 833, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 834 + } + ], + "little": true + }, + "834": { + "name": "Drednaw", + "pokedex_id": 834, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Water", + "Rock" + ], + "attack": 213, + "defense": 164, + "stamina": 207, + "height": 1, + "weight": 115.5, + "quick_moves": [ + "Waterfall", + "Bite" + ], + "charged_moves": [ + "Body Slam", + "Surf", + "Rock Blast" + ], + "family": 833, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "835": { + "name": "Yamper", + "pokedex_id": 835, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Electric" + ], + "attack": 80, + "defense": 90, + "stamina": 153, + "height": 0.3, + "weight": 13.5, + "quick_moves": [ + "Spark", + "Bite" + ], + "charged_moves": [ + "Crunch", + "Thunder" + ], + "family": 835, + "flee_rate": 0.1, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 836 + } + ], + "little": true + }, + "836": { + "name": "Boltund", + "pokedex_id": 836, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Electric" + ], + "attack": 197, + "defense": 131, + "stamina": 170, + "height": 1, + "weight": 34, + "quick_moves": [ + "Spark", + "Bite" + ], + "charged_moves": [ + "Crunch", + "Thunder" + ], + "family": 835, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 1, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "837": { + "name": "Rolycoly", + "pokedex_id": 837, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Rock" + ], + "attack": 73, + "defense": 91, + "stamina": 102, + "height": 0.3, + "weight": 12, + "quick_moves": [ + "Smack Down", + "Tackle" + ], + "charged_moves": [ + "Rock Blast", + "Rock Slide" + ], + "family": 837, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 838 + } + ], + "little": true + }, + "838": { + "name": "Carkol", + "pokedex_id": 838, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Rock", + "Fire" + ], + "attack": 114, + "defense": 157, + "stamina": 190, + "height": 1.1, + "weight": 78, + "quick_moves": [ + "Smack Down", + "Incinerate" + ], + "charged_moves": [ + "Rock Blast", + "Rock Slide", + "Flame Charge" + ], + "family": 837, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 839 + } + ] + }, + "839": { + "name": "Coalossal", + "pokedex_id": 839, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Rock", + "Fire" + ], + "attack": 146, + "defense": 198, + "stamina": 242, + "height": 2.8, + "weight": 310.5, + "quick_moves": [ + "Smack Down", + "Incinerate" + ], + "charged_moves": [ + "Rock Blast", + "Rock Slide", + "Flame Charge" + ], + "family": 837, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true + }, + "840": { + "name": "Applin", + "pokedex_id": 840, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Grass", + "Dragon" + ], + "attack": 71, + "defense": 116, + "stamina": 120, + "height": 0.2, + "weight": 0.5, + "quick_moves": [ + "Astonish" + ], + "charged_moves": [ + "Struggle" + ], + "family": 840, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 841 + }, + { + "pokemon": 842 + } + ], + "little": true + }, + "841": { + "name": "Flapple", + "pokedex_id": 841, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Grass", + "Dragon" + ], + "attack": 214, + "defense": 144, + "stamina": 172, + "height": 0.3, + "weight": 1, + "quick_moves": [ + "Bullet Seed", + "Dragon Breath" + ], + "charged_moves": [ + "Dragon Pulse", + "Fly", + "Outrage", + "Seed Bomb" + ], + "family": 840, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "842": { + "name": "Appletun", + "pokedex_id": 842, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Grass", + "Dragon" + ], + "attack": 178, + "defense": 146, + "stamina": 242, + "height": 0.4, + "weight": 13, + "quick_moves": [ + "Bullet Seed", + "Astonish" + ], + "charged_moves": [ + "Dragon Pulse", + "Energy Ball", + "Outrage", + "Seed Bomb" + ], + "family": 840, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "843": { + "name": "Silicobra", + "pokedex_id": 843, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Ground" + ], + "attack": 103, + "defense": 123, + "stamina": 141, + "height": 2.2, + "weight": 7.6, + "quick_moves": [ + "Mud Slap", + "Mud Shot" + ], + "charged_moves": [ + "Dig", + "Bulldoze", + "Earth Power" + ], + "family": 843, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 844 + } + ], + "little": true + }, + "844": { + "name": "Sandaconda", + "pokedex_id": 844, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Ground" + ], + "attack": 202, + "defense": 207, + "stamina": 176, + "height": 3.8, + "weight": 65.5, + "quick_moves": [ + "Mud Slap", + "Mud Shot" + ], + "charged_moves": [ + "Dig", + "Bulldoze", + "Earth Power" + ], + "family": 843, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "845": { + "name": "Cramorant", + "pokedex_id": 845, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Flying", + "Water" + ], + "attack": 173, + "defense": 163, + "stamina": 172, + "height": 0.8, + "weight": 18, + "quick_moves": [ + "Peck", + "Water Gun" + ], + "charged_moves": [ + "Drill Peck", + "Fly", + "Hydro Pump" + ], + "family": 845, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "846": { + "name": "Arrokuda", + "pokedex_id": 846, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Water" + ], + "attack": 118, + "defense": 72, + "stamina": 121, + "height": 0.5, + "weight": 1, + "quick_moves": [ + "Waterfall", + "Bite", + "Peck" + ], + "charged_moves": [ + "Crunch", + "Aqua Jet", + "Close Combat" + ], + "family": 846, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 847 + } + ], + "little": true + }, + "847": { + "name": "Barraskewda", + "pokedex_id": 847, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Water" + ], + "attack": 258, + "defense": 127, + "stamina": 156, + "height": 1.3, + "weight": 30, + "quick_moves": [ + "Waterfall", + "Bite", + "Peck" + ], + "charged_moves": [ + "Crunch", + "Aqua Jet", + "Close Combat" + ], + "family": 846, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "848": { + "name": "Toxel", + "pokedex_id": 848, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Electric", + "Poison" + ], + "attack": 97, + "defense": 65, + "stamina": 120, + "height": 0.4, + "weight": 11, + "quick_moves": [ + "Acid" + ], + "charged_moves": [ + "Power Up Punch" + ], + "family": 848, + "flee_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 849, + "form": 2463 + }, + { + "pokemon": 849, + "form": 2464 + } + ], + "little": true + }, + "849": { + "name": "Toxtricity", + "pokedex_id": 849, + "default_form_id": 2463, + "forms": { + "2463": { + "name": "Low Key", + "proto": "TOXTRICITY_LOW_KEY" + }, + "2464": { + "name": "Amped", + "proto": "TOXTRICITY_AMPED" + } + }, + "types": [ + "Electric", + "Poison" + ], + "attack": 224, + "defense": 140, + "stamina": 181, + "height": 1.6, + "weight": 40, + "quick_moves": [ + "Acid", + "Spark", + "Poison Jab" + ], + "charged_moves": [ + "Acid Spray", + "Discharge", + "Wild Charge", + "Power Up Punch" + ], + "family": 848, + "flee_rate": 0.05, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar" + }, + "850": { + "name": "Sizzlipede", + "pokedex_id": 850, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Fire", + "Bug" + ], + "attack": 118, + "defense": 90, + "stamina": 137, + "height": 0.7, + "weight": 1, + "quick_moves": [ + "Bug Bite", + "Ember" + ], + "charged_moves": [ + "Heat Wave", + "Bug Buzz", + "Crunch" + ], + "family": 850, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 851 + } + ], + "little": true + }, + "851": { + "name": "Centiskorch", + "pokedex_id": 851, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Fire", + "Bug" + ], + "attack": 220, + "defense": 158, + "stamina": 225, + "height": 3, + "weight": 120, + "quick_moves": [ + "Bug Bite", + "Ember" + ], + "charged_moves": [ + "Heat Wave", + "Bug Buzz", + "Crunch", + "Lunge" + ], + "family": 850, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "852": { + "name": "Clobbopus", + "pokedex_id": 852, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Fighting" + ], + "attack": 121, + "defense": 103, + "stamina": 137, + "height": 0.6, + "weight": 4, + "quick_moves": [ + "Rock Smash" + ], + "charged_moves": [ + "Brick Break", + "Super Power", + "Ice Punch" + ], + "family": 852, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 853 + } + ], + "little": true + }, + "853": { + "name": "Grapploct", + "pokedex_id": 853, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Fighting" + ], + "attack": 209, + "defense": 162, + "stamina": 190, + "height": 1.6, + "weight": 39, + "quick_moves": [ + "Rock Smash", + "Waterfall" + ], + "charged_moves": [ + "Brick Break", + "Super Power", + "Ice Punch", + "Surf" + ], + "family": 852, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "854": { + "name": "Sinistea", + "pokedex_id": 854, + "default_form_id": 2477, + "forms": { + "2477": { + "name": "Phony", + "proto": "SINISTEA_PHONY", + "evolutions": [ + { + "pokemon": 855, + "form": 2480 + } + ] + }, + "2478": { + "name": "Antique", + "proto": "SINISTEA_ANTIQUE", + "evolutions": [ + { + "pokemon": 855, + "form": 2481 + } + ] + } + }, + "types": [ + "Ghost" + ], + "attack": 134, + "defense": 96, + "stamina": 120, + "height": 0.1, + "weight": 0.2, + "quick_moves": [ + "Astonish", + "Sucker Punch" + ], + "charged_moves": [ + "Shadow Ball", + "Dark Pulse", + "Psychic" + ], + "family": 854, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar", + "evolutions": [ + { + "pokemon": 855 + } + ], + "little": true + }, + "855": { + "name": "Polteageist", + "pokedex_id": 855, + "default_form_id": 2480, + "forms": { + "2480": { + "name": "Phony", + "proto": "POLTEAGEIST_PHONY" + }, + "2481": { + "name": "Antique", + "proto": "POLTEAGEIST_ANTIQUE" + } + }, + "types": [ + "Ghost" + ], + "attack": 248, + "defense": 189, + "stamina": 155, + "height": 0.2, + "weight": 0.4, + "quick_moves": [ + "Astonish", + "Sucker Punch", + "Hex" + ], + "charged_moves": [ + "Shadow Ball", + "Dark Pulse", + "Psychic" + ], + "family": 854, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar" + }, + "856": { + "name": "Hatenna", + "pokedex_id": 856, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Psychic" + ], + "attack": 98, + "defense": 93, + "stamina": 123, + "height": 0.4, + "weight": 3.4, + "quick_moves": [ + "Confusion", + "Charm" + ], + "charged_moves": [ + "Psybeam", + "Psychic", + "Dazzling Gleam" + ], + "family": 856, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 857 + } + ], + "little": true + }, + "857": { + "name": "Hattrem", + "pokedex_id": 857, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Psychic" + ], + "attack": 153, + "defense": 133, + "stamina": 149, + "height": 0.6, + "weight": 4.8, + "quick_moves": [ + "Confusion", + "Charm" + ], + "charged_moves": [ + "Psybeam", + "Psychic", + "Dazzling Gleam" + ], + "family": 856, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 858 + } + ] + }, + "858": { + "name": "Hatterene", + "pokedex_id": 858, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Psychic", + "Fairy" + ], + "attack": 237, + "defense": 182, + "stamina": 149, + "height": 2.1, + "weight": 5.1, + "quick_moves": [ + "Confusion", + "Charm", + "Psycho Cut" + ], + "charged_moves": [ + "Psybeam", + "Psychic", + "Dazzling Gleam", + "Power Whip" + ], + "family": 856, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "859": { + "name": "Impidimp", + "pokedex_id": 859, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Dark", + "Fairy" + ], + "attack": 103, + "defense": 69, + "stamina": 128, + "height": 0.4, + "weight": 5.5, + "quick_moves": [ + "Bite", + "Sucker Punch" + ], + "charged_moves": [ + "Foul Play", + "Dark Pulse", + "Play Rough" + ], + "family": 859, + "flee_rate": 0.15, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 860 + } + ], + "little": true + }, + "860": { + "name": "Morgrem", + "pokedex_id": 860, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Dark", + "Fairy" + ], + "attack": 145, + "defense": 102, + "stamina": 163, + "height": 0.8, + "weight": 12.5, + "quick_moves": [ + "Bite", + "Sucker Punch" + ], + "charged_moves": [ + "Foul Play", + "Dark Pulse", + "Play Rough" + ], + "family": 859, + "flee_rate": 0.07, + "capture_rate": 0.25, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 861 + } + ] + }, + "861": { + "name": "Grimmsnarl", + "pokedex_id": 861, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Dark", + "Fairy" + ], + "attack": 227, + "defense": 139, + "stamina": 216, + "height": 1.5, + "weight": 61, + "quick_moves": [ + "Bite", + "Sucker Punch", + "Low Kick" + ], + "charged_moves": [ + "Foul Play", + "Dark Pulse", + "Play Rough", + "Power Up Punch" + ], + "family": 859, + "flee_rate": 0.05, + "capture_rate": 0.125, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "862": { + "name": "Obstagoon", + "pokedex_id": 862, + "default_form_id": 2501, + "forms": { + "2501": { + "name": "Normal", + "proto": "OBSTAGOON_NORMAL" + }, + "2502": { + "name": "Shadow", + "proto": "OBSTAGOON_SHADOW" + }, + "2503": { + "name": "Purified", + "proto": "OBSTAGOON_PURIFIED" + } + }, + "types": [ + "Dark", + "Normal" + ], + "attack": 180, + "defense": 194, + "stamina": 212, + "height": 1.6, + "weight": 46, + "quick_moves": [ + "Counter", + "Lick" + ], + "charged_moves": [ + "Cross Chop", + "Night Slash", + "Hyper Beam", + "Gunk Shot" + ], + "family": 263, + "flee_rate": 0.04, + "capture_rate": 0.04, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 10000, + "third_move_candy": 25, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar" + }, + "863": { + "name": "Perrserker", + "pokedex_id": 863, + "default_form_id": 2504, + "forms": { + "2504": { + "name": "Normal", + "proto": "PERRSERKER_NORMAL" + }, + "2505": { + "name": "Shadow", + "proto": "PERRSERKER_SHADOW" + }, + "2506": { + "name": "Purified", + "proto": "PERRSERKER_PURIFIED" + } + }, + "types": [ + "Steel" + ], + "attack": 195, + "defense": 162, + "stamina": 172, + "height": 0.8, + "weight": 28, + "quick_moves": [ + "Metal Claw", + "Shadow Claw" + ], + "charged_moves": [ + "Iron Head", + "Close Combat", + "Play Rough", + "Foul Play" + ], + "family": 52, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar" + }, + "864": { + "name": "Cursola", + "pokedex_id": 864, + "default_form_id": 2507, + "forms": { + "2507": { + "name": "Normal", + "proto": "CURSOLA_NORMAL" + }, + "2508": { + "name": "Shadow", + "proto": "CURSOLA_SHADOW" + }, + "2509": { + "name": "Purified", + "proto": "CURSOLA_PURIFIED" + } + }, + "types": [ + "Ghost" + ], + "attack": 253, + "defense": 182, + "stamina": 155, + "height": 1, + "weight": 0.4, + "quick_moves": [ + "Astonish", + "Hex" + ], + "charged_moves": [ + "Rock Blast", + "Brine", + "Night Shade", + "Shadow Ball" + ], + "family": 222, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar" + }, + "865": { + "name": "Sirfetchd", + "pokedex_id": 865, + "default_form_id": 2510, + "forms": { + "2510": { + "name": "Normal", + "proto": "SIRFETCHD_NORMAL" + }, + "2511": { + "name": "Shadow", + "proto": "SIRFETCHD_SHADOW" + }, + "2512": { + "name": "Purified", + "proto": "SIRFETCHD_PURIFIED" + } + }, + "types": [ + "Fighting" + ], + "attack": 248, + "defense": 176, + "stamina": 158, + "height": 0.8, + "weight": 117, + "quick_moves": [ + "Counter", + "Fury Cutter" + ], + "charged_moves": [ + "Close Combat", + "Brave Bird", + "Leaf Blade", + "Night Slash" + ], + "family": 83, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar" + }, + "866": { + "name": "Mr Rime", + "pokedex_id": 866, + "default_form_id": 2513, + "forms": { + "2513": { + "name": "Normal", + "proto": "MR_RIME_NORMAL" + }, + "2514": { + "name": "Shadow", + "proto": "MR_RIME_SHADOW" + }, + "2515": { + "name": "Purified", + "proto": "MR_RIME_PURIFIED" + } + }, + "types": [ + "Ice", + "Psychic" + ], + "attack": 212, + "defense": 179, + "stamina": 190, + "height": 1.5, + "weight": 58.2, + "quick_moves": [ + "Confusion", + "Zen Headbutt", + "Ice Shard" + ], + "charged_moves": [ + "Psybeam", + "Psychic", + "Ice Punch", + "Icy Wind" + ], + "family": 122, + "flee_rate": 0.09, + "capture_rate": 0.3, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar" + }, + "867": { + "name": "Runerigus", + "pokedex_id": 867, + "default_form_id": 2516, + "forms": { + "2516": { + "name": "Normal", + "proto": "RUNERIGUS_NORMAL" + }, + "2517": { + "name": "Shadow", + "proto": "RUNERIGUS_SHADOW" + }, + "2518": { + "name": "Purified", + "proto": "RUNERIGUS_PURIFIED" + } + }, + "types": [ + "Ground", + "Ghost" + ], + "attack": 163, + "defense": 237, + "stamina": 151, + "height": 1.6, + "weight": 66.6, + "quick_moves": [ + "Astonish" + ], + "charged_moves": [ + "Shadow Ball", + "Sand Tomb", + "Rock Tomb" + ], + "family": 562, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar" + }, + "868": { + "name": "Milcery", + "pokedex_id": 868, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Fairy" + ], + "attack": 90, + "defense": 97, + "stamina": 128, + "height": 0.2, + "weight": 0.3, + "quick_moves": [ + "Tackle", + "Charm" + ], + "charged_moves": [ + "Dazzling Gleam" + ], + "family": 868, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 869 + } + ], + "little": true + }, + "869": { + "name": "Alcremie", + "pokedex_id": 869, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Fairy" + ], + "attack": 203, + "defense": 203, + "stamina": 163, + "height": 0.3, + "weight": 0.5, + "quick_moves": [ + "Tackle", + "Charm" + ], + "charged_moves": [ + "Dazzling Gleam", + "Psyshock", + "Energy Ball" + ], + "family": 868, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true + }, + "870": { + "name": "Falinks", + "pokedex_id": 870, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Fighting" + ], + "attack": 193, + "defense": 170, + "stamina": 163, + "height": 3, + "weight": 62, + "quick_moves": [ + "Rock Smash", + "Counter" + ], + "charged_moves": [ + "Super Power", + "Brick Break", + "Megahorn" + ], + "family": 870, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "871": { + "name": "Pincurchin", + "pokedex_id": 871, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Electric" + ], + "attack": 176, + "defense": 161, + "stamina": 134, + "height": 0.3, + "weight": 1, + "quick_moves": [ + "Thunder Shock", + "Water Gun", + "Poison Jab" + ], + "charged_moves": [ + "Discharge", + "Thunderbolt", + "Bubble Beam" + ], + "family": 871, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "872": { + "name": "Snom", + "pokedex_id": 872, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Ice", + "Bug" + ], + "attack": 76, + "defense": 59, + "stamina": 102, + "height": 0.3, + "weight": 3.8, + "quick_moves": [ + "Powder Snow", + "Struggle Bug" + ], + "charged_moves": [ + "Icy Wind", + "Bug Buzz" + ], + "family": 872, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 873 + } + ], + "little": true + }, + "873": { + "name": "Frosmoth", + "pokedex_id": 873, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Ice", + "Bug" + ], + "attack": 230, + "defense": 155, + "stamina": 172, + "height": 1.3, + "weight": 42, + "quick_moves": [ + "Powder Snow", + "Bug Bite" + ], + "charged_moves": [ + "Icy Wind", + "Bug Buzz", + "Ice Beam", + "Hurricane" + ], + "family": 872, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "874": { + "name": "Stonjourner", + "pokedex_id": 874, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Rock" + ], + "attack": 222, + "defense": 182, + "stamina": 225, + "height": 2.5, + "weight": 520, + "quick_moves": [ + "Rock Throw" + ], + "charged_moves": [ + "Stone Edge", + "Rock Slide", + "Stomp" + ], + "family": 874, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "875": { + "name": "Eiscue", + "pokedex_id": 875, + "default_form_id": 2540, + "forms": { + "2540": { + "name": "Ice", + "proto": "EISCUE_ICE" + }, + "2541": { + "name": "Noice", + "proto": "EISCUE_NOICE", + "attack": 173, + "defense": 139, + "stamina": 181 + } + }, + "types": [ + "Ice" + ], + "attack": 148, + "defense": 195, + "stamina": 181, + "height": 1.4, + "weight": 89, + "quick_moves": [ + "Powder Snow" + ], + "charged_moves": [ + "Icy Wind", + "Weather Ball Ice", + "Surf" + ], + "family": 875, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar" + }, + "876": { + "name": "Indeedee", + "pokedex_id": 876, + "default_form_id": 2542, + "forms": { + "2542": { + "name": "Male", + "proto": "INDEEDEE_MALE" + }, + "2543": { + "name": "Female", + "proto": "INDEEDEE_FEMALE", + "attack": 184, + "defense": 184, + "stamina": 172, + "charged_moves": [ + "Psybeam", + "Psychic", + "Energy Ball" + ] + } + }, + "types": [ + "Psychic", + "Normal" + ], + "attack": 208, + "defense": 166, + "stamina": 155, + "height": 0.9, + "weight": 28, + "quick_moves": [ + "Extrasensory" + ], + "charged_moves": [ + "Psybeam", + "Psychic", + "Shadow Ball" + ], + "family": 876, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar" + }, + "877": { + "name": "Morpeko", + "pokedex_id": 877, + "default_form_id": 2544, + "forms": { + "2544": { + "name": "Full Belly", + "proto": "MORPEKO_FULL_BELLY" + }, + "2545": { + "name": "Hangry", + "proto": "MORPEKO_HANGRY" + } + }, + "types": [ + "Electric", + "Dark" + ], + "attack": 192, + "defense": 121, + "stamina": 151, + "height": 0.3, + "weight": 3, + "quick_moves": [ + "Thunder Shock", + "Bite" + ], + "charged_moves": [ + "Crunch", + "Payback", + "Thunderbolt", + "Wild Charge" + ], + "family": 877, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 3, + "third_move_stardust": 50000, + "third_move_candy": 50, + "gym_defender_eligible": true, + "gen_id": 8, + "generation": "Galar" + }, + "878": { + "name": "Cufant", + "pokedex_id": 878, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Steel" + ], + "attack": 140, + "defense": 91, + "stamina": 176, + "height": 1.2, + "weight": 100, + "quick_moves": [ + "Tackle", + "Rock Smash" + ], + "charged_moves": [ + "Iron Head", + "Dig", + "Play Rough" + ], + "family": 878, + "flee_rate": 0.2, + "capture_rate": 0.5, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 879 + } + ], + "little": true + }, + "879": { + "name": "Copperajah", + "pokedex_id": 879, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Steel" + ], + "attack": 226, + "defense": 126, + "stamina": 263, + "height": 1.2, + "weight": 100, + "quick_moves": [ + "Tackle", + "Rock Smash" + ], + "charged_moves": [ + "Iron Head", + "Dig", + "Play Rough", + "Heavy Slam" + ], + "family": 878, + "flee_rate": 0.07, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "880": { + "name": "Dracozolt", + "pokedex_id": 880, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Electric", + "Dragon" + ], + "attack": 195, + "defense": 165, + "stamina": 207, + "height": 1.8, + "weight": 190, + "quick_moves": [ + "Dragon Tail", + "Thunder Shock" + ], + "charged_moves": [ + "Discharge", + "Dragon Pulse", + "Ancient Power" + ], + "family": 880, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "881": { + "name": "Arctozolt", + "pokedex_id": 881, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Electric", + "Ice" + ], + "attack": 190, + "defense": 166, + "stamina": 207, + "height": 2.3, + "weight": 150, + "quick_moves": [ + "Powder Snow", + "Thunder Shock" + ], + "charged_moves": [ + "Discharge", + "Avalanche", + "Ancient Power" + ], + "family": 881, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "882": { + "name": "Dracovish", + "pokedex_id": 882, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Water", + "Dragon" + ], + "attack": 175, + "defense": 185, + "stamina": 207, + "height": 2.3, + "weight": 215, + "quick_moves": [ + "Dragon Breath", + "Water Gun" + ], + "charged_moves": [ + "Brine", + "Dragon Pulse", + "Ancient Power" + ], + "family": 882, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "883": { + "name": "Arctovish", + "pokedex_id": 883, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Water", + "Ice" + ], + "attack": 171, + "defense": 185, + "stamina": 207, + "height": 2, + "weight": 175, + "quick_moves": [ + "Powder Snow", + "Water Gun" + ], + "charged_moves": [ + "Brine", + "Avalanche", + "Ancient Power" + ], + "family": 883, + "flee_rate": 0.09, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "884": { + "name": "Duraludon", + "pokedex_id": 884, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Steel", + "Dragon" + ], + "attack": 239, + "defense": 185, + "stamina": 172, + "height": 1.8, + "weight": 40, + "quick_moves": [ + "Dragon Tail", + "Metal Claw" + ], + "charged_moves": [ + "Flash Cannon", + "Dragon Claw", + "Hyper Beam" + ], + "family": 884, + "flee_rate": 0.1, + "capture_rate": 0.2, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "885": { + "name": "Dreepy", + "pokedex_id": 885, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Dragon", + "Ghost" + ], + "attack": 117, + "defense": 61, + "stamina": 99, + "height": 0.5, + "weight": 2, + "quick_moves": [ + "Astonish", + "Quick Attack" + ], + "charged_moves": [ + "Struggle" + ], + "family": 885, + "flee_rate": 0.09, + "capture_rate": 0.4, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 886 + } + ], + "little": true + }, + "886": { + "name": "Drakloak", + "pokedex_id": 886, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Dragon", + "Ghost" + ], + "attack": 163, + "defense": 105, + "stamina": 169, + "height": 1.4, + "weight": 11, + "quick_moves": [ + "Astonish", + "Dragon Tail" + ], + "charged_moves": [ + "Dragon Pulse", + "Shadow Ball", + "Outrage" + ], + "family": 885, + "flee_rate": 0.07, + "capture_rate": 0.1, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true, + "evolutions": [ + { + "pokemon": 887 + } + ] + }, + "887": { + "name": "Dragapult", + "pokedex_id": 887, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Dragon", + "Ghost" + ], + "attack": 266, + "defense": 170, + "stamina": 204, + "height": 3, + "weight": 50, + "quick_moves": [ + "Hex", + "Dragon Tail" + ], + "charged_moves": [ + "Dragon Pulse", + "Shadow Ball", + "Outrage" + ], + "family": 885, + "flee_rate": 0.05, + "capture_rate": 0.05, + "legendary": false, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 5, + "third_move_stardust": 75000, + "third_move_candy": 75, + "gym_defender_eligible": true + }, + "888": { + "name": "Zacian", + "pokedex_id": 888, + "default_form_id": 2577, + "forms": { + "2576": { + "name": "Crowned Sword", + "proto": "ZACIAN_CROWNED_SWORD", + "attack": 332, + "defense": 240, + "stamina": 192 + }, + "2577": { + "name": "Hero", + "proto": "ZACIAN_HERO", + "types": [ + "Fairy" + ] + } + }, + "types": [ + "Fairy", + "Steel" + ], + "attack": 254, + "defense": 236, + "stamina": 192, + "height": 2.8, + "weight": 110, + "quick_moves": [ + "Metal Claw", + "Snarl", + "Quick Attack", + "Fire Fang" + ], + "charged_moves": [ + "Play Rough", + "Iron Head", + "Wild Charge", + "Close Combat" + ], + "family": 888, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 8, + "generation": "Galar" + }, + "889": { + "name": "Zamazenta", + "pokedex_id": 889, + "default_form_id": 2579, + "forms": { + "2578": { + "name": "Crowned Shield", + "proto": "ZAMAZENTA_CROWNED_SHIELD", + "attack": 250, + "defense": 292, + "stamina": 192 + }, + "2579": { + "name": "Hero", + "proto": "ZAMAZENTA_HERO", + "types": [ + "Fighting" + ] + } + }, + "types": [ + "Fighting", + "Steel" + ], + "attack": 254, + "defense": 236, + "stamina": 192, + "height": 2.9, + "weight": 210, + "quick_moves": [ + "Metal Claw", + "Snarl", + "Quick Attack", + "Ice Fang" + ], + "charged_moves": [ + "Moonblast", + "Iron Head", + "Crunch", + "Close Combat" + ], + "family": 889, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 3, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 8, + "generation": "Galar" + }, + "890": { + "name": "Eternatus", + "pokedex_id": 890, + "default_form_id": 2581, + "forms": { + "2580": { + "name": "Eternamax", + "proto": "ETERNATUS_ETERNAMAX", + "attack": 251, + "defense": 505, + "stamina": 452, + "charged_moves": [ + "Cross Poison", + "Dragon Pulse", + "Flamethrower", + "Hyper Beam" + ] + }, + "2581": { + "name": "Normal", + "proto": "ETERNATUS_NORMAL" + } + }, + "types": [ + "Poison", + "Dragon" + ], + "attack": 278, + "defense": 192, + "stamina": 268, + "height": 20, + "weight": 950, + "quick_moves": [ + "Dragon Tail", + "Poison Jab" + ], + "charged_moves": [ + "Cross Poison", + "Dragon Pulse", + "Flamethrower" + ], + "family": 890, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 8, + "generation": "Galar" + }, + "891": { + "name": "Kubfu", + "pokedex_id": 891, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Fighting" + ], + "attack": 170, + "defense": 112, + "stamina": 155, + "height": 0.6, + "weight": 12, + "quick_moves": [ + "Rock Smash", + "Counter" + ], + "charged_moves": [ + "Brick Break", + "Dynamic Punch", + "Close Combat" + ], + "family": 891, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "evolutions": [ + { + "pokemon": 892, + "form": 2723 + }, + { + "pokemon": 892, + "form": 2724 + } + ], + "little": true + }, + "892": { + "name": "Urshifu", + "pokedex_id": 892, + "default_form_id": 2723, + "forms": { + "2723": { + "name": "Single Strike", + "proto": "URSHIFU_SINGLE_STRIKE", + "quick_moves": [ + "Rock Smash", + "Counter", + "Sucker Punch" + ], + "charged_moves": [ + "Brick Break", + "Dynamic Punch", + "Close Combat", + "Payback" + ], + "types": [ + "Fighting", + "Dark" + ] + }, + "2724": { + "name": "Rapid Strike", + "proto": "URSHIFU_RAPID_STRIKE", + "quick_moves": [ + "Rock Smash", + "Counter", + "Waterfall" + ], + "charged_moves": [ + "Brick Break", + "Dynamic Punch", + "Close Combat", + "Aqua Jet" + ], + "types": [ + "Fighting", + "Water" + ] + } + }, + "types": [ + "Fighting" + ], + "attack": 254, + "defense": 177, + "stamina": 225, + "height": 1.9, + "weight": 105, + "quick_moves": [ + "Rock Smash", + "Counter" + ], + "charged_moves": [ + "Brick Break", + "Dynamic Punch", + "Close Combat" + ], + "family": 891, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 8, + "generation": "Galar" + }, + "893": { + "name": "Zarude", + "pokedex_id": 893, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Dark", + "Grass" + ], + "attack": 242, + "defense": 215, + "stamina": 233, + "height": 1.8, + "weight": 70, + "quick_moves": [ + "Vine Whip", + "Bite" + ], + "charged_moves": [ + "Power Whip", + "Energy Ball", + "Dark Pulse" + ], + "family": 893, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": false, + "mythic": true, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "894": { + "name": "Regieleki", + "pokedex_id": 894, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Electric" + ], + "attack": 250, + "defense": 125, + "stamina": 190, + "height": 1.2, + "weight": 145, + "quick_moves": [ + "Thunder Shock", + "Lock On" + ], + "charged_moves": [ + "Hyper Beam", + "Thunder", + "Zap Cannon" + ], + "family": 894, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "895": { + "name": "Regidrago", + "pokedex_id": 895, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Dragon" + ], + "attack": 202, + "defense": 101, + "stamina": 400, + "height": 2.1, + "weight": 200, + "quick_moves": [ + "Bite" + ], + "charged_moves": [ + "Hyper Beam", + "Outrage", + "Dragon Pulse" + ], + "family": 895, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "896": { + "name": "Glastrier", + "pokedex_id": 896, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Ice" + ], + "attack": 246, + "defense": 223, + "stamina": 225, + "height": 2.2, + "weight": 800, + "quick_moves": [ + "Tackle", + "Take Down" + ], + "charged_moves": [ + "Avalanche", + "Icy Wind", + "Bulldoze" + ], + "family": 896, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "897": { + "name": "Spectrier", + "pokedex_id": 897, + "default_form_id": 0, + "forms": { + "0": { + "proto": "FORM_UNSET" + } + }, + "gen_id": 8, + "generation": "Galar", + "types": [ + "Ghost" + ], + "attack": 273, + "defense": 146, + "stamina": 205, + "height": 2, + "weight": 44.5, + "quick_moves": [ + "Tackle", + "Take Down" + ], + "charged_moves": [ + "Shadow Ball", + "Foul Play", + "Bulldoze" + ], + "family": 897, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100 + }, + "898": { + "name": "Calyrex", + "pokedex_id": 898, + "default_form_id": 2725, + "forms": { + "2725": { + "name": "Normal", + "proto": "CALYREX_NORMAL" + }, + "2726": { + "name": "Ice Rider", + "proto": "CALYREX_ICE_RIDER", + "attack": 268, + "defense": 246, + "stamina": 205, + "height": 2.4, + "weight": 809.1, + "quick_moves": [ + "Confusion", + "Take Down" + ], + "charged_moves": [ + "Psyshock", + "Psychic", + "Energy Ball", + "Avalanche" + ], + "types": [ + "Psychic", + "Ice" + ] + }, + "2727": { + "name": "Shadow Rider", + "proto": "CALYREX_SHADOW_RIDER", + "attack": 324, + "defense": 194, + "stamina": 205, + "height": 2.4, + "weight": 53.6, + "quick_moves": [ + "Confusion", + "Take Down" + ], + "charged_moves": [ + "Psyshock", + "Psychic", + "Energy Ball", + "Shadow Ball" + ], + "types": [ + "Psychic", + "Ghost" + ] + } + }, + "types": [ + "Psychic", + "Grass" + ], + "attack": 162, + "defense": 162, + "stamina": 225, + "height": 1.1, + "weight": 7.7, + "quick_moves": [ + "Pound", + "Confusion" + ], + "charged_moves": [ + "Psyshock", + "Psychic", + "Energy Ball" + ], + "family": 898, + "flee_rate": 0.1, + "capture_rate": 0.02, + "legendary": true, + "mythic": false, + "buddy_group_number": 2, + "buddy_distance": 20, + "third_move_stardust": 100000, + "third_move_candy": 100, + "gen_id": 8, + "generation": "Galar" + } + }, + "types": { + "None": { + }, + "Normal": { + "immunes": [ + "Ghost" + ], + "weaknesses": [ + "Fighting" + ], + "resistances": [ + "None" + ], + "strengths": [] + }, + "Fighting": { + "immunes": [], + "weaknesses": [ + "Flying", + "Psychic", + "Fairy" + ], + "resistances": [ + "Bug", + "Rock", + "Dark" + ], + "strengths": [ + "Normal", + "Ice", + "Rock", + "Dark", + "Steel" + ] + }, + "Flying": { + "immunes": [ + "Flying" + ], + "weaknesses": [ + "Electric", + "Ice", + "Rock" + ], + "resistances": [ + "Grass", + "Fighting", + "Bug" + ], + "strengths": [ + "Grass", + "Fighting", + "Bug" + ] + }, + "Poison": { + "immunes": [], + "weaknesses": [ + "Ground", + "Psychic" + ], + "resistances": [ + "Grass", + "Fighting", + "Poison", + "Bug", + "Fairy" + ], + "strengths": [ + "Grass", + "Fairy" + ] + }, + "Ground": { + "immunes": [ + "Flying" + ], + "weaknesses": [ + "Water", + "Grass", + "Ice" + ], + "resistances": [ + "Poison", + "Rock" + ], + "strengths": [ + "Fire", + "Electric", + "Poison", + "Rock", + "Steel" + ] + }, + "Rock": { + "immunes": [], + "weaknesses": [ + "Water", + "Grass", + "Fighting", + "Ground", + "Steel" + ], + "resistances": [ + "Normal", + "Fire", + "Poison", + "Flying" + ], + "strengths": [ + "Fire", + "Ice", + "Flying", + "Bug" + ] + }, + "Bug": { + "immunes": [], + "weaknesses": [ + "Fire", + "Flying", + "Rock" + ], + "resistances": [ + "Grass", + "Fighting", + "Ground" + ], + "strengths": [ + "Grass", + "Psychic", + "Dark" + ] + }, + "Ghost": { + "immunes": [ + "Normal", + "Fighting" + ], + "weaknesses": [ + "Ghost", + "Dark" + ], + "resistances": [ + "Poison", + "Bug" + ], + "strengths": [ + "Psychic", + "Ghost" + ] + }, + "Steel": { + "immunes": [ + "Poison" + ], + "weaknesses": [ + "Fire", + "Fighting", + "Ground" + ], + "resistances": [ + "Normal", + "Grass", + "Ice", + "Flying", + "Psychic", + "Bug", + "Rock", + "Dragon", + "Steel", + "Fairy" + ], + "strengths": [ + "Ice", + "Rock", + "Fairy" + ] + }, + "Fire": { + "immunes": [], + "weaknesses": [ + "Water", + "Ground", + "Rock" + ], + "resistances": [ + "Fire", + "Grass", + "Ice", + "Bug", + "Steel", + "Fairy" + ], + "strengths": [ + "Grass", + "Ice", + "Bug", + "Steel" + ] + }, + "Water": { + "immunes": [], + "weaknesses": [ + "Grass", + "Electric" + ], + "resistances": [ + "Fire", + "Water", + "Ice", + "Steel" + ], + "strengths": [ + "Water", + "Ground", + "Rock" + ] + }, + "Grass": { + "immunes": [], + "weaknesses": [ + "Fire", + "Ice", + "Poison", + "Flying", + "Bug" + ], + "resistances": [ + "Water", + "Grass", + "Electric", + "Ground" + ], + "strengths": [ + "Water", + "Ground", + "Rock" + ] + }, + "Electric": { + "immunes": [], + "weaknesses": [ + "Ground" + ], + "resistances": [ + "Electric", + "Flying", + "Steel" + ], + "strengths": [ + "Water", + "Flying" + ] + }, + "Psychic": { + "immunes": [], + "weaknesses": [ + "Bug", + "Ghost", + "Dark" + ], + "resistances": [ + "Fighting", + "Psychic" + ], + "strengths": [ + "Fighting", + "Poison" + ] + }, + "Ice": { + "immunes": [], + "weaknesses": [ + "Fire", + "Fighting", + "Rock", + "Steel" + ], + "resistances": [ + "Ice" + ], + "strengths": [ + "Grass", + "Ground", + "Flying", + "Dragon" + ] + }, + "Dragon": { + "immunes": [], + "weaknesses": [ + "Ice", + "Dragon", + "Fairy" + ], + "resistances": [ + "Fire", + "Water", + "Grass", + "Electric" + ], + "strengths": [ + "Dragon" + ] + }, + "Dark": { + "immunes": [ + "Psychic" + ], + "weaknesses": [ + "Fighting", + "Bug", + "Fairy" + ], + "resistances": [ + "Ghost", + "Dark" + ], + "strengths": [ + "Psychic", + "Ghost" + ] + }, + "Fairy": { + "immunes": [ + "Dragon" + ], + "weaknesses": [ + "Poison", + "Steel" + ], + "resistances": [ + "Fighting", + "Bug", + "Dark" + ], + "strengths": [ + "Fighting", + "Dragon", + "Dark" + ] + } + }, + "items": { + "1": { + "name": "Poke Ball", + "proto": "ITEM_POKE_BALL", + "type": "Pokeball", + "category": "Pokeball", + "min_trainer_level": 1 + }, + "2": { + "name": "Great Ball", + "proto": "ITEM_GREAT_BALL", + "type": "Pokeball", + "category": "Pokeball", + "min_trainer_level": 12 + }, + "3": { + "name": "Ultra Ball", + "proto": "ITEM_ULTRA_BALL", + "type": "Pokeball", + "category": "Pokeball", + "min_trainer_level": 20 + }, + "4": { + "name": "Master Ball", + "proto": "ITEM_MASTER_BALL", + "type": "Pokeball", + "category": "Pokeball", + "min_trainer_level": 100 + }, + "5": { + "name": "Premier Ball", + "proto": "ITEM_PREMIER_BALL", + "type": "Pokeball", + "category": "Pokeball", + "min_trainer_level": 100 + }, + "101": { + "name": "Potion", + "proto": "ITEM_POTION", + "type": "Potion", + "category": "Medicine", + "min_trainer_level": 5 + }, + "102": { + "name": "Super Potion", + "proto": "ITEM_SUPER_POTION", + "type": "Potion", + "category": "Medicine", + "min_trainer_level": 10 + }, + "103": { + "name": "Hyper Potion", + "proto": "ITEM_HYPER_POTION", + "type": "Potion", + "category": "Medicine", + "min_trainer_level": 15 + }, + "104": { + "name": "Max Potion", + "proto": "ITEM_MAX_POTION", + "type": "Potion", + "category": "Medicine", + "min_trainer_level": 25 + }, + "201": { + "name": "Revive", + "proto": "ITEM_REVIVE", + "type": "Revive", + "category": "Medicine", + "min_trainer_level": 5 + }, + "202": { + "name": "Max Revive", + "proto": "ITEM_MAX_REVIVE", + "type": "Revive", + "category": "Medicine", + "min_trainer_level": 30 + }, + "301": { + "name": "Lucky Egg", + "proto": "ITEM_LUCKY_EGG", + "type": "Xp Boost", + "category": "Xp Boost", + "min_trainer_level": 1 + }, + "401": { + "name": "Incense Ordinary", + "proto": "ITEM_INCENSE_ORDINARY", + "type": "Incense", + "category": "Incense", + "min_trainer_level": 1 + }, + "405": { + "name": "Incense Beluga Box", + "proto": "ITEM_INCENSE_BELUGA_BOX", + "type": "Incense", + "category": "Incense", + "min_trainer_level": 1 + }, + "501": { + "name": "Troy Disk", + "proto": "ITEM_TROY_DISK", + "type": "Disk", + "category": "Disk", + "min_trainer_level": 1 + }, + "502": { + "name": "Troy Disk Glacial", + "proto": "ITEM_TROY_DISK_GLACIAL", + "type": "Disk", + "category": "Disk", + "min_trainer_level": 1 + }, + "503": { + "name": "Troy Disk Mossy", + "proto": "ITEM_TROY_DISK_MOSSY", + "type": "Disk", + "category": "Disk", + "min_trainer_level": 1 + }, + "504": { + "name": "Troy Disk Magnetic", + "proto": "ITEM_TROY_DISK_MAGNETIC", + "type": "Disk", + "category": "Disk", + "min_trainer_level": 1 + }, + "505": { + "name": "Troy Disk Rainy", + "proto": "ITEM_TROY_DISK_RAINY", + "type": "Disk", + "category": "Disk", + "min_trainer_level": 1 + }, + "602": { + "name": "X Attack", + "proto": "ITEM_X_ATTACK", + "type": "Battle", + "category": "Boost", + "min_trainer_level": 100 + }, + "603": { + "name": "X Defense", + "proto": "ITEM_X_DEFENSE", + "type": "Battle", + "category": "Boost", + "min_trainer_level": 100 + }, + "604": { + "name": "X Miracle", + "proto": "ITEM_X_MIRACLE", + "type": "Battle", + "category": "Boost", + "min_trainer_level": 100 + }, + "701": { + "name": "Razz Berry", + "proto": "ITEM_RAZZ_BERRY", + "type": "Food", + "category": "Food", + "min_trainer_level": 8 + }, + "702": { + "name": "Bluk Berry", + "proto": "ITEM_BLUK_BERRY", + "type": "Food", + "category": "Food", + "min_trainer_level": 100 + }, + "703": { + "name": "Nanab Berry", + "proto": "ITEM_NANAB_BERRY", + "type": "Food", + "category": "Food", + "min_trainer_level": 4 + }, + "704": { + "name": "Wepar Berry", + "proto": "ITEM_WEPAR_BERRY", + "type": "Food", + "category": "Food", + "min_trainer_level": 100 + }, + "705": { + "name": "Pinap Berry", + "proto": "ITEM_PINAP_BERRY", + "type": "Food", + "category": "Food", + "min_trainer_level": 18 + }, + "706": { + "name": "Golden Razz Berry", + "proto": "ITEM_GOLDEN_RAZZ_BERRY", + "type": "Food", + "category": "Food", + "min_trainer_level": 10 + }, + "708": { + "name": "Golden Pinap Berry", + "proto": "ITEM_GOLDEN_PINAP_BERRY", + "type": "Food", + "category": "Food", + "min_trainer_level": 20 + }, + "801": { + "name": "Special Camera", + "proto": "ITEM_SPECIAL_CAMERA", + "type": "Camera", + "category": "Camera", + "min_trainer_level": 100 + }, + "802": { + "name": "Sticker Inventory", + "proto": "ITEM_STICKER_INVENTORY", + "type": "Sticker Inventory", + "category": "Sticker", + "min_trainer_level": 100 + }, + "901": { + "name": "Incubator Basic Unlimited", + "proto": "ITEM_INCUBATOR_BASIC_UNLIMITED", + "type": "Incubator", + "category": "Incubator", + "min_trainer_level": 100 + }, + "902": { + "name": "Incubator Basic", + "proto": "ITEM_INCUBATOR_BASIC", + "type": "Incubator", + "category": "Incubator", + "min_trainer_level": 1 + }, + "903": { + "name": "Incubator Super", + "proto": "ITEM_INCUBATOR_SUPER", + "type": "Incubator", + "category": "Incubator", + "min_trainer_level": 1 + }, + "1001": { + "name": "Pokemon Storage Upgrade", + "proto": "ITEM_POKEMON_STORAGE_UPGRADE", + "type": "Inventory Upgrade", + "category": "Inventory Upgrade", + "min_trainer_level": 100 + }, + "1002": { + "name": "Item Storage Upgrade", + "proto": "ITEM_ITEM_STORAGE_UPGRADE", + "type": "Inventory Upgrade", + "category": "Inventory Upgrade", + "min_trainer_level": 100 + }, + "1101": { + "name": "Sun Stone", + "proto": "ITEM_SUN_STONE", + "type": "Evolution Requirement", + "category": "Evolution Requirement", + "min_trainer_level": 10 + }, + "1102": { + "name": "Kings Rock", + "proto": "ITEM_KINGS_ROCK", + "type": "Evolution Requirement", + "category": "Evolution Requirement", + "min_trainer_level": 10 + }, + "1103": { + "name": "Metal Coat", + "proto": "ITEM_METAL_COAT", + "type": "Evolution Requirement", + "category": "Evolution Requirement", + "min_trainer_level": 10 + }, + "1104": { + "name": "Dragon Scale", + "proto": "ITEM_DRAGON_SCALE", + "type": "Evolution Requirement", + "category": "Evolution Requirement", + "min_trainer_level": 10 + }, + "1105": { + "name": "Up Grade", + "proto": "ITEM_UP_GRADE", + "type": "Evolution Requirement", + "category": "Evolution Requirement", + "min_trainer_level": 10 + }, + "1106": { + "name": "Gen4 Evolution Stone", + "proto": "ITEM_GEN4_EVOLUTION_STONE", + "type": "Evolution Requirement", + "category": "Evolution Requirement", + "min_trainer_level": 10 + }, + "1107": { + "name": "Gen5 Evolution Stone", + "proto": "ITEM_GEN5_EVOLUTION_STONE", + "type": "Evolution Requirement", + "category": "Evolution Requirement", + "min_trainer_level": 10 + }, + "1201": { + "name": "Move Reroll Fast Attack", + "proto": "ITEM_MOVE_REROLL_FAST_ATTACK", + "type": "Move Reroll", + "category": "Move Reroll", + "min_trainer_level": 15 + }, + "1202": { + "name": "Move Reroll Special Attack", + "proto": "ITEM_MOVE_REROLL_SPECIAL_ATTACK", + "type": "Move Reroll", + "category": "Move Reroll", + "min_trainer_level": 25 + }, + "1203": { + "name": "Move Reroll Elite Fast Attack", + "proto": "ITEM_MOVE_REROLL_ELITE_FAST_ATTACK", + "type": "Move Reroll", + "category": "Move Reroll", + "min_trainer_level": 1 + }, + "1204": { + "name": "Move Reroll Elite Special Attack", + "proto": "ITEM_MOVE_REROLL_ELITE_SPECIAL_ATTACK", + "type": "Move Reroll", + "category": "Move Reroll", + "min_trainer_level": 1 + }, + "1301": { + "name": "Rare Candy", + "proto": "ITEM_RARE_CANDY", + "type": "Candy", + "category": "Candy", + "min_trainer_level": 5 + }, + "1302": { + "name": "XL Rare Candy", + "proto": "ITEM_XL_RARE_CANDY", + "type": "Candy", + "category": "Candy", + "min_trainer_level": 40 + }, + "1401": { + "name": "Free Raid Ticket", + "proto": "ITEM_FREE_RAID_TICKET", + "type": "Raid Ticket", + "category": "Raid Ticket", + "min_trainer_level": 100 + }, + "1402": { + "name": "Paid Raid Ticket", + "proto": "ITEM_PAID_RAID_TICKET", + "type": "Raid Ticket", + "category": "Raid Ticket", + "min_trainer_level": 1 + }, + "1403": { + "name": "Legendary Raid Ticket", + "proto": "ITEM_LEGENDARY_RAID_TICKET", + "type": "Raid Ticket", + "category": "Raid Ticket", + "min_trainer_level": 100 + }, + "1404": { + "name": "Star Piece", + "proto": "ITEM_STAR_PIECE", + "type": "Stardust Boost", + "category": "Stardust Boost", + "min_trainer_level": 1 + }, + "1405": { + "name": "Friend Gift Box", + "proto": "ITEM_FRIEND_GIFT_BOX", + "type": "Friend Gift Box", + "category": "Friend Gift Box", + "min_trainer_level": 100 + }, + "1406": { + "name": "Team Change", + "proto": "ITEM_TEAM_CHANGE", + "type": "Team Change", + "category": "Team Change", + "min_trainer_level": 100 + }, + "1408": { + "name": "Remote Raid Ticket", + "proto": "ITEM_REMOTE_RAID_TICKET", + "type": "Raid Ticket", + "category": "Raid Ticket", + "min_trainer_level": 5 + }, + "1501": { + "name": "Leader Map Fragment", + "proto": "ITEM_LEADER_MAP_FRAGMENT", + "type": "Incident Ticket", + "category": "Incident Ticket", + "min_trainer_level": 8 + }, + "1502": { + "name": "Leader Map", + "proto": "ITEM_LEADER_MAP", + "type": "Incident Ticket", + "category": "Incident Ticket", + "min_trainer_level": 8 + }, + "1503": { + "name": "Giovanni Map", + "proto": "ITEM_GIOVANNI_MAP", + "type": "Incident Ticket", + "category": "Incident Ticket", + "min_trainer_level": 8 + } + }, + "moves": { + "0": { + "name": "Move Unset", + "proto": "MOVE_UNSET" + }, + "1": { + "name": "Thunder Shock", + "proto": "THUNDER_SHOCK" + }, + "2": { + "name": "Quick Attack", + "proto": "QUICK_ATTACK" + }, + "3": { + "name": "Scratch", + "proto": "SCRATCH" + }, + "4": { + "name": "Ember", + "proto": "EMBER" + }, + "5": { + "name": "Vine Whip", + "proto": "VINE_WHIP" + }, + "6": { + "name": "Tackle", + "proto": "TACKLE" + }, + "7": { + "name": "Razor Leaf", + "proto": "RAZOR_LEAF" + }, + "8": { + "name": "Take Down", + "proto": "TAKE_DOWN" + }, + "9": { + "name": "Water Gun", + "proto": "WATER_GUN" + }, + "10": { + "name": "Bite", + "proto": "BITE" + }, + "11": { + "name": "Pound", + "proto": "POUND" + }, + "12": { + "name": "Double Slap", + "proto": "DOUBLE_SLAP" + }, + "13": { + "name": "Wrap", + "proto": "WRAP", + "type": "Normal", + "power": 60 + }, + "14": { + "name": "Hyper Beam", + "proto": "HYPER_BEAM", + "type": "Normal", + "power": 150 + }, + "15": { + "name": "Lick", + "proto": "LICK" + }, + "16": { + "name": "Dark Pulse", + "proto": "DARK_PULSE", + "type": "Dark", + "power": 80 + }, + "17": { + "name": "Smog", + "proto": "SMOG" + }, + "18": { + "name": "Sludge", + "proto": "SLUDGE", + "type": "Poison", + "power": 50 + }, + "19": { + "name": "Metal Claw", + "proto": "METAL_CLAW" + }, + "20": { + "name": "Vice Grip", + "proto": "VICE_GRIP", + "type": "Normal", + "power": 40 + }, + "21": { + "name": "Flame Wheel", + "proto": "FLAME_WHEEL", + "type": "Fire", + "power": 60 + }, + "22": { + "name": "Megahorn", + "proto": "MEGAHORN", + "type": "Bug", + "power": 100 + }, + "23": { + "name": "Wing Attack", + "proto": "WING_ATTACK" + }, + "24": { + "name": "Flamethrower", + "proto": "FLAMETHROWER", + "type": "Fire", + "power": 90 + }, + "25": { + "name": "Sucker Punch", + "proto": "SUCKER_PUNCH" + }, + "26": { + "name": "Dig", + "proto": "DIG", + "type": "Ground", + "power": 100 + }, + "27": { + "name": "Low Kick", + "proto": "LOW_KICK" + }, + "28": { + "name": "Cross Chop", + "proto": "CROSS_CHOP", + "type": "Fighting", + "power": 50 + }, + "29": { + "name": "Psycho Cut", + "proto": "PSYCHO_CUT" + }, + "30": { + "name": "Psybeam", + "proto": "PSYBEAM", + "type": "Psychic", + "power": 70 + }, + "31": { + "name": "Earthquake", + "proto": "EARTHQUAKE", + "type": "Ground", + "power": 120 + }, + "32": { + "name": "Stone Edge", + "proto": "STONE_EDGE", + "type": "Rock", + "power": 100 + }, + "33": { + "name": "Ice Punch", + "proto": "ICE_PUNCH", + "type": "Ice", + "power": 55 + }, + "34": { + "name": "Heart Stamp", + "proto": "HEART_STAMP", + "type": "Psychic", + "power": 40 + }, + "35": { + "name": "Discharge", + "proto": "DISCHARGE", + "type": "Electric", + "power": 65 + }, + "36": { + "name": "Flash Cannon", + "proto": "FLASH_CANNON", + "type": "Steel", + "power": 110 + }, + "37": { + "name": "Peck", + "proto": "PECK" + }, + "38": { + "name": "Drill Peck", + "proto": "DRILL_PECK", + "type": "Flying", + "power": 65 + }, + "39": { + "name": "Ice Beam", + "proto": "ICE_BEAM", + "type": "Ice", + "power": 90 + }, + "40": { + "name": "Blizzard", + "proto": "BLIZZARD", + "type": "Ice", + "power": 140 + }, + "41": { + "name": "Air Slash", + "proto": "AIR_SLASH" + }, + "42": { + "name": "Heat Wave", + "proto": "HEAT_WAVE", + "type": "Fire", + "power": 95 + }, + "43": { + "name": "Twineedle", + "proto": "TWINEEDLE" + }, + "44": { + "name": "Poison Jab", + "proto": "POISON_JAB" + }, + "45": { + "name": "Aerial Ace", + "proto": "AERIAL_ACE", + "type": "Flying", + "power": 55 + }, + "46": { + "name": "Drill Run", + "proto": "DRILL_RUN", + "type": "Ground", + "power": 80 + }, + "47": { + "name": "Petal Blizzard", + "proto": "PETAL_BLIZZARD", + "type": "Grass", + "power": 110 + }, + "48": { + "name": "Mega Drain", + "proto": "MEGA_DRAIN", + "type": "Grass", + "power": 25 + }, + "49": { + "name": "Bug Buzz", + "proto": "BUG_BUZZ", + "type": "Bug", + "power": 90 + }, + "50": { + "name": "Poison Fang", + "proto": "POISON_FANG", + "type": "Poison", + "power": 40 + }, + "51": { + "name": "Night Slash", + "proto": "NIGHT_SLASH", + "type": "Dark", + "power": 50 + }, + "52": { + "name": "Slash", + "proto": "SLASH" + }, + "53": { + "name": "Bubble Beam", + "proto": "BUBBLE_BEAM", + "type": "Water", + "power": 25 + }, + "54": { + "name": "Submission", + "proto": "SUBMISSION", + "type": "Fighting", + "power": 60 + }, + "55": { + "name": "Karate Chop", + "proto": "KARATE_CHOP" + }, + "56": { + "name": "Low Sweep", + "proto": "LOW_SWEEP", + "type": "Fighting", + "power": 40 + }, + "57": { + "name": "Aqua Jet", + "proto": "AQUA_JET", + "type": "Water", + "power": 45 + }, + "58": { + "name": "Aqua Tail", + "proto": "AQUA_TAIL", + "type": "Water", + "power": 50 + }, + "59": { + "name": "Seed Bomb", + "proto": "SEED_BOMB", + "type": "Grass", + "power": 55 + }, + "60": { + "name": "Psyshock", + "proto": "PSYSHOCK", + "type": "Psychic", + "power": 70 + }, + "61": { + "name": "Rock Throw", + "proto": "ROCK_THROW" + }, + "62": { + "name": "Ancient Power", + "proto": "ANCIENT_POWER", + "type": "Rock", + "power": 45 + }, + "63": { + "name": "Rock Tomb", + "proto": "ROCK_TOMB", + "type": "Rock", + "power": 70 + }, + "64": { + "name": "Rock Slide", + "proto": "ROCK_SLIDE", + "type": "Rock", + "power": 75 + }, + "65": { + "name": "Power Gem", + "proto": "POWER_GEM", + "type": "Rock", + "power": 80 + }, + "66": { + "name": "Shadow Sneak", + "proto": "SHADOW_SNEAK", + "type": "Ghost", + "power": 50 + }, + "67": { + "name": "Shadow Punch", + "proto": "SHADOW_PUNCH", + "type": "Ghost", + "power": 40 + }, + "68": { + "name": "Shadow Claw", + "proto": "SHADOW_CLAW" + }, + "69": { + "name": "Ominous Wind", + "proto": "OMINOUS_WIND", + "type": "Ghost", + "power": 45 + }, + "70": { + "name": "Shadow Ball", + "proto": "SHADOW_BALL", + "type": "Ghost", + "power": 100 + }, + "71": { + "name": "Bullet Punch", + "proto": "BULLET_PUNCH" + }, + "72": { + "name": "Magnet Bomb", + "proto": "MAGNET_BOMB", + "type": "Steel", + "power": 70 + }, + "73": { + "name": "Steel Wing", + "proto": "STEEL_WING" + }, + "74": { + "name": "Iron Head", + "proto": "IRON_HEAD", + "type": "Steel", + "power": 70 + }, + "75": { + "name": "Parabolic Charge", + "proto": "PARABOLIC_CHARGE", + "type": "Electric", + "power": 25 + }, + "76": { + "name": "Spark", + "proto": "SPARK" + }, + "77": { + "name": "Thunder Punch", + "proto": "THUNDER_PUNCH", + "type": "Electric", + "power": 55 + }, + "78": { + "name": "Thunder", + "proto": "THUNDER", + "type": "Electric", + "power": 100 + }, + "79": { + "name": "Thunderbolt", + "proto": "THUNDERBOLT", + "type": "Electric", + "power": 90 + }, + "80": { + "name": "Twister", + "proto": "TWISTER", + "type": "Dragon", + "power": 45 + }, + "81": { + "name": "Dragon Breath", + "proto": "DRAGON_BREATH" + }, + "82": { + "name": "Dragon Pulse", + "proto": "DRAGON_PULSE", + "type": "Dragon", + "power": 90 + }, + "83": { + "name": "Dragon Claw", + "proto": "DRAGON_CLAW", + "type": "Dragon", + "power": 50 + }, + "84": { + "name": "Disarming Voice", + "proto": "DISARMING_VOICE", + "type": "Fairy", + "power": 70 + }, + "85": { + "name": "Draining Kiss", + "proto": "DRAINING_KISS", + "type": "Fairy", + "power": 60 + }, + "86": { + "name": "Dazzling Gleam", + "proto": "DAZZLING_GLEAM", + "type": "Fairy", + "power": 110 + }, + "87": { + "name": "Moonblast", + "proto": "MOONBLAST", + "type": "Fairy", + "power": 110 + }, + "88": { + "name": "Play Rough", + "proto": "PLAY_ROUGH", + "type": "Fairy", + "power": 90 + }, + "89": { + "name": "Cross Poison", + "proto": "CROSS_POISON", + "type": "Poison", + "power": 50 + }, + "90": { + "name": "Sludge Bomb", + "proto": "SLUDGE_BOMB", + "type": "Poison", + "power": 80 + }, + "91": { + "name": "Sludge Wave", + "proto": "SLUDGE_WAVE", + "type": "Poison", + "power": 110 + }, + "92": { + "name": "Gunk Shot", + "proto": "GUNK_SHOT", + "type": "Poison", + "power": 130 + }, + "93": { + "name": "Mud Shot", + "proto": "MUD_SHOT" + }, + "94": { + "name": "Bone Club", + "proto": "BONE_CLUB", + "type": "Ground", + "power": 40 + }, + "95": { + "name": "Bulldoze", + "proto": "BULLDOZE", + "type": "Ground", + "power": 80 + }, + "96": { + "name": "Mud Bomb", + "proto": "MUD_BOMB", + "type": "Ground", + "power": 55 + }, + "97": { + "name": "Fury Cutter", + "proto": "FURY_CUTTER" + }, + "98": { + "name": "Bug Bite", + "proto": "BUG_BITE" + }, + "99": { + "name": "Signal Beam", + "proto": "SIGNAL_BEAM", + "type": "Bug", + "power": 75 + }, + "100": { + "name": "X Scissor", + "proto": "X_SCISSOR", + "type": "Bug", + "power": 45 + }, + "101": { + "name": "Flame Charge", + "proto": "FLAME_CHARGE", + "type": "Fire", + "power": 65 + }, + "102": { + "name": "Flame Burst", + "proto": "FLAME_BURST", + "type": "Fire", + "power": 70 + }, + "103": { + "name": "Fire Blast", + "proto": "FIRE_BLAST", + "type": "Fire", + "power": 140 + }, + "104": { + "name": "Brine", + "proto": "BRINE", + "type": "Water", + "power": 60 + }, + "105": { + "name": "Water Pulse", + "proto": "WATER_PULSE", + "type": "Water", + "power": 70 + }, + "106": { + "name": "Scald", + "proto": "SCALD", + "type": "Water", + "power": 80 + }, + "107": { + "name": "Hydro Pump", + "proto": "HYDRO_PUMP", + "type": "Water", + "power": 130 + }, + "108": { + "name": "Psychic", + "proto": "PSYCHIC", + "type": "Psychic", + "power": 90 + }, + "109": { + "name": "Psystrike", + "proto": "PSYSTRIKE", + "type": "Psychic", + "power": 90 + }, + "110": { + "name": "Ice Shard", + "proto": "ICE_SHARD" + }, + "111": { + "name": "Icy Wind", + "proto": "ICY_WIND", + "type": "Ice", + "power": 60 + }, + "112": { + "name": "Frost Breath", + "proto": "FROST_BREATH" + }, + "113": { + "name": "Absorb", + "proto": "ABSORB" + }, + "114": { + "name": "Giga Drain", + "proto": "GIGA_DRAIN", + "type": "Grass", + "power": 50 + }, + "115": { + "name": "Fire Punch", + "proto": "FIRE_PUNCH", + "type": "Fire", + "power": 55 + }, + "116": { + "name": "Solar Beam", + "proto": "SOLAR_BEAM", + "type": "Grass", + "power": 150 + }, + "117": { + "name": "Leaf Blade", + "proto": "LEAF_BLADE", + "type": "Grass", + "power": 70 + }, + "118": { + "name": "Power Whip", + "proto": "POWER_WHIP", + "type": "Grass", + "power": 90 + }, + "119": { + "name": "Splash", + "proto": "SPLASH" + }, + "120": { + "name": "Acid", + "proto": "ACID" + }, + "121": { + "name": "Air Cutter", + "proto": "AIR_CUTTER", + "type": "Flying", + "power": 60 + }, + "122": { + "name": "Hurricane", + "proto": "HURRICANE", + "type": "Flying", + "power": 110 + }, + "123": { + "name": "Brick Break", + "proto": "BRICK_BREAK", + "type": "Fighting", + "power": 40 + }, + "124": { + "name": "Cut", + "proto": "CUT" + }, + "125": { + "name": "Swift", + "proto": "SWIFT", + "type": "Normal", + "power": 60 + }, + "126": { + "name": "Horn Attack", + "proto": "HORN_ATTACK", + "type": "Normal", + "power": 40 + }, + "127": { + "name": "Stomp", + "proto": "STOMP", + "type": "Normal", + "power": 55 + }, + "128": { + "name": "Headbutt", + "proto": "HEADBUTT" + }, + "129": { + "name": "Hyper Fang", + "proto": "HYPER_FANG", + "type": "Normal", + "power": 80 + }, + "130": { + "name": "Slam", + "proto": "SLAM" + }, + "131": { + "name": "Body Slam", + "proto": "BODY_SLAM", + "type": "Normal", + "power": 60 + }, + "132": { + "name": "Rest", + "proto": "REST", + "type": "Normal", + "power": 50 + }, + "133": { + "name": "Struggle", + "proto": "STRUGGLE", + "type": "Normal", + "power": 35 + }, + "134": { + "name": "Scald Blastoise", + "proto": "SCALD_BLASTOISE", + "type": "Water", + "power": 50 + }, + "135": { + "name": "Hydro Pump Blastoise", + "proto": "HYDRO_PUMP_BLASTOISE", + "type": "Water", + "power": 90 + }, + "136": { + "name": "Wrap Green", + "proto": "WRAP_GREEN", + "type": "Normal", + "power": 25 + }, + "137": { + "name": "Wrap Pink", + "proto": "WRAP_PINK", + "type": "Normal", + "power": 25 + }, + "200": { + "name": "Fury Cutter", + "proto": "FURY_CUTTER_FAST", + "type": "Bug", + "power": 2 + }, + "201": { + "name": "Bug Bite", + "proto": "BUG_BITE_FAST", + "type": "Bug", + "power": 3 + }, + "202": { + "name": "Bite", + "proto": "BITE_FAST", + "type": "Dark", + "power": 4 + }, + "203": { + "name": "Sucker Punch", + "proto": "SUCKER_PUNCH_FAST", + "type": "Dark", + "power": 5 + }, + "204": { + "name": "Dragon Breath", + "proto": "DRAGON_BREATH_FAST", + "type": "Dragon", + "power": 4 + }, + "205": { + "name": "Thunder Shock", + "proto": "THUNDER_SHOCK_FAST", + "type": "Electric", + "power": 3 + }, + "206": { + "name": "Spark", + "proto": "SPARK_FAST", + "type": "Electric", + "power": 4 + }, + "207": { + "name": "Low Kick", + "proto": "LOW_KICK_FAST", + "type": "Fighting", + "power": 4 + }, + "208": { + "name": "Karate Chop", + "proto": "KARATE_CHOP_FAST", + "type": "Fighting", + "power": 5 + }, + "209": { + "name": "Ember", + "proto": "EMBER_FAST", + "type": "Fire", + "power": 7 + }, + "210": { + "name": "Wing Attack", + "proto": "WING_ATTACK_FAST", + "type": "Flying", + "power": 5 + }, + "211": { + "name": "Peck", + "proto": "PECK_FAST", + "type": "Flying", + "power": 6 + }, + "212": { + "name": "Lick", + "proto": "LICK_FAST", + "type": "Ghost", + "power": 3 + }, + "213": { + "name": "Shadow Claw", + "proto": "SHADOW_CLAW_FAST", + "type": "Ghost", + "power": 6 + }, + "214": { + "name": "Vine Whip", + "proto": "VINE_WHIP_FAST", + "type": "Grass", + "power": 5 + }, + "215": { + "name": "Razor Leaf", + "proto": "RAZOR_LEAF_FAST", + "type": "Grass", + "power": 10 + }, + "216": { + "name": "Mud Shot", + "proto": "MUD_SHOT_FAST", + "type": "Ground", + "power": 3 + }, + "217": { + "name": "Ice Shard", + "proto": "ICE_SHARD_FAST", + "type": "Ice", + "power": 9 + }, + "218": { + "name": "Frost Breath", + "proto": "FROST_BREATH_FAST", + "type": "Ice", + "power": 7 + }, + "219": { + "name": "Quick Attack", + "proto": "QUICK_ATTACK_FAST", + "type": "Normal", + "power": 5 + }, + "220": { + "name": "Scratch", + "proto": "SCRATCH_FAST", + "type": "Normal", + "power": 4 + }, + "221": { + "name": "Tackle", + "proto": "TACKLE_FAST", + "type": "Normal", + "power": 3 + }, + "222": { + "name": "Pound", + "proto": "POUND_FAST", + "type": "Normal", + "power": 5 + }, + "223": { + "name": "Cut", + "proto": "CUT_FAST", + "type": "Normal", + "power": 3 + }, + "224": { + "name": "Poison Jab", + "proto": "POISON_JAB_FAST", + "type": "Poison", + "power": 7 + }, + "225": { + "name": "Acid", + "proto": "ACID_FAST", + "type": "Poison", + "power": 6 + }, + "226": { + "name": "Psycho Cut", + "proto": "PSYCHO_CUT_FAST", + "type": "Psychic", + "power": 3 + }, + "227": { + "name": "Rock Throw", + "proto": "ROCK_THROW_FAST", + "type": "Rock", + "power": 8 + }, + "228": { + "name": "Metal Claw", + "proto": "METAL_CLAW_FAST", + "type": "Steel", + "power": 5 + }, + "229": { + "name": "Bullet Punch", + "proto": "BULLET_PUNCH_FAST", + "type": "Steel", + "power": 6 + }, + "230": { + "name": "Water Gun", + "proto": "WATER_GUN_FAST", + "type": "Water", + "power": 3 + }, + "231": { + "name": "Splash", + "proto": "SPLASH_FAST", + "type": "Water" + }, + "232": { + "name": "Water Gun Blastoise", + "proto": "WATER_GUN_FAST_BLASTOISE", + "type": "Water", + "power": 6 + }, + "233": { + "name": "Mud Slap", + "proto": "MUD_SLAP_FAST", + "type": "Ground", + "power": 11 + }, + "234": { + "name": "Zen Headbutt", + "proto": "ZEN_HEADBUTT_FAST", + "type": "Psychic", + "power": 8 + }, + "235": { + "name": "Confusion", + "proto": "CONFUSION_FAST", + "type": "Psychic", + "power": 16 + }, + "236": { + "name": "Poison Sting", + "proto": "POISON_STING_FAST", + "type": "Poison", + "power": 3 + }, + "237": { + "name": "Bubble", + "proto": "BUBBLE_FAST", + "type": "Water", + "power": 7 + }, + "238": { + "name": "Feint Attack", + "proto": "FEINT_ATTACK_FAST", + "type": "Dark", + "power": 6 + }, + "239": { + "name": "Steel Wing", + "proto": "STEEL_WING_FAST", + "type": "Steel", + "power": 7 + }, + "240": { + "name": "Fire Fang", + "proto": "FIRE_FANG_FAST", + "type": "Fire", + "power": 8 + }, + "241": { + "name": "Rock Smash", + "proto": "ROCK_SMASH_FAST", + "type": "Fighting", + "power": 9 + }, + "242": { + "name": "Transform", + "proto": "TRANSFORM_FAST", + "type": "Normal" + }, + "243": { + "name": "Counter", + "proto": "COUNTER_FAST", + "type": "Fighting", + "power": 8 + }, + "244": { + "name": "Powder Snow", + "proto": "POWDER_SNOW_FAST", + "type": "Ice", + "power": 5 + }, + "245": { + "name": "Close Combat", + "proto": "CLOSE_COMBAT", + "type": "Fighting", + "power": 100 + }, + "246": { + "name": "Dynamic Punch", + "proto": "DYNAMIC_PUNCH", + "type": "Fighting", + "power": 90 + }, + "247": { + "name": "Focus Blast", + "proto": "FOCUS_BLAST", + "type": "Fighting", + "power": 150 + }, + "248": { + "name": "Aurora Beam", + "proto": "AURORA_BEAM", + "type": "Ice", + "power": 80 + }, + "249": { + "name": "Charge Beam", + "proto": "CHARGE_BEAM_FAST", + "type": "Electric", + "power": 5 + }, + "250": { + "name": "Volt Switch", + "proto": "VOLT_SWITCH_FAST", + "type": "Electric", + "power": 12 + }, + "251": { + "name": "Wild Charge", + "proto": "WILD_CHARGE", + "type": "Electric", + "power": 100 + }, + "252": { + "name": "Zap Cannon", + "proto": "ZAP_CANNON", + "type": "Electric", + "power": 150 + }, + "253": { + "name": "Dragon Tail", + "proto": "DRAGON_TAIL_FAST", + "type": "Dragon", + "power": 13 + }, + "254": { + "name": "Avalanche", + "proto": "AVALANCHE", + "type": "Ice", + "power": 90 + }, + "255": { + "name": "Air Slash", + "proto": "AIR_SLASH_FAST", + "type": "Flying", + "power": 9 + }, + "256": { + "name": "Brave Bird", + "proto": "BRAVE_BIRD", + "type": "Flying", + "power": 130 + }, + "257": { + "name": "Sky Attack", + "proto": "SKY_ATTACK", + "type": "Flying", + "power": 75 + }, + "258": { + "name": "Sand Tomb", + "proto": "SAND_TOMB", + "type": "Ground", + "power": 25 + }, + "259": { + "name": "Rock Blast", + "proto": "ROCK_BLAST", + "type": "Rock", + "power": 50 + }, + "260": { + "name": "Infestation", + "proto": "INFESTATION_FAST", + "type": "Bug", + "power": 6 + }, + "261": { + "name": "Struggle Bug", + "proto": "STRUGGLE_BUG_FAST", + "type": "Bug", + "power": 9 + }, + "262": { + "name": "Silver Wind", + "proto": "SILVER_WIND", + "type": "Bug", + "power": 45 + }, + "263": { + "name": "Astonish", + "proto": "ASTONISH_FAST", + "type": "Ghost", + "power": 5 + }, + "264": { + "name": "Hex", + "proto": "HEX_FAST", + "type": "Ghost", + "power": 6 + }, + "265": { + "name": "Night Shade", + "proto": "NIGHT_SHADE", + "type": "Ghost", + "power": 60 + }, + "266": { + "name": "Iron Tail", + "proto": "IRON_TAIL_FAST", + "type": "Steel", + "power": 9 + }, + "267": { + "name": "Gyro Ball", + "proto": "GYRO_BALL", + "type": "Steel", + "power": 80 + }, + "268": { + "name": "Heavy Slam", + "proto": "HEAVY_SLAM", + "type": "Steel", + "power": 70 + }, + "269": { + "name": "Fire Spin", + "proto": "FIRE_SPIN_FAST", + "type": "Fire", + "power": 9 + }, + "270": { + "name": "Overheat", + "proto": "OVERHEAT", + "type": "Fire", + "power": 130 + }, + "271": { + "name": "Bullet Seed", + "proto": "BULLET_SEED_FAST", + "type": "Grass", + "power": 5 + }, + "272": { + "name": "Grass Knot", + "proto": "GRASS_KNOT", + "type": "Grass", + "power": 90 + }, + "273": { + "name": "Energy Ball", + "proto": "ENERGY_BALL", + "type": "Grass", + "power": 90 + }, + "274": { + "name": "Extrasensory", + "proto": "EXTRASENSORY_FAST", + "type": "Psychic", + "power": 8 + }, + "275": { + "name": "Futuresight", + "proto": "FUTURESIGHT", + "type": "Psychic", + "power": 120 + }, + "276": { + "name": "Mirror Coat", + "proto": "MIRROR_COAT", + "type": "Psychic", + "power": 60 + }, + "277": { + "name": "Outrage", + "proto": "OUTRAGE", + "type": "Dragon", + "power": 110 + }, + "278": { + "name": "Snarl", + "proto": "SNARL_FAST", + "type": "Dark", + "power": 5 + }, + "279": { + "name": "Crunch", + "proto": "CRUNCH", + "type": "Dark", + "power": 70 + }, + "280": { + "name": "Foul Play", + "proto": "FOUL_PLAY", + "type": "Dark", + "power": 70 + }, + "281": { + "name": "Hidden Power", + "proto": "HIDDEN_POWER_FAST", + "type": "Normal", + "power": 9 + }, + "282": { + "name": "Take Down", + "proto": "TAKE_DOWN_FAST", + "type": "Normal", + "power": 5 + }, + "283": { + "name": "Waterfall", + "proto": "WATERFALL_FAST", + "type": "Water", + "power": 12 + }, + "284": { + "name": "Surf", + "proto": "SURF", + "type": "Water", + "power": 65 + }, + "285": { + "name": "Draco Meteor", + "proto": "DRACO_METEOR", + "type": "Dragon", + "power": 150 + }, + "286": { + "name": "Doom Desire", + "proto": "DOOM_DESIRE", + "type": "Steel", + "power": 75 + }, + "287": { + "name": "Yawn", + "proto": "YAWN_FAST", + "type": "Normal" + }, + "288": { + "name": "Psycho Boost", + "proto": "PSYCHO_BOOST", + "type": "Psychic", + "power": 70 + }, + "289": { + "name": "Origin Pulse", + "proto": "ORIGIN_PULSE", + "type": "Water", + "power": 130 + }, + "290": { + "name": "Precipice Blades", + "proto": "PRECIPICE_BLADES", + "type": "Ground", + "power": 130 + }, + "291": { + "name": "Present", + "proto": "PRESENT_FAST", + "type": "Normal", + "power": 3 + }, + "292": { + "name": "Weather Ball Fire", + "proto": "WEATHER_BALL_FIRE", + "type": "Fire", + "power": 60 + }, + "293": { + "name": "Weather Ball Ice", + "proto": "WEATHER_BALL_ICE", + "type": "Ice", + "power": 60 + }, + "294": { + "name": "Weather Ball Rock", + "proto": "WEATHER_BALL_ROCK", + "type": "Rock", + "power": 60 + }, + "295": { + "name": "Weather Ball Water", + "proto": "WEATHER_BALL_WATER", + "type": "Water", + "power": 60 + }, + "296": { + "name": "Frenzy Plant", + "proto": "FRENZY_PLANT", + "type": "Grass", + "power": 100 + }, + "297": { + "name": "Smack Down", + "proto": "SMACK_DOWN_FAST", + "type": "Rock", + "power": 12 + }, + "298": { + "name": "Blast Burn", + "proto": "BLAST_BURN", + "type": "Fire", + "power": 110 + }, + "299": { + "name": "Hydro Cannon", + "proto": "HYDRO_CANNON", + "type": "Water", + "power": 80 + }, + "300": { + "name": "Last Resort", + "proto": "LAST_RESORT", + "type": "Normal", + "power": 90 + }, + "301": { + "name": "Meteor Mash", + "proto": "METEOR_MASH", + "type": "Steel", + "power": 100 + }, + "302": { + "name": "Skull Bash", + "proto": "SKULL_BASH", + "type": "Normal", + "power": 130 + }, + "303": { + "name": "Acid Spray", + "proto": "ACID_SPRAY", + "type": "Poison", + "power": 20 + }, + "304": { + "name": "Earth Power", + "proto": "EARTH_POWER", + "type": "Ground", + "power": 90 + }, + "305": { + "name": "Crabhammer", + "proto": "CRABHAMMER", + "type": "Water", + "power": 85 + }, + "306": { + "name": "Lunge", + "proto": "LUNGE", + "type": "Bug", + "power": 60 + }, + "307": { + "name": "Crush Claw", + "proto": "CRUSH_CLAW" + }, + "308": { + "name": "Octazooka", + "proto": "OCTAZOOKA", + "type": "Water", + "power": 50 + }, + "309": { + "name": "Mirror Shot", + "proto": "MIRROR_SHOT", + "type": "Steel", + "power": 35 + }, + "310": { + "name": "Super Power", + "proto": "SUPER_POWER", + "type": "Fighting", + "power": 85 + }, + "311": { + "name": "Fell Stinger", + "proto": "FELL_STINGER", + "type": "Bug", + "power": 20 + }, + "312": { + "name": "Leaf Tornado", + "proto": "LEAF_TORNADO", + "type": "Grass", + "power": 45 + }, + "313": { + "name": "Leech Life", + "proto": "LEECH_LIFE" + }, + "314": { + "name": "Drain Punch", + "proto": "DRAIN_PUNCH" + }, + "315": { + "name": "Shadow Bone", + "proto": "SHADOW_BONE", + "type": "Ghost", + "power": 75 + }, + "316": { + "name": "Muddy Water", + "proto": "MUDDY_WATER", + "type": "Water", + "power": 35 + }, + "317": { + "name": "Blaze Kick", + "proto": "BLAZE_KICK", + "type": "Fire", + "power": 55 + }, + "318": { + "name": "Razor Shell", + "proto": "RAZOR_SHELL" + }, + "319": { + "name": "Power Up Punch", + "proto": "POWER_UP_PUNCH", + "type": "Fighting", + "power": 20 + }, + "320": { + "name": "Charm", + "proto": "CHARM_FAST", + "type": "Fairy", + "power": 16 + }, + "321": { + "name": "Giga Impact", + "proto": "GIGA_IMPACT", + "type": "Normal", + "power": 150 + }, + "322": { + "name": "Frustration", + "proto": "FRUSTRATION", + "type": "Normal", + "power": 10 + }, + "323": { + "name": "Return", + "proto": "RETURN", + "type": "Normal", + "power": 130 + }, + "324": { + "name": "Synchronoise", + "proto": "SYNCHRONOISE", + "type": "Psychic", + "power": 80 + }, + "325": { + "name": "Lock On", + "proto": "LOCK_ON_FAST", + "type": "Normal", + "power": 1 + }, + "326": { + "name": "Thunder Fang", + "proto": "THUNDER_FANG_FAST", + "type": "Electric", + "power": 8 + }, + "327": { + "name": "Ice Fang", + "proto": "ICE_FANG_FAST", + "type": "Ice", + "power": 8 + }, + "328": { + "name": "Horn Drill", + "proto": "HORN_DRILL" + }, + "329": { + "name": "Fissure", + "proto": "FISSURE" + }, + "330": { + "name": "Sacred Sword", + "proto": "SACRED_SWORD", + "type": "Fighting", + "power": 60 + }, + "331": { + "name": "Flying Press", + "proto": "FLYING_PRESS", + "type": "Fighting", + "power": 90 + }, + "332": { + "name": "Aura Sphere", + "proto": "AURA_SPHERE", + "type": "Fighting", + "power": 100 + }, + "333": { + "name": "Payback", + "proto": "PAYBACK", + "type": "Dark", + "power": 110 + }, + "334": { + "name": "Rock Wrecker", + "proto": "ROCK_WRECKER", + "type": "Rock", + "power": 110 + }, + "335": { + "name": "Aeroblast", + "proto": "AEROBLAST", + "type": "Flying", + "power": 170 + }, + "336": { + "name": "Techno Blast Normal", + "proto": "TECHNO_BLAST_NORMAL", + "type": "Normal", + "power": 120 + }, + "337": { + "name": "Techno Blast Burn", + "proto": "TECHNO_BLAST_BURN", + "type": "Fire", + "power": 120 + }, + "338": { + "name": "Techno Blast Chill", + "proto": "TECHNO_BLAST_CHILL", + "type": "Ice", + "power": 120 + }, + "339": { + "name": "Techno Blast Water", + "proto": "TECHNO_BLAST_WATER", + "type": "Water", + "power": 120 + }, + "340": { + "name": "Techno Blast Shock", + "proto": "TECHNO_BLAST_SHOCK", + "type": "Electric", + "power": 120 + }, + "341": { + "name": "Fly", + "proto": "FLY", + "type": "Flying", + "power": 80 + }, + "342": { + "name": "V Create", + "proto": "V_CREATE", + "type": "Fire", + "power": 95 + }, + "343": { + "name": "Leaf Storm", + "proto": "LEAF_STORM", + "type": "Grass", + "power": 130 + }, + "344": { + "name": "Tri Attack", + "proto": "TRI_ATTACK", + "type": "Normal", + "power": 65 + }, + "345": { + "name": "Gust", + "proto": "GUST_FAST", + "type": "Flying", + "power": 16 + }, + "346": { + "name": "Incinerate", + "proto": "INCINERATE_FAST", + "type": "Fire", + "power": 15 + }, + "347": { + "name": "Dark Void", + "proto": "DARK_VOID" + }, + "348": { + "name": "Feather Dance", + "proto": "FEATHER_DANCE", + "type": "Flying", + "power": 35 + }, + "349": { + "name": "Fiery Dance", + "proto": "FIERY_DANCE" + }, + "350": { + "name": "Fairy Wind", + "proto": "FAIRY_WIND_FAST" + }, + "351": { + "name": "Relic Song", + "proto": "RELIC_SONG" + }, + "352": { + "name": "Weather Ball Normal", + "proto": "WEATHER_BALL_NORMAL" + } + }, + "quest_reward_types": { + "0": { + "proto": "UNSET", + "text": "Unset" + }, + "1": { + "proto": "EXPERIENCE", + "text": "Experience" + }, + "2": { + "proto": "ITEM", + "text": "Item" + }, + "3": { + "proto": "STARDUST", + "text": "Stardust" + }, + "4": { + "proto": "CANDY", + "text": "Candy" + }, + "5": { + "proto": "AVATAR_CLOTHING", + "text": "Avatar Clothing" + }, + "6": { + "proto": "QUEST", + "text": "Quest" + }, + "7": { + "proto": "POKEMON_ENCOUNTER", + "text": "Pokemon Encounter" + }, + "8": { + "proto": "POKECOIN", + "text": "Pokecoin" + }, + "9": { + "proto": "XL_CANDY", + "text": "XL Candy" + }, + "10": { + "proto": "LEVEL_CAP", + "text": "Level Cap" + }, + "11": { + "proto": "STICKER", + "text": "Sticker" + }, + "12": { + "proto": "MEGA_RESOURCE", + "text": "Mega Resource" + } + }, + "quest_conditions": { + "0": { + "proto": "UNSET", + "text": "Unset" + }, + "1": { + "proto": "WITH_POKEMON_TYPE", + "text": "With Pokemon Type" + }, + "2": { + "proto": "WITH_POKEMON_CATEGORY", + "text": "With Pokemon Category" + }, + "3": { + "proto": "WITH_WEATHER_BOOST", + "text": "With Weather Boost" + }, + "4": { + "proto": "WITH_DAILY_CAPTURE_BONUS", + "text": "With Daily Capture Bonus" + }, + "5": { + "proto": "WITH_DAILY_SPIN_BONUS", + "text": "With Daily Spin Bonus" + }, + "6": { + "proto": "WITH_WIN_RAID_STATUS", + "text": "With Win Raid Status" + }, + "7": { + "proto": "WITH_RAID_LEVEL", + "text": "With Raid Level" + }, + "8": { + "proto": "WITH_THROW_TYPE", + "text": "With Throw Type" + }, + "9": { + "proto": "WITH_WIN_GYM_BATTLE_STATUS", + "text": "With Win Gym Battle Status" + }, + "10": { + "proto": "WITH_SUPER_EFFECTIVE_CHARGE", + "text": "With Super Effective Charge" + }, + "11": { + "proto": "WITH_ITEM", + "text": "With Item" + }, + "12": { + "proto": "WITH_UNIQUE_POKESTOP", + "text": "With Unique Pokestop" + }, + "13": { + "proto": "WITH_QUEST_CONTEXT", + "text": "With Quest Context" + }, + "14": { + "proto": "WITH_THROW_TYPE_IN_A_ROW", + "text": "With Throw Type In A Row" + }, + "15": { + "proto": "WITH_CURVE_BALL", + "text": "With Curve Ball" + }, + "16": { + "proto": "WITH_BADGE_TYPE", + "text": "With Badge Type" + }, + "17": { + "proto": "WITH_PLAYER_LEVEL", + "text": "With Player Level" + }, + "18": { + "proto": "WITH_WIN_BATTLE_STATUS", + "text": "With Win Battle Status" + }, + "19": { + "proto": "WITH_NEW_FRIEND", + "text": "With New Friend" + }, + "20": { + "proto": "WITH_DAYS_IN_A_ROW", + "text": "With Days In A Row" + }, + "21": { + "proto": "WITH_UNIQUE_POKEMON", + "text": "With Unique Pokemon" + }, + "22": { + "proto": "WITH_NPC_COMBAT", + "text": "With NPC Combat" + }, + "23": { + "proto": "WITH_PVP_COMBAT", + "text": "With PVP Combat" + }, + "24": { + "proto": "WITH_LOCATION", + "text": "With Location" + }, + "25": { + "proto": "WITH_DISTANCE", + "text": "With Distance" + }, + "26": { + "proto": "WITH_POKEMON_ALIGNMENT", + "text": "With Pokemon Alignment" + }, + "27": { + "proto": "WITH_INVASION_CHARACTER", + "text": "With Invasion Character" + }, + "28": { + "proto": "WITH_BUDDY", + "text": "With Buddy" + }, + "29": { + "proto": "WITH_BUDDY_INTERESTING_POI", + "text": "With Buddy Interesting POI" + }, + "30": { + "proto": "WITH_DAILY_BUDDY_AFFECTION", + "text": "With Daily Buddy Affection" + }, + "31": { + "proto": "WITH_POKEMON_LEVEL", + "text": "With Pokemon Level" + }, + "32": { + "proto": "WITH_SINGLE_DAY", + "text": "With Single Day" + }, + "33": { + "proto": "WITH_UNIQUE_POKEMON_TEAM", + "text": "With Unique Pokemon Team" + }, + "34": { + "proto": "WITH_MAX_CP", + "text": "With Max CP" + }, + "35": { + "proto": "WITH_LUCKY_POKEMON", + "text": "With Lucky Pokemon" + }, + "36": { + "proto": "WITH_LEGENDARY_POKEMON", + "text": "With Legendary Pokemon" + }, + "37": { + "proto": "WITH_TEMP_EVO_POKEMON", + "text": "With Temp Evo Pokemon" + }, + "38": { + "proto": "WITH_GBL_RANK", + "text": "With GBL Rank" + }, + "39": { + "proto": "WITH_CATCHES_IN_A_ROW", + "text": "With Catches In A Row" + }, + "40": { + "proto": "WITH_ENCOUNTER_TYPE", + "text": "With Encounter Type" + }, + "41": { + "proto": "WITH_COMBAT_TYPE", + "text": "With Combat Type" + }, + "42": { + "proto": "WITH_GEOTARGETED_POI", + "text": "With Geotargeted POI" + }, + "43": { + "proto": "WITH_ITEM_TYPE", + "text": "With Item Type" + }, + "44": { + "proto": "WITH_RAID_ELAPSED_TIME", + "text": "With Raid Elapsed Time" + } + }, + "invasions": { + "0": { + "type": "Unset", + "gender": 0, + "grunt": "Unset", + "second_reward": false, + "encounters": {} + }, + "1": { + "type": "Blanche", + "gender": 0, + "grunt": "Blanche", + "second_reward": false, + "encounters": {} + }, + "2": { + "type": "Candela", + "gender": 0, + "grunt": "Candela", + "second_reward": false, + "encounters": {} + }, + "3": { + "type": "Spark", + "gender": 0, + "grunt": "Spark", + "second_reward": false, + "encounters": {} + }, + "4": { + "type": "Mixed", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "5": { + "type": "Mixed", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 143 + ], + "second": [ + 62, + 143, + 282 + ], + "third": [ + 143, + 130, + 149 + ] + } + }, + "6": { + "type": "Bug", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "7": { + "type": "Bug", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 451, + 347, + 213 + ], + "second": [ + 127, + 49, + 212 + ], + "third": [ + 15, + 212, + 123 + ] + } + }, + "8": { + "type": "Darkness", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "9": { + "type": "Darkness", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "10": { + "type": "Dark", + "gender": 2, + "grunt": "Grunt", + "second_reward": true, + "encounters": { + "first": [ + 261, + 198 + ], + "second": [ + 302, + 262 + ], + "third": [ + 332, + 275 + ] + } + }, + "11": { + "type": "Dark", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "12": { + "type": "Dragon", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 147 + ], + "second": [ + 148, + 330 + ], + "third": [ + 149, + 330, + 148 + ] + } + }, + "13": { + "type": "Dragon", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "14": { + "type": "Fairy", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 209 + ], + "second": [ + 209, + 210 + ], + "third": [ + 210 + ] + } + }, + "15": { + "type": "Fairy", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "16": { + "type": "Fighting", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 66, + 296 + ], + "second": [ + 67 + ], + "third": [ + 107, + 106, + 297 + ] + } + }, + "17": { + "type": "Fighting", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "18": { + "type": "Fire", + "gender": 2, + "grunt": "Grunt", + "second_reward": true, + "encounters": { + "first": [ + 37, + 228 + ], + "second": [ + 38, + 126, + 229 + ], + "third": [ + 38, + 5, + 59 + ] + } + }, + "19": { + "type": "Fire", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "20": { + "type": "Flying", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 396, + 41 + ], + "second": [ + 42, + 397 + ], + "third": [ + 130, + 169, + 149 + ] + } + }, + "21": { + "type": "Flying", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "22": { + "type": "Grass", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "23": { + "type": "Grass", + "gender": 1, + "grunt": "Grunt", + "second_reward": true, + "encounters": { + "first": [ + 43, + 187, + 114 + ], + "second": [ + 44, + 188, + 114 + ], + "third": [ + 275, + 45, + 71 + ] + } + }, + "24": { + "type": "Ground", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "25": { + "type": "Ground", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 220, + 50 + ], + "second": [ + 105, + 329, + 247 + ], + "third": [ + 472, + 330 + ] + } + }, + "26": { + "type": "Ice", + "gender": 2, + "grunt": "Grunt", + "second_reward": true, + "encounters": { + "first": [ + 363, + 459 + ], + "second": [ + 91, + 364, + 220 + ], + "third": [ + 131, + 460, + 91 + ] + } + }, + "27": { + "type": "Ice", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "28": { + "type": "Metal", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "29": { + "type": "Metal", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "30": { + "type": "Normal", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "31": { + "type": "Normal", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 216 + ], + "second": [ + 20, + 233 + ], + "third": [ + 474, + 143 + ] + } + }, + "32": { + "type": "Poison", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 451, + 29, + 32 + ], + "second": [ + 30, + 33 + ], + "third": [ + 30, + 110, + 89 + ] + } + }, + "33": { + "type": "Poison", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "34": { + "type": "Psychic", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "35": { + "type": "Psychic", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 202, + 102, + 79 + ], + "second": [ + 64, + 96 + ], + "third": [ + 97, + 103, + 281 + ] + } + }, + "36": { + "type": "Rock", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "37": { + "type": "Rock", + "gender": 1, + "grunt": "Grunt", + "second_reward": true, + "encounters": { + "first": [ + 304, + 299 + ], + "second": [ + 305, + 246, + 247 + ], + "third": [ + 247, + 248 + ] + } + }, + "38": { + "type": "Water", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 60, + 363, + 116 + ], + "second": [ + 195, + 259 + ], + "third": [ + 186, + 62 + ] + } + }, + "39": { + "type": "Water", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 129 + ], + "second": [ + 129 + ], + "third": [ + 129, + 130 + ] + } + }, + "40": { + "type": "Player Team Leader", + "gender": 0, + "grunt": "", + "second_reward": false, + "encounters": {} + }, + "41": { + "type": "Cliff", + "gender": 0, + "grunt": "Executive", + "second_reward": false, + "encounters": { + "first": [ + 273 + ], + "second": [ + 297, + 62, + 99 + ], + "third": [ + 248, + 319, + 389 + ] + } + }, + "42": { + "type": "Arlo", + "gender": 0, + "grunt": "Executive", + "second_reward": false, + "encounters": { + "first": [ + 48 + ], + "second": [ + 310, + 217, + 169 + ], + "third": [ + 212, + 462, + 45 + ] + } + }, + "43": { + "type": "Sierra", + "gender": 0, + "grunt": "Executive", + "second_reward": false, + "encounters": { + "first": [ + 215 + ], + "second": [ + 472, + 210, + 181 + ], + "third": [ + 229, + 230, + 452 + ] + } + }, + "44": { + "type": "Giovanni", + "gender": 0, + "grunt": "Giovanni", + "second_reward": false, + "encounters": { + "first": [ + 53 + ], + "second": [ + 76, + 68, + 91 + ], + "third": [ + 250 + ] + } + }, + "45": { + "type": "Decoy", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "46": { + "type": "Decoy", + "gender": 2, + "grunt": "Grunt", + "second_reward": true, + "encounters": { + "first": [ + 69 + ], + "second": [ + 70, + 20 + ], + "third": [ + 20, + 143 + ] + } + }, + "47": { + "type": "Ghost", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "48": { + "type": "Ghost", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 353, + 355, + 200 + ], + "second": [ + 354, + 356 + ], + "third": [ + 354, + 477, + 302 + ] + } + }, + "49": { + "type": "Electric", + "gender": 2, + "grunt": "Grunt", + "second_reward": false, + "encounters": { + "first": [ + 309, + 179, + 125 + ], + "second": [ + 180, + 125 + ], + "third": [ + 181, + 125 + ] + } + }, + "50": { + "type": "Electric", + "gender": 1, + "grunt": "Grunt", + "second_reward": false, + "encounters": {} + }, + "53": { + "type": "Gruntb", + "gender": 2, + "grunt": "Gruntb", + "second_reward": false, + "encounters": {} + }, + "54": { + "type": "Gruntb", + "gender": 1, + "grunt": "Gruntb", + "second_reward": false, + "encounters": {} + }, + "500": { + "type": "NPC 0", + "gender": 0, + "grunt": "Event", + "second_reward": false, + "encounters": {} + }, + "501": { + "type": "NPC 1", + "gender": 0, + "grunt": "Event", + "second_reward": false, + "encounters": {} + }, + "502": { + "type": "NPC 2", + "gender": 0, + "grunt": "Event", + "second_reward": false, + "encounters": {} + }, + "503": { + "type": "NPC 3", + "gender": 0, + "grunt": "Event", + "second_reward": false, + "encounters": {} + }, + "504": { + "type": "NPC 4", + "gender": 0, + "grunt": "Event", + "second_reward": false, + "encounters": {} + }, + "505": { + "type": "NPC 5", + "gender": 0, + "grunt": "Event", + "second_reward": false, + "encounters": {} + }, + "506": { + "type": "NPC 6", + "gender": 0, + "grunt": "Event", + "second_reward": false, + "encounters": {} + }, + "507": { + "type": "NPC 7", + "gender": 0, + "grunt": "Event", + "second_reward": false, + "encounters": {} + }, + "508": { + "type": "NPC 8", + "gender": 0, + "grunt": "Event", + "second_reward": false, + "encounters": {} + }, + "509": { + "type": "NPC 9", + "gender": 0, + "grunt": "Event", + "second_reward": false, + "encounters": {} + }, + "510": { + "type": "NPC 10", + "gender": 0, + "grunt": "Event", + "second_reward": false, + "encounters": {} + } + }, + "weather": { + "0": { + "name": "None", + "types": [] + }, + "1": { + "name": "Clear", + "types": [ + "Grass", + "Ground", + "Fire" + ] + }, + "2": { + "name": "Rainy", + "types": [ + "Water", + "Electric", + "Bug" + ] + }, + "3": { + "name": "Partly Cloudy", + "types": [ + "Normal", + "Rock" + ] + }, + "4": { + "name": "Overcast", + "types": [ + "Fairy", + "Fighting", + "Poison" + ] + }, + "5": { + "name": "Windy", + "types": [ + "Dragon", + "Flying", + "Psychic" + ] + }, + "6": { + "name": "Snow", + "types": [ + "Ice", + "Steel" + ] + }, + "7": { + "name": "Fog", + "types": [ + "Dark", + "Ghost" + ] + } + }, + "quest_types": { + "0": { + "text": "Unknown quest type" + }, + "1": { + "text": "First catch of the day" + }, + "2": { + "text": "First pokéstop of the day" + }, + "3": { + "text": "Multi part" + }, + "4": { + "text": "Catch {0} pokémon" + }, + "5": { + "text": "Spin {0} pokéstop(s)" + }, + "6": { + "text": "Hatch {0} egg(s)" + }, + "7": { + "text": "Complete {0} gym battle(s)" + }, + "8": { + "text": "Complete {0} raid battle(s)" + }, + "9": { + "text": "Complete {0} quest(s)" + }, + "10": { + "text": "Transfer {0} pokémon" + }, + "11": { + "text": "Favorite {0} pokémon" + }, + "12": { + "text": "Autocomplete" + }, + "13": { + "text": "Catch {0} pokémon with berrie(s)" + }, + "14": { + "text": "Power up a pokémon {0} times" + }, + "15": { + "text": "Evolve {0} pokémon" + }, + "16": { + "text": "Land {0} throw(s)" + }, + "17": { + "text": "Walk your buddy to earn {0} candy" + }, + "18": { + "text": "Collect {0} badge(s)" + }, + "19": { + "text": "Become level {0}" + }, + "20": { + "text": "Join {0} raid(s)" + }, + "21": { + "text": "Complete {0} raid battle(s)" + }, + "22": { + "text": "Make {0} new friends" + }, + "23": { + "text": "Trade {0} pokémon" + }, + "24": { + "text": "Send {0} gift(s)" + }, + "25": { + "text": "Evolve {0} pokémon into" + }, + "27": { + "text": "Win {0} pvp battle(s)" + }, + "28": { + "text": "Take {0} Snapshot(s)" + }, + "29": { + "text": "Battle against {0} Team GO Rocket Grunt(s)" + }, + "30": { + "text": "Purify {0} pokémon" + }, + "31": { + "text": "Find Team Rocket {0} times" + }, + "32": { + "text": "First Grunt of the day" + }, + "33": { + "text": "Give your buddy {0} treat(s)" + }, + "34": { + "text": "Earn {0} Heart(s) with your Buddy" + }, + "35": { + "text": "Play with your Buddy {0} times" + }, + "36": { + "text": "Increase your Buddy Level {0} times" + }, + "37": { + "text": "Earn {0} Friendship points by Walking with your Buddy" + }, + "38": { + "text": "Earn {0} Souvenirs from your Buddy" + }, + "39": { + "text": "Use Incense {0} times" + }, + "40": { + "text": "QUEST_BUDDY_FIND_SOUVENIR" + }, + "41": { + "text": "QUEST_COLLECT_AS_REWARDS" + }, + "42": { + "text": "QUEST_WALK" + }, + "43": { + "text": "Mega-Evolve {0} Pokemon" + }, + "44": { + "text": "QUEST_GET_STARDUST" + }, + "45": { + "text": "QUEST_MINI_COLLECTION" + }, + "46": { + "text": "AR-Scan {0} pokéstop(s)" + }, + "50": { + "text": "QUEST_BUDDY_EVOLUTION_WALK" + }, + "51": { + "text": "QUEST_GBL_RANK" + }, + "53": { + "text": "QUEST_CHARGE_ATTACK" + }, + "54": { + "text": "QUEST_CHANGE_POKEMON_FORM" + }, + "55": { + "text": "QUEST_BATTLE_EVENT_NPC" + }, + "57": { + "text": "Take {0} snapshot(s) of wild pokémon" + }, + "58": { + "text": "QUEST_USE_POKEMON_ITEM" + } + }, + "throw_types": { + "10": "Nice", + "11": "Great", + "12": "Excellent", + "13": "Curveball" + } +} \ No newline at end of file diff --git a/static/data/rarity.json b/static/data/rarity.json index a52e9c06..f4c2343e 100644 --- a/static/data/rarity.json +++ b/static/data/rarity.json @@ -35,7 +35,7 @@ 74, //Geodude 77, //Ponyta 79, //Slowpoke - 81, //Magnemite + //81, //Magnemite 84, //Doduo //86, //Seel 90, //Shellder @@ -68,7 +68,7 @@ 179, //Mareep //183, //Marill //185, //Sudowoodo - 187, //Hoppip + //187, //Hoppip //190, //Aipom 191, //Sunkern 193, //Yanma @@ -101,7 +101,7 @@ 300, //Skitty 302, //Sableye 304, //Aron - 307, //Meditite + //307, //Meditite 309, //Electrike 311, //Plusle 312, //Minun diff --git a/static/emojis/ar.png b/static/emojis/ar.png new file mode 100644 index 00000000..e78a9ef3 Binary files /dev/null and b/static/emojis/ar.png differ diff --git a/static/locale/de.json b/static/locale/de.json deleted file mode 100644 index 37a65628..00000000 --- a/static/locale/de.json +++ /dev/null @@ -1,3636 +0,0 @@ -{ - "UNKNOWN_POKESTOP": "Unbekannter Pokestop", - "EMBED_DIRECTIONS": "DIRECTIONS", - "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{0} Subscriptions are not enabled in the config.", - "MSG_NOT_MODERATOR_OR_HIGHER": "{0} is not a moderator or higher thus you may not see other's subscription settings.", - "MSG_INVALID_USER_MENTION": "{0} Failed to retrieve user with mention tag {1}.", - "MSG_USER_NOT_SUBSCRIBED": "{0} is not currently subscribed to any Pokemon or Raid notifications.", - "TIME_YEARS": "years", - "TIME_DAYS": "days", - "TIME_HOURS": "hours", - "TIME_MINUTES": "minutes", - "TIME_SECONDS": "seconds", - "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", - "NOTIFY_ENABLE_DISABLE": "{0} has **{1}d** Pokemon, Raid, Quest, and Invasion notifications.", - "NOTIFY_INVALID_COORDINATES": "{0} Unable not parse {1} as valid coordinates.", - "NOTIFY_DISTANCE_SET": "{0} Notifications only within a {1} meter radius of location {2},{3} will be sent.", - "NOTIFY_PHONE_NUMBER_SET": "{0} Text message notifications for ultra rare Pokemon will be sent to {1}.", - "NOTIFY_INVALID_IV_VALUES": "{0} {1} is not a valid value. (Example: `0-15-6`)", - "NOTIFY_INVALID_ATTACK_VALUE": "{0} {1} is not a valid attack value. Must be between `0-15`.", - "NOTIFY_INVALID_DEFENSE_VALUE": "{0} {1} is not a valid defense value. Must be between `0-15`.", - "NOTIFY_INVALID_STAMINA_VALUE": "{0} {1} is not a valid stamina value. Must be between `0-15`.", - "NOTIFY_INVALID_IV_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_INVALID_GENDER": "{0} {1} is not a valid gender. (i.e. `m`, `f`, `*`)", - "NOTIFY_INVALID_LEVEL": "{0} {1} must be within the range of `0-35`.", - "NOTIFY_INVALID_MINIMUM_IV": "{0} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", - "NOTIFY_INVALID_MINIMUM_LEVEL": "{0} Failed to parse minimum level provided '{1}'.", - "NOTIFY_INVALID_MAXIMUM_LEVEL": "{0} Failed to parse maximum level provided '{1}'.", - "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{0} {1} are not valid Pokemon names or IDs.", - "NOTIFY_INVALID_POKEMON_ID_OR_NAME": "{0} {1} are not valid Pokemon name or ID.", - "NOTIFY_INVALID_POKEMON_ID": "{0} {1} is not a valid Pokemon id.", - "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Raid subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Quest subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Team Rocket Invasion subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Gym subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Lure subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_COMMON_TYPE_POKEMON": "{0} {1} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {2}% or higher.", - "NOTIFY_INVALID_POKEMON_SPECIFIED": "{0} Unable to recognize any of the Pokemon you specified.", - "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{0} is not subscribed to any Pokemon notifications.", - "NOTIFY_INVALID_PVP_LEAGUE": "{0} {1} is not a valid PvP league. (Great or Ultra)", - "NOTIFY_INVALID_PVP_RANK_RANGE": "{0} {1} must be within the range of `0-4096`.", - "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokemon notifications.", - "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} Unable to remove {1} Pokemon subscriptions.", - "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Pokemon notifications.", - "NOTIFY_INVALID_CITY_ROLE": "{0} {1} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", - "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} has unsubscribed from **all** raid boss notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} has unsubscribed from **all** quest notifications.", - "NOTIFY_INVALID_INVASION_GENDER": "{0} Please specify a gender. i.e. `.invmenot fire-m` or `.invmenot water-f ontario or `.invmenot giovanni`", - "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Team Rocket invasion notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokestop lure notifications.", - "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{0} added gym subscription `{1}` to your list of gyms to receive raid notifications from.", - "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{0} already subscribed to gym notifications from {1}.", - "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{0} Removed gym subscription `{1}` from your list of gyms to receive notifications from.", - "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} has unsubscribed from **all** gym notifications.", - "NOTIFY_INVALID_ICON_STYLE": "{0} invalid icon style, type `{1}icons` to see a list of valid options.", - "NOTIFY_ICON_STYLE_CHANGE": "{0} Icon style changed to **{1}**.", - "NOTIFY_IMPORT_UPLOAD_FILE": "{0} Please upload your subscriptions.json file to import now within 3 minutes...", - "NOTIFY_IMPORT_MALFORMED_DATA": "{0} Malformed subscription data, unable to import.", - "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{0} Unable to get uploaded attachment.", - "NOTIFY_IMPORT_SUCCESS": "{0} subscriptions were imported successfully.", - "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{0} does not have any subscriptions to export.", - "NOTIFY_EXPORT_SUCCESS": "{0} Download your subscription settings here.", - "NOTIFY_SETTINGS_EMBED_TITLE": "**{0} Notification Settings (Page: {1}/{2}):**", - "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{0}**", - "NOTIFY_SETTINGS_EMBED_CITIES": "Pokemon Feed Zones: ```{0}```", - "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", - "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{0} meters", - "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{0}**", - "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {0}% ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {0} ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({0}/{1} used)", - "NOTIFY_FROM": "{0} (From: {1})", - "ALL_AREAS": "All Areas", - "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", - "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{0}feedme cityname` to assign yourself to that city role.*", - "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{0} {1} is not a valid city name, type `{2}cities` to see a list of available cities.", - "FEEDS_INVALID_CITY_NAME": "{0} {1} is not a valid city name.", - "FEEDS_ASSIGNED_ALL_ROLES": "{0} was assigned all city feed roles.", - "FEEDS_UNASSIGNED_ALL_ROLES": "{0} was unassigned all city feed roles.", - "FEEDS_ASSIGNED_ROLES": "{0} has joined role(s) **{1}**.", - "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{0} is already assigned to role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES": "{0} has been removed from role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{0} is not assigned to role(s) **{1}**.", - "FEEDS_PLEASE_WAIT": "{0} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", - "CHANNEL_MESSAGES_DELETED": "{0} Channel {1} messages have been deleted.", - "GYM_NO_POKESTOPS_CONVERTED": "{0} No Pokestops have been converted to Gyms.", - "GYM_NO_POKESTOPS_UPDATED": "{0} No Pokestops have been updated.", - "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", - "GYM_UNKNOWN_NAME": "Unbekannter Arenaname", - "GYM_UNKNOWN_IMAGE": "Unbekannte Bild Url", - "GYM_POKESTOPS_CONVERTED": "{0} {1} Pokestops updated to Gyms.", - "GYM_POKESTOPS_DELETED": "{0} {1} Pokestops deleted.", - "GYM_NAME": "- **{0}**", - "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({1})] [[Gym Image]({0})]", - "SHINY_STATS_INVALID_CHANNEL": "{0} Shiny stats channel does not exist.", - "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {0}**]", - "SHINY_STATS_NEWLINE": "----------------------------------------------", - "SHINY_STATS_MESSAGE": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours with a **1/{4}** ratio.", - "SHINY_STATS_TOTAL_MESSAGE": "Found **{0}** total shinies out of **{1}** possiblities.", - "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{0}** total shinies out of **{1}** possiblities with a **1/{2}** ratio in total.", - "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", - "ERROR_NESTS_DISABLED": "{0} Nests disabled.", - "ERROR_NESTS_LIST": "{0} Unable to retrieve nest list.", - "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {0} of {1} total members.", - "ERROR_PARSING_USER_ID": "{0} Unable to recognize user id {1}.", - "DONATE_MESSAGE": "{0} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", - "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", - "SUBSCRIPTIONS_FROM_CITY": " from city **{0}**", - "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** lure notifications{2}.", - "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** lure notifications{2}.", - "ERROR_NO_LURE_SUBSCRIPTIONS": "{0} is not subscribed to any lure notifications{1}.", - "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** raid notifications{2}.", - "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** raid notifications{2}.", - "ERROR_NO_RAID_SUBSCRIPTIONS": "{0} is not subscribed to any raid notifications{1}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** quest notifications{2}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** quest notifications{2}.", - "ERROR_NO_QUEST_SUBSCRIPTIONS": "{0} is not subscribed to any quest notifications{1}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** Team Rocket invasion reward notifications{2}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Team Rocket invasion reward notifications{2}.", - "ERROR_NO_INVASION_SUBSCRIPTIONS": "{0} is not subscribed to any Team Rocket invasion notifications{1}.", - "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** {2} League PvP notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your {2} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} has unsubscribed from **all** {1} League PvP Pokemon notifications.", - "EVENT_POKEMON_SET": "{0} event Pokemon set to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_ADD": "{0} event Pokemon added to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_REMOVE": "{0} event Pokemon `{1}` removed.", - "DIRECT_MESSAGE_NOT_SUPPORTED": "{0} Direct message is not supported for this command.", - "PVP_GREAT_LEAGUE": "Superliga", - "PVP_ULTRA_LEAGUE": "Hyperliga", - "PVP_RANK": "Rang", - "PVP_CP": "WP", - "weather_0": "Extrem", - "weather_1": "Sonnig/Klar", - "weather_2": "Regen", - "weather_3": "Teilweise bewölkt", - "weather_4": "Bedeckt", - "weather_5": "Windig", - "weather_6": "Schnee", - "weather_7": "Nebel", - "quest_1": "{0} time(s) First Catch OTD", - "quest_2": "{0} time(s) First Pokestop OTD", - "quest_3": "Multi Part Quest", - "quest_4": "Catch {0} Pokemon", - "quest_5": "Spin {0} Pokestop(s)", - "quest_6": "Hatch {0} Egg(s)", - "quest_7": "Complete {0} Gym Battle(s)", - "quest_8": "Complete {0} Raid Battle(s)", - "quest_9": "Complete {0} Quest", - "quest_10": "Transfer {0} Pokemon", - "quest_11": "Favorite {0} Pokemon", - "quest_12": "Autocomplete", - "quest_13": "Use {0} Berries on Pokemon", - "quest_14": "Power up {0} Pokemon", - "quest_15": "Evolve {0} Pokemon", - "quest_16": "Land {0} Throw(s)", - "quest_17": "Get {0} Buddy candy", - "quest_18": "Get {0} Badge(s)", - "quest_19": "Get {0} Level", - "quest_20": "Join {0} Raid Battle(s)", - "quest_21": "Complete {0} Battle(s)", - "quest_22": "Add {0} Friend(s)", - "quest_23": "Trade {0} Pokemon", - "quest_24": "Send {0} Gift(s)", - "quest_25": "Evolve {0} Into Specific Pokemon", - "quest_27": "Complete {0} Combat(s)", - "quest_28": "Take {0} Snapshot(s)", - "quest_29": "Battle {0} Team Rocket Battle(s)", - "quest_30": "Purify {0} Pokemon", - "quest_31": "Find {0} Team Rocket Invasion(s)", - "quest_32": "{0} time(s) First Grunt OTD", - "quest_33": "Feed your Buddy {0} times", - "quest_34": "Earn {0} hearts with your Buddy", - "quest_35": "Play {0} times with your Buddy", - "quest_36": "Increase your Buddy Level {0} times", - "quest_37": "Earn {0} Friendship points by Walking with your Buddy", - "quest_38": "Earn {0} Souvenirs from your Buddy", - "quest_39": "Use Incense {0} times", - "quest_40": "quest_40", - "quest_41": "quest_41", - "quest_42": "quest_42", - "quest_43": "Mega-Evolve {0} Pokemon", - "quest_44": "quest_44", - "quest_45": "quest_45", - "quest_57": "Take {0} Snapshot(s) of wild Pokemon", - "quest_reward_1": "{0:N0} XP", - "quest_reward_2": "{0} {1}", - "quest_reward_3": "{0:N0} Stardust", - "quest_reward_4": "{0} {1} Candy", - "quest_reward_5": "Avatar Clothing", - "quest_reward_6": "Quest", - "quest_reward_7": "{0}", - "quest_reward_8": "{0:N0} Pokecoins", - "quest_reward_11": "Sticker", - "quest_reward_12": "Mega Energie", - "quest_condition_1": "Type(s): {0}", - "quest_condition_2": "Pokemon: {0}", - "quest_condition_3": "Weather Boosted", - "quest_condition_4": "Daily Capture Bonus", - "quest_condition_5": "Daily Spin Bonus", - "quest_condition_6": "Win Raid", - "quest_condition_7": "Raid Level(s): {0}", - "quest_condition_8": "{0} Throw", - "quest_condition_9": "Win Gym Battle", - "quest_condition_10": "Super Effective Charge", - "quest_condition_11": "Item: {0}", - "quest_condition_12": "Unique Pokestop", - "quest_condition_13": "Quest Context", - "quest_condition_14": "{0} Throw In a Row", - "quest_condition_15": "Curve Ball", - "quest_condition_16": "Badge Type", - "quest_condition_17": "Player Level", - "quest_condition_18": "Win Battle", - "quest_condition_19": "New Friend", - "quest_condition_20": "Days In a Row", - "quest_condition_21": "Unique Pokemon", - "quest_condition_22": "NPC Combat", - "quest_condition_23": "PVP Combat", - "quest_condition_24": "Location", - "quest_condition_25": "Distance", - "quest_condition_26": "Pokemon Alignment(s): {0}", - "quest_condition_27": "Invasion Category(s): {0}", - "quest_condition_28": "With Buddy", - "quest_condition_37": "With Mega Evo Pokemon", - "alignment_1": "Crypto", - "alignment_2": "Erlöst", - "character_category_1": "Team Leader", - "character_category_2": "Rüpel", - "throw_type_10": "Nice", - "throw_type_11": "Great", - "throw_type_12": "Excellent", - "throw_type_13": "Curve", - "item_1": "Pokéball", - "item_2": "Superball", - "item_3": "Hyperball", - "item_4": "Meisterball", - "item_5": "Premier Ball", - "item_101": "Trank", - "item_102": "Supertrank", - "item_103": "Hypertrank", - "item_104": "Top-Trank", - "item_201": "Beleber", - "item_202": "Top-Beleber", - "item_301": "Glücks-Ei", - "item_401": "Rauch", - "item_402": "Spicy Incense", - "item_403": "Cool Incense", - "item_404": "Floral Incense", - "item_501": "Lockmodul", - "item_502": "Gletscher-Lockmodul", - "item_503": "Moos-Lockmodul", - "item_504": "Magnet-Lockmodul", - "item_602": "X-Angriff", - "item_603": "X-Verteidigung", - "item_604": "X-Wunder", - "item_701": "Himmihbeere", - "item_702": "Morbbeere", - "item_703": "Nanabbeere", - "item_704": "Nirbebeere", - "item_705": "Sananabeere", - "item_706": "Goldene Himmihbeere", - "item_707": "Goldene Nanabbeere", - "item_708": "Silberne Sananabeere", - "item_801": "Kamera", - "item_901": "Ei-Brutmaschine ∞", - "item_902": "Ei-Brutmaschine", - "item_903": "Super-Brutmaschine", - "item_1001": "Pokemon Storage Upgrade", - "item_1002": "Item Storage Upgrade", - "item_1101": "Sonnenstein", - "item_1102": "King-Stein", - "item_1103": "Metallmantel", - "item_1104": "Drachenhaut", - "item_1105": "Up-Grade", - "item_1106": "Sinnoh-Stein", - "item_1107": "Einall-Stein", - "item_1201": "Sofort-TM", - "item_1202": "Lade-TM", - "item_1301": "Sonderbonbon", - "item_1401": "Raid-Pass", - "item_1402": "Premium-Kampf-Pass", - "item_1403": "EX-Raid-Pass", - "item_1404": "Sternenstück", - "item_1405": "Geschenk", - "lure_501": "Normal", - "lure_502": "Gletscher", - "lure_503": "Moos", - "lure_504": "Magnet", - "grunt_0": "None", - "grunt_1": "Blanche", - "grunt_2": "Candela", - "grunt_3": "Spark", - "grunt_4": "Rüpel (männlich)", - "grunt_5": "Rüpel (weiblich)", - "grunt_6": "Käfer - Rüpel (weiblich)", - "grunt_7": "Käfer - Rüpel (männlich)", - "grunt_8": "Darkness - Female Grunt", - "grunt_9": "Darkness - Male Grunt", - "grunt_10": "Unlicht - Rüpel (weiblich)", - "grunt_11": "Unlicht - Rüpel (männlich)", - "grunt_12": "Drache - Rüpel (weiblich)", - "grunt_13": "Drache - Rüpel (männlich)", - "grunt_14": "Fee - Rüpel (weiblich)", - "grunt_15": "Fee - Rüpel (männlich)", - "grunt_16": "Kampf - Rüpel (weiblich)", - "grunt_17": "Kampf - Rüpel (männlich)", - "grunt_18": "Feuer - Rüpel (weiblich)", - "grunt_19": "Feuer - Rüpel (männlich)", - "grunt_20": "Flug - Rüpel (weiblich)", - "grunt_21": "Flug - Rüpel (männlich)", - "grunt_22": "Pflanze - Rüpel (weiblich)", - "grunt_23": "Pflanze - Rüpel (männlich)", - "grunt_24": "Boden - Rüpel (weiblich)", - "grunt_25": "Boden - Rüpel (männlich)", - "grunt_26": "Eis - Rüpel (weiblich)", - "grunt_27": "Eis - Rüpel (männlich)", - "grunt_28": "Stahl - Rüpel (weiblich)", - "grunt_29": "Stahl - Rüpel (männlich)", - "grunt_30": "Normal - Rüpel (weiblich)", - "grunt_31": "Normal - Rüpel (männlich)", - "grunt_32": "Gift - Rüpel (weiblich)", - "grunt_33": "Gift - Rüpel (männlich)", - "grunt_34": "Psycho - Rüpel (weiblich)", - "grunt_35": "Psycho - Rüpel (männlich)", - "grunt_36": "Gestein - Rüpel (weiblich)", - "grunt_37": "Gestein - Rüpel (männlich)", - "grunt_38": "Wasser - Rüpel (weiblich)", - "grunt_39": "Wasser - Rüpel (männlich)", - "grunt_40": "Player Team Leader", - "grunt_41": "Boss Cliff", - "grunt_42": "Boss Arlo", - "grunt_43": "Boss Sierra", - "grunt_44": "Giovanni", - "grunt_45": "Täusch-Rüpel (männlich)", - "grunt_46": "Täusch-Rüpel (weiblich)", - "grunt_47": "Geist - Rüpel (weiblich)", - "grunt_48": "Geist - Rüpel (männlich)", - "grunt_49": "Elektro - Rüpel (weiblich)", - "grunt_50": "Elektro - Rüpel (männlich)", - "poke_0": "--", - "poke_1": "Bisasam", - "poke_2": "Bisaknosp", - "poke_3": "Bisaflor", - "poke_4": "Glumanda", - "poke_5": "Glutexo", - "poke_6": "Glurak", - "poke_7": "Schiggy", - "poke_8": "Schillok", - "poke_9": "Turtok", - "poke_10": "Raupy", - "poke_11": "Safcon", - "poke_12": "Smettbo", - "poke_13": "Hornliu", - "poke_14": "Kokuna", - "poke_15": "Bibor", - "poke_16": "Taubsi", - "poke_17": "Tauboga", - "poke_18": "Tauboss", - "poke_19": "Rattfratz", - "poke_20": "Rattikarl", - "poke_21": "Habitak", - "poke_22": "Ibitak", - "poke_23": "Rettan", - "poke_24": "Arbok", - "poke_25": "Pikachu", - "poke_26": "Raichu", - "poke_27": "Sandan", - "poke_28": "Sandamer", - "poke_29": "Nidoran♀", - "poke_30": "Nidorina", - "poke_31": "Nidoqueen", - "poke_32": "Nidoran♂", - "poke_33": "Nidorino", - "poke_34": "Nidoking", - "poke_35": "Piepi", - "poke_36": "Pixi", - "poke_37": "Vulpix", - "poke_38": "Vulnona", - "poke_39": "Pummeluff", - "poke_40": "Knuddeluff", - "poke_41": "Zubat", - "poke_42": "Golbat", - "poke_43": "Myrapla", - "poke_44": "Duflor", - "poke_45": "Giflor", - "poke_46": "Paras", - "poke_47": "Parasek", - "poke_48": "Bluzuk", - "poke_49": "Omot", - "poke_50": "Digda", - "poke_51": "Digdri", - "poke_52": "Mauzi", - "poke_53": "Snobilikat", - "poke_54": "Enton", - "poke_55": "Entoron", - "poke_56": "Menki", - "poke_57": "Rasaff", - "poke_58": "Fukano", - "poke_59": "Arkani", - "poke_60": "Quapsel", - "poke_61": "Quaputzi", - "poke_62": "Quappo", - "poke_63": "Abra", - "poke_64": "Kadabra", - "poke_65": "Simsala", - "poke_66": "Machollo", - "poke_67": "Maschock", - "poke_68": "Machomei", - "poke_69": "Knofensa", - "poke_70": "Ultrigaria", - "poke_71": "Sarzenia", - "poke_72": "Tentacha", - "poke_73": "Tentoxa", - "poke_74": "Kleinstein", - "poke_75": "Georok", - "poke_76": "Geowaz", - "poke_77": "Ponita", - "poke_78": "Gallopa", - "poke_79": "Flegmon", - "poke_80": "Lahmus", - "poke_81": "Magnetilo", - "poke_82": "Magneton", - "poke_83": "Porenta", - "poke_84": "Dodu", - "poke_85": "Dodri", - "poke_86": "Jurob", - "poke_87": "Jugong", - "poke_88": "Sleima", - "poke_89": "Sleimok", - "poke_90": "Muschas", - "poke_91": "Austos", - "poke_92": "Nebulak", - "poke_93": "Alpollo", - "poke_94": "Gengar", - "poke_95": "Onix", - "poke_96": "Traumato", - "poke_97": "Hypno", - "poke_98": "Krabby", - "poke_99": "Kingler", - "poke_100": "Voltobal", - "poke_101": "Lektrobal", - "poke_102": "Owei", - "poke_103": "Kokowei", - "poke_104": "Tragosso", - "poke_105": "Knogga", - "poke_106": "Kicklee", - "poke_107": "Nockchan", - "poke_108": "Schlurp", - "poke_109": "Smogon", - "poke_110": "Smogmog", - "poke_111": "Rihorn", - "poke_112": "Rizeros", - "poke_113": "Chaneira", - "poke_114": "Tangela", - "poke_115": "Kangama", - "poke_116": "Seeper", - "poke_117": "Seemon", - "poke_118": "Goldini", - "poke_119": "Golking", - "poke_120": "Sterndu", - "poke_121": "Starmie", - "poke_122": "Pantimos", - "poke_123": "Sichlor", - "poke_124": "Rossana", - "poke_125": "Elektek", - "poke_126": "Magmar", - "poke_127": "Pinsir", - "poke_128": "Tauros", - "poke_129": "Karpador", - "poke_130": "Garados", - "poke_131": "Lapras", - "poke_132": "Ditto", - "poke_133": "Evoli", - "poke_134": "Aquana", - "poke_135": "Blitza", - "poke_136": "Flamara", - "poke_137": "Porygon", - "poke_138": "Amonitas", - "poke_139": "Amoroso", - "poke_140": "Kabuto", - "poke_141": "Kabutops", - "poke_142": "Aerodactyl", - "poke_143": "Relaxo", - "poke_144": "Arktos", - "poke_145": "Zapdos", - "poke_146": "Lavados", - "poke_147": "Dratini", - "poke_148": "Dragonir", - "poke_149": "Dragoran", - "poke_150": "Mewtu", - "poke_151": "Mew", - "poke_152": "Endivie", - "poke_153": "Lorblatt", - "poke_154": "Meganie", - "poke_155": "Feurigel", - "poke_156": "Igelavar", - "poke_157": "Tornupto", - "poke_158": "Karnimani", - "poke_159": "Tyracroc", - "poke_160": "Impergator", - "poke_161": "Wiesor", - "poke_162": "Wiesenior", - "poke_163": "Hoothoot", - "poke_164": "Noctuh", - "poke_165": "Ledyba", - "poke_166": "Ledian", - "poke_167": "Webarak", - "poke_168": "Ariados", - "poke_169": "Iksbat", - "poke_170": "Lampi", - "poke_171": "Lanturn", - "poke_172": "Pichu", - "poke_173": "Pii", - "poke_174": "Fluffeluff", - "poke_175": "Togepi", - "poke_176": "Togetic", - "poke_177": "Natu", - "poke_178": "Xatu", - "poke_179": "Voltilamm", - "poke_180": "Waaty", - "poke_181": "Ampharos", - "poke_182": "Blubella", - "poke_183": "Marill", - "poke_184": "Azumarill", - "poke_185": "Mogelbaum", - "poke_186": "Quaxo", - "poke_187": "Hoppspross", - "poke_188": "Hubelupf", - "poke_189": "Papungha", - "poke_190": "Griffel", - "poke_191": "Sonnkern", - "poke_192": "Sonnflora", - "poke_193": "Yanma", - "poke_194": "Felino", - "poke_195": "Morlord", - "poke_196": "Psiana", - "poke_197": "Nachtara", - "poke_198": "Kramurx", - "poke_199": "Laschoking", - "poke_200": "Traunfugil", - "poke_201": "Icognito", - "poke_202": "Woingenau", - "poke_203": "Girafarig", - "poke_204": "Tannza", - "poke_205": "Forstellka", - "poke_206": "Dummisel", - "poke_207": "Skorgla", - "poke_208": "Stahlos", - "poke_209": "Snubbull", - "poke_210": "Granbull", - "poke_211": "Baldorfish", - "poke_212": "Scherox", - "poke_213": "Pottrott", - "poke_214": "Skaraborn", - "poke_215": "Sniebel", - "poke_216": "Teddiursa", - "poke_217": "Ursaring", - "poke_218": "Schneckmag", - "poke_219": "Magcargo", - "poke_220": "Quiekel", - "poke_221": "Keifel", - "poke_222": "Corasonn", - "poke_223": "Remoraid", - "poke_224": "Octillery", - "poke_225": "Botogel", - "poke_226": "Mantax", - "poke_227": "Panzaeron", - "poke_228": "Hunduster", - "poke_229": "Hundemon", - "poke_230": "Seedraking", - "poke_231": "Phanpy", - "poke_232": "Donphan", - "poke_233": "Porygon2", - "poke_234": "Damhirplex", - "poke_235": "Farbeagle", - "poke_236": "Rabauz", - "poke_237": "Kapoera", - "poke_238": "Kussilla", - "poke_239": "Elekid", - "poke_240": "Magby", - "poke_241": "Miltank", - "poke_242": "Heiteira", - "poke_243": "Raikou", - "poke_244": "Entei", - "poke_245": "Suicune", - "poke_246": "Larvitar", - "poke_247": "Pupitar", - "poke_248": "Despotar", - "poke_249": "Lugia", - "poke_250": "Ho-Oh", - "poke_251": "Celebi", - "poke_252": "Geckarbor", - "poke_253": "Reptain", - "poke_254": "Gewaldro", - "poke_255": "Flemmli", - "poke_256": "Jungglut", - "poke_257": "Lohgock", - "poke_258": "Hydropi", - "poke_259": "Moorabbel", - "poke_260": "Sumpex", - "poke_261": "Fiffyen", - "poke_262": "Magnayen", - "poke_263": "Zigzachs", - "poke_264": "Geradaks", - "poke_265": "Waumpel", - "poke_266": "Schaloko", - "poke_267": "Papinella", - "poke_268": "Panekon", - "poke_269": "Pudox", - "poke_270": "Loturzel", - "poke_271": "Lombrero", - "poke_272": "Kappalores", - "poke_273": "Samurzel", - "poke_274": "Blanas", - "poke_275": "Tengulist", - "poke_276": "Schwalbini", - "poke_277": "Schwalboss", - "poke_278": "Wingull", - "poke_279": "Pelipper", - "poke_280": "Trasla", - "poke_281": "Kirlia", - "poke_282": "Guardevoir", - "poke_283": "Gehweiher", - "poke_284": "Maskeregen", - "poke_285": "Knilz", - "poke_286": "Kapilz", - "poke_287": "Bummelz", - "poke_288": "Muntier", - "poke_289": "Letarking", - "poke_290": "Nincada", - "poke_291": "Ninjask", - "poke_292": "Ninjatom", - "poke_293": "Flurmel", - "poke_294": "Krakeelo", - "poke_295": "Krawumms", - "poke_296": "Makuhita", - "poke_297": "Hariyama", - "poke_298": "Azurill", - "poke_299": "Nasgnet", - "poke_300": "Eneco", - "poke_301": "Enekoro", - "poke_302": "Zobiris", - "poke_303": "Flunkifer", - "poke_304": "Stollunior", - "poke_305": "Stollrak", - "poke_306": "Stolloss", - "poke_307": "Meditie", - "poke_308": "Meditalis", - "poke_309": "Frizelbliz", - "poke_310": "Voltenso", - "poke_311": "Plusle", - "poke_312": "Minun", - "poke_313": "Volbeat", - "poke_314": "Illumise", - "poke_315": "Roselia", - "poke_316": "Schluppuck", - "poke_317": "Schlukwech", - "poke_318": "Kanivanha", - "poke_319": "Tohaido", - "poke_320": "Wailmer", - "poke_321": "Wailord", - "poke_322": "Camaub", - "poke_323": "Camerupt", - "poke_324": "Qurtel", - "poke_325": "Spoink", - "poke_326": "Groink", - "poke_327": "Pandir", - "poke_328": "Knacklion", - "poke_329": "Vibrava", - "poke_330": "Libelldra", - "poke_331": "Tuska", - "poke_332": "Noktuska", - "poke_333": "Wablu", - "poke_334": "Altaria", - "poke_335": "Sengo", - "poke_336": "Vipitis", - "poke_337": "Lunastein", - "poke_338": "Sonnfel", - "poke_339": "Schmerbe", - "poke_340": "Welsar", - "poke_341": "Krebscorps", - "poke_342": "Krebutack", - "poke_343": "Puppance", - "poke_344": "Lepumentas", - "poke_345": "Liliep", - "poke_346": "Wielie", - "poke_347": "Anorith", - "poke_348": "Armaldo", - "poke_349": "Barschwa", - "poke_350": "Milotic", - "poke_351": "Formeo", - "poke_352": "Kecleon", - "poke_353": "Shuppet", - "poke_354": "Banette", - "poke_355": "Zwirrlicht", - "poke_356": "Zwirrklop", - "poke_357": "Tropius", - "poke_358": "Palimpalim", - "poke_359": "Absol", - "poke_360": "Isso", - "poke_361": "Schneppke", - "poke_362": "Firnontor", - "poke_363": "Seemops", - "poke_364": "Seejong", - "poke_365": "Walraisa", - "poke_366": "Perlu", - "poke_367": "Aalabyss", - "poke_368": "Saganabyss", - "poke_369": "Relicanth", - "poke_370": "Liebiskus", - "poke_371": "Kindwurm", - "poke_372": "Draschel", - "poke_373": "Brutalanda", - "poke_374": "Tanhel", - "poke_375": "Metang", - "poke_376": "Metagross", - "poke_377": "Regirock", - "poke_378": "Regice", - "poke_379": "Registeel", - "poke_380": "Latias", - "poke_381": "Latios", - "poke_382": "Kyogre", - "poke_383": "Groudon", - "poke_384": "Rayquaza", - "poke_385": "Jirachi", - "poke_386": "Deoxys", - "poke_387": "Chelast", - "poke_388": "Chelcarain", - "poke_389": "Chelterrar", - "poke_390": "Panflam", - "poke_391": "Panpyro", - "poke_392": "Panferno", - "poke_393": "Plinfa", - "poke_394": "Pliprin", - "poke_395": "Impoleon", - "poke_396": "Staralili", - "poke_397": "Staravia", - "poke_398": "Staraptor", - "poke_399": "Bidiza", - "poke_400": "Bidifas", - "poke_401": "Zirpurze", - "poke_402": "Zirpeise", - "poke_403": "Sheinux", - "poke_404": "Luxio", - "poke_405": "Luxtra", - "poke_406": "Knospi", - "poke_407": "Roserade", - "poke_408": "Koknodon", - "poke_409": "Rameidon", - "poke_410": "Schilterus", - "poke_411": "Bollterus", - "poke_412": "Burmy", - "poke_413": "Burmadame", - "poke_414": "Moterpel", - "poke_415": "Wadribie", - "poke_416": "Honweisel", - "poke_417": "Pachirisu", - "poke_418": "Bamelin", - "poke_419": "Bojelin", - "poke_420": "Kikugi", - "poke_421": "Kinoso", - "poke_422": "Schalellos", - "poke_423": "Gastrodon", - "poke_424": "Ambidiffel", - "poke_425": "Driftlon", - "poke_426": "Drifzepeli", - "poke_427": "Haspiror", - "poke_428": "Schlapor", - "poke_429": "Traunmagil", - "poke_430": "Kramshef", - "poke_431": "Charmian", - "poke_432": "Shnurgarst", - "poke_433": "Klingplim", - "poke_434": "Skunkapuh", - "poke_435": "Skuntank", - "poke_436": "Bronzel", - "poke_437": "Bronzong", - "poke_438": "Mobai", - "poke_439": "Pantimimi", - "poke_440": "Wonneira", - "poke_441": "Plaudagei", - "poke_442": "Kryppuk", - "poke_443": "Kaumalat", - "poke_444": "Knarksel", - "poke_445": "Knakrack", - "poke_446": "Mampfaxo", - "poke_447": "Riolu", - "poke_448": "Lucario", - "poke_449": "Hippopotas", - "poke_450": "Hippoterus", - "poke_451": "Pionskora", - "poke_452": "Piondragi", - "poke_453": "Glibunkel", - "poke_454": "Toxiquak", - "poke_455": "Venuflibis", - "poke_456": "Finneon", - "poke_457": "Lumineon", - "poke_458": "Mantirps", - "poke_459": "Shnebedeck", - "poke_460": "Rexblisar", - "poke_461": "Snibunna", - "poke_462": "Magnezone", - "poke_463": "Schlurplek", - "poke_464": "Rihornior", - "poke_465": "Tangoloss", - "poke_466": "Elevoltek", - "poke_467": "Magbrant", - "poke_468": "Togekiss", - "poke_469": "Yanmega", - "poke_470": "Folipurba", - "poke_471": "Glaziola", - "poke_472": "Skorgro", - "poke_473": "Mamutel", - "poke_474": "Porygon-Z", - "poke_475": "Galagladi", - "poke_476": "Voluminas", - "poke_477": "Zwirrfinst", - "poke_478": "Frosdedje", - "poke_479": "Rotom", - "poke_480": "Selfe", - "poke_481": "Vesprit", - "poke_482": "Tobutz", - "poke_483": "Dialga", - "poke_484": "Palkia", - "poke_485": "Heatran", - "poke_486": "Regigigas", - "poke_487": "Giratina", - "poke_488": "Cresselia", - "poke_489": "Phione", - "poke_490": "Manaphy", - "poke_491": "Darkrai", - "poke_492": "Shaymin", - "poke_493": "Arceus", - "poke_494": "Victini", - "poke_495": "Serpifeu", - "poke_496": "Efoserp", - "poke_497": "Serpiroyal", - "poke_498": "Floink", - "poke_499": "Ferkokel", - "poke_500": "Flambirex", - "poke_501": "Ottaro", - "poke_502": "Zwottronin", - "poke_503": "Admurai", - "poke_504": "Nagelotz", - "poke_505": "Kukmarda", - "poke_506": "Yorkleff", - "poke_507": "Terribark", - "poke_508": "Bissbark", - "poke_509": "Felilou", - "poke_510": "Kleoparda", - "poke_511": "Vegimak", - "poke_512": "Vegichita", - "poke_513": "Grillmak", - "poke_514": "Grillchita", - "poke_515": "Sodamak", - "poke_516": "Sodachita", - "poke_517": "Somniam", - "poke_518": "Somnivora", - "poke_519": "Dusselgurr", - "poke_520": "Navitaub", - "poke_521": "Fasasnob", - "poke_522": "Elezeba", - "poke_523": "Zebritz", - "poke_524": "Kiesling", - "poke_525": "Sedimantur", - "poke_526": "Brockoloss", - "poke_527": "Fleknoil", - "poke_528": "Fletiamo", - "poke_529": "Rotomurf", - "poke_530": "Stalobor", - "poke_531": "Ohrdoch", - "poke_532": "Praktibalk", - "poke_533": "Strepoli", - "poke_534": "Meistagrif", - "poke_535": "Schallquap", - "poke_536": "Mebrana", - "poke_537": "Branawarz", - "poke_538": "Jiutesto", - "poke_539": "Karadonis", - "poke_540": "Strawickl", - "poke_541": "Folikon", - "poke_542": "Matrifol", - "poke_543": "Toxiped", - "poke_544": "Rollum", - "poke_545": "Cerapendra", - "poke_546": "Waumboll", - "poke_547": "Elfun", - "poke_548": "Lilminip", - "poke_549": "Dressella", - "poke_550": "Barschuft", - "poke_551": "Ganovil", - "poke_552": "Rokkaiman", - "poke_553": "Rabigator", - "poke_554": "Flampion", - "poke_555": "Flampivian", - "poke_556": "Maracamba", - "poke_557": "Lithomith", - "poke_558": "Castellith", - "poke_559": "Zurrokex", - "poke_560": "Irokex", - "poke_561": "Symvolara", - "poke_562": "Makabaja", - "poke_563": "Echnatoll", - "poke_564": "Galapaflos", - "poke_565": "Karippas", - "poke_566": "Flapteryx", - "poke_567": "Aeropteryx", - "poke_568": "Unratütox", - "poke_569": "Deponitox", - "poke_570": "Zorua", - "poke_571": "Zoroark", - "poke_572": "Picochilla", - "poke_573": "Chillabell", - "poke_574": "Mollimorba", - "poke_575": "Hypnomorba", - "poke_576": "Morbitesse", - "poke_577": "Monozyto", - "poke_578": "Mitodos", - "poke_579": "Zytomega", - "poke_580": "Piccolente", - "poke_581": "Swaroness", - "poke_582": "Gelatini", - "poke_583": "Gelatroppo", - "poke_584": "Gelatwino", - "poke_585": "Sesokitz", - "poke_586": "Kronjuwild", - "poke_587": "Emolga", - "poke_588": "Laukaps", - "poke_589": "Cavalanzas", - "poke_590": "Tarnpignon", - "poke_591": "Hutsassa", - "poke_592": "Quabbel", - "poke_593": "Apoquallyp", - "poke_594": "Mamolida", - "poke_595": "Wattzapf", - "poke_596": "Voltula", - "poke_597": "Kastadur", - "poke_598": "Tentantel", - "poke_599": "Klikk", - "poke_600": "Kliklak", - "poke_601": "Klikdiklak", - "poke_602": "Zapplardin", - "poke_603": "Zapplalek", - "poke_604": "Zapplarang", - "poke_605": "Pygraulon", - "poke_606": "Megalon", - "poke_607": "Lichtel", - "poke_608": "Laternecto", - "poke_609": "Skelabra", - "poke_610": "Milza", - "poke_611": "Sharfax", - "poke_612": "Maxax", - "poke_613": "Petznief", - "poke_614": "Siberio", - "poke_615": "Frigometri", - "poke_616": "Schnuthelm", - "poke_617": "Hydragil", - "poke_618": "Flunschlik", - "poke_619": "Lin-Fu", - "poke_620": "Wie-Shu", - "poke_621": "Shardrago", - "poke_622": "Golbit", - "poke_623": "Golgantes", - "poke_624": "Gladiantri", - "poke_625": "Caesurio", - "poke_626": "Bisofank", - "poke_627": "Geronimatz", - "poke_628": "Washakwil", - "poke_629": "Skallyk", - "poke_630": "Grypheldis", - "poke_631": "Furnifraß", - "poke_632": "Fermicula", - "poke_633": "Kapuno", - "poke_634": "Duodino", - "poke_635": "Trikephalo", - "poke_636": "Ignivor", - "poke_637": "Ramoth", - "poke_638": "Kobalium", - "poke_639": "Terrakium", - "poke_640": "Viridium", - "poke_641": "Boreos", - "poke_642": "Voltolos", - "poke_643": "Reshiram", - "poke_644": "Zekrom", - "poke_645": "Demeteros", - "poke_646": "Kyurem", - "poke_647": "Keldeo", - "poke_648": "Meloetta", - "poke_649": "Genesect", - "poke_650": "Igamaro", - "poke_651": "Igastarnish", - "poke_652": "Brigaron", - "poke_653": "Fynx", - "poke_654": "Rutena", - "poke_655": "Fennexis", - "poke_656": "Froxy", - "poke_657": "Amphizel", - "poke_658": "Quajutsu", - "poke_659": "Scoppel", - "poke_660": "Grebbit", - "poke_661": "Dartiri", - "poke_662": "Dartignis", - "poke_663": "Fiaro", - "poke_664": "Purmel", - "poke_665": "Puponcho", - "poke_666": "Vivillon", - "poke_667": "Leufeo", - "poke_668": "Pyroleo", - "poke_669": "Flabébé", - "poke_670": "Floette", - "poke_671": "Florges", - "poke_672": "Mähikel", - "poke_673": "Chevrumm", - "poke_674": "Pam-Pam", - "poke_675": "Pandagro", - "poke_676": "Coiffwaff", - "poke_677": "Psiau", - "poke_678": "Psiaugon", - "poke_679": "Gramokles", - "poke_680": "Duokles", - "poke_681": "Durengard", - "poke_682": "Parfi", - "poke_683": "Parfinesse", - "poke_684": "Flauschling", - "poke_685": "Sabbaione", - "poke_686": "Iscalar", - "poke_687": "Calamanero", - "poke_688": "Bithora", - "poke_689": "Thanathora", - "poke_690": "Algitt", - "poke_691": "Tandrak", - "poke_692": "Scampisto", - "poke_693": "Wummer", - "poke_694": "Eguana", - "poke_695": "Elezard", - "poke_696": "Balgoras", - "poke_697": "Monargoras", - "poke_698": "Amarino", - "poke_699": "Amagarga", - "poke_700": "Feelinara", - "poke_701": "Resladero", - "poke_702": "Dedenne", - "poke_703": "Rocara", - "poke_704": "Viscora", - "poke_705": "Viscargot", - "poke_706": "Viscogon", - "poke_707": "Clavion", - "poke_708": "Paragoni", - "poke_709": "Trombork", - "poke_710": "Irrbis", - "poke_711": "Pumpdjinn", - "poke_712": "Arktip", - "poke_713": "Arktilas", - "poke_714": "eF-eM", - "poke_715": "UHaFnir", - "poke_716": "Xerneas", - "poke_717": "Yveltal", - "poke_718": "Zygarde", - "poke_719": "Diancie", - "poke_720": "Hoopa", - "poke_721": "Volcanion", - "poke_722": "Rowlet", - "poke_723": "Dartrix", - "poke_724": "Decidueye", - "poke_725": "Litten", - "poke_726": "Torracat", - "poke_727": "Incineroar", - "poke_728": "Popplio", - "poke_729": "Brionne", - "poke_730": "Primarina", - "poke_731": "Pikipek", - "poke_732": "Trumbeak", - "poke_733": "Toucannon", - "poke_734": "Yungoos", - "poke_735": "Gumshoos", - "poke_736": "Grubbin", - "poke_737": "Charjabug", - "poke_738": "Vikavolt", - "poke_739": "Crabrawler", - "poke_740": "Crabominable", - "poke_741": "Oricorio", - "poke_742": "Cutiefly", - "poke_743": "Ribombee", - "poke_744": "Rockruff", - "poke_745": "Lycanroc", - "poke_746": "Wishiwashi", - "poke_747": "Mareanie", - "poke_748": "Toxapex", - "poke_749": "Mudbray", - "poke_750": "Mudsdale", - "poke_751": "Dewpider", - "poke_752": "Araquanid", - "poke_753": "Fomantis", - "poke_754": "Lurantis", - "poke_755": "Morelull", - "poke_756": "Shiinotic", - "poke_757": "Salandit", - "poke_758": "Salazzle", - "poke_759": "Stufful", - "poke_760": "Bewear", - "poke_761": "Bounsweet", - "poke_762": "Steenee", - "poke_763": "Tsareena", - "poke_764": "Comfey", - "poke_765": "Oranguru", - "poke_766": "Passimian", - "poke_767": "Wimpod", - "poke_768": "Golisopod", - "poke_769": "Sandygast", - "poke_770": "Palossand", - "poke_771": "Pyukumuku", - "poke_772": "Type: Null", - "poke_773": "Silvally", - "poke_774": "Minior", - "poke_775": "Komala", - "poke_776": "Turtonator", - "poke_777": "Togedemaru", - "poke_778": "Mimikyu", - "poke_779": "Bruxish", - "poke_780": "Drampa", - "poke_781": "Dhelmise", - "poke_782": "Jangmo-o", - "poke_783": "Hakamo-o", - "poke_784": "Kommo-o", - "poke_785": "Tapu Koko", - "poke_786": "Tapu Lele", - "poke_787": "Tapu Bulu", - "poke_788": "Tapu Fini", - "poke_789": "Cosmog", - "poke_790": "Cosmoem", - "poke_791": "Solgaleo", - "poke_792": "Lunala", - "poke_793": "Nihilego", - "poke_794": "Buzzwole", - "poke_795": "Pheromosa", - "poke_796": "Xurkitree", - "poke_797": "Celesteela", - "poke_798": "Kartana", - "poke_799": "Guzzlord", - "poke_800": "Necrozma", - "poke_801": "Magearna", - "poke_802": "Marshadow", - "poke_808": "Meltan", - "poke_809": "Melmetal", - "poke_862": "Barrikadax", - "poke_863": "Mauzinger", - "poke_864": "Cursola", - "poke_865": "Lauchzelot", - "form_1": "A", - "form_2": "B", - "form_3": "C", - "form_4": "D", - "form_5": "E", - "form_6": "F", - "form_7": "G", - "form_8": "H", - "form_9": "I", - "form_10": "J", - "form_11": "K", - "form_12": "L", - "form_13": "M", - "form_14": "N", - "form_15": "O", - "form_16": "P", - "form_17": "Q", - "form_18": "R", - "form_19": "S", - "form_20": "T", - "form_21": "U", - "form_22": "V", - "form_23": "W", - "form_24": "X", - "form_25": "Y", - "form_26": "Z", - "form_27": "!", - "form_28": "?", - "form_29": "Normalform", - "form_30": "Sonnenform", - "form_31": "Regenform", - "form_32": "Schneeform", - "form_33": "Normalform", - "form_34": "Angriffsform", - "form_35": "Verteidigungsform", - "form_36": "Initiativeform", - "form_37": "00", - "form_38": "01", - "form_39": "02", - "form_40": "03", - "form_41": "04", - "form_42": "05", - "form_43": "06", - "form_44": "07", - "form_45": "Normal", - "form_46": "Alola", - "form_47": "Normal", - "form_48": "Alola", - "form_49": "Normal", - "form_50": "Alola", - "form_51": "Normal", - "form_52": "Alola", - "form_53": "Normal", - "form_54": "Alola", - "form_55": "Normal", - "form_56": "Alola", - "form_57": "Normal", - "form_58": "Alola", - "form_59": "Normal", - "form_60": "Alola", - "form_61": "Normal", - "form_62": "Alola", - "form_63": "Normal", - "form_64": "Alola", - "form_65": "Normal", - "form_66": "Alola", - "form_67": "Normal", - "form_68": "Alola", - "form_69": "Normal", - "form_70": "Alola", - "form_71": "Normal", - "form_72": "Alola", - "form_73": "Normal", - "form_74": "Alola", - "form_75": "Normal", - "form_76": "Alola", - "form_77": "Normal", - "form_78": "Alola", - "form_79": "Normal", - "form_80": "Alola", - "form_81": "Normal", - "form_82": "Frost", - "form_83": "Fan", - "form_84": "Mow", - "form_85": "Wash", - "form_86": "Heat", - "form_87": "Plant", - "form_88": "Sandy", - "form_89": "Trash", - "form_90": "Altered", - "form_91": "Origin", - "form_92": "Sky", - "form_93": "Land", - "form_94": "Wolkenform", - "form_95": "Sonnenform", - "form_96": "Westliches Meer", - "form_97": "Östliches Meer", - "form_98": "Westliches Meer", - "form_99": "Östliches Meer", - "form_100": "Normal", - "form_101": "Fighting", - "form_102": "Flying", - "form_103": "Poison", - "form_104": "Ground", - "form_105": "Rock", - "form_106": "Bug", - "form_107": "Ghost", - "form_108": "Steel", - "form_109": "Fire", - "form_110": "Water", - "form_111": "Grass", - "form_112": "Electric", - "form_113": "Psychic", - "form_114": "Ice", - "form_115": "Dragon", - "form_116": "Dark", - "form_117": "Fairy", - "form_118": "Pflanzenumhang", - "form_119": "Sandumhang", - "form_120": "Lumpenumhang", - "form_121": "08", - "form_122": "09", - "form_123": "10", - "form_124": "11", - "form_125": "12", - "form_126": "13", - "form_127": "14", - "form_128": "15", - "form_129": "16", - "form_130": "17", - "form_131": "18", - "form_132": "19", - "form_133": "Armored", - "form_135": "Normal", - "form_136": "Red Striped", - "form_137": "Blue Striped", - "form_138": "Standard", - "form_139": "Zen", - "form_140": "Incarnate", - "form_141": "Therian", - "form_142": "Incarnate", - "form_143": "Therian", - "form_144": "Incarnate", - "form_145": "Therian", - "form_146": "Normal", - "form_147": "Black", - "form_148": "White", - "form_149": "Ordinary", - "form_150": "Resolute", - "form_151": "Aria", - "form_152": "Pirouette", - "form_153": "Crypto", - "form_154": "Erlöst", - "form_155": "Crypto", - "form_156": "Erlöst", - "form_157": "Normal", - "form_158": "Crypto", - "form_159": "Erlöst", - "form_160": "Normal", - "form_161": "Crypto", - "form_162": "Erlöst", - "form_163": "Normal", - "form_164": "Crypto", - "form_165": "Erlöst", - "form_166": "Normal", - "form_167": "Crypto", - "form_168": "Erlöst", - "form_169": "Normal", - "form_170": "Crypto", - "form_171": "Erlöst", - "form_172": "Normal", - "form_173": "Crypto", - "form_174": "Erlöst", - "form_175": "Normal", - "form_176": "Crypto", - "form_177": "Erlöst", - "form_178": "Normal", - "form_179": "Crypto", - "form_180": "Erlöst", - "form_181": "Normal", - "form_182": "Crypto", - "form_183": "Erlöst", - "form_184": "Normal", - "form_185": "Crypto", - "form_186": "Erlöst", - "form_187": "Normal", - "form_188": "Crypto", - "form_189": "Erlöst", - "form_190": "Normal", - "form_191": "Crypto", - "form_192": "Erlöst", - "form_193": "Normal", - "form_194": "Crypto", - "form_195": "Erlöst", - "form_196": "Normal", - "form_197": "Crypto", - "form_198": "Erlöst", - "form_199": "Normal", - "form_200": "Crypto", - "form_201": "Erlöst", - "form_202": "Normal", - "form_203": "Crypto", - "form_204": "Erlöst", - "form_205": "Normal", - "form_206": "Crypto", - "form_207": "Erlöst", - "form_208": "Normal", - "form_209": "Crypto", - "form_210": "Erlöst", - "form_211": "Normal", - "form_212": "Crypto", - "form_213": "Erlöst", - "form_214": "Normal", - "form_215": "Crypto", - "form_216": "Erlöst", - "form_217": "Normal", - "form_218": "Crypto", - "form_219": "Erlöst", - "form_220": "Crypto", - "form_221": "Erlöst", - "form_222": "Crypto", - "form_223": "Erlöst", - "form_224": "Normal", - "form_225": "Crypto", - "form_226": "Erlöst", - "form_227": "Crypto", - "form_228": "Erlöst", - "form_229": "Normal", - "form_230": "Crypto", - "form_231": "Erlöst", - "form_232": "Normal", - "form_233": "Crypto", - "form_234": "Erlöst", - "form_235": "Normal", - "form_236": "Crypto", - "form_237": "Erlöst", - "form_238": "Normal", - "form_239": "Crypto", - "form_240": "Erlöst", - "form_241": "Normal", - "form_242": "Crypto", - "form_243": "Erlöst", - "form_244": "Normal", - "form_245": "Crypto", - "form_246": "Erlöst", - "form_247": "Normal", - "form_248": "Crypto", - "form_249": "Erlöst", - "form_250": "Normal", - "form_251": "Crypto", - "form_252": "Erlöst", - "form_253": "Normal", - "form_254": "Crypto", - "form_255": "Erlöst", - "form_256": "Normal", - "form_257": "Crypto", - "form_258": "Erlöst", - "form_259": "Normal", - "form_260": "Crypto", - "form_261": "Erlöst", - "form_262": "Normal", - "form_263": "Crypto", - "form_264": "Erlöst", - "form_265": "Normal", - "form_266": "Crypto", - "form_267": "Erlöst", - "form_268": "Normal", - "form_269": "Crypto", - "form_270": "Erlöst", - "form_271": "Normal", - "form_272": "Crypto", - "form_273": "Erlöst", - "form_274": "Normal", - "form_275": "Crypto", - "form_276": "Erlöst", - "form_277": "Normal", - "form_278": "Crypto", - "form_279": "Erlöst", - "form_280": "Normal", - "form_281": "Crypto", - "form_282": "Erlöst", - "form_283": "Normal", - "form_284": "Crypto", - "form_285": "Erlöst", - "form_286": "Normal", - "form_287": "Crypto", - "form_288": "Erlöst", - "form_289": "Normal", - "form_290": "Crypto", - "form_291": "Erlöst", - "form_292": "Normal", - "form_293": "Crypto", - "form_294": "Erlöst", - "form_295": "Normal", - "form_296": "Crypto", - "form_297": "Erlöst", - "form_298": "Normal", - "form_299": "Crypto", - "form_300": "Erlöst", - "form_301": "Normal", - "form_302": "Crypto", - "form_303": "Erlöst", - "form_304": "Normal", - "form_305": "Crypto", - "form_306": "Erlöst", - "form_307": "Normal", - "form_308": "Crypto", - "form_309": "Erlöst", - "form_310": "Normal", - "form_311": "Crypto", - "form_312": "Erlöst", - "form_313": "Normal", - "form_314": "Crypto", - "form_315": "Erlöst", - "form_316": "Normal", - "form_317": "Crypto", - "form_318": "Erlöst", - "form_319": "Normal", - "form_320": "Crypto", - "form_321": "Erlöst", - "form_322": "Normal", - "form_323": "Crypto", - "form_324": "Erlöst", - "form_585": "Spring", - "form_586": "Summer", - "form_587": "Autumn", - "form_588": "Winter", - "form_589": "Spring", - "form_590": "Summer", - "form_591": "Autumn", - "form_592": "Winter", - "form_593": "Normal", - "form_594": "Shock", - "form_595": "Burn", - "form_596": "Chill", - "form_597": "Douse", - "form_598": "Normal", - "form_599": "Noevolve", - "form_600": "Normal", - "form_601": "Noevolve", - "form_602": "Normal", - "form_603": "Noevolve", - "form_604": "Noevolve", - "form_605": "Noevolve", - "form_606": "Noevolve", - "form_607": "Noevolve", - "form_608": "Noevolve", - "form_609": "Noevolve", - "form_610": "Normal", - "form_611": "Crypto", - "form_612": "Erlöst", - "form_613": "Normal", - "form_614": "Crypto", - "form_615": "Erlöst", - "form_616": "Normal", - "form_617": "Crypto", - "form_618": "Erlöst", - "form_619": "Normal", - "form_620": "Crypto", - "form_621": "Erlöst", - "form_622": "Normal", - "form_623": "Crypto", - "form_624": "Erlöst", - "form_625": "Normal", - "form_626": "Crypto", - "form_627": "Erlöst", - "form_628": "Normal", - "form_629": "Crypto", - "form_630": "Erlöst", - "form_631": "Normal", - "form_632": "Crypto", - "form_633": "Erlöst", - "form_634": "Normal", - "form_635": "Crypto", - "form_636": "Erlöst", - "form_637": "Normal", - "form_638": "Crypto", - "form_639": "Erlöst", - "form_640": "Normal", - "form_641": "Crypto", - "form_642": "Erlöst", - "form_643": "Normal", - "form_644": "Crypto", - "form_645": "Erlöst", - "form_646": "Normal", - "form_647": "Crypto", - "form_648": "Erlöst", - "form_649": "Normal", - "form_650": "Crypto", - "form_651": "Erlöst", - "form_652": "Normal", - "form_653": "Crypto", - "form_654": "Erlöst", - "form_655": "Normal", - "form_656": "Crypto", - "form_657": "Erlöst", - "form_658": "Normal", - "form_659": "Crypto", - "form_660": "Erlöst", - "form_661": "Normal", - "form_662": "Crypto", - "form_663": "Erlöst", - "form_664": "Normal", - "form_665": "Crypto", - "form_666": "Erlöst", - "form_667": "Normal", - "form_668": "Crypto", - "form_669": "Erlöst", - "form_670": "Normal", - "form_671": "Crypto", - "form_672": "Erlöst", - "form_673": "Crypto", - "form_674": "Erlöst", - "form_675": "Crypto", - "form_676": "Erlöst", - "form_677": "Normal", - "form_678": "Crypto", - "form_679": "Erlöst", - "form_680": "Normal", - "form_681": "Crypto", - "form_682": "Erlöst", - "form_683": "Normal", - "form_684": "Crypto", - "form_685": "Erlöst", - "form_686": "Crypto", - "form_687": "Erlöst", - "form_688": "Normal", - "form_689": "Crypto", - "form_690": "Erlöst", - "form_691": "Normal", - "form_692": "Crypto", - "form_693": "Erlöst", - "form_694": "Normal", - "form_695": "Crypto", - "form_696": "Erlöst", - "form_697": "Normal", - "form_698": "Crypto", - "form_699": "Erlöst", - "form_700": "Normal", - "form_701": "Crypto", - "form_702": "Erlöst", - "form_703": "Normal", - "form_704": "Crypto", - "form_705": "Erlöst", - "form_706": "Normal", - "form_707": "Crypto", - "form_708": "Erlöst", - "form_709": "Crypto", - "form_710": "Erlöst", - "form_711": "Crypto", - "form_712": "Erlöst", - "form_713": "Normal", - "form_714": "Crypto", - "form_715": "Erlöst", - "form_716": "Normal", - "form_717": "Crypto", - "form_718": "Erlöst", - "form_719": "Normal", - "form_720": "Crypto", - "form_721": "Erlöst", - "form_722": "Normal", - "form_723": "Crypto", - "form_724": "Erlöst", - "form_725": "Crypto", - "form_726": "Erlöst", - "form_727": "Crypto", - "form_728": "Erlöst", - "form_729": "Normal", - "form_730": "Crypto", - "form_731": "Erlöst", - "form_732": "Crypto", - "form_733": "Erlöst", - "form_734": "Normal", - "form_735": "Crypto", - "form_736": "Erlöst", - "form_737": "Normal", - "form_738": "Crypto", - "form_739": "Erlöst", - "form_740": "Normal", - "form_741": "Crypto", - "form_742": "Erlöst", - "form_743": "Normal", - "form_744": "Crypto", - "form_745": "Erlöst", - "form_746": "Normal", - "form_747": "Crypto", - "form_748": "Erlöst", - "form_749": "Normal", - "form_750": "Crypto", - "form_751": "Erlöst", - "form_752": "Normal", - "form_753": "Crypto", - "form_754": "Erlöst", - "form_755": "Normal", - "form_756": "Crypto", - "form_757": "Erlöst", - "form_758": "Normal", - "form_759": "Crypto", - "form_760": "Erlöst", - "form_761": "Normal", - "form_762": "Crypto", - "form_763": "Erlöst", - "form_764": "Normal", - "form_765": "Crypto", - "form_766": "Erlöst", - "form_767": "Normal", - "form_768": "Crypto", - "form_769": "Erlöst", - "form_770": "Normal", - "form_771": "Crypto", - "form_772": "Erlöst", - "form_773": "Normal", - "form_774": "Crypto", - "form_775": "Erlöst", - "form_776": "Normal", - "form_777": "Crypto", - "form_778": "Erlöst", - "form_779": "Normal", - "form_780": "Crypto", - "form_781": "Erlöst", - "form_782": "Normal", - "form_783": "Crypto", - "form_784": "Erlöst", - "form_785": "Normal", - "form_786": "Crypto", - "form_787": "Erlöst", - "form_788": "Normal", - "form_789": "Crypto", - "form_790": "Erlöst", - "form_791": "Normal", - "form_792": "Crypto", - "form_793": "Erlöst", - "form_794": "Normal", - "form_795": "Crypto", - "form_796": "Erlöst", - "form_797": "Normal", - "form_798": "Crypto", - "form_799": "Erlöst", - "form_800": "Normal", - "form_801": "Crypto", - "form_802": "Erlöst", - "form_803": "Normal", - "form_804": "Crypto", - "form_805": "Erlöst", - "form_806": "Normal", - "form_807": "Crypto", - "form_808": "Erlöst", - "form_809": "Normal", - "form_810": "Crypto", - "form_811": "Erlöst", - "form_812": "Normal", - "form_813": "Crypto", - "form_814": "Erlöst", - "form_815": "Normal", - "form_816": "Crypto", - "form_817": "Erlöst", - "form_818": "Normal", - "form_819": "Crypto", - "form_820": "Erlöst", - "form_821": "Normal", - "form_822": "Crypto", - "form_823": "Erlöst", - "form_824": "Normal", - "form_825": "Crypto", - "form_826": "Erlöst", - "form_827": "Normal", - "form_828": "Crypto", - "form_829": "Erlöst", - "form_830": "Normal", - "form_831": "Crypto", - "form_832": "Erlöst", - "form_833": "Normal", - "form_834": "Crypto", - "form_835": "Erlöst", - "form_836": "Normal", - "form_837": "Crypto", - "form_838": "Erlöst", - "form_839": "Normal", - "form_840": "Crypto", - "form_841": "Erlöst", - "form_842": "Crypto", - "form_843": "Erlöst", - "form_844": "Crypto", - "form_845": "Erlöst", - "form_846": "Normal", - "form_847": "Crypto", - "form_848": "Erlöst", - "form_849": "Normal", - "form_850": "Crypto", - "form_851": "Erlöst", - "form_852": "Normal", - "form_853": "Crypto", - "form_854": "Erlöst", - "form_855": "Normal", - "form_856": "Crypto", - "form_857": "Erlöst", - "form_858": "Normal", - "form_859": "Crypto", - "form_860": "Erlöst", - "form_861": "Normal", - "form_862": "Crypto", - "form_863": "Erlöst", - "form_864": "Normal", - "form_865": "Crypto", - "form_866": "Erlöst", - "form_867": "Normal", - "form_868": "Crypto", - "form_869": "Erlöst", - "form_870": "Normal", - "form_871": "Crypto", - "form_872": "Erlöst", - "form_873": "Normal", - "form_874": "Crypto", - "form_875": "Erlöst", - "form_876": "Normal", - "form_877": "Crypto", - "form_878": "Erlöst", - "form_879": "Normal", - "form_880": "Crypto", - "form_881": "Erlöst", - "form_882": "Crypto", - "form_883": "Erlöst", - "form_884": "Crypto", - "form_885": "Erlöst", - "form_886": "Crypto", - "form_887": "Erlöst", - "form_888": "Normal", - "form_889": "Crypto", - "form_890": "Erlöst", - "form_891": "Normal", - "form_892": "Crypto", - "form_893": "Erlöst", - "form_894": "Mimikyu", - "form_895": "Yamask", - "form_896": "Cubone", - "form_897": "Shedinja", - "form_898": "Normal", - "form_899": "Crypto", - "form_900": "Erlöst", - "form_901": "VS 2019", - "form_902": "Normal", - "form_903": "Crypto", - "form_904": "Erlöst", - "form_905": "Normal", - "form_906": "Crypto", - "form_907": "Erlöst", - "form_908": "Normal", - "form_909": "Crypto", - "form_910": "Erlöst", - "form_911": "Normal", - "form_912": "Crypto", - "form_913": "Erlöst", - "form_914": "Normal", - "form_915": "Crypto", - "form_916": "Erlöst", - "form_917": "Normal", - "form_918": "Crypto", - "form_919": "Erlöst", - "form_920": "Normal", - "form_921": "Crypto", - "form_922": "Erlöst", - "form_923": "Normal", - "form_924": "Crypto", - "form_925": "Erlöst", - "form_926": "Normal", - "form_927": "Crypto", - "form_928": "Erlöst", - "form_929": "Normal", - "form_930": "Crypto", - "form_931": "Erlöst", - "form_932": "Normal", - "form_933": "Crypto", - "form_934": "Erlöst", - "form_935": "Normal", - "form_936": "Crypto", - "form_937": "Erlöst", - "form_938": "Normal", - "form_939": "Crypto", - "form_940": "Erlöst", - "form_941": "Normal", - "form_942": "Crypto", - "form_943": "Erlöst", - "form_944": "Galar", - "form_945": "Normal", - "form_946": "Galar", - "form_947": "Normal", - "form_948": "Galar", - "form_949": "Copy 2019", - "form_950": "Copy 2019", - "form_951": "Copy 2019", - "form_952": "Copy 2019", - "form_953": "Normal", - "form_954": "Crypto", - "form_955": "Erlöst", - "form_956": "Normal", - "form_957": "Crypto", - "form_958": "Erlöst", - "form_959": "Normal", - "form_960": "Crypto", - "form_961": "Erlöst", - "form_962": "Normal", - "form_963": "Crypto", - "form_964": "Erlöst", - "form_965": "Normal", - "form_966": "Crypto", - "form_967": "Erlöst", - "form_968": "Normal", - "form_969": "Crypto", - "form_970": "Erlöst", - "form_971": "Normal", - "form_972": "Crypto", - "form_973": "Erlöst", - "form_974": "Normal", - "form_975": "Crypto", - "form_976": "Erlöst", - "form_977": "Crypto", - "form_978": "Erlöst", - "form_979": "Crypto", - "form_980": "Erlöst", - "form_981": "Normal", - "form_982": "Crypto", - "form_983": "Erlöst", - "form_984": "Normal", - "form_985": "Crypto", - "form_986": "Erlöst", - "form_987": "Normal", - "form_988": "Crypto", - "form_989": "Erlöst", - "form_990": "Normal", - "form_991": "Crypto", - "form_992": "Erlöst", - "form_993": "Normal", - "form_994": "Crypto", - "form_995": "Erlöst", - "form_996": "Normal", - "form_997": "Crypto", - "form_998": "Erlöst", - "form_999": "Normal", - "form_1000": "Crypto", - "form_1001": "Erlöst", - "form_1002": "Normal", - "form_1003": "Crypto", - "form_1004": "Erlöst", - "form_1005": "Normal", - "form_1006": "Crypto", - "form_1007": "Erlöst", - "form_1008": "Normal", - "form_1009": "Crypto", - "form_1010": "Erlöst", - "form_1011": "Normal", - "form_1012": "Crypto", - "form_1013": "Erlöst", - "form_1014": "Normal", - "form_1015": "Crypto", - "form_1016": "Erlöst", - "form_1017": "Normal", - "form_1018": "Crypto", - "form_1019": "Erlöst", - "form_1020": "Normal", - "form_1021": "Crypto", - "form_1022": "Erlöst", - "form_1023": "Normal", - "form_1024": "Crypto", - "form_1025": "Erlöst", - "form_1026": "Normal", - "form_1027": "Crypto", - "form_1028": "Erlöst", - "form_1029": "Normal", - "form_1030": "Crypto", - "form_1031": "Erlöst", - "form_1032": "Normal", - "form_1033": "Crypto", - "form_1034": "Erlöst", - "form_1035": "Normal", - "form_1036": "Crypto", - "form_1037": "Erlöst", - "form_1038": "Normal", - "form_1039": "Crypto", - "form_1040": "Erlöst", - "form_1041": "Normal", - "form_1042": "Crypto", - "form_1043": "Erlöst", - "form_1044": "Normal", - "form_1045": "Crypto", - "form_1046": "Erlöst", - "form_1047": "Normal", - "form_1048": "Crypto", - "form_1049": "Erlöst", - "form_1050": "Normal", - "form_1051": "Crypto", - "form_1052": "Erlöst", - "form_1053": "Normal", - "form_1054": "Crypto", - "form_1055": "Erlöst", - "form_1056": "Normal", - "form_1057": "Crypto", - "form_1058": "Erlöst", - "form_1059": "Normal", - "form_1060": "Crypto", - "form_1061": "Erlöst", - "form_1062": "Normal", - "form_1063": "Crypto", - "form_1064": "Erlöst", - "form_1065": "Normal", - "form_1066": "Crypto", - "form_1067": "Erlöst", - "form_1068": "Normal", - "form_1069": "Crypto", - "form_1070": "Erlöst", - "form_1071": "Normal", - "form_1072": "Crypto", - "form_1073": "Erlöst", - "form_1074": "Normal", - "form_1075": "Crypto", - "form_1076": "Erlöst", - "form_1077": "Normal", - "form_1078": "Crypto", - "form_1079": "Erlöst", - "form_1080": "Normal", - "form_1081": "Crypto", - "form_1082": "Erlöst", - "form_1083": "Normal", - "form_1084": "Crypto", - "form_1085": "Erlöst", - "form_1086": "Normal", - "form_1087": "Crypto", - "form_1088": "Erlöst", - "form_1089": "Normal", - "form_1090": "Crypto", - "form_1091": "Erlöst", - "form_1092": "Normal", - "form_1093": "Crypto", - "form_1094": "Erlöst", - "form_1095": "Normal", - "form_1096": "Crypto", - "form_1097": "Erlöst", - "form_1098": "Normal", - "form_1099": "Crypto", - "form_1100": "Erlöst", - "form_1101": "Normal", - "form_1102": "Crypto", - "form_1103": "Erlöst", - "form_1104": "Normal", - "form_1105": "Crypto", - "form_1106": "Erlöst", - "form_1107": "Normal", - "form_1108": "Crypto", - "form_1109": "Erlöst", - "form_1110": "Normal", - "form_1111": "Crypto", - "form_1112": "Erlöst", - "form_1113": "Crypto", - "form_1114": "Erlöst", - "form_1115": "Normal", - "form_1116": "Crypto", - "form_1117": "Erlöst", - "form_1118": "Normal", - "form_1119": "Crypto", - "form_1120": "Erlöst", - "form_1121": "Normal", - "form_1122": "Crypto", - "form_1123": "Erlöst", - "form_1124": "Normal", - "form_1125": "Crypto", - "form_1126": "Erlöst", - "form_1127": "Normal", - "form_1128": "Crypto", - "form_1129": "Erlöst", - "form_1130": "Normal", - "form_1131": "Crypto", - "form_1132": "Erlöst", - "form_1133": "Normal", - "form_1134": "Crypto", - "form_1135": "Erlöst", - "form_1136": "Normal", - "form_1137": "Crypto", - "form_1138": "Erlöst", - "form_1139": "Normal", - "form_1140": "Crypto", - "form_1141": "Erlöst", - "form_1142": "Normal", - "form_1143": "Crypto", - "form_1144": "Erlöst", - "form_1145": "Normal", - "form_1146": "Crypto", - "form_1147": "Erlöst", - "form_1148": "Normal", - "form_1149": "Crypto", - "form_1150": "Erlöst", - "form_1151": "Normal", - "form_1152": "Crypto", - "form_1153": "Erlöst", - "form_1154": "Normal", - "form_1155": "Crypto", - "form_1156": "Erlöst", - "form_1157": "Normal", - "form_1158": "Crypto", - "form_1159": "Erlöst", - "form_1160": "Normal", - "form_1161": "Crypto", - "form_1162": "Erlöst", - "form_1163": "Normal", - "form_1164": "Crypto", - "form_1165": "Erlöst", - "form_1166": "Normal", - "form_1167": "Crypto", - "form_1168": "Erlöst", - "form_1169": "Normal", - "form_1170": "Crypto", - "form_1171": "Erlöst", - "form_1172": "Normal", - "form_1173": "Crypto", - "form_1174": "Erlöst", - "form_1175": "Normal", - "form_1176": "Crypto", - "form_1177": "Erlöst", - "form_1178": "Normal", - "form_1179": "Crypto", - "form_1180": "Erlöst", - "form_1181": "Normal", - "form_1182": "Crypto", - "form_1183": "Erlöst", - "form_1184": "Normal", - "form_1185": "Crypto", - "form_1186": "Erlöst", - "form_1187": "Normal", - "form_1188": "Crypto", - "form_1189": "Erlöst", - "form_1190": "Normal", - "form_1191": "Crypto", - "form_1192": "Erlöst", - "form_1193": "Normal", - "form_1194": "Crypto", - "form_1195": "Erlöst", - "form_1196": "Normal", - "form_1197": "Crypto", - "form_1198": "Erlöst", - "form_1199": "Normal", - "form_1200": "Crypto", - "form_1201": "Erlöst", - "form_1202": "Normal", - "form_1203": "Crypto", - "form_1204": "Erlöst", - "form_1205": "Normal", - "form_1206": "Crypto", - "form_1207": "Erlöst", - "form_1208": "Normal", - "form_1209": "Crypto", - "form_1210": "Erlöst", - "form_1211": "Normal", - "form_1212": "Crypto", - "form_1213": "Erlöst", - "form_1214": "Normal", - "form_1215": "Crypto", - "form_1216": "Erlöst", - "form_1217": "Normal", - "form_1218": "Crypto", - "form_1219": "Erlöst", - "form_1220": "Normal", - "form_1221": "Crypto", - "form_1222": "Erlöst", - "form_1223": "Normal", - "form_1224": "Crypto", - "form_1225": "Erlöst", - "form_1226": "Normal", - "form_1227": "Crypto", - "form_1228": "Erlöst", - "form_1229": "Normal", - "form_1230": "Crypto", - "form_1231": "Erlöst", - "form_1232": "Normal", - "form_1233": "Crypto", - "form_1234": "Erlöst", - "form_1235": "Normal", - "form_1236": "Crypto", - "form_1237": "Erlöst", - "form_1238": "Normal", - "form_1239": "Crypto", - "form_1240": "Erlöst", - "form_1241": "Normal", - "form_1242": "Crypto", - "form_1243": "Erlöst", - "form_1244": "Normal", - "form_1245": "Crypto", - "form_1246": "Erlöst", - "form_1247": "Normal", - "form_1248": "Crypto", - "form_1249": "Erlöst", - "form_1250": "Normal", - "form_1251": "Crypto", - "form_1252": "Erlöst", - "form_1253": "Normal", - "form_1254": "Crypto", - "form_1255": "Erlöst", - "form_1256": "Normal", - "form_1257": "Crypto", - "form_1258": "Erlöst", - "form_1259": "Normal", - "form_1260": "Crypto", - "form_1261": "Erlöst", - "form_1262": "Normal", - "form_1263": "Crypto", - "form_1264": "Erlöst", - "form_1265": "Normal", - "form_1266": "Crypto", - "form_1267": "Erlöst", - "form_1268": "Normal", - "form_1269": "Crypto", - "form_1270": "Erlöst", - "form_1271": "Normal", - "form_1272": "Crypto", - "form_1273": "Erlöst", - "form_1274": "Normal", - "form_1275": "Crypto", - "form_1276": "Erlöst", - "form_1277": "Normal", - "form_1278": "Crypto", - "form_1279": "Erlöst", - "form_1280": "Normal", - "form_1281": "Crypto", - "form_1282": "Erlöst", - "form_1283": "Normal", - "form_1284": "Crypto", - "form_1285": "Erlöst", - "form_1286": "Normal", - "form_1287": "Crypto", - "form_1288": "Erlöst", - "form_1289": "Normal", - "form_1290": "Crypto", - "form_1291": "Erlöst", - "form_1292": "Normal", - "form_1293": "Crypto", - "form_1294": "Erlöst", - "form_1295": "Normal", - "form_1296": "Crypto", - "form_1297": "Erlöst", - "form_1298": "Normal", - "form_1299": "Crypto", - "form_1300": "Erlöst", - "form_1301": "Normal", - "form_1302": "Crypto", - "form_1303": "Erlöst", - "form_1304": "Normal", - "form_1305": "Crypto", - "form_1306": "Erlöst", - "form_1307": "Normal", - "form_1308": "Crypto", - "form_1309": "Erlöst", - "form_1310": "Normal", - "form_1311": "Crypto", - "form_1312": "Erlöst", - "form_1313": "Normal", - "form_1314": "Crypto", - "form_1315": "Erlöst", - "form_1316": "Normal", - "form_1317": "Crypto", - "form_1318": "Erlöst", - "form_1319": "Normal", - "form_1320": "Crypto", - "form_1321": "Erlöst", - "form_1322": "Normal", - "form_1323": "Crypto", - "form_1324": "Erlöst", - "form_1325": "Normal", - "form_1326": "Crypto", - "form_1327": "Erlöst", - "form_1328": "Normal", - "form_1329": "Crypto", - "form_1330": "Erlöst", - "form_1331": "Normal", - "form_1332": "Crypto", - "form_1333": "Erlöst", - "form_1334": "Normal", - "form_1335": "Crypto", - "form_1336": "Erlöst", - "form_1337": "Normal", - "form_1338": "Crypto", - "form_1339": "Erlöst", - "form_1340": "Normal", - "form_1341": "Crypto", - "form_1342": "Erlöst", - "form_1343": "Normal", - "form_1344": "Crypto", - "form_1345": "Erlöst", - "form_1346": "Normal", - "form_1347": "Crypto", - "form_1348": "Erlöst", - "form_1349": "Normal", - "form_1350": "Crypto", - "form_1351": "Erlöst", - "form_1352": "Normal", - "form_1353": "Crypto", - "form_1354": "Erlöst", - "form_1355": "Normal", - "form_1356": "Crypto", - "form_1357": "Erlöst", - "form_1358": "Normal", - "form_1359": "Crypto", - "form_1360": "Erlöst", - "form_1361": "Normal", - "form_1362": "Crypto", - "form_1363": "Erlöst", - "form_1364": "Normal", - "form_1365": "Crypto", - "form_1366": "Erlöst", - "form_1367": "Normal", - "form_1368": "Crypto", - "form_1369": "Erlöst", - "form_1370": "Normal", - "form_1371": "Crypto", - "form_1372": "Erlöst", - "form_1373": "Crypto", - "form_1374": "Erlöst", - "form_1375": "Crypto", - "form_1376": "Erlöst", - "form_1377": "Crypto", - "form_1378": "Erlöst", - "form_1379": "Normal", - "form_1380": "Crypto", - "form_1381": "Erlöst", - "form_1382": "Normal", - "form_1383": "Crypto", - "form_1384": "Erlöst", - "form_1385": "Normal", - "form_1386": "Crypto", - "form_1387": "Erlöst", - "form_1388": "Normal", - "form_1389": "Crypto", - "form_1390": "Erlöst", - "form_1391": "Normal", - "form_1392": "Crypto", - "form_1393": "Erlöst", - "form_1394": "Normal", - "form_1395": "Crypto", - "form_1396": "Erlöst", - "form_1397": "Normal", - "form_1398": "Crypto", - "form_1399": "Erlöst", - "form_1400": "Normal", - "form_1401": "Crypto", - "form_1402": "Erlöst", - "form_1403": "Normal", - "form_1404": "Crypto", - "form_1405": "Erlöst", - "form_1406": "Normal", - "form_1407": "Crypto", - "form_1408": "Erlöst", - "form_1409": "Normal", - "form_1410": "Crypto", - "form_1411": "Erlöst", - "form_1412": "Normal", - "form_1413": "Crypto", - "form_1414": "Erlöst", - "form_1415": "Normal", - "form_1416": "Crypto", - "form_1417": "Erlöst", - "form_1418": "Normal", - "form_1419": "Crypto", - "form_1420": "Erlöst", - "form_1421": "Normal", - "form_1422": "Crypto", - "form_1423": "Erlöst", - "form_1424": "Normal", - "form_1425": "Crypto", - "form_1426": "Erlöst", - "form_1427": "Normal", - "form_1428": "Crypto", - "form_1429": "Erlöst", - "form_1430": "Normal", - "form_1431": "Crypto", - "form_1432": "Erlöst", - "form_1433": "Normal", - "form_1434": "Crypto", - "form_1435": "Erlöst", - "form_1436": "Normal", - "form_1437": "Crypto", - "form_1438": "Erlöst", - "form_1439": "Normal", - "form_1440": "Crypto", - "form_1441": "Erlöst", - "form_1442": "Normal", - "form_1443": "Crypto", - "form_1444": "Erlöst", - "form_1445": "Normal", - "form_1446": "Crypto", - "form_1447": "Erlöst", - "form_1448": "Normal", - "form_1449": "Crypto", - "form_1450": "Erlöst", - "form_1451": "Normal", - "form_1452": "Crypto", - "form_1453": "Erlöst", - "form_1454": "Normal", - "form_1455": "Crypto", - "form_1456": "Erlöst", - "form_1457": "Normal", - "form_1458": "Crypto", - "form_1459": "Erlöst", - "form_1460": "Normal", - "form_1461": "Crypto", - "form_1462": "Erlöst", - "form_1463": "Normal", - "form_1464": "Crypto", - "form_1465": "Erlöst", - "form_1466": "Normal", - "form_1467": "Crypto", - "form_1468": "Erlöst", - "form_1469": "Normal", - "form_1470": "Crypto", - "form_1471": "Erlöst", - "form_1472": "Normal", - "form_1473": "Crypto", - "form_1474": "Erlöst", - "form_1475": "Normal", - "form_1476": "Crypto", - "form_1477": "Erlöst", - "form_1478": "Normal", - "form_1479": "Crypto", - "form_1480": "Erlöst", - "form_1481": "Normal", - "form_1482": "Crypto", - "form_1483": "Erlöst", - "form_1484": "Normal", - "form_1485": "Crypto", - "form_1486": "Erlöst", - "form_1487": "Normal", - "form_1488": "Crypto", - "form_1489": "Erlöst", - "form_1490": "Normal", - "form_1491": "Crypto", - "form_1492": "Erlöst", - "form_1493": "Normal", - "form_1494": "Crypto", - "form_1495": "Erlöst", - "form_1496": "Normal", - "form_1497": "Crypto", - "form_1498": "Erlöst", - "form_1499": "Normal", - "form_1500": "Crypto", - "form_1501": "Erlöst", - "form_1502": "Normal", - "form_1503": "Crypto", - "form_1504": "Erlöst", - "form_1505": "Normal", - "form_1506": "Crypto", - "form_1507": "Erlöst", - "form_1508": "Normal", - "form_1509": "Crypto", - "form_1510": "Erlöst", - "form_1511": "Normal", - "form_1512": "Crypto", - "form_1513": "Erlöst", - "form_1514": "Normal", - "form_1515": "Crypto", - "form_1516": "Erlöst", - "form_1517": "Normal", - "form_1518": "Crypto", - "form_1519": "Erlöst", - "form_1520": "Normal", - "form_1521": "Crypto", - "form_1522": "Erlöst", - "form_1523": "Normal", - "form_1524": "Crypto", - "form_1525": "Erlöst", - "form_1526": "Normal", - "form_1527": "Crypto", - "form_1528": "Erlöst", - "form_1529": "Normal", - "form_1530": "Crypto", - "form_1531": "Erlöst", - "form_1532": "Normal", - "form_1533": "Crypto", - "form_1534": "Erlöst", - "form_1535": "Normal", - "form_1536": "Crypto", - "form_1537": "Erlöst", - "form_1538": "Normal", - "form_1539": "Crypto", - "form_1540": "Erlöst", - "form_1541": "Normal", - "form_1542": "Crypto", - "form_1543": "Erlöst", - "form_1544": "Normal", - "form_1545": "Crypto", - "form_1546": "Erlöst", - "form_1547": "Normal", - "form_1548": "Crypto", - "form_1549": "Erlöst", - "form_1550": "Normal", - "form_1551": "Crypto", - "form_1552": "Erlöst", - "form_1553": "Normal", - "form_1554": "Crypto", - "form_1555": "Erlöst", - "form_1556": "Normal", - "form_1557": "Crypto", - "form_1558": "Erlöst", - "form_1559": "Normal", - "form_1560": "Crypto", - "form_1561": "Erlöst", - "form_1562": "Normal", - "form_1563": "Crypto", - "form_1564": "Erlöst", - "form_1565": "Normal", - "form_1566": "Crypto", - "form_1567": "Erlöst", - "form_1568": "Normal", - "form_1569": "Crypto", - "form_1570": "Erlöst", - "form_1571": "Normal", - "form_1572": "Crypto", - "form_1573": "Erlöst", - "form_1574": "Normal", - "form_1575": "Crypto", - "form_1576": "Erlöst", - "form_1577": "Normal", - "form_1578": "Crypto", - "form_1579": "Erlöst", - "form_1580": "Normal", - "form_1581": "Crypto", - "form_1582": "Erlöst", - "form_1583": "Normal", - "form_1584": "Crypto", - "form_1585": "Erlöst", - "form_1586": "Normal", - "form_1587": "Crypto", - "form_1588": "Erlöst", - "form_1589": "Normal", - "form_1590": "Crypto", - "form_1591": "Erlöst", - "form_1592": "Normal", - "form_1593": "Crypto", - "form_1594": "Erlöst", - "form_1595": "Normal", - "form_1596": "Crypto", - "form_1597": "Erlöst", - "form_1598": "Normal", - "form_1599": "Crypto", - "form_1600": "Erlöst", - "form_1601": "Normal", - "form_1602": "Crypto", - "form_1603": "Erlöst", - "form_1604": "Normal", - "form_1605": "Crypto", - "form_1606": "Erlöst", - "form_1607": "Normal", - "form_1608": "Crypto", - "form_1609": "Erlöst", - "form_1610": "Normal", - "form_1611": "Crypto", - "form_1612": "Erlöst", - "form_1613": "Normal", - "form_1614": "Crypto", - "form_1615": "Erlöst", - "form_1616": "Normal", - "form_1617": "Crypto", - "form_1618": "Erlöst", - "form_1619": "Normal", - "form_1620": "Crypto", - "form_1621": "Erlöst", - "form_1622": "Normal", - "form_1623": "Crypto", - "form_1624": "Erlöst", - "form_1625": "Normal", - "form_1626": "Crypto", - "form_1627": "Erlöst", - "form_1628": "Normal", - "form_1629": "Crypto", - "form_1630": "Erlöst", - "form_1631": "Normal", - "form_1632": "Crypto", - "form_1633": "Erlöst", - "form_1634": "Normal", - "form_1635": "Crypto", - "form_1636": "Erlöst", - "form_1637": "Normal", - "form_1638": "Crypto", - "form_1639": "Erlöst", - "form_1640": "Normal", - "form_1641": "Crypto", - "form_1642": "Erlöst", - "form_1643": "Normal", - "form_1644": "Crypto", - "form_1645": "Erlöst", - "form_1646": "Normal", - "form_1647": "Crypto", - "form_1648": "Erlöst", - "form_1649": "Normal", - "form_1650": "Crypto", - "form_1651": "Erlöst", - "form_1652": "Normal", - "form_1653": "Crypto", - "form_1654": "Erlöst", - "form_1655": "Normal", - "form_1656": "Crypto", - "form_1657": "Erlöst", - "form_1658": "Normal", - "form_1659": "Crypto", - "form_1660": "Erlöst", - "form_1661": "Normal", - "form_1662": "Crypto", - "form_1663": "Erlöst", - "form_1664": "Normal", - "form_1665": "Crypto", - "form_1666": "Erlöst", - "form_1667": "Normal", - "form_1668": "Crypto", - "form_1669": "Erlöst", - "form_1670": "Normal", - "form_1671": "Crypto", - "form_1672": "Erlöst", - "form_1673": "Normal", - "form_1674": "Crypto", - "form_1675": "Erlöst", - "form_1676": "Normal", - "form_1677": "Crypto", - "form_1678": "Erlöst", - "form_1679": "Normal", - "form_1680": "Crypto", - "form_1681": "Erlöst", - "form_1682": "Normal", - "form_1683": "Crypto", - "form_1684": "Erlöst", - "form_1685": "Normal", - "form_1686": "Crypto", - "form_1687": "Erlöst", - "form_1688": "Normal", - "form_1689": "Crypto", - "form_1690": "Erlöst", - "form_1691": "Normal", - "form_1692": "Crypto", - "form_1693": "Erlöst", - "form_1694": "Normal", - "form_1695": "Crypto", - "form_1696": "Erlöst", - "form_1697": "Normal", - "form_1698": "Crypto", - "form_1699": "Erlöst", - "form_1700": "Normal", - "form_1701": "Crypto", - "form_1702": "Erlöst", - "form_1703": "Normal", - "form_1704": "Crypto", - "form_1705": "Erlöst", - "form_1706": "Normal", - "form_1707": "Crypto", - "form_1708": "Erlöst", - "form_1709": "Normal", - "form_1710": "Crypto", - "form_1711": "Erlöst", - "form_1712": "Normal", - "form_1713": "Crypto", - "form_1714": "Erlöst", - "form_1715": "Normal", - "form_1716": "Crypto", - "form_1717": "Erlöst", - "form_1718": "Normal", - "form_1719": "Crypto", - "form_1720": "Erlöst", - "form_1721": "Normal", - "form_1722": "Crypto", - "form_1723": "Erlöst", - "form_1724": "Normal", - "form_1725": "Crypto", - "form_1726": "Erlöst", - "form_1727": "Normal", - "form_1728": "Crypto", - "form_1729": "Erlöst", - "form_1730": "Normal", - "form_1731": "Crypto", - "form_1732": "Erlöst", - "form_1733": "Normal", - "form_1734": "Crypto", - "form_1735": "Erlöst", - "form_1736": "Normal", - "form_1737": "Crypto", - "form_1738": "Erlöst", - "form_1739": "Normal", - "form_1740": "Crypto", - "form_1741": "Erlöst", - "form_1742": "Normal", - "form_1743": "Crypto", - "form_1744": "Erlöst", - "form_1745": "Normal", - "form_1746": "Crypto", - "form_1747": "Erlöst", - "form_1748": "Normal", - "form_1749": "Crypto", - "form_1750": "Erlöst", - "form_1751": "Normal", - "form_1752": "Crypto", - "form_1753": "Erlöst", - "form_1754": "Normal", - "form_1755": "Crypto", - "form_1756": "Erlöst", - "form_1757": "Normal", - "form_1758": "Crypto", - "form_1759": "Erlöst", - "form_1760": "Normal", - "form_1761": "Crypto", - "form_1762": "Erlöst", - "form_1763": "Normal", - "form_1764": "Crypto", - "form_1765": "Erlöst", - "form_1766": "Normal", - "form_1767": "Crypto", - "form_1768": "Erlöst", - "form_1769": "Normal", - "form_1770": "Crypto", - "form_1771": "Erlöst", - "form_1772": "Normal", - "form_1773": "Crypto", - "form_1774": "Erlöst", - "form_1775": "Normal", - "form_1776": "Crypto", - "form_1777": "Erlöst", - "form_1778": "Normal", - "form_1779": "Crypto", - "form_1780": "Erlöst", - "form_1781": "Normal", - "form_1782": "Crypto", - "form_1783": "Erlöst", - "form_1784": "Normal", - "form_1785": "Crypto", - "form_1786": "Erlöst", - "form_1787": "Normal", - "form_1788": "Crypto", - "form_1789": "Erlöst", - "form_1790": "Normal", - "form_1791": "Crypto", - "form_1792": "Erlöst", - "form_1793": "Normal", - "form_1794": "Crypto", - "form_1795": "Erlöst", - "form_1796": "Normal", - "form_1797": "Crypto", - "form_1798": "Erlöst", - "form_1799": "Normal", - "form_1800": "Crypto", - "form_1801": "Erlöst", - "form_1802": "Normal", - "form_1803": "Crypto", - "form_1804": "Erlöst", - "form_1805": "Normal", - "form_1806": "Crypto", - "form_1807": "Erlöst", - "form_1808": "Normal", - "form_1809": "Crypto", - "form_1810": "Erlöst", - "form_1811": "Normal", - "form_1812": "Crypto", - "form_1813": "Erlöst", - "form_1814": "Normal", - "form_1815": "Crypto", - "form_1816": "Erlöst", - "form_1817": "Normal", - "form_1818": "Crypto", - "form_1819": "Erlöst", - "form_1820": "Normal", - "form_1821": "Crypto", - "form_1822": "Erlöst", - "form_1823": "Normal", - "form_1824": "Crypto", - "form_1825": "Erlöst", - "form_1826": "Normal", - "form_1827": "Crypto", - "form_1828": "Erlöst", - "form_1829": "Normal", - "form_1830": "Crypto", - "form_1831": "Erlöst", - "form_1832": "Normal", - "form_1833": "Crypto", - "form_1834": "Erlöst", - "form_1835": "Normal", - "form_1836": "Crypto", - "form_1837": "Erlöst", - "form_1838": "Normal", - "form_1839": "Crypto", - "form_1840": "Erlöst", - "form_1841": "Normal", - "form_1842": "Crypto", - "form_1843": "Erlöst", - "form_1844": "Normal", - "form_1845": "Crypto", - "form_1846": "Erlöst", - "form_1847": "Normal", - "form_1848": "Crypto", - "form_1849": "Erlöst", - "form_1850": "Normal", - "form_1851": "Crypto", - "form_1852": "Erlöst", - "form_1853": "Normal", - "form_1854": "Crypto", - "form_1855": "Erlöst", - "form_1856": "Normal", - "form_1857": "Crypto", - "form_1858": "Erlöst", - "form_1859": "Normal", - "form_1860": "Crypto", - "form_1861": "Erlöst", - "form_1862": "Normal", - "form_1863": "Crypto", - "form_1864": "Erlöst", - "form_1865": "Normal", - "form_1866": "Crypto", - "form_1867": "Erlöst", - "form_1868": "Normal", - "form_1869": "Crypto", - "form_1870": "Erlöst", - "form_1871": "Normal", - "form_1872": "Crypto", - "form_1873": "Erlöst", - "form_1874": "Normal", - "form_1875": "Crypto", - "form_1876": "Erlöst", - "form_1877": "Normal", - "form_1878": "Crypto", - "form_1879": "Erlöst", - "form_1880": "Normal", - "form_1881": "Crypto", - "form_1882": "Erlöst", - "form_1883": "Normal", - "form_1884": "Crypto", - "form_1885": "Erlöst", - "form_1886": "Normal", - "form_1887": "Crypto", - "form_1888": "Erlöst", - "form_1889": "Normal", - "form_1890": "Crypto", - "form_1891": "Erlöst", - "form_1892": "Normal", - "form_1893": "Crypto", - "form_1894": "Erlöst", - "form_1895": "Normal", - "form_1896": "Crypto", - "form_1897": "Erlöst", - "form_1898": "Normal", - "form_1899": "Crypto", - "form_1900": "Erlöst", - "form_1901": "Normal", - "form_1902": "Crypto", - "form_1903": "Erlöst", - "form_1904": "Normal", - "form_1905": "Crypto", - "form_1906": "Erlöst", - "form_1907": "Normal", - "form_1908": "Crypto", - "form_1909": "Erlöst", - "form_1910": "Normal", - "form_1911": "Crypto", - "form_1912": "Erlöst", - "form_1913": "Normal", - "form_1914": "Crypto", - "form_1915": "Erlöst", - "form_1916": "Normal", - "form_1917": "Crypto", - "form_1918": "Erlöst", - "form_1919": "Normal", - "form_1920": "Crypto", - "form_1921": "Erlöst", - "form_1922": "Normal", - "form_1923": "Crypto", - "form_1924": "Erlöst", - "form_1925": "Normal", - "form_1926": "Crypto", - "form_1927": "Erlöst", - "form_1928": "Normal", - "form_1929": "Crypto", - "form_1930": "Erlöst", - "form_1931": "Normal", - "form_1932": "Crypto", - "form_1933": "Erlöst", - "form_1934": "Normal", - "form_1935": "Crypto", - "form_1936": "Erlöst", - "form_1937": "Normal", - "form_1938": "Crypto", - "form_1939": "Erlöst", - "form_1940": "Normal", - "form_1941": "Crypto", - "form_1942": "Erlöst", - "form_1943": "Normal", - "form_1944": "Crypto", - "form_1945": "Erlöst", - "form_1946": "Normal", - "form_1947": "Crypto", - "form_1948": "Erlöst", - "form_1949": "Normal", - "form_1950": "Crypto", - "form_1951": "Erlöst", - "form_1952": "Normal", - "form_1953": "Crypto", - "form_1954": "Erlöst", - "form_1955": "Normal", - "form_1956": "Crypto", - "form_1957": "Erlöst", - "form_1958": "Normal", - "form_1959": "Crypto", - "form_1960": "Erlöst", - "form_1961": "Normal", - "form_1962": "Crypto", - "form_1963": "Erlöst", - "form_1964": "Normal", - "form_1965": "Crypto", - "form_1966": "Erlöst", - "form_1967": "Normal", - "form_1968": "Crypto", - "form_1969": "Erlöst", - "form_1970": "Normal", - "form_1971": "Crypto", - "form_1972": "Erlöst", - "form_1973": "Normal", - "form_1974": "Crypto", - "form_1975": "Erlöst", - "form_1976": "Normal", - "form_1977": "Crypto", - "form_1978": "Erlöst", - "form_1979": "Normal", - "form_1980": "Crypto", - "form_1981": "Erlöst", - "form_1982": "Normal", - "form_1983": "Crypto", - "form_1984": "Erlöst", - "form_1985": "Normal", - "form_1986": "Crypto", - "form_1987": "Erlöst", - "form_1988": "Normal", - "form_1989": "Crypto", - "form_1990": "Erlöst", - "form_1991": "Normal", - "form_1992": "Crypto", - "form_1993": "Erlöst", - "form_1994": "Normal", - "form_1995": "Crypto", - "form_1996": "Erlöst", - "form_1997": "Normal", - "form_1998": "Crypto", - "form_1999": "Erlöst", - "form_2000": "Normal", - "form_2001": "Crypto", - "form_2002": "Erlöst", - "form_2003": "Normal", - "form_2004": "Crypto", - "form_2005": "Erlöst", - "form_2006": "Normal", - "form_2007": "Crypto", - "form_2008": "Erlöst", - "form_2009": "Normal", - "form_2010": "Crypto", - "form_2011": "Erlöst", - "form_2012": "Normal", - "form_2013": "Crypto", - "form_2014": "Erlöst", - "form_2015": "Normal", - "form_2016": "Crypto", - "form_2017": "Erlöst", - "form_2018": "Normal", - "form_2019": "Crypto", - "form_2020": "Erlöst", - "form_2021": "Normal", - "form_2022": "Crypto", - "form_2023": "Erlöst", - "form_2024": "Normal", - "form_2025": "Crypto", - "form_2026": "Erlöst", - "form_2027": "Normal", - "form_2028": "Crypto", - "form_2029": "Erlöst", - "form_2030": "Normal", - "form_2031": "Crypto", - "form_2032": "Erlöst", - "form_2033": "Normal", - "form_2034": "Crypto", - "form_2035": "Erlöst", - "form_2036": "Normal", - "form_2037": "Crypto", - "form_2038": "Erlöst", - "form_2039": "Normal", - "form_2040": "Crypto", - "form_2041": "Erlöst", - "form_2042": "Normal", - "form_2043": "Crypto", - "form_2044": "Erlöst", - "form_2045": "Normal", - "form_2046": "Crypto", - "form_2047": "Erlöst", - "form_2048": "Normal", - "form_2049": "Crypto", - "form_2050": "Erlöst", - "form_2051": "Normal", - "form_2052": "Crypto", - "form_2053": "Erlöst", - "form_2054": "Normal", - "form_2055": "Crypto", - "form_2056": "Erlöst", - "form_2057": "Normal", - "form_2058": "Crypto", - "form_2059": "Erlöst", - "form_2060": "Normal", - "form_2061": "Crypto", - "form_2062": "Erlöst", - "form_2063": "Normal", - "form_2064": "Crypto", - "form_2065": "Erlöst", - "form_2066": "Normal", - "form_2067": "Crypto", - "form_2068": "Erlöst", - "form_2069": "Normal", - "form_2070": "Crypto", - "form_2071": "Erlöst", - "form_2072": "Normal", - "form_2073": "Crypto", - "form_2074": "Erlöst", - "form_2075": "Normal", - "form_2076": "Crypto", - "form_2077": "Erlöst", - "form_2078": "Normal", - "form_2079": "Crypto", - "form_2080": "Erlöst", - "form_2081": "Normal", - "form_2082": "Crypto", - "form_2083": "Erlöst", - "form_2084": "Normal", - "form_2085": "Crypto", - "form_2086": "Erlöst", - "form_2087": "Normal", - "form_2088": "Crypto", - "form_2089": "Erlöst", - "form_2090": "Normal", - "form_2091": "Crypto", - "form_2092": "Erlöst", - "form_2093": "Normal", - "form_2094": "Crypto", - "form_2095": "Erlöst", - "form_2096": "Normal", - "form_2097": "Crypto", - "form_2098": "Erlöst", - "form_2099": "Normal", - "form_2100": "Crypto", - "form_2101": "Erlöst", - "form_2102": "Normal", - "form_2103": "Crypto", - "form_2104": "Erlöst", - "form_2105": "Normal", - "form_2106": "Crypto", - "form_2107": "Erlöst", - "form_2108": "Normal", - "form_2109": "Crypto", - "form_2110": "Erlöst", - "form_2111": "Normal", - "form_2112": "Crypto", - "form_2113": "Erlöst", - "form_2114": "Normal", - "form_2115": "Crypto", - "form_2116": "Erlöst", - "form_2117": "Normal", - "form_2118": "Crypto", - "form_2119": "Erlöst", - "form_2120": "Normal", - "form_2121": "Crypto", - "form_2122": "Erlöst", - "form_2123": "Normal", - "form_2124": "Crypto", - "form_2125": "Erlöst", - "form_2126": "Normal", - "form_2127": "Crypto", - "form_2128": "Erlöst", - "form_2129": "Normal", - "form_2130": "Crypto", - "form_2131": "Erlöst", - "form_2132": "Normal", - "form_2133": "Crypto", - "form_2134": "Erlöst", - "form_2135": "Normal", - "form_2136": "Crypto", - "form_2137": "Erlöst", - "form_2138": "Normal", - "form_2139": "Crypto", - "form_2140": "Erlöst", - "form_2141": "Normal", - "form_2142": "Crypto", - "form_2143": "Erlöst", - "form_2144": "Normal", - "form_2145": "Crypto", - "form_2146": "Erlöst", - "form_2147": "Normal", - "form_2148": "Crypto", - "form_2149": "Erlöst", - "form_2150": "Normal", - "form_2151": "Crypto", - "form_2152": "Erlöst", - "form_2153": "Normal", - "form_2154": "Crypto", - "form_2155": "Erlöst", - "form_2156": "Normal", - "form_2157": "Crypto", - "form_2158": "Erlöst", - "form_2159": "Normal", - "form_2160": "Crypto", - "form_2161": "Erlöst", - "form_2162": "Normal", - "form_2163": "Crypto", - "form_2164": "Erlöst", - "form_2165": "Normal", - "form_2166": "Crypto", - "form_2167": "Erlöst", - "form_2168": "Normal", - "form_2169": "Crypto", - "form_2170": "Erlöst", - "form_2171": "Normal", - "form_2172": "Crypto", - "form_2173": "Erlöst", - "form_2174": "Normal", - "form_2175": "Crypto", - "form_2176": "Erlöst", - "form_2177": "Normal", - "form_2178": "Crypto", - "form_2179": "Erlöst", - "form_2180": "Normal", - "form_2181": "Crypto", - "form_2182": "Erlöst", - "form_2183": "Normal", - "form_2184": "Crypto", - "form_2185": "Erlöst", - "form_2186": "Normal", - "form_2187": "Crypto", - "form_2188": "Erlöst", - "form_2189": "Normal", - "form_2190": "Crypto", - "form_2191": "Erlöst", - "form_2192": "Normal", - "form_2193": "Crypto", - "form_2194": "Erlöst", - "form_2195": "Normal", - "form_2196": "Crypto", - "form_2197": "Erlöst", - "form_2198": "Normal", - "form_2199": "Crypto", - "form_2200": "Erlöst", - "form_2201": "Normal", - "form_2202": "Crypto", - "form_2203": "Erlöst", - "form_2204": "Normal", - "form_2205": "Crypto", - "form_2206": "Erlöst", - "form_2207": "Normal", - "form_2208": "Crypto", - "form_2209": "Erlöst", - "form_2210": "Normal", - "form_2211": "Crypto", - "form_2212": "Erlöst", - "form_2213": "Normal", - "form_2214": "Crypto", - "form_2215": "Erlöst", - "form_2216": "Normal", - "form_2217": "Crypto", - "form_2218": "Erlöst", - "form_2219": "Normal", - "form_2220": "Crypto", - "form_2221": "Erlöst", - "form_2222": "Normal", - "form_2223": "Crypto", - "form_2224": "Erlöst", - "form_2225": "Normal", - "form_2226": "Crypto", - "form_2227": "Erlöst", - "form_2228": "Normal", - "form_2229": "Crypto", - "form_2230": "Erlöst", - "form_2231": "Normal", - "form_2232": "Crypto", - "form_2233": "Erlöst", - "form_2234": "Normal", - "form_2235": "Crypto", - "form_2236": "Erlöst", - "form_2237": "Normal", - "form_2238": "Crypto", - "form_2239": "Erlöst", - "form_2240": "Normal", - "form_2241": "Crypto", - "form_2242": "Erlöst", - "form_2243": "Normal", - "form_2244": "Crypto", - "form_2245": "Erlöst", - "form_2246": "Normal", - "form_2247": "Crypto", - "form_2248": "Erlöst", - "form_2249": "Normal", - "form_2250": "Crypto", - "form_2251": "Erlöst", - "form_2252": "Normal", - "form_2253": "Crypto", - "form_2254": "Erlöst", - "form_2255": "Normal", - "form_2256": "Crypto", - "form_2257": "Erlöst", - "form_2258": "Normal", - "form_2259": "Crypto", - "form_2260": "Erlöst", - "form_2261": "Normal", - "form_2262": "Crypto", - "form_2263": "Erlöst", - "form_2264": "Normal", - "form_2265": "Crypto", - "form_2266": "Erlöst", - "form_2267": "Normal", - "form_2268": "Crypto", - "form_2269": "Erlöst", - "form_2270": "Normal", - "form_2271": "Crypto", - "form_2272": "Erlöst", - "form_2273": "Normal", - "form_2274": "Crypto", - "form_2275": "Erlöst", - "form_2276": "Normal", - "form_2277": "Crypto", - "form_2278": "Erlöst", - "form_2279": "Normal", - "form_2280": "Crypto", - "form_2281": "Erlöst", - "form_2282": "Normal", - "form_2283": "Crypto", - "form_2284": "Erlöst", - "form_2285": "Normal", - "form_2286": "Crypto", - "form_2287": "Erlöst", - "form_2288": "Normal", - "form_2289": "Crypto", - "form_2290": "Erlöst", - "form_2291": "Normal", - "form_2292": "Crypto", - "form_2293": "Erlöst", - "form_2294": "Normal", - "form_2295": "Crypto", - "form_2296": "Erlöst", - "form_2297": "Normal", - "form_2298": "Crypto", - "form_2299": "Erlöst", - "form_2300": "Normal", - "form_2301": "Crypto", - "form_2302": "Erlöst", - "form_2303": "Normal", - "form_2304": "Crypto", - "form_2305": "Erlöst", - "form_2306": "Normal", - "form_2307": "Crypto", - "form_2308": "Erlöst", - "form_2309": "Normal", - "form_2310": "Crypto", - "form_2311": "Erlöst", - "form_2312": "Normal", - "form_2313": "Crypto", - "form_2314": "Erlöst", - "form_2315": "Normal", - "form_2316": "Crypto", - "form_2317": "Erlöst", - "form_2318": "Normal", - "form_2319": "Crypto", - "form_2320": "Erlöst", - "form_2321": "Normal", - "form_2322": "Crypto", - "form_2323": "Erlöst", - "form_2324": "Normal", - "form_2325": "Crypto", - "form_2326": "Erlöst", - "form_2327": "Spring 2020", - "form_2328": "Spring 2020", - "form_2329": "Spring 2020", - "form_2330": "Female", - "form_2331": "Female", - "form_2332": "Costume 2020", - "form_2333": "Costume 2020", - "form_2334": "Costume 2020", - "form_2335": "Galar", - "form_2336": "Galar", - "form_2337": "Galar", - "form_2338": "Galar", - "form_2339": "Galar", - "form_2340": "Galar", - "form_2341": "Galar", - "form_2342": "Galar Standard", - "form_2343": "Galar Zen", - "form_2344": "Galar", - "form_2345": "Galar", - "form_2501": "Normal", - "form_2502": "Crypto", - "form_2503": "Erlöst", - "form_2504": "Normal", - "form_2505": "Crypto", - "form_2506": "Erlöst", - "form_2510": "Normal", - "form_2511": "Crypto", - "form_2512": "Erlöst", - "form_2516": "Normal", - "form_2517": "Crypto", - "form_2518": "Erlöst", - "form_2582": "Galar", - "form_2583": "Galar", - "form_2585": "Costume 2020", - "form_2586": "Costume 2020", - "form_2587": "Normal", - "form_2588": "Female", - "form_2589": "Normal", - "form_2590": "Female", - "form_2591": "Ten Percent", - "form_2592": "Fifty Percent", - "form_2593": "Complete", - "form_2594": "Archipelago", - "form_2595": "Continental", - "form_2596": "Elegant", - "form_2597": "Fancy", - "form_2598": "Garden", - "form_2599": "High Plains", - "form_2600": "Icy Snow", - "form_2601": "Jungle", - "form_2602": "Marine", - "form_2603": "Meadow", - "form_2604": "Modern", - "form_2605": "Monsoon", - "form_2606": "Ocean", - "form_2607": "Pokeball", - "form_2608": "Polar", - "form_2609": "River", - "form_2610": "Sandstorm", - "form_2611": "Savanna", - "form_2612": "Sun", - "form_2613": "Tundra", - "form_2614": "Red", - "form_2615": "Yellow", - "form_2616": "Orange", - "form_2617": "Blue", - "form_2618": "White", - "form_2619": "Red", - "form_2620": "Yellow", - "form_2621": "Orange", - "form_2622": "Blue", - "form_2623": "White", - "form_2624": "Red", - "form_2625": "Yellow", - "form_2626": "Orange", - "form_2627": "Blue", - "form_2628": "White", - "form_2629": "Natural", - "form_2630": "Heart", - "form_2631": "Star", - "form_2632": "Diamond", - "form_2633": "Debutante", - "form_2634": "Matron", - "form_2635": "Dandy", - "form_2636": "La Reine", - "form_2637": "Kabuki", - "form_2638": "Pharaoh", - "form_2639": "Shield", - "form_2640": "Blade", - "form_2641": "Small", - "form_2642": "Average", - "form_2643": "Large", - "form_2644": "Super", - "form_2645": "Small", - "form_2646": "Average", - "form_2647": "Large", - "form_2648": "Super", - "form_2649": "Neutral", - "form_2650": "Active", - "form_2651": "Confined", - "form_2652": "Unbound", - "form_2666": "Costume 2020 Deprecated", - "form_2668": "Costume 2020", - "form_2669": "Adventure Hat 2020", - "form_2670": "Winter 2020", - "form_2671": "Winter 2020", - "form_2672": "Winter 2020", - "form_2673": "2020", - "form_2674": "2021", - "costume_1": "Holiday", - "costume_2": "Party", - "costume_3": "Ash", - "costume_4": "Witch", - "costume_5": "Adventure", - "costume_6": "Black Cap", - "costume_7": "Flower", - "costume_8": "Toque", - "costume_9": "Detective", - "costume_10": "One Piece", - "costume_11": "Pokemon Day", - "move_1": "Donnerschock", - "move_2": "Ruckzuckhieb", - "move_3": "Kratzer", - "move_4": "Glut", - "move_5": "Rankenhieb", - "move_6": "Tackle", - "move_7": "Rasierblatt", - "move_8": "Bodycheck", - "move_9": "Aquaknarre", - "move_10": "Biss", - "move_11": "Klaps", - "move_12": "Duplexhieb", - "move_13": "Wickel", - "move_14": "Hyperstrahl", - "move_15": "Schlecker", - "move_16": "Finsteraura", - "move_17": "Smog", - "move_18": "Schlammbad", - "move_19": "Metallklaue", - "move_20": "Klammer", - "move_21": "Flammenrad", - "move_22": "Vielender", - "move_23": "Flügelschlag", - "move_24": "Flammenwurf", - "move_25": "Tiefschlag", - "move_26": "Schaufler", - "move_27": "Fußkick", - "move_28": "Kreuzhieb", - "move_29": "Psychoklinge", - "move_30": "Psystrahl", - "move_31": "Erdbeben", - "move_32": "Steinkante", - "move_33": "Eishieb", - "move_34": "Herzstempel", - "move_35": "Ladungsstoß", - "move_36": "Lichtkanone", - "move_37": "Pikser", - "move_38": "Bohrschnabel", - "move_39": "Eisstrahl", - "move_40": "Blizzard", - "move_41": "Luftschnitt", - "move_42": "Hitzewelle", - "move_43": "Duonadel", - "move_44": "Gifthieb", - "move_45": "Aero-Ass", - "move_46": "Schlagbohrer", - "move_47": "Blütenwirbel", - "move_48": "Megasauger", - "move_49": "Käfergebrumm", - "move_50": "Giftzahn", - "move_51": "Nachthieb", - "move_52": "Schlitzer", - "move_53": "Blubbstrahl", - "move_54": "Überroller", - "move_55": "Karateschlag", - "move_56": "Fußtritt", - "move_57": "Wasserdüse", - "move_58": "Nassschweif", - "move_59": "Samenbomben", - "move_60": "Psychoschock", - "move_61": "Steinwurf", - "move_62": "Antik-Kraft", - "move_63": "Felsgrab", - "move_64": "Steinhagel", - "move_65": "Juwelenkraft", - "move_66": "Schattenstoß", - "move_67": "Finsterfaust", - "move_68": "Dunkelklaue", - "move_69": "Unheilböen", - "move_70": "Spukball", - "move_71": "Patronenhieb", - "move_72": "Magnetbombe", - "move_73": "Stahlflügel", - "move_74": "Eisenschädel", - "move_75": "Parabolladung", - "move_76": "Funkensprung", - "move_77": "Donnerschlag", - "move_78": "Donner", - "move_79": "Donnerblitz", - "move_80": "Windhose", - "move_81": "Feuerodem", - "move_82": "Drachenpuls", - "move_83": "Drachenklaue", - "move_84": "Säuselstimme", - "move_85": "Diebeskuss", - "move_86": "Zauberschein", - "move_87": "Mondgewalt", - "move_88": "Knuddler", - "move_89": "Giftstreich", - "move_90": "Matschbombe", - "move_91": "Schlammwoge", - "move_92": "Mülltreffer", - "move_93": "Lehmschuss", - "move_94": "Knochenkeule", - "move_95": "Dampfwalze", - "move_96": "Schlammbombe", - "move_97": "Zornklinge", - "move_98": "Käferbiss", - "move_99": "Ampelleuchte", - "move_100": "Kreuzschere", - "move_101": "Nitroladung", - "move_102": "Funkenflug", - "move_103": "Feuersturm", - "move_104": "Lake", - "move_105": "Aquawelle", - "move_106": "Siedewasser", - "move_107": "Hydropumpe", - "move_108": "Psychokinese", - "move_109": "Psychostoß", - "move_110": "Eissplitter", - "move_111": "Eissturm", - "move_112": "Eisesodem", - "move_113": "Absorber", - "move_114": "Gigasauger", - "move_115": "Feuerschlag", - "move_116": "Solarstrahl", - "move_117": "Laubklinge", - "move_118": "Blattgeißel", - "move_119": "Platscher", - "move_120": "Säure", - "move_121": "Windschnitt", - "move_122": "Orkan", - "move_123": "Durchbruch", - "move_124": "Zerschneider", - "move_125": "Sternschauer", - "move_126": "Hornattacke", - "move_127": "Stampfer", - "move_128": "Kopfnuss", - "move_129": "Hyperzahn", - "move_130": "Slam", - "move_131": "Bodyslam", - "move_132": "Erholung", - "move_133": "Verzweifler", - "move_134": "Siedewasser", - "move_135": "Hydropumpe", - "move_136": "Wickel", - "move_137": "Wickel", - "move_200": "Zornklinge", - "move_201": "Käferbiss", - "move_202": "Biss", - "move_203": "Tiefschlag", - "move_204": "Feuerodem", - "move_205": "Donnerschock", - "move_206": "Funkensprung", - "move_207": "Fußkick", - "move_208": "Karateschlag", - "move_209": "Glut", - "move_210": "Flügelschlag", - "move_211": "Pikser", - "move_212": "Schlecker", - "move_213": "Dunkelklaue", - "move_214": "Rankenhieb", - "move_215": "Rasierblatt", - "move_216": "Lehmschuss", - "move_217": "Eissplitter", - "move_218": "Eisesodem", - "move_219": "Ruckzuckhieb", - "move_220": "Kratzer", - "move_221": "Tackle", - "move_222": "Klaps", - "move_223": "Zerschneider", - "move_224": "Gifthieb", - "move_225": "Säure", - "move_226": "Psychoklinge", - "move_227": "Steinwurf", - "move_228": "Metallklaue", - "move_229": "Patronenhieb", - "move_230": "Aquaknarre", - "move_231": "Platscher", - "move_232": "Aquaknarre", - "move_233": "Lehmschelle", - "move_234": "Zen-Kopfstoß", - "move_235": "Konfusion", - "move_236": "Giftstachel", - "move_237": "Blubber", - "move_238": "Finte", - "move_239": "Stahlflügel", - "move_240": "Feuerzahn", - "move_241": "Zertrümmerer", - "move_242": "Wandler", - "move_243": "Konter", - "move_244": "Pulverschnee", - "move_245": "Nahkampf", - "move_246": "Wuchtschlag", - "move_247": "Fokusstoß", - "move_248": "Aurorastrahl", - "move_249": "Ladestrahl", - "move_250": "Voltwechsel", - "move_251": "Stromstoß", - "move_252": "Blitzkanone", - "move_253": "Drachenrute", - "move_254": "Lawine", - "move_255": "Luftschnitt", - "move_256": "Sturzflug", - "move_257": "Himmelsfeger", - "move_258": "Sandgrab", - "move_259": "Felswurf", - "move_260": "Plage", - "move_261": "Käfertrutz", - "move_262": "Silberhauch", - "move_263": "Erstauner", - "move_264": "Bürde", - "move_265": "Nachtnebel", - "move_266": "Eisenschweif", - "move_267": "Gyroball", - "move_268": "Rammboss", - "move_269": "Feuerwirbel", - "move_270": "Hitzekoller", - "move_271": "Kugelsaat", - "move_272": "Strauchler", - "move_273": "Energieball", - "move_274": "Sondersensor", - "move_275": "Seher", - "move_276": "Spiegelcape", - "move_277": "Wutanfall", - "move_278": "Standpauke", - "move_279": "Knirscher", - "move_280": "Schmarotzer", - "move_281": "Kraftreserve", - "move_287": "Gähner", - "move_282": "Bodycheck", - "move_285": "Draco Meteor", - "move_283": "Kaskade", - "move_284": "Surfer", - "move_288": "Psyschub", - "move_286": "Kismetwunsch", - "move_290": "Abgrundsklinge", - "move_289": "Ursprungswoge", - "move_291": "Geschenk", - "move_292": "Meteorologe", - "move_293": "Meteorologe", - "move_294": "Meteorologe", - "move_295": "Meteorologe", - "move_296": "Flora-Statue", - "move_298": "Lohekanonade", - "move_297": "Katapult", - "move_299": "Aquahaubitze", - "move_300": "Zuflucht", - "move_301": "Sternenhieb", - "move_302": "Schädelwumme", - "move_303": "Säurespeier", - "move_304": "Erdkräfte", - "move_305": "Krabbhammer", - "move_306": "Anfallen", - "move_307": "Zermalmklaue", - "move_308": "Octazooka", - "move_309": "Spiegelsalve", - "move_310": "Kraftkoloss", - "move_311": "Stachelfinale", - "move_312": "Grasmixer", - "move_313": "Blutsauger", - "move_314": "Ableithieb", - "move_315": "Schattenknochen", - "move_316": "Lehmbrühe", - "move_317": "Feuerfeger", - "move_318": "Kalkklinge", - "move_319": "Steigerungshieb", - "move_320": "Charme", - "move_321": "Gigastoß", - "move_322": "Frustration", - "move_323": "Rückkehr", - "move_324": "Synchrolärm", - "move_325": "Zielschuss", - "move_326": "Donnerzahn", - "move_327": "Eiszahn", - "move_328": "Hornbohrer", - "move_329": "Geofissur", - "move_330": "Sanctoklinge", - "move_331": "Flying Press", - "move_332": "Aurasphäre", - "move_333": "Gegenstoß", - "move_334": "Felswerfer", - "move_335": "Luftstoß", - "move_336": "Techblaster", - "move_337": "Techblaster", - "move_338": "Techblaster", - "move_339": "Techblaster", - "move_340": "Techblaster", - "move_341": "Fliegen", - "move_342": "V-Generator", - "move_343": "Blättersturm", - "move_344": "Triplette", - "move_345": "Windstoß", - "move_346": "Einäschern", - "move_347": "Dark Void", - "move_348": "Daunenreigen" -} diff --git a/static/locale/en.json b/static/locale/en.json deleted file mode 100644 index e78dbcc7..00000000 --- a/static/locale/en.json +++ /dev/null @@ -1,3622 +0,0 @@ -{ - "ALL_AREAS": "All Areas", - "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", - "CHANNEL_MESSAGES_DELETED": "{0} Channel {1} messages have been deleted.", - "DIRECT_MESSAGE_NOT_SUPPORTED": "{0} Direct message is not supported for this command.", - "DONATE_MESSAGE": "{0} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", - "EMBED_DIRECTIONS": "DIRECTIONS", - "ERROR_NESTS_DISABLED": "{0} Nests disabled.", - "ERROR_NESTS_LIST": "{0} Unable to retrieve nest list.", - "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", - "ERROR_NO_INVASION_SUBSCRIPTIONS": "{0} is not subscribed to any Team Rocket invasion notifications{1}.", - "ERROR_NO_QUEST_SUBSCRIPTIONS": "{0} is not subscribed to any quest notifications{1}.", - "ERROR_NO_RAID_SUBSCRIPTIONS": "{0} is not subscribed to any raid notifications{1}.", - "ERROR_NO_LURE_SUBSCRIPTIONS": "{0} is not subscribed to any lure notifications{1}.", - "ERROR_PARSING_USER_ID": "{0} Unable to recognize user id {1}.", - "EVENT_POKEMON_ADD": "{0} event Pokemon added to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_REMOVE": "{0} event Pokemon `{1}` removed.", - "EVENT_POKEMON_SET": "{0} event Pokemon set to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} Unable to remove {1} Pokemon subscriptions.", - "FEEDS_ASSIGNED_ALL_ROLES": "{0} was assigned all city feed roles.", - "FEEDS_ASSIGNED_ROLES": "{0} has joined role(s) **{1}**.", - "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{0} is already assigned to role(s) **{1}**.", - "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", - "FEEDS_INVALID_CITY_NAME": "{0} {1} is not a valid city name.", - "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{0} {1} is not a valid city name, type `{2}cities` to see a list of available cities.", - "FEEDS_PLEASE_WAIT": "{0} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", - "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{0}feedme cityname` to assign yourself to that city role.*", - "FEEDS_UNASSIGNED_ALL_ROLES": "{0} was unassigned all city feed roles.", - "FEEDS_UNASSIGNED_ROLES": "{0} has been removed from role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{0} is not assigned to role(s) **{1}**.", - "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({1})] [[Gym Image]({0})]", - "GYM_NAME": "- **{0}**", - "GYM_NO_POKESTOPS_CONVERTED": "{0} No Pokestops have been converted to Gyms.", - "GYM_NO_POKESTOPS_UPDATED": "{0} No Pokestops have been updated.", - "GYM_POKESTOPS_CONVERTED": "{0} {1} Pokestops updated to Gyms.", - "GYM_POKESTOPS_DELETED": "{0} {1} Pokestops deleted.", - "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", - "GYM_UNKNOWN_IMAGE": "Unknown Image Url", - "GYM_UNKNOWN_NAME": "Unknown Gym Name", - "MSG_INVALID_USER_MENTION": "{0} Failed to retrieve user with mention tag {1}.", - "MSG_NOT_MODERATOR_OR_HIGHER": "{0} is not a moderator or higher thus you may not see other's subscription settings.", - "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{0} Subscriptions are not enabled in the config.", - "MSG_USER_NOT_SUBSCRIBED": "{0} is not currently subscribed to any Pokemon or Raid notifications.", - "NOTIFY_COMMON_TYPE_POKEMON": "{0} {1} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {2}% or higher.", - "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your {2} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokestop lure notifications.", - "NOTIFY_DISTANCE_SET": "{0} Notifications only within a {1} meter radius of location {2},{3} will be sent.", - "NOTIFY_ENABLE_DISABLE": "{0} has **{1}d** Pokemon, Raid, Quest, and Invasion notifications.", - "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{0} does not have any subscriptions to export.", - "NOTIFY_EXPORT_SUCCESS": "{0} Download your subscription settings here.", - "NOTIFY_FROM": "{0} (From: {1})", - "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{0} added gym subscription `{1}` to your list of gyms to receive raid notifications from.", - "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{0} already subscribed to gym notifications from {1}.", - "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{0} Removed gym subscription `{1}` from your list of gyms to receive notifications from.", - "NOTIFY_ICON_STYLE_CHANGE": "{0} Icon style changed to **{1}**.", - "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{0} Unable to get uploaded attachment.", - "NOTIFY_IMPORT_MALFORMED_DATA": "{0} Malformed subscription data, unable to import.", - "NOTIFY_IMPORT_SUCCESS": "{0} subscriptions were imported successfully.", - "NOTIFY_IMPORT_UPLOAD_FILE": "{0} Please upload your subscriptions.json file to import now within 3 minutes...", - "NOTIFY_INVALID_ATTACK_VALUE": "{0} {1} is not a valid attack value. Must be between `0-15`.", - "NOTIFY_INVALID_CITY_ROLE": "{0} {1} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", - "NOTIFY_INVALID_COORDINATES": "{0} Unable not parse {1} as valid coordinates.", - "NOTIFY_INVALID_DEFENSE_VALUE": "{0} {1} is not a valid defense value. Must be between `0-15`.", - "NOTIFY_INVALID_GENDER": "{0} {1} is not a valid gender. (i.e. `m`, `f`, `*`)", - "NOTIFY_INVALID_ICON_STYLE": "{0} invalid icon style, type `{1}icons` to see a list of valid options.", - "NOTIFY_INVALID_INVASION_GENDER": "{0} Please specify a gender. i.e. `.invmenot fire-m` or `.invmenot water-f ontario or `.invmenot giovanni`", - "NOTIFY_INVALID_IV_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_INVALID_IV_VALUES": "{0} {1} is not a valid value. (Example: `0-15-6`)", - "NOTIFY_INVALID_LEVEL": "{0} {1} must be within the range of `0-35`.", - "NOTIFY_INVALID_MAXIMUM_LEVEL": "{0} Failed to parse maximum level provided '{1}'.", - "NOTIFY_INVALID_MINIMUM_IV": "{0} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", - "NOTIFY_INVALID_MINIMUM_LEVEL": "{0} Failed to parse minimum level provided '{1}'.", - "NOTIFY_INVALID_POKEMON_ID": "{0} {1} is not a valid Pokemon id.", - "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{0} {1} are not valid Pokemon names or IDs.", - "NOTIFY_INVALID_POKEMON_ID_OR_NAME": "{0} {1} are not valid Pokemon name or ID.", - "NOTIFY_INVALID_POKEMON_SPECIFIED": "{0} Unable to recognize any of the Pokemon you specified.", - "NOTIFY_INVALID_PVP_LEAGUE": "{0} {1} is not a valid PvP league. (Great or Ultra)", - "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_INVALID_PVP_RANK_RANGE": "{0} {1} must be within the range of `0-4096`.", - "NOTIFY_INVALID_STAMINA_VALUE": "{0} {1} is not a valid stamina value. Must be between `0-15`.", - "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Raid subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Quest subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Team Rocket Invasion subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Gym subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Lure subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{0} is not subscribed to any Pokemon notifications.", - "NOTIFY_PHONE_NUMBER_SET": "{0} Text message notifications for ultra rare Pokemon will be sent to {1}.", - "NOTIFY_SETTINGS_EMBED_CITIES": "Pokemon Feed Zones: ```{0}```", - "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{0} meters", - "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", - "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{0}**", - "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{0}**", - "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{0}**", - "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {0}% ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {0} ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_TITLE": "**{0} Notification Settings (Page: {1}/{2}):**", - "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} has unsubscribed from **all** gym notifications.", - "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Team Rocket invasion notifications.", - "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokemon notifications.", - "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} has unsubscribed from **all** {1} League PvP Pokemon notifications.", - "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} has unsubscribed from **all** quest notifications.", - "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} has unsubscribed from **all** raid boss notifications.", - "PVP_CP": "CP", - "PVP_GREAT_LEAGUE": "Great League", - "PVP_RANK": "Rank", - "PVP_ULTRA_LEAGUE": "Ultra League", - "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {0} of {1} total members.", - "SHINY_STATS_INVALID_CHANNEL": "{0} Shiny stats channel does not exist.", - "SHINY_STATS_MESSAGE": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours with a **1/{4}** ratio.", - "SHINY_STATS_NEWLINE": "----------------------------------------------", - "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {0}**]", - "SHINY_STATS_TOTAL_MESSAGE": "Found **{0}** total shinies out of **{1}** possiblities.", - "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{0}** total shinies out of **{1}** possiblities with a **1/{2}** ratio in total.", - "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", - "SUBSCRIPTIONS_FROM_CITY": " from city **{0}**", - "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** Team Rocket invasion reward notifications{2}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Team Rocket invasion reward notifications{2}.", - "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Pokemon notifications.", - "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** {2} League PvP notifications.", - "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** quest notifications{2}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** quest notifications{2}.", - "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** raid notifications{2}.", - "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** raid notifications{2}.", - "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** lure notifications{2}.", - "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** lure notifications{2}.", - "TIME_DAYS": "days", - "TIME_HOURS": "hours", - "TIME_MINUTES": "minutes", - "TIME_SECONDS": "seconds", - "TIME_YEARS": "years", - "UNKNOWN_POKESTOP": "Unknown Pokestop", - "alignment_1": "Shadow", - "alignment_2": "Purified", - "character_category_1": "Team Leader", - "character_category_2": "Grunt", - "costume_1": "Holiday", - "costume_10": "One Piece", - "costume_11": "Pokemon Day", - "costume_2": "Party", - "costume_3": "Ash", - "costume_4": "Witch", - "costume_5": "Adventure", - "costume_6": "Black Cap", - "costume_7": "Flower", - "costume_8": "Toque", - "costume_9": "Detective", - "evo_1": "Mega", - "evo_2": "Mega X", - "evo_3": "Mega Y", - "form_1": "A", - "form_2": "B", - "form_3": "C", - "form_4": "D", - "form_5": "E", - "form_6": "F", - "form_7": "G", - "form_8": "H", - "form_9": "I", - "form_10": "J", - "form_11": "K", - "form_12": "L", - "form_13": "M", - "form_14": "N", - "form_15": "O", - "form_16": "P", - "form_17": "Q", - "form_18": "R", - "form_19": "S", - "form_20": "T", - "form_21": "U", - "form_22": "V", - "form_23": "W", - "form_24": "X", - "form_25": "Y", - "form_26": "Z", - "form_27": "!", - "form_28": "?", - "form_29": "Normal", - "form_30": "Sunny", - "form_31": "Rainy", - "form_32": "Snowy", - "form_33": "Normal", - "form_34": "Attack", - "form_35": "Defense", - "form_36": "Speed", - "form_37": "00", - "form_38": "01", - "form_39": "02", - "form_40": "03", - "form_41": "04", - "form_42": "05", - "form_43": "06", - "form_44": "07", - "form_45": "Normal", - "form_46": "Alola", - "form_47": "Normal", - "form_48": "Alola", - "form_49": "Normal", - "form_50": "Alola", - "form_51": "Normal", - "form_52": "Alola", - "form_53": "Normal", - "form_54": "Alola", - "form_55": "Normal", - "form_56": "Alola", - "form_57": "Normal", - "form_58": "Alola", - "form_59": "Normal", - "form_60": "Alola", - "form_61": "Normal", - "form_62": "Alola", - "form_63": "Normal", - "form_64": "Alola", - "form_65": "Normal", - "form_66": "Alola", - "form_67": "Normal", - "form_68": "Alola", - "form_69": "Normal", - "form_70": "Alola", - "form_71": "Normal", - "form_72": "Alola", - "form_73": "Normal", - "form_74": "Alola", - "form_75": "Normal", - "form_76": "Alola", - "form_77": "Normal", - "form_78": "Alola", - "form_79": "Normal", - "form_80": "Alola", - "form_81": "Normal", - "form_82": "Frost", - "form_83": "Fan", - "form_84": "Mow", - "form_85": "Wash", - "form_86": "Heat", - "form_87": "Plant", - "form_88": "Sandy", - "form_89": "Trash", - "form_90": "Altered", - "form_91": "Origin", - "form_92": "Sky", - "form_93": "Land", - "form_94": "Overcast", - "form_95": "Sunny", - "form_96": "West Sea", - "form_97": "East Sea", - "form_98": "West Sea", - "form_99": "East Sea", - "form_100": "Normal", - "form_101": "Fighting", - "form_102": "Flying", - "form_103": "Poison", - "form_104": "Ground", - "form_105": "Rock", - "form_106": "Bug", - "form_107": "Ghost", - "form_108": "Steel", - "form_109": "Fire", - "form_110": "Water", - "form_111": "Grass", - "form_112": "Electric", - "form_113": "Psychic", - "form_114": "Ice", - "form_115": "Dragon", - "form_116": "Dark", - "form_117": "Fairy", - "form_118": "Plant", - "form_119": "Sandy", - "form_120": "Trash", - "form_121": "08", - "form_122": "09", - "form_123": "10", - "form_124": "11", - "form_125": "12", - "form_126": "13", - "form_127": "14", - "form_128": "15", - "form_129": "16", - "form_130": "17", - "form_131": "18", - "form_132": "19", - "form_133": "Armored", - "form_135": "Normal", - "form_136": "Red Striped", - "form_137": "Blue Striped", - "form_138": "Standard", - "form_139": "Zen", - "form_140": "Incarnate", - "form_141": "Therian", - "form_142": "Incarnate", - "form_143": "Therian", - "form_144": "Incarnate", - "form_145": "Therian", - "form_146": "Normal", - "form_147": "Black", - "form_148": "White", - "form_149": "Ordinary", - "form_150": "Resolute", - "form_151": "Aria", - "form_152": "Pirouette", - "form_153": "Shadow", - "form_154": "Purified", - "form_155": "Shadow", - "form_156": "Purified", - "form_157": "Normal", - "form_158": "Shadow", - "form_159": "Purified", - "form_160": "Normal", - "form_161": "Shadow", - "form_162": "Purified", - "form_163": "Normal", - "form_164": "Shadow", - "form_165": "Purified", - "form_166": "Normal", - "form_167": "Shadow", - "form_168": "Purified", - "form_169": "Normal", - "form_170": "Shadow", - "form_171": "Purified", - "form_172": "Normal", - "form_173": "Shadow", - "form_174": "Purified", - "form_175": "Normal", - "form_176": "Shadow", - "form_177": "Purified", - "form_178": "Normal", - "form_179": "Shadow", - "form_180": "Purified", - "form_181": "Normal", - "form_182": "Shadow", - "form_183": "Purified", - "form_184": "Normal", - "form_185": "Shadow", - "form_186": "Purified", - "form_187": "Normal", - "form_188": "Shadow", - "form_189": "Purified", - "form_190": "Normal", - "form_191": "Shadow", - "form_192": "Purified", - "form_193": "Normal", - "form_194": "Shadow", - "form_195": "Purified", - "form_196": "Normal", - "form_197": "Shadow", - "form_198": "Purified", - "form_199": "Normal", - "form_200": "Shadow", - "form_201": "Purified", - "form_202": "Normal", - "form_203": "Shadow", - "form_204": "Purified", - "form_205": "Normal", - "form_206": "Shadow", - "form_207": "Purified", - "form_208": "Normal", - "form_209": "Shadow", - "form_210": "Purified", - "form_211": "Normal", - "form_212": "Shadow", - "form_213": "Purified", - "form_214": "Normal", - "form_215": "Shadow", - "form_216": "Purified", - "form_217": "Normal", - "form_218": "Shadow", - "form_219": "Purified", - "form_220": "Shadow", - "form_221": "Purified", - "form_222": "Shadow", - "form_223": "Purified", - "form_224": "Normal", - "form_225": "Shadow", - "form_226": "Purified", - "form_227": "Shadow", - "form_228": "Purified", - "form_229": "Normal", - "form_230": "Shadow", - "form_231": "Purified", - "form_232": "Normal", - "form_233": "Shadow", - "form_234": "Purified", - "form_235": "Normal", - "form_236": "Shadow", - "form_237": "Purified", - "form_238": "Normal", - "form_239": "Shadow", - "form_240": "Purified", - "form_241": "Normal", - "form_242": "Shadow", - "form_243": "Purified", - "form_244": "Normal", - "form_245": "Shadow", - "form_246": "Purified", - "form_247": "Normal", - "form_248": "Shadow", - "form_249": "Purified", - "form_250": "Normal", - "form_251": "Shadow", - "form_252": "Purified", - "form_253": "Normal", - "form_254": "Shadow", - "form_255": "Purified", - "form_256": "Normal", - "form_257": "Shadow", - "form_258": "Purified", - "form_259": "Normal", - "form_260": "Shadow", - "form_261": "Purified", - "form_262": "Normal", - "form_263": "Shadow", - "form_264": "Purified", - "form_265": "Normal", - "form_266": "Shadow", - "form_267": "Purified", - "form_268": "Normal", - "form_269": "Shadow", - "form_270": "Purified", - "form_271": "Normal", - "form_272": "Shadow", - "form_273": "Purified", - "form_274": "Normal", - "form_275": "Shadow", - "form_276": "Purified", - "form_277": "Normal", - "form_278": "Shadow", - "form_279": "Purified", - "form_280": "Normal", - "form_281": "Shadow", - "form_282": "Purified", - "form_283": "Normal", - "form_284": "Shadow", - "form_285": "Purified", - "form_286": "Normal", - "form_287": "Shadow", - "form_288": "Purified", - "form_289": "Normal", - "form_290": "Shadow", - "form_291": "Purified", - "form_292": "Normal", - "form_293": "Shadow", - "form_294": "Purified", - "form_295": "Normal", - "form_296": "Shadow", - "form_297": "Purified", - "form_298": "Normal", - "form_299": "Shadow", - "form_300": "Purified", - "form_301": "Normal", - "form_302": "Shadow", - "form_303": "Purified", - "form_304": "Normal", - "form_305": "Shadow", - "form_306": "Purified", - "form_307": "Normal", - "form_308": "Shadow", - "form_309": "Purified", - "form_310": "Normal", - "form_311": "Shadow", - "form_312": "Purified", - "form_313": "Normal", - "form_314": "Shadow", - "form_315": "Purified", - "form_316": "Normal", - "form_317": "Shadow", - "form_318": "Purified", - "form_319": "Normal", - "form_320": "Shadow", - "form_321": "Purified", - "form_322": "Normal", - "form_323": "Shadow", - "form_324": "Purified", - "form_585": "Spring", - "form_586": "Summer", - "form_587": "Autumn", - "form_588": "Winter", - "form_589": "Spring", - "form_590": "Summer", - "form_591": "Autumn", - "form_592": "Winter", - "form_593": "Normal", - "form_594": "Shock", - "form_595": "Burn", - "form_596": "Chill", - "form_597": "Douse", - "form_598": "Normal", - "form_599": "Noevolve", - "form_600": "Normal", - "form_601": "Noevolve", - "form_602": "Normal", - "form_603": "Noevolve", - "form_604": "Noevolve", - "form_605": "Noevolve", - "form_606": "Noevolve", - "form_607": "Noevolve", - "form_608": "Noevolve", - "form_609": "Noevolve", - "form_610": "Normal", - "form_611": "Shadow", - "form_612": "Purified", - "form_613": "Normal", - "form_614": "Shadow", - "form_615": "Purified", - "form_616": "Normal", - "form_617": "Shadow", - "form_618": "Purified", - "form_619": "Normal", - "form_620": "Shadow", - "form_621": "Purified", - "form_622": "Normal", - "form_623": "Shadow", - "form_624": "Purified", - "form_625": "Normal", - "form_626": "Shadow", - "form_627": "Purified", - "form_628": "Normal", - "form_629": "Shadow", - "form_630": "Purified", - "form_631": "Normal", - "form_632": "Shadow", - "form_633": "Purified", - "form_634": "Normal", - "form_635": "Shadow", - "form_636": "Purified", - "form_637": "Normal", - "form_638": "Shadow", - "form_639": "Purified", - "form_640": "Normal", - "form_641": "Shadow", - "form_642": "Purified", - "form_643": "Normal", - "form_644": "Shadow", - "form_645": "Purified", - "form_646": "Normal", - "form_647": "Shadow", - "form_648": "Purified", - "form_649": "Normal", - "form_650": "Shadow", - "form_651": "Purified", - "form_652": "Normal", - "form_653": "Shadow", - "form_654": "Purified", - "form_655": "Normal", - "form_656": "Shadow", - "form_657": "Purified", - "form_658": "Normal", - "form_659": "Shadow", - "form_660": "Purified", - "form_661": "Normal", - "form_662": "Shadow", - "form_663": "Purified", - "form_664": "Normal", - "form_665": "Shadow", - "form_666": "Purified", - "form_667": "Normal", - "form_668": "Shadow", - "form_669": "Purified", - "form_670": "Normal", - "form_671": "Shadow", - "form_672": "Purified", - "form_673": "Shadow", - "form_674": "Purified", - "form_675": "Shadow", - "form_676": "Purified", - "form_677": "Normal", - "form_678": "Shadow", - "form_679": "Purified", - "form_680": "Normal", - "form_681": "Shadow", - "form_682": "Purified", - "form_683": "Normal", - "form_684": "Shadow", - "form_685": "Purified", - "form_686": "Shadow", - "form_687": "Purified", - "form_688": "Normal", - "form_689": "Shadow", - "form_690": "Purified", - "form_691": "Normal", - "form_692": "Shadow", - "form_693": "Purified", - "form_694": "Normal", - "form_695": "Shadow", - "form_696": "Purified", - "form_697": "Normal", - "form_698": "Shadow", - "form_699": "Purified", - "form_700": "Normal", - "form_701": "Shadow", - "form_702": "Purified", - "form_703": "Normal", - "form_704": "Shadow", - "form_705": "Purified", - "form_706": "Normal", - "form_707": "Shadow", - "form_708": "Purified", - "form_709": "Shadow", - "form_710": "Purified", - "form_711": "Shadow", - "form_712": "Purified", - "form_713": "Normal", - "form_714": "Shadow", - "form_715": "Purified", - "form_716": "Normal", - "form_717": "Shadow", - "form_718": "Purified", - "form_719": "Normal", - "form_720": "Shadow", - "form_721": "Purified", - "form_722": "Normal", - "form_723": "Shadow", - "form_724": "Purified", - "form_725": "Shadow", - "form_726": "Purified", - "form_727": "Shadow", - "form_728": "Purified", - "form_729": "Normal", - "form_730": "Shadow", - "form_731": "Purified", - "form_732": "Shadow", - "form_733": "Purified", - "form_734": "Normal", - "form_735": "Shadow", - "form_736": "Purified", - "form_737": "Normal", - "form_738": "Shadow", - "form_739": "Purified", - "form_740": "Normal", - "form_741": "Shadow", - "form_742": "Purified", - "form_743": "Normal", - "form_744": "Shadow", - "form_745": "Purified", - "form_746": "Normal", - "form_747": "Shadow", - "form_748": "Purified", - "form_749": "Normal", - "form_750": "Shadow", - "form_751": "Purified", - "form_752": "Normal", - "form_753": "Shadow", - "form_754": "Purified", - "form_755": "Normal", - "form_756": "Shadow", - "form_757": "Purified", - "form_758": "Normal", - "form_759": "Shadow", - "form_760": "Purified", - "form_761": "Normal", - "form_762": "Shadow", - "form_763": "Purified", - "form_764": "Normal", - "form_765": "Shadow", - "form_766": "Purified", - "form_767": "Normal", - "form_768": "Shadow", - "form_769": "Purified", - "form_770": "Normal", - "form_771": "Shadow", - "form_772": "Purified", - "form_773": "Normal", - "form_774": "Shadow", - "form_775": "Purified", - "form_776": "Normal", - "form_777": "Shadow", - "form_778": "Purified", - "form_779": "Normal", - "form_780": "Shadow", - "form_781": "Purified", - "form_782": "Normal", - "form_783": "Shadow", - "form_784": "Purified", - "form_785": "Normal", - "form_786": "Shadow", - "form_787": "Purified", - "form_788": "Normal", - "form_789": "Shadow", - "form_790": "Purified", - "form_791": "Normal", - "form_792": "Shadow", - "form_793": "Purified", - "form_794": "Normal", - "form_795": "Shadow", - "form_796": "Purified", - "form_797": "Normal", - "form_798": "Shadow", - "form_799": "Purified", - "form_800": "Normal", - "form_801": "Shadow", - "form_802": "Purified", - "form_803": "Normal", - "form_804": "Shadow", - "form_805": "Purified", - "form_806": "Normal", - "form_807": "Shadow", - "form_808": "Purified", - "form_809": "Normal", - "form_810": "Shadow", - "form_811": "Purified", - "form_812": "Normal", - "form_813": "Shadow", - "form_814": "Purified", - "form_815": "Normal", - "form_816": "Shadow", - "form_817": "Purified", - "form_818": "Normal", - "form_819": "Shadow", - "form_820": "Purified", - "form_821": "Normal", - "form_822": "Shadow", - "form_823": "Purified", - "form_824": "Normal", - "form_825": "Shadow", - "form_826": "Purified", - "form_827": "Normal", - "form_828": "Shadow", - "form_829": "Purified", - "form_830": "Normal", - "form_831": "Shadow", - "form_832": "Purified", - "form_833": "Normal", - "form_834": "Shadow", - "form_835": "Purified", - "form_836": "Normal", - "form_837": "Shadow", - "form_838": "Purified", - "form_839": "Normal", - "form_840": "Shadow", - "form_841": "Purified", - "form_842": "Shadow", - "form_843": "Purified", - "form_844": "Shadow", - "form_845": "Purified", - "form_846": "Normal", - "form_847": "Shadow", - "form_848": "Purified", - "form_849": "Normal", - "form_850": "Shadow", - "form_851": "Purified", - "form_852": "Normal", - "form_853": "Shadow", - "form_854": "Purified", - "form_855": "Normal", - "form_856": "Shadow", - "form_857": "Purified", - "form_858": "Normal", - "form_859": "Shadow", - "form_860": "Purified", - "form_861": "Normal", - "form_862": "Shadow", - "form_863": "Purified", - "form_864": "Normal", - "form_865": "Shadow", - "form_866": "Purified", - "form_867": "Normal", - "form_868": "Shadow", - "form_869": "Purified", - "form_870": "Normal", - "form_871": "Shadow", - "form_872": "Purified", - "form_873": "Normal", - "form_874": "Shadow", - "form_875": "Purified", - "form_876": "Normal", - "form_877": "Shadow", - "form_878": "Purified", - "form_879": "Normal", - "form_880": "Shadow", - "form_881": "Purified", - "form_882": "Shadow", - "form_883": "Purified", - "form_884": "Shadow", - "form_885": "Purified", - "form_886": "Shadow", - "form_887": "Purified", - "form_888": "Normal", - "form_889": "Shadow", - "form_890": "Purified", - "form_891": "Normal", - "form_892": "Shadow", - "form_893": "Purified", - "form_894": "Fall 2019", - "form_895": "Fall 2019", - "form_896": "Fall 2019", - "form_897": "Fall 2019", - "form_898": "Normal", - "form_899": "Shadow", - "form_900": "Purified", - "form_901": "Vs 2019", - "form_902": "Normal", - "form_903": "Shadow", - "form_904": "Purified", - "form_905": "Normal", - "form_906": "Shadow", - "form_907": "Purified", - "form_908": "Normal", - "form_909": "Shadow", - "form_910": "Purified", - "form_911": "Normal", - "form_912": "Shadow", - "form_913": "Purified", - "form_914": "Normal", - "form_915": "Shadow", - "form_916": "Purified", - "form_917": "Normal", - "form_918": "Shadow", - "form_919": "Purified", - "form_920": "Normal", - "form_921": "Shadow", - "form_922": "Purified", - "form_923": "Normal", - "form_924": "Shadow", - "form_925": "Purified", - "form_926": "Normal", - "form_927": "Shadow", - "form_928": "Purified", - "form_929": "Normal", - "form_930": "Shadow", - "form_931": "Purified", - "form_932": "Normal", - "form_933": "Shadow", - "form_934": "Purified", - "form_935": "Normal", - "form_936": "Shadow", - "form_937": "Purified", - "form_938": "Normal", - "form_939": "Shadow", - "form_940": "Purified", - "form_941": "Normal", - "form_942": "Shadow", - "form_943": "Purified", - "form_944": "Galarian", - "form_945": "Normal", - "form_946": "Galarian", - "form_947": "Normal", - "form_948": "Galarian", - "form_949": "Copy 2019", - "form_950": "Copy 2019", - "form_951": "Copy 2019", - "form_952": "Copy 2019", - "form_953": "Normal", - "form_954": "Shadow", - "form_955": "Purified", - "form_956": "Normal", - "form_957": "Shadow", - "form_958": "Purified", - "form_959": "Normal", - "form_960": "Shadow", - "form_961": "Purified", - "form_962": "Normal", - "form_963": "Shadow", - "form_964": "Purified", - "form_965": "Normal", - "form_966": "Shadow", - "form_967": "Purified", - "form_968": "Normal", - "form_969": "Shadow", - "form_970": "Purified", - "form_971": "Normal", - "form_972": "Shadow", - "form_973": "Purified", - "form_974": "Normal", - "form_975": "Shadow", - "form_976": "Purified", - "form_977": "Shadow", - "form_978": "Purified", - "form_979": "Shadow", - "form_980": "Purified", - "form_981": "Normal", - "form_982": "Shadow", - "form_983": "Purified", - "form_984": "Normal", - "form_985": "Shadow", - "form_986": "Purified", - "form_987": "Normal", - "form_988": "Shadow", - "form_989": "Purified", - "form_990": "Normal", - "form_991": "Shadow", - "form_992": "Purified", - "form_993": "Normal", - "form_994": "Shadow", - "form_995": "Purified", - "form_996": "Normal", - "form_997": "Shadow", - "form_998": "Purified", - "form_999": "Normal", - "form_1000": "Shadow", - "form_1001": "Purified", - "form_1002": "Normal", - "form_1003": "Shadow", - "form_1004": "Purified", - "form_1005": "Normal", - "form_1006": "Shadow", - "form_1007": "Purified", - "form_1008": "Normal", - "form_1009": "Shadow", - "form_1010": "Purified", - "form_1011": "Normal", - "form_1012": "Shadow", - "form_1013": "Purified", - "form_1014": "Normal", - "form_1015": "Shadow", - "form_1016": "Purified", - "form_1017": "Normal", - "form_1018": "Shadow", - "form_1019": "Purified", - "form_1020": "Normal", - "form_1021": "Shadow", - "form_1022": "Purified", - "form_1023": "Normal", - "form_1024": "Shadow", - "form_1025": "Purified", - "form_1026": "Normal", - "form_1027": "Shadow", - "form_1028": "Purified", - "form_1029": "Normal", - "form_1030": "Shadow", - "form_1031": "Purified", - "form_1032": "Normal", - "form_1033": "Shadow", - "form_1034": "Purified", - "form_1035": "Normal", - "form_1036": "Shadow", - "form_1037": "Purified", - "form_1038": "Normal", - "form_1039": "Shadow", - "form_1040": "Purified", - "form_1041": "Normal", - "form_1042": "Shadow", - "form_1043": "Purified", - "form_1044": "Normal", - "form_1045": "Shadow", - "form_1046": "Purified", - "form_1047": "Normal", - "form_1048": "Shadow", - "form_1049": "Purified", - "form_1050": "Normal", - "form_1051": "Shadow", - "form_1052": "Purified", - "form_1053": "Normal", - "form_1054": "Shadow", - "form_1055": "Purified", - "form_1056": "Normal", - "form_1057": "Shadow", - "form_1058": "Purified", - "form_1059": "Normal", - "form_1060": "Shadow", - "form_1061": "Purified", - "form_1062": "Normal", - "form_1063": "Shadow", - "form_1064": "Purified", - "form_1065": "Normal", - "form_1066": "Shadow", - "form_1067": "Purified", - "form_1068": "Normal", - "form_1069": "Shadow", - "form_1070": "Purified", - "form_1071": "Normal", - "form_1072": "Shadow", - "form_1073": "Purified", - "form_1074": "Normal", - "form_1075": "Shadow", - "form_1076": "Purified", - "form_1077": "Normal", - "form_1078": "Shadow", - "form_1079": "Purified", - "form_1080": "Normal", - "form_1081": "Shadow", - "form_1082": "Purified", - "form_1083": "Normal", - "form_1084": "Shadow", - "form_1085": "Purified", - "form_1086": "Normal", - "form_1087": "Shadow", - "form_1088": "Purified", - "form_1089": "Normal", - "form_1090": "Shadow", - "form_1091": "Purified", - "form_1092": "Normal", - "form_1093": "Shadow", - "form_1094": "Purified", - "form_1095": "Normal", - "form_1096": "Shadow", - "form_1097": "Purified", - "form_1098": "Normal", - "form_1099": "Shadow", - "form_1100": "Purified", - "form_1101": "Normal", - "form_1102": "Shadow", - "form_1103": "Purified", - "form_1104": "Normal", - "form_1105": "Shadow", - "form_1106": "Purified", - "form_1107": "Normal", - "form_1108": "Shadow", - "form_1109": "Purified", - "form_1110": "Normal", - "form_1111": "Shadow", - "form_1112": "Purified", - "form_1113": "Shadow", - "form_1114": "Purified", - "form_1115": "Normal", - "form_1116": "Shadow", - "form_1117": "Purified", - "form_1118": "Normal", - "form_1119": "Shadow", - "form_1120": "Purified", - "form_1121": "Normal", - "form_1122": "Shadow", - "form_1123": "Purified", - "form_1124": "Normal", - "form_1125": "Shadow", - "form_1126": "Purified", - "form_1127": "Normal", - "form_1128": "Shadow", - "form_1129": "Purified", - "form_1130": "Normal", - "form_1131": "Shadow", - "form_1132": "Purified", - "form_1133": "Normal", - "form_1134": "Shadow", - "form_1135": "Purified", - "form_1136": "Normal", - "form_1137": "Shadow", - "form_1138": "Purified", - "form_1139": "Normal", - "form_1140": "Shadow", - "form_1141": "Purified", - "form_1142": "Normal", - "form_1143": "Shadow", - "form_1144": "Purified", - "form_1145": "Normal", - "form_1146": "Shadow", - "form_1147": "Purified", - "form_1148": "Normal", - "form_1149": "Shadow", - "form_1150": "Purified", - "form_1151": "Normal", - "form_1152": "Shadow", - "form_1153": "Purified", - "form_1154": "Normal", - "form_1155": "Shadow", - "form_1156": "Purified", - "form_1157": "Normal", - "form_1158": "Shadow", - "form_1159": "Purified", - "form_1160": "Normal", - "form_1161": "Shadow", - "form_1162": "Purified", - "form_1163": "Normal", - "form_1164": "Shadow", - "form_1165": "Purified", - "form_1166": "Normal", - "form_1167": "Shadow", - "form_1168": "Purified", - "form_1169": "Normal", - "form_1170": "Shadow", - "form_1171": "Purified", - "form_1172": "Normal", - "form_1173": "Shadow", - "form_1174": "Purified", - "form_1175": "Normal", - "form_1176": "Shadow", - "form_1177": "Purified", - "form_1178": "Normal", - "form_1179": "Shadow", - "form_1180": "Purified", - "form_1181": "Normal", - "form_1182": "Shadow", - "form_1183": "Purified", - "form_1184": "Normal", - "form_1185": "Shadow", - "form_1186": "Purified", - "form_1187": "Normal", - "form_1188": "Shadow", - "form_1189": "Purified", - "form_1190": "Normal", - "form_1191": "Shadow", - "form_1192": "Purified", - "form_1193": "Normal", - "form_1194": "Shadow", - "form_1195": "Purified", - "form_1196": "Normal", - "form_1197": "Shadow", - "form_1198": "Purified", - "form_1199": "Normal", - "form_1200": "Shadow", - "form_1201": "Purified", - "form_1202": "Normal", - "form_1203": "Shadow", - "form_1204": "Purified", - "form_1205": "Normal", - "form_1206": "Shadow", - "form_1207": "Purified", - "form_1208": "Normal", - "form_1209": "Shadow", - "form_1210": "Purified", - "form_1211": "Normal", - "form_1212": "Shadow", - "form_1213": "Purified", - "form_1214": "Normal", - "form_1215": "Shadow", - "form_1216": "Purified", - "form_1217": "Normal", - "form_1218": "Shadow", - "form_1219": "Purified", - "form_1220": "Normal", - "form_1221": "Shadow", - "form_1222": "Purified", - "form_1223": "Normal", - "form_1224": "Shadow", - "form_1225": "Purified", - "form_1226": "Normal", - "form_1227": "Shadow", - "form_1228": "Purified", - "form_1229": "Normal", - "form_1230": "Shadow", - "form_1231": "Purified", - "form_1232": "Normal", - "form_1233": "Shadow", - "form_1234": "Purified", - "form_1235": "Normal", - "form_1236": "Shadow", - "form_1237": "Purified", - "form_1238": "Normal", - "form_1239": "Shadow", - "form_1240": "Purified", - "form_1241": "Normal", - "form_1242": "Shadow", - "form_1243": "Purified", - "form_1244": "Normal", - "form_1245": "Shadow", - "form_1246": "Purified", - "form_1247": "Normal", - "form_1248": "Shadow", - "form_1249": "Purified", - "form_1250": "Normal", - "form_1251": "Shadow", - "form_1252": "Purified", - "form_1253": "Normal", - "form_1254": "Shadow", - "form_1255": "Purified", - "form_1256": "Normal", - "form_1257": "Shadow", - "form_1258": "Purified", - "form_1259": "Normal", - "form_1260": "Shadow", - "form_1261": "Purified", - "form_1262": "Normal", - "form_1263": "Shadow", - "form_1264": "Purified", - "form_1265": "Normal", - "form_1266": "Shadow", - "form_1267": "Purified", - "form_1268": "Normal", - "form_1269": "Shadow", - "form_1270": "Purified", - "form_1271": "Normal", - "form_1272": "Shadow", - "form_1273": "Purified", - "form_1274": "Normal", - "form_1275": "Shadow", - "form_1276": "Purified", - "form_1277": "Normal", - "form_1278": "Shadow", - "form_1279": "Purified", - "form_1280": "Normal", - "form_1281": "Shadow", - "form_1282": "Purified", - "form_1283": "Normal", - "form_1284": "Shadow", - "form_1285": "Purified", - "form_1286": "Normal", - "form_1287": "Shadow", - "form_1288": "Purified", - "form_1289": "Normal", - "form_1290": "Shadow", - "form_1291": "Purified", - "form_1292": "Normal", - "form_1293": "Shadow", - "form_1294": "Purified", - "form_1295": "Normal", - "form_1296": "Shadow", - "form_1297": "Purified", - "form_1298": "Normal", - "form_1299": "Shadow", - "form_1300": "Purified", - "form_1301": "Normal", - "form_1302": "Shadow", - "form_1303": "Purified", - "form_1304": "Normal", - "form_1305": "Shadow", - "form_1306": "Purified", - "form_1307": "Normal", - "form_1308": "Shadow", - "form_1309": "Purified", - "form_1310": "Normal", - "form_1311": "Shadow", - "form_1312": "Purified", - "form_1313": "Normal", - "form_1314": "Shadow", - "form_1315": "Purified", - "form_1316": "Normal", - "form_1317": "Shadow", - "form_1318": "Purified", - "form_1319": "Normal", - "form_1320": "Shadow", - "form_1321": "Purified", - "form_1322": "Normal", - "form_1323": "Shadow", - "form_1324": "Purified", - "form_1325": "Normal", - "form_1326": "Shadow", - "form_1327": "Purified", - "form_1328": "Normal", - "form_1329": "Shadow", - "form_1330": "Purified", - "form_1331": "Normal", - "form_1332": "Shadow", - "form_1333": "Purified", - "form_1334": "Normal", - "form_1335": "Shadow", - "form_1336": "Purified", - "form_1337": "Normal", - "form_1338": "Shadow", - "form_1339": "Purified", - "form_1340": "Normal", - "form_1341": "Shadow", - "form_1342": "Purified", - "form_1343": "Normal", - "form_1344": "Shadow", - "form_1345": "Purified", - "form_1346": "Normal", - "form_1347": "Shadow", - "form_1348": "Purified", - "form_1349": "Normal", - "form_1350": "Shadow", - "form_1351": "Purified", - "form_1352": "Normal", - "form_1353": "Shadow", - "form_1354": "Purified", - "form_1355": "Normal", - "form_1356": "Shadow", - "form_1357": "Purified", - "form_1358": "Normal", - "form_1359": "Shadow", - "form_1360": "Purified", - "form_1361": "Normal", - "form_1362": "Shadow", - "form_1363": "Purified", - "form_1364": "Normal", - "form_1365": "Shadow", - "form_1366": "Purified", - "form_1367": "Normal", - "form_1368": "Shadow", - "form_1369": "Purified", - "form_1370": "Normal", - "form_1371": "Shadow", - "form_1372": "Purified", - "form_1373": "Shadow", - "form_1374": "Purified", - "form_1375": "Shadow", - "form_1376": "Purified", - "form_1377": "Shadow", - "form_1378": "Purified", - "form_1379": "Normal", - "form_1380": "Shadow", - "form_1381": "Purified", - "form_1382": "Normal", - "form_1383": "Shadow", - "form_1384": "Purified", - "form_1385": "Normal", - "form_1386": "Shadow", - "form_1387": "Purified", - "form_1388": "Normal", - "form_1389": "Shadow", - "form_1390": "Purified", - "form_1391": "Normal", - "form_1392": "Shadow", - "form_1393": "Purified", - "form_1394": "Normal", - "form_1395": "Shadow", - "form_1396": "Purified", - "form_1397": "Normal", - "form_1398": "Shadow", - "form_1399": "Purified", - "form_1400": "Normal", - "form_1401": "Shadow", - "form_1402": "Purified", - "form_1403": "Normal", - "form_1404": "Shadow", - "form_1405": "Purified", - "form_1406": "Normal", - "form_1407": "Shadow", - "form_1408": "Purified", - "form_1409": "Normal", - "form_1410": "Shadow", - "form_1411": "Purified", - "form_1412": "Normal", - "form_1413": "Shadow", - "form_1414": "Purified", - "form_1415": "Normal", - "form_1416": "Shadow", - "form_1417": "Purified", - "form_1418": "Normal", - "form_1419": "Shadow", - "form_1420": "Purified", - "form_1421": "Normal", - "form_1422": "Shadow", - "form_1423": "Purified", - "form_1424": "Normal", - "form_1425": "Shadow", - "form_1426": "Purified", - "form_1427": "Normal", - "form_1428": "Shadow", - "form_1429": "Purified", - "form_1430": "Normal", - "form_1431": "Shadow", - "form_1432": "Purified", - "form_1433": "Normal", - "form_1434": "Shadow", - "form_1435": "Purified", - "form_1436": "Normal", - "form_1437": "Shadow", - "form_1438": "Purified", - "form_1439": "Normal", - "form_1440": "Shadow", - "form_1441": "Purified", - "form_1442": "Normal", - "form_1443": "Shadow", - "form_1444": "Purified", - "form_1445": "Normal", - "form_1446": "Shadow", - "form_1447": "Purified", - "form_1448": "Normal", - "form_1449": "Shadow", - "form_1450": "Purified", - "form_1451": "Normal", - "form_1452": "Shadow", - "form_1453": "Purified", - "form_1454": "Normal", - "form_1455": "Shadow", - "form_1456": "Purified", - "form_1457": "Normal", - "form_1458": "Shadow", - "form_1459": "Purified", - "form_1460": "Normal", - "form_1461": "Shadow", - "form_1462": "Purified", - "form_1463": "Normal", - "form_1464": "Shadow", - "form_1465": "Purified", - "form_1466": "Normal", - "form_1467": "Shadow", - "form_1468": "Purified", - "form_1469": "Normal", - "form_1470": "Shadow", - "form_1471": "Purified", - "form_1472": "Normal", - "form_1473": "Shadow", - "form_1474": "Purified", - "form_1475": "Normal", - "form_1476": "Shadow", - "form_1477": "Purified", - "form_1478": "Normal", - "form_1479": "Shadow", - "form_1480": "Purified", - "form_1481": "Normal", - "form_1482": "Shadow", - "form_1483": "Purified", - "form_1484": "Normal", - "form_1485": "Shadow", - "form_1486": "Purified", - "form_1487": "Normal", - "form_1488": "Shadow", - "form_1489": "Purified", - "form_1490": "Normal", - "form_1491": "Shadow", - "form_1492": "Purified", - "form_1493": "Normal", - "form_1494": "Shadow", - "form_1495": "Purified", - "form_1496": "Normal", - "form_1497": "Shadow", - "form_1498": "Purified", - "form_1499": "Normal", - "form_1500": "Shadow", - "form_1501": "Purified", - "form_1502": "Normal", - "form_1503": "Shadow", - "form_1504": "Purified", - "form_1505": "Normal", - "form_1506": "Shadow", - "form_1507": "Purified", - "form_1508": "Normal", - "form_1509": "Shadow", - "form_1510": "Purified", - "form_1511": "Normal", - "form_1512": "Shadow", - "form_1513": "Purified", - "form_1514": "Normal", - "form_1515": "Shadow", - "form_1516": "Purified", - "form_1517": "Normal", - "form_1518": "Shadow", - "form_1519": "Purified", - "form_1520": "Normal", - "form_1521": "Shadow", - "form_1522": "Purified", - "form_1523": "Normal", - "form_1524": "Shadow", - "form_1525": "Purified", - "form_1526": "Normal", - "form_1527": "Shadow", - "form_1528": "Purified", - "form_1529": "Normal", - "form_1530": "Shadow", - "form_1531": "Purified", - "form_1532": "Normal", - "form_1533": "Shadow", - "form_1534": "Purified", - "form_1535": "Normal", - "form_1536": "Shadow", - "form_1537": "Purified", - "form_1538": "Normal", - "form_1539": "Shadow", - "form_1540": "Purified", - "form_1541": "Normal", - "form_1542": "Shadow", - "form_1543": "Purified", - "form_1544": "Normal", - "form_1545": "Shadow", - "form_1546": "Purified", - "form_1547": "Normal", - "form_1548": "Shadow", - "form_1549": "Purified", - "form_1550": "Normal", - "form_1551": "Shadow", - "form_1552": "Purified", - "form_1553": "Normal", - "form_1554": "Shadow", - "form_1555": "Purified", - "form_1556": "Normal", - "form_1557": "Shadow", - "form_1558": "Purified", - "form_1559": "Normal", - "form_1560": "Shadow", - "form_1561": "Purified", - "form_1562": "Normal", - "form_1563": "Shadow", - "form_1564": "Purified", - "form_1565": "Normal", - "form_1566": "Shadow", - "form_1567": "Purified", - "form_1568": "Normal", - "form_1569": "Shadow", - "form_1570": "Purified", - "form_1571": "Normal", - "form_1572": "Shadow", - "form_1573": "Purified", - "form_1574": "Normal", - "form_1575": "Shadow", - "form_1576": "Purified", - "form_1577": "Normal", - "form_1578": "Shadow", - "form_1579": "Purified", - "form_1580": "Normal", - "form_1581": "Shadow", - "form_1582": "Purified", - "form_1583": "Normal", - "form_1584": "Shadow", - "form_1585": "Purified", - "form_1586": "Normal", - "form_1587": "Shadow", - "form_1588": "Purified", - "form_1589": "Normal", - "form_1590": "Shadow", - "form_1591": "Purified", - "form_1592": "Normal", - "form_1593": "Shadow", - "form_1594": "Purified", - "form_1595": "Normal", - "form_1596": "Shadow", - "form_1597": "Purified", - "form_1598": "Normal", - "form_1599": "Shadow", - "form_1600": "Purified", - "form_1601": "Normal", - "form_1602": "Shadow", - "form_1603": "Purified", - "form_1604": "Normal", - "form_1605": "Shadow", - "form_1606": "Purified", - "form_1607": "Normal", - "form_1608": "Shadow", - "form_1609": "Purified", - "form_1610": "Normal", - "form_1611": "Shadow", - "form_1612": "Purified", - "form_1613": "Normal", - "form_1614": "Shadow", - "form_1615": "Purified", - "form_1616": "Normal", - "form_1617": "Shadow", - "form_1618": "Purified", - "form_1619": "Normal", - "form_1620": "Shadow", - "form_1621": "Purified", - "form_1622": "Normal", - "form_1623": "Shadow", - "form_1624": "Purified", - "form_1625": "Normal", - "form_1626": "Shadow", - "form_1627": "Purified", - "form_1628": "Normal", - "form_1629": "Shadow", - "form_1630": "Purified", - "form_1631": "Normal", - "form_1632": "Shadow", - "form_1633": "Purified", - "form_1634": "Normal", - "form_1635": "Shadow", - "form_1636": "Purified", - "form_1637": "Normal", - "form_1638": "Shadow", - "form_1639": "Purified", - "form_1640": "Normal", - "form_1641": "Shadow", - "form_1642": "Purified", - "form_1643": "Normal", - "form_1644": "Shadow", - "form_1645": "Purified", - "form_1646": "Normal", - "form_1647": "Shadow", - "form_1648": "Purified", - "form_1649": "Normal", - "form_1650": "Shadow", - "form_1651": "Purified", - "form_1652": "Normal", - "form_1653": "Shadow", - "form_1654": "Purified", - "form_1655": "Normal", - "form_1656": "Shadow", - "form_1657": "Purified", - "form_1658": "Normal", - "form_1659": "Shadow", - "form_1660": "Purified", - "form_1661": "Normal", - "form_1662": "Shadow", - "form_1663": "Purified", - "form_1664": "Normal", - "form_1665": "Shadow", - "form_1666": "Purified", - "form_1667": "Normal", - "form_1668": "Shadow", - "form_1669": "Purified", - "form_1670": "Normal", - "form_1671": "Shadow", - "form_1672": "Purified", - "form_1673": "Normal", - "form_1674": "Shadow", - "form_1675": "Purified", - "form_1676": "Normal", - "form_1677": "Shadow", - "form_1678": "Purified", - "form_1679": "Normal", - "form_1680": "Shadow", - "form_1681": "Purified", - "form_1682": "Normal", - "form_1683": "Shadow", - "form_1684": "Purified", - "form_1685": "Normal", - "form_1686": "Shadow", - "form_1687": "Purified", - "form_1688": "Normal", - "form_1689": "Shadow", - "form_1690": "Purified", - "form_1691": "Normal", - "form_1692": "Shadow", - "form_1693": "Purified", - "form_1694": "Normal", - "form_1695": "Shadow", - "form_1696": "Purified", - "form_1697": "Normal", - "form_1698": "Shadow", - "form_1699": "Purified", - "form_1700": "Normal", - "form_1701": "Shadow", - "form_1702": "Purified", - "form_1703": "Normal", - "form_1704": "Shadow", - "form_1705": "Purified", - "form_1706": "Normal", - "form_1707": "Shadow", - "form_1708": "Purified", - "form_1709": "Normal", - "form_1710": "Shadow", - "form_1711": "Purified", - "form_1712": "Normal", - "form_1713": "Shadow", - "form_1714": "Purified", - "form_1715": "Normal", - "form_1716": "Shadow", - "form_1717": "Purified", - "form_1718": "Normal", - "form_1719": "Shadow", - "form_1720": "Purified", - "form_1721": "Normal", - "form_1722": "Shadow", - "form_1723": "Purified", - "form_1724": "Normal", - "form_1725": "Shadow", - "form_1726": "Purified", - "form_1727": "Normal", - "form_1728": "Shadow", - "form_1729": "Purified", - "form_1730": "Normal", - "form_1731": "Shadow", - "form_1732": "Purified", - "form_1733": "Normal", - "form_1734": "Shadow", - "form_1735": "Purified", - "form_1736": "Normal", - "form_1737": "Shadow", - "form_1738": "Purified", - "form_1739": "Normal", - "form_1740": "Shadow", - "form_1741": "Purified", - "form_1742": "Normal", - "form_1743": "Shadow", - "form_1744": "Purified", - "form_1745": "Normal", - "form_1746": "Shadow", - "form_1747": "Purified", - "form_1748": "Normal", - "form_1749": "Shadow", - "form_1750": "Purified", - "form_1751": "Normal", - "form_1752": "Shadow", - "form_1753": "Purified", - "form_1754": "Normal", - "form_1755": "Shadow", - "form_1756": "Purified", - "form_1757": "Normal", - "form_1758": "Shadow", - "form_1759": "Purified", - "form_1760": "Normal", - "form_1761": "Shadow", - "form_1762": "Purified", - "form_1763": "Normal", - "form_1764": "Shadow", - "form_1765": "Purified", - "form_1766": "Normal", - "form_1767": "Shadow", - "form_1768": "Purified", - "form_1769": "Normal", - "form_1770": "Shadow", - "form_1771": "Purified", - "form_1772": "Normal", - "form_1773": "Shadow", - "form_1774": "Purified", - "form_1775": "Normal", - "form_1776": "Shadow", - "form_1777": "Purified", - "form_1778": "Normal", - "form_1779": "Shadow", - "form_1780": "Purified", - "form_1781": "Normal", - "form_1782": "Shadow", - "form_1783": "Purified", - "form_1784": "Normal", - "form_1785": "Shadow", - "form_1786": "Purified", - "form_1787": "Normal", - "form_1788": "Shadow", - "form_1789": "Purified", - "form_1790": "Normal", - "form_1791": "Shadow", - "form_1792": "Purified", - "form_1793": "Normal", - "form_1794": "Shadow", - "form_1795": "Purified", - "form_1796": "Normal", - "form_1797": "Shadow", - "form_1798": "Purified", - "form_1799": "Normal", - "form_1800": "Shadow", - "form_1801": "Purified", - "form_1802": "Normal", - "form_1803": "Shadow", - "form_1804": "Purified", - "form_1805": "Normal", - "form_1806": "Shadow", - "form_1807": "Purified", - "form_1808": "Normal", - "form_1809": "Shadow", - "form_1810": "Purified", - "form_1811": "Normal", - "form_1812": "Shadow", - "form_1813": "Purified", - "form_1814": "Normal", - "form_1815": "Shadow", - "form_1816": "Purified", - "form_1817": "Normal", - "form_1818": "Shadow", - "form_1819": "Purified", - "form_1820": "Normal", - "form_1821": "Shadow", - "form_1822": "Purified", - "form_1823": "Normal", - "form_1824": "Shadow", - "form_1825": "Purified", - "form_1826": "Normal", - "form_1827": "Shadow", - "form_1828": "Purified", - "form_1829": "Normal", - "form_1830": "Shadow", - "form_1831": "Purified", - "form_1832": "Normal", - "form_1833": "Shadow", - "form_1834": "Purified", - "form_1835": "Normal", - "form_1836": "Shadow", - "form_1837": "Purified", - "form_1838": "Normal", - "form_1839": "Shadow", - "form_1840": "Purified", - "form_1841": "Normal", - "form_1842": "Shadow", - "form_1843": "Purified", - "form_1844": "Normal", - "form_1845": "Shadow", - "form_1846": "Purified", - "form_1847": "Normal", - "form_1848": "Shadow", - "form_1849": "Purified", - "form_1850": "Normal", - "form_1851": "Shadow", - "form_1852": "Purified", - "form_1853": "Normal", - "form_1854": "Shadow", - "form_1855": "Purified", - "form_1856": "Normal", - "form_1857": "Shadow", - "form_1858": "Purified", - "form_1859": "Normal", - "form_1860": "Shadow", - "form_1861": "Purified", - "form_1862": "Normal", - "form_1863": "Shadow", - "form_1864": "Purified", - "form_1865": "Normal", - "form_1866": "Shadow", - "form_1867": "Purified", - "form_1868": "Normal", - "form_1869": "Shadow", - "form_1870": "Purified", - "form_1871": "Normal", - "form_1872": "Shadow", - "form_1873": "Purified", - "form_1874": "Normal", - "form_1875": "Shadow", - "form_1876": "Purified", - "form_1877": "Normal", - "form_1878": "Shadow", - "form_1879": "Purified", - "form_1880": "Normal", - "form_1881": "Shadow", - "form_1882": "Purified", - "form_1883": "Normal", - "form_1884": "Shadow", - "form_1885": "Purified", - "form_1886": "Normal", - "form_1887": "Shadow", - "form_1888": "Purified", - "form_1889": "Normal", - "form_1890": "Shadow", - "form_1891": "Purified", - "form_1892": "Normal", - "form_1893": "Shadow", - "form_1894": "Purified", - "form_1895": "Normal", - "form_1896": "Shadow", - "form_1897": "Purified", - "form_1898": "Normal", - "form_1899": "Shadow", - "form_1900": "Purified", - "form_1901": "Normal", - "form_1902": "Shadow", - "form_1903": "Purified", - "form_1904": "Normal", - "form_1905": "Shadow", - "form_1906": "Purified", - "form_1907": "Normal", - "form_1908": "Shadow", - "form_1909": "Purified", - "form_1910": "Normal", - "form_1911": "Shadow", - "form_1912": "Purified", - "form_1913": "Normal", - "form_1914": "Shadow", - "form_1915": "Purified", - "form_1916": "Normal", - "form_1917": "Shadow", - "form_1918": "Purified", - "form_1919": "Normal", - "form_1920": "Shadow", - "form_1921": "Purified", - "form_1922": "Normal", - "form_1923": "Shadow", - "form_1924": "Purified", - "form_1925": "Normal", - "form_1926": "Shadow", - "form_1927": "Purified", - "form_1928": "Normal", - "form_1929": "Shadow", - "form_1930": "Purified", - "form_1931": "Normal", - "form_1932": "Shadow", - "form_1933": "Purified", - "form_1934": "Normal", - "form_1935": "Shadow", - "form_1936": "Purified", - "form_1937": "Normal", - "form_1938": "Shadow", - "form_1939": "Purified", - "form_1940": "Normal", - "form_1941": "Shadow", - "form_1942": "Purified", - "form_1943": "Normal", - "form_1944": "Shadow", - "form_1945": "Purified", - "form_1946": "Normal", - "form_1947": "Shadow", - "form_1948": "Purified", - "form_1949": "Normal", - "form_1950": "Shadow", - "form_1951": "Purified", - "form_1952": "Normal", - "form_1953": "Shadow", - "form_1954": "Purified", - "form_1955": "Normal", - "form_1956": "Shadow", - "form_1957": "Purified", - "form_1958": "Normal", - "form_1959": "Shadow", - "form_1960": "Purified", - "form_1961": "Normal", - "form_1962": "Shadow", - "form_1963": "Purified", - "form_1964": "Normal", - "form_1965": "Shadow", - "form_1966": "Purified", - "form_1967": "Normal", - "form_1968": "Shadow", - "form_1969": "Purified", - "form_1970": "Normal", - "form_1971": "Shadow", - "form_1972": "Purified", - "form_1973": "Normal", - "form_1974": "Shadow", - "form_1975": "Purified", - "form_1976": "Normal", - "form_1977": "Shadow", - "form_1978": "Purified", - "form_1979": "Normal", - "form_1980": "Shadow", - "form_1981": "Purified", - "form_1982": "Normal", - "form_1983": "Shadow", - "form_1984": "Purified", - "form_1985": "Normal", - "form_1986": "Shadow", - "form_1987": "Purified", - "form_1988": "Normal", - "form_1989": "Shadow", - "form_1990": "Purified", - "form_1991": "Normal", - "form_1992": "Shadow", - "form_1993": "Purified", - "form_1994": "Normal", - "form_1995": "Shadow", - "form_1996": "Purified", - "form_1997": "Normal", - "form_1998": "Shadow", - "form_1999": "Purified", - "form_2000": "Normal", - "form_2001": "Shadow", - "form_2002": "Purified", - "form_2003": "Normal", - "form_2004": "Shadow", - "form_2005": "Purified", - "form_2006": "Normal", - "form_2007": "Shadow", - "form_2008": "Purified", - "form_2009": "Normal", - "form_2010": "Shadow", - "form_2011": "Purified", - "form_2012": "Normal", - "form_2013": "Shadow", - "form_2014": "Purified", - "form_2015": "Normal", - "form_2016": "Shadow", - "form_2017": "Purified", - "form_2018": "Normal", - "form_2019": "Shadow", - "form_2020": "Purified", - "form_2021": "Normal", - "form_2022": "Shadow", - "form_2023": "Purified", - "form_2024": "Normal", - "form_2025": "Shadow", - "form_2026": "Purified", - "form_2027": "Normal", - "form_2028": "Shadow", - "form_2029": "Purified", - "form_2030": "Normal", - "form_2031": "Shadow", - "form_2032": "Purified", - "form_2033": "Normal", - "form_2034": "Shadow", - "form_2035": "Purified", - "form_2036": "Normal", - "form_2037": "Shadow", - "form_2038": "Purified", - "form_2039": "Normal", - "form_2040": "Shadow", - "form_2041": "Purified", - "form_2042": "Normal", - "form_2043": "Shadow", - "form_2044": "Purified", - "form_2045": "Normal", - "form_2046": "Shadow", - "form_2047": "Purified", - "form_2048": "Normal", - "form_2049": "Shadow", - "form_2050": "Purified", - "form_2051": "Normal", - "form_2052": "Shadow", - "form_2053": "Purified", - "form_2054": "Normal", - "form_2055": "Shadow", - "form_2056": "Purified", - "form_2057": "Normal", - "form_2058": "Shadow", - "form_2059": "Purified", - "form_2060": "Normal", - "form_2061": "Shadow", - "form_2062": "Purified", - "form_2063": "Normal", - "form_2064": "Shadow", - "form_2065": "Purified", - "form_2066": "Normal", - "form_2067": "Shadow", - "form_2068": "Purified", - "form_2069": "Normal", - "form_2070": "Shadow", - "form_2071": "Purified", - "form_2072": "Normal", - "form_2073": "Shadow", - "form_2074": "Purified", - "form_2075": "Normal", - "form_2076": "Shadow", - "form_2077": "Purified", - "form_2078": "Normal", - "form_2079": "Shadow", - "form_2080": "Purified", - "form_2081": "Normal", - "form_2082": "Shadow", - "form_2083": "Purified", - "form_2084": "Normal", - "form_2085": "Shadow", - "form_2086": "Purified", - "form_2087": "Normal", - "form_2088": "Shadow", - "form_2089": "Purified", - "form_2090": "Normal", - "form_2091": "Shadow", - "form_2092": "Purified", - "form_2093": "Normal", - "form_2094": "Shadow", - "form_2095": "Purified", - "form_2096": "Normal", - "form_2097": "Shadow", - "form_2098": "Purified", - "form_2099": "Normal", - "form_2100": "Shadow", - "form_2101": "Purified", - "form_2102": "Normal", - "form_2103": "Shadow", - "form_2104": "Purified", - "form_2105": "Normal", - "form_2106": "Shadow", - "form_2107": "Purified", - "form_2108": "Normal", - "form_2109": "Shadow", - "form_2110": "Purified", - "form_2111": "Normal", - "form_2112": "Shadow", - "form_2113": "Purified", - "form_2114": "Normal", - "form_2115": "Shadow", - "form_2116": "Purified", - "form_2117": "Normal", - "form_2118": "Shadow", - "form_2119": "Purified", - "form_2120": "Normal", - "form_2121": "Shadow", - "form_2122": "Purified", - "form_2123": "Normal", - "form_2124": "Shadow", - "form_2125": "Purified", - "form_2126": "Normal", - "form_2127": "Shadow", - "form_2128": "Purified", - "form_2129": "Normal", - "form_2130": "Shadow", - "form_2131": "Purified", - "form_2132": "Normal", - "form_2133": "Shadow", - "form_2134": "Purified", - "form_2135": "Normal", - "form_2136": "Shadow", - "form_2137": "Purified", - "form_2138": "Normal", - "form_2139": "Shadow", - "form_2140": "Purified", - "form_2141": "Normal", - "form_2142": "Shadow", - "form_2143": "Purified", - "form_2144": "Normal", - "form_2145": "Shadow", - "form_2146": "Purified", - "form_2147": "Normal", - "form_2148": "Shadow", - "form_2149": "Purified", - "form_2150": "Normal", - "form_2151": "Shadow", - "form_2152": "Purified", - "form_2153": "Normal", - "form_2154": "Shadow", - "form_2155": "Purified", - "form_2156": "Normal", - "form_2157": "Shadow", - "form_2158": "Purified", - "form_2159": "Normal", - "form_2160": "Shadow", - "form_2161": "Purified", - "form_2162": "Normal", - "form_2163": "Shadow", - "form_2164": "Purified", - "form_2165": "Normal", - "form_2166": "Shadow", - "form_2167": "Purified", - "form_2168": "Normal", - "form_2169": "Shadow", - "form_2170": "Purified", - "form_2171": "Normal", - "form_2172": "Shadow", - "form_2173": "Purified", - "form_2174": "Normal", - "form_2175": "Shadow", - "form_2176": "Purified", - "form_2177": "Normal", - "form_2178": "Shadow", - "form_2179": "Purified", - "form_2180": "Normal", - "form_2181": "Shadow", - "form_2182": "Purified", - "form_2183": "Normal", - "form_2184": "Shadow", - "form_2185": "Purified", - "form_2186": "Normal", - "form_2187": "Shadow", - "form_2188": "Purified", - "form_2189": "Normal", - "form_2190": "Shadow", - "form_2191": "Purified", - "form_2192": "Normal", - "form_2193": "Shadow", - "form_2194": "Purified", - "form_2195": "Normal", - "form_2196": "Shadow", - "form_2197": "Purified", - "form_2198": "Normal", - "form_2199": "Shadow", - "form_2200": "Purified", - "form_2201": "Normal", - "form_2202": "Shadow", - "form_2203": "Purified", - "form_2204": "Normal", - "form_2205": "Shadow", - "form_2206": "Purified", - "form_2207": "Normal", - "form_2208": "Shadow", - "form_2209": "Purified", - "form_2210": "Normal", - "form_2211": "Shadow", - "form_2212": "Purified", - "form_2213": "Normal", - "form_2214": "Shadow", - "form_2215": "Purified", - "form_2216": "Normal", - "form_2217": "Shadow", - "form_2218": "Purified", - "form_2219": "Normal", - "form_2220": "Shadow", - "form_2221": "Purified", - "form_2222": "Normal", - "form_2223": "Shadow", - "form_2224": "Purified", - "form_2225": "Normal", - "form_2226": "Shadow", - "form_2227": "Purified", - "form_2228": "Normal", - "form_2229": "Shadow", - "form_2230": "Purified", - "form_2231": "Normal", - "form_2232": "Shadow", - "form_2233": "Purified", - "form_2234": "Normal", - "form_2235": "Shadow", - "form_2236": "Purified", - "form_2237": "Normal", - "form_2238": "Shadow", - "form_2239": "Purified", - "form_2240": "Normal", - "form_2241": "Shadow", - "form_2242": "Purified", - "form_2243": "Normal", - "form_2244": "Shadow", - "form_2245": "Purified", - "form_2246": "Normal", - "form_2247": "Shadow", - "form_2248": "Purified", - "form_2249": "Normal", - "form_2250": "Shadow", - "form_2251": "Purified", - "form_2252": "Normal", - "form_2253": "Shadow", - "form_2254": "Purified", - "form_2255": "Normal", - "form_2256": "Shadow", - "form_2257": "Purified", - "form_2258": "Normal", - "form_2259": "Shadow", - "form_2260": "Purified", - "form_2261": "Normal", - "form_2262": "Shadow", - "form_2263": "Purified", - "form_2264": "Normal", - "form_2265": "Shadow", - "form_2266": "Purified", - "form_2267": "Normal", - "form_2268": "Shadow", - "form_2269": "Purified", - "form_2270": "Normal", - "form_2271": "Shadow", - "form_2272": "Purified", - "form_2273": "Normal", - "form_2274": "Shadow", - "form_2275": "Purified", - "form_2276": "Normal", - "form_2277": "Shadow", - "form_2278": "Purified", - "form_2279": "Normal", - "form_2280": "Shadow", - "form_2281": "Purified", - "form_2282": "Normal", - "form_2283": "Shadow", - "form_2284": "Purified", - "form_2285": "Normal", - "form_2286": "Shadow", - "form_2287": "Purified", - "form_2288": "Normal", - "form_2289": "Shadow", - "form_2290": "Purified", - "form_2291": "Normal", - "form_2292": "Shadow", - "form_2293": "Purified", - "form_2294": "Normal", - "form_2295": "Shadow", - "form_2296": "Purified", - "form_2297": "Normal", - "form_2298": "Shadow", - "form_2299": "Purified", - "form_2300": "Normal", - "form_2301": "Shadow", - "form_2302": "Purified", - "form_2303": "Normal", - "form_2304": "Shadow", - "form_2305": "Purified", - "form_2306": "Normal", - "form_2307": "Shadow", - "form_2308": "Purified", - "form_2309": "Normal", - "form_2310": "Shadow", - "form_2311": "Purified", - "form_2312": "Normal", - "form_2313": "Shadow", - "form_2314": "Purified", - "form_2315": "Normal", - "form_2316": "Shadow", - "form_2317": "Purified", - "form_2318": "Normal", - "form_2319": "Shadow", - "form_2320": "Purified", - "form_2321": "Normal", - "form_2322": "Shadow", - "form_2323": "Purified", - "form_2324": "Normal", - "form_2325": "Shadow", - "form_2326": "Purified", - "form_2327": "Spring 2020", - "form_2328": "Spring 2020", - "form_2329": "Spring 2020", - "form_2330": "Female", - "form_2331": "Female", - "form_2332": "Costume 2020", - "form_2333": "Costume 2020", - "form_2334": "Costume 2020", - "form_2335": "Galarian", - "form_2336": "Galarian", - "form_2337": "Galarian", - "form_2338": "Galarian", - "form_2339": "Galarian", - "form_2340": "Galarian", - "form_2341": "Galarian", - "form_2342": "Galarian Standard", - "form_2343": "Galarian Zen", - "form_2344": "Galarian", - "form_2345": "Galarian", - "form_2501": "Normal", - "form_2502": "Shadow", - "form_2503": "Purified", - "form_2504": "Normal", - "form_2505": "Shadow", - "form_2506": "Purified", - "form_2510": "Normal", - "form_2511": "Shadow", - "form_2512": "Purified", - "form_2516": "Normal", - "form_2517": "Shadow", - "form_2518": "Purified", - "form_2582": "Galarian", - "form_2583": "Galarian", - "form_2585": "Costume 2020", - "form_2586": "Costume 2020", - "form_2587": "Normal", - "form_2588": "Female", - "form_2589": "Normal", - "form_2590": "Female", - "form_2591": "Ten Percent", - "form_2592": "Fifty Percent", - "form_2593": "Complete", - "form_2594": "Archipelago", - "form_2595": "Continental", - "form_2596": "Elegant", - "form_2597": "Fancy", - "form_2598": "Garden", - "form_2599": "High Plains", - "form_2600": "Icy Snow", - "form_2601": "Jungle", - "form_2602": "Marine", - "form_2603": "Meadow", - "form_2604": "Modern", - "form_2605": "Monsoon", - "form_2606": "Ocean", - "form_2607": "Pokeball", - "form_2608": "Polar", - "form_2609": "River", - "form_2610": "Sandstorm", - "form_2611": "Savanna", - "form_2612": "Sun", - "form_2613": "Tundra", - "form_2614": "Red", - "form_2615": "Yellow", - "form_2616": "Orange", - "form_2617": "Blue", - "form_2618": "White", - "form_2619": "Red", - "form_2620": "Yellow", - "form_2621": "Orange", - "form_2622": "Blue", - "form_2623": "White", - "form_2624": "Red", - "form_2625": "Yellow", - "form_2626": "Orange", - "form_2627": "Blue", - "form_2628": "White", - "form_2629": "Natural", - "form_2630": "Heart", - "form_2631": "Star", - "form_2632": "Diamond", - "form_2633": "Debutante", - "form_2634": "Matron", - "form_2635": "Dandy", - "form_2636": "La Reine", - "form_2637": "Kabuki", - "form_2638": "Pharaoh", - "form_2639": "Shield", - "form_2640": "Blade", - "form_2641": "Small", - "form_2642": "Average", - "form_2643": "Large", - "form_2644": "Super", - "form_2645": "Small", - "form_2646": "Average", - "form_2647": "Large", - "form_2648": "Super", - "form_2649": "Neutral", - "form_2650": "Active", - "form_2651": "Confined", - "form_2652": "Unbound", - "form_2666": "Costume 2020 Deprecated", - "form_2668": "Costume 2020", - "form_2669": "Adventure Hat 2020", - "form_2670": "Winter 2020", - "form_2671": "Winter 2020", - "form_2672": "Winter 2020", - "form_2673": "2020", - "form_2674": "2021", - "grunt_0": "None", - "grunt_1": "Blanche", - "grunt_10": "Dark - Grunt (female)", - "grunt_11": "Dark - Grunt (male)", - "grunt_12": "Dragon - Grunt (female)", - "grunt_13": "Dragon - Grunt (male)", - "grunt_14": "Fairy - Grunt (female)", - "grunt_15": "Fairy - Grunt (male)", - "grunt_16": "Fighting - Grunt (female)", - "grunt_17": "Fighting - Grunt (male)", - "grunt_18": "Fire - Grunt (female)", - "grunt_19": "Fire - Grunt (male)", - "grunt_2": "Candela", - "grunt_20": "Flying - Grunt (female)", - "grunt_21": "Flying - Grunt (male)", - "grunt_22": "Grass - Grunt (female)", - "grunt_23": "Grass - Grunt (male)", - "grunt_24": "Ground - Grunt (female)", - "grunt_25": "Ground - Grunt (male)", - "grunt_26": "Ice - Grunt (female)", - "grunt_27": "Ice - Grunt (male)", - "grunt_28": "Metal - Grunt (female)", - "grunt_29": "Metal - Grunt (male)", - "grunt_3": "Spark", - "grunt_30": "Normal - Grunt (female)", - "grunt_31": "Normal - Grunt (male)", - "grunt_32": "Poison - Grunt (female)", - "grunt_33": "Poison - Grunt (male)", - "grunt_34": "Psychic - Grunt (female)", - "grunt_35": "Psychic - Grunt (male)", - "grunt_36": "Rock - Grunt (female)", - "grunt_37": "Rock - Grunt (male)", - "grunt_38": "Water - Grunt (female)", - "grunt_39": "Water - Grunt (male)", - "grunt_4": "Grunt (male)", - "grunt_40": "Player Team Leader", - "grunt_41": "Leader Cliff", - "grunt_42": "Leader Arlo", - "grunt_43": "Leader Sierra", - "grunt_44": "Giovanni", - "grunt_45": "Decoy Grunt (male)", - "grunt_46": "Decoy Grunt (female)", - "grunt_47": "Ghost - Grunt (female)", - "grunt_48": "Ghost - Grunt (male)", - "grunt_49": "Electric - Grunt (female)", - "grunt_5": "Grunt (female)", - "grunt_50": "Electric - Grunt (male)", - "grunt_6": "Bug - Grunt (female)", - "grunt_7": "Bug - Grunt (male)", - "grunt_8": "Darkness - Female Grunt", - "grunt_9": "Darkness - Male Grunt", - "item_1": "Poké Ball", - "item_1001": "Pokemon Storage Upgrade", - "item_1002": "Item Storage Upgrade", - "item_101": "Potion", - "item_102": "Super Potion", - "item_103": "Hyper Potion", - "item_104": "Max Potion", - "item_1101": "Sun Stone", - "item_1102": "King's Rock", - "item_1103": "Metal Coat", - "item_1104": "Dragon Scale", - "item_1105": "Upgrade", - "item_1106": "Sinnoh Stone", - "item_1107": "Unova Stone", - "item_1201": "Fast TM", - "item_1202": "Charged TM", - "item_1301": "Rare Candy", - "item_1401": "Raid Pass", - "item_1402": "Premium Battle Pass", - "item_1403": "EX Raid Pass", - "item_1404": "Star Piece", - "item_1405": "Gift", - "item_2": "Great Ball", - "item_201": "Revive", - "item_202": "Max Revive", - "item_3": "Ultra Ball", - "item_301": "Lucky Egg", - "item_4": "Master Ball", - "item_401": "Incense", - "item_402": "Spicy Incense", - "item_403": "Cool Incense", - "item_404": "Floral Incense", - "item_5": "Premier Ball", - "item_501": "Lure Module", - "item_502": "Glacial Lure Module", - "item_503": "Mossy Lure Module", - "item_504": "Magnetic Lure Module", - "item_602": "X Attack", - "item_603": "X Defense", - "item_604": "X Miracle", - "item_701": "Razz Berry", - "item_702": "Bluk Berry", - "item_703": "Nanab Berry", - "item_704": "Wepear Berry", - "item_705": "Pinap Berry", - "item_706": "Golden Razz Berry", - "item_707": "Golden Nanab Berry", - "item_708": "Silver Pinap Berry", - "item_801": "Camera", - "item_901": "Egg Incubator ∞", - "item_902": "Egg Incubator", - "item_903": "Super Incubator", - "lure_501": "Normal", - "lure_502": "Glacial", - "lure_503": "Mossy", - "lure_504": "Magnetic", - "move_1": "Thunder Shock", - "move_10": "Bite", - "move_100": "X-Scissor", - "move_101": "Flame Charge", - "move_102": "Flame Burst", - "move_103": "Fire Blast", - "move_104": "Brine", - "move_105": "Water Pulse", - "move_106": "Scald", - "move_107": "Hydro Pump", - "move_108": "Psychic", - "move_109": "Psystrike", - "move_11": "Pound", - "move_110": "Ice Shard", - "move_111": "Icy Wind", - "move_112": "Frost Breath", - "move_113": "Absorb", - "move_114": "Giga Drain", - "move_115": "Fire Punch", - "move_116": "Solar Beam", - "move_117": "Leaf Blade", - "move_118": "Power Whip", - "move_119": "Splash", - "move_12": "Double Slap", - "move_120": "Acid", - "move_121": "Air Cutter", - "move_122": "Hurricane", - "move_123": "Brick Break", - "move_124": "Cut", - "move_125": "Swift", - "move_126": "Horn Attack", - "move_127": "Stomp", - "move_128": "Headbutt", - "move_129": "Hyper Fang", - "move_13": "Wrap", - "move_130": "Slam", - "move_131": "Body Slam", - "move_132": "Rest", - "move_133": "Struggle", - "move_134": "Scald", - "move_135": "Hydro Pump", - "move_136": "Wrap", - "move_137": "Wrap", - "move_14": "Hyper Beam", - "move_15": "Lick", - "move_16": "Dark Pulse", - "move_17": "Smog", - "move_18": "Sludge", - "move_19": "Metal Claw", - "move_2": "Quick Attack", - "move_20": "Vise Grip", - "move_200": "Fury Cutter", - "move_201": "Bug Bite", - "move_202": "Bite", - "move_203": "Sucker Punch", - "move_204": "Dragon Breath", - "move_205": "Thunder Shock", - "move_206": "Spark", - "move_207": "Low Kick", - "move_208": "Karate Chop", - "move_209": "Ember", - "move_21": "Flame Wheel", - "move_210": "Wing Attack", - "move_211": "Peck", - "move_212": "Lick", - "move_213": "Shadow Claw", - "move_214": "Vine Whip", - "move_215": "Razor Leaf", - "move_216": "Mud Shot", - "move_217": "Ice Shard", - "move_218": "Frost Breath", - "move_219": "Quick Attack", - "move_22": "Megahorn", - "move_220": "Scratch", - "move_221": "Tackle", - "move_222": "Pound", - "move_223": "Cut", - "move_224": "Poison Jab", - "move_225": "Acid", - "move_226": "Psycho Cut", - "move_227": "Rock Throw", - "move_228": "Metal Claw", - "move_229": "Bullet Punch", - "move_23": "Wing Attack", - "move_230": "Water Gun", - "move_231": "Splash", - "move_232": "Water Gun", - "move_233": "Mud-Slap", - "move_234": "Zen Headbutt", - "move_235": "Confusion", - "move_236": "Poison Sting", - "move_237": "Bubble", - "move_238": "Feint Attack", - "move_239": "Steel Wing", - "move_24": "Flamethrower", - "move_240": "Fire Fang", - "move_241": "Rock Smash", - "move_242": "Transform", - "move_243": "Counter", - "move_244": "Powder Snow", - "move_245": "Close Combat", - "move_246": "Dynamic Punch", - "move_247": "Focus Blast", - "move_248": "Aurora Beam", - "move_249": "Charge Beam", - "move_25": "Sucker Punch", - "move_250": "Volt Switch", - "move_251": "Wild Charge", - "move_252": "Zap Cannon", - "move_253": "Dragon Tail", - "move_254": "Avalanche", - "move_255": "Air Slash", - "move_256": "Brave Bird", - "move_257": "Sky Attack", - "move_258": "Sand Tomb", - "move_259": "Rock Blast", - "move_26": "Dig", - "move_260": "Infestation", - "move_261": "Struggle Bug", - "move_262": "Silver Wind", - "move_263": "Astonish", - "move_264": "Hex", - "move_265": "Night Shade", - "move_266": "Iron Tail", - "move_267": "Gyro Ball", - "move_268": "Heavy Slam", - "move_269": "Fire Spin", - "move_27": "Low Kick", - "move_270": "Overheat", - "move_271": "Bullet Seed", - "move_272": "Grass Knot", - "move_273": "Energy Ball", - "move_274": "Extrasensory", - "move_275": "Future Sight", - "move_276": "Mirror Coat", - "move_277": "Outrage", - "move_278": "Snarl", - "move_279": "Crunch", - "move_28": "Cross Chop", - "move_280": "Foul Play", - "move_281": "Hidden Power", - "move_282": "Take Down", - "move_283": "Waterfall", - "move_284": "Surf", - "move_285": "Draco Meteor", - "move_286": "Doom Desire", - "move_287": "Yawn", - "move_288": "Psycho Boost", - "move_289": "Origin Pulse", - "move_29": "Psycho Cut", - "move_290": "Precipice Blades", - "move_291": "Present", - "move_292": "Weather Ball", - "move_296": "Frenzy Plant", - "move_297": "Smack Down", - "move_298": "Blast Burn", - "move_299": "Hydro Cannon", - "move_3": "Scratch", - "move_30": "Psybeam", - "move_300": "Last Resort", - "move_301": "Meteor Mash", - "move_302": "Skull Bash", - "move_303": "Acid Spray", - "move_304": "Earth Power", - "move_305": "Crabhammer", - "move_306": "Lunge", - "move_307": "Crush Claw", - "move_308": "Octazooka", - "move_309": "Mirror Shot", - "move_31": "Earthquake", - "move_310": "Superpower", - "move_311": "Fell Stinger", - "move_312": "Leaf Tornado", - "move_313": "Leech Life", - "move_314": "Drain Punch", - "move_315": "Shadow Bone", - "move_316": "Muddy Water", - "move_317": "Blaze Kick", - "move_318": "Razor Shell", - "move_319": "Power-Up Punch", - "move_32": "Stone Edge", - "move_320": "Charm", - "move_321": "Giga Impact", - "move_322": "Frustration", - "move_323": "Return", - "move_324": "Synchronoise", - "move_325": "Lock-On", - "move_326": "Thunder Fang", - "move_327": "Ice Fang", - "move_328": "Horn Drill", - "move_329": "Fissure", - "move_33": "Ice Punch", - "move_330": "Sacred Sword", - "move_331": "Flying Press", - "move_332": "Aura Sphere", - "move_333": "Payback", - "move_334": "Rock Wrecker", - "move_335": "Aeroblast", - "move_336": "Techno Blast", - "move_337": "Techno Blast", - "move_338": "Techno Blast", - "move_339": "Techno Blast", - "move_34": "Heart Stamp", - "move_340": "Techno Blast", - "move_341": "Fly", - "move_35": "Discharge", - "move_36": "Flash Cannon", - "move_37": "Peck", - "move_38": "Drill Peck", - "move_39": "Ice Beam", - "move_4": "Ember", - "move_40": "Blizzard", - "move_41": "Air Slash", - "move_42": "Heat Wave", - "move_43": "Twineedle", - "move_44": "Poison Jab", - "move_45": "Aerial Ace", - "move_46": "Drill Run", - "move_47": "Petal Blizzard", - "move_48": "Mega Drain", - "move_49": "Bug Buzz", - "move_5": "Vine Whip", - "move_50": "Poison Fang", - "move_51": "Night Slash", - "move_52": "Slash", - "move_53": "Bubble Beam", - "move_54": "Submission", - "move_55": "Karate Chop", - "move_56": "Low Sweep", - "move_57": "Aqua Jet", - "move_58": "Aqua Tail", - "move_59": "Seed Bomb", - "move_6": "Tackle", - "move_60": "Psyshock", - "move_61": "Rock Throw", - "move_62": "Ancient Power", - "move_63": "Rock Tomb", - "move_64": "Rock Slide", - "move_65": "Power Gem", - "move_66": "Shadow Sneak", - "move_67": "Shadow Punch", - "move_68": "Shadow Claw", - "move_69": "Ominous Wind", - "move_7": "Razor Leaf", - "move_70": "Shadow Ball", - "move_71": "Bullet Punch", - "move_72": "Magnet Bomb", - "move_73": "Steel Wing", - "move_74": "Iron Head", - "move_75": "Parabolic Charge", - "move_76": "Spark", - "move_77": "Thunder Punch", - "move_78": "Thunder", - "move_79": "Thunderbolt", - "move_8": "Take Down", - "move_80": "Twister", - "move_81": "Dragon Breath", - "move_82": "Dragon Pulse", - "move_83": "Dragon Claw", - "move_84": "Disarming Voice", - "move_85": "Draining Kiss", - "move_86": "Dazzling Gleam", - "move_87": "Moonblast", - "move_88": "Play Rough", - "move_89": "Cross Poison", - "move_9": "Water Gun", - "move_90": "Sludge Bomb", - "move_91": "Sludge Wave", - "move_92": "Gunk Shot", - "move_93": "Mud Shot", - "move_94": "Bone Club", - "move_95": "Bulldoze", - "move_96": "Mud Bomb", - "move_97": "Fury Cutter", - "move_98": "Bug Bite", - "move_99": "Signal Beam", - "poke_1": "Bulbasaur", - "poke_10": "Caterpie", - "poke_100": "Voltorb", - "poke_101": "Electrode", - "poke_102": "Exeggcute", - "poke_103": "Exeggutor", - "poke_104": "Cubone", - "poke_105": "Marowak", - "poke_106": "Hitmonlee", - "poke_107": "Hitmonchan", - "poke_108": "Lickitung", - "poke_109": "Koffing", - "poke_11": "Metapod", - "poke_110": "Weezing", - "poke_111": "Rhyhorn", - "poke_112": "Rhydon", - "poke_113": "Chansey", - "poke_114": "Tangela", - "poke_115": "Kangaskhan", - "poke_116": "Horsea", - "poke_117": "Seadra", - "poke_118": "Goldeen", - "poke_119": "Seaking", - "poke_12": "Butterfree", - "poke_120": "Staryu", - "poke_121": "Starmie", - "poke_122": "Mr. Mime", - "poke_123": "Scyther", - "poke_124": "Jynx", - "poke_125": "Electabuzz", - "poke_126": "Magmar", - "poke_127": "Pinsir", - "poke_128": "Tauros", - "poke_129": "Magikarp", - "poke_13": "Weedle", - "poke_130": "Gyarados", - "poke_131": "Lapras", - "poke_132": "Ditto", - "poke_133": "Eevee", - "poke_134": "Vaporeon", - "poke_135": "Jolteon", - "poke_136": "Flareon", - "poke_137": "Porygon", - "poke_138": "Omanyte", - "poke_139": "Omastar", - "poke_14": "Kakuna", - "poke_140": "Kabuto", - "poke_141": "Kabutops", - "poke_142": "Aerodactyl", - "poke_143": "Snorlax", - "poke_144": "Articuno", - "poke_145": "Zapdos", - "poke_146": "Moltres", - "poke_147": "Dratini", - "poke_148": "Dragonair", - "poke_149": "Dragonite", - "poke_15": "Beedrill", - "poke_150": "Mewtwo", - "poke_151": "Mew", - "poke_152": "Chikorita", - "poke_153": "Bayleef", - "poke_154": "Meganium", - "poke_155": "Cyndaquil", - "poke_156": "Quilava", - "poke_157": "Typhlosion", - "poke_158": "Totodile", - "poke_159": "Croconaw", - "poke_16": "Pidgey", - "poke_160": "Feraligatr", - "poke_161": "Sentret", - "poke_162": "Furret", - "poke_163": "Hoothoot", - "poke_164": "Noctowl", - "poke_165": "Ledyba", - "poke_166": "Ledian", - "poke_167": "Spinarak", - "poke_168": "Ariados", - "poke_169": "Crobat", - "poke_17": "Pidgeotto", - "poke_170": "Chinchou", - "poke_171": "Lanturn", - "poke_172": "Pichu", - "poke_173": "Cleffa", - "poke_174": "Igglybuff", - "poke_175": "Togepi", - "poke_176": "Togetic", - "poke_177": "Natu", - "poke_178": "Xatu", - "poke_179": "Mareep", - "poke_18": "Pidgeot", - "poke_180": "Flaaffy", - "poke_181": "Ampharos", - "poke_182": "Bellossom", - "poke_183": "Marill", - "poke_184": "Azumarill", - "poke_185": "Sudowoodo", - "poke_186": "Politoed", - "poke_187": "Hoppip", - "poke_188": "Skiploom", - "poke_189": "Jumpluff", - "poke_19": "Rattata", - "poke_190": "Aipom", - "poke_191": "Sunkern", - "poke_192": "Sunflora", - "poke_193": "Yanma", - "poke_194": "Wooper", - "poke_195": "Quagsire", - "poke_196": "Espeon", - "poke_197": "Umbreon", - "poke_198": "Murkrow", - "poke_199": "Slowking", - "poke_2": "Ivysaur", - "poke_20": "Raticate", - "poke_200": "Misdreavus", - "poke_201": "Unown", - "poke_202": "Wobbuffet", - "poke_203": "Girafarig", - "poke_204": "Pineco", - "poke_205": "Forretress", - "poke_206": "Dunsparce", - "poke_207": "Gligar", - "poke_208": "Steelix", - "poke_209": "Snubbull", - "poke_21": "Spearow", - "poke_210": "Granbull", - "poke_211": "Qwilfish", - "poke_212": "Scizor", - "poke_213": "Shuckle", - "poke_214": "Heracross", - "poke_215": "Sneasel", - "poke_216": "Teddiursa", - "poke_217": "Ursaring", - "poke_218": "Slugma", - "poke_219": "Magcargo", - "poke_22": "Fearow", - "poke_220": "Swinub", - "poke_221": "Piloswine", - "poke_222": "Corsola", - "poke_223": "Remoraid", - "poke_224": "Octillery", - "poke_225": "Delibird", - "poke_226": "Mantine", - "poke_227": "Skarmory", - "poke_228": "Houndour", - "poke_229": "Houndoom", - "poke_23": "Ekans", - "poke_230": "Kingdra", - "poke_231": "Phanpy", - "poke_232": "Donphan", - "poke_233": "Porygon2", - "poke_234": "Stantler", - "poke_235": "Smeargle", - "poke_236": "Tyrogue", - "poke_237": "Hitmontop", - "poke_238": "Smoochum", - "poke_239": "Elekid", - "poke_24": "Arbok", - "poke_240": "Magby", - "poke_241": "Miltank", - "poke_242": "Blissey", - "poke_243": "Raikou", - "poke_244": "Entei", - "poke_245": "Suicune", - "poke_246": "Larvitar", - "poke_247": "Pupitar", - "poke_248": "Tyranitar", - "poke_249": "Lugia", - "poke_25": "Pikachu", - "poke_250": "Ho-Oh", - "poke_251": "Celebi", - "poke_252": "Treecko", - "poke_253": "Grovyle", - "poke_254": "Sceptile", - "poke_255": "Torchic", - "poke_256": "Combusken", - "poke_257": "Blaziken", - "poke_258": "Mudkip", - "poke_259": "Marshtomp", - "poke_26": "Raichu", - "poke_260": "Swampert", - "poke_261": "Poochyena", - "poke_262": "Mightyena", - "poke_263": "Zigzagoon", - "poke_264": "Linoone", - "poke_265": "Wurmple", - "poke_266": "Silcoon", - "poke_267": "Beautifly", - "poke_268": "Cascoon", - "poke_269": "Dustox", - "poke_27": "Sandshrew", - "poke_270": "Lotad", - "poke_271": "Lombre", - "poke_272": "Ludicolo", - "poke_273": "Seedot", - "poke_274": "Nuzleaf", - "poke_275": "Shiftry", - "poke_276": "Taillow", - "poke_277": "Swellow", - "poke_278": "Wingull", - "poke_279": "Pelipper", - "poke_28": "Sandslash", - "poke_280": "Ralts", - "poke_281": "Kirlia", - "poke_282": "Gardevoir", - "poke_283": "Surskit", - "poke_284": "Masquerain", - "poke_285": "Shroomish", - "poke_286": "Breloom", - "poke_287": "Slakoth", - "poke_288": "Vigoroth", - "poke_289": "Slaking", - "poke_29": "Nidoran♀", - "poke_290": "Nincada", - "poke_291": "Ninjask", - "poke_292": "Shedinja", - "poke_293": "Whismur", - "poke_294": "Loudred", - "poke_295": "Exploud", - "poke_296": "Makuhita", - "poke_297": "Hariyama", - "poke_298": "Azurill", - "poke_299": "Nosepass", - "poke_3": "Venusaur", - "poke_30": "Nidorina", - "poke_300": "Skitty", - "poke_301": "Delcatty", - "poke_302": "Sableye", - "poke_303": "Mawile", - "poke_304": "Aron", - "poke_305": "Lairon", - "poke_306": "Aggron", - "poke_307": "Meditite", - "poke_308": "Medicham", - "poke_309": "Electrike", - "poke_31": "Nidoqueen", - "poke_310": "Manectric", - "poke_311": "Plusle", - "poke_312": "Minun", - "poke_313": "Volbeat", - "poke_314": "Illumise", - "poke_315": "Roselia", - "poke_316": "Gulpin", - "poke_317": "Swalot", - "poke_318": "Carvanha", - "poke_319": "Sharpedo", - "poke_32": "Nidoran♂", - "poke_320": "Wailmer", - "poke_321": "Wailord", - "poke_322": "Numel", - "poke_323": "Camerupt", - "poke_324": "Torkoal", - "poke_325": "Spoink", - "poke_326": "Grumpig", - "poke_327": "Spinda", - "poke_328": "Trapinch", - "poke_329": "Vibrava", - "poke_33": "Nidorino", - "poke_330": "Flygon", - "poke_331": "Cacnea", - "poke_332": "Cacturne", - "poke_333": "Swablu", - "poke_334": "Altaria", - "poke_335": "Zangoose", - "poke_336": "Seviper", - "poke_337": "Lunatone", - "poke_338": "Solrock", - "poke_339": "Barboach", - "poke_34": "Nidoking", - "poke_340": "Whiscash", - "poke_341": "Corphish", - "poke_342": "Crawdaunt", - "poke_343": "Baltoy", - "poke_344": "Claydol", - "poke_345": "Lileep", - "poke_346": "Cradily", - "poke_347": "Anorith", - "poke_348": "Armaldo", - "poke_349": "Feebas", - "poke_35": "Clefairy", - "poke_350": "Milotic", - "poke_351": "Castform", - "poke_352": "Kecleon", - "poke_353": "Shuppet", - "poke_354": "Banette", - "poke_355": "Duskull", - "poke_356": "Dusclops", - "poke_357": "Tropius", - "poke_358": "Chimecho", - "poke_359": "Absol", - "poke_36": "Clefable", - "poke_360": "Wynaut", - "poke_361": "Snorunt", - "poke_362": "Glalie", - "poke_363": "Spheal", - "poke_364": "Sealeo", - "poke_365": "Walrein", - "poke_366": "Clamperl", - "poke_367": "Huntail", - "poke_368": "Gorebyss", - "poke_369": "Relicanth", - "poke_37": "Vulpix", - "poke_370": "Luvdisc", - "poke_371": "Bagon", - "poke_372": "Shelgon", - "poke_373": "Salamence", - "poke_374": "Beldum", - "poke_375": "Metang", - "poke_376": "Metagross", - "poke_377": "Regirock", - "poke_378": "Regice", - "poke_379": "Registeel", - "poke_38": "Ninetales", - "poke_380": "Latias", - "poke_381": "Latios", - "poke_382": "Kyogre", - "poke_383": "Groudon", - "poke_384": "Rayquaza", - "poke_385": "Jirachi", - "poke_386": "Deoxys", - "poke_387": "Turtwig", - "poke_388": "Grotle", - "poke_389": "Torterra", - "poke_39": "Jigglypuff", - "poke_390": "Chimchar", - "poke_391": "Monferno", - "poke_392": "Infernape", - "poke_393": "Piplup", - "poke_394": "Prinplup", - "poke_395": "Empoleon", - "poke_396": "Starly", - "poke_397": "Staravia", - "poke_398": "Staraptor", - "poke_399": "Bidoof", - "poke_4": "Charmander", - "poke_40": "Wigglytuff", - "poke_400": "Bibarel", - "poke_401": "Kricketot", - "poke_402": "Kricketune", - "poke_403": "Shinx", - "poke_404": "Luxio", - "poke_405": "Luxray", - "poke_406": "Budew", - "poke_407": "Roserade", - "poke_408": "Cranidos", - "poke_409": "Rampardos", - "poke_41": "Zubat", - "poke_410": "Shieldon", - "poke_411": "Bastiodon", - "poke_412": "Burmy", - "poke_413": "Wormadam", - "poke_414": "Mothim", - "poke_415": "Combee", - "poke_416": "Vespiquen", - "poke_417": "Pachirisu", - "poke_418": "Buizel", - "poke_419": "Floatzel", - "poke_42": "Golbat", - "poke_420": "Cherubi", - "poke_421": "Cherrim", - "poke_422": "Shellos", - "poke_423": "Gastrodon", - "poke_424": "Ambipom", - "poke_425": "Drifloon", - "poke_426": "Drifblim", - "poke_427": "Buneary", - "poke_428": "Lopunny", - "poke_429": "Mismagius", - "poke_43": "Oddish", - "poke_430": "Honchkrow", - "poke_431": "Glameow", - "poke_432": "Purugly", - "poke_433": "Chingling", - "poke_434": "Stunky", - "poke_435": "Skuntank", - "poke_436": "Bronzor", - "poke_437": "Bronzong", - "poke_438": "Bonsly", - "poke_439": "Mime Jr.", - "poke_44": "Gloom", - "poke_440": "Happiny", - "poke_441": "Chatot", - "poke_442": "Spiritomb", - "poke_443": "Gible", - "poke_444": "Gabite", - "poke_445": "Garchomp", - "poke_446": "Munchlax", - "poke_447": "Riolu", - "poke_448": "Lucario", - "poke_449": "Hippopotas", - "poke_45": "Vileplume", - "poke_450": "Hippowdon", - "poke_451": "Skorupi", - "poke_452": "Drapion", - "poke_453": "Croagunk", - "poke_454": "Toxicroak", - "poke_455": "Carnivine", - "poke_456": "Finneon", - "poke_457": "Lumineon", - "poke_458": "Mantyke", - "poke_459": "Snover", - "poke_46": "Paras", - "poke_460": "Abomasnow", - "poke_461": "Weavile", - "poke_462": "Magnezone", - "poke_463": "Lickilicky", - "poke_464": "Rhyperior", - "poke_465": "Tangrowth", - "poke_466": "Electivire", - "poke_467": "Magmortar", - "poke_468": "Togekiss", - "poke_469": "Yanmega", - "poke_47": "Parasect", - "poke_470": "Leafeon", - "poke_471": "Glaceon", - "poke_472": "Gliscor", - "poke_473": "Mamoswine", - "poke_474": "Porygon-Z", - "poke_475": "Gallade", - "poke_476": "Probopass", - "poke_477": "Dusknoir", - "poke_478": "Froslass", - "poke_479": "Rotom", - "poke_48": "Venonat", - "poke_480": "Uxie", - "poke_481": "Mesprit", - "poke_482": "Azelf", - "poke_483": "Dialga", - "poke_484": "Palkia", - "poke_485": "Heatran", - "poke_486": "Regigigas", - "poke_487": "Giratina", - "poke_488": "Cresselia", - "poke_489": "Phione", - "poke_49": "Venomoth", - "poke_490": "Manaphy", - "poke_491": "Darkrai", - "poke_492": "Shaymin", - "poke_493": "Arceus", - "poke_494": "Victini", - "poke_495": "Snivy", - "poke_496": "Servine", - "poke_497": "Serperior", - "poke_498": "Tepig", - "poke_499": "Pignite", - "poke_5": "Charmeleon", - "poke_50": "Diglett", - "poke_500": "Emboar", - "poke_501": "Oshawott", - "poke_502": "Dewott", - "poke_503": "Samurott", - "poke_504": "Patrat", - "poke_505": "Watchog", - "poke_506": "Lillipup", - "poke_507": "Herdier", - "poke_508": "Stoutland", - "poke_509": "Purrloin", - "poke_51": "Dugtrio", - "poke_510": "Liepard", - "poke_511": "Pansage", - "poke_512": "Simisage", - "poke_513": "Pansear", - "poke_514": "Simisear", - "poke_515": "Panpour", - "poke_516": "Simipour", - "poke_517": "Munna", - "poke_518": "Musharna", - "poke_519": "Pidove", - "poke_52": "Meowth", - "poke_520": "Tranquill", - "poke_521": "Unfezant", - "poke_522": "Blitzle", - "poke_523": "Zebstrika", - "poke_524": "Roggenrola", - "poke_525": "Boldore", - "poke_526": "Gigalith", - "poke_527": "Woobat", - "poke_528": "Swoobat", - "poke_529": "Drilbur", - "poke_53": "Persian", - "poke_530": "Excadrill", - "poke_531": "Audino", - "poke_532": "Timburr", - "poke_533": "Gurdurr", - "poke_534": "Conkeldurr", - "poke_535": "Tympole", - "poke_536": "Palpitoad", - "poke_537": "Seismitoad", - "poke_538": "Throh", - "poke_539": "Sawk", - "poke_54": "Psyduck", - "poke_540": "Sewaddle", - "poke_541": "Swadloon", - "poke_542": "Leavanny", - "poke_543": "Venipede", - "poke_544": "Whirlipede", - "poke_545": "Scolipede", - "poke_546": "Cottonee", - "poke_547": "Whimsicott", - "poke_548": "Petilil", - "poke_549": "Lilligant", - "poke_55": "Golduck", - "poke_550": "Basculin", - "poke_551": "Sandile", - "poke_552": "Krokorok", - "poke_553": "Krookodile", - "poke_554": "Darumaka", - "poke_555": "Darmanitan", - "poke_556": "Maractus", - "poke_557": "Dwebble", - "poke_558": "Crustle", - "poke_559": "Scraggy", - "poke_56": "Mankey", - "poke_560": "Scrafty", - "poke_561": "Sigilyph", - "poke_562": "Yamask", - "poke_563": "Cofagrigus", - "poke_564": "Tirtouga", - "poke_565": "Carracosta", - "poke_566": "Archen", - "poke_567": "Archeops", - "poke_568": "Trubbish", - "poke_569": "Garbodor", - "poke_57": "Primeape", - "poke_570": "Zorua", - "poke_571": "Zoroark", - "poke_572": "Minccino", - "poke_573": "Cinccino", - "poke_574": "Gothita", - "poke_575": "Gothorita", - "poke_576": "Gothitelle", - "poke_577": "Solosis", - "poke_578": "Duosion", - "poke_579": "Reuniclus", - "poke_58": "Growlithe", - "poke_580": "Ducklett", - "poke_581": "Swanna", - "poke_582": "Vanillite", - "poke_583": "Vanillish", - "poke_584": "Vanilluxe", - "poke_585": "Deerling", - "poke_586": "Sawsbuck", - "poke_587": "Emolga", - "poke_588": "Karrablast", - "poke_589": "Escavalier", - "poke_59": "Arcanine", - "poke_590": "Foongus", - "poke_591": "Amoonguss", - "poke_592": "Frillish", - "poke_593": "Jellicent", - "poke_594": "Alomomola", - "poke_595": "Joltik", - "poke_596": "Galvantula", - "poke_597": "Ferroseed", - "poke_598": "Ferrothorn", - "poke_599": "Klink", - "poke_6": "Charizard", - "poke_60": "Poliwag", - "poke_600": "Klang", - "poke_601": "Klinklang", - "poke_602": "Tynamo", - "poke_603": "Eelektrik", - "poke_604": "Eelektross", - "poke_605": "Elgyem", - "poke_606": "Beheeyem", - "poke_607": "Litwick", - "poke_608": "Lampent", - "poke_609": "Chandelure", - "poke_61": "Poliwhirl", - "poke_610": "Axew", - "poke_611": "Fraxure", - "poke_612": "Haxorus", - "poke_613": "Cubchoo", - "poke_614": "Beartic", - "poke_615": "Cryogonal", - "poke_616": "Shelmet", - "poke_617": "Accelgor", - "poke_618": "Stunfisk", - "poke_619": "Mienfoo", - "poke_62": "Poliwrath", - "poke_620": "Mienshao", - "poke_621": "Druddigon", - "poke_622": "Golett", - "poke_623": "Golurk", - "poke_624": "Pawniard", - "poke_625": "Bisharp", - "poke_626": "Bouffalant", - "poke_627": "Rufflet", - "poke_628": "Braviary", - "poke_629": "Vullaby", - "poke_63": "Abra", - "poke_630": "Mandibuzz", - "poke_631": "Heatmor", - "poke_632": "Durant", - "poke_633": "Deino", - "poke_634": "Zweilous", - "poke_635": "Hydreigon", - "poke_636": "Larvesta", - "poke_637": "Volcarona", - "poke_638": "Cobalion", - "poke_639": "Terrakion", - "poke_64": "Kadabra", - "poke_640": "Virizion", - "poke_641": "Tornadus", - "poke_642": "Thundurus", - "poke_643": "Reshiram", - "poke_644": "Zekrom", - "poke_645": "Landorus", - "poke_646": "Kyurem", - "poke_647": "Keldeo", - "poke_648": "Meloetta", - "poke_649": "Genesect", - "poke_65": "Alakazam", - "poke_650": "Chespin", - "poke_651": "Quilladin", - "poke_652": "Chesnaught", - "poke_653": "Fennekin", - "poke_654": "Braixen", - "poke_655": "Delphox", - "poke_656": "Froakie", - "poke_657": "Frogadier", - "poke_658": "Greninja", - "poke_659": "Bunnelby", - "poke_66": "Machop", - "poke_660": "Diggersby", - "poke_661": "Fletchling", - "poke_662": "Fletchinder", - "poke_663": "Talonflame", - "poke_664": "Scatterbug", - "poke_665": "Spewpa", - "poke_666": "Vivillon", - "poke_667": "Litleo", - "poke_668": "Pyroar", - "poke_669": "Flabébé", - "poke_67": "Machoke", - "poke_670": "Floette", - "poke_671": "Florges", - "poke_672": "Skiddo", - "poke_673": "Gogoat", - "poke_674": "Pancham", - "poke_675": "Pangoro", - "poke_676": "Furfrou", - "poke_677": "Espurr", - "poke_678": "Meowstic", - "poke_679": "Honedge", - "poke_68": "Machamp", - "poke_680": "Doublade", - "poke_681": "Aegislash", - "poke_682": "Spritzee", - "poke_683": "Aromatisse", - "poke_684": "Swirlix", - "poke_685": "Slurpuff", - "poke_686": "Inkay", - "poke_687": "Malamar", - "poke_688": "Binacle", - "poke_689": "Barbaracle", - "poke_69": "Bellsprout", - "poke_690": "Skrelp", - "poke_691": "Dragalge", - "poke_692": "Clauncher", - "poke_693": "Clawitzer", - "poke_694": "Helioptile", - "poke_695": "Heliolisk", - "poke_696": "Tyrunt", - "poke_697": "Tyrantrum", - "poke_698": "Amaura", - "poke_699": "Aurorus", - "poke_7": "Squirtle", - "poke_70": "Weepinbell", - "poke_700": "Sylveon", - "poke_701": "Hawlucha", - "poke_702": "Dedenne", - "poke_703": "Carbink", - "poke_704": "Goomy", - "poke_705": "Sliggoo", - "poke_706": "Goodra", - "poke_707": "Klefki", - "poke_708": "Phantump", - "poke_709": "Trevenant", - "poke_71": "Victreebel", - "poke_710": "Pumpkaboo", - "poke_711": "Gourgeist", - "poke_712": "Bergmite", - "poke_713": "Avalugg", - "poke_714": "Noibat", - "poke_715": "Noivern", - "poke_716": "Xerneas", - "poke_717": "Yveltal", - "poke_718": "Zygarde", - "poke_719": "Diancie", - "poke_72": "Tentacool", - "poke_720": "Hoopa", - "poke_721": "Volcanion", - "poke_722": "Rowlet", - "poke_723": "Dartrix", - "poke_724": "Decidueye", - "poke_725": "Litten", - "poke_726": "Torracat", - "poke_727": "Incineroar", - "poke_728": "Popplio", - "poke_729": "Brionne", - "poke_73": "Tentacruel", - "poke_730": "Primarina", - "poke_731": "Pikipek", - "poke_732": "Trumbeak", - "poke_733": "Toucannon", - "poke_734": "Yungoos", - "poke_735": "Gumshoos", - "poke_736": "Grubbin", - "poke_737": "Charjabug", - "poke_738": "Vikavolt", - "poke_739": "Crabrawler", - "poke_74": "Geodude", - "poke_740": "Crabominable", - "poke_741": "Oricorio", - "poke_742": "Cutiefly", - "poke_743": "Ribombee", - "poke_744": "Rockruff", - "poke_745": "Lycanroc", - "poke_746": "Wishiwashi", - "poke_747": "Mareanie", - "poke_748": "Toxapex", - "poke_749": "Mudbray", - "poke_75": "Graveler", - "poke_750": "Mudsdale", - "poke_751": "Dewpider", - "poke_752": "Araquanid", - "poke_753": "Fomantis", - "poke_754": "Lurantis", - "poke_755": "Morelull", - "poke_756": "Shiinotic", - "poke_757": "Salandit", - "poke_758": "Salazzle", - "poke_759": "Stufful", - "poke_76": "Golem", - "poke_760": "Bewear", - "poke_761": "Bounsweet", - "poke_762": "Steenee", - "poke_763": "Tsareena", - "poke_764": "Comfey", - "poke_765": "Oranguru", - "poke_766": "Passimian", - "poke_767": "Wimpod", - "poke_768": "Golisopod", - "poke_769": "Sandygast", - "poke_77": "Ponyta", - "poke_770": "Palossand", - "poke_771": "Pyukumuku", - "poke_772": "Type: Null", - "poke_773": "Silvally", - "poke_774": "Minior", - "poke_775": "Komala", - "poke_776": "Turtonator", - "poke_777": "Togedemaru", - "poke_778": "Mimikyu", - "poke_779": "Bruxish", - "poke_78": "Rapidash", - "poke_780": "Drampa", - "poke_781": "Dhelmise", - "poke_782": "Jangmo-o", - "poke_783": "Hakamo-o", - "poke_784": "Kommo-o", - "poke_785": "Tapu Koko", - "poke_786": "Tapu Lele", - "poke_787": "Tapu Bulu", - "poke_788": "Tapu Fini", - "poke_789": "Cosmog", - "poke_79": "Slowpoke", - "poke_790": "Cosmoem", - "poke_791": "Solgaleo", - "poke_792": "Lunala", - "poke_793": "Nihilego", - "poke_794": "Buzzwole", - "poke_795": "Pheromosa", - "poke_796": "Xurkitree", - "poke_797": "Celesteela", - "poke_798": "Kartana", - "poke_799": "Guzzlord", - "poke_8": "Wartortle", - "poke_80": "Slowbro", - "poke_800": "Necrozma", - "poke_801": "Magearna", - "poke_802": "Marshadow", - "poke_81": "Magnemite", - "poke_82": "Magneton", - "poke_83": "Farfetch'd", - "poke_84": "Doduo", - "poke_85": "Dodrio", - "poke_86": "Seel", - "poke_87": "Dewgong", - "poke_88": "Grimer", - "poke_89": "Muk", - "poke_9": "Blastoise", - "poke_90": "Shellder", - "poke_91": "Cloyster", - "poke_92": "Gastly", - "poke_93": "Haunter", - "poke_94": "Gengar", - "poke_95": "Onix", - "poke_96": "Drowzee", - "poke_97": "Hypno", - "poke_98": "Krabby", - "poke_99": "Kingler", - "quest_1": "{0} time(s) First Catch OTD", - "quest_2": "{0} time(s) First Pokestop OTD", - "quest_3": "Multi Part Quest", - "quest_4": "Catch {0} Pokemon", - "quest_5": "Spin {0} Pokestop(s)", - "quest_6": "Hatch {0} Egg(s)", - "quest_7": "Complete {0} Gym Battle(s)", - "quest_8": "Complete {0} Raid Battle(s)", - "quest_9": "Complete {0} Quest", - "quest_10": "Transfer {0} Pokemon", - "quest_11": "Favorite {0} Pokemon", - "quest_12": "Autocomplete", - "quest_13": "Use {0} Berries on Pokemon", - "quest_14": "Power up {0} Pokemon", - "quest_15": "Evolve {0} Pokemon", - "quest_16": "Land {0} Throw(s)", - "quest_17": "Get {0} Buddy candy", - "quest_18": "Get {0} Badge(s)", - "quest_19": "Get {0} Level", - "quest_20": "Join {0} Raid Battle(s)", - "quest_21": "Complete {0} Battle(s)", - "quest_22": "Add {0} Friend(s)", - "quest_23": "Trade {0} Pokemon", - "quest_24": "Send {0} Gift(s)", - "quest_25": "Evolve {0} Into Specific Pokemon", - "quest_27": "Complete {0} Combat(s)", - "quest_28": "Take {0} Snapshot(s)", - "quest_29": "Battle {0} Team Rocket Battle(s)", - "quest_30": "Purify {0} Pokemon", - "quest_31": "Find {0} Team Rocket Invasion(s)", - "quest_32": "{0} time(s) First Grunt OTD", - "quest_33": "Feed your Buddy {0} times", - "quest_34": "Earn {0} hearts with your Buddy", - "quest_35": "Play {0} times with your Buddy", - "quest_36": "Increase your Buddy Level {0} times", - "quest_37": "Earn {0} Friendship points by Walking with your Buddy", - "quest_38": "Earn {0} Souvenirs from your Buddy", - "quest_39": "Use Incense {0} times", - "quest_40": "quest_40", - "quest_41": "quest_41", - "quest_42": "quest_42", - "quest_43": "Mega-Evolve {0} Pokemon", - "quest_44": "quest_44", - "quest_45": "quest_45", - "quest_57": "Take {0} Snapshot(s) of wild Pokemon", - "quest_condition_1": "Type(s): {0}", - "quest_condition_10": "Super Effective Charge", - "quest_condition_11": "Item: {0}", - "quest_condition_12": "Unique Pokestop", - "quest_condition_13": "Quest Context", - "quest_condition_14": "{0} Throw In a Row", - "quest_condition_15": "Curve Ball", - "quest_condition_16": "Badge Type", - "quest_condition_17": "Player Level", - "quest_condition_18": "Win Battle", - "quest_condition_19": "New Friend", - "quest_condition_2": "Pokemon: {0}", - "quest_condition_20": "Days In a Row", - "quest_condition_21": "Unique Pokemon", - "quest_condition_22": "NPC Combat", - "quest_condition_23": "PVP Combat", - "quest_condition_24": "Location", - "quest_condition_25": "Distance", - "quest_condition_26": "Pokemon Alignment(s): {0}", - "quest_condition_27": "Invasion Category(s): {0}", - "quest_condition_28": "With Buddy", - "quest_condition_3": "Weather Boosted", - "quest_condition_37": "With Mega Evo Pokemon", - "quest_condition_4": "Daily Capture Bonus", - "quest_condition_5": "Daily Spin Bonus", - "quest_condition_6": "Win Raid", - "quest_condition_7": "Raid Level(s): {0}", - "quest_condition_8": "{0} Throw", - "quest_condition_9": "Win Gym Battle", - "quest_reward_1": "{0:N0} XP", - "quest_reward_11": "Sticker", - "quest_reward_12": "Mega Energy", - "quest_reward_2": "{0} {1}", - "quest_reward_3": "{0:N0} Stardust", - "quest_reward_4": "{0} {1} Candy", - "quest_reward_5": "Avatar Clothing", - "quest_reward_6": "Quest", - "quest_reward_7": "{0}", - "quest_reward_8": "{0:N0} Pokecoins", - "throw_type_10": "Nice", - "throw_type_11": "Great", - "throw_type_12": "Excellent", - "throw_type_13": "Curve", - "weather_0": "None", - "weather_1": "Clear", - "weather_2": "Rainy", - "weather_3": "PartlyCloudy", - "weather_4": "Cloudy", - "weather_5": "Windy", - "weather_6": "Snow", - "weather_7": "Fog" -} diff --git a/static/locale/es.json b/static/locale/es.json deleted file mode 100644 index b490093b..00000000 --- a/static/locale/es.json +++ /dev/null @@ -1,3628 +0,0 @@ -{ - "UNKNOWN_POKESTOP": "Unknown Pokestop", - "EMBED_DIRECTIONS": "DIRECTIONS", - "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{0} Subscriptions are not enabled in the config.", - "MSG_NOT_MODERATOR_OR_HIGHER": "{0} is not a moderator or higher thus you may not see other's subscription settings.", - "MSG_INVALID_USER_MENTION": "{0} Failed to retrieve user with mention tag {1}.", - "MSG_USER_NOT_SUBSCRIBED": "{0} is not currently subscribed to any Pokemon or Raid notifications.", - "TIME_YEARS": "years", - "TIME_DAYS": "days", - "TIME_HOURS": "hours", - "TIME_MINUTES": "minutes", - "TIME_SECONDS": "seconds", - "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", - "NOTIFY_ENABLE_DISABLE": "{0} has **{1}d** Pokemon, Raid, Quest, and Invasion notifications.", - "NOTIFY_INVALID_COORDINATES": "{0} Unable not parse {1} as valid coordinates.", - "NOTIFY_DISTANCE_SET": "{0} Notifications only within a {1} meters radius of location {2},{3} will be sent.", - "NOTIFY_PHONE_NUMBER_SET": "{0} Text message notifications for ultra rare Pokemon will be sent to {1}.", - "NOTIFY_INVALID_IV_VALUES": "{0} {1} is not a valid value. (Example: `0-15-6`)", - "NOTIFY_INVALID_ATTACK_VALUE": "{0} {1} is not a valid attack value. Must be between `0-15`.", - "NOTIFY_INVALID_DEFENSE_VALUE": "{0} {1} is not a valid defense value. Must be between `0-15`.", - "NOTIFY_INVALID_STAMINA_VALUE": "{0} {1} is not a valid stamina value. Must be between `0-15`.", - "NOTIFY_INVALID_IV_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_INVALID_GENDER": "{0} {1} is not a valid gender. (i.e. `m`, `f`, `*`)", - "NOTIFY_INVALID_LEVEL": "{0} {1} must be within the range of `0-35`.", - "NOTIFY_INVALID_MINIMUM_IV": "{0} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", - "NOTIFY_INVALID_MINIMUM_LEVEL": "{0} Failed to parse minimum level provided '{1}'.", - "NOTIFY_INVALID_MAXIMUM_LEVEL": "{0} Failed to parse maximum level provided '{1}'.", - "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{0} {1} are not valid Pokemon names or IDs.", - "NOTIFY_INVALID_POKEMON_ID_OR_NAME": "{0} {1} are not valid Pokemon name or ID.", - "NOTIFY_INVALID_POKEMON_ID": "{0} {1} is not a valid Pokemon id.", - "NOTIFY_COMMON_TYPE_POKEMON": "{0} {1} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {2}% or higher.", - "NOTIFY_INVALID_POKEMON_SPECIFIED": "{0} Unable to recognize any of the Pokemon you specified.", - "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{0} is not subscribed to any Pokemon notifications.", - "NOTIFY_INVALID_PVP_LEAGUE": "{0} {1} is not a valid PvP league. (Great or Ultra)", - "NOTIFY_INVALID_PVP_RANK_RANGE": "{0} {1} must be within the range of `0-4096`.", - "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokemon notifications.", - "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} Unable to remove {1} Pokemon subscriptions.", - "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Pokemon notifications.", - "NOTIFY_INVALID_CITY_ROLE": "{0} {1} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", - "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} has unsubscribed from **all** raid boss notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} has unsubscribed from **all** quest notifications.", - "NOTIFY_INVALID_INVASION_GENDER": "{0} Please specify a gender. i.e. `.invmenot fire-m` or `.invmenot water-f ontario or `.invmenot giovanni`", - "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Team Rocket invasion notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokestop lure notifications.", - "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{0} added gym subscription `{1}` to your list of gyms to receive raid notifications from.", - "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{0} already subscribed to gym notifications from {1}.", - "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{0} Removed gym subscription `{1}` from your list of gyms to receive notifications from.", - "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} has unsubscribed from **all** gym notifications.", - "NOTIFY_INVALID_ICON_STYLE": "{0} invalid icon style, type `{1}icons` to see a list of valid options.", - "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Raid subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Quest subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Team Rocket Invasion subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Gym subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Lure subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_ICON_STYLE_CHANGE": "{0} Icon style changed to **{1}**.", - "NOTIFY_IMPORT_UPLOAD_FILE": "{0} Please upload your subscriptions.json file to import now within 3 minutes...", - "NOTIFY_IMPORT_MALFORMED_DATA": "{0} Malformed subscription data, unable to import.", - "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{0} Unable to get uploaded attachment.", - "NOTIFY_IMPORT_SUCCESS": "{0} subscriptions were imported successfully.", - "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{0} does not have any subscriptions to export.", - "NOTIFY_EXPORT_SUCCESS": "{0} Download your subscription settings here.", - "NOTIFY_SETTINGS_EMBED_TITLE": "**{0} Notification Settings (Page: {1}/{2}):**", - "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{0}**", - "NOTIFY_SETTINGS_EMBED_CITIES": "Pokemon Feed Zones: ```{0}```", - "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", - "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{0} meters (Location: {1})", - "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{0}**", - "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {0}% ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {0} ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({0}/{1} used)", - "NOTIFY_FROM": "{0} (From: {1})", - "ALL_AREAS": "All Areas", - "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", - "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{0}feedme cityname` to assign yourself to that city role.*", - "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{0} {1} is not a valid city name, type `{2}cities` to see a list of available cities.", - "FEEDS_INVALID_CITY_NAME": "{0} {1} is not a valid city name.", - "FEEDS_ASSIGNED_ALL_ROLES": "{0} was assigned all city feed roles.", - "FEEDS_UNASSIGNED_ALL_ROLES": "{0} was unassigned all city feed roles.", - "FEEDS_ASSIGNED_ROLES": "{0} has joined role(s) **{1}**.", - "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{0} is already assigned to role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES": "{0} has been removed from role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{0} is not assigned to role(s) **{1}**.", - "FEEDS_PLEASE_WAIT": "{0} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", - "CHANNEL_MESSAGES_DELETED": "{0} Channel {1} messages have been deleted.", - "GYM_NO_POKESTOPS_CONVERTED": "{0} No Pokestops have been converted to Gyms.", - "GYM_NO_POKESTOPS_UPDATED": "{0} No Pokestops have been updated.", - "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", - "GYM_UNKNOWN_NAME": "Unknown Gym Name", - "GYM_UNKNOWN_IMAGE": "Unknown Image Url", - "GYM_POKESTOPS_CONVERTED": "{0} {1} Pokestops updated to Gyms.", - "GYM_POKESTOPS_DELETED": "{0} {1} Pokestops deleted.", - "GYM_NAME": "- **{0}**", - "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({1})] [[Gym Image]({0})]", - "SHINY_STATS_INVALID_CHANNEL": "{0} Shiny stats channel does not exist.", - "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {0}**]", - "SHINY_STATS_NEWLINE": "----------------------------------------------", - "SHINY_STATS_MESSAGE": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours with a **1/{4}** ratio.", - "SHINY_STATS_TOTAL_MESSAGE": "Found **{0}** total shinies out of **{1}** possiblities.", - "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{0}** total shinies out of **{1}** possiblities with a **1/{2}** ratio in total.", - "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", - "ERROR_NESTS_DISABLED": "{0} Nests disabled.", - "ERROR_NESTS_LIST": "{0} Unable to retrieve nest list.", - "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {0} of {1} total members.", - "ERROR_PARSING_USER_ID": "{0} Unable to recognize user id {1}.", - "DONATE_MESSAGE": "{0} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", - "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", - "SUBSCRIPTIONS_FROM_CITY": " from city **{0}**", - "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** lure notifications{2}.", - "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** lure notifications{2}.", - "ERROR_NO_LURE_SUBSCRIPTIONS": "{0} is not subscribed to any lure notifications{1}.", - "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** raid notifications{2}.", - "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** raid notifications{2}.", - "ERROR_NO_RAID_SUBSCRIPTIONS": "{0} is not subscribed to any raid notifications{1}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** quest notifications{2}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** quest notifications{2}.", - "ERROR_NO_QUEST_SUBSCRIPTIONS": "{0} is not subscribed to any quest notifications{1}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** Team Rocket invasion reward notifications{2}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Team Rocket invasion reward notifications{2}.", - "ERROR_NO_INVASION_SUBSCRIPTIONS": "{0} is not subscribed to any Team Rocket invasion notifications{1}.", - "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** {2} League PvP notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your {2} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} has unsubscribed from **all** {1} League PvP Pokemon notifications.", - "EVENT_POKEMON_SET": "{0} event Pokemon set to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_ADD": "{0} event Pokemon added to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_REMOVE": "{0} event Pokemon `{1}` removed.", - "DIRECT_MESSAGE_NOT_SUPPORTED": "{0} Direct message is not supported for this command.", - "PVP_GREAT_LEAGUE": "Great League", - "PVP_ULTRA_LEAGUE": "Ultra League", - "PVP_RANK": "Rank", - "PVP_CP": "CP", - "weather_0": "None", - "weather_1": "Clear", - "weather_2": "Rainy", - "weather_3": "PartlyCloudy", - "weather_4": "Cloudy", - "weather_5": "Windy", - "weather_6": "Snow", - "weather_7": "Fog", - "quest_1": "{0} time(s) First Catch OTD", - "quest_2": "{0} time(s) First Pokestop OTD", - "quest_3": "Multi Part Quest", - "quest_4": "Catch {0} Pokemon", - "quest_5": "Spin {0} Pokestop(s)", - "quest_6": "Hatch {0} Egg(s)", - "quest_7": "Complete {0} Gym Battle(s)", - "quest_8": "Complete {0} Raid Battle(s)", - "quest_9": "Complete {0} Quest", - "quest_10": "Transfer {0} Pokemon", - "quest_11": "Favorite {0} Pokemon", - "quest_12": "Autocomplete", - "quest_13": "Use {0} Berries on Pokemon", - "quest_14": "Power up {0} Pokemon", - "quest_15": "Evolve {0} Pokemon", - "quest_16": "Land {0} Throw(s)", - "quest_17": "Get {0} Buddy candy", - "quest_18": "Get {0} Badge(s)", - "quest_19": "Get {0} Level", - "quest_20": "Join {0} Raid Battle(s)", - "quest_21": "Complete {0} Battle(s)", - "quest_22": "Add {0} Friend(s)", - "quest_23": "Trade {0} Pokemon", - "quest_24": "Send {0} Gift(s)", - "quest_25": "Evolve {0} Into Specific Pokemon", - "quest_27": "Complete {0} Combat(s)", - "quest_28": "Take {0} Snapshot(s)", - "quest_29": "Battle {0} Team Rocket Battle(s)", - "quest_30": "Purify {0} Pokemon", - "quest_31": "Find {0} Team Rocket Invasion(s)", - "quest_32": "{0} time(s) First Grunt OTD", - "quest_33": "Feed your Buddy {0} times", - "quest_34": "Earn {0} hearts with your Buddy", - "quest_35": "Play {0} times with your Buddy", - "quest_36": "Increase your Buddy Level {0} times", - "quest_37": "Earn {0} Friendship points by Walking with your Buddy", - "quest_38": "Earn {0} Souvenirs from your Buddy", - "quest_39": "Use Incense {0} times", - "quest_40": "quest_40", - "quest_41": "quest_41", - "quest_42": "quest_42", - "quest_43": "Mega-Evolve {0} Pokemon", - "quest_44": "quest_44", - "quest_45": "quest_45", - "quest_57": "Take {0} Snapshot(s) of wild Pokemon", - "quest_reward_1": "{0:N0} XP", - "quest_reward_2": "{0} {1}", - "quest_reward_3": "{0:N0} Stardust", - "quest_reward_4": "{0} {1} Candy", - "quest_reward_5": "Avatar Clothing", - "quest_reward_6": "Quest", - "quest_reward_7": "{0}", - "quest_reward_8": "{0:N0} Pokecoins", - "quest_reward_11": "Sticker", - "quest_reward_12": "Mega Energy", - "quest_condition_1": "Type(s): {0}", - "quest_condition_2": "Pokemon: {0}", - "quest_condition_3": "Weather Boosted", - "quest_condition_4": "Daily Capture Bonus", - "quest_condition_5": "Daily Spin Bonus", - "quest_condition_6": "Win Raid", - "quest_condition_7": "Raid Level(s): {0}", - "quest_condition_8": "{0} Throw", - "quest_condition_9": "Win Gym Battle", - "quest_condition_10": "Super Effective Charge", - "quest_condition_11": "Item: {0}", - "quest_condition_12": "Unique Pokestop", - "quest_condition_13": "Quest Context", - "quest_condition_14": "{0} Throw In a Row", - "quest_condition_15": "Curve Ball", - "quest_condition_16": "Badge Type", - "quest_condition_17": "Player Level", - "quest_condition_18": "Win Battle", - "quest_condition_19": "New Friend", - "quest_condition_20": "Days In a Row", - "quest_condition_21": "Unique Pokemon", - "quest_condition_22": "NPC Combat", - "quest_condition_23": "PVP Combat", - "quest_condition_24": "Location", - "quest_condition_25": "Distance", - "quest_condition_26": "Pokemon Alignment(s): {0}", - "quest_condition_27": "Invasion Category(s): {0}", - "quest_condition_28": "With Buddy", - "quest_condition_37": "With Mega Evo Pokemon", - "alignment_1": "Shadow", - "alignment_2": "Purified", - "character_category_1": "Team Leader", - "character_category_2": "Grunt", - "throw_type_10": "Nice", - "throw_type_11": "Great", - "throw_type_12": "Excellent", - "throw_type_13": "Curve", - "item_1": "Poké Ball", - "item_2": "Super Ball", - "item_3": "Ultra Ball", - "item_4": "Master Ball", - "item_5": "Premier Ball", - "item_101": "Poción", - "item_102": "Superpoción", - "item_103": "Hiperpoción", - "item_104": "Poción Máxima", - "item_201": "Revivir", - "item_202": "Revivir Máximo", - "item_301": "Huevo Suerte", - "item_401": "Incienso", - "item_402": "Spicy Incense", - "item_403": "Cool Incense", - "item_404": "Floral Incense", - "item_501": "Módulo Cebo", - "item_502": "Módulo Cebo Glaciar", - "item_503": "Módulo Cebo Musgoso", - "item_504": "Módulo Cebo Magnético", - "item_602": "Ataque X", - "item_603": "Defensa X", - "item_604": "SIN DEFINIR", - "item_701": "Baya Frambu", - "item_702": "Baya Oram", - "item_703": "Baya Latano", - "item_704": "Baya Peragu", - "item_705": "Baya Pinia", - "item_706": "Baya Frambu dorada", - "item_707": "Golden Nanab Berry", - "item_708": "Baya Pinia plateada", - "item_801": "Cámara", - "item_901": "Incubadora ∞", - "item_902": "Incubadora", - "item_903": "Superincubadora", - "item_1001": "Pokemon Storage Upgrade", - "item_1002": "Item Storage Upgrade", - "item_1101": "Piedra Solar", - "item_1102": "Roca del Rey", - "item_1103": "Revestimiento Metálico", - "item_1104": "Escama Dragón", - "item_1105": "Mejora", - "item_1106": "Piedra Sinnoh", - "item_1107": "Piedra Teselia", - "item_1201": "MT de ataque rápido", - "item_1202": "MT de ataque cargado", - "item_1301": "Caramelo Raro", - "item_1401": "Pase de incursión", - "item_1402": "Pase de combate premium", - "item_1403": "Pase de incursión EX", - "item_1404": "Trozo Estrella", - "item_1405": "Regalo", - "lure_501": "Normal", - "lure_502": "Glacial", - "lure_503": "Mossy", - "lure_504": "Magnetic", - "grunt_0": "None", - "grunt_1": "Blanche", - "grunt_2": "Candela", - "grunt_3": "Spark", - "grunt_4": "Recluta (male)", - "grunt_5": "Recluta (female)", - "grunt_6": "Bicho - Recluta (female)", - "grunt_7": "Bicho - Recluta (male)", - "grunt_8": "Darkness - Female Grunt", - "grunt_9": "Darkness - Male Grunt", - "grunt_10": "Siniestro - Recluta (female)", - "grunt_11": "Siniestro - Recluta (male)", - "grunt_12": "Dragón - Recluta (female)", - "grunt_13": "Dragón - Recluta (male)", - "grunt_14": "Hada - Recluta (female)", - "grunt_15": "Hada - Recluta (male)", - "grunt_16": "Lucha - Recluta (female)", - "grunt_17": "Lucha - Recluta (male)", - "grunt_18": "Fuego - Recluta (female)", - "grunt_19": "Fuego - Recluta (male)", - "grunt_20": "Volador - Recluta (female)", - "grunt_21": "Volador - Recluta (male)", - "grunt_22": "Planta - Recluta (female)", - "grunt_23": "Planta - Recluta (male)", - "grunt_24": "Tierra - Recluta (female)", - "grunt_25": "Tierra - Recluta (male)", - "grunt_26": "Hielo - Recluta (female)", - "grunt_27": "Hielo - Recluta (male)", - "grunt_28": "Recluta (female)", - "grunt_29": "Recluta (male)", - "grunt_30": "Normal - Recluta (female)", - "grunt_31": "Normal - Recluta (male)", - "grunt_32": "Veneno - Recluta (female)", - "grunt_33": "Veneno - Recluta (male)", - "grunt_34": "Psíquico - Recluta (female)", - "grunt_35": "Psíquico - Recluta (male)", - "grunt_36": "Roca - Recluta (female)", - "grunt_37": "Roca - Recluta (male)", - "grunt_38": "Agua - Recluta (female)", - "grunt_39": "Agua - Recluta (male)", - "grunt_40": "Player Team Leader", - "grunt_41": "Líder Cliff", - "grunt_42": "Líder Arlo", - "grunt_43": "Líder Sierra", - "grunt_44": "Giovanni", - "grunt_45": "Recluta señuelo (male)", - "grunt_46": "Recluta señuelo (female)", - "grunt_47": "Fantasma - Recluta (female)", - "grunt_48": "Fantasma - Recluta (male)", - "grunt_49": "Eléctrico - Recluta (female)", - "grunt_50": "Eléctrico - Recluta (male)", - "poke_0": "--", - "poke_1": "Bulbasaur", - "poke_2": "Ivysaur", - "poke_3": "Venusaur", - "poke_4": "Charmander", - "poke_5": "Charmeleon", - "poke_6": "Charizard", - "poke_7": "Squirtle", - "poke_8": "Wartortle", - "poke_9": "Blastoise", - "poke_10": "Caterpie", - "poke_11": "Metapod", - "poke_12": "Butterfree", - "poke_13": "Weedle", - "poke_14": "Kakuna", - "poke_15": "Beedrill", - "poke_16": "Pidgey", - "poke_17": "Pidgeotto", - "poke_18": "Pidgeot", - "poke_19": "Rattata", - "poke_20": "Raticate", - "poke_21": "Spearow", - "poke_22": "Fearow", - "poke_23": "Ekans", - "poke_24": "Arbok", - "poke_25": "Pikachu", - "poke_26": "Raichu", - "poke_27": "Sandshrew", - "poke_28": "Sandslash", - "poke_29": "Nidoran♀", - "poke_30": "Nidorina", - "poke_31": "Nidoqueen", - "poke_32": "Nidoran♂", - "poke_33": "Nidorino", - "poke_34": "Nidoking", - "poke_35": "Clefairy", - "poke_36": "Clefable", - "poke_37": "Vulpix", - "poke_38": "Ninetales", - "poke_39": "Jigglypuff", - "poke_40": "Wigglytuff", - "poke_41": "Zubat", - "poke_42": "Golbat", - "poke_43": "Oddish", - "poke_44": "Gloom", - "poke_45": "Vileplume", - "poke_46": "Paras", - "poke_47": "Parasect", - "poke_48": "Venonat", - "poke_49": "Venomoth", - "poke_50": "Diglett", - "poke_51": "Dugtrio", - "poke_52": "Meowth", - "poke_53": "Persian", - "poke_54": "Psyduck", - "poke_55": "Golduck", - "poke_56": "Mankey", - "poke_57": "Primeape", - "poke_58": "Growlithe", - "poke_59": "Arcanine", - "poke_60": "Poliwag", - "poke_61": "Poliwhirl", - "poke_62": "Poliwrath", - "poke_63": "Abra", - "poke_64": "Kadabra", - "poke_65": "Alakazam", - "poke_66": "Machop", - "poke_67": "Machoke", - "poke_68": "Machamp", - "poke_69": "Bellsprout", - "poke_70": "Weepinbell", - "poke_71": "Victreebel", - "poke_72": "Tentacool", - "poke_73": "Tentacruel", - "poke_74": "Geodude", - "poke_75": "Graveler", - "poke_76": "Golem", - "poke_77": "Ponyta", - "poke_78": "Rapidash", - "poke_79": "Slowpoke", - "poke_80": "Slowbro", - "poke_81": "Magnemite", - "poke_82": "Magneton", - "poke_83": "Farfetch'd", - "poke_84": "Doduo", - "poke_85": "Dodrio", - "poke_86": "Seel", - "poke_87": "Dewgong", - "poke_88": "Grimer", - "poke_89": "Muk", - "poke_90": "Shellder", - "poke_91": "Cloyster", - "poke_92": "Gastly", - "poke_93": "Haunter", - "poke_94": "Gengar", - "poke_95": "Onix", - "poke_96": "Drowzee", - "poke_97": "Hypno", - "poke_98": "Krabby", - "poke_99": "Kingler", - "poke_100": "Voltorb", - "poke_101": "Electrode", - "poke_102": "Exeggcute", - "poke_103": "Exeggutor", - "poke_104": "Cubone", - "poke_105": "Marowak", - "poke_106": "Hitmonlee", - "poke_107": "Hitmonchan", - "poke_108": "Lickitung", - "poke_109": "Koffing", - "poke_110": "Weezing", - "poke_111": "Rhyhorn", - "poke_112": "Rhydon", - "poke_113": "Chansey", - "poke_114": "Tangela", - "poke_115": "Kangaskhan", - "poke_116": "Horsea", - "poke_117": "Seadra", - "poke_118": "Goldeen", - "poke_119": "Seaking", - "poke_120": "Staryu", - "poke_121": "Starmie", - "poke_122": "Mr. Mime", - "poke_123": "Scyther", - "poke_124": "Jynx", - "poke_125": "Electabuzz", - "poke_126": "Magmar", - "poke_127": "Pinsir", - "poke_128": "Tauros", - "poke_129": "Magikarp", - "poke_130": "Gyarados", - "poke_131": "Lapras", - "poke_132": "Ditto", - "poke_133": "Eevee", - "poke_134": "Vaporeon", - "poke_135": "Jolteon", - "poke_136": "Flareon", - "poke_137": "Porygon", - "poke_138": "Omanyte", - "poke_139": "Omastar", - "poke_140": "Kabuto", - "poke_141": "Kabutops", - "poke_142": "Aerodactyl", - "poke_143": "Snorlax", - "poke_144": "Articuno", - "poke_145": "Zapdos", - "poke_146": "Moltres", - "poke_147": "Dratini", - "poke_148": "Dragonair", - "poke_149": "Dragonite", - "poke_150": "Mewtwo", - "poke_151": "Mew", - "poke_152": "Chikorita", - "poke_153": "Bayleef", - "poke_154": "Meganium", - "poke_155": "Cyndaquil", - "poke_156": "Quilava", - "poke_157": "Typhlosion", - "poke_158": "Totodile", - "poke_159": "Croconaw", - "poke_160": "Feraligatr", - "poke_161": "Sentret", - "poke_162": "Furret", - "poke_163": "Hoothoot", - "poke_164": "Noctowl", - "poke_165": "Ledyba", - "poke_166": "Ledian", - "poke_167": "Spinarak", - "poke_168": "Ariados", - "poke_169": "Crobat", - "poke_170": "Chinchou", - "poke_171": "Lanturn", - "poke_172": "Pichu", - "poke_173": "Cleffa", - "poke_174": "Igglybuff", - "poke_175": "Togepi", - "poke_176": "Togetic", - "poke_177": "Natu", - "poke_178": "Xatu", - "poke_179": "Mareep", - "poke_180": "Flaaffy", - "poke_181": "Ampharos", - "poke_182": "Bellossom", - "poke_183": "Marill", - "poke_184": "Azumarill", - "poke_185": "Sudowoodo", - "poke_186": "Politoed", - "poke_187": "Hoppip", - "poke_188": "Skiploom", - "poke_189": "Jumpluff", - "poke_190": "Aipom", - "poke_191": "Sunkern", - "poke_192": "Sunflora", - "poke_193": "Yanma", - "poke_194": "Wooper", - "poke_195": "Quagsire", - "poke_196": "Espeon", - "poke_197": "Umbreon", - "poke_198": "Murkrow", - "poke_199": "Slowking", - "poke_200": "Misdreavus", - "poke_201": "Unown", - "poke_202": "Wobbuffet", - "poke_203": "Girafarig", - "poke_204": "Pineco", - "poke_205": "Forretress", - "poke_206": "Dunsparce", - "poke_207": "Gligar", - "poke_208": "Steelix", - "poke_209": "Snubbull", - "poke_210": "Granbull", - "poke_211": "Qwilfish", - "poke_212": "Scizor", - "poke_213": "Shuckle", - "poke_214": "Heracross", - "poke_215": "Sneasel", - "poke_216": "Teddiursa", - "poke_217": "Ursaring", - "poke_218": "Slugma", - "poke_219": "Magcargo", - "poke_220": "Swinub", - "poke_221": "Piloswine", - "poke_222": "Corsola", - "poke_223": "Remoraid", - "poke_224": "Octillery", - "poke_225": "Delibird", - "poke_226": "Mantine", - "poke_227": "Skarmory", - "poke_228": "Houndour", - "poke_229": "Houndoom", - "poke_230": "Kingdra", - "poke_231": "Phanpy", - "poke_232": "Donphan", - "poke_233": "Porygon2", - "poke_234": "Stantler", - "poke_235": "Smeargle", - "poke_236": "Tyrogue", - "poke_237": "Hitmontop", - "poke_238": "Smoochum", - "poke_239": "Elekid", - "poke_240": "Magby", - "poke_241": "Miltank", - "poke_242": "Blissey", - "poke_243": "Raikou", - "poke_244": "Entei", - "poke_245": "Suicune", - "poke_246": "Larvitar", - "poke_247": "Pupitar", - "poke_248": "Tyranitar", - "poke_249": "Lugia", - "poke_250": "Ho-Oh", - "poke_251": "Celebi", - "poke_252": "Treecko", - "poke_253": "Grovyle", - "poke_254": "Sceptile", - "poke_255": "Torchic", - "poke_256": "Combusken", - "poke_257": "Blaziken", - "poke_258": "Mudkip", - "poke_259": "Marshtomp", - "poke_260": "Swampert", - "poke_261": "Poochyena", - "poke_262": "Mightyena", - "poke_263": "Zigzagoon", - "poke_264": "Linoone", - "poke_265": "Wurmple", - "poke_266": "Silcoon", - "poke_267": "Beautifly", - "poke_268": "Cascoon", - "poke_269": "Dustox", - "poke_270": "Lotad", - "poke_271": "Lombre", - "poke_272": "Ludicolo", - "poke_273": "Seedot", - "poke_274": "Nuzleaf", - "poke_275": "Shiftry", - "poke_276": "Taillow", - "poke_277": "Swellow", - "poke_278": "Wingull", - "poke_279": "Pelipper", - "poke_280": "Ralts", - "poke_281": "Kirlia", - "poke_282": "Gardevoir", - "poke_283": "Surskit", - "poke_284": "Masquerain", - "poke_285": "Shroomish", - "poke_286": "Breloom", - "poke_287": "Slakoth", - "poke_288": "Vigoroth", - "poke_289": "Slaking", - "poke_290": "Nincada", - "poke_291": "Ninjask", - "poke_292": "Shedinja", - "poke_293": "Whismur", - "poke_294": "Loudred", - "poke_295": "Exploud", - "poke_296": "Makuhita", - "poke_297": "Hariyama", - "poke_298": "Azurill", - "poke_299": "Nosepass", - "poke_300": "Skitty", - "poke_301": "Delcatty", - "poke_302": "Sableye", - "poke_303": "Mawile", - "poke_304": "Aron", - "poke_305": "Lairon", - "poke_306": "Aggron", - "poke_307": "Meditite", - "poke_308": "Medicham", - "poke_309": "Electrike", - "poke_310": "Manectric", - "poke_311": "Plusle", - "poke_312": "Minun", - "poke_313": "Volbeat", - "poke_314": "Illumise", - "poke_315": "Roselia", - "poke_316": "Gulpin", - "poke_317": "Swalot", - "poke_318": "Carvanha", - "poke_319": "Sharpedo", - "poke_320": "Wailmer", - "poke_321": "Wailord", - "poke_322": "Numel", - "poke_323": "Camerupt", - "poke_324": "Torkoal", - "poke_325": "Spoink", - "poke_326": "Grumpig", - "poke_327": "Spinda", - "poke_328": "Trapinch", - "poke_329": "Vibrava", - "poke_330": "Flygon", - "poke_331": "Cacnea", - "poke_332": "Cacturne", - "poke_333": "Swablu", - "poke_334": "Altaria", - "poke_335": "Zangoose", - "poke_336": "Seviper", - "poke_337": "Lunatone", - "poke_338": "Solrock", - "poke_339": "Barboach", - "poke_340": "Whiscash", - "poke_341": "Corphish", - "poke_342": "Crawdaunt", - "poke_343": "Baltoy", - "poke_344": "Claydol", - "poke_345": "Lileep", - "poke_346": "Cradily", - "poke_347": "Anorith", - "poke_348": "Armaldo", - "poke_349": "Feebas", - "poke_350": "Milotic", - "poke_351": "Castform", - "poke_352": "Kecleon", - "poke_353": "Shuppet", - "poke_354": "Banette", - "poke_355": "Duskull", - "poke_356": "Dusclops", - "poke_357": "Tropius", - "poke_358": "Chimecho", - "poke_359": "Absol", - "poke_360": "Wynaut", - "poke_361": "Snorunt", - "poke_362": "Glalie", - "poke_363": "Spheal", - "poke_364": "Sealeo", - "poke_365": "Walrein", - "poke_366": "Clamperl", - "poke_367": "Huntail", - "poke_368": "Gorebyss", - "poke_369": "Relicanth", - "poke_370": "Luvdisc", - "poke_371": "Bagon", - "poke_372": "Shelgon", - "poke_373": "Salamence", - "poke_374": "Beldum", - "poke_375": "Metang", - "poke_376": "Metagross", - "poke_377": "Regirock", - "poke_378": "Regice", - "poke_379": "Registeel", - "poke_380": "Latias", - "poke_381": "Latios", - "poke_382": "Kyogre", - "poke_383": "Groudon", - "poke_384": "Rayquaza", - "poke_385": "Jirachi", - "poke_386": "Deoxys", - "poke_387": "Turtwig", - "poke_388": "Grotle", - "poke_389": "Torterra", - "poke_390": "Chimchar", - "poke_391": "Monferno", - "poke_392": "Infernape", - "poke_393": "Piplup", - "poke_394": "Prinplup", - "poke_395": "Empoleon", - "poke_396": "Starly", - "poke_397": "Staravia", - "poke_398": "Staraptor", - "poke_399": "Bidoof", - "poke_400": "Bibarel", - "poke_401": "Kricketot", - "poke_402": "Kricketune", - "poke_403": "Shinx", - "poke_404": "Luxio", - "poke_405": "Luxray", - "poke_406": "Budew", - "poke_407": "Roserade", - "poke_408": "Cranidos", - "poke_409": "Rampardos", - "poke_410": "Shieldon", - "poke_411": "Bastiodon", - "poke_412": "Burmy", - "poke_413": "Wormadam", - "poke_414": "Mothim", - "poke_415": "Combee", - "poke_416": "Vespiquen", - "poke_417": "Pachirisu", - "poke_418": "Buizel", - "poke_419": "Floatzel", - "poke_420": "Cherubi", - "poke_421": "Cherrim", - "poke_422": "Shellos", - "poke_423": "Gastrodon", - "poke_424": "Ambipom", - "poke_425": "Drifloon", - "poke_426": "Drifblim", - "poke_427": "Buneary", - "poke_428": "Lopunny", - "poke_429": "Mismagius", - "poke_430": "Honchkrow", - "poke_431": "Glameow", - "poke_432": "Purugly", - "poke_433": "Chingling", - "poke_434": "Stunky", - "poke_435": "Skuntank", - "poke_436": "Bronzor", - "poke_437": "Bronzong", - "poke_438": "Bonsly", - "poke_439": "Mime Jr.", - "poke_440": "Happiny", - "poke_441": "Chatot", - "poke_442": "Spiritomb", - "poke_443": "Gible", - "poke_444": "Gabite", - "poke_445": "Garchomp", - "poke_446": "Munchlax", - "poke_447": "Riolu", - "poke_448": "Lucario", - "poke_449": "Hippopotas", - "poke_450": "Hippowdon", - "poke_451": "Skorupi", - "poke_452": "Drapion", - "poke_453": "Croagunk", - "poke_454": "Toxicroak", - "poke_455": "Carnivine", - "poke_456": "Finneon", - "poke_457": "Lumineon", - "poke_458": "Mantyke", - "poke_459": "Snover", - "poke_460": "Abomasnow", - "poke_461": "Weavile", - "poke_462": "Magnezone", - "poke_463": "Lickilicky", - "poke_464": "Rhyperior", - "poke_465": "Tangrowth", - "poke_466": "Electivire", - "poke_467": "Magmortar", - "poke_468": "Togekiss", - "poke_469": "Yanmega", - "poke_470": "Leafeon", - "poke_471": "Glaceon", - "poke_472": "Gliscor", - "poke_473": "Mamoswine", - "poke_474": "Porygon-Z", - "poke_475": "Gallade", - "poke_476": "Probopass", - "poke_477": "Dusknoir", - "poke_478": "Froslass", - "poke_479": "Rotom", - "poke_480": "Uxie", - "poke_481": "Mesprit", - "poke_482": "Azelf", - "poke_483": "Dialga", - "poke_484": "Palkia", - "poke_485": "Heatran", - "poke_486": "Regigigas", - "poke_487": "Giratina", - "poke_488": "Cresselia", - "poke_489": "Phione", - "poke_490": "Manaphy", - "poke_491": "Darkrai", - "poke_492": "Shaymin", - "poke_493": "Arceus", - "poke_494": "Victini", - "poke_495": "Snivy", - "poke_496": "Servine", - "poke_497": "Serperior", - "poke_498": "Tepig", - "poke_499": "Pignite", - "poke_500": "Emboar", - "poke_501": "Oshawott", - "poke_502": "Dewott", - "poke_503": "Samurott", - "poke_504": "Patrat", - "poke_505": "Watchog", - "poke_506": "Lillipup", - "poke_507": "Herdier", - "poke_508": "Stoutland", - "poke_509": "Purrloin", - "poke_510": "Liepard", - "poke_511": "Pansage", - "poke_512": "Simisage", - "poke_513": "Pansear", - "poke_514": "Simisear", - "poke_515": "Panpour", - "poke_516": "Simipour", - "poke_517": "Munna", - "poke_518": "Musharna", - "poke_519": "Pidove", - "poke_520": "Tranquill", - "poke_521": "Unfezant", - "poke_522": "Blitzle", - "poke_523": "Zebstrika", - "poke_524": "Roggenrola", - "poke_525": "Boldore", - "poke_526": "Gigalith", - "poke_527": "Woobat", - "poke_528": "Swoobat", - "poke_529": "Drilbur", - "poke_530": "Excadrill", - "poke_531": "Audino", - "poke_532": "Timburr", - "poke_533": "Gurdurr", - "poke_534": "Conkeldurr", - "poke_535": "Tympole", - "poke_536": "Palpitoad", - "poke_537": "Seismitoad", - "poke_538": "Throh", - "poke_539": "Sawk", - "poke_540": "Sewaddle", - "poke_541": "Swadloon", - "poke_542": "Leavanny", - "poke_543": "Venipede", - "poke_544": "Whirlipede", - "poke_545": "Scolipede", - "poke_546": "Cottonee", - "poke_547": "Whimsicott", - "poke_548": "Petilil", - "poke_549": "Lilligant", - "poke_550": "Basculin", - "poke_551": "Sandile", - "poke_552": "Krokorok", - "poke_553": "Krookodile", - "poke_554": "Darumaka", - "poke_555": "Darmanitan", - "poke_556": "Maractus", - "poke_557": "Dwebble", - "poke_558": "Crustle", - "poke_559": "Scraggy", - "poke_560": "Scrafty", - "poke_561": "Sigilyph", - "poke_562": "Yamask", - "poke_563": "Cofagrigus", - "poke_564": "Tirtouga", - "poke_565": "Carracosta", - "poke_566": "Archen", - "poke_567": "Archeops", - "poke_568": "Trubbish", - "poke_569": "Garbodor", - "poke_570": "Zorua", - "poke_571": "Zoroark", - "poke_572": "Minccino", - "poke_573": "Cinccino", - "poke_574": "Gothita", - "poke_575": "Gothorita", - "poke_576": "Gothitelle", - "poke_577": "Solosis", - "poke_578": "Duosion", - "poke_579": "Reuniclus", - "poke_580": "Ducklett", - "poke_581": "Swanna", - "poke_582": "Vanillite", - "poke_583": "Vanillish", - "poke_584": "Vanilluxe", - "poke_585": "Deerling", - "poke_586": "Sawsbuck", - "poke_587": "Emolga", - "poke_588": "Karrablast", - "poke_589": "Escavalier", - "poke_590": "Foongus", - "poke_591": "Amoonguss", - "poke_592": "Frillish", - "poke_593": "Jellicent", - "poke_594": "Alomomola", - "poke_595": "Joltik", - "poke_596": "Galvantula", - "poke_597": "Ferroseed", - "poke_598": "Ferrothorn", - "poke_599": "Klink", - "poke_600": "Klang", - "poke_601": "Klinklang", - "poke_602": "Tynamo", - "poke_603": "Eelektrik", - "poke_604": "Eelektross", - "poke_605": "Elgyem", - "poke_606": "Beheeyem", - "poke_607": "Litwick", - "poke_608": "Lampent", - "poke_609": "Chandelure", - "poke_610": "Axew", - "poke_611": "Fraxure", - "poke_612": "Haxorus", - "poke_613": "Cubchoo", - "poke_614": "Beartic", - "poke_615": "Cryogonal", - "poke_616": "Shelmet", - "poke_617": "Accelgor", - "poke_618": "Stunfisk", - "poke_619": "Mienfoo", - "poke_620": "Mienshao", - "poke_621": "Druddigon", - "poke_622": "Golett", - "poke_623": "Golurk", - "poke_624": "Pawniard", - "poke_625": "Bisharp", - "poke_626": "Bouffalant", - "poke_627": "Rufflet", - "poke_628": "Braviary", - "poke_629": "Vullaby", - "poke_630": "Mandibuzz", - "poke_631": "Heatmor", - "poke_632": "Durant", - "poke_633": "Deino", - "poke_634": "Zweilous", - "poke_635": "Hydreigon", - "poke_636": "Larvesta", - "poke_637": "Volcarona", - "poke_638": "Cobalion", - "poke_639": "Terrakion", - "poke_640": "Virizion", - "poke_641": "Tornadus", - "poke_642": "Thundurus", - "poke_643": "Reshiram", - "poke_644": "Zekrom", - "poke_645": "Landorus", - "poke_646": "Kyurem", - "poke_647": "Keldeo", - "poke_648": "Meloetta", - "poke_649": "Genesect", - "poke_650": "Chespin", - "poke_651": "Quilladin", - "poke_652": "Chesnaught", - "poke_653": "Fennekin", - "poke_654": "Braixen", - "poke_655": "Delphox", - "poke_656": "Froakie", - "poke_657": "Frogadier", - "poke_658": "Greninja", - "poke_659": "Bunnelby", - "poke_660": "Diggersby", - "poke_661": "Fletchling", - "poke_662": "Fletchinder", - "poke_663": "Talonflame", - "poke_664": "Scatterbug", - "poke_665": "Spewpa", - "poke_666": "Vivillon", - "poke_667": "Litleo", - "poke_668": "Pyroar", - "poke_669": "Flabébé", - "poke_670": "Floette", - "poke_671": "Florges", - "poke_672": "Skiddo", - "poke_673": "Gogoat", - "poke_674": "Pancham", - "poke_675": "Pangoro", - "poke_676": "Furfrou", - "poke_677": "Espurr", - "poke_678": "Meowstic", - "poke_679": "Honedge", - "poke_680": "Doublade", - "poke_681": "Aegislash", - "poke_682": "Spritzee", - "poke_683": "Aromatisse", - "poke_684": "Swirlix", - "poke_685": "Slurpuff", - "poke_686": "Inkay", - "poke_687": "Malamar", - "poke_688": "Binacle", - "poke_689": "Barbaracle", - "poke_690": "Skrelp", - "poke_691": "Dragalge", - "poke_692": "Clauncher", - "poke_693": "Clawitzer", - "poke_694": "Helioptile", - "poke_695": "Heliolisk", - "poke_696": "Tyrunt", - "poke_697": "Tyrantrum", - "poke_698": "Amaura", - "poke_699": "Aurorus", - "poke_700": "Sylveon", - "poke_701": "Hawlucha", - "poke_702": "Dedenne", - "poke_703": "Carbink", - "poke_704": "Goomy", - "poke_705": "Sliggoo", - "poke_706": "Goodra", - "poke_707": "Klefki", - "poke_708": "Phantump", - "poke_709": "Trevenant", - "poke_710": "Pumpkaboo", - "poke_711": "Gourgeist", - "poke_712": "Bergmite", - "poke_713": "Avalugg", - "poke_714": "Noibat", - "poke_715": "Noivern", - "poke_716": "Xerneas", - "poke_717": "Yveltal", - "poke_718": "Zygarde", - "poke_719": "Diancie", - "poke_720": "Hoopa", - "poke_721": "Volcanion", - "poke_722": "Rowlet", - "poke_723": "Dartrix", - "poke_724": "Decidueye", - "poke_725": "Litten", - "poke_726": "Torracat", - "poke_727": "Incineroar", - "poke_728": "Popplio", - "poke_729": "Brionne", - "poke_730": "Primarina", - "poke_731": "Pikipek", - "poke_732": "Trumbeak", - "poke_733": "Toucannon", - "poke_734": "Yungoos", - "poke_735": "Gumshoos", - "poke_736": "Grubbin", - "poke_737": "Charjabug", - "poke_738": "Vikavolt", - "poke_739": "Crabrawler", - "poke_740": "Crabominable", - "poke_741": "Oricorio", - "poke_742": "Cutiefly", - "poke_743": "Ribombee", - "poke_744": "Rockruff", - "poke_745": "Lycanroc", - "poke_746": "Wishiwashi", - "poke_747": "Mareanie", - "poke_748": "Toxapex", - "poke_749": "Mudbray", - "poke_750": "Mudsdale", - "poke_751": "Dewpider", - "poke_752": "Araquanid", - "poke_753": "Fomantis", - "poke_754": "Lurantis", - "poke_755": "Morelull", - "poke_756": "Shiinotic", - "poke_757": "Salandit", - "poke_758": "Salazzle", - "poke_759": "Stufful", - "poke_760": "Bewear", - "poke_761": "Bounsweet", - "poke_762": "Steenee", - "poke_763": "Tsareena", - "poke_764": "Comfey", - "poke_765": "Oranguru", - "poke_766": "Passimian", - "poke_767": "Wimpod", - "poke_768": "Golisopod", - "poke_769": "Sandygast", - "poke_770": "Palossand", - "poke_771": "Pyukumuku", - "poke_772": "Type: Null", - "poke_773": "Silvally", - "poke_774": "Minior", - "poke_775": "Komala", - "poke_776": "Turtonator", - "poke_777": "Togedemaru", - "poke_778": "Mimikyu", - "poke_779": "Bruxish", - "poke_780": "Drampa", - "poke_781": "Dhelmise", - "poke_782": "Jangmo-o", - "poke_783": "Hakamo-o", - "poke_784": "Kommo-o", - "poke_785": "Tapu Koko", - "poke_786": "Tapu Lele", - "poke_787": "Tapu Bulu", - "poke_788": "Tapu Fini", - "poke_789": "Cosmog", - "poke_790": "Cosmoem", - "poke_791": "Solgaleo", - "poke_792": "Lunala", - "poke_793": "Nihilego", - "poke_794": "Buzzwole", - "poke_795": "Pheromosa", - "poke_796": "Xurkitree", - "poke_797": "Celesteela", - "poke_798": "Kartana", - "poke_799": "Guzzlord", - "poke_800": "Necrozma", - "poke_801": "Magearna", - "poke_802": "Marshadow", - "poke_808": "Meltan", - "poke_809": "Melmetal", - "poke_862": "Obstagoon", - "poke_863": "Perrserker", - "poke_865": "Sirfetch’d", - "form_1": "A", - "form_2": "B", - "form_3": "C", - "form_4": "D", - "form_5": "E", - "form_6": "F", - "form_7": "G", - "form_8": "H", - "form_9": "I", - "form_10": "J", - "form_11": "K", - "form_12": "L", - "form_13": "M", - "form_14": "N", - "form_15": "O", - "form_16": "P", - "form_17": "Q", - "form_18": "R", - "form_19": "S", - "form_20": "T", - "form_21": "U", - "form_22": "V", - "form_23": "W", - "form_24": "X", - "form_25": "Y", - "form_26": "Z", - "form_27": "!", - "form_28": "?", - "form_29": "Normal", - "form_30": "Sunny", - "form_31": "Rainy", - "form_32": "Snowy", - "form_33": "Normal", - "form_34": "Attack", - "form_35": "Defense", - "form_36": "Speed", - "form_37": "00", - "form_38": "01", - "form_39": "02", - "form_40": "03", - "form_41": "04", - "form_42": "05", - "form_43": "06", - "form_44": "07", - "form_45": "Normal", - "form_46": "Alola", - "form_47": "Normal", - "form_48": "Alola", - "form_49": "Normal", - "form_50": "Alola", - "form_51": "Normal", - "form_52": "Alola", - "form_53": "Normal", - "form_54": "Alola", - "form_55": "Normal", - "form_56": "Alola", - "form_57": "Normal", - "form_58": "Alola", - "form_59": "Normal", - "form_60": "Alola", - "form_61": "Normal", - "form_62": "Alola", - "form_63": "Normal", - "form_64": "Alola", - "form_65": "Normal", - "form_66": "Alola", - "form_67": "Normal", - "form_68": "Alola", - "form_69": "Normal", - "form_70": "Alola", - "form_71": "Normal", - "form_72": "Alola", - "form_73": "Normal", - "form_74": "Alola", - "form_75": "Normal", - "form_76": "Alola", - "form_77": "Normal", - "form_78": "Alola", - "form_79": "Normal", - "form_80": "Alola", - "form_81": "Normal", - "form_82": "Frost", - "form_83": "Fan", - "form_84": "Mow", - "form_85": "Wash", - "form_86": "Heat", - "form_87": "Plant", - "form_88": "Sandy", - "form_89": "Trash", - "form_90": "Altered", - "form_91": "Origin", - "form_92": "Sky", - "form_93": "Land", - "form_94": "Overcast", - "form_95": "Sunny", - "form_96": "West Sea", - "form_97": "East Sea", - "form_98": "West Sea", - "form_99": "East Sea", - "form_100": "Normal", - "form_101": "Fighting", - "form_102": "Flying", - "form_103": "Poison", - "form_104": "Ground", - "form_105": "Rock", - "form_106": "Bug", - "form_107": "Ghost", - "form_108": "Steel", - "form_109": "Fire", - "form_110": "Water", - "form_111": "Grass", - "form_112": "Electric", - "form_113": "Psychic", - "form_114": "Ice", - "form_115": "Dragon", - "form_116": "Dark", - "form_117": "Fairy", - "form_118": "Plant", - "form_119": "Sandy", - "form_120": "Trash", - "form_121": "08", - "form_122": "09", - "form_123": "10", - "form_124": "11", - "form_125": "12", - "form_126": "13", - "form_127": "14", - "form_128": "15", - "form_129": "16", - "form_130": "17", - "form_131": "18", - "form_132": "19", - "form_133": "Armored", - "form_135": "Normal", - "form_136": "Red Striped", - "form_137": "Blue Striped", - "form_138": "Standard", - "form_139": "Zen", - "form_140": "Incarnate", - "form_141": "Therian", - "form_142": "Incarnate", - "form_143": "Therian", - "form_144": "Incarnate", - "form_145": "Therian", - "form_146": "Normal", - "form_147": "Black", - "form_148": "White", - "form_149": "Ordinary", - "form_150": "Resolute", - "form_151": "Aria", - "form_152": "Pirouette", - "form_153": "Shadow", - "form_154": "Purified", - "form_155": "Shadow", - "form_156": "Purified", - "form_157": "Normal", - "form_158": "Shadow", - "form_159": "Purified", - "form_160": "Normal", - "form_161": "Shadow", - "form_162": "Purified", - "form_163": "Normal", - "form_164": "Shadow", - "form_165": "Purified", - "form_166": "Normal", - "form_167": "Shadow", - "form_168": "Purified", - "form_169": "Normal", - "form_170": "Shadow", - "form_171": "Purified", - "form_172": "Normal", - "form_173": "Shadow", - "form_174": "Purified", - "form_175": "Normal", - "form_176": "Shadow", - "form_177": "Purified", - "form_178": "Normal", - "form_179": "Shadow", - "form_180": "Purified", - "form_181": "Normal", - "form_182": "Shadow", - "form_183": "Purified", - "form_184": "Normal", - "form_185": "Shadow", - "form_186": "Purified", - "form_187": "Normal", - "form_188": "Shadow", - "form_189": "Purified", - "form_190": "Normal", - "form_191": "Shadow", - "form_192": "Purified", - "form_193": "Normal", - "form_194": "Shadow", - "form_195": "Purified", - "form_196": "Normal", - "form_197": "Shadow", - "form_198": "Purified", - "form_199": "Normal", - "form_200": "Shadow", - "form_201": "Purified", - "form_202": "Normal", - "form_203": "Shadow", - "form_204": "Purified", - "form_205": "Normal", - "form_206": "Shadow", - "form_207": "Purified", - "form_208": "Normal", - "form_209": "Shadow", - "form_210": "Purified", - "form_211": "Normal", - "form_212": "Shadow", - "form_213": "Purified", - "form_214": "Normal", - "form_215": "Shadow", - "form_216": "Purified", - "form_217": "Normal", - "form_218": "Shadow", - "form_219": "Purified", - "form_220": "Shadow", - "form_221": "Purified", - "form_222": "Shadow", - "form_223": "Purified", - "form_224": "Normal", - "form_225": "Shadow", - "form_226": "Purified", - "form_227": "Shadow", - "form_228": "Purified", - "form_229": "Normal", - "form_230": "Shadow", - "form_231": "Purified", - "form_232": "Normal", - "form_233": "Shadow", - "form_234": "Purified", - "form_235": "Normal", - "form_236": "Shadow", - "form_237": "Purified", - "form_238": "Normal", - "form_239": "Shadow", - "form_240": "Purified", - "form_241": "Normal", - "form_242": "Shadow", - "form_243": "Purified", - "form_244": "Normal", - "form_245": "Shadow", - "form_246": "Purified", - "form_247": "Normal", - "form_248": "Shadow", - "form_249": "Purified", - "form_250": "Normal", - "form_251": "Shadow", - "form_252": "Purified", - "form_253": "Normal", - "form_254": "Shadow", - "form_255": "Purified", - "form_256": "Normal", - "form_257": "Shadow", - "form_258": "Purified", - "form_259": "Normal", - "form_260": "Shadow", - "form_261": "Purified", - "form_262": "Normal", - "form_263": "Shadow", - "form_264": "Purified", - "form_265": "Normal", - "form_266": "Shadow", - "form_267": "Purified", - "form_268": "Normal", - "form_269": "Shadow", - "form_270": "Purified", - "form_271": "Normal", - "form_272": "Shadow", - "form_273": "Purified", - "form_274": "Normal", - "form_275": "Shadow", - "form_276": "Purified", - "form_277": "Normal", - "form_278": "Shadow", - "form_279": "Purified", - "form_280": "Normal", - "form_281": "Shadow", - "form_282": "Purified", - "form_283": "Normal", - "form_284": "Shadow", - "form_285": "Purified", - "form_286": "Normal", - "form_287": "Shadow", - "form_288": "Purified", - "form_289": "Normal", - "form_290": "Shadow", - "form_291": "Purified", - "form_292": "Normal", - "form_293": "Shadow", - "form_294": "Purified", - "form_295": "Normal", - "form_296": "Shadow", - "form_297": "Purified", - "form_298": "Normal", - "form_299": "Shadow", - "form_300": "Purified", - "form_301": "Normal", - "form_302": "Shadow", - "form_303": "Purified", - "form_304": "Normal", - "form_305": "Shadow", - "form_306": "Purified", - "form_307": "Normal", - "form_308": "Shadow", - "form_309": "Purified", - "form_310": "Normal", - "form_311": "Shadow", - "form_312": "Purified", - "form_313": "Normal", - "form_314": "Shadow", - "form_315": "Purified", - "form_316": "Normal", - "form_317": "Shadow", - "form_318": "Purified", - "form_319": "Normal", - "form_320": "Shadow", - "form_321": "Purified", - "form_322": "Normal", - "form_323": "Shadow", - "form_324": "Purified", - "form_585": "Spring", - "form_586": "Summer", - "form_587": "Autumn", - "form_588": "Winter", - "form_589": "Spring", - "form_590": "Summer", - "form_591": "Autumn", - "form_592": "Winter", - "form_593": "Normal", - "form_594": "Shock", - "form_595": "Burn", - "form_596": "Chill", - "form_597": "Douse", - "form_598": "Normal", - "form_599": "Noevolve", - "form_600": "Normal", - "form_601": "Noevolve", - "form_602": "Normal", - "form_603": "Noevolve", - "form_604": "Noevolve", - "form_605": "Noevolve", - "form_606": "Noevolve", - "form_607": "Noevolve", - "form_608": "Noevolve", - "form_609": "Noevolve", - "form_610": "Normal", - "form_611": "Shadow", - "form_612": "Purified", - "form_613": "Normal", - "form_614": "Shadow", - "form_615": "Purified", - "form_616": "Normal", - "form_617": "Shadow", - "form_618": "Purified", - "form_619": "Normal", - "form_620": "Shadow", - "form_621": "Purified", - "form_622": "Normal", - "form_623": "Shadow", - "form_624": "Purified", - "form_625": "Normal", - "form_626": "Shadow", - "form_627": "Purified", - "form_628": "Normal", - "form_629": "Shadow", - "form_630": "Purified", - "form_631": "Normal", - "form_632": "Shadow", - "form_633": "Purified", - "form_634": "Normal", - "form_635": "Shadow", - "form_636": "Purified", - "form_637": "Normal", - "form_638": "Shadow", - "form_639": "Purified", - "form_640": "Normal", - "form_641": "Shadow", - "form_642": "Purified", - "form_643": "Normal", - "form_644": "Shadow", - "form_645": "Purified", - "form_646": "Normal", - "form_647": "Shadow", - "form_648": "Purified", - "form_649": "Normal", - "form_650": "Shadow", - "form_651": "Purified", - "form_652": "Normal", - "form_653": "Shadow", - "form_654": "Purified", - "form_655": "Normal", - "form_656": "Shadow", - "form_657": "Purified", - "form_658": "Normal", - "form_659": "Shadow", - "form_660": "Purified", - "form_661": "Normal", - "form_662": "Shadow", - "form_663": "Purified", - "form_664": "Normal", - "form_665": "Shadow", - "form_666": "Purified", - "form_667": "Normal", - "form_668": "Shadow", - "form_669": "Purified", - "form_670": "Normal", - "form_671": "Shadow", - "form_672": "Purified", - "form_673": "Shadow", - "form_674": "Purified", - "form_675": "Shadow", - "form_676": "Purified", - "form_677": "Normal", - "form_678": "Shadow", - "form_679": "Purified", - "form_680": "Normal", - "form_681": "Shadow", - "form_682": "Purified", - "form_683": "Normal", - "form_684": "Shadow", - "form_685": "Purified", - "form_686": "Shadow", - "form_687": "Purified", - "form_688": "Normal", - "form_689": "Shadow", - "form_690": "Purified", - "form_691": "Normal", - "form_692": "Shadow", - "form_693": "Purified", - "form_694": "Normal", - "form_695": "Shadow", - "form_696": "Purified", - "form_697": "Normal", - "form_698": "Shadow", - "form_699": "Purified", - "form_700": "Normal", - "form_701": "Shadow", - "form_702": "Purified", - "form_703": "Normal", - "form_704": "Shadow", - "form_705": "Purified", - "form_706": "Normal", - "form_707": "Shadow", - "form_708": "Purified", - "form_709": "Shadow", - "form_710": "Purified", - "form_711": "Shadow", - "form_712": "Purified", - "form_713": "Normal", - "form_714": "Shadow", - "form_715": "Purified", - "form_716": "Normal", - "form_717": "Shadow", - "form_718": "Purified", - "form_719": "Normal", - "form_720": "Shadow", - "form_721": "Purified", - "form_722": "Normal", - "form_723": "Shadow", - "form_724": "Purified", - "form_725": "Shadow", - "form_726": "Purified", - "form_727": "Shadow", - "form_728": "Purified", - "form_729": "Normal", - "form_730": "Shadow", - "form_731": "Purified", - "form_732": "Shadow", - "form_733": "Purified", - "form_734": "Normal", - "form_735": "Shadow", - "form_736": "Purified", - "form_737": "Normal", - "form_738": "Shadow", - "form_739": "Purified", - "form_740": "Normal", - "form_741": "Shadow", - "form_742": "Purified", - "form_743": "Normal", - "form_744": "Shadow", - "form_745": "Purified", - "form_746": "Normal", - "form_747": "Shadow", - "form_748": "Purified", - "form_749": "Normal", - "form_750": "Shadow", - "form_751": "Purified", - "form_752": "Normal", - "form_753": "Shadow", - "form_754": "Purified", - "form_755": "Normal", - "form_756": "Shadow", - "form_757": "Purified", - "form_758": "Normal", - "form_759": "Shadow", - "form_760": "Purified", - "form_761": "Normal", - "form_762": "Shadow", - "form_763": "Purified", - "form_764": "Normal", - "form_765": "Shadow", - "form_766": "Purified", - "form_767": "Normal", - "form_768": "Shadow", - "form_769": "Purified", - "form_770": "Normal", - "form_771": "Shadow", - "form_772": "Purified", - "form_773": "Normal", - "form_774": "Shadow", - "form_775": "Purified", - "form_776": "Normal", - "form_777": "Shadow", - "form_778": "Purified", - "form_779": "Normal", - "form_780": "Shadow", - "form_781": "Purified", - "form_782": "Normal", - "form_783": "Shadow", - "form_784": "Purified", - "form_785": "Normal", - "form_786": "Shadow", - "form_787": "Purified", - "form_788": "Normal", - "form_789": "Shadow", - "form_790": "Purified", - "form_791": "Normal", - "form_792": "Shadow", - "form_793": "Purified", - "form_794": "Normal", - "form_795": "Shadow", - "form_796": "Purified", - "form_797": "Normal", - "form_798": "Shadow", - "form_799": "Purified", - "form_800": "Normal", - "form_801": "Shadow", - "form_802": "Purified", - "form_803": "Normal", - "form_804": "Shadow", - "form_805": "Purified", - "form_806": "Normal", - "form_807": "Shadow", - "form_808": "Purified", - "form_809": "Normal", - "form_810": "Shadow", - "form_811": "Purified", - "form_812": "Normal", - "form_813": "Shadow", - "form_814": "Purified", - "form_815": "Normal", - "form_816": "Shadow", - "form_817": "Purified", - "form_818": "Normal", - "form_819": "Shadow", - "form_820": "Purified", - "form_821": "Normal", - "form_822": "Shadow", - "form_823": "Purified", - "form_824": "Normal", - "form_825": "Shadow", - "form_826": "Purified", - "form_827": "Normal", - "form_828": "Shadow", - "form_829": "Purified", - "form_830": "Normal", - "form_831": "Shadow", - "form_832": "Purified", - "form_833": "Normal", - "form_834": "Shadow", - "form_835": "Purified", - "form_836": "Normal", - "form_837": "Shadow", - "form_838": "Purified", - "form_839": "Normal", - "form_840": "Shadow", - "form_841": "Purified", - "form_842": "Shadow", - "form_843": "Purified", - "form_844": "Shadow", - "form_845": "Purified", - "form_846": "Normal", - "form_847": "Shadow", - "form_848": "Purified", - "form_849": "Normal", - "form_850": "Shadow", - "form_851": "Purified", - "form_852": "Normal", - "form_853": "Shadow", - "form_854": "Purified", - "form_855": "Normal", - "form_856": "Shadow", - "form_857": "Purified", - "form_858": "Normal", - "form_859": "Shadow", - "form_860": "Purified", - "form_861": "Normal", - "form_862": "Shadow", - "form_863": "Purified", - "form_864": "Normal", - "form_865": "Shadow", - "form_866": "Purified", - "form_867": "Normal", - "form_868": "Shadow", - "form_869": "Purified", - "form_870": "Normal", - "form_871": "Shadow", - "form_872": "Purified", - "form_873": "Normal", - "form_874": "Shadow", - "form_875": "Purified", - "form_876": "Normal", - "form_877": "Shadow", - "form_878": "Purified", - "form_879": "Normal", - "form_880": "Shadow", - "form_881": "Purified", - "form_882": "Shadow", - "form_883": "Purified", - "form_884": "Shadow", - "form_885": "Purified", - "form_886": "Shadow", - "form_887": "Purified", - "form_888": "Normal", - "form_889": "Shadow", - "form_890": "Purified", - "form_891": "Normal", - "form_892": "Shadow", - "form_893": "Purified", - "form_894": "Fall 2019", - "form_895": "Fall 2019", - "form_896": "Fall 2019", - "form_897": "Fall 2019", - "form_898": "Normal", - "form_899": "Shadow", - "form_900": "Purified", - "form_901": "Vs 2019", - "form_902": "Normal", - "form_903": "Shadow", - "form_904": "Purified", - "form_905": "Normal", - "form_906": "Shadow", - "form_907": "Purified", - "form_908": "Normal", - "form_909": "Shadow", - "form_910": "Purified", - "form_911": "Normal", - "form_912": "Shadow", - "form_913": "Purified", - "form_914": "Normal", - "form_915": "Shadow", - "form_916": "Purified", - "form_917": "Normal", - "form_918": "Shadow", - "form_919": "Purified", - "form_920": "Normal", - "form_921": "Shadow", - "form_922": "Purified", - "form_923": "Normal", - "form_924": "Shadow", - "form_925": "Purified", - "form_926": "Normal", - "form_927": "Shadow", - "form_928": "Purified", - "form_929": "Normal", - "form_930": "Shadow", - "form_931": "Purified", - "form_932": "Normal", - "form_933": "Shadow", - "form_934": "Purified", - "form_935": "Normal", - "form_936": "Shadow", - "form_937": "Purified", - "form_938": "Normal", - "form_939": "Shadow", - "form_940": "Purified", - "form_941": "Normal", - "form_942": "Shadow", - "form_943": "Purified", - "form_944": "Galarian", - "form_945": "Normal", - "form_946": "Galarian", - "form_947": "Normal", - "form_948": "Galarian", - "form_949": "Copy 2019", - "form_950": "Copy 2019", - "form_951": "Copy 2019", - "form_952": "Copy 2019", - "form_953": "Normal", - "form_954": "Shadow", - "form_955": "Purified", - "form_956": "Normal", - "form_957": "Shadow", - "form_958": "Purified", - "form_959": "Normal", - "form_960": "Shadow", - "form_961": "Purified", - "form_962": "Normal", - "form_963": "Shadow", - "form_964": "Purified", - "form_965": "Normal", - "form_966": "Shadow", - "form_967": "Purified", - "form_968": "Normal", - "form_969": "Shadow", - "form_970": "Purified", - "form_971": "Normal", - "form_972": "Shadow", - "form_973": "Purified", - "form_974": "Normal", - "form_975": "Shadow", - "form_976": "Purified", - "form_977": "Shadow", - "form_978": "Purified", - "form_979": "Shadow", - "form_980": "Purified", - "form_981": "Normal", - "form_982": "Shadow", - "form_983": "Purified", - "form_984": "Normal", - "form_985": "Shadow", - "form_986": "Purified", - "form_987": "Normal", - "form_988": "Shadow", - "form_989": "Purified", - "form_990": "Normal", - "form_991": "Shadow", - "form_992": "Purified", - "form_993": "Normal", - "form_994": "Shadow", - "form_995": "Purified", - "form_996": "Normal", - "form_997": "Shadow", - "form_998": "Purified", - "form_999": "Normal", - "form_1000": "Shadow", - "form_1001": "Purified", - "form_1002": "Normal", - "form_1003": "Shadow", - "form_1004": "Purified", - "form_1005": "Normal", - "form_1006": "Shadow", - "form_1007": "Purified", - "form_1008": "Normal", - "form_1009": "Shadow", - "form_1010": "Purified", - "form_1011": "Normal", - "form_1012": "Shadow", - "form_1013": "Purified", - "form_1014": "Normal", - "form_1015": "Shadow", - "form_1016": "Purified", - "form_1017": "Normal", - "form_1018": "Shadow", - "form_1019": "Purified", - "form_1020": "Normal", - "form_1021": "Shadow", - "form_1022": "Purified", - "form_1023": "Normal", - "form_1024": "Shadow", - "form_1025": "Purified", - "form_1026": "Normal", - "form_1027": "Shadow", - "form_1028": "Purified", - "form_1029": "Normal", - "form_1030": "Shadow", - "form_1031": "Purified", - "form_1032": "Normal", - "form_1033": "Shadow", - "form_1034": "Purified", - "form_1035": "Normal", - "form_1036": "Shadow", - "form_1037": "Purified", - "form_1038": "Normal", - "form_1039": "Shadow", - "form_1040": "Purified", - "form_1041": "Normal", - "form_1042": "Shadow", - "form_1043": "Purified", - "form_1044": "Normal", - "form_1045": "Shadow", - "form_1046": "Purified", - "form_1047": "Normal", - "form_1048": "Shadow", - "form_1049": "Purified", - "form_1050": "Normal", - "form_1051": "Shadow", - "form_1052": "Purified", - "form_1053": "Normal", - "form_1054": "Shadow", - "form_1055": "Purified", - "form_1056": "Normal", - "form_1057": "Shadow", - "form_1058": "Purified", - "form_1059": "Normal", - "form_1060": "Shadow", - "form_1061": "Purified", - "form_1062": "Normal", - "form_1063": "Shadow", - "form_1064": "Purified", - "form_1065": "Normal", - "form_1066": "Shadow", - "form_1067": "Purified", - "form_1068": "Normal", - "form_1069": "Shadow", - "form_1070": "Purified", - "form_1071": "Normal", - "form_1072": "Shadow", - "form_1073": "Purified", - "form_1074": "Normal", - "form_1075": "Shadow", - "form_1076": "Purified", - "form_1077": "Normal", - "form_1078": "Shadow", - "form_1079": "Purified", - "form_1080": "Normal", - "form_1081": "Shadow", - "form_1082": "Purified", - "form_1083": "Normal", - "form_1084": "Shadow", - "form_1085": "Purified", - "form_1086": "Normal", - "form_1087": "Shadow", - "form_1088": "Purified", - "form_1089": "Normal", - "form_1090": "Shadow", - "form_1091": "Purified", - "form_1092": "Normal", - "form_1093": "Shadow", - "form_1094": "Purified", - "form_1095": "Normal", - "form_1096": "Shadow", - "form_1097": "Purified", - "form_1098": "Normal", - "form_1099": "Shadow", - "form_1100": "Purified", - "form_1101": "Normal", - "form_1102": "Shadow", - "form_1103": "Purified", - "form_1104": "Normal", - "form_1105": "Shadow", - "form_1106": "Purified", - "form_1107": "Normal", - "form_1108": "Shadow", - "form_1109": "Purified", - "form_1110": "Normal", - "form_1111": "Shadow", - "form_1112": "Purified", - "form_1113": "Shadow", - "form_1114": "Purified", - "form_1115": "Normal", - "form_1116": "Shadow", - "form_1117": "Purified", - "form_1118": "Normal", - "form_1119": "Shadow", - "form_1120": "Purified", - "form_1121": "Normal", - "form_1122": "Shadow", - "form_1123": "Purified", - "form_1124": "Normal", - "form_1125": "Shadow", - "form_1126": "Purified", - "form_1127": "Normal", - "form_1128": "Shadow", - "form_1129": "Purified", - "form_1130": "Normal", - "form_1131": "Shadow", - "form_1132": "Purified", - "form_1133": "Normal", - "form_1134": "Shadow", - "form_1135": "Purified", - "form_1136": "Normal", - "form_1137": "Shadow", - "form_1138": "Purified", - "form_1139": "Normal", - "form_1140": "Shadow", - "form_1141": "Purified", - "form_1142": "Normal", - "form_1143": "Shadow", - "form_1144": "Purified", - "form_1145": "Normal", - "form_1146": "Shadow", - "form_1147": "Purified", - "form_1148": "Normal", - "form_1149": "Shadow", - "form_1150": "Purified", - "form_1151": "Normal", - "form_1152": "Shadow", - "form_1153": "Purified", - "form_1154": "Normal", - "form_1155": "Shadow", - "form_1156": "Purified", - "form_1157": "Normal", - "form_1158": "Shadow", - "form_1159": "Purified", - "form_1160": "Normal", - "form_1161": "Shadow", - "form_1162": "Purified", - "form_1163": "Normal", - "form_1164": "Shadow", - "form_1165": "Purified", - "form_1166": "Normal", - "form_1167": "Shadow", - "form_1168": "Purified", - "form_1169": "Normal", - "form_1170": "Shadow", - "form_1171": "Purified", - "form_1172": "Normal", - "form_1173": "Shadow", - "form_1174": "Purified", - "form_1175": "Normal", - "form_1176": "Shadow", - "form_1177": "Purified", - "form_1178": "Normal", - "form_1179": "Shadow", - "form_1180": "Purified", - "form_1181": "Normal", - "form_1182": "Shadow", - "form_1183": "Purified", - "form_1184": "Normal", - "form_1185": "Shadow", - "form_1186": "Purified", - "form_1187": "Normal", - "form_1188": "Shadow", - "form_1189": "Purified", - "form_1190": "Normal", - "form_1191": "Shadow", - "form_1192": "Purified", - "form_1193": "Normal", - "form_1194": "Shadow", - "form_1195": "Purified", - "form_1196": "Normal", - "form_1197": "Shadow", - "form_1198": "Purified", - "form_1199": "Normal", - "form_1200": "Shadow", - "form_1201": "Purified", - "form_1202": "Normal", - "form_1203": "Shadow", - "form_1204": "Purified", - "form_1205": "Normal", - "form_1206": "Shadow", - "form_1207": "Purified", - "form_1208": "Normal", - "form_1209": "Shadow", - "form_1210": "Purified", - "form_1211": "Normal", - "form_1212": "Shadow", - "form_1213": "Purified", - "form_1214": "Normal", - "form_1215": "Shadow", - "form_1216": "Purified", - "form_1217": "Normal", - "form_1218": "Shadow", - "form_1219": "Purified", - "form_1220": "Normal", - "form_1221": "Shadow", - "form_1222": "Purified", - "form_1223": "Normal", - "form_1224": "Shadow", - "form_1225": "Purified", - "form_1226": "Normal", - "form_1227": "Shadow", - "form_1228": "Purified", - "form_1229": "Normal", - "form_1230": "Shadow", - "form_1231": "Purified", - "form_1232": "Normal", - "form_1233": "Shadow", - "form_1234": "Purified", - "form_1235": "Normal", - "form_1236": "Shadow", - "form_1237": "Purified", - "form_1238": "Normal", - "form_1239": "Shadow", - "form_1240": "Purified", - "form_1241": "Normal", - "form_1242": "Shadow", - "form_1243": "Purified", - "form_1244": "Normal", - "form_1245": "Shadow", - "form_1246": "Purified", - "form_1247": "Normal", - "form_1248": "Shadow", - "form_1249": "Purified", - "form_1250": "Normal", - "form_1251": "Shadow", - "form_1252": "Purified", - "form_1253": "Normal", - "form_1254": "Shadow", - "form_1255": "Purified", - "form_1256": "Normal", - "form_1257": "Shadow", - "form_1258": "Purified", - "form_1259": "Normal", - "form_1260": "Shadow", - "form_1261": "Purified", - "form_1262": "Normal", - "form_1263": "Shadow", - "form_1264": "Purified", - "form_1265": "Normal", - "form_1266": "Shadow", - "form_1267": "Purified", - "form_1268": "Normal", - "form_1269": "Shadow", - "form_1270": "Purified", - "form_1271": "Normal", - "form_1272": "Shadow", - "form_1273": "Purified", - "form_1274": "Normal", - "form_1275": "Shadow", - "form_1276": "Purified", - "form_1277": "Normal", - "form_1278": "Shadow", - "form_1279": "Purified", - "form_1280": "Normal", - "form_1281": "Shadow", - "form_1282": "Purified", - "form_1283": "Normal", - "form_1284": "Shadow", - "form_1285": "Purified", - "form_1286": "Normal", - "form_1287": "Shadow", - "form_1288": "Purified", - "form_1289": "Normal", - "form_1290": "Shadow", - "form_1291": "Purified", - "form_1292": "Normal", - "form_1293": "Shadow", - "form_1294": "Purified", - "form_1295": "Normal", - "form_1296": "Shadow", - "form_1297": "Purified", - "form_1298": "Normal", - "form_1299": "Shadow", - "form_1300": "Purified", - "form_1301": "Normal", - "form_1302": "Shadow", - "form_1303": "Purified", - "form_1304": "Normal", - "form_1305": "Shadow", - "form_1306": "Purified", - "form_1307": "Normal", - "form_1308": "Shadow", - "form_1309": "Purified", - "form_1310": "Normal", - "form_1311": "Shadow", - "form_1312": "Purified", - "form_1313": "Normal", - "form_1314": "Shadow", - "form_1315": "Purified", - "form_1316": "Normal", - "form_1317": "Shadow", - "form_1318": "Purified", - "form_1319": "Normal", - "form_1320": "Shadow", - "form_1321": "Purified", - "form_1322": "Normal", - "form_1323": "Shadow", - "form_1324": "Purified", - "form_1325": "Normal", - "form_1326": "Shadow", - "form_1327": "Purified", - "form_1328": "Normal", - "form_1329": "Shadow", - "form_1330": "Purified", - "form_1331": "Normal", - "form_1332": "Shadow", - "form_1333": "Purified", - "form_1334": "Normal", - "form_1335": "Shadow", - "form_1336": "Purified", - "form_1337": "Normal", - "form_1338": "Shadow", - "form_1339": "Purified", - "form_1340": "Normal", - "form_1341": "Shadow", - "form_1342": "Purified", - "form_1343": "Normal", - "form_1344": "Shadow", - "form_1345": "Purified", - "form_1346": "Normal", - "form_1347": "Shadow", - "form_1348": "Purified", - "form_1349": "Normal", - "form_1350": "Shadow", - "form_1351": "Purified", - "form_1352": "Normal", - "form_1353": "Shadow", - "form_1354": "Purified", - "form_1355": "Normal", - "form_1356": "Shadow", - "form_1357": "Purified", - "form_1358": "Normal", - "form_1359": "Shadow", - "form_1360": "Purified", - "form_1361": "Normal", - "form_1362": "Shadow", - "form_1363": "Purified", - "form_1364": "Normal", - "form_1365": "Shadow", - "form_1366": "Purified", - "form_1367": "Normal", - "form_1368": "Shadow", - "form_1369": "Purified", - "form_1370": "Normal", - "form_1371": "Shadow", - "form_1372": "Purified", - "form_1373": "Shadow", - "form_1374": "Purified", - "form_1375": "Shadow", - "form_1376": "Purified", - "form_1377": "Shadow", - "form_1378": "Purified", - "form_1379": "Normal", - "form_1380": "Shadow", - "form_1381": "Purified", - "form_1382": "Normal", - "form_1383": "Shadow", - "form_1384": "Purified", - "form_1385": "Normal", - "form_1386": "Shadow", - "form_1387": "Purified", - "form_1388": "Normal", - "form_1389": "Shadow", - "form_1390": "Purified", - "form_1391": "Normal", - "form_1392": "Shadow", - "form_1393": "Purified", - "form_1394": "Normal", - "form_1395": "Shadow", - "form_1396": "Purified", - "form_1397": "Normal", - "form_1398": "Shadow", - "form_1399": "Purified", - "form_1400": "Normal", - "form_1401": "Shadow", - "form_1402": "Purified", - "form_1403": "Normal", - "form_1404": "Shadow", - "form_1405": "Purified", - "form_1406": "Normal", - "form_1407": "Shadow", - "form_1408": "Purified", - "form_1409": "Normal", - "form_1410": "Shadow", - "form_1411": "Purified", - "form_1412": "Normal", - "form_1413": "Shadow", - "form_1414": "Purified", - "form_1415": "Normal", - "form_1416": "Shadow", - "form_1417": "Purified", - "form_1418": "Normal", - "form_1419": "Shadow", - "form_1420": "Purified", - "form_1421": "Normal", - "form_1422": "Shadow", - "form_1423": "Purified", - "form_1424": "Normal", - "form_1425": "Shadow", - "form_1426": "Purified", - "form_1427": "Normal", - "form_1428": "Shadow", - "form_1429": "Purified", - "form_1430": "Normal", - "form_1431": "Shadow", - "form_1432": "Purified", - "form_1433": "Normal", - "form_1434": "Shadow", - "form_1435": "Purified", - "form_1436": "Normal", - "form_1437": "Shadow", - "form_1438": "Purified", - "form_1439": "Normal", - "form_1440": "Shadow", - "form_1441": "Purified", - "form_1442": "Normal", - "form_1443": "Shadow", - "form_1444": "Purified", - "form_1445": "Normal", - "form_1446": "Shadow", - "form_1447": "Purified", - "form_1448": "Normal", - "form_1449": "Shadow", - "form_1450": "Purified", - "form_1451": "Normal", - "form_1452": "Shadow", - "form_1453": "Purified", - "form_1454": "Normal", - "form_1455": "Shadow", - "form_1456": "Purified", - "form_1457": "Normal", - "form_1458": "Shadow", - "form_1459": "Purified", - "form_1460": "Normal", - "form_1461": "Shadow", - "form_1462": "Purified", - "form_1463": "Normal", - "form_1464": "Shadow", - "form_1465": "Purified", - "form_1466": "Normal", - "form_1467": "Shadow", - "form_1468": "Purified", - "form_1469": "Normal", - "form_1470": "Shadow", - "form_1471": "Purified", - "form_1472": "Normal", - "form_1473": "Shadow", - "form_1474": "Purified", - "form_1475": "Normal", - "form_1476": "Shadow", - "form_1477": "Purified", - "form_1478": "Normal", - "form_1479": "Shadow", - "form_1480": "Purified", - "form_1481": "Normal", - "form_1482": "Shadow", - "form_1483": "Purified", - "form_1484": "Normal", - "form_1485": "Shadow", - "form_1486": "Purified", - "form_1487": "Normal", - "form_1488": "Shadow", - "form_1489": "Purified", - "form_1490": "Normal", - "form_1491": "Shadow", - "form_1492": "Purified", - "form_1493": "Normal", - "form_1494": "Shadow", - "form_1495": "Purified", - "form_1496": "Normal", - "form_1497": "Shadow", - "form_1498": "Purified", - "form_1499": "Normal", - "form_1500": "Shadow", - "form_1501": "Purified", - "form_1502": "Normal", - "form_1503": "Shadow", - "form_1504": "Purified", - "form_1505": "Normal", - "form_1506": "Shadow", - "form_1507": "Purified", - "form_1508": "Normal", - "form_1509": "Shadow", - "form_1510": "Purified", - "form_1511": "Normal", - "form_1512": "Shadow", - "form_1513": "Purified", - "form_1514": "Normal", - "form_1515": "Shadow", - "form_1516": "Purified", - "form_1517": "Normal", - "form_1518": "Shadow", - "form_1519": "Purified", - "form_1520": "Normal", - "form_1521": "Shadow", - "form_1522": "Purified", - "form_1523": "Normal", - "form_1524": "Shadow", - "form_1525": "Purified", - "form_1526": "Normal", - "form_1527": "Shadow", - "form_1528": "Purified", - "form_1529": "Normal", - "form_1530": "Shadow", - "form_1531": "Purified", - "form_1532": "Normal", - "form_1533": "Shadow", - "form_1534": "Purified", - "form_1535": "Normal", - "form_1536": "Shadow", - "form_1537": "Purified", - "form_1538": "Normal", - "form_1539": "Shadow", - "form_1540": "Purified", - "form_1541": "Normal", - "form_1542": "Shadow", - "form_1543": "Purified", - "form_1544": "Normal", - "form_1545": "Shadow", - "form_1546": "Purified", - "form_1547": "Normal", - "form_1548": "Shadow", - "form_1549": "Purified", - "form_1550": "Normal", - "form_1551": "Shadow", - "form_1552": "Purified", - "form_1553": "Normal", - "form_1554": "Shadow", - "form_1555": "Purified", - "form_1556": "Normal", - "form_1557": "Shadow", - "form_1558": "Purified", - "form_1559": "Normal", - "form_1560": "Shadow", - "form_1561": "Purified", - "form_1562": "Normal", - "form_1563": "Shadow", - "form_1564": "Purified", - "form_1565": "Normal", - "form_1566": "Shadow", - "form_1567": "Purified", - "form_1568": "Normal", - "form_1569": "Shadow", - "form_1570": "Purified", - "form_1571": "Normal", - "form_1572": "Shadow", - "form_1573": "Purified", - "form_1574": "Normal", - "form_1575": "Shadow", - "form_1576": "Purified", - "form_1577": "Normal", - "form_1578": "Shadow", - "form_1579": "Purified", - "form_1580": "Normal", - "form_1581": "Shadow", - "form_1582": "Purified", - "form_1583": "Normal", - "form_1584": "Shadow", - "form_1585": "Purified", - "form_1586": "Normal", - "form_1587": "Shadow", - "form_1588": "Purified", - "form_1589": "Normal", - "form_1590": "Shadow", - "form_1591": "Purified", - "form_1592": "Normal", - "form_1593": "Shadow", - "form_1594": "Purified", - "form_1595": "Normal", - "form_1596": "Shadow", - "form_1597": "Purified", - "form_1598": "Normal", - "form_1599": "Shadow", - "form_1600": "Purified", - "form_1601": "Normal", - "form_1602": "Shadow", - "form_1603": "Purified", - "form_1604": "Normal", - "form_1605": "Shadow", - "form_1606": "Purified", - "form_1607": "Normal", - "form_1608": "Shadow", - "form_1609": "Purified", - "form_1610": "Normal", - "form_1611": "Shadow", - "form_1612": "Purified", - "form_1613": "Normal", - "form_1614": "Shadow", - "form_1615": "Purified", - "form_1616": "Normal", - "form_1617": "Shadow", - "form_1618": "Purified", - "form_1619": "Normal", - "form_1620": "Shadow", - "form_1621": "Purified", - "form_1622": "Normal", - "form_1623": "Shadow", - "form_1624": "Purified", - "form_1625": "Normal", - "form_1626": "Shadow", - "form_1627": "Purified", - "form_1628": "Normal", - "form_1629": "Shadow", - "form_1630": "Purified", - "form_1631": "Normal", - "form_1632": "Shadow", - "form_1633": "Purified", - "form_1634": "Normal", - "form_1635": "Shadow", - "form_1636": "Purified", - "form_1637": "Normal", - "form_1638": "Shadow", - "form_1639": "Purified", - "form_1640": "Normal", - "form_1641": "Shadow", - "form_1642": "Purified", - "form_1643": "Normal", - "form_1644": "Shadow", - "form_1645": "Purified", - "form_1646": "Normal", - "form_1647": "Shadow", - "form_1648": "Purified", - "form_1649": "Normal", - "form_1650": "Shadow", - "form_1651": "Purified", - "form_1652": "Normal", - "form_1653": "Shadow", - "form_1654": "Purified", - "form_1655": "Normal", - "form_1656": "Shadow", - "form_1657": "Purified", - "form_1658": "Normal", - "form_1659": "Shadow", - "form_1660": "Purified", - "form_1661": "Normal", - "form_1662": "Shadow", - "form_1663": "Purified", - "form_1664": "Normal", - "form_1665": "Shadow", - "form_1666": "Purified", - "form_1667": "Normal", - "form_1668": "Shadow", - "form_1669": "Purified", - "form_1670": "Normal", - "form_1671": "Shadow", - "form_1672": "Purified", - "form_1673": "Normal", - "form_1674": "Shadow", - "form_1675": "Purified", - "form_1676": "Normal", - "form_1677": "Shadow", - "form_1678": "Purified", - "form_1679": "Normal", - "form_1680": "Shadow", - "form_1681": "Purified", - "form_1682": "Normal", - "form_1683": "Shadow", - "form_1684": "Purified", - "form_1685": "Normal", - "form_1686": "Shadow", - "form_1687": "Purified", - "form_1688": "Normal", - "form_1689": "Shadow", - "form_1690": "Purified", - "form_1691": "Normal", - "form_1692": "Shadow", - "form_1693": "Purified", - "form_1694": "Normal", - "form_1695": "Shadow", - "form_1696": "Purified", - "form_1697": "Normal", - "form_1698": "Shadow", - "form_1699": "Purified", - "form_1700": "Normal", - "form_1701": "Shadow", - "form_1702": "Purified", - "form_1703": "Normal", - "form_1704": "Shadow", - "form_1705": "Purified", - "form_1706": "Normal", - "form_1707": "Shadow", - "form_1708": "Purified", - "form_1709": "Normal", - "form_1710": "Shadow", - "form_1711": "Purified", - "form_1712": "Normal", - "form_1713": "Shadow", - "form_1714": "Purified", - "form_1715": "Normal", - "form_1716": "Shadow", - "form_1717": "Purified", - "form_1718": "Normal", - "form_1719": "Shadow", - "form_1720": "Purified", - "form_1721": "Normal", - "form_1722": "Shadow", - "form_1723": "Purified", - "form_1724": "Normal", - "form_1725": "Shadow", - "form_1726": "Purified", - "form_1727": "Normal", - "form_1728": "Shadow", - "form_1729": "Purified", - "form_1730": "Normal", - "form_1731": "Shadow", - "form_1732": "Purified", - "form_1733": "Normal", - "form_1734": "Shadow", - "form_1735": "Purified", - "form_1736": "Normal", - "form_1737": "Shadow", - "form_1738": "Purified", - "form_1739": "Normal", - "form_1740": "Shadow", - "form_1741": "Purified", - "form_1742": "Normal", - "form_1743": "Shadow", - "form_1744": "Purified", - "form_1745": "Normal", - "form_1746": "Shadow", - "form_1747": "Purified", - "form_1748": "Normal", - "form_1749": "Shadow", - "form_1750": "Purified", - "form_1751": "Normal", - "form_1752": "Shadow", - "form_1753": "Purified", - "form_1754": "Normal", - "form_1755": "Shadow", - "form_1756": "Purified", - "form_1757": "Normal", - "form_1758": "Shadow", - "form_1759": "Purified", - "form_1760": "Normal", - "form_1761": "Shadow", - "form_1762": "Purified", - "form_1763": "Normal", - "form_1764": "Shadow", - "form_1765": "Purified", - "form_1766": "Normal", - "form_1767": "Shadow", - "form_1768": "Purified", - "form_1769": "Normal", - "form_1770": "Shadow", - "form_1771": "Purified", - "form_1772": "Normal", - "form_1773": "Shadow", - "form_1774": "Purified", - "form_1775": "Normal", - "form_1776": "Shadow", - "form_1777": "Purified", - "form_1778": "Normal", - "form_1779": "Shadow", - "form_1780": "Purified", - "form_1781": "Normal", - "form_1782": "Shadow", - "form_1783": "Purified", - "form_1784": "Normal", - "form_1785": "Shadow", - "form_1786": "Purified", - "form_1787": "Normal", - "form_1788": "Shadow", - "form_1789": "Purified", - "form_1790": "Normal", - "form_1791": "Shadow", - "form_1792": "Purified", - "form_1793": "Normal", - "form_1794": "Shadow", - "form_1795": "Purified", - "form_1796": "Normal", - "form_1797": "Shadow", - "form_1798": "Purified", - "form_1799": "Normal", - "form_1800": "Shadow", - "form_1801": "Purified", - "form_1802": "Normal", - "form_1803": "Shadow", - "form_1804": "Purified", - "form_1805": "Normal", - "form_1806": "Shadow", - "form_1807": "Purified", - "form_1808": "Normal", - "form_1809": "Shadow", - "form_1810": "Purified", - "form_1811": "Normal", - "form_1812": "Shadow", - "form_1813": "Purified", - "form_1814": "Normal", - "form_1815": "Shadow", - "form_1816": "Purified", - "form_1817": "Normal", - "form_1818": "Shadow", - "form_1819": "Purified", - "form_1820": "Normal", - "form_1821": "Shadow", - "form_1822": "Purified", - "form_1823": "Normal", - "form_1824": "Shadow", - "form_1825": "Purified", - "form_1826": "Normal", - "form_1827": "Shadow", - "form_1828": "Purified", - "form_1829": "Normal", - "form_1830": "Shadow", - "form_1831": "Purified", - "form_1832": "Normal", - "form_1833": "Shadow", - "form_1834": "Purified", - "form_1835": "Normal", - "form_1836": "Shadow", - "form_1837": "Purified", - "form_1838": "Normal", - "form_1839": "Shadow", - "form_1840": "Purified", - "form_1841": "Normal", - "form_1842": "Shadow", - "form_1843": "Purified", - "form_1844": "Normal", - "form_1845": "Shadow", - "form_1846": "Purified", - "form_1847": "Normal", - "form_1848": "Shadow", - "form_1849": "Purified", - "form_1850": "Normal", - "form_1851": "Shadow", - "form_1852": "Purified", - "form_1853": "Normal", - "form_1854": "Shadow", - "form_1855": "Purified", - "form_1856": "Normal", - "form_1857": "Shadow", - "form_1858": "Purified", - "form_1859": "Normal", - "form_1860": "Shadow", - "form_1861": "Purified", - "form_1862": "Normal", - "form_1863": "Shadow", - "form_1864": "Purified", - "form_1865": "Normal", - "form_1866": "Shadow", - "form_1867": "Purified", - "form_1868": "Normal", - "form_1869": "Shadow", - "form_1870": "Purified", - "form_1871": "Normal", - "form_1872": "Shadow", - "form_1873": "Purified", - "form_1874": "Normal", - "form_1875": "Shadow", - "form_1876": "Purified", - "form_1877": "Normal", - "form_1878": "Shadow", - "form_1879": "Purified", - "form_1880": "Normal", - "form_1881": "Shadow", - "form_1882": "Purified", - "form_1883": "Normal", - "form_1884": "Shadow", - "form_1885": "Purified", - "form_1886": "Normal", - "form_1887": "Shadow", - "form_1888": "Purified", - "form_1889": "Normal", - "form_1890": "Shadow", - "form_1891": "Purified", - "form_1892": "Normal", - "form_1893": "Shadow", - "form_1894": "Purified", - "form_1895": "Normal", - "form_1896": "Shadow", - "form_1897": "Purified", - "form_1898": "Normal", - "form_1899": "Shadow", - "form_1900": "Purified", - "form_1901": "Normal", - "form_1902": "Shadow", - "form_1903": "Purified", - "form_1904": "Normal", - "form_1905": "Shadow", - "form_1906": "Purified", - "form_1907": "Normal", - "form_1908": "Shadow", - "form_1909": "Purified", - "form_1910": "Normal", - "form_1911": "Shadow", - "form_1912": "Purified", - "form_1913": "Normal", - "form_1914": "Shadow", - "form_1915": "Purified", - "form_1916": "Normal", - "form_1917": "Shadow", - "form_1918": "Purified", - "form_1919": "Normal", - "form_1920": "Shadow", - "form_1921": "Purified", - "form_1922": "Normal", - "form_1923": "Shadow", - "form_1924": "Purified", - "form_1925": "Normal", - "form_1926": "Shadow", - "form_1927": "Purified", - "form_1928": "Normal", - "form_1929": "Shadow", - "form_1930": "Purified", - "form_1931": "Normal", - "form_1932": "Shadow", - "form_1933": "Purified", - "form_1934": "Normal", - "form_1935": "Shadow", - "form_1936": "Purified", - "form_1937": "Normal", - "form_1938": "Shadow", - "form_1939": "Purified", - "form_1940": "Normal", - "form_1941": "Shadow", - "form_1942": "Purified", - "form_1943": "Normal", - "form_1944": "Shadow", - "form_1945": "Purified", - "form_1946": "Normal", - "form_1947": "Shadow", - "form_1948": "Purified", - "form_1949": "Normal", - "form_1950": "Shadow", - "form_1951": "Purified", - "form_1952": "Normal", - "form_1953": "Shadow", - "form_1954": "Purified", - "form_1955": "Normal", - "form_1956": "Shadow", - "form_1957": "Purified", - "form_1958": "Normal", - "form_1959": "Shadow", - "form_1960": "Purified", - "form_1961": "Normal", - "form_1962": "Shadow", - "form_1963": "Purified", - "form_1964": "Normal", - "form_1965": "Shadow", - "form_1966": "Purified", - "form_1967": "Normal", - "form_1968": "Shadow", - "form_1969": "Purified", - "form_1970": "Normal", - "form_1971": "Shadow", - "form_1972": "Purified", - "form_1973": "Normal", - "form_1974": "Shadow", - "form_1975": "Purified", - "form_1976": "Normal", - "form_1977": "Shadow", - "form_1978": "Purified", - "form_1979": "Normal", - "form_1980": "Shadow", - "form_1981": "Purified", - "form_1982": "Normal", - "form_1983": "Shadow", - "form_1984": "Purified", - "form_1985": "Normal", - "form_1986": "Shadow", - "form_1987": "Purified", - "form_1988": "Normal", - "form_1989": "Shadow", - "form_1990": "Purified", - "form_1991": "Normal", - "form_1992": "Shadow", - "form_1993": "Purified", - "form_1994": "Normal", - "form_1995": "Shadow", - "form_1996": "Purified", - "form_1997": "Normal", - "form_1998": "Shadow", - "form_1999": "Purified", - "form_2000": "Normal", - "form_2001": "Shadow", - "form_2002": "Purified", - "form_2003": "Normal", - "form_2004": "Shadow", - "form_2005": "Purified", - "form_2006": "Normal", - "form_2007": "Shadow", - "form_2008": "Purified", - "form_2009": "Normal", - "form_2010": "Shadow", - "form_2011": "Purified", - "form_2012": "Normal", - "form_2013": "Shadow", - "form_2014": "Purified", - "form_2015": "Normal", - "form_2016": "Shadow", - "form_2017": "Purified", - "form_2018": "Normal", - "form_2019": "Shadow", - "form_2020": "Purified", - "form_2021": "Normal", - "form_2022": "Shadow", - "form_2023": "Purified", - "form_2024": "Normal", - "form_2025": "Shadow", - "form_2026": "Purified", - "form_2027": "Normal", - "form_2028": "Shadow", - "form_2029": "Purified", - "form_2030": "Normal", - "form_2031": "Shadow", - "form_2032": "Purified", - "form_2033": "Normal", - "form_2034": "Shadow", - "form_2035": "Purified", - "form_2036": "Normal", - "form_2037": "Shadow", - "form_2038": "Purified", - "form_2039": "Normal", - "form_2040": "Shadow", - "form_2041": "Purified", - "form_2042": "Normal", - "form_2043": "Shadow", - "form_2044": "Purified", - "form_2045": "Normal", - "form_2046": "Shadow", - "form_2047": "Purified", - "form_2048": "Normal", - "form_2049": "Shadow", - "form_2050": "Purified", - "form_2051": "Normal", - "form_2052": "Shadow", - "form_2053": "Purified", - "form_2054": "Normal", - "form_2055": "Shadow", - "form_2056": "Purified", - "form_2057": "Normal", - "form_2058": "Shadow", - "form_2059": "Purified", - "form_2060": "Normal", - "form_2061": "Shadow", - "form_2062": "Purified", - "form_2063": "Normal", - "form_2064": "Shadow", - "form_2065": "Purified", - "form_2066": "Normal", - "form_2067": "Shadow", - "form_2068": "Purified", - "form_2069": "Normal", - "form_2070": "Shadow", - "form_2071": "Purified", - "form_2072": "Normal", - "form_2073": "Shadow", - "form_2074": "Purified", - "form_2075": "Normal", - "form_2076": "Shadow", - "form_2077": "Purified", - "form_2078": "Normal", - "form_2079": "Shadow", - "form_2080": "Purified", - "form_2081": "Normal", - "form_2082": "Shadow", - "form_2083": "Purified", - "form_2084": "Normal", - "form_2085": "Shadow", - "form_2086": "Purified", - "form_2087": "Normal", - "form_2088": "Shadow", - "form_2089": "Purified", - "form_2090": "Normal", - "form_2091": "Shadow", - "form_2092": "Purified", - "form_2093": "Normal", - "form_2094": "Shadow", - "form_2095": "Purified", - "form_2096": "Normal", - "form_2097": "Shadow", - "form_2098": "Purified", - "form_2099": "Normal", - "form_2100": "Shadow", - "form_2101": "Purified", - "form_2102": "Normal", - "form_2103": "Shadow", - "form_2104": "Purified", - "form_2105": "Normal", - "form_2106": "Shadow", - "form_2107": "Purified", - "form_2108": "Normal", - "form_2109": "Shadow", - "form_2110": "Purified", - "form_2111": "Normal", - "form_2112": "Shadow", - "form_2113": "Purified", - "form_2114": "Normal", - "form_2115": "Shadow", - "form_2116": "Purified", - "form_2117": "Normal", - "form_2118": "Shadow", - "form_2119": "Purified", - "form_2120": "Normal", - "form_2121": "Shadow", - "form_2122": "Purified", - "form_2123": "Normal", - "form_2124": "Shadow", - "form_2125": "Purified", - "form_2126": "Normal", - "form_2127": "Shadow", - "form_2128": "Purified", - "form_2129": "Normal", - "form_2130": "Shadow", - "form_2131": "Purified", - "form_2132": "Normal", - "form_2133": "Shadow", - "form_2134": "Purified", - "form_2135": "Normal", - "form_2136": "Shadow", - "form_2137": "Purified", - "form_2138": "Normal", - "form_2139": "Shadow", - "form_2140": "Purified", - "form_2141": "Normal", - "form_2142": "Shadow", - "form_2143": "Purified", - "form_2144": "Normal", - "form_2145": "Shadow", - "form_2146": "Purified", - "form_2147": "Normal", - "form_2148": "Shadow", - "form_2149": "Purified", - "form_2150": "Normal", - "form_2151": "Shadow", - "form_2152": "Purified", - "form_2153": "Normal", - "form_2154": "Shadow", - "form_2155": "Purified", - "form_2156": "Normal", - "form_2157": "Shadow", - "form_2158": "Purified", - "form_2159": "Normal", - "form_2160": "Shadow", - "form_2161": "Purified", - "form_2162": "Normal", - "form_2163": "Shadow", - "form_2164": "Purified", - "form_2165": "Normal", - "form_2166": "Shadow", - "form_2167": "Purified", - "form_2168": "Normal", - "form_2169": "Shadow", - "form_2170": "Purified", - "form_2171": "Normal", - "form_2172": "Shadow", - "form_2173": "Purified", - "form_2174": "Normal", - "form_2175": "Shadow", - "form_2176": "Purified", - "form_2177": "Normal", - "form_2178": "Shadow", - "form_2179": "Purified", - "form_2180": "Normal", - "form_2181": "Shadow", - "form_2182": "Purified", - "form_2183": "Normal", - "form_2184": "Shadow", - "form_2185": "Purified", - "form_2186": "Normal", - "form_2187": "Shadow", - "form_2188": "Purified", - "form_2189": "Normal", - "form_2190": "Shadow", - "form_2191": "Purified", - "form_2192": "Normal", - "form_2193": "Shadow", - "form_2194": "Purified", - "form_2195": "Normal", - "form_2196": "Shadow", - "form_2197": "Purified", - "form_2198": "Normal", - "form_2199": "Shadow", - "form_2200": "Purified", - "form_2201": "Normal", - "form_2202": "Shadow", - "form_2203": "Purified", - "form_2204": "Normal", - "form_2205": "Shadow", - "form_2206": "Purified", - "form_2207": "Normal", - "form_2208": "Shadow", - "form_2209": "Purified", - "form_2210": "Normal", - "form_2211": "Shadow", - "form_2212": "Purified", - "form_2213": "Normal", - "form_2214": "Shadow", - "form_2215": "Purified", - "form_2216": "Normal", - "form_2217": "Shadow", - "form_2218": "Purified", - "form_2219": "Normal", - "form_2220": "Shadow", - "form_2221": "Purified", - "form_2222": "Normal", - "form_2223": "Shadow", - "form_2224": "Purified", - "form_2225": "Normal", - "form_2226": "Shadow", - "form_2227": "Purified", - "form_2228": "Normal", - "form_2229": "Shadow", - "form_2230": "Purified", - "form_2231": "Normal", - "form_2232": "Shadow", - "form_2233": "Purified", - "form_2234": "Normal", - "form_2235": "Shadow", - "form_2236": "Purified", - "form_2237": "Normal", - "form_2238": "Shadow", - "form_2239": "Purified", - "form_2240": "Normal", - "form_2241": "Shadow", - "form_2242": "Purified", - "form_2243": "Normal", - "form_2244": "Shadow", - "form_2245": "Purified", - "form_2246": "Normal", - "form_2247": "Shadow", - "form_2248": "Purified", - "form_2249": "Normal", - "form_2250": "Shadow", - "form_2251": "Purified", - "form_2252": "Normal", - "form_2253": "Shadow", - "form_2254": "Purified", - "form_2255": "Normal", - "form_2256": "Shadow", - "form_2257": "Purified", - "form_2258": "Normal", - "form_2259": "Shadow", - "form_2260": "Purified", - "form_2261": "Normal", - "form_2262": "Shadow", - "form_2263": "Purified", - "form_2264": "Normal", - "form_2265": "Shadow", - "form_2266": "Purified", - "form_2267": "Normal", - "form_2268": "Shadow", - "form_2269": "Purified", - "form_2270": "Normal", - "form_2271": "Shadow", - "form_2272": "Purified", - "form_2273": "Normal", - "form_2274": "Shadow", - "form_2275": "Purified", - "form_2276": "Normal", - "form_2277": "Shadow", - "form_2278": "Purified", - "form_2279": "Normal", - "form_2280": "Shadow", - "form_2281": "Purified", - "form_2282": "Normal", - "form_2283": "Shadow", - "form_2284": "Purified", - "form_2285": "Normal", - "form_2286": "Shadow", - "form_2287": "Purified", - "form_2288": "Normal", - "form_2289": "Shadow", - "form_2290": "Purified", - "form_2291": "Normal", - "form_2292": "Shadow", - "form_2293": "Purified", - "form_2294": "Normal", - "form_2295": "Shadow", - "form_2296": "Purified", - "form_2297": "Normal", - "form_2298": "Shadow", - "form_2299": "Purified", - "form_2300": "Normal", - "form_2301": "Shadow", - "form_2302": "Purified", - "form_2303": "Normal", - "form_2304": "Shadow", - "form_2305": "Purified", - "form_2306": "Normal", - "form_2307": "Shadow", - "form_2308": "Purified", - "form_2309": "Normal", - "form_2310": "Shadow", - "form_2311": "Purified", - "form_2312": "Normal", - "form_2313": "Shadow", - "form_2314": "Purified", - "form_2315": "Normal", - "form_2316": "Shadow", - "form_2317": "Purified", - "form_2318": "Normal", - "form_2319": "Shadow", - "form_2320": "Purified", - "form_2321": "Normal", - "form_2322": "Shadow", - "form_2323": "Purified", - "form_2324": "Normal", - "form_2325": "Shadow", - "form_2326": "Purified", - "form_2327": "Spring 2020", - "form_2328": "Spring 2020", - "form_2329": "Spring 2020", - "form_2330": "Female", - "form_2331": "Female", - "form_2332": "Costume 2020", - "form_2333": "Costume 2020", - "form_2334": "Costume 2020", - "form_2335": "Galarian", - "form_2336": "Galarian", - "form_2337": "Galarian", - "form_2338": "Galarian", - "form_2339": "Galarian", - "form_2340": "Galarian", - "form_2341": "Galarian", - "form_2342": "Galarian Standard", - "form_2343": "Galarian Zen", - "form_2344": "Galarian", - "form_2345": "Galarian", - "form_2501": "Normal", - "form_2502": "Shadow", - "form_2503": "Purified", - "form_2504": "Normal", - "form_2505": "Shadow", - "form_2506": "Purified", - "form_2510": "Normal", - "form_2511": "Shadow", - "form_2512": "Purified", - "form_2516": "Normal", - "form_2517": "Shadow", - "form_2518": "Purified", - "form_2582": "Galarian", - "form_2583": "Galarian", - "form_2585": "Costume 2020", - "form_2586": "Costume 2020", - "form_2587": "Normal", - "form_2588": "Female", - "form_2589": "Normal", - "form_2590": "Female", - "form_2591": "Ten Percent", - "form_2592": "Fifty Percent", - "form_2593": "Complete", - "form_2594": "Archipelago", - "form_2595": "Continental", - "form_2596": "Elegant", - "form_2597": "Fancy", - "form_2598": "Garden", - "form_2599": "High Plains", - "form_2600": "Icy Snow", - "form_2601": "Jungle", - "form_2602": "Marine", - "form_2603": "Meadow", - "form_2604": "Modern", - "form_2605": "Monsoon", - "form_2606": "Ocean", - "form_2607": "Pokeball", - "form_2608": "Polar", - "form_2609": "River", - "form_2610": "Sandstorm", - "form_2611": "Savanna", - "form_2612": "Sun", - "form_2613": "Tundra", - "form_2614": "Red", - "form_2615": "Yellow", - "form_2616": "Orange", - "form_2617": "Blue", - "form_2618": "White", - "form_2619": "Red", - "form_2620": "Yellow", - "form_2621": "Orange", - "form_2622": "Blue", - "form_2623": "White", - "form_2624": "Red", - "form_2625": "Yellow", - "form_2626": "Orange", - "form_2627": "Blue", - "form_2628": "White", - "form_2629": "Natural", - "form_2630": "Heart", - "form_2631": "Star", - "form_2632": "Diamond", - "form_2633": "Debutante", - "form_2634": "Matron", - "form_2635": "Dandy", - "form_2636": "La Reine", - "form_2637": "Kabuki", - "form_2638": "Pharaoh", - "form_2639": "Shield", - "form_2640": "Blade", - "form_2641": "Small", - "form_2642": "Average", - "form_2643": "Large", - "form_2644": "Super", - "form_2645": "Small", - "form_2646": "Average", - "form_2647": "Large", - "form_2648": "Super", - "form_2649": "Neutral", - "form_2650": "Active", - "form_2651": "Confined", - "form_2652": "Unbound", - "form_2666": "Costume 2020 Deprecated", - "form_2668": "Costume 2020", - "form_2669": "Adventure Hat 2020", - "form_2670": "Winter 2020", - "form_2671": "Winter 2020", - "form_2672": "Winter 2020", - "form_2673": "2020", - "form_2674": "2021", - "costume_1": "Holiday", - "costume_2": "Party", - "costume_3": "Ash", - "costume_4": "Witch", - "costume_5": "Adventure", - "costume_6": "Black Cap", - "costume_7": "Flower", - "costume_8": "Toque", - "costume_9": "Detective", - "costume_10": "One Piece", - "costume_11": "Pokemon Day", - "move_1": "Impactrueno", - "move_2": "Ataque Rápido", - "move_3": "Arañazo", - "move_4": "Ascuas", - "move_5": "Látigo Cepa", - "move_6": "Placaje", - "move_7": "Hoja Afilada", - "move_8": "Derribo", - "move_9": "Pistola Agua", - "move_10": "Mordisco", - "move_11": "Destructor", - "move_12": "Doble Bofetón", - "move_13": "Constricción", - "move_14": "Hiperrayo", - "move_15": "Lengüetazo", - "move_16": "Pulso Umbrío", - "move_17": "Polución", - "move_18": "Residuos", - "move_19": "Garra Metal", - "move_20": "Agarre", - "move_21": "Rueda Fuego", - "move_22": "Megacuerno", - "move_23": "Ataque Ala", - "move_24": "Lanzallamas", - "move_25": "Golpe Bajo", - "move_26": "Excavar", - "move_27": "Patada Baja", - "move_28": "Tajo Cruzado", - "move_29": "Psicocorte", - "move_30": "Psicorrayo", - "move_31": "Terremoto", - "move_32": "Roca Afilada", - "move_33": "Puño Hielo", - "move_34": "Arrumaco", - "move_35": "Chispazo", - "move_36": "Foco Resplandor", - "move_37": "Picotazo", - "move_38": "Pico Taladro", - "move_39": "Rayo Hielo", - "move_40": "Ventisca", - "move_41": "Tajo Aéreo", - "move_42": "Onda Ígnea", - "move_43": "Doble Ataque", - "move_44": "Puya Nociva", - "move_45": "Golpe Aéreo", - "move_46": "Taladradora", - "move_47": "Tormenta Floral", - "move_48": "Megaagotar", - "move_49": "Zumbido", - "move_50": "Colmillo Veneno", - "move_51": "Tajo Umbrío", - "move_52": "Cuchillada", - "move_53": "Rayo Burbuja", - "move_54": "Sumisión", - "move_55": "Golpe Kárate", - "move_56": "Puntapié", - "move_57": "Acua Jet", - "move_58": "Acua Cola", - "move_59": "Bomba Germen", - "move_60": "Psicocarga", - "move_61": "Lanzarrocas", - "move_62": "Poder Pasado", - "move_63": "Tumba Rocas", - "move_64": "Avalancha", - "move_65": "Joya de Luz", - "move_66": "Sombra Vil", - "move_67": "Puño Sombra", - "move_68": "Garra Umbría", - "move_69": "Viento Aciago", - "move_70": "Bola Sombra", - "move_71": "Puño Bala", - "move_72": "Bomba Imán", - "move_73": "Ala de Acero", - "move_74": "Cabeza de Hierro", - "move_75": "Carga Parábola", - "move_76": "Chispa", - "move_77": "Puño Trueno", - "move_78": "Trueno", - "move_79": "Rayo", - "move_80": "Ciclón", - "move_81": "Dragoaliento", - "move_82": "Pulso Dragón", - "move_83": "Garra Dragón", - "move_84": "Voz Cautivadora", - "move_85": "Beso Drenaje", - "move_86": "Brillo Mágico", - "move_87": "Fuerza Lunar", - "move_88": "Carantoña", - "move_89": "Veneno X", - "move_90": "Bomba Lodo", - "move_91": "Onda Tóxica", - "move_92": "Lanzamugre", - "move_93": "Disparo Lodo", - "move_94": "Hueso Palo", - "move_95": "Terratemblor", - "move_96": "Bomba Fango", - "move_97": "Corte Furia", - "move_98": "Picadura", - "move_99": "Doble Rayo", - "move_100": "Tijera X", - "move_101": "Nitrocarga", - "move_102": "Pirotecnia", - "move_103": "Llamarada", - "move_104": "Salmuera", - "move_105": "Hidropulso", - "move_106": "Escaldar", - "move_107": "Hidrobomba", - "move_108": "Psíquico", - "move_109": "Onda Mental", - "move_110": "Canto Helado", - "move_111": "Viento Hielo", - "move_112": "Vaho Gélido", - "move_113": "Absorber", - "move_114": "Gigadrenado", - "move_115": "Puño Fuego", - "move_116": "Rayo Solar", - "move_117": "Hoja Aguda", - "move_118": "Latigazo", - "move_119": "Salpicadura", - "move_120": "Ácido", - "move_121": "Aire Afilado", - "move_122": "Vendaval", - "move_123": "Demolición", - "move_124": "Corte", - "move_125": "Rapidez", - "move_126": "Cornada", - "move_127": "Pisotón", - "move_128": "Golpe Cabeza", - "move_129": "Hipercolmillo", - "move_130": "Atizar", - "move_131": "Golpe Cuerpo", - "move_132": "Descanso", - "move_133": "Combate", - "move_134": "Escaldar", - "move_135": "Hidrobomba", - "move_136": "Constricción", - "move_137": "Constricción", - "move_200": "Corte Furia", - "move_201": "Picadura", - "move_202": "Mordisco", - "move_203": "Golpe Bajo", - "move_204": "Dragoaliento", - "move_205": "Impactrueno", - "move_206": "Chispa", - "move_207": "Patada Baja", - "move_208": "Golpe Kárate", - "move_209": "Ascuas", - "move_210": "Ataque Ala", - "move_211": "Picotazo", - "move_212": "Lengüetazo", - "move_213": "Garra Umbría", - "move_214": "Látigo Cepa", - "move_215": "Hoja Afilada", - "move_216": "Disparo Lodo", - "move_217": "Canto Helado", - "move_218": "Vaho Gélido", - "move_219": "Ataque Rápido", - "move_220": "Arañazo", - "move_221": "Placaje", - "move_222": "Destructor", - "move_223": "Corte", - "move_224": "Puya Nociva", - "move_225": "Ácido", - "move_226": "Psicocorte", - "move_227": "Lanzarrocas", - "move_228": "Garra Metal", - "move_229": "Puño Bala", - "move_230": "Pistola Agua", - "move_231": "Salpicadura", - "move_232": "Pistola Agua", - "move_233": "Bofetón Lodo", - "move_234": "Cabezazo Zen", - "move_235": "Confusión", - "move_236": "Picotazo Veneno", - "move_237": "Burbuja", - "move_238": "Finta", - "move_239": "Ala de Acero", - "move_240": "Colmillo Ígneo", - "move_241": "Golpe Roca", - "move_242": "Transformación", - "move_243": "Contraataque", - "move_244": "Nieve Polvo", - "move_245": "A Bocajarro", - "move_246": "Puño Dinámico", - "move_247": "Onda Certera", - "move_248": "Rayo Aurora", - "move_249": "Rayo Carga", - "move_250": "Voltiocambio", - "move_251": "Voltio Cruel", - "move_252": "Electrocañón", - "move_253": "Cola Dragón", - "move_254": "Alud", - "move_255": "Tajo Aéreo", - "move_256": "Pájaro Osado", - "move_257": "Ataque Aéreo", - "move_258": "Bucle Arena", - "move_259": "Pedrada", - "move_260": "Acoso", - "move_261": "Estoicismo", - "move_262": "Viento Plata", - "move_263": "Impresionar", - "move_264": "Infortunio", - "move_265": "Tinieblas", - "move_266": "Cola Férrea", - "move_267": "Giro Bola", - "move_268": "Cuerpo Pesado", - "move_269": "Giro Fuego", - "move_270": "Sofoco", - "move_271": "Semilladora", - "move_272": "Hierba Lazo", - "move_273": "Energibola", - "move_274": "Paranormal", - "move_275": "Premonición", - "move_276": "Manto Espejo", - "move_277": "Enfado", - "move_278": "Alarido", - "move_279": "Triturar", - "move_280": "Juego Sucio", - "move_281": "Poder Oculto", - "move_287": "Bostezo", - "move_282": "Derribo", - "move_285": "Cometa Draco", - "move_283": "Cascada", - "move_284": "Surf", - "move_288": "Psicoataque", - "move_286": "Deseo Oculto", - "move_290": "Filo del Abismo", - "move_289": "Pulso Primigenio", - "move_291": "Presente", - "move_292": "Meteorobola", - "move_293": "Meteorobola", - "move_294": "Meteorobola", - "move_295": "Meteorobola", - "move_296": "Planta Feroz", - "move_298": "Anillo Ígneo", - "move_297": "Antiaéreo", - "move_299": "Hidrocañón", - "move_300": "Última Baza", - "move_301": "Puño Meteoro", - "move_302": "Cabezazo", - "move_303": "Bomba Ácida", - "move_304": "Tierra Viva", - "move_305": "Martillazo", - "move_306": "Plancha", - "move_307": "Garra Brutal", - "move_308": "Pulpocañón", - "move_309": "Disparo Espejo", - "move_310": "Fuerza Bruta", - "move_311": "Aguijón Letal", - "move_312": "Ciclón de Hojas", - "move_313": "Chupavidas", - "move_314": "Puño Drenaje", - "move_315": "Hueso Sombrío", - "move_316": "Agua Lodosa", - "move_317": "Patada Ígnea", - "move_318": "Concha Filo", - "move_319": "Puño Incremento", - "move_320": "Encanto", - "move_321": "Gigaimpacto", - "move_322": "Frustración", - "move_323": "Retribución", - "move_324": "Sincrorruido", - "move_325": "Fijar Blanco", - "move_326": "Colmillo Rayo", - "move_327": "Colmillo Hielo", - "move_328": "Perforador", - "move_329": "Fisura", - "move_330": "Espada Santa", - "move_331": "Plancha Voladora", - "move_332": "Esfera Aural", - "move_333": "Vendetta", - "move_334": "Romperrocas", - "move_335": "Aerochorro", - "move_336": "Tecno Shock", - "move_337": "Tecno Shock", - "move_338": "Tecno Shock", - "move_339": "Tecno Shock", - "move_340": "Tecno Shock", - "move_341": "Vuelo" -} diff --git a/static/locale/fr.json b/static/locale/fr.json deleted file mode 100644 index f52bb763..00000000 --- a/static/locale/fr.json +++ /dev/null @@ -1,3628 +0,0 @@ -{ - "UNKNOWN_POKESTOP": "Unknown Pokestop", - "EMBED_DIRECTIONS": "DIRECTIONS", - "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{0} Subscriptions are not enabled in the config.", - "MSG_NOT_MODERATOR_OR_HIGHER": "{0} is not a moderator or higher thus you may not see other's subscription settings.", - "MSG_INVALID_USER_MENTION": "{0} Failed to retrieve user with mention tag {1}.", - "MSG_USER_NOT_SUBSCRIBED": "{0} is not currently subscribed to any Pokemon or Raid notifications.", - "TIME_YEARS": "years", - "TIME_DAYS": "days", - "TIME_HOURS": "hours", - "TIME_MINUTES": "minutes", - "TIME_SECONDS": "seconds", - "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", - "NOTIFY_ENABLE_DISABLE": "{0} has **{1}d** Pokemon, Raid, Quest, and Invasion notifications.", - "NOTIFY_INVALID_COORDINATES": "{0} Unable not parse {1} as valid coordinates.", - "NOTIFY_DISTANCE_SET": "{0} Notifications only within a {1} meters radius of location {2},{3} will be sent.", - "NOTIFY_PHONE_NUMBER_SET": "{0} Text message notifications for ultra rare Pokemon will be sent to {1}.", - "NOTIFY_INVALID_IV_VALUES": "{0} {1} is not a valid value. (Example: `0-15-6`)", - "NOTIFY_INVALID_ATTACK_VALUE": "{0} {1} is not a valid attack value. Must be between `0-15`.", - "NOTIFY_INVALID_DEFENSE_VALUE": "{0} {1} is not a valid defense value. Must be between `0-15`.", - "NOTIFY_INVALID_STAMINA_VALUE": "{0} {1} is not a valid stamina value. Must be between `0-15`.", - "NOTIFY_INVALID_IV_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_INVALID_GENDER": "{0} {1} is not a valid gender. (i.e. `m`, `f`, `*`)", - "NOTIFY_INVALID_LEVEL": "{0} {1} must be within the range of `0-35`.", - "NOTIFY_INVALID_MINIMUM_IV": "{0} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", - "NOTIFY_INVALID_MINIMUM_LEVEL": "{0} Failed to parse minimum level provided '{1}'.", - "NOTIFY_INVALID_MAXIMUM_LEVEL": "{0} Failed to parse maximum level provided '{1}'.", - "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{0} {1} are not valid Pokemon names or IDs.", - "NOTIFY_INVALID_POKEMON_ID_OR_NAME": "{0} {1} are not valid Pokemon name or ID.", - "NOTIFY_INVALID_POKEMON_ID": "{0} {1} is not a valid Pokemon id.", - "NOTIFY_COMMON_TYPE_POKEMON": "{0} {1} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {2}% or higher.", - "NOTIFY_INVALID_POKEMON_SPECIFIED": "{0} Unable to recognize any of the Pokemon you specified.", - "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{0} is not subscribed to any Pokemon notifications.", - "NOTIFY_INVALID_PVP_LEAGUE": "{0} {1} is not a valid PvP league. (Great or Ultra)", - "NOTIFY_INVALID_PVP_RANK_RANGE": "{0} {1} must be within the range of `0-4096`.", - "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokemon notifications.", - "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} Unable to remove {1} Pokemon subscriptions.", - "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Pokemon notifications.", - "NOTIFY_INVALID_CITY_ROLE": "{0} {1} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", - "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} has unsubscribed from **all** raid boss notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} has unsubscribed from **all** quest notifications.", - "NOTIFY_INVALID_INVASION_GENDER": "{0} Please specify a gender. i.e. `.invmenot fire-m` or `.invmenot water-f ontario or `.invmenot giovanni`", - "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Team Rocket invasion notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokestop lure notifications.", - "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{0} added gym subscription `{1}` to your list of gyms to receive raid notifications from.", - "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{0} already subscribed to gym notifications from {1}.", - "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{0} Removed gym subscription `{1}` from your list of gyms to receive notifications from.", - "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} has unsubscribed from **all** gym notifications.", - "NOTIFY_INVALID_ICON_STYLE": "{0} invalid icon style, type `{1}icons` to see a list of valid options.", - "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Raid subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Quest subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Team Rocket Invasion subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Gym subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Lure subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_ICON_STYLE_CHANGE": "{0} Icon style changed to **{1}**.", - "NOTIFY_IMPORT_UPLOAD_FILE": "{0} Please upload your subscriptions.json file to import now within 3 minutes...", - "NOTIFY_IMPORT_MALFORMED_DATA": "{0} Malformed subscription data, unable to import.", - "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{0} Unable to get uploaded attachment.", - "NOTIFY_IMPORT_SUCCESS": "{0} subscriptions were imported successfully.", - "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{0} does not have any subscriptions to export.", - "NOTIFY_EXPORT_SUCCESS": "{0} Download your subscription settings here.", - "NOTIFY_SETTINGS_EMBED_TITLE": "**{0} Notification Settings (Page: {1}/{2}):**", - "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{0}**", - "NOTIFY_SETTINGS_EMBED_CITIES": "Pokemon Feed Zones: ```{0}```", - "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", - "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{0} meters (Location: {1})", - "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{0}**", - "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {0}% ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {0} ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({0}/{1} used)", - "NOTIFY_FROM": "{0} (From: {1})", - "ALL_AREAS": "All Areas", - "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", - "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{0}feedme cityname` to assign yourself to that city role.*", - "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{0} {1} is not a valid city name, type `{2}cities` to see a list of available cities.", - "FEEDS_INVALID_CITY_NAME": "{0} {1} is not a valid city name.", - "FEEDS_ASSIGNED_ALL_ROLES": "{0} was assigned all city feed roles.", - "FEEDS_UNASSIGNED_ALL_ROLES": "{0} was unassigned all city feed roles.", - "FEEDS_ASSIGNED_ROLES": "{0} has joined role(s) **{1}**.", - "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{0} is already assigned to role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES": "{0} has been removed from role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{0} is not assigned to role(s) **{1}**.", - "FEEDS_PLEASE_WAIT": "{0} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", - "CHANNEL_MESSAGES_DELETED": "{0} Channel {1} messages have been deleted.", - "GYM_NO_POKESTOPS_CONVERTED": "{0} No Pokestops have been converted to Gyms.", - "GYM_NO_POKESTOPS_UPDATED": "{0} No Pokestops have been updated.", - "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", - "GYM_UNKNOWN_NAME": "Unknown Gym Name", - "GYM_UNKNOWN_IMAGE": "Unknown Image Url", - "GYM_POKESTOPS_CONVERTED": "{0} {1} Pokestops updated to Gyms.", - "GYM_POKESTOPS_DELETED": "{0} {1} Pokestops deleted.", - "GYM_NAME": "- **{0}**", - "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({1})] [[Gym Image]({0})]", - "SHINY_STATS_INVALID_CHANNEL": "{0} Shiny stats channel does not exist.", - "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {0}**]", - "SHINY_STATS_NEWLINE": "----------------------------------------------", - "SHINY_STATS_MESSAGE": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours with a **1/{4}** ratio.", - "SHINY_STATS_TOTAL_MESSAGE": "Found **{0}** total shinies out of **{1}** possiblities.", - "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{0}** total shinies out of **{1}** possiblities with a **1/{2}** ratio in total.", - "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", - "ERROR_NESTS_DISABLED": "{0} Nests disabled.", - "ERROR_NESTS_LIST": "{0} Unable to retrieve nest list.", - "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {0} of {1} total members.", - "ERROR_PARSING_USER_ID": "{0} Unable to recognize user id {1}.", - "DONATE_MESSAGE": "{0} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", - "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", - "SUBSCRIPTIONS_FROM_CITY": " from city **{0}**", - "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** lure notifications{2}.", - "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** lure notifications{2}.", - "ERROR_NO_LURE_SUBSCRIPTIONS": "{0} is not subscribed to any lure notifications{1}.", - "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** raid notifications{2}.", - "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** raid notifications{2}.", - "ERROR_NO_RAID_SUBSCRIPTIONS": "{0} is not subscribed to any raid notifications{1}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** quest notifications{2}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** quest notifications{2}.", - "ERROR_NO_QUEST_SUBSCRIPTIONS": "{0} is not subscribed to any quest notifications{1}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** Team Rocket invasion reward notifications{2}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Team Rocket invasion reward notifications{2}.", - "ERROR_NO_INVASION_SUBSCRIPTIONS": "{0} is not subscribed to any Team Rocket invasion notifications{1}.", - "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** {2} League PvP notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your {2} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} has unsubscribed from **all** {1} League PvP Pokemon notifications.", - "EVENT_POKEMON_SET": "{0} event Pokemon set to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_ADD": "{0} event Pokemon added to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_REMOVE": "{0} event Pokemon `{1}` removed.", - "DIRECT_MESSAGE_NOT_SUPPORTED": "{0} Direct message is not supported for this command.", - "PVP_GREAT_LEAGUE": "Great League", - "PVP_ULTRA_LEAGUE": "Ultra League", - "PVP_RANK": "Rank", - "PVP_CP": "CP", - "weather_0": "None", - "weather_1": "Clear", - "weather_2": "Rainy", - "weather_3": "PartlyCloudy", - "weather_4": "Cloudy", - "weather_5": "Windy", - "weather_6": "Snow", - "weather_7": "Fog", - "quest_1": "{0} time(s) First Catch OTD", - "quest_2": "{0} time(s) First Pokestop OTD", - "quest_3": "Multi Part Quest", - "quest_4": "Catch {0} Pokemon", - "quest_5": "Spin {0} Pokestop(s)", - "quest_6": "Hatch {0} Egg(s)", - "quest_7": "Complete {0} Gym Battle(s)", - "quest_8": "Complete {0} Raid Battle(s)", - "quest_9": "Complete {0} Quest", - "quest_10": "Transfer {0} Pokemon", - "quest_11": "Favorite {0} Pokemon", - "quest_12": "Autocomplete", - "quest_13": "Use {0} Berries on Pokemon", - "quest_14": "Power up {0} Pokemon", - "quest_15": "Evolve {0} Pokemon", - "quest_16": "Land {0} Throw(s)", - "quest_17": "Get {0} Buddy candy", - "quest_18": "Get {0} Badge(s)", - "quest_19": "Get {0} Level", - "quest_20": "Join {0} Raid Battle(s)", - "quest_21": "Complete {0} Battle(s)", - "quest_22": "Add {0} Friend(s)", - "quest_23": "Trade {0} Pokemon", - "quest_24": "Send {0} Gift(s)", - "quest_25": "Evolve {0} Into Specific Pokemon", - "quest_27": "Complete {0} Combat(s)", - "quest_28": "Take {0} Snapshot(s)", - "quest_29": "Battle {0} Team Rocket Battle(s)", - "quest_30": "Purify {0} Pokemon", - "quest_31": "Find {0} Team Rocket Invasion(s)", - "quest_32": "{0} time(s) First Grunt OTD", - "quest_33": "Feed your Buddy {0} times", - "quest_34": "Earn {0} hearts with your Buddy", - "quest_35": "Play {0} times with your Buddy", - "quest_36": "Increase your Buddy Level {0} times", - "quest_37": "Earn {0} Friendship points by Walking with your Buddy", - "quest_38": "Earn {0} Souvenirs from your Buddy", - "quest_39": "Use Incense {0} times", - "quest_40": "quest_40", - "quest_41": "quest_41", - "quest_42": "quest_42", - "quest_43": "Mega-Evolve {0} Pokemon", - "quest_44": "quest_44", - "quest_45": "quest_45", - "quest_57": "Take {0} Snapshot(s) of wild Pokemon", - "quest_reward_1": "{0:N0} XP", - "quest_reward_2": "{0} {1}", - "quest_reward_3": "{0:N0} Stardust", - "quest_reward_4": "{0} {1} Candy", - "quest_reward_5": "Avatar Clothing", - "quest_reward_6": "Quest", - "quest_reward_7": "{0}", - "quest_reward_8": "{0:N0} Pokecoins", - "quest_reward_11": "Sticker", - "quest_reward_12": "Mega Energy", - "quest_condition_1": "Type(s): {0}", - "quest_condition_2": "Pokemon: {0}", - "quest_condition_3": "Weather Boosted", - "quest_condition_4": "Daily Capture Bonus", - "quest_condition_5": "Daily Spin Bonus", - "quest_condition_6": "Win Raid", - "quest_condition_7": "Raid Level(s): {0}", - "quest_condition_8": "{0} Throw", - "quest_condition_9": "Win Gym Battle", - "quest_condition_10": "Super Effective Charge", - "quest_condition_11": "Item: {0}", - "quest_condition_12": "Unique Pokestop", - "quest_condition_13": "Quest Context", - "quest_condition_14": "{0} Throw In a Row", - "quest_condition_15": "Curve Ball", - "quest_condition_16": "Badge Type", - "quest_condition_17": "Player Level", - "quest_condition_18": "Win Battle", - "quest_condition_19": "New Friend", - "quest_condition_20": "Days In a Row", - "quest_condition_21": "Unique Pokemon", - "quest_condition_22": "NPC Combat", - "quest_condition_23": "PVP Combat", - "quest_condition_24": "Location", - "quest_condition_25": "Distance", - "quest_condition_26": "Pokemon Alignment(s): {0}", - "quest_condition_27": "Invasion Category(s): {0}", - "quest_condition_28": "With Buddy", - "quest_condition_37": "With Mega Evo Pokemon", - "alignment_1": "Shadow", - "alignment_2": "Purified", - "character_category_1": "Team Leader", - "character_category_2": "Grunt", - "throw_type_10": "Nice", - "throw_type_11": "Great", - "throw_type_12": "Excellent", - "throw_type_13": "Curve", - "item_1": "Poké Ball", - "item_2": "Super Ball", - "item_3": "Hyper Ball", - "item_4": "Master Ball", - "item_5": "Premier Ball", - "item_101": "Potion", - "item_102": "Super Potion", - "item_103": "Hyper Potion", - "item_104": "Potion Max", - "item_201": "Rappel", - "item_202": "Rappel Max", - "item_301": "Œuf Chance", - "item_401": "Encens", - "item_402": "Spicy Incense", - "item_403": "Cool Incense", - "item_404": "Floral Incense", - "item_501": "Module Leurre", - "item_502": "Leurre Glacial", - "item_503": "Leurre Moussu", - "item_504": "Leurre Magnétique", - "item_602": "Attaque +", - "item_603": "Défense +", - "item_604": "UNDEFINED", - "item_701": "Baie Framby", - "item_702": "Baie Remu", - "item_703": "Baie Nanab", - "item_704": "Baie Repoi", - "item_705": "Baie Nanana", - "item_706": "Baie Framby dorée", - "item_707": "Golden Nanab Berry", - "item_708": "Baie Nanana argentée", - "item_801": "Appareil photo", - "item_901": "Incubateur ∞", - "item_902": "Incubateur", - "item_903": "Super-Incubateur", - "item_1001": "Pokemon Storage Upgrade", - "item_1002": "Item Storage Upgrade", - "item_1101": "Pierre Soleil", - "item_1102": "Roche Royale", - "item_1103": "Peau Métal", - "item_1104": "Écaille Draco", - "item_1105": "Améliorator", - "item_1106": "Pierre Sinnoh", - "item_1107": "Pierre Unys", - "item_1201": "CT Attaque Immédiate", - "item_1202": "CT Attaque Chargée", - "item_1301": "Super Bonbon", - "item_1401": "Passe de Raid", - "item_1402": "Passe de combat premium", - "item_1403": "Passe de Raid EX", - "item_1404": "Morceau d’Étoile", - "item_1405": "Cadeau", - "lure_501": "Normal", - "lure_502": "Glacial", - "lure_503": "Mossy", - "lure_504": "Magnetic", - "grunt_0": "None", - "grunt_1": "Blanche", - "grunt_2": "Candela", - "grunt_3": "Spark", - "grunt_4": "Sbire (male)", - "grunt_5": "Sbire (female)", - "grunt_6": "Insecte - Sbire (female)", - "grunt_7": "Insecte - Sbire (male)", - "grunt_8": "Darkness - Female Grunt", - "grunt_9": "Darkness - Male Grunt", - "grunt_10": "Ténèbres - Sbire (female)", - "grunt_11": "Ténèbres - Sbire (male)", - "grunt_12": "Dragon - Sbire (female)", - "grunt_13": "Dragon - Sbire (male)", - "grunt_14": "Fée - Sbire (female)", - "grunt_15": "Fée - Sbire (male)", - "grunt_16": "Combat - Sbire (female)", - "grunt_17": "Combat - Sbire (male)", - "grunt_18": "Feu - Sbire (female)", - "grunt_19": "Feu - Sbire (male)", - "grunt_20": "Vol - Sbire (female)", - "grunt_21": "Vol - Sbire (male)", - "grunt_22": "Plante - Sbire (female)", - "grunt_23": "Plante - Sbire (male)", - "grunt_24": "Sol - Sbire (female)", - "grunt_25": "Sol - Sbire (male)", - "grunt_26": "Glace - Sbire (female)", - "grunt_27": "Glace - Sbire (male)", - "grunt_28": "Sbire (female)", - "grunt_29": "Sbire (male)", - "grunt_30": "Normal - Sbire (female)", - "grunt_31": "Normal - Sbire (male)", - "grunt_32": "Poison - Sbire (female)", - "grunt_33": "Poison - Sbire (male)", - "grunt_34": "Psy - Sbire (female)", - "grunt_35": "Psy - Sbire (male)", - "grunt_36": "Roche - Sbire (female)", - "grunt_37": "Roche - Sbire (male)", - "grunt_38": "Eau - Sbire (female)", - "grunt_39": "Eau - Sbire (male)", - "grunt_40": "Player Team Leader", - "grunt_41": "Chef Cliff", - "grunt_42": "Chef Arlo", - "grunt_43": "Chef Sierra", - "grunt_44": "Giovanni", - "grunt_45": "Faux Sbire (male)", - "grunt_46": "Faux Sbire (female)", - "grunt_47": "Spectre - Sbire (female)", - "grunt_48": "Spectre - Sbire (male)", - "grunt_49": "Électrik - Sbire (female)", - "grunt_50": "Électrik - Sbire (male)", - "poke_0": "--", - "poke_1": "Bulbizarre", - "poke_2": "Herbizarre", - "poke_3": "Florizarre", - "poke_4": "Salamèche", - "poke_5": "Reptincel", - "poke_6": "Dracaufeu", - "poke_7": "Carapuce", - "poke_8": "Carabaffe", - "poke_9": "Tortank", - "poke_10": "Chenipan", - "poke_11": "Chrysacier", - "poke_12": "Papilusion", - "poke_13": "Aspicot", - "poke_14": "Coconfort", - "poke_15": "Dardargnan", - "poke_16": "Roucool", - "poke_17": "Roucoups", - "poke_18": "Roucarnage", - "poke_19": "Rattata", - "poke_20": "Rattatac", - "poke_21": "Piafabec", - "poke_22": "Rapasdepic", - "poke_23": "Abo", - "poke_24": "Arbok", - "poke_25": "Pikachu", - "poke_26": "Raichu", - "poke_27": "Sabelette", - "poke_28": "Sablaireau", - "poke_29": "Nidoran♀", - "poke_30": "Nidorina", - "poke_31": "Nidoqueen", - "poke_32": "Nidoran♂", - "poke_33": "Nidorino", - "poke_34": "Nidoking", - "poke_35": "Mélofée", - "poke_36": "Mélodelfe", - "poke_37": "Goupix", - "poke_38": "Feunard", - "poke_39": "Rondoudou", - "poke_40": "Grodoudou", - "poke_41": "Nosferapti", - "poke_42": "Nosferalto", - "poke_43": "Mystherbe", - "poke_44": "Ortide", - "poke_45": "Rafflesia", - "poke_46": "Paras", - "poke_47": "Parasect", - "poke_48": "Mimitoss", - "poke_49": "Aéromite", - "poke_50": "Taupiqueur", - "poke_51": "Triopikeur", - "poke_52": "Miaouss", - "poke_53": "Persian", - "poke_54": "Psykokwak", - "poke_55": "Akwakwak", - "poke_56": "Férosinge", - "poke_57": "Colossinge", - "poke_58": "Caninos", - "poke_59": "Arcanin", - "poke_60": "Ptitard", - "poke_61": "Têtarte", - "poke_62": "Tartard", - "poke_63": "Abra", - "poke_64": "Kadabra", - "poke_65": "Alakazam", - "poke_66": "Machoc", - "poke_67": "Machopeur", - "poke_68": "Mackogneur", - "poke_69": "Chétiflor", - "poke_70": "Boustiflor", - "poke_71": "Empiflor", - "poke_72": "Tentacool", - "poke_73": "Tentacruel", - "poke_74": "Racaillou", - "poke_75": "Gravalanch", - "poke_76": "Grolem", - "poke_77": "Ponyta", - "poke_78": "Galopa", - "poke_79": "Ramoloss", - "poke_80": "Flagadoss", - "poke_81": "Magnéti", - "poke_82": "Magnéton", - "poke_83": "Canarticho", - "poke_84": "Doduo", - "poke_85": "Dodrio", - "poke_86": "Otaria", - "poke_87": "Lamantine", - "poke_88": "Tadmorv", - "poke_89": "Grotadmorv", - "poke_90": "Kokiyas", - "poke_91": "Crustabri", - "poke_92": "Fantominus", - "poke_93": "Spectrum", - "poke_94": "Ectoplasma", - "poke_95": "Onix", - "poke_96": "Soporifik", - "poke_97": "Hypnomade", - "poke_98": "Krabby", - "poke_99": "Krabboss", - "poke_100": "Voltorbe", - "poke_101": "Électrode", - "poke_102": "Noeunoeuf", - "poke_103": "Noadkoko", - "poke_104": "Osselait", - "poke_105": "Ossatueur", - "poke_106": "Kicklee", - "poke_107": "Tygnon", - "poke_108": "Excelangue", - "poke_109": "Smogo", - "poke_110": "Smogogo", - "poke_111": "Rhinocorne", - "poke_112": "Rhinoféros", - "poke_113": "Leveinard", - "poke_114": "Saquedeneu", - "poke_115": "Kangourex", - "poke_116": "Hypotrempe", - "poke_117": "Hypocéan", - "poke_118": "Poissirène", - "poke_119": "Poissoroy", - "poke_120": "Stari", - "poke_121": "Staross", - "poke_122": "M. Mime", - "poke_123": "Insécateur", - "poke_124": "Lippoutou", - "poke_125": "Élektek", - "poke_126": "Magmar", - "poke_127": "Scarabrute", - "poke_128": "Tauros", - "poke_129": "Magicarpe", - "poke_130": "Léviator", - "poke_131": "Lokhlass", - "poke_132": "Métamorph", - "poke_133": "Évoli", - "poke_134": "Aquali", - "poke_135": "Voltali", - "poke_136": "Pyroli", - "poke_137": "Porygon", - "poke_138": "Amonita", - "poke_139": "Amonistar", - "poke_140": "Kabuto", - "poke_141": "Kabutops", - "poke_142": "Ptéra", - "poke_143": "Ronflex", - "poke_144": "Artikodin", - "poke_145": "Électhor", - "poke_146": "Sulfura", - "poke_147": "Minidraco", - "poke_148": "Draco", - "poke_149": "Dracolosse", - "poke_150": "Mewtwo", - "poke_151": "Mew", - "poke_152": "Germignon", - "poke_153": "Macronium", - "poke_154": "Méganium", - "poke_155": "Héricendre", - "poke_156": "Feurisson", - "poke_157": "Typhlosion", - "poke_158": "Kaiminus", - "poke_159": "Crocrodil", - "poke_160": "Aligatueur", - "poke_161": "Fouinette", - "poke_162": "Fouinar", - "poke_163": "Hoothoot", - "poke_164": "Noarfang", - "poke_165": "Coxy", - "poke_166": "Coxyclaque", - "poke_167": "Mimigal", - "poke_168": "Migalos", - "poke_169": "Nostenfer", - "poke_170": "Loupio", - "poke_171": "Lanturn", - "poke_172": "Pichu", - "poke_173": "Mélo", - "poke_174": "Toudoudou", - "poke_175": "Togepi", - "poke_176": "Togetic", - "poke_177": "Natu", - "poke_178": "Xatu", - "poke_179": "Wattouat", - "poke_180": "Lainergie", - "poke_181": "Pharamp", - "poke_182": "Joliflor", - "poke_183": "Marill", - "poke_184": "Azumarill", - "poke_185": "Simularbre", - "poke_186": "Tarpaud", - "poke_187": "Granivol", - "poke_188": "Floravol", - "poke_189": "Cotovol", - "poke_190": "Capumain", - "poke_191": "Tournegrin", - "poke_192": "Héliatronc", - "poke_193": "Yanma", - "poke_194": "Axoloto", - "poke_195": "Maraiste", - "poke_196": "Mentali", - "poke_197": "Noctali", - "poke_198": "Cornèbre", - "poke_199": "Roigada", - "poke_200": "Feuforêve", - "poke_201": "Zarbi", - "poke_202": "Qulbutoké", - "poke_203": "Girafarig", - "poke_204": "Pomdepik", - "poke_205": "Foretress", - "poke_206": "Insolourdo", - "poke_207": "Scorplane", - "poke_208": "Steelix", - "poke_209": "Snubbull", - "poke_210": "Granbull", - "poke_211": "Qwilfish", - "poke_212": "Cizayox", - "poke_213": "Caratroc", - "poke_214": "Scarhino", - "poke_215": "Farfuret", - "poke_216": "Teddiursa", - "poke_217": "Ursaring", - "poke_218": "Limagma", - "poke_219": "Volcaropod", - "poke_220": "Marcacrin", - "poke_221": "Cochignon", - "poke_222": "Corayon", - "poke_223": "Rémoraid", - "poke_224": "Octillery", - "poke_225": "Cadoizo", - "poke_226": "Démanta", - "poke_227": "Airmure", - "poke_228": "Malosse", - "poke_229": "Démolosse", - "poke_230": "Hyporoi", - "poke_231": "Phanpy", - "poke_232": "Donphan", - "poke_233": "Porygon2", - "poke_234": "Cerfrousse", - "poke_235": "Queulorior", - "poke_236": "Debugant", - "poke_237": "Kapoera", - "poke_238": "Lippouti", - "poke_239": "Élekid", - "poke_240": "Magby", - "poke_241": "Écrémeuh", - "poke_242": "Leuphorie", - "poke_243": "Raikou", - "poke_244": "Entei", - "poke_245": "Suicune", - "poke_246": "Embrylex", - "poke_247": "Ymphect", - "poke_248": "Tyranocif", - "poke_249": "Lugia", - "poke_250": "Ho-Oh", - "poke_251": "Celebi", - "poke_252": "Arcko", - "poke_253": "Massko", - "poke_254": "Jungko", - "poke_255": "Poussifeu", - "poke_256": "Galifeu", - "poke_257": "Braségali", - "poke_258": "Gobou", - "poke_259": "Flobio", - "poke_260": "Laggron", - "poke_261": "Medhyèna", - "poke_262": "Grahyèna", - "poke_263": "Zigzaton", - "poke_264": "Linéon", - "poke_265": "Chenipotte", - "poke_266": "Armulys", - "poke_267": "Charmillon", - "poke_268": "Blindalys", - "poke_269": "Papinox", - "poke_270": "Nénupiot", - "poke_271": "Lombre", - "poke_272": "Ludicolo", - "poke_273": "Grainipiot", - "poke_274": "Pifeuil", - "poke_275": "Tengalice", - "poke_276": "Nirondelle", - "poke_277": "Hélédelle", - "poke_278": "Goélise", - "poke_279": "Bekipan", - "poke_280": "Tarsal", - "poke_281": "Kirlia", - "poke_282": "Gardevoir", - "poke_283": "Arakdo", - "poke_284": "Maskadra", - "poke_285": "Balignon", - "poke_286": "Chapignon", - "poke_287": "Parecool", - "poke_288": "Vigoroth", - "poke_289": "Monaflèmit", - "poke_290": "Ningale", - "poke_291": "Ninjask", - "poke_292": "Munja", - "poke_293": "Chuchmur", - "poke_294": "Ramboum", - "poke_295": "Brouhabam", - "poke_296": "Makuhita", - "poke_297": "Hariyama", - "poke_298": "Azurill", - "poke_299": "Tarinor", - "poke_300": "Skitty", - "poke_301": "Delcatty", - "poke_302": "Ténéfix", - "poke_303": "Mysdibule", - "poke_304": "Galekid", - "poke_305": "Galegon", - "poke_306": "Galeking", - "poke_307": "Méditikka", - "poke_308": "Charmina", - "poke_309": "Dynavolt", - "poke_310": "Élecsprint", - "poke_311": "Posipi", - "poke_312": "Négapi", - "poke_313": "Muciole", - "poke_314": "Lumivole", - "poke_315": "Rosélia", - "poke_316": "Gloupti", - "poke_317": "Avaltout", - "poke_318": "Carvanha", - "poke_319": "Sharpedo", - "poke_320": "Wailmer", - "poke_321": "Wailord", - "poke_322": "Chamallot", - "poke_323": "Camérupt", - "poke_324": "Chartor", - "poke_325": "Spoink", - "poke_326": "Groret", - "poke_327": "Spinda", - "poke_328": "Kraknoix", - "poke_329": "Vibraninf", - "poke_330": "Libégon", - "poke_331": "Cacnea", - "poke_332": "Cacturne", - "poke_333": "Tylton", - "poke_334": "Altaria", - "poke_335": "Mangriff", - "poke_336": "Séviper", - "poke_337": "Séléroc", - "poke_338": "Solaroc", - "poke_339": "Barloche", - "poke_340": "Barbicha", - "poke_341": "Écrapince", - "poke_342": "Colhomard", - "poke_343": "Balbuto", - "poke_344": "Kaorine", - "poke_345": "Lilia", - "poke_346": "Vacilys", - "poke_347": "Anorith", - "poke_348": "Armaldo", - "poke_349": "Barpau", - "poke_350": "Milobellus", - "poke_351": "Morphéo", - "poke_352": "Kecleon", - "poke_353": "Polichombr", - "poke_354": "Branette", - "poke_355": "Skelénox", - "poke_356": "Téraclope", - "poke_357": "Tropius", - "poke_358": "Éoko", - "poke_359": "Absol", - "poke_360": "Okéoké", - "poke_361": "Stalgamin", - "poke_362": "Oniglali", - "poke_363": "Obalie", - "poke_364": "Phogleur", - "poke_365": "Kaimorse", - "poke_366": "Coquiperl", - "poke_367": "Serpang", - "poke_368": "Rosabyss", - "poke_369": "Relicanth", - "poke_370": "Lovdisc", - "poke_371": "Draby", - "poke_372": "Drackhaus", - "poke_373": "Drattak", - "poke_374": "Terhal", - "poke_375": "Métang", - "poke_376": "Métalosse", - "poke_377": "Regirock", - "poke_378": "Regice", - "poke_379": "Registeel", - "poke_380": "Latias", - "poke_381": "Latios", - "poke_382": "Kyogre", - "poke_383": "Groudon", - "poke_384": "Rayquaza", - "poke_385": "Jirachi", - "poke_386": "Deoxys", - "poke_387": "Tortipouss", - "poke_388": "Boskara", - "poke_389": "Torterra", - "poke_390": "Ouisticram", - "poke_391": "Chimpenfeu", - "poke_392": "Simiabraz", - "poke_393": "Tiplouf", - "poke_394": "Prinplouf", - "poke_395": "Pingoléon", - "poke_396": "Étourmi", - "poke_397": "Étourvol", - "poke_398": "Étouraptor", - "poke_399": "Keunotor", - "poke_400": "Castorno", - "poke_401": "Crikzik", - "poke_402": "Mélokrik", - "poke_403": "Lixy", - "poke_404": "Luxio", - "poke_405": "Luxray", - "poke_406": "Rozbouton", - "poke_407": "Roserade", - "poke_408": "Kranidos", - "poke_409": "Charkos", - "poke_410": "Dinoclier", - "poke_411": "Bastiodon", - "poke_412": "Cheniti", - "poke_413": "Cheniselle", - "poke_414": "Papilord", - "poke_415": "Apitrini", - "poke_416": "Apireine", - "poke_417": "Pachirisu", - "poke_418": "Mustébouée", - "poke_419": "Mustéflott", - "poke_420": "Ceribou", - "poke_421": "Ceriflor", - "poke_422": "Sancoki", - "poke_423": "Tritosor", - "poke_424": "Capidextre", - "poke_425": "Baudrive", - "poke_426": "Grodrive", - "poke_427": "Laporeille", - "poke_428": "Lockpin", - "poke_429": "Magirêve", - "poke_430": "Corboss", - "poke_431": "Chaglam", - "poke_432": "Chaffreux", - "poke_433": "Korillon", - "poke_434": "Moufouette", - "poke_435": "Moufflair", - "poke_436": "Archéomire", - "poke_437": "Archéodong", - "poke_438": "Manzaï", - "poke_439": "Mime Jr.", - "poke_440": "Ptiravi", - "poke_441": "Pijako", - "poke_442": "Spiritomb", - "poke_443": "Griknot", - "poke_444": "Carmache", - "poke_445": "Carchacrok", - "poke_446": "Goinfrex", - "poke_447": "Riolu", - "poke_448": "Lucario", - "poke_449": "Hippopotas", - "poke_450": "Hippodocus", - "poke_451": "Rapion", - "poke_452": "Drascore", - "poke_453": "Cradopaud", - "poke_454": "Coatox", - "poke_455": "Vortente", - "poke_456": "Écayon", - "poke_457": "Luminéon", - "poke_458": "Babimanta", - "poke_459": "Blizzi", - "poke_460": "Blizzaroi", - "poke_461": "Dimoret", - "poke_462": "Magnézone", - "poke_463": "Coudlangue", - "poke_464": "Rhinastoc", - "poke_465": "Bouldeneu", - "poke_466": "Élekable", - "poke_467": "Maganon", - "poke_468": "Togekiss", - "poke_469": "Yanmega", - "poke_470": "Phyllali", - "poke_471": "Givrali", - "poke_472": "Scorvol", - "poke_473": "Mammochon", - "poke_474": "Porygon-Z", - "poke_475": "Gallame", - "poke_476": "Tarinorme", - "poke_477": "Noctunoir", - "poke_478": "Momartik", - "poke_479": "Motisma", - "poke_480": "Créhelf", - "poke_481": "Créfollet", - "poke_482": "Créfadet", - "poke_483": "Dialga", - "poke_484": "Palkia", - "poke_485": "Heatran", - "poke_486": "Regigigas", - "poke_487": "Giratina", - "poke_488": "Cresselia", - "poke_489": "Phione", - "poke_490": "Manaphy", - "poke_491": "Darkrai", - "poke_492": "Shaymin", - "poke_493": "Arceus", - "poke_494": "Victini", - "poke_495": "Vipélierre", - "poke_496": "Lianaja", - "poke_497": "Majaspic", - "poke_498": "Gruikui", - "poke_499": "Grotichon", - "poke_500": "Roitiflam", - "poke_501": "Moustillon", - "poke_502": "Mateloutre", - "poke_503": "Clamiral", - "poke_504": "Ratentif", - "poke_505": "Miradar", - "poke_506": "Ponchiot", - "poke_507": "Ponchien", - "poke_508": "Mastouffe", - "poke_509": "Chacripan", - "poke_510": "Léopardus", - "poke_511": "Feuillajou", - "poke_512": "Feuiloutan", - "poke_513": "Flamajou", - "poke_514": "Flamoutan", - "poke_515": "Flotajou", - "poke_516": "Flotoutan", - "poke_517": "Munna", - "poke_518": "Mushana", - "poke_519": "Poichigeon", - "poke_520": "Colombeau", - "poke_521": "Déflaisan", - "poke_522": "Zébibron", - "poke_523": "Zéblitz", - "poke_524": "Nodulithe", - "poke_525": "Géolithe", - "poke_526": "Gigalithe", - "poke_527": "Chovsourir", - "poke_528": "Rhinolove", - "poke_529": "Rototaupe", - "poke_530": "Minotaupe", - "poke_531": "Nanméouïe", - "poke_532": "Charpenti", - "poke_533": "Ouvrifier", - "poke_534": "Bétochef", - "poke_535": "Tritonde", - "poke_536": "Batracné", - "poke_537": "Crapustule", - "poke_538": "Judokrak", - "poke_539": "Karaclée", - "poke_540": "Larveyette", - "poke_541": "Couverdure", - "poke_542": "Manternel", - "poke_543": "Venipatte", - "poke_544": "Scobolide", - "poke_545": "Brutapode", - "poke_546": "Doudouvet", - "poke_547": "Farfaduvet", - "poke_548": "Chlorobule", - "poke_549": "Fragilady", - "poke_550": "Bargantua", - "poke_551": "Mascaïman", - "poke_552": "Escroco", - "poke_553": "Crocorible", - "poke_554": "Darumarond", - "poke_555": "Darumacho", - "poke_556": "Maracachi", - "poke_557": "Crabicoque", - "poke_558": "Crabaraque", - "poke_559": "Baggiguane", - "poke_560": "Baggaïd", - "poke_561": "Cryptéro", - "poke_562": "Tutafeh", - "poke_563": "Tutankafer", - "poke_564": "Carapagos", - "poke_565": "Mégapagos", - "poke_566": "Arkéapti", - "poke_567": "Aéroptéryx", - "poke_568": "Miamiasme", - "poke_569": "Miasmax", - "poke_570": "Zorua", - "poke_571": "Zoroark", - "poke_572": "Chinchidou", - "poke_573": "Pashmilla", - "poke_574": "Scrutella", - "poke_575": "Mesmérella", - "poke_576": "Sidérella", - "poke_577": "Nucléos", - "poke_578": "Méios", - "poke_579": "Symbios", - "poke_580": "Couaneton", - "poke_581": "Lakmécygne", - "poke_582": "Sorbébé", - "poke_583": "Sorboul", - "poke_584": "Sorbouboul", - "poke_585": "Vivaldaim", - "poke_586": "Haydaim", - "poke_587": "Emolga", - "poke_588": "Carabing", - "poke_589": "Lançargot", - "poke_590": "Trompignon", - "poke_591": "Gaulet", - "poke_592": "Viskuse", - "poke_593": "Moyade", - "poke_594": "Mamanbo", - "poke_595": "Statitik", - "poke_596": "Mygavolt", - "poke_597": "Grindur", - "poke_598": "Noacier", - "poke_599": "Tic", - "poke_600": "Clic", - "poke_601": "Cliticlic", - "poke_602": "Anchwatt", - "poke_603": "Lampéroie", - "poke_604": "Ohmassacre", - "poke_605": "Lewsor", - "poke_606": "Neitram", - "poke_607": "Funécire", - "poke_608": "Mélancolux", - "poke_609": "Lugulabre", - "poke_610": "Coupenotte", - "poke_611": "Incisache", - "poke_612": "Tranchodon", - "poke_613": "Polarhume", - "poke_614": "Polagriffe", - "poke_615": "Hexagel", - "poke_616": "Escargaume", - "poke_617": "Limaspeed", - "poke_618": "Limonde", - "poke_619": "Kungfouine", - "poke_620": "Shaofouine", - "poke_621": "Drakkarmin", - "poke_622": "Gringolem", - "poke_623": "Golemastoc", - "poke_624": "Scalpion", - "poke_625": "Scalproie", - "poke_626": "Frison", - "poke_627": "Furaiglon", - "poke_628": "Gueriaigle", - "poke_629": "Vostourno", - "poke_630": "Vaututrice", - "poke_631": "Aflamanoir", - "poke_632": "Fermite", - "poke_633": "Solochi", - "poke_634": "Diamat", - "poke_635": "Trioxhydre", - "poke_636": "Pyronille", - "poke_637": "Pyrax", - "poke_638": "Cobaltium", - "poke_639": "Terrakium", - "poke_640": "Viridium", - "poke_641": "Boréas", - "poke_642": "Fulguris", - "poke_643": "Reshiram", - "poke_644": "Zekrom", - "poke_645": "Démétéros", - "poke_646": "Kyurem", - "poke_647": "Keldeo", - "poke_648": "Meloetta", - "poke_649": "Genesect", - "poke_650": "Marisson", - "poke_651": "Boguérisse", - "poke_652": "Blindépique", - "poke_653": "Feunnec", - "poke_654": "Roussil", - "poke_655": "Goupelin", - "poke_656": "Grenousse", - "poke_657": "Croâporal", - "poke_658": "Amphinobi", - "poke_659": "Sapereau", - "poke_660": "Excavarenne", - "poke_661": "Passerouge", - "poke_662": "Braisillon", - "poke_663": "Flambusard", - "poke_664": "Lépidonille", - "poke_665": "Pérégrain", - "poke_666": "Prismillon", - "poke_667": "Hélionceau", - "poke_668": "Némélios", - "poke_669": "Flabébé", - "poke_670": "Floette", - "poke_671": "Florges", - "poke_672": "Cabriolaine", - "poke_673": "Chevroum", - "poke_674": "Pandespiègle", - "poke_675": "Pandarbare", - "poke_676": "Couafarel", - "poke_677": "Psystigri", - "poke_678": "Mistigrix", - "poke_679": "Monorpale", - "poke_680": "Dimoclès", - "poke_681": "Exagide", - "poke_682": "Fluvetin", - "poke_683": "Cocotine", - "poke_684": "Sucroquin", - "poke_685": "Cupcanaille", - "poke_686": "Sepiatop", - "poke_687": "Sepiatroce", - "poke_688": "Opermine", - "poke_689": "Golgopathe", - "poke_690": "Venalgue", - "poke_691": "Kravarech", - "poke_692": "Flingouste", - "poke_693": "Gamblast", - "poke_694": "Galvaran", - "poke_695": "Iguolta", - "poke_696": "Ptyranidur", - "poke_697": "Rexillius", - "poke_698": "Amagara", - "poke_699": "Dragmara", - "poke_700": "Nymphali", - "poke_701": "Brutalibré", - "poke_702": "Dedenne", - "poke_703": "Strassie", - "poke_704": "Mucuscule", - "poke_705": "Colimucus", - "poke_706": "Muplodocus", - "poke_707": "Trousselin", - "poke_708": "Brocélôme", - "poke_709": "Desséliande", - "poke_710": "Pitrouille", - "poke_711": "Banshitrouye", - "poke_712": "Grelaçon", - "poke_713": "Séracrawl", - "poke_714": "Sonistrelle", - "poke_715": "Bruyverne", - "poke_716": "Xerneas", - "poke_717": "Yveltal", - "poke_718": "Zygarde", - "poke_719": "Diancie", - "poke_720": "Hoopa", - "poke_721": "Volcanion", - "poke_722": "Rowlet", - "poke_723": "Dartrix", - "poke_724": "Decidueye", - "poke_725": "Litten", - "poke_726": "Torracat", - "poke_727": "Incineroar", - "poke_728": "Popplio", - "poke_729": "Brionne", - "poke_730": "Primarina", - "poke_731": "Pikipek", - "poke_732": "Trumbeak", - "poke_733": "Toucannon", - "poke_734": "Yungoos", - "poke_735": "Gumshoos", - "poke_736": "Grubbin", - "poke_737": "Charjabug", - "poke_738": "Vikavolt", - "poke_739": "Crabrawler", - "poke_740": "Crabominable", - "poke_741": "Oricorio", - "poke_742": "Cutiefly", - "poke_743": "Ribombee", - "poke_744": "Rockruff", - "poke_745": "Lycanroc", - "poke_746": "Wishiwashi", - "poke_747": "Mareanie", - "poke_748": "Toxapex", - "poke_749": "Mudbray", - "poke_750": "Mudsdale", - "poke_751": "Dewpider", - "poke_752": "Araquanid", - "poke_753": "Fomantis", - "poke_754": "Lurantis", - "poke_755": "Morelull", - "poke_756": "Shiinotic", - "poke_757": "Salandit", - "poke_758": "Salazzle", - "poke_759": "Stufful", - "poke_760": "Bewear", - "poke_761": "Bounsweet", - "poke_762": "Steenee", - "poke_763": "Tsareena", - "poke_764": "Comfey", - "poke_765": "Oranguru", - "poke_766": "Passimian", - "poke_767": "Wimpod", - "poke_768": "Golisopod", - "poke_769": "Sandygast", - "poke_770": "Palossand", - "poke_771": "Pyukumuku", - "poke_772": "Type: Null", - "poke_773": "Silvally", - "poke_774": "Minior", - "poke_775": "Komala", - "poke_776": "Turtonator", - "poke_777": "Togedemaru", - "poke_778": "Mimikyu", - "poke_779": "Bruxish", - "poke_780": "Drampa", - "poke_781": "Dhelmise", - "poke_782": "Jangmo-o", - "poke_783": "Hakamo-o", - "poke_784": "Kommo-o", - "poke_785": "Tapu Koko", - "poke_786": "Tapu Lele", - "poke_787": "Tapu Bulu", - "poke_788": "Tapu Fini", - "poke_789": "Cosmog", - "poke_790": "Cosmoem", - "poke_791": "Solgaleo", - "poke_792": "Lunala", - "poke_793": "Nihilego", - "poke_794": "Buzzwole", - "poke_795": "Pheromosa", - "poke_796": "Xurkitree", - "poke_797": "Celesteela", - "poke_798": "Kartana", - "poke_799": "Guzzlord", - "poke_800": "Necrozma", - "poke_801": "Magearna", - "poke_802": "Marshadow", - "poke_808": "Meltan", - "poke_809": "Melmetal", - "poke_862": "Ixon", - "poke_863": "Berserkatt", - "poke_865": "Palarticho", - "form_1": "A", - "form_2": "B", - "form_3": "C", - "form_4": "D", - "form_5": "E", - "form_6": "F", - "form_7": "G", - "form_8": "H", - "form_9": "I", - "form_10": "J", - "form_11": "K", - "form_12": "L", - "form_13": "M", - "form_14": "N", - "form_15": "O", - "form_16": "P", - "form_17": "Q", - "form_18": "R", - "form_19": "S", - "form_20": "T", - "form_21": "U", - "form_22": "V", - "form_23": "W", - "form_24": "X", - "form_25": "Y", - "form_26": "Z", - "form_27": "!", - "form_28": "?", - "form_29": "Normal", - "form_30": "Sunny", - "form_31": "Rainy", - "form_32": "Snowy", - "form_33": "Normal", - "form_34": "Attack", - "form_35": "Defense", - "form_36": "Speed", - "form_37": "00", - "form_38": "01", - "form_39": "02", - "form_40": "03", - "form_41": "04", - "form_42": "05", - "form_43": "06", - "form_44": "07", - "form_45": "Normal", - "form_46": "Alola", - "form_47": "Normal", - "form_48": "Alola", - "form_49": "Normal", - "form_50": "Alola", - "form_51": "Normal", - "form_52": "Alola", - "form_53": "Normal", - "form_54": "Alola", - "form_55": "Normal", - "form_56": "Alola", - "form_57": "Normal", - "form_58": "Alola", - "form_59": "Normal", - "form_60": "Alola", - "form_61": "Normal", - "form_62": "Alola", - "form_63": "Normal", - "form_64": "Alola", - "form_65": "Normal", - "form_66": "Alola", - "form_67": "Normal", - "form_68": "Alola", - "form_69": "Normal", - "form_70": "Alola", - "form_71": "Normal", - "form_72": "Alola", - "form_73": "Normal", - "form_74": "Alola", - "form_75": "Normal", - "form_76": "Alola", - "form_77": "Normal", - "form_78": "Alola", - "form_79": "Normal", - "form_80": "Alola", - "form_81": "Normal", - "form_82": "Frost", - "form_83": "Fan", - "form_84": "Mow", - "form_85": "Wash", - "form_86": "Heat", - "form_87": "Plant", - "form_88": "Sandy", - "form_89": "Trash", - "form_90": "Altered", - "form_91": "Origin", - "form_92": "Sky", - "form_93": "Land", - "form_94": "Overcast", - "form_95": "Sunny", - "form_96": "West Sea", - "form_97": "East Sea", - "form_98": "West Sea", - "form_99": "East Sea", - "form_100": "Normal", - "form_101": "Fighting", - "form_102": "Flying", - "form_103": "Poison", - "form_104": "Ground", - "form_105": "Rock", - "form_106": "Bug", - "form_107": "Ghost", - "form_108": "Steel", - "form_109": "Fire", - "form_110": "Water", - "form_111": "Grass", - "form_112": "Electric", - "form_113": "Psychic", - "form_114": "Ice", - "form_115": "Dragon", - "form_116": "Dark", - "form_117": "Fairy", - "form_118": "Plant", - "form_119": "Sandy", - "form_120": "Trash", - "form_121": "08", - "form_122": "09", - "form_123": "10", - "form_124": "11", - "form_125": "12", - "form_126": "13", - "form_127": "14", - "form_128": "15", - "form_129": "16", - "form_130": "17", - "form_131": "18", - "form_132": "19", - "form_133": "Armored", - "form_135": "Normal", - "form_136": "Red Striped", - "form_137": "Blue Striped", - "form_138": "Standard", - "form_139": "Zen", - "form_140": "Incarnate", - "form_141": "Therian", - "form_142": "Incarnate", - "form_143": "Therian", - "form_144": "Incarnate", - "form_145": "Therian", - "form_146": "Normal", - "form_147": "Black", - "form_148": "White", - "form_149": "Ordinary", - "form_150": "Resolute", - "form_151": "Aria", - "form_152": "Pirouette", - "form_153": "Shadow", - "form_154": "Purified", - "form_155": "Shadow", - "form_156": "Purified", - "form_157": "Normal", - "form_158": "Shadow", - "form_159": "Purified", - "form_160": "Normal", - "form_161": "Shadow", - "form_162": "Purified", - "form_163": "Normal", - "form_164": "Shadow", - "form_165": "Purified", - "form_166": "Normal", - "form_167": "Shadow", - "form_168": "Purified", - "form_169": "Normal", - "form_170": "Shadow", - "form_171": "Purified", - "form_172": "Normal", - "form_173": "Shadow", - "form_174": "Purified", - "form_175": "Normal", - "form_176": "Shadow", - "form_177": "Purified", - "form_178": "Normal", - "form_179": "Shadow", - "form_180": "Purified", - "form_181": "Normal", - "form_182": "Shadow", - "form_183": "Purified", - "form_184": "Normal", - "form_185": "Shadow", - "form_186": "Purified", - "form_187": "Normal", - "form_188": "Shadow", - "form_189": "Purified", - "form_190": "Normal", - "form_191": "Shadow", - "form_192": "Purified", - "form_193": "Normal", - "form_194": "Shadow", - "form_195": "Purified", - "form_196": "Normal", - "form_197": "Shadow", - "form_198": "Purified", - "form_199": "Normal", - "form_200": "Shadow", - "form_201": "Purified", - "form_202": "Normal", - "form_203": "Shadow", - "form_204": "Purified", - "form_205": "Normal", - "form_206": "Shadow", - "form_207": "Purified", - "form_208": "Normal", - "form_209": "Shadow", - "form_210": "Purified", - "form_211": "Normal", - "form_212": "Shadow", - "form_213": "Purified", - "form_214": "Normal", - "form_215": "Shadow", - "form_216": "Purified", - "form_217": "Normal", - "form_218": "Shadow", - "form_219": "Purified", - "form_220": "Shadow", - "form_221": "Purified", - "form_222": "Shadow", - "form_223": "Purified", - "form_224": "Normal", - "form_225": "Shadow", - "form_226": "Purified", - "form_227": "Shadow", - "form_228": "Purified", - "form_229": "Normal", - "form_230": "Shadow", - "form_231": "Purified", - "form_232": "Normal", - "form_233": "Shadow", - "form_234": "Purified", - "form_235": "Normal", - "form_236": "Shadow", - "form_237": "Purified", - "form_238": "Normal", - "form_239": "Shadow", - "form_240": "Purified", - "form_241": "Normal", - "form_242": "Shadow", - "form_243": "Purified", - "form_244": "Normal", - "form_245": "Shadow", - "form_246": "Purified", - "form_247": "Normal", - "form_248": "Shadow", - "form_249": "Purified", - "form_250": "Normal", - "form_251": "Shadow", - "form_252": "Purified", - "form_253": "Normal", - "form_254": "Shadow", - "form_255": "Purified", - "form_256": "Normal", - "form_257": "Shadow", - "form_258": "Purified", - "form_259": "Normal", - "form_260": "Shadow", - "form_261": "Purified", - "form_262": "Normal", - "form_263": "Shadow", - "form_264": "Purified", - "form_265": "Normal", - "form_266": "Shadow", - "form_267": "Purified", - "form_268": "Normal", - "form_269": "Shadow", - "form_270": "Purified", - "form_271": "Normal", - "form_272": "Shadow", - "form_273": "Purified", - "form_274": "Normal", - "form_275": "Shadow", - "form_276": "Purified", - "form_277": "Normal", - "form_278": "Shadow", - "form_279": "Purified", - "form_280": "Normal", - "form_281": "Shadow", - "form_282": "Purified", - "form_283": "Normal", - "form_284": "Shadow", - "form_285": "Purified", - "form_286": "Normal", - "form_287": "Shadow", - "form_288": "Purified", - "form_289": "Normal", - "form_290": "Shadow", - "form_291": "Purified", - "form_292": "Normal", - "form_293": "Shadow", - "form_294": "Purified", - "form_295": "Normal", - "form_296": "Shadow", - "form_297": "Purified", - "form_298": "Normal", - "form_299": "Shadow", - "form_300": "Purified", - "form_301": "Normal", - "form_302": "Shadow", - "form_303": "Purified", - "form_304": "Normal", - "form_305": "Shadow", - "form_306": "Purified", - "form_307": "Normal", - "form_308": "Shadow", - "form_309": "Purified", - "form_310": "Normal", - "form_311": "Shadow", - "form_312": "Purified", - "form_313": "Normal", - "form_314": "Shadow", - "form_315": "Purified", - "form_316": "Normal", - "form_317": "Shadow", - "form_318": "Purified", - "form_319": "Normal", - "form_320": "Shadow", - "form_321": "Purified", - "form_322": "Normal", - "form_323": "Shadow", - "form_324": "Purified", - "form_585": "Spring", - "form_586": "Summer", - "form_587": "Autumn", - "form_588": "Winter", - "form_589": "Spring", - "form_590": "Summer", - "form_591": "Autumn", - "form_592": "Winter", - "form_593": "Normal", - "form_594": "Shock", - "form_595": "Burn", - "form_596": "Chill", - "form_597": "Douse", - "form_598": "Normal", - "form_599": "Noevolve", - "form_600": "Normal", - "form_601": "Noevolve", - "form_602": "Normal", - "form_603": "Noevolve", - "form_604": "Noevolve", - "form_605": "Noevolve", - "form_606": "Noevolve", - "form_607": "Noevolve", - "form_608": "Noevolve", - "form_609": "Noevolve", - "form_610": "Normal", - "form_611": "Shadow", - "form_612": "Purified", - "form_613": "Normal", - "form_614": "Shadow", - "form_615": "Purified", - "form_616": "Normal", - "form_617": "Shadow", - "form_618": "Purified", - "form_619": "Normal", - "form_620": "Shadow", - "form_621": "Purified", - "form_622": "Normal", - "form_623": "Shadow", - "form_624": "Purified", - "form_625": "Normal", - "form_626": "Shadow", - "form_627": "Purified", - "form_628": "Normal", - "form_629": "Shadow", - "form_630": "Purified", - "form_631": "Normal", - "form_632": "Shadow", - "form_633": "Purified", - "form_634": "Normal", - "form_635": "Shadow", - "form_636": "Purified", - "form_637": "Normal", - "form_638": "Shadow", - "form_639": "Purified", - "form_640": "Normal", - "form_641": "Shadow", - "form_642": "Purified", - "form_643": "Normal", - "form_644": "Shadow", - "form_645": "Purified", - "form_646": "Normal", - "form_647": "Shadow", - "form_648": "Purified", - "form_649": "Normal", - "form_650": "Shadow", - "form_651": "Purified", - "form_652": "Normal", - "form_653": "Shadow", - "form_654": "Purified", - "form_655": "Normal", - "form_656": "Shadow", - "form_657": "Purified", - "form_658": "Normal", - "form_659": "Shadow", - "form_660": "Purified", - "form_661": "Normal", - "form_662": "Shadow", - "form_663": "Purified", - "form_664": "Normal", - "form_665": "Shadow", - "form_666": "Purified", - "form_667": "Normal", - "form_668": "Shadow", - "form_669": "Purified", - "form_670": "Normal", - "form_671": "Shadow", - "form_672": "Purified", - "form_673": "Shadow", - "form_674": "Purified", - "form_675": "Shadow", - "form_676": "Purified", - "form_677": "Normal", - "form_678": "Shadow", - "form_679": "Purified", - "form_680": "Normal", - "form_681": "Shadow", - "form_682": "Purified", - "form_683": "Normal", - "form_684": "Shadow", - "form_685": "Purified", - "form_686": "Shadow", - "form_687": "Purified", - "form_688": "Normal", - "form_689": "Shadow", - "form_690": "Purified", - "form_691": "Normal", - "form_692": "Shadow", - "form_693": "Purified", - "form_694": "Normal", - "form_695": "Shadow", - "form_696": "Purified", - "form_697": "Normal", - "form_698": "Shadow", - "form_699": "Purified", - "form_700": "Normal", - "form_701": "Shadow", - "form_702": "Purified", - "form_703": "Normal", - "form_704": "Shadow", - "form_705": "Purified", - "form_706": "Normal", - "form_707": "Shadow", - "form_708": "Purified", - "form_709": "Shadow", - "form_710": "Purified", - "form_711": "Shadow", - "form_712": "Purified", - "form_713": "Normal", - "form_714": "Shadow", - "form_715": "Purified", - "form_716": "Normal", - "form_717": "Shadow", - "form_718": "Purified", - "form_719": "Normal", - "form_720": "Shadow", - "form_721": "Purified", - "form_722": "Normal", - "form_723": "Shadow", - "form_724": "Purified", - "form_725": "Shadow", - "form_726": "Purified", - "form_727": "Shadow", - "form_728": "Purified", - "form_729": "Normal", - "form_730": "Shadow", - "form_731": "Purified", - "form_732": "Shadow", - "form_733": "Purified", - "form_734": "Normal", - "form_735": "Shadow", - "form_736": "Purified", - "form_737": "Normal", - "form_738": "Shadow", - "form_739": "Purified", - "form_740": "Normal", - "form_741": "Shadow", - "form_742": "Purified", - "form_743": "Normal", - "form_744": "Shadow", - "form_745": "Purified", - "form_746": "Normal", - "form_747": "Shadow", - "form_748": "Purified", - "form_749": "Normal", - "form_750": "Shadow", - "form_751": "Purified", - "form_752": "Normal", - "form_753": "Shadow", - "form_754": "Purified", - "form_755": "Normal", - "form_756": "Shadow", - "form_757": "Purified", - "form_758": "Normal", - "form_759": "Shadow", - "form_760": "Purified", - "form_761": "Normal", - "form_762": "Shadow", - "form_763": "Purified", - "form_764": "Normal", - "form_765": "Shadow", - "form_766": "Purified", - "form_767": "Normal", - "form_768": "Shadow", - "form_769": "Purified", - "form_770": "Normal", - "form_771": "Shadow", - "form_772": "Purified", - "form_773": "Normal", - "form_774": "Shadow", - "form_775": "Purified", - "form_776": "Normal", - "form_777": "Shadow", - "form_778": "Purified", - "form_779": "Normal", - "form_780": "Shadow", - "form_781": "Purified", - "form_782": "Normal", - "form_783": "Shadow", - "form_784": "Purified", - "form_785": "Normal", - "form_786": "Shadow", - "form_787": "Purified", - "form_788": "Normal", - "form_789": "Shadow", - "form_790": "Purified", - "form_791": "Normal", - "form_792": "Shadow", - "form_793": "Purified", - "form_794": "Normal", - "form_795": "Shadow", - "form_796": "Purified", - "form_797": "Normal", - "form_798": "Shadow", - "form_799": "Purified", - "form_800": "Normal", - "form_801": "Shadow", - "form_802": "Purified", - "form_803": "Normal", - "form_804": "Shadow", - "form_805": "Purified", - "form_806": "Normal", - "form_807": "Shadow", - "form_808": "Purified", - "form_809": "Normal", - "form_810": "Shadow", - "form_811": "Purified", - "form_812": "Normal", - "form_813": "Shadow", - "form_814": "Purified", - "form_815": "Normal", - "form_816": "Shadow", - "form_817": "Purified", - "form_818": "Normal", - "form_819": "Shadow", - "form_820": "Purified", - "form_821": "Normal", - "form_822": "Shadow", - "form_823": "Purified", - "form_824": "Normal", - "form_825": "Shadow", - "form_826": "Purified", - "form_827": "Normal", - "form_828": "Shadow", - "form_829": "Purified", - "form_830": "Normal", - "form_831": "Shadow", - "form_832": "Purified", - "form_833": "Normal", - "form_834": "Shadow", - "form_835": "Purified", - "form_836": "Normal", - "form_837": "Shadow", - "form_838": "Purified", - "form_839": "Normal", - "form_840": "Shadow", - "form_841": "Purified", - "form_842": "Shadow", - "form_843": "Purified", - "form_844": "Shadow", - "form_845": "Purified", - "form_846": "Normal", - "form_847": "Shadow", - "form_848": "Purified", - "form_849": "Normal", - "form_850": "Shadow", - "form_851": "Purified", - "form_852": "Normal", - "form_853": "Shadow", - "form_854": "Purified", - "form_855": "Normal", - "form_856": "Shadow", - "form_857": "Purified", - "form_858": "Normal", - "form_859": "Shadow", - "form_860": "Purified", - "form_861": "Normal", - "form_862": "Shadow", - "form_863": "Purified", - "form_864": "Normal", - "form_865": "Shadow", - "form_866": "Purified", - "form_867": "Normal", - "form_868": "Shadow", - "form_869": "Purified", - "form_870": "Normal", - "form_871": "Shadow", - "form_872": "Purified", - "form_873": "Normal", - "form_874": "Shadow", - "form_875": "Purified", - "form_876": "Normal", - "form_877": "Shadow", - "form_878": "Purified", - "form_879": "Normal", - "form_880": "Shadow", - "form_881": "Purified", - "form_882": "Shadow", - "form_883": "Purified", - "form_884": "Shadow", - "form_885": "Purified", - "form_886": "Shadow", - "form_887": "Purified", - "form_888": "Normal", - "form_889": "Shadow", - "form_890": "Purified", - "form_891": "Normal", - "form_892": "Shadow", - "form_893": "Purified", - "form_894": "Fall 2019", - "form_895": "Fall 2019", - "form_896": "Fall 2019", - "form_897": "Fall 2019", - "form_898": "Normal", - "form_899": "Shadow", - "form_900": "Purified", - "form_901": "Vs 2019", - "form_902": "Normal", - "form_903": "Shadow", - "form_904": "Purified", - "form_905": "Normal", - "form_906": "Shadow", - "form_907": "Purified", - "form_908": "Normal", - "form_909": "Shadow", - "form_910": "Purified", - "form_911": "Normal", - "form_912": "Shadow", - "form_913": "Purified", - "form_914": "Normal", - "form_915": "Shadow", - "form_916": "Purified", - "form_917": "Normal", - "form_918": "Shadow", - "form_919": "Purified", - "form_920": "Normal", - "form_921": "Shadow", - "form_922": "Purified", - "form_923": "Normal", - "form_924": "Shadow", - "form_925": "Purified", - "form_926": "Normal", - "form_927": "Shadow", - "form_928": "Purified", - "form_929": "Normal", - "form_930": "Shadow", - "form_931": "Purified", - "form_932": "Normal", - "form_933": "Shadow", - "form_934": "Purified", - "form_935": "Normal", - "form_936": "Shadow", - "form_937": "Purified", - "form_938": "Normal", - "form_939": "Shadow", - "form_940": "Purified", - "form_941": "Normal", - "form_942": "Shadow", - "form_943": "Purified", - "form_944": "Galarian", - "form_945": "Normal", - "form_946": "Galarian", - "form_947": "Normal", - "form_948": "Galarian", - "form_949": "Copy 2019", - "form_950": "Copy 2019", - "form_951": "Copy 2019", - "form_952": "Copy 2019", - "form_953": "Normal", - "form_954": "Shadow", - "form_955": "Purified", - "form_956": "Normal", - "form_957": "Shadow", - "form_958": "Purified", - "form_959": "Normal", - "form_960": "Shadow", - "form_961": "Purified", - "form_962": "Normal", - "form_963": "Shadow", - "form_964": "Purified", - "form_965": "Normal", - "form_966": "Shadow", - "form_967": "Purified", - "form_968": "Normal", - "form_969": "Shadow", - "form_970": "Purified", - "form_971": "Normal", - "form_972": "Shadow", - "form_973": "Purified", - "form_974": "Normal", - "form_975": "Shadow", - "form_976": "Purified", - "form_977": "Shadow", - "form_978": "Purified", - "form_979": "Shadow", - "form_980": "Purified", - "form_981": "Normal", - "form_982": "Shadow", - "form_983": "Purified", - "form_984": "Normal", - "form_985": "Shadow", - "form_986": "Purified", - "form_987": "Normal", - "form_988": "Shadow", - "form_989": "Purified", - "form_990": "Normal", - "form_991": "Shadow", - "form_992": "Purified", - "form_993": "Normal", - "form_994": "Shadow", - "form_995": "Purified", - "form_996": "Normal", - "form_997": "Shadow", - "form_998": "Purified", - "form_999": "Normal", - "form_1000": "Shadow", - "form_1001": "Purified", - "form_1002": "Normal", - "form_1003": "Shadow", - "form_1004": "Purified", - "form_1005": "Normal", - "form_1006": "Shadow", - "form_1007": "Purified", - "form_1008": "Normal", - "form_1009": "Shadow", - "form_1010": "Purified", - "form_1011": "Normal", - "form_1012": "Shadow", - "form_1013": "Purified", - "form_1014": "Normal", - "form_1015": "Shadow", - "form_1016": "Purified", - "form_1017": "Normal", - "form_1018": "Shadow", - "form_1019": "Purified", - "form_1020": "Normal", - "form_1021": "Shadow", - "form_1022": "Purified", - "form_1023": "Normal", - "form_1024": "Shadow", - "form_1025": "Purified", - "form_1026": "Normal", - "form_1027": "Shadow", - "form_1028": "Purified", - "form_1029": "Normal", - "form_1030": "Shadow", - "form_1031": "Purified", - "form_1032": "Normal", - "form_1033": "Shadow", - "form_1034": "Purified", - "form_1035": "Normal", - "form_1036": "Shadow", - "form_1037": "Purified", - "form_1038": "Normal", - "form_1039": "Shadow", - "form_1040": "Purified", - "form_1041": "Normal", - "form_1042": "Shadow", - "form_1043": "Purified", - "form_1044": "Normal", - "form_1045": "Shadow", - "form_1046": "Purified", - "form_1047": "Normal", - "form_1048": "Shadow", - "form_1049": "Purified", - "form_1050": "Normal", - "form_1051": "Shadow", - "form_1052": "Purified", - "form_1053": "Normal", - "form_1054": "Shadow", - "form_1055": "Purified", - "form_1056": "Normal", - "form_1057": "Shadow", - "form_1058": "Purified", - "form_1059": "Normal", - "form_1060": "Shadow", - "form_1061": "Purified", - "form_1062": "Normal", - "form_1063": "Shadow", - "form_1064": "Purified", - "form_1065": "Normal", - "form_1066": "Shadow", - "form_1067": "Purified", - "form_1068": "Normal", - "form_1069": "Shadow", - "form_1070": "Purified", - "form_1071": "Normal", - "form_1072": "Shadow", - "form_1073": "Purified", - "form_1074": "Normal", - "form_1075": "Shadow", - "form_1076": "Purified", - "form_1077": "Normal", - "form_1078": "Shadow", - "form_1079": "Purified", - "form_1080": "Normal", - "form_1081": "Shadow", - "form_1082": "Purified", - "form_1083": "Normal", - "form_1084": "Shadow", - "form_1085": "Purified", - "form_1086": "Normal", - "form_1087": "Shadow", - "form_1088": "Purified", - "form_1089": "Normal", - "form_1090": "Shadow", - "form_1091": "Purified", - "form_1092": "Normal", - "form_1093": "Shadow", - "form_1094": "Purified", - "form_1095": "Normal", - "form_1096": "Shadow", - "form_1097": "Purified", - "form_1098": "Normal", - "form_1099": "Shadow", - "form_1100": "Purified", - "form_1101": "Normal", - "form_1102": "Shadow", - "form_1103": "Purified", - "form_1104": "Normal", - "form_1105": "Shadow", - "form_1106": "Purified", - "form_1107": "Normal", - "form_1108": "Shadow", - "form_1109": "Purified", - "form_1110": "Normal", - "form_1111": "Shadow", - "form_1112": "Purified", - "form_1113": "Shadow", - "form_1114": "Purified", - "form_1115": "Normal", - "form_1116": "Shadow", - "form_1117": "Purified", - "form_1118": "Normal", - "form_1119": "Shadow", - "form_1120": "Purified", - "form_1121": "Normal", - "form_1122": "Shadow", - "form_1123": "Purified", - "form_1124": "Normal", - "form_1125": "Shadow", - "form_1126": "Purified", - "form_1127": "Normal", - "form_1128": "Shadow", - "form_1129": "Purified", - "form_1130": "Normal", - "form_1131": "Shadow", - "form_1132": "Purified", - "form_1133": "Normal", - "form_1134": "Shadow", - "form_1135": "Purified", - "form_1136": "Normal", - "form_1137": "Shadow", - "form_1138": "Purified", - "form_1139": "Normal", - "form_1140": "Shadow", - "form_1141": "Purified", - "form_1142": "Normal", - "form_1143": "Shadow", - "form_1144": "Purified", - "form_1145": "Normal", - "form_1146": "Shadow", - "form_1147": "Purified", - "form_1148": "Normal", - "form_1149": "Shadow", - "form_1150": "Purified", - "form_1151": "Normal", - "form_1152": "Shadow", - "form_1153": "Purified", - "form_1154": "Normal", - "form_1155": "Shadow", - "form_1156": "Purified", - "form_1157": "Normal", - "form_1158": "Shadow", - "form_1159": "Purified", - "form_1160": "Normal", - "form_1161": "Shadow", - "form_1162": "Purified", - "form_1163": "Normal", - "form_1164": "Shadow", - "form_1165": "Purified", - "form_1166": "Normal", - "form_1167": "Shadow", - "form_1168": "Purified", - "form_1169": "Normal", - "form_1170": "Shadow", - "form_1171": "Purified", - "form_1172": "Normal", - "form_1173": "Shadow", - "form_1174": "Purified", - "form_1175": "Normal", - "form_1176": "Shadow", - "form_1177": "Purified", - "form_1178": "Normal", - "form_1179": "Shadow", - "form_1180": "Purified", - "form_1181": "Normal", - "form_1182": "Shadow", - "form_1183": "Purified", - "form_1184": "Normal", - "form_1185": "Shadow", - "form_1186": "Purified", - "form_1187": "Normal", - "form_1188": "Shadow", - "form_1189": "Purified", - "form_1190": "Normal", - "form_1191": "Shadow", - "form_1192": "Purified", - "form_1193": "Normal", - "form_1194": "Shadow", - "form_1195": "Purified", - "form_1196": "Normal", - "form_1197": "Shadow", - "form_1198": "Purified", - "form_1199": "Normal", - "form_1200": "Shadow", - "form_1201": "Purified", - "form_1202": "Normal", - "form_1203": "Shadow", - "form_1204": "Purified", - "form_1205": "Normal", - "form_1206": "Shadow", - "form_1207": "Purified", - "form_1208": "Normal", - "form_1209": "Shadow", - "form_1210": "Purified", - "form_1211": "Normal", - "form_1212": "Shadow", - "form_1213": "Purified", - "form_1214": "Normal", - "form_1215": "Shadow", - "form_1216": "Purified", - "form_1217": "Normal", - "form_1218": "Shadow", - "form_1219": "Purified", - "form_1220": "Normal", - "form_1221": "Shadow", - "form_1222": "Purified", - "form_1223": "Normal", - "form_1224": "Shadow", - "form_1225": "Purified", - "form_1226": "Normal", - "form_1227": "Shadow", - "form_1228": "Purified", - "form_1229": "Normal", - "form_1230": "Shadow", - "form_1231": "Purified", - "form_1232": "Normal", - "form_1233": "Shadow", - "form_1234": "Purified", - "form_1235": "Normal", - "form_1236": "Shadow", - "form_1237": "Purified", - "form_1238": "Normal", - "form_1239": "Shadow", - "form_1240": "Purified", - "form_1241": "Normal", - "form_1242": "Shadow", - "form_1243": "Purified", - "form_1244": "Normal", - "form_1245": "Shadow", - "form_1246": "Purified", - "form_1247": "Normal", - "form_1248": "Shadow", - "form_1249": "Purified", - "form_1250": "Normal", - "form_1251": "Shadow", - "form_1252": "Purified", - "form_1253": "Normal", - "form_1254": "Shadow", - "form_1255": "Purified", - "form_1256": "Normal", - "form_1257": "Shadow", - "form_1258": "Purified", - "form_1259": "Normal", - "form_1260": "Shadow", - "form_1261": "Purified", - "form_1262": "Normal", - "form_1263": "Shadow", - "form_1264": "Purified", - "form_1265": "Normal", - "form_1266": "Shadow", - "form_1267": "Purified", - "form_1268": "Normal", - "form_1269": "Shadow", - "form_1270": "Purified", - "form_1271": "Normal", - "form_1272": "Shadow", - "form_1273": "Purified", - "form_1274": "Normal", - "form_1275": "Shadow", - "form_1276": "Purified", - "form_1277": "Normal", - "form_1278": "Shadow", - "form_1279": "Purified", - "form_1280": "Normal", - "form_1281": "Shadow", - "form_1282": "Purified", - "form_1283": "Normal", - "form_1284": "Shadow", - "form_1285": "Purified", - "form_1286": "Normal", - "form_1287": "Shadow", - "form_1288": "Purified", - "form_1289": "Normal", - "form_1290": "Shadow", - "form_1291": "Purified", - "form_1292": "Normal", - "form_1293": "Shadow", - "form_1294": "Purified", - "form_1295": "Normal", - "form_1296": "Shadow", - "form_1297": "Purified", - "form_1298": "Normal", - "form_1299": "Shadow", - "form_1300": "Purified", - "form_1301": "Normal", - "form_1302": "Shadow", - "form_1303": "Purified", - "form_1304": "Normal", - "form_1305": "Shadow", - "form_1306": "Purified", - "form_1307": "Normal", - "form_1308": "Shadow", - "form_1309": "Purified", - "form_1310": "Normal", - "form_1311": "Shadow", - "form_1312": "Purified", - "form_1313": "Normal", - "form_1314": "Shadow", - "form_1315": "Purified", - "form_1316": "Normal", - "form_1317": "Shadow", - "form_1318": "Purified", - "form_1319": "Normal", - "form_1320": "Shadow", - "form_1321": "Purified", - "form_1322": "Normal", - "form_1323": "Shadow", - "form_1324": "Purified", - "form_1325": "Normal", - "form_1326": "Shadow", - "form_1327": "Purified", - "form_1328": "Normal", - "form_1329": "Shadow", - "form_1330": "Purified", - "form_1331": "Normal", - "form_1332": "Shadow", - "form_1333": "Purified", - "form_1334": "Normal", - "form_1335": "Shadow", - "form_1336": "Purified", - "form_1337": "Normal", - "form_1338": "Shadow", - "form_1339": "Purified", - "form_1340": "Normal", - "form_1341": "Shadow", - "form_1342": "Purified", - "form_1343": "Normal", - "form_1344": "Shadow", - "form_1345": "Purified", - "form_1346": "Normal", - "form_1347": "Shadow", - "form_1348": "Purified", - "form_1349": "Normal", - "form_1350": "Shadow", - "form_1351": "Purified", - "form_1352": "Normal", - "form_1353": "Shadow", - "form_1354": "Purified", - "form_1355": "Normal", - "form_1356": "Shadow", - "form_1357": "Purified", - "form_1358": "Normal", - "form_1359": "Shadow", - "form_1360": "Purified", - "form_1361": "Normal", - "form_1362": "Shadow", - "form_1363": "Purified", - "form_1364": "Normal", - "form_1365": "Shadow", - "form_1366": "Purified", - "form_1367": "Normal", - "form_1368": "Shadow", - "form_1369": "Purified", - "form_1370": "Normal", - "form_1371": "Shadow", - "form_1372": "Purified", - "form_1373": "Shadow", - "form_1374": "Purified", - "form_1375": "Shadow", - "form_1376": "Purified", - "form_1377": "Shadow", - "form_1378": "Purified", - "form_1379": "Normal", - "form_1380": "Shadow", - "form_1381": "Purified", - "form_1382": "Normal", - "form_1383": "Shadow", - "form_1384": "Purified", - "form_1385": "Normal", - "form_1386": "Shadow", - "form_1387": "Purified", - "form_1388": "Normal", - "form_1389": "Shadow", - "form_1390": "Purified", - "form_1391": "Normal", - "form_1392": "Shadow", - "form_1393": "Purified", - "form_1394": "Normal", - "form_1395": "Shadow", - "form_1396": "Purified", - "form_1397": "Normal", - "form_1398": "Shadow", - "form_1399": "Purified", - "form_1400": "Normal", - "form_1401": "Shadow", - "form_1402": "Purified", - "form_1403": "Normal", - "form_1404": "Shadow", - "form_1405": "Purified", - "form_1406": "Normal", - "form_1407": "Shadow", - "form_1408": "Purified", - "form_1409": "Normal", - "form_1410": "Shadow", - "form_1411": "Purified", - "form_1412": "Normal", - "form_1413": "Shadow", - "form_1414": "Purified", - "form_1415": "Normal", - "form_1416": "Shadow", - "form_1417": "Purified", - "form_1418": "Normal", - "form_1419": "Shadow", - "form_1420": "Purified", - "form_1421": "Normal", - "form_1422": "Shadow", - "form_1423": "Purified", - "form_1424": "Normal", - "form_1425": "Shadow", - "form_1426": "Purified", - "form_1427": "Normal", - "form_1428": "Shadow", - "form_1429": "Purified", - "form_1430": "Normal", - "form_1431": "Shadow", - "form_1432": "Purified", - "form_1433": "Normal", - "form_1434": "Shadow", - "form_1435": "Purified", - "form_1436": "Normal", - "form_1437": "Shadow", - "form_1438": "Purified", - "form_1439": "Normal", - "form_1440": "Shadow", - "form_1441": "Purified", - "form_1442": "Normal", - "form_1443": "Shadow", - "form_1444": "Purified", - "form_1445": "Normal", - "form_1446": "Shadow", - "form_1447": "Purified", - "form_1448": "Normal", - "form_1449": "Shadow", - "form_1450": "Purified", - "form_1451": "Normal", - "form_1452": "Shadow", - "form_1453": "Purified", - "form_1454": "Normal", - "form_1455": "Shadow", - "form_1456": "Purified", - "form_1457": "Normal", - "form_1458": "Shadow", - "form_1459": "Purified", - "form_1460": "Normal", - "form_1461": "Shadow", - "form_1462": "Purified", - "form_1463": "Normal", - "form_1464": "Shadow", - "form_1465": "Purified", - "form_1466": "Normal", - "form_1467": "Shadow", - "form_1468": "Purified", - "form_1469": "Normal", - "form_1470": "Shadow", - "form_1471": "Purified", - "form_1472": "Normal", - "form_1473": "Shadow", - "form_1474": "Purified", - "form_1475": "Normal", - "form_1476": "Shadow", - "form_1477": "Purified", - "form_1478": "Normal", - "form_1479": "Shadow", - "form_1480": "Purified", - "form_1481": "Normal", - "form_1482": "Shadow", - "form_1483": "Purified", - "form_1484": "Normal", - "form_1485": "Shadow", - "form_1486": "Purified", - "form_1487": "Normal", - "form_1488": "Shadow", - "form_1489": "Purified", - "form_1490": "Normal", - "form_1491": "Shadow", - "form_1492": "Purified", - "form_1493": "Normal", - "form_1494": "Shadow", - "form_1495": "Purified", - "form_1496": "Normal", - "form_1497": "Shadow", - "form_1498": "Purified", - "form_1499": "Normal", - "form_1500": "Shadow", - "form_1501": "Purified", - "form_1502": "Normal", - "form_1503": "Shadow", - "form_1504": "Purified", - "form_1505": "Normal", - "form_1506": "Shadow", - "form_1507": "Purified", - "form_1508": "Normal", - "form_1509": "Shadow", - "form_1510": "Purified", - "form_1511": "Normal", - "form_1512": "Shadow", - "form_1513": "Purified", - "form_1514": "Normal", - "form_1515": "Shadow", - "form_1516": "Purified", - "form_1517": "Normal", - "form_1518": "Shadow", - "form_1519": "Purified", - "form_1520": "Normal", - "form_1521": "Shadow", - "form_1522": "Purified", - "form_1523": "Normal", - "form_1524": "Shadow", - "form_1525": "Purified", - "form_1526": "Normal", - "form_1527": "Shadow", - "form_1528": "Purified", - "form_1529": "Normal", - "form_1530": "Shadow", - "form_1531": "Purified", - "form_1532": "Normal", - "form_1533": "Shadow", - "form_1534": "Purified", - "form_1535": "Normal", - "form_1536": "Shadow", - "form_1537": "Purified", - "form_1538": "Normal", - "form_1539": "Shadow", - "form_1540": "Purified", - "form_1541": "Normal", - "form_1542": "Shadow", - "form_1543": "Purified", - "form_1544": "Normal", - "form_1545": "Shadow", - "form_1546": "Purified", - "form_1547": "Normal", - "form_1548": "Shadow", - "form_1549": "Purified", - "form_1550": "Normal", - "form_1551": "Shadow", - "form_1552": "Purified", - "form_1553": "Normal", - "form_1554": "Shadow", - "form_1555": "Purified", - "form_1556": "Normal", - "form_1557": "Shadow", - "form_1558": "Purified", - "form_1559": "Normal", - "form_1560": "Shadow", - "form_1561": "Purified", - "form_1562": "Normal", - "form_1563": "Shadow", - "form_1564": "Purified", - "form_1565": "Normal", - "form_1566": "Shadow", - "form_1567": "Purified", - "form_1568": "Normal", - "form_1569": "Shadow", - "form_1570": "Purified", - "form_1571": "Normal", - "form_1572": "Shadow", - "form_1573": "Purified", - "form_1574": "Normal", - "form_1575": "Shadow", - "form_1576": "Purified", - "form_1577": "Normal", - "form_1578": "Shadow", - "form_1579": "Purified", - "form_1580": "Normal", - "form_1581": "Shadow", - "form_1582": "Purified", - "form_1583": "Normal", - "form_1584": "Shadow", - "form_1585": "Purified", - "form_1586": "Normal", - "form_1587": "Shadow", - "form_1588": "Purified", - "form_1589": "Normal", - "form_1590": "Shadow", - "form_1591": "Purified", - "form_1592": "Normal", - "form_1593": "Shadow", - "form_1594": "Purified", - "form_1595": "Normal", - "form_1596": "Shadow", - "form_1597": "Purified", - "form_1598": "Normal", - "form_1599": "Shadow", - "form_1600": "Purified", - "form_1601": "Normal", - "form_1602": "Shadow", - "form_1603": "Purified", - "form_1604": "Normal", - "form_1605": "Shadow", - "form_1606": "Purified", - "form_1607": "Normal", - "form_1608": "Shadow", - "form_1609": "Purified", - "form_1610": "Normal", - "form_1611": "Shadow", - "form_1612": "Purified", - "form_1613": "Normal", - "form_1614": "Shadow", - "form_1615": "Purified", - "form_1616": "Normal", - "form_1617": "Shadow", - "form_1618": "Purified", - "form_1619": "Normal", - "form_1620": "Shadow", - "form_1621": "Purified", - "form_1622": "Normal", - "form_1623": "Shadow", - "form_1624": "Purified", - "form_1625": "Normal", - "form_1626": "Shadow", - "form_1627": "Purified", - "form_1628": "Normal", - "form_1629": "Shadow", - "form_1630": "Purified", - "form_1631": "Normal", - "form_1632": "Shadow", - "form_1633": "Purified", - "form_1634": "Normal", - "form_1635": "Shadow", - "form_1636": "Purified", - "form_1637": "Normal", - "form_1638": "Shadow", - "form_1639": "Purified", - "form_1640": "Normal", - "form_1641": "Shadow", - "form_1642": "Purified", - "form_1643": "Normal", - "form_1644": "Shadow", - "form_1645": "Purified", - "form_1646": "Normal", - "form_1647": "Shadow", - "form_1648": "Purified", - "form_1649": "Normal", - "form_1650": "Shadow", - "form_1651": "Purified", - "form_1652": "Normal", - "form_1653": "Shadow", - "form_1654": "Purified", - "form_1655": "Normal", - "form_1656": "Shadow", - "form_1657": "Purified", - "form_1658": "Normal", - "form_1659": "Shadow", - "form_1660": "Purified", - "form_1661": "Normal", - "form_1662": "Shadow", - "form_1663": "Purified", - "form_1664": "Normal", - "form_1665": "Shadow", - "form_1666": "Purified", - "form_1667": "Normal", - "form_1668": "Shadow", - "form_1669": "Purified", - "form_1670": "Normal", - "form_1671": "Shadow", - "form_1672": "Purified", - "form_1673": "Normal", - "form_1674": "Shadow", - "form_1675": "Purified", - "form_1676": "Normal", - "form_1677": "Shadow", - "form_1678": "Purified", - "form_1679": "Normal", - "form_1680": "Shadow", - "form_1681": "Purified", - "form_1682": "Normal", - "form_1683": "Shadow", - "form_1684": "Purified", - "form_1685": "Normal", - "form_1686": "Shadow", - "form_1687": "Purified", - "form_1688": "Normal", - "form_1689": "Shadow", - "form_1690": "Purified", - "form_1691": "Normal", - "form_1692": "Shadow", - "form_1693": "Purified", - "form_1694": "Normal", - "form_1695": "Shadow", - "form_1696": "Purified", - "form_1697": "Normal", - "form_1698": "Shadow", - "form_1699": "Purified", - "form_1700": "Normal", - "form_1701": "Shadow", - "form_1702": "Purified", - "form_1703": "Normal", - "form_1704": "Shadow", - "form_1705": "Purified", - "form_1706": "Normal", - "form_1707": "Shadow", - "form_1708": "Purified", - "form_1709": "Normal", - "form_1710": "Shadow", - "form_1711": "Purified", - "form_1712": "Normal", - "form_1713": "Shadow", - "form_1714": "Purified", - "form_1715": "Normal", - "form_1716": "Shadow", - "form_1717": "Purified", - "form_1718": "Normal", - "form_1719": "Shadow", - "form_1720": "Purified", - "form_1721": "Normal", - "form_1722": "Shadow", - "form_1723": "Purified", - "form_1724": "Normal", - "form_1725": "Shadow", - "form_1726": "Purified", - "form_1727": "Normal", - "form_1728": "Shadow", - "form_1729": "Purified", - "form_1730": "Normal", - "form_1731": "Shadow", - "form_1732": "Purified", - "form_1733": "Normal", - "form_1734": "Shadow", - "form_1735": "Purified", - "form_1736": "Normal", - "form_1737": "Shadow", - "form_1738": "Purified", - "form_1739": "Normal", - "form_1740": "Shadow", - "form_1741": "Purified", - "form_1742": "Normal", - "form_1743": "Shadow", - "form_1744": "Purified", - "form_1745": "Normal", - "form_1746": "Shadow", - "form_1747": "Purified", - "form_1748": "Normal", - "form_1749": "Shadow", - "form_1750": "Purified", - "form_1751": "Normal", - "form_1752": "Shadow", - "form_1753": "Purified", - "form_1754": "Normal", - "form_1755": "Shadow", - "form_1756": "Purified", - "form_1757": "Normal", - "form_1758": "Shadow", - "form_1759": "Purified", - "form_1760": "Normal", - "form_1761": "Shadow", - "form_1762": "Purified", - "form_1763": "Normal", - "form_1764": "Shadow", - "form_1765": "Purified", - "form_1766": "Normal", - "form_1767": "Shadow", - "form_1768": "Purified", - "form_1769": "Normal", - "form_1770": "Shadow", - "form_1771": "Purified", - "form_1772": "Normal", - "form_1773": "Shadow", - "form_1774": "Purified", - "form_1775": "Normal", - "form_1776": "Shadow", - "form_1777": "Purified", - "form_1778": "Normal", - "form_1779": "Shadow", - "form_1780": "Purified", - "form_1781": "Normal", - "form_1782": "Shadow", - "form_1783": "Purified", - "form_1784": "Normal", - "form_1785": "Shadow", - "form_1786": "Purified", - "form_1787": "Normal", - "form_1788": "Shadow", - "form_1789": "Purified", - "form_1790": "Normal", - "form_1791": "Shadow", - "form_1792": "Purified", - "form_1793": "Normal", - "form_1794": "Shadow", - "form_1795": "Purified", - "form_1796": "Normal", - "form_1797": "Shadow", - "form_1798": "Purified", - "form_1799": "Normal", - "form_1800": "Shadow", - "form_1801": "Purified", - "form_1802": "Normal", - "form_1803": "Shadow", - "form_1804": "Purified", - "form_1805": "Normal", - "form_1806": "Shadow", - "form_1807": "Purified", - "form_1808": "Normal", - "form_1809": "Shadow", - "form_1810": "Purified", - "form_1811": "Normal", - "form_1812": "Shadow", - "form_1813": "Purified", - "form_1814": "Normal", - "form_1815": "Shadow", - "form_1816": "Purified", - "form_1817": "Normal", - "form_1818": "Shadow", - "form_1819": "Purified", - "form_1820": "Normal", - "form_1821": "Shadow", - "form_1822": "Purified", - "form_1823": "Normal", - "form_1824": "Shadow", - "form_1825": "Purified", - "form_1826": "Normal", - "form_1827": "Shadow", - "form_1828": "Purified", - "form_1829": "Normal", - "form_1830": "Shadow", - "form_1831": "Purified", - "form_1832": "Normal", - "form_1833": "Shadow", - "form_1834": "Purified", - "form_1835": "Normal", - "form_1836": "Shadow", - "form_1837": "Purified", - "form_1838": "Normal", - "form_1839": "Shadow", - "form_1840": "Purified", - "form_1841": "Normal", - "form_1842": "Shadow", - "form_1843": "Purified", - "form_1844": "Normal", - "form_1845": "Shadow", - "form_1846": "Purified", - "form_1847": "Normal", - "form_1848": "Shadow", - "form_1849": "Purified", - "form_1850": "Normal", - "form_1851": "Shadow", - "form_1852": "Purified", - "form_1853": "Normal", - "form_1854": "Shadow", - "form_1855": "Purified", - "form_1856": "Normal", - "form_1857": "Shadow", - "form_1858": "Purified", - "form_1859": "Normal", - "form_1860": "Shadow", - "form_1861": "Purified", - "form_1862": "Normal", - "form_1863": "Shadow", - "form_1864": "Purified", - "form_1865": "Normal", - "form_1866": "Shadow", - "form_1867": "Purified", - "form_1868": "Normal", - "form_1869": "Shadow", - "form_1870": "Purified", - "form_1871": "Normal", - "form_1872": "Shadow", - "form_1873": "Purified", - "form_1874": "Normal", - "form_1875": "Shadow", - "form_1876": "Purified", - "form_1877": "Normal", - "form_1878": "Shadow", - "form_1879": "Purified", - "form_1880": "Normal", - "form_1881": "Shadow", - "form_1882": "Purified", - "form_1883": "Normal", - "form_1884": "Shadow", - "form_1885": "Purified", - "form_1886": "Normal", - "form_1887": "Shadow", - "form_1888": "Purified", - "form_1889": "Normal", - "form_1890": "Shadow", - "form_1891": "Purified", - "form_1892": "Normal", - "form_1893": "Shadow", - "form_1894": "Purified", - "form_1895": "Normal", - "form_1896": "Shadow", - "form_1897": "Purified", - "form_1898": "Normal", - "form_1899": "Shadow", - "form_1900": "Purified", - "form_1901": "Normal", - "form_1902": "Shadow", - "form_1903": "Purified", - "form_1904": "Normal", - "form_1905": "Shadow", - "form_1906": "Purified", - "form_1907": "Normal", - "form_1908": "Shadow", - "form_1909": "Purified", - "form_1910": "Normal", - "form_1911": "Shadow", - "form_1912": "Purified", - "form_1913": "Normal", - "form_1914": "Shadow", - "form_1915": "Purified", - "form_1916": "Normal", - "form_1917": "Shadow", - "form_1918": "Purified", - "form_1919": "Normal", - "form_1920": "Shadow", - "form_1921": "Purified", - "form_1922": "Normal", - "form_1923": "Shadow", - "form_1924": "Purified", - "form_1925": "Normal", - "form_1926": "Shadow", - "form_1927": "Purified", - "form_1928": "Normal", - "form_1929": "Shadow", - "form_1930": "Purified", - "form_1931": "Normal", - "form_1932": "Shadow", - "form_1933": "Purified", - "form_1934": "Normal", - "form_1935": "Shadow", - "form_1936": "Purified", - "form_1937": "Normal", - "form_1938": "Shadow", - "form_1939": "Purified", - "form_1940": "Normal", - "form_1941": "Shadow", - "form_1942": "Purified", - "form_1943": "Normal", - "form_1944": "Shadow", - "form_1945": "Purified", - "form_1946": "Normal", - "form_1947": "Shadow", - "form_1948": "Purified", - "form_1949": "Normal", - "form_1950": "Shadow", - "form_1951": "Purified", - "form_1952": "Normal", - "form_1953": "Shadow", - "form_1954": "Purified", - "form_1955": "Normal", - "form_1956": "Shadow", - "form_1957": "Purified", - "form_1958": "Normal", - "form_1959": "Shadow", - "form_1960": "Purified", - "form_1961": "Normal", - "form_1962": "Shadow", - "form_1963": "Purified", - "form_1964": "Normal", - "form_1965": "Shadow", - "form_1966": "Purified", - "form_1967": "Normal", - "form_1968": "Shadow", - "form_1969": "Purified", - "form_1970": "Normal", - "form_1971": "Shadow", - "form_1972": "Purified", - "form_1973": "Normal", - "form_1974": "Shadow", - "form_1975": "Purified", - "form_1976": "Normal", - "form_1977": "Shadow", - "form_1978": "Purified", - "form_1979": "Normal", - "form_1980": "Shadow", - "form_1981": "Purified", - "form_1982": "Normal", - "form_1983": "Shadow", - "form_1984": "Purified", - "form_1985": "Normal", - "form_1986": "Shadow", - "form_1987": "Purified", - "form_1988": "Normal", - "form_1989": "Shadow", - "form_1990": "Purified", - "form_1991": "Normal", - "form_1992": "Shadow", - "form_1993": "Purified", - "form_1994": "Normal", - "form_1995": "Shadow", - "form_1996": "Purified", - "form_1997": "Normal", - "form_1998": "Shadow", - "form_1999": "Purified", - "form_2000": "Normal", - "form_2001": "Shadow", - "form_2002": "Purified", - "form_2003": "Normal", - "form_2004": "Shadow", - "form_2005": "Purified", - "form_2006": "Normal", - "form_2007": "Shadow", - "form_2008": "Purified", - "form_2009": "Normal", - "form_2010": "Shadow", - "form_2011": "Purified", - "form_2012": "Normal", - "form_2013": "Shadow", - "form_2014": "Purified", - "form_2015": "Normal", - "form_2016": "Shadow", - "form_2017": "Purified", - "form_2018": "Normal", - "form_2019": "Shadow", - "form_2020": "Purified", - "form_2021": "Normal", - "form_2022": "Shadow", - "form_2023": "Purified", - "form_2024": "Normal", - "form_2025": "Shadow", - "form_2026": "Purified", - "form_2027": "Normal", - "form_2028": "Shadow", - "form_2029": "Purified", - "form_2030": "Normal", - "form_2031": "Shadow", - "form_2032": "Purified", - "form_2033": "Normal", - "form_2034": "Shadow", - "form_2035": "Purified", - "form_2036": "Normal", - "form_2037": "Shadow", - "form_2038": "Purified", - "form_2039": "Normal", - "form_2040": "Shadow", - "form_2041": "Purified", - "form_2042": "Normal", - "form_2043": "Shadow", - "form_2044": "Purified", - "form_2045": "Normal", - "form_2046": "Shadow", - "form_2047": "Purified", - "form_2048": "Normal", - "form_2049": "Shadow", - "form_2050": "Purified", - "form_2051": "Normal", - "form_2052": "Shadow", - "form_2053": "Purified", - "form_2054": "Normal", - "form_2055": "Shadow", - "form_2056": "Purified", - "form_2057": "Normal", - "form_2058": "Shadow", - "form_2059": "Purified", - "form_2060": "Normal", - "form_2061": "Shadow", - "form_2062": "Purified", - "form_2063": "Normal", - "form_2064": "Shadow", - "form_2065": "Purified", - "form_2066": "Normal", - "form_2067": "Shadow", - "form_2068": "Purified", - "form_2069": "Normal", - "form_2070": "Shadow", - "form_2071": "Purified", - "form_2072": "Normal", - "form_2073": "Shadow", - "form_2074": "Purified", - "form_2075": "Normal", - "form_2076": "Shadow", - "form_2077": "Purified", - "form_2078": "Normal", - "form_2079": "Shadow", - "form_2080": "Purified", - "form_2081": "Normal", - "form_2082": "Shadow", - "form_2083": "Purified", - "form_2084": "Normal", - "form_2085": "Shadow", - "form_2086": "Purified", - "form_2087": "Normal", - "form_2088": "Shadow", - "form_2089": "Purified", - "form_2090": "Normal", - "form_2091": "Shadow", - "form_2092": "Purified", - "form_2093": "Normal", - "form_2094": "Shadow", - "form_2095": "Purified", - "form_2096": "Normal", - "form_2097": "Shadow", - "form_2098": "Purified", - "form_2099": "Normal", - "form_2100": "Shadow", - "form_2101": "Purified", - "form_2102": "Normal", - "form_2103": "Shadow", - "form_2104": "Purified", - "form_2105": "Normal", - "form_2106": "Shadow", - "form_2107": "Purified", - "form_2108": "Normal", - "form_2109": "Shadow", - "form_2110": "Purified", - "form_2111": "Normal", - "form_2112": "Shadow", - "form_2113": "Purified", - "form_2114": "Normal", - "form_2115": "Shadow", - "form_2116": "Purified", - "form_2117": "Normal", - "form_2118": "Shadow", - "form_2119": "Purified", - "form_2120": "Normal", - "form_2121": "Shadow", - "form_2122": "Purified", - "form_2123": "Normal", - "form_2124": "Shadow", - "form_2125": "Purified", - "form_2126": "Normal", - "form_2127": "Shadow", - "form_2128": "Purified", - "form_2129": "Normal", - "form_2130": "Shadow", - "form_2131": "Purified", - "form_2132": "Normal", - "form_2133": "Shadow", - "form_2134": "Purified", - "form_2135": "Normal", - "form_2136": "Shadow", - "form_2137": "Purified", - "form_2138": "Normal", - "form_2139": "Shadow", - "form_2140": "Purified", - "form_2141": "Normal", - "form_2142": "Shadow", - "form_2143": "Purified", - "form_2144": "Normal", - "form_2145": "Shadow", - "form_2146": "Purified", - "form_2147": "Normal", - "form_2148": "Shadow", - "form_2149": "Purified", - "form_2150": "Normal", - "form_2151": "Shadow", - "form_2152": "Purified", - "form_2153": "Normal", - "form_2154": "Shadow", - "form_2155": "Purified", - "form_2156": "Normal", - "form_2157": "Shadow", - "form_2158": "Purified", - "form_2159": "Normal", - "form_2160": "Shadow", - "form_2161": "Purified", - "form_2162": "Normal", - "form_2163": "Shadow", - "form_2164": "Purified", - "form_2165": "Normal", - "form_2166": "Shadow", - "form_2167": "Purified", - "form_2168": "Normal", - "form_2169": "Shadow", - "form_2170": "Purified", - "form_2171": "Normal", - "form_2172": "Shadow", - "form_2173": "Purified", - "form_2174": "Normal", - "form_2175": "Shadow", - "form_2176": "Purified", - "form_2177": "Normal", - "form_2178": "Shadow", - "form_2179": "Purified", - "form_2180": "Normal", - "form_2181": "Shadow", - "form_2182": "Purified", - "form_2183": "Normal", - "form_2184": "Shadow", - "form_2185": "Purified", - "form_2186": "Normal", - "form_2187": "Shadow", - "form_2188": "Purified", - "form_2189": "Normal", - "form_2190": "Shadow", - "form_2191": "Purified", - "form_2192": "Normal", - "form_2193": "Shadow", - "form_2194": "Purified", - "form_2195": "Normal", - "form_2196": "Shadow", - "form_2197": "Purified", - "form_2198": "Normal", - "form_2199": "Shadow", - "form_2200": "Purified", - "form_2201": "Normal", - "form_2202": "Shadow", - "form_2203": "Purified", - "form_2204": "Normal", - "form_2205": "Shadow", - "form_2206": "Purified", - "form_2207": "Normal", - "form_2208": "Shadow", - "form_2209": "Purified", - "form_2210": "Normal", - "form_2211": "Shadow", - "form_2212": "Purified", - "form_2213": "Normal", - "form_2214": "Shadow", - "form_2215": "Purified", - "form_2216": "Normal", - "form_2217": "Shadow", - "form_2218": "Purified", - "form_2219": "Normal", - "form_2220": "Shadow", - "form_2221": "Purified", - "form_2222": "Normal", - "form_2223": "Shadow", - "form_2224": "Purified", - "form_2225": "Normal", - "form_2226": "Shadow", - "form_2227": "Purified", - "form_2228": "Normal", - "form_2229": "Shadow", - "form_2230": "Purified", - "form_2231": "Normal", - "form_2232": "Shadow", - "form_2233": "Purified", - "form_2234": "Normal", - "form_2235": "Shadow", - "form_2236": "Purified", - "form_2237": "Normal", - "form_2238": "Shadow", - "form_2239": "Purified", - "form_2240": "Normal", - "form_2241": "Shadow", - "form_2242": "Purified", - "form_2243": "Normal", - "form_2244": "Shadow", - "form_2245": "Purified", - "form_2246": "Normal", - "form_2247": "Shadow", - "form_2248": "Purified", - "form_2249": "Normal", - "form_2250": "Shadow", - "form_2251": "Purified", - "form_2252": "Normal", - "form_2253": "Shadow", - "form_2254": "Purified", - "form_2255": "Normal", - "form_2256": "Shadow", - "form_2257": "Purified", - "form_2258": "Normal", - "form_2259": "Shadow", - "form_2260": "Purified", - "form_2261": "Normal", - "form_2262": "Shadow", - "form_2263": "Purified", - "form_2264": "Normal", - "form_2265": "Shadow", - "form_2266": "Purified", - "form_2267": "Normal", - "form_2268": "Shadow", - "form_2269": "Purified", - "form_2270": "Normal", - "form_2271": "Shadow", - "form_2272": "Purified", - "form_2273": "Normal", - "form_2274": "Shadow", - "form_2275": "Purified", - "form_2276": "Normal", - "form_2277": "Shadow", - "form_2278": "Purified", - "form_2279": "Normal", - "form_2280": "Shadow", - "form_2281": "Purified", - "form_2282": "Normal", - "form_2283": "Shadow", - "form_2284": "Purified", - "form_2285": "Normal", - "form_2286": "Shadow", - "form_2287": "Purified", - "form_2288": "Normal", - "form_2289": "Shadow", - "form_2290": "Purified", - "form_2291": "Normal", - "form_2292": "Shadow", - "form_2293": "Purified", - "form_2294": "Normal", - "form_2295": "Shadow", - "form_2296": "Purified", - "form_2297": "Normal", - "form_2298": "Shadow", - "form_2299": "Purified", - "form_2300": "Normal", - "form_2301": "Shadow", - "form_2302": "Purified", - "form_2303": "Normal", - "form_2304": "Shadow", - "form_2305": "Purified", - "form_2306": "Normal", - "form_2307": "Shadow", - "form_2308": "Purified", - "form_2309": "Normal", - "form_2310": "Shadow", - "form_2311": "Purified", - "form_2312": "Normal", - "form_2313": "Shadow", - "form_2314": "Purified", - "form_2315": "Normal", - "form_2316": "Shadow", - "form_2317": "Purified", - "form_2318": "Normal", - "form_2319": "Shadow", - "form_2320": "Purified", - "form_2321": "Normal", - "form_2322": "Shadow", - "form_2323": "Purified", - "form_2324": "Normal", - "form_2325": "Shadow", - "form_2326": "Purified", - "form_2327": "Spring 2020", - "form_2328": "Spring 2020", - "form_2329": "Spring 2020", - "form_2330": "Female", - "form_2331": "Female", - "form_2332": "Costume 2020", - "form_2333": "Costume 2020", - "form_2334": "Costume 2020", - "form_2335": "Galarian", - "form_2336": "Galarian", - "form_2337": "Galarian", - "form_2338": "Galarian", - "form_2339": "Galarian", - "form_2340": "Galarian", - "form_2341": "Galarian", - "form_2342": "Galarian Standard", - "form_2343": "Galarian Zen", - "form_2344": "Galarian", - "form_2345": "Galarian", - "form_2501": "Normal", - "form_2502": "Shadow", - "form_2503": "Purified", - "form_2504": "Normal", - "form_2505": "Shadow", - "form_2506": "Purified", - "form_2510": "Normal", - "form_2511": "Shadow", - "form_2512": "Purified", - "form_2516": "Normal", - "form_2517": "Shadow", - "form_2518": "Purified", - "form_2582": "Galarian", - "form_2583": "Galarian", - "form_2585": "Costume 2020", - "form_2586": "Costume 2020", - "form_2587": "Normal", - "form_2588": "Female", - "form_2589": "Normal", - "form_2590": "Female", - "form_2591": "Ten Percent", - "form_2592": "Fifty Percent", - "form_2593": "Complete", - "form_2594": "Archipelago", - "form_2595": "Continental", - "form_2596": "Elegant", - "form_2597": "Fancy", - "form_2598": "Garden", - "form_2599": "High Plains", - "form_2600": "Icy Snow", - "form_2601": "Jungle", - "form_2602": "Marine", - "form_2603": "Meadow", - "form_2604": "Modern", - "form_2605": "Monsoon", - "form_2606": "Ocean", - "form_2607": "Pokeball", - "form_2608": "Polar", - "form_2609": "River", - "form_2610": "Sandstorm", - "form_2611": "Savanna", - "form_2612": "Sun", - "form_2613": "Tundra", - "form_2614": "Red", - "form_2615": "Yellow", - "form_2616": "Orange", - "form_2617": "Blue", - "form_2618": "White", - "form_2619": "Red", - "form_2620": "Yellow", - "form_2621": "Orange", - "form_2622": "Blue", - "form_2623": "White", - "form_2624": "Red", - "form_2625": "Yellow", - "form_2626": "Orange", - "form_2627": "Blue", - "form_2628": "White", - "form_2629": "Natural", - "form_2630": "Heart", - "form_2631": "Star", - "form_2632": "Diamond", - "form_2633": "Debutante", - "form_2634": "Matron", - "form_2635": "Dandy", - "form_2636": "La Reine", - "form_2637": "Kabuki", - "form_2638": "Pharaoh", - "form_2639": "Shield", - "form_2640": "Blade", - "form_2641": "Small", - "form_2642": "Average", - "form_2643": "Large", - "form_2644": "Super", - "form_2645": "Small", - "form_2646": "Average", - "form_2647": "Large", - "form_2648": "Super", - "form_2649": "Neutral", - "form_2650": "Active", - "form_2651": "Confined", - "form_2652": "Unbound", - "form_2666": "Costume 2020 Deprecated", - "form_2668": "Costume 2020", - "form_2669": "Adventure Hat 2020", - "form_2670": "Winter 2020", - "form_2671": "Winter 2020", - "form_2672": "Winter 2020", - "form_2673": "2020", - "form_2674": "2021", - "costume_1": "Holiday", - "costume_2": "Party", - "costume_3": "Ash", - "costume_4": "Witch", - "costume_5": "Adventure", - "costume_6": "Black Cap", - "costume_7": "Flower", - "costume_8": "Toque", - "costume_9": "Detective", - "costume_10": "One Piece", - "costume_11": "Pokemon Day", - "move_1": "Éclair", - "move_2": "Vive-Attaque", - "move_3": "Griffe", - "move_4": "Flammèche", - "move_5": "Fouet Lianes", - "move_6": "Charge", - "move_7": "Tranch’Herbe", - "move_8": "Bélier", - "move_9": "Pistolet à O", - "move_10": "Morsure", - "move_11": "Écras’Face", - "move_12": "Torgnoles", - "move_13": "Ligotage", - "move_14": "Ultralaser", - "move_15": "Léchouille", - "move_16": "Vibrobscur", - "move_17": "Purédpois", - "move_18": "Détritus", - "move_19": "Griffe Acier", - "move_20": "Force Poigne", - "move_21": "Roue de Feu", - "move_22": "Mégacorne", - "move_23": "Cru-Ailes", - "move_24": "Lance-Flammes", - "move_25": "Coup Bas", - "move_26": "Tunnel", - "move_27": "Balayage", - "move_28": "Coup Croix", - "move_29": "Coupe Psycho", - "move_30": "Rafale Psy", - "move_31": "Séisme", - "move_32": "Lame de Roc", - "move_33": "Poing Glace", - "move_34": "Crève-Cœur", - "move_35": "Coup d’Jus", - "move_36": "Luminocanon", - "move_37": "Picpic", - "move_38": "Bec Vrille", - "move_39": "Laser Glace", - "move_40": "Blizzard", - "move_41": "Lame d’Air", - "move_42": "Canicule", - "move_43": "Double Dard", - "move_44": "Direct Toxik", - "move_45": "Aéropique", - "move_46": "Tunnelier", - "move_47": "Tempête Florale", - "move_48": "Méga-Sangsue", - "move_49": "Bourdon", - "move_50": "Crochet Venin", - "move_51": "Tranche-Nuit", - "move_52": "Tranche", - "move_53": "Bulles d’O", - "move_54": "Sacrifice", - "move_55": "Poing Karaté", - "move_56": "Balayette", - "move_57": "Aqua-Jet", - "move_58": "Hydro-Queue", - "move_59": "Canon Graine", - "move_60": "Choc Psy", - "move_61": "Jet-Pierres", - "move_62": "Pouvoir Antique", - "move_63": "Tomberoche", - "move_64": "Éboulement", - "move_65": "Rayon Gemme", - "move_66": "Ombre Portée", - "move_67": "Poing Ombre", - "move_68": "Griffe Ombre", - "move_69": "Vent Mauvais", - "move_70": "Ball’Ombre", - "move_71": "Pisto-Poing", - "move_72": "Bombe Aimant", - "move_73": "Ailes d’Acier", - "move_74": "Tête de Fer", - "move_75": "Parabocharge", - "move_76": "Étincelle", - "move_77": "Poing Éclair", - "move_78": "Fatal-Foudre", - "move_79": "Tonnerre", - "move_80": "Ouragan", - "move_81": "Draco-Souffle", - "move_82": "Draco-Choc", - "move_83": "Draco-Griffe", - "move_84": "Voix Enjôleuse", - "move_85": "Vampibaiser", - "move_86": "Éclat Magique", - "move_87": "Pouvoir Lunaire", - "move_88": "Câlinerie", - "move_89": "Poison Croix", - "move_90": "Bombe Beurk", - "move_91": "Cradovague", - "move_92": "Détricanon", - "move_93": "Tir de Boue", - "move_94": "Massd’Os", - "move_95": "Piétisol", - "move_96": "Boue-Bombe", - "move_97": "Taillade", - "move_98": "Piqûre", - "move_99": "Rayon Signal", - "move_100": "Plaie Croix", - "move_101": "Nitrocharge", - "move_102": "Rebondifeu", - "move_103": "Déflagration", - "move_104": "Saumure", - "move_105": "Vibraqua", - "move_106": "Ébullition", - "move_107": "Hydrocanon", - "move_108": "Psyko", - "move_109": "Frappe Psy", - "move_110": "Éclats Glace", - "move_111": "Vent Glace", - "move_112": "Souffle Glacé", - "move_113": "Vole-Vie", - "move_114": "Giga-Sangsue", - "move_115": "Poing Feu", - "move_116": "Lance-Soleil", - "move_117": "Lame Feuille", - "move_118": "Mégafouet", - "move_119": "Trempette", - "move_120": "Acide", - "move_121": "Tranch’Air", - "move_122": "Vent Violent", - "move_123": "Casse-Brique", - "move_124": "Coupe", - "move_125": "Météores", - "move_126": "Koud’Korne", - "move_127": "Écrasement", - "move_128": "Coup d’Boule", - "move_129": "Croc de Mort", - "move_130": "Souplesse", - "move_131": "Plaquage", - "move_132": "Repos", - "move_133": "Lutte", - "move_134": "Ébullition", - "move_135": "Hydrocanon", - "move_136": "Ligotage", - "move_137": "Ligotage", - "move_200": "Taillade", - "move_201": "Piqûre", - "move_202": "Morsure", - "move_203": "Coup Bas", - "move_204": "Draco-Souffle", - "move_205": "Éclair", - "move_206": "Étincelle", - "move_207": "Balayage", - "move_208": "Poing Karaté", - "move_209": "Flammèche", - "move_210": "Cru-Ailes", - "move_211": "Picpic", - "move_212": "Léchouille", - "move_213": "Griffe Ombre", - "move_214": "Fouet Lianes", - "move_215": "Tranch’Herbe", - "move_216": "Tir de Boue", - "move_217": "Éclats Glace", - "move_218": "Souffle Glacé", - "move_219": "Vive-Attaque", - "move_220": "Griffe", - "move_221": "Charge", - "move_222": "Écras’Face", - "move_223": "Coupe", - "move_224": "Direct Toxik", - "move_225": "Acide", - "move_226": "Coupe Psycho", - "move_227": "Jet-Pierres", - "move_228": "Griffe Acier", - "move_229": "Pisto-Poing", - "move_230": "Pistolet à O", - "move_231": "Trempette", - "move_232": "Pistolet à O", - "move_233": "Coud’Boue", - "move_234": "Psykoud’Boul", - "move_235": "Choc Mental", - "move_236": "Dard-Venin", - "move_237": "Écume", - "move_238": "Feinte", - "move_239": "Ailes d’Acier", - "move_240": "Crocs Feu", - "move_241": "Éclate-Roc", - "move_242": "Morphing", - "move_243": "Riposte", - "move_244": "Poudreuse", - "move_245": "Close Combat", - "move_246": "Dynamo-Poing", - "move_247": "Exploforce", - "move_248": "Onde Boréale", - "move_249": "Rayon Chargé", - "move_250": "Change Éclair", - "move_251": "Éclair Fou", - "move_252": "Élecanon", - "move_253": "Draco-Queue", - "move_254": "Avalanche", - "move_255": "Lame d’Air", - "move_256": "Rapace", - "move_257": "Piqué", - "move_258": "Tourbi-Sable", - "move_259": "Boule Roc", - "move_260": "Harcèlement", - "move_261": "Survinsecte", - "move_262": "Vent Argenté", - "move_263": "Étonnement", - "move_264": "Châtiment", - "move_265": "Ombre Nocturne", - "move_266": "Queue de Fer", - "move_267": "Gyroballe", - "move_268": "Tacle Lourd", - "move_269": "Danse Flammes", - "move_270": "Surchauffe", - "move_271": "Balle Graine", - "move_272": "Nœud Herbe", - "move_273": "Éco-Sphère", - "move_274": "Extrasenseur", - "move_275": "Prescience", - "move_276": "Voile Miroir", - "move_277": "Colère", - "move_278": "Aboiement", - "move_279": "Mâchouille", - "move_280": "Tricherie", - "move_281": "Puissance Cachée", - "move_287": "Bâillement", - "move_282": "Bélier", - "move_285": "Draco-Météore", - "move_283": "Cascade", - "move_284": "Surf", - "move_288": "Psycho-Boost", - "move_286": "Carnareket", - "move_290": "Lame Pangéenne", - "move_289": "Onde Originelle", - "move_291": "Cadeau", - "move_292": "Ball’Météo", - "move_293": "Ball’Météo", - "move_294": "Ball’Météo", - "move_295": "Ball’Météo", - "move_296": "Végé-Attaque", - "move_298": "Rafale Feu", - "move_297": "Anti-Air", - "move_299": "Hydroblast", - "move_300": "Dernier Recours", - "move_301": "Poing Météore", - "move_302": "Coud’Krâne", - "move_303": "Bombe Acide", - "move_304": "Telluriforce", - "move_305": "Pince-Masse", - "move_306": "Furie-Bond", - "move_307": "Éclate Griffe", - "move_308": "Octazooka", - "move_309": "Miroi-Tir", - "move_310": "Surpuissance", - "move_311": "Dard Mortel", - "move_312": "Phytomixeur", - "move_313": "Vampirisme", - "move_314": "Vampi-Poing", - "move_315": "Os Ombre", - "move_316": "Ocroupi", - "move_317": "Pied Brûleur", - "move_318": "Coqui-Lame", - "move_319": "Poing Boost", - "move_320": "Charme", - "move_321": "Giga Impact", - "move_322": "Frustration", - "move_323": "Retour", - "move_324": "Synchropeine", - "move_325": "Verrouillage", - "move_326": "Crocs Éclair", - "move_327": "Crocs Givre", - "move_328": "Empal’Korne", - "move_329": "Abîme", - "move_330": "Lame Sainte", - "move_331": "Flying Press", - "move_332": "Aurasphère", - "move_333": "Représailles", - "move_334": "Roc-Boulet", - "move_335": "Aéroblast", - "move_336": "Techno-Buster", - "move_337": "Techno-Buster", - "move_338": "Techno-Buster", - "move_339": "Techno-Buster", - "move_340": "Techno-Buster", - "move_341": "Vol" -} diff --git a/static/locale/it.json b/static/locale/it.json deleted file mode 100644 index 4c03a5a2..00000000 --- a/static/locale/it.json +++ /dev/null @@ -1,3628 +0,0 @@ -{ - "UNKNOWN_POKESTOP": "Unknown Pokestop", - "EMBED_DIRECTIONS": "DIRECTIONS", - "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{0} Subscriptions are not enabled in the config.", - "MSG_NOT_MODERATOR_OR_HIGHER": "{0} is not a moderator or higher thus you may not see other's subscription settings.", - "MSG_INVALID_USER_MENTION": "{0} Failed to retrieve user with mention tag {1}.", - "MSG_USER_NOT_SUBSCRIBED": "{0} is not currently subscribed to any Pokemon or Raid notifications.", - "TIME_YEARS": "years", - "TIME_DAYS": "days", - "TIME_HOURS": "hours", - "TIME_MINUTES": "minutes", - "TIME_SECONDS": "seconds", - "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", - "NOTIFY_ENABLE_DISABLE": "{0} has **{1}d** Pokemon, Raid, Quest, and Invasion notifications.", - "NOTIFY_INVALID_COORDINATES": "{0} Unable not parse {1} as valid coordinates.", - "NOTIFY_DISTANCE_SET": "{0} Notifications only within a {1} meters radius of location {2},{3} will be sent.", - "NOTIFY_PHONE_NUMBER_SET": "{0} Text message notifications for ultra rare Pokemon will be sent to {1}.", - "NOTIFY_INVALID_IV_VALUES": "{0} {1} is not a valid value. (Example: `0-15-6`)", - "NOTIFY_INVALID_ATTACK_VALUE": "{0} {1} is not a valid attack value. Must be between `0-15`.", - "NOTIFY_INVALID_DEFENSE_VALUE": "{0} {1} is not a valid defense value. Must be between `0-15`.", - "NOTIFY_INVALID_STAMINA_VALUE": "{0} {1} is not a valid stamina value. Must be between `0-15`.", - "NOTIFY_INVALID_IV_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_INVALID_GENDER": "{0} {1} is not a valid gender. (i.e. `m`, `f`, `*`)", - "NOTIFY_INVALID_LEVEL": "{0} {1} must be within the range of `0-35`.", - "NOTIFY_INVALID_MINIMUM_IV": "{0} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", - "NOTIFY_INVALID_MINIMUM_LEVEL": "{0} Failed to parse minimum level provided '{1}'.", - "NOTIFY_INVALID_MAXIMUM_LEVEL": "{0} Failed to parse maximum level provided '{1}'.", - "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{0} {1} are not valid Pokemon names or IDs.", - "NOTIFY_INVALID_POKEMON_ID_OR_NAME": "{0} {1} are not valid Pokemon name or ID.", - "NOTIFY_INVALID_POKEMON_ID": "{0} {1} is not a valid Pokemon id.", - "NOTIFY_COMMON_TYPE_POKEMON": "{0} {1} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {2}% or higher.", - "NOTIFY_INVALID_POKEMON_SPECIFIED": "{0} Unable to recognize any of the Pokemon you specified.", - "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{0} is not subscribed to any Pokemon notifications.", - "NOTIFY_INVALID_PVP_LEAGUE": "{0} {1} is not a valid PvP league. (Great or Ultra)", - "NOTIFY_INVALID_PVP_RANK_RANGE": "{0} {1} must be within the range of `0-4096`.", - "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokemon notifications.", - "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} Unable to remove {1} Pokemon subscriptions.", - "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Pokemon notifications.", - "NOTIFY_INVALID_CITY_ROLE": "{0} {1} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", - "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} has unsubscribed from **all** raid boss notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} has unsubscribed from **all** quest notifications.", - "NOTIFY_INVALID_INVASION_GENDER": "{0} Please specify a gender. i.e. `.invmenot fire-m` or `.invmenot water-f ontario or `.invmenot giovanni`", - "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Team Rocket invasion notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokestop lure notifications.", - "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{0} added gym subscription `{1}` to your list of gyms to receive raid notifications from.", - "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{0} already subscribed to gym notifications from {1}.", - "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{0} Removed gym subscription `{1}` from your list of gyms to receive notifications from.", - "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} has unsubscribed from **all** gym notifications.", - "NOTIFY_INVALID_ICON_STYLE": "{0} invalid icon style, type `{1}icons` to see a list of valid options.", - "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Raid subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Quest subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Team Rocket Invasion subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Gym subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Lure subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_ICON_STYLE_CHANGE": "{0} Icon style changed to **{1}**.", - "NOTIFY_IMPORT_UPLOAD_FILE": "{0} Please upload your subscriptions.json file to import now within 3 minutes...", - "NOTIFY_IMPORT_MALFORMED_DATA": "{0} Malformed subscription data, unable to import.", - "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{0} Unable to get uploaded attachment.", - "NOTIFY_IMPORT_SUCCESS": "{0} subscriptions were imported successfully.", - "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{0} does not have any subscriptions to export.", - "NOTIFY_EXPORT_SUCCESS": "{0} Download your subscription settings here.", - "NOTIFY_SETTINGS_EMBED_TITLE": "**{0} Notification Settings (Page: {1}/{2}):**", - "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{0}**", - "NOTIFY_SETTINGS_EMBED_CITIES": "Pokemon Feed Zones: ```{0}```", - "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", - "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{0} meters (Location: {1})", - "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{0}**", - "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {0}% ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {0} ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({0}/{1} used)", - "NOTIFY_FROM": "{0} (From: {1})", - "ALL_AREAS": "All Areas", - "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", - "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{0}feedme cityname` to assign yourself to that city role.*", - "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{0} {1} is not a valid city name, type `{2}cities` to see a list of available cities.", - "FEEDS_INVALID_CITY_NAME": "{0} {1} is not a valid city name.", - "FEEDS_ASSIGNED_ALL_ROLES": "{0} was assigned all city feed roles.", - "FEEDS_UNASSIGNED_ALL_ROLES": "{0} was unassigned all city feed roles.", - "FEEDS_ASSIGNED_ROLES": "{0} has joined role(s) **{1}**.", - "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{0} is already assigned to role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES": "{0} has been removed from role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{0} is not assigned to role(s) **{1}**.", - "FEEDS_PLEASE_WAIT": "{0} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", - "CHANNEL_MESSAGES_DELETED": "{0} Channel {1} messages have been deleted.", - "GYM_NO_POKESTOPS_CONVERTED": "{0} No Pokestops have been converted to Gyms.", - "GYM_NO_POKESTOPS_UPDATED": "{0} No Pokestops have been updated.", - "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", - "GYM_UNKNOWN_NAME": "Unknown Gym Name", - "GYM_UNKNOWN_IMAGE": "Unknown Image Url", - "GYM_POKESTOPS_CONVERTED": "{0} {1} Pokestops updated to Gyms.", - "GYM_POKESTOPS_DELETED": "{0} {1} Pokestops deleted.", - "GYM_NAME": "- **{0}**", - "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({1})] [[Gym Image]({0})]", - "SHINY_STATS_INVALID_CHANNEL": "{0} Shiny stats channel does not exist.", - "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {0}**]", - "SHINY_STATS_NEWLINE": "----------------------------------------------", - "SHINY_STATS_MESSAGE": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours with a **1/{4}** ratio.", - "SHINY_STATS_TOTAL_MESSAGE": "Found **{0}** total shinies out of **{1}** possiblities.", - "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{0}** total shinies out of **{1}** possiblities with a **1/{2}** ratio in total.", - "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", - "ERROR_NESTS_DISABLED": "{0} Nests disabled.", - "ERROR_NESTS_LIST": "{0} Unable to retrieve nest list.", - "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {0} of {1} total members.", - "ERROR_PARSING_USER_ID": "{0} Unable to recognize user id {1}.", - "DONATE_MESSAGE": "{0} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", - "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", - "SUBSCRIPTIONS_FROM_CITY": " from city **{0}**", - "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** lure notifications{2}.", - "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** lure notifications{2}.", - "ERROR_NO_LURE_SUBSCRIPTIONS": "{0} is not subscribed to any lure notifications{1}.", - "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** raid notifications{2}.", - "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** raid notifications{2}.", - "ERROR_NO_RAID_SUBSCRIPTIONS": "{0} is not subscribed to any raid notifications{1}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** quest notifications{2}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** quest notifications{2}.", - "ERROR_NO_QUEST_SUBSCRIPTIONS": "{0} is not subscribed to any quest notifications{1}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** Team Rocket invasion reward notifications{2}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Team Rocket invasion reward notifications{2}.", - "ERROR_NO_INVASION_SUBSCRIPTIONS": "{0} is not subscribed to any Team Rocket invasion notifications{1}.", - "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** {2} League PvP notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your {2} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} has unsubscribed from **all** {1} League PvP Pokemon notifications.", - "EVENT_POKEMON_SET": "{0} event Pokemon set to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_ADD": "{0} event Pokemon added to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_REMOVE": "{0} event Pokemon `{1}` removed.", - "DIRECT_MESSAGE_NOT_SUPPORTED": "{0} Direct message is not supported for this command.", - "PVP_GREAT_LEAGUE": "Great League", - "PVP_ULTRA_LEAGUE": "Ultra League", - "PVP_RANK": "Rank", - "PVP_CP": "CP", - "weather_0": "None", - "weather_1": "Clear", - "weather_2": "Rainy", - "weather_3": "PartlyCloudy", - "weather_4": "Cloudy", - "weather_5": "Windy", - "weather_6": "Snow", - "weather_7": "Fog", - "quest_1": "{0} time(s) First Catch OTD", - "quest_2": "{0} time(s) First Pokestop OTD", - "quest_3": "Multi Part Quest", - "quest_4": "Catch {0} Pokemon", - "quest_5": "Spin {0} Pokestop(s)", - "quest_6": "Hatch {0} Egg(s)", - "quest_7": "Complete {0} Gym Battle(s)", - "quest_8": "Complete {0} Raid Battle(s)", - "quest_9": "Complete {0} Quest", - "quest_10": "Transfer {0} Pokemon", - "quest_11": "Favorite {0} Pokemon", - "quest_12": "Autocomplete", - "quest_13": "Use {0} Berries on Pokemon", - "quest_14": "Power up {0} Pokemon", - "quest_15": "Evolve {0} Pokemon", - "quest_16": "Land {0} Throw(s)", - "quest_17": "Get {0} Buddy candy", - "quest_18": "Get {0} Badge(s)", - "quest_19": "Get {0} Level", - "quest_20": "Join {0} Raid Battle(s)", - "quest_21": "Complete {0} Battle(s)", - "quest_22": "Add {0} Friend(s)", - "quest_23": "Trade {0} Pokemon", - "quest_24": "Send {0} Gift(s)", - "quest_25": "Evolve {0} Into Specific Pokemon", - "quest_27": "Complete {0} Combat(s)", - "quest_28": "Take {0} Snapshot(s)", - "quest_29": "Battle {0} Team Rocket Battle(s)", - "quest_30": "Purify {0} Pokemon", - "quest_31": "Find {0} Team Rocket Invasion(s)", - "quest_32": "{0} time(s) First Grunt OTD", - "quest_33": "Feed your Buddy {0} times", - "quest_34": "Earn {0} hearts with your Buddy", - "quest_35": "Play {0} times with your Buddy", - "quest_36": "Increase your Buddy Level {0} times", - "quest_37": "Earn {0} Friendship points by Walking with your Buddy", - "quest_38": "Earn {0} Souvenirs from your Buddy", - "quest_39": "Use Incense {0} times", - "quest_40": "quest_40", - "quest_41": "quest_41", - "quest_42": "quest_42", - "quest_43": "Mega-Evolve {0} Pokemon", - "quest_44": "quest_44", - "quest_45": "quest_45", - "quest_57": "Take {0} Snapshot(s) of wild Pokemon", - "quest_reward_1": "{0:N0} XP", - "quest_reward_2": "{0} {1}", - "quest_reward_3": "{0:N0} Stardust", - "quest_reward_4": "{0} {1} Candy", - "quest_reward_5": "Avatar Clothing", - "quest_reward_6": "Quest", - "quest_reward_7": "{0}", - "quest_reward_8": "{0:N0} Pokecoins", - "quest_reward_11": "Sticker", - "quest_reward_12": "Mega Energy", - "quest_condition_1": "Type(s): {0}", - "quest_condition_2": "Pokemon: {0}", - "quest_condition_3": "Weather Boosted", - "quest_condition_4": "Daily Capture Bonus", - "quest_condition_5": "Daily Spin Bonus", - "quest_condition_6": "Win Raid", - "quest_condition_7": "Raid Level(s): {0}", - "quest_condition_8": "{0} Throw", - "quest_condition_9": "Win Gym Battle", - "quest_condition_10": "Super Effective Charge", - "quest_condition_11": "Item: {0}", - "quest_condition_12": "Unique Pokestop", - "quest_condition_13": "Quest Context", - "quest_condition_14": "{0} Throw In a Row", - "quest_condition_15": "Curve Ball", - "quest_condition_16": "Badge Type", - "quest_condition_17": "Player Level", - "quest_condition_18": "Win Battle", - "quest_condition_19": "New Friend", - "quest_condition_20": "Days In a Row", - "quest_condition_21": "Unique Pokemon", - "quest_condition_22": "NPC Combat", - "quest_condition_23": "PVP Combat", - "quest_condition_24": "Location", - "quest_condition_25": "Distance", - "quest_condition_26": "Pokemon Alignment(s): {0}", - "quest_condition_27": "Invasion Category(s): {0}", - "quest_condition_28": "With Buddy", - "quest_condition_37": "With Mega Evo Pokemon", - "alignment_1": "Shadow", - "alignment_2": "Purified", - "character_category_1": "Team Leader", - "character_category_2": "Grunt", - "throw_type_10": "Nice", - "throw_type_11": "Great", - "throw_type_12": "Excellent", - "throw_type_13": "Curve", - "item_1": "Poké Ball", - "item_2": "Mega Ball", - "item_3": "Ultra Ball", - "item_4": "Master Ball", - "item_5": "Premier Ball", - "item_101": "Pozione", - "item_102": "Superpozione", - "item_103": "Iperpozione", - "item_104": "Pozione Max", - "item_201": "Revitalizzante", - "item_202": "Revitalizzante Max", - "item_301": "Fortunuovo", - "item_401": "Aroma", - "item_402": "Spicy Incense", - "item_403": "Cool Incense", - "item_404": "Floral Incense", - "item_501": "Modulo esca", - "item_502": "Modulo esca glaciale", - "item_503": "Modulo esca silvestre", - "item_504": "Modulo esca magnetico", - "item_602": "Attacco X", - "item_603": "Difesa X", - "item_604": "UNDEFINED", - "item_701": "Baccalampon", - "item_702": "Baccamora", - "item_703": "Baccabana", - "item_704": "Baccapera", - "item_705": "Baccananas", - "item_706": "Baccalampon dorata", - "item_707": "Golden Nanab Berry", - "item_708": "Baccananas d'argento", - "item_801": "Fotocamera", - "item_901": "Incubatrice Uova ∞", - "item_902": "Incubatrice Uova", - "item_903": "Superincubatrice", - "item_1001": "Pokemon Storage Upgrade", - "item_1002": "Item Storage Upgrade", - "item_1101": "Pietrasolare", - "item_1102": "Roccia di Re", - "item_1103": "Metalcoperta", - "item_1104": "Squama Drago", - "item_1105": "Upgrade", - "item_1106": "Pietra Sinnoh", - "item_1107": "Pietra Unima", - "item_1201": "MT attacco veloce", - "item_1202": "MT attacco caricato", - "item_1301": "Caramella Rara", - "item_1401": "Biglietto raid", - "item_1402": "Biglietto lotta premium", - "item_1403": "Biglietto raid EX", - "item_1404": "Pezzo Stella", - "item_1405": "Pacco amicizia", - "lure_501": "Normal", - "lure_502": "Glacial", - "lure_503": "Mossy", - "lure_504": "Magnetic", - "grunt_0": "None", - "grunt_1": "Blanche", - "grunt_2": "Candela", - "grunt_3": "Spark", - "grunt_4": "Recluta (male)", - "grunt_5": "Recluta (female)", - "grunt_6": "Coleottero - Recluta (female)", - "grunt_7": "Coleottero - Recluta (male)", - "grunt_8": "Darkness - Female Grunt", - "grunt_9": "Darkness - Male Grunt", - "grunt_10": "Buio - Recluta (female)", - "grunt_11": "Buio - Recluta (male)", - "grunt_12": "Drago - Recluta (female)", - "grunt_13": "Drago - Recluta (male)", - "grunt_14": "Folletto - Recluta (female)", - "grunt_15": "Folletto - Recluta (male)", - "grunt_16": "Lotta - Recluta (female)", - "grunt_17": "Lotta - Recluta (male)", - "grunt_18": "Fuoco - Recluta (female)", - "grunt_19": "Fuoco - Recluta (male)", - "grunt_20": "Volante - Recluta (female)", - "grunt_21": "Volante - Recluta (male)", - "grunt_22": "Erba - Recluta (female)", - "grunt_23": "Erba - Recluta (male)", - "grunt_24": "Terra - Recluta (female)", - "grunt_25": "Terra - Recluta (male)", - "grunt_26": "Ghiaccio - Recluta (female)", - "grunt_27": "Ghiaccio - Recluta (male)", - "grunt_28": "Recluta (female)", - "grunt_29": "Recluta (male)", - "grunt_30": "Normale - Recluta (female)", - "grunt_31": "Normale - Recluta (male)", - "grunt_32": "Veleno - Recluta (female)", - "grunt_33": "Veleno - Recluta (male)", - "grunt_34": "Psico - Recluta (female)", - "grunt_35": "Psico - Recluta (male)", - "grunt_36": "Roccia - Recluta (female)", - "grunt_37": "Roccia - Recluta (male)", - "grunt_38": "Acqua - Recluta (female)", - "grunt_39": "Acqua - Recluta (male)", - "grunt_40": "Player Team Leader", - "grunt_41": "Cliff", - "grunt_42": "Arlo", - "grunt_43": "Sierra", - "grunt_44": "Giovanni", - "grunt_45": "Recluta camuffata (male)", - "grunt_46": "Recluta camuffata (female)", - "grunt_47": "Spettro - Recluta (female)", - "grunt_48": "Spettro - Recluta (male)", - "grunt_49": "Elettro - Recluta (female)", - "grunt_50": "Elettro - Recluta (male)", - "poke_0": "---", - "poke_1": "Bulbasaur", - "poke_2": "Ivysaur", - "poke_3": "Venusaur", - "poke_4": "Charmander", - "poke_5": "Charmeleon", - "poke_6": "Charizard", - "poke_7": "Squirtle", - "poke_8": "Wartortle", - "poke_9": "Blastoise", - "poke_10": "Caterpie", - "poke_11": "Metapod", - "poke_12": "Butterfree", - "poke_13": "Weedle", - "poke_14": "Kakuna", - "poke_15": "Beedrill", - "poke_16": "Pidgey", - "poke_17": "Pidgeotto", - "poke_18": "Pidgeot", - "poke_19": "Rattata", - "poke_20": "Raticate", - "poke_21": "Spearow", - "poke_22": "Fearow", - "poke_23": "Ekans", - "poke_24": "Arbok", - "poke_25": "Pikachu", - "poke_26": "Raichu", - "poke_27": "Sandshrew", - "poke_28": "Sandslash", - "poke_29": "Nidoran♀", - "poke_30": "Nidorina", - "poke_31": "Nidoqueen", - "poke_32": "Nidoran♂", - "poke_33": "Nidorino", - "poke_34": "Nidoking", - "poke_35": "Clefairy", - "poke_36": "Clefable", - "poke_37": "Vulpix", - "poke_38": "Ninetales", - "poke_39": "Jigglypuff", - "poke_40": "Wigglytuff", - "poke_41": "Zubat", - "poke_42": "Golbat", - "poke_43": "Oddish", - "poke_44": "Gloom", - "poke_45": "Vileplume", - "poke_46": "Paras", - "poke_47": "Parasect", - "poke_48": "Venonat", - "poke_49": "Venomoth", - "poke_50": "Diglett", - "poke_51": "Dugtrio", - "poke_52": "Meowth", - "poke_53": "Persian", - "poke_54": "Psyduck", - "poke_55": "Golduck", - "poke_56": "Mankey", - "poke_57": "Primeape", - "poke_58": "Growlithe", - "poke_59": "Arcanine", - "poke_60": "Poliwag", - "poke_61": "Poliwhirl", - "poke_62": "Poliwrath", - "poke_63": "Abra", - "poke_64": "Kadabra", - "poke_65": "Alakazam", - "poke_66": "Machop", - "poke_67": "Machoke", - "poke_68": "Machamp", - "poke_69": "Bellsprout", - "poke_70": "Weepinbell", - "poke_71": "Victreebel", - "poke_72": "Tentacool", - "poke_73": "Tentacruel", - "poke_74": "Geodude", - "poke_75": "Graveler", - "poke_76": "Golem", - "poke_77": "Ponyta", - "poke_78": "Rapidash", - "poke_79": "Slowpoke", - "poke_80": "Slowbro", - "poke_81": "Magnemite", - "poke_82": "Magneton", - "poke_83": "Farfetch’d", - "poke_84": "Doduo", - "poke_85": "Dodrio", - "poke_86": "Seel", - "poke_87": "Dewgong", - "poke_88": "Grimer", - "poke_89": "Muk", - "poke_90": "Shellder", - "poke_91": "Cloyster", - "poke_92": "Gastly", - "poke_93": "Haunter", - "poke_94": "Gengar", - "poke_95": "Onix", - "poke_96": "Drowzee", - "poke_97": "Hypno", - "poke_98": "Krabby", - "poke_99": "Kingler", - "poke_100": "Voltorb", - "poke_101": "Electrode", - "poke_102": "Exeggcute", - "poke_103": "Exeggutor", - "poke_104": "Cubone", - "poke_105": "Marowak", - "poke_106": "Hitmonlee", - "poke_107": "Hitmonchan", - "poke_108": "Lickitung", - "poke_109": "Koffing", - "poke_110": "Weezing", - "poke_111": "Rhyhorn", - "poke_112": "Rhydon", - "poke_113": "Chansey", - "poke_114": "Tangela", - "poke_115": "Kangaskhan", - "poke_116": "Horsea", - "poke_117": "Seadra", - "poke_118": "Goldeen", - "poke_119": "Seaking", - "poke_120": "Staryu", - "poke_121": "Starmie", - "poke_122": "Mr. Mime", - "poke_123": "Scyther", - "poke_124": "Jynx", - "poke_125": "Electabuzz", - "poke_126": "Magmar", - "poke_127": "Pinsir", - "poke_128": "Tauros", - "poke_129": "Magikarp", - "poke_130": "Gyarados", - "poke_131": "Lapras", - "poke_132": "Ditto", - "poke_133": "Eevee", - "poke_134": "Vaporeon", - "poke_135": "Jolteon", - "poke_136": "Flareon", - "poke_137": "Porygon", - "poke_138": "Omanyte", - "poke_139": "Omastar", - "poke_140": "Kabuto", - "poke_141": "Kabutops", - "poke_142": "Aerodactyl", - "poke_143": "Snorlax", - "poke_144": "Articuno", - "poke_145": "Zapdos", - "poke_146": "Moltres", - "poke_147": "Dratini", - "poke_148": "Dragonair", - "poke_149": "Dragonite", - "poke_150": "Mewtwo", - "poke_151": "Mew", - "poke_152": "Chikorita", - "poke_153": "Bayleef", - "poke_154": "Meganium", - "poke_155": "Cyndaquil", - "poke_156": "Quilava", - "poke_157": "Typhlosion", - "poke_158": "Totodile", - "poke_159": "Croconaw", - "poke_160": "Feraligatr", - "poke_161": "Sentret", - "poke_162": "Furret", - "poke_163": "Hoothoot", - "poke_164": "Noctowl", - "poke_165": "Ledyba", - "poke_166": "Ledian", - "poke_167": "Spinarak", - "poke_168": "Ariados", - "poke_169": "Crobat", - "poke_170": "Chinchou", - "poke_171": "Lanturn", - "poke_172": "Pichu", - "poke_173": "Cleffa", - "poke_174": "Igglybuff", - "poke_175": "Togepi", - "poke_176": "Togetic", - "poke_177": "Natu", - "poke_178": "Xatu", - "poke_179": "Mareep", - "poke_180": "Flaaffy", - "poke_181": "Ampharos", - "poke_182": "Bellossom", - "poke_183": "Marill", - "poke_184": "Azumarill", - "poke_185": "Sudowoodo", - "poke_186": "Politoed", - "poke_187": "Hoppip", - "poke_188": "Skiploom", - "poke_189": "Jumpluff", - "poke_190": "Aipom", - "poke_191": "Sunkern", - "poke_192": "Sunflora", - "poke_193": "Yanma", - "poke_194": "Wooper", - "poke_195": "Quagsire", - "poke_196": "Espeon", - "poke_197": "Umbreon", - "poke_198": "Murkrow", - "poke_199": "Slowking", - "poke_200": "Misdreavus", - "poke_201": "Unown", - "poke_202": "Wobbuffet", - "poke_203": "Girafarig", - "poke_204": "Pineco", - "poke_205": "Forretress", - "poke_206": "Dunsparce", - "poke_207": "Gligar", - "poke_208": "Steelix", - "poke_209": "Snubbull", - "poke_210": "Granbull", - "poke_211": "Qwilfish", - "poke_212": "Scizor", - "poke_213": "Shuckle", - "poke_214": "Heracross", - "poke_215": "Sneasel", - "poke_216": "Teddiursa", - "poke_217": "Ursaring", - "poke_218": "Slugma", - "poke_219": "Magcargo", - "poke_220": "Swinub", - "poke_221": "Piloswine", - "poke_222": "Corsola", - "poke_223": "Remoraid", - "poke_224": "Octillery", - "poke_225": "Delibird", - "poke_226": "Mantine", - "poke_227": "Skarmory", - "poke_228": "Houndour", - "poke_229": "Houndoom", - "poke_230": "Kingdra", - "poke_231": "Phanpy", - "poke_232": "Donphan", - "poke_233": "Porygon2", - "poke_234": "Stantler", - "poke_235": "Smeargle", - "poke_236": "Tyrogue", - "poke_237": "Hitmontop", - "poke_238": "Smoochum", - "poke_239": "Elekid", - "poke_240": "Magby", - "poke_241": "Miltank", - "poke_242": "Blissey", - "poke_243": "Raikou", - "poke_244": "Entei", - "poke_245": "Suicune", - "poke_246": "Larvitar", - "poke_247": "Pupitar", - "poke_248": "Tyranitar", - "poke_249": "Lugia", - "poke_250": "Ho-Oh", - "poke_251": "Celebi", - "poke_252": "Treecko", - "poke_253": "Grovyle", - "poke_254": "Sceptile", - "poke_255": "Torchic", - "poke_256": "Combusken", - "poke_257": "Blaziken", - "poke_258": "Mudkip", - "poke_259": "Marshtomp", - "poke_260": "Swampert", - "poke_261": "Poochyena", - "poke_262": "Mightyena", - "poke_263": "Zigzagoon", - "poke_264": "Linoone", - "poke_265": "Wurmple", - "poke_266": "Silcoon", - "poke_267": "Beautifly", - "poke_268": "Cascoon", - "poke_269": "Dustox", - "poke_270": "Lotad", - "poke_271": "Lombre", - "poke_272": "Ludicolo", - "poke_273": "Seedot", - "poke_274": "Nuzleaf", - "poke_275": "Shiftry", - "poke_276": "Taillow", - "poke_277": "Swellow", - "poke_278": "Wingull", - "poke_279": "Pelipper", - "poke_280": "Ralts", - "poke_281": "Kirlia", - "poke_282": "Gardevoir", - "poke_283": "Surskit", - "poke_284": "Masquerain", - "poke_285": "Shroomish", - "poke_286": "Breloom", - "poke_287": "Slakoth", - "poke_288": "Vigoroth", - "poke_289": "Slaking", - "poke_290": "Nincada", - "poke_291": "Ninjask", - "poke_292": "Shedinja", - "poke_293": "Whismur", - "poke_294": "Loudred", - "poke_295": "Exploud", - "poke_296": "Makuhita", - "poke_297": "Hariyama", - "poke_298": "Azurill", - "poke_299": "Nosepass", - "poke_300": "Skitty", - "poke_301": "Delcatty", - "poke_302": "Sableye", - "poke_303": "Mawile", - "poke_304": "Aron", - "poke_305": "Lairon", - "poke_306": "Aggron", - "poke_307": "Meditite", - "poke_308": "Medicham", - "poke_309": "Electrike", - "poke_310": "Manectric", - "poke_311": "Plusle", - "poke_312": "Minun", - "poke_313": "Volbeat", - "poke_314": "Illumise", - "poke_315": "Roselia", - "poke_316": "Gulpin", - "poke_317": "Swalot", - "poke_318": "Carvanha", - "poke_319": "Sharpedo", - "poke_320": "Wailmer", - "poke_321": "Wailord", - "poke_322": "Numel", - "poke_323": "Camerupt", - "poke_324": "Torkoal", - "poke_325": "Spoink", - "poke_326": "Grumpig", - "poke_327": "Spinda", - "poke_328": "Trapinch", - "poke_329": "Vibrava", - "poke_330": "Flygon", - "poke_331": "Cacnea", - "poke_332": "Cacturne", - "poke_333": "Swablu", - "poke_334": "Altaria", - "poke_335": "Zangoose", - "poke_336": "Seviper", - "poke_337": "Lunatone", - "poke_338": "Solrock", - "poke_339": "Barboach", - "poke_340": "Whiscash", - "poke_341": "Corphish", - "poke_342": "Crawdaunt", - "poke_343": "Baltoy", - "poke_344": "Claydol", - "poke_345": "Lileep", - "poke_346": "Cradily", - "poke_347": "Anorith", - "poke_348": "Armaldo", - "poke_349": "Feebas", - "poke_350": "Milotic", - "poke_351": "Castform", - "poke_352": "Kecleon", - "poke_353": "Shuppet", - "poke_354": "Banette", - "poke_355": "Duskull", - "poke_356": "Dusclops", - "poke_357": "Tropius", - "poke_358": "Chimecho", - "poke_359": "Absol", - "poke_360": "Wynaut", - "poke_361": "Snorunt", - "poke_362": "Glalie", - "poke_363": "Spheal", - "poke_364": "Sealeo", - "poke_365": "Walrein", - "poke_366": "Clamperl", - "poke_367": "Huntail", - "poke_368": "Gorebyss", - "poke_369": "Relicanth", - "poke_370": "Luvdisc", - "poke_371": "Bagon", - "poke_372": "Shelgon", - "poke_373": "Salamence", - "poke_374": "Beldum", - "poke_375": "Metang", - "poke_376": "Metagross", - "poke_377": "Regirock", - "poke_378": "Regice", - "poke_379": "Registeel", - "poke_380": "Latias", - "poke_381": "Latios", - "poke_382": "Kyogre", - "poke_383": "Groudon", - "poke_384": "Rayquaza", - "poke_385": "Jirachi", - "poke_386": "Deoxys", - "poke_387": "Turtwig", - "poke_388": "Grotle", - "poke_389": "Torterra", - "poke_390": "Chimchar", - "poke_391": "Monferno", - "poke_392": "Infernape", - "poke_393": "Piplup", - "poke_394": "Prinplup", - "poke_395": "Empoleon", - "poke_396": "Starly", - "poke_397": "Staravia", - "poke_398": "Staraptor", - "poke_399": "Bidoof", - "poke_400": "Bibarel", - "poke_401": "Kricketot", - "poke_402": "Kricketune", - "poke_403": "Shinx", - "poke_404": "Luxio", - "poke_405": "Luxray", - "poke_406": "Budew", - "poke_407": "Roserade", - "poke_408": "Cranidos", - "poke_409": "Rampardos", - "poke_410": "Shieldon", - "poke_411": "Bastiodon", - "poke_412": "Burmy", - "poke_413": "Wormadam", - "poke_414": "Mothim", - "poke_415": "Combee", - "poke_416": "Vespiquen", - "poke_417": "Pachirisu", - "poke_418": "Buizel", - "poke_419": "Floatzel", - "poke_420": "Cherubi", - "poke_421": "Cherrim", - "poke_422": "Shellos", - "poke_423": "Gastrodon", - "poke_424": "Ambipom", - "poke_425": "Drifloon", - "poke_426": "Drifblim", - "poke_427": "Buneary", - "poke_428": "Lopunny", - "poke_429": "Mismagius", - "poke_430": "Honchkrow", - "poke_431": "Glameow", - "poke_432": "Purugly", - "poke_433": "Chingling", - "poke_434": "Stunky", - "poke_435": "Skuntank", - "poke_436": "Bronzor", - "poke_437": "Bronzong", - "poke_438": "Bonsly", - "poke_439": "Mime Jr.", - "poke_440": "Happiny", - "poke_441": "Chatot", - "poke_442": "Spiritomb", - "poke_443": "Gible", - "poke_444": "Gabite", - "poke_445": "Garchomp", - "poke_446": "Munchlax", - "poke_447": "Riolu", - "poke_448": "Lucario", - "poke_449": "Hippopotas", - "poke_450": "Hippowdon", - "poke_451": "Skorupi", - "poke_452": "Drapion", - "poke_453": "Croagunk", - "poke_454": "Toxicroak", - "poke_455": "Carnivine", - "poke_456": "Finneon", - "poke_457": "Lumineon", - "poke_458": "Mantyke", - "poke_459": "Snover", - "poke_460": "Abomasnow", - "poke_461": "Weavile", - "poke_462": "Magnezone", - "poke_463": "Lickilicky", - "poke_464": "Rhyperior", - "poke_465": "Tangrowth", - "poke_466": "Electivire", - "poke_467": "Magmortar", - "poke_468": "Togekiss", - "poke_469": "Yanmega", - "poke_470": "Leafeon", - "poke_471": "Glaceon", - "poke_472": "Gliscor", - "poke_473": "Mamoswine", - "poke_474": "Porygon-Z", - "poke_475": "Gallade", - "poke_476": "Probopass", - "poke_477": "Dusknoir", - "poke_478": "Froslass", - "poke_479": "Rotom", - "poke_480": "Uxie", - "poke_481": "Mesprit", - "poke_482": "Azelf", - "poke_483": "Dialga", - "poke_484": "Palkia", - "poke_485": "Heatran", - "poke_486": "Regigigas", - "poke_487": "Giratina", - "poke_488": "Cresselia", - "poke_489": "Phione", - "poke_490": "Manaphy", - "poke_491": "Darkrai", - "poke_492": "Shaymin", - "poke_493": "Arceus", - "poke_494": "Victini", - "poke_495": "Snivy", - "poke_496": "Servine", - "poke_497": "Serperior", - "poke_498": "Tepig", - "poke_499": "Pignite", - "poke_500": "Emboar", - "poke_501": "Oshawott", - "poke_502": "Dewott", - "poke_503": "Samurott", - "poke_504": "Patrat", - "poke_505": "Watchog", - "poke_506": "Lillipup", - "poke_507": "Herdier", - "poke_508": "Stoutland", - "poke_509": "Purrloin", - "poke_510": "Liepard", - "poke_511": "Pansage", - "poke_512": "Simisage", - "poke_513": "Pansear", - "poke_514": "Simisear", - "poke_515": "Panpour", - "poke_516": "Simipour", - "poke_517": "Munna", - "poke_518": "Musharna", - "poke_519": "Pidove", - "poke_520": "Tranquill", - "poke_521": "Unfezant", - "poke_522": "Blitzle", - "poke_523": "Zebstrika", - "poke_524": "Roggenrola", - "poke_525": "Boldore", - "poke_526": "Gigalith", - "poke_527": "Woobat", - "poke_528": "Swoobat", - "poke_529": "Drilbur", - "poke_530": "Excadrill", - "poke_531": "Audino", - "poke_532": "Timburr", - "poke_533": "Gurdurr", - "poke_534": "Conkeldurr", - "poke_535": "Tympole", - "poke_536": "Palpitoad", - "poke_537": "Seismitoad", - "poke_538": "Throh", - "poke_539": "Sawk", - "poke_540": "Sewaddle", - "poke_541": "Swadloon", - "poke_542": "Leavanny", - "poke_543": "Venipede", - "poke_544": "Whirlipede", - "poke_545": "Scolipede", - "poke_546": "Cottonee", - "poke_547": "Whimsicott", - "poke_548": "Petilil", - "poke_549": "Lilligant", - "poke_550": "Basculin", - "poke_551": "Sandile", - "poke_552": "Krokorok", - "poke_553": "Krookodile", - "poke_554": "Darumaka", - "poke_555": "Darmanitan", - "poke_556": "Maractus", - "poke_557": "Dwebble", - "poke_558": "Crustle", - "poke_559": "Scraggy", - "poke_560": "Scrafty", - "poke_561": "Sigilyph", - "poke_562": "Yamask", - "poke_563": "Cofagrigus", - "poke_564": "Tirtouga", - "poke_565": "Carracosta", - "poke_566": "Archen", - "poke_567": "Archeops", - "poke_568": "Trubbish", - "poke_569": "Garbodor", - "poke_570": "Zorua", - "poke_571": "Zoroark", - "poke_572": "Minccino", - "poke_573": "Cinccino", - "poke_574": "Gothita", - "poke_575": "Gothorita", - "poke_576": "Gothitelle", - "poke_577": "Solosis", - "poke_578": "Duosion", - "poke_579": "Reuniclus", - "poke_580": "Ducklett", - "poke_581": "Swanna", - "poke_582": "Vanillite", - "poke_583": "Vanillish", - "poke_584": "Vanilluxe", - "poke_585": "Deerling", - "poke_586": "Sawsbuck", - "poke_587": "Emolga", - "poke_588": "Karrablast", - "poke_589": "Escavalier", - "poke_590": "Foongus", - "poke_591": "Amoonguss", - "poke_592": "Frillish", - "poke_593": "Jellicent", - "poke_594": "Alomomola", - "poke_595": "Joltik", - "poke_596": "Galvantula", - "poke_597": "Ferroseed", - "poke_598": "Ferrothorn", - "poke_599": "Klink", - "poke_600": "Klang", - "poke_601": "Klinklang", - "poke_602": "Tynamo", - "poke_603": "Eelektrik", - "poke_604": "Eelektross", - "poke_605": "Elgyem", - "poke_606": "Beheeyem", - "poke_607": "Litwick", - "poke_608": "Lampent", - "poke_609": "Chandelure", - "poke_610": "Axew", - "poke_611": "Fraxure", - "poke_612": "Haxorus", - "poke_613": "Cubchoo", - "poke_614": "Beartic", - "poke_615": "Cryogonal", - "poke_616": "Shelmet", - "poke_617": "Accelgor", - "poke_618": "Stunfisk", - "poke_619": "Mienfoo", - "poke_620": "Mienshao", - "poke_621": "Druddigon", - "poke_622": "Golett", - "poke_623": "Golurk", - "poke_624": "Pawniard", - "poke_625": "Bisharp", - "poke_626": "Bouffalant", - "poke_627": "Rufflet", - "poke_628": "Braviary", - "poke_629": "Vullaby", - "poke_630": "Mandibuzz", - "poke_631": "Heatmor", - "poke_632": "Durant", - "poke_633": "Deino", - "poke_634": "Zweilous", - "poke_635": "Hydreigon", - "poke_636": "Larvesta", - "poke_637": "Volcarona", - "poke_638": "Cobalion", - "poke_639": "Terrakion", - "poke_640": "Virizion", - "poke_641": "Tornadus", - "poke_642": "Thundurus", - "poke_643": "Reshiram", - "poke_644": "Zekrom", - "poke_645": "Landorus", - "poke_646": "Kyurem", - "poke_647": "Keldeo", - "poke_648": "Meloetta", - "poke_649": "Genesect", - "poke_650": "Chespin", - "poke_651": "Quilladin", - "poke_652": "Chesnaught", - "poke_653": "Fennekin", - "poke_654": "Braixen", - "poke_655": "Delphox", - "poke_656": "Froakie", - "poke_657": "Frogadier", - "poke_658": "Greninja", - "poke_659": "Bunnelby", - "poke_660": "Diggersby", - "poke_661": "Fletchling", - "poke_662": "Fletchinder", - "poke_663": "Talonflame", - "poke_664": "Scatterbug", - "poke_665": "Spewpa", - "poke_666": "Vivillon", - "poke_667": "Litleo", - "poke_668": "Pyroar", - "poke_669": "Flabébé", - "poke_670": "Floette", - "poke_671": "Florges", - "poke_672": "Skiddo", - "poke_673": "Gogoat", - "poke_674": "Pancham", - "poke_675": "Pangoro", - "poke_676": "Furfrou", - "poke_677": "Espurr", - "poke_678": "Meowstic", - "poke_679": "Honedge", - "poke_680": "Doublade", - "poke_681": "Aegislash", - "poke_682": "Spritzee", - "poke_683": "Aromatisse", - "poke_684": "Swirlix", - "poke_685": "Slurpuff", - "poke_686": "Inkay", - "poke_687": "Malamar", - "poke_688": "Binacle", - "poke_689": "Barbaracle", - "poke_690": "Skrelp", - "poke_691": "Dragalge", - "poke_692": "Clauncher", - "poke_693": "Clawitzer", - "poke_694": "Helioptile", - "poke_695": "Heliolisk", - "poke_696": "Tyrunt", - "poke_697": "Tyrantrum", - "poke_698": "Amaura", - "poke_699": "Aurorus", - "poke_700": "Sylveon", - "poke_701": "Hawlucha", - "poke_702": "Dedenne", - "poke_703": "Carbink", - "poke_704": "Goomy", - "poke_705": "Sliggoo", - "poke_706": "Goodra", - "poke_707": "Klefki", - "poke_708": "Phantump", - "poke_709": "Trevenant", - "poke_710": "Pumpkaboo", - "poke_711": "Gourgeist", - "poke_712": "Bergmite", - "poke_713": "Avalugg", - "poke_714": "Noibat", - "poke_715": "Noivern", - "poke_716": "Xerneas", - "poke_717": "Yveltal", - "poke_718": "Zygarde", - "poke_719": "Diancie", - "poke_720": "Hoopa", - "poke_721": "Volcanion", - "poke_722": "Rowlet", - "poke_723": "Dartrix", - "poke_724": "Decidueye", - "poke_725": "Litten", - "poke_726": "Torracat", - "poke_727": "Incineroar", - "poke_728": "Popplio", - "poke_729": "Brionne", - "poke_730": "Primarina", - "poke_731": "Pikipek", - "poke_732": "Trumbeak", - "poke_733": "Toucannon", - "poke_734": "Yungoos", - "poke_735": "Gumshoos", - "poke_736": "Grubbin", - "poke_737": "Charjabug", - "poke_738": "Vikavolt", - "poke_739": "Crabrawler", - "poke_740": "Crabominable", - "poke_741": "Oricorio", - "poke_742": "Cutiefly", - "poke_743": "Ribombee", - "poke_744": "Rockruff", - "poke_745": "Lycanroc", - "poke_746": "Wishiwashi", - "poke_747": "Mareanie", - "poke_748": "Toxapex", - "poke_749": "Mudbray", - "poke_750": "Mudsdale", - "poke_751": "Dewpider", - "poke_752": "Araquanid", - "poke_753": "Fomantis", - "poke_754": "Lurantis", - "poke_755": "Morelull", - "poke_756": "Shiinotic", - "poke_757": "Salandit", - "poke_758": "Salazzle", - "poke_759": "Stufful", - "poke_760": "Bewear", - "poke_761": "Bounsweet", - "poke_762": "Steenee", - "poke_763": "Tsareena", - "poke_764": "Comfey", - "poke_765": "Oranguru", - "poke_766": "Passimian", - "poke_767": "Wimpod", - "poke_768": "Golisopod", - "poke_769": "Sandygast", - "poke_770": "Palossand", - "poke_771": "Pyukumuku", - "poke_772": "Type: Null", - "poke_773": "Silvally", - "poke_774": "Minior", - "poke_775": "Komala", - "poke_776": "Turtonator", - "poke_777": "Togedemaru", - "poke_778": "Mimikyu", - "poke_779": "Bruxish", - "poke_780": "Drampa", - "poke_781": "Dhelmise", - "poke_782": "Jangmo-o", - "poke_783": "Hakamo-o", - "poke_784": "Kommo-o", - "poke_785": "Tapu Koko", - "poke_786": "Tapu Lele", - "poke_787": "Tapu Bulu", - "poke_788": "Tapu Fini", - "poke_789": "Cosmog", - "poke_790": "Cosmoem", - "poke_791": "Solgaleo", - "poke_792": "Lunala", - "poke_793": "Nihilego", - "poke_794": "Buzzwole", - "poke_795": "Pheromosa", - "poke_796": "Xurkitree", - "poke_797": "Celesteela", - "poke_798": "Kartana", - "poke_799": "Guzzlord", - "poke_800": "Necrozma", - "poke_801": "Magearna", - "poke_802": "Marshadow", - "poke_808": "Meltan", - "poke_809": "Melmetal", - "poke_862": "Obstagoon", - "poke_863": "Perrserker", - "poke_865": "Sirfetch’d", - "form_1": "A", - "form_2": "B", - "form_3": "C", - "form_4": "D", - "form_5": "E", - "form_6": "F", - "form_7": "G", - "form_8": "H", - "form_9": "I", - "form_10": "J", - "form_11": "K", - "form_12": "L", - "form_13": "M", - "form_14": "N", - "form_15": "O", - "form_16": "P", - "form_17": "Q", - "form_18": "R", - "form_19": "S", - "form_20": "T", - "form_21": "U", - "form_22": "V", - "form_23": "W", - "form_24": "X", - "form_25": "Y", - "form_26": "Z", - "form_27": "!", - "form_28": "?", - "form_29": "Normal", - "form_30": "Sunny", - "form_31": "Rainy", - "form_32": "Snowy", - "form_33": "Normal", - "form_34": "Attack", - "form_35": "Defense", - "form_36": "Speed", - "form_37": "00", - "form_38": "01", - "form_39": "02", - "form_40": "03", - "form_41": "04", - "form_42": "05", - "form_43": "06", - "form_44": "07", - "form_45": "Normal", - "form_46": "Alola", - "form_47": "Normal", - "form_48": "Alola", - "form_49": "Normal", - "form_50": "Alola", - "form_51": "Normal", - "form_52": "Alola", - "form_53": "Normal", - "form_54": "Alola", - "form_55": "Normal", - "form_56": "Alola", - "form_57": "Normal", - "form_58": "Alola", - "form_59": "Normal", - "form_60": "Alola", - "form_61": "Normal", - "form_62": "Alola", - "form_63": "Normal", - "form_64": "Alola", - "form_65": "Normal", - "form_66": "Alola", - "form_67": "Normal", - "form_68": "Alola", - "form_69": "Normal", - "form_70": "Alola", - "form_71": "Normal", - "form_72": "Alola", - "form_73": "Normal", - "form_74": "Alola", - "form_75": "Normal", - "form_76": "Alola", - "form_77": "Normal", - "form_78": "Alola", - "form_79": "Normal", - "form_80": "Alola", - "form_81": "Normal", - "form_82": "Frost", - "form_83": "Fan", - "form_84": "Mow", - "form_85": "Wash", - "form_86": "Heat", - "form_87": "Plant", - "form_88": "Sandy", - "form_89": "Trash", - "form_90": "Altered", - "form_91": "Origin", - "form_92": "Sky", - "form_93": "Land", - "form_94": "Overcast", - "form_95": "Sunny", - "form_96": "West Sea", - "form_97": "East Sea", - "form_98": "West Sea", - "form_99": "East Sea", - "form_100": "Normal", - "form_101": "Fighting", - "form_102": "Flying", - "form_103": "Poison", - "form_104": "Ground", - "form_105": "Rock", - "form_106": "Bug", - "form_107": "Ghost", - "form_108": "Steel", - "form_109": "Fire", - "form_110": "Water", - "form_111": "Grass", - "form_112": "Electric", - "form_113": "Psychic", - "form_114": "Ice", - "form_115": "Dragon", - "form_116": "Dark", - "form_117": "Fairy", - "form_118": "Plant", - "form_119": "Sandy", - "form_120": "Trash", - "form_121": "08", - "form_122": "09", - "form_123": "10", - "form_124": "11", - "form_125": "12", - "form_126": "13", - "form_127": "14", - "form_128": "15", - "form_129": "16", - "form_130": "17", - "form_131": "18", - "form_132": "19", - "form_133": "Armored", - "form_135": "Normal", - "form_136": "Red Striped", - "form_137": "Blue Striped", - "form_138": "Standard", - "form_139": "Zen", - "form_140": "Incarnate", - "form_141": "Therian", - "form_142": "Incarnate", - "form_143": "Therian", - "form_144": "Incarnate", - "form_145": "Therian", - "form_146": "Normal", - "form_147": "Black", - "form_148": "White", - "form_149": "Ordinary", - "form_150": "Resolute", - "form_151": "Aria", - "form_152": "Pirouette", - "form_153": "Shadow", - "form_154": "Purified", - "form_155": "Shadow", - "form_156": "Purified", - "form_157": "Normal", - "form_158": "Shadow", - "form_159": "Purified", - "form_160": "Normal", - "form_161": "Shadow", - "form_162": "Purified", - "form_163": "Normal", - "form_164": "Shadow", - "form_165": "Purified", - "form_166": "Normal", - "form_167": "Shadow", - "form_168": "Purified", - "form_169": "Normal", - "form_170": "Shadow", - "form_171": "Purified", - "form_172": "Normal", - "form_173": "Shadow", - "form_174": "Purified", - "form_175": "Normal", - "form_176": "Shadow", - "form_177": "Purified", - "form_178": "Normal", - "form_179": "Shadow", - "form_180": "Purified", - "form_181": "Normal", - "form_182": "Shadow", - "form_183": "Purified", - "form_184": "Normal", - "form_185": "Shadow", - "form_186": "Purified", - "form_187": "Normal", - "form_188": "Shadow", - "form_189": "Purified", - "form_190": "Normal", - "form_191": "Shadow", - "form_192": "Purified", - "form_193": "Normal", - "form_194": "Shadow", - "form_195": "Purified", - "form_196": "Normal", - "form_197": "Shadow", - "form_198": "Purified", - "form_199": "Normal", - "form_200": "Shadow", - "form_201": "Purified", - "form_202": "Normal", - "form_203": "Shadow", - "form_204": "Purified", - "form_205": "Normal", - "form_206": "Shadow", - "form_207": "Purified", - "form_208": "Normal", - "form_209": "Shadow", - "form_210": "Purified", - "form_211": "Normal", - "form_212": "Shadow", - "form_213": "Purified", - "form_214": "Normal", - "form_215": "Shadow", - "form_216": "Purified", - "form_217": "Normal", - "form_218": "Shadow", - "form_219": "Purified", - "form_220": "Shadow", - "form_221": "Purified", - "form_222": "Shadow", - "form_223": "Purified", - "form_224": "Normal", - "form_225": "Shadow", - "form_226": "Purified", - "form_227": "Shadow", - "form_228": "Purified", - "form_229": "Normal", - "form_230": "Shadow", - "form_231": "Purified", - "form_232": "Normal", - "form_233": "Shadow", - "form_234": "Purified", - "form_235": "Normal", - "form_236": "Shadow", - "form_237": "Purified", - "form_238": "Normal", - "form_239": "Shadow", - "form_240": "Purified", - "form_241": "Normal", - "form_242": "Shadow", - "form_243": "Purified", - "form_244": "Normal", - "form_245": "Shadow", - "form_246": "Purified", - "form_247": "Normal", - "form_248": "Shadow", - "form_249": "Purified", - "form_250": "Normal", - "form_251": "Shadow", - "form_252": "Purified", - "form_253": "Normal", - "form_254": "Shadow", - "form_255": "Purified", - "form_256": "Normal", - "form_257": "Shadow", - "form_258": "Purified", - "form_259": "Normal", - "form_260": "Shadow", - "form_261": "Purified", - "form_262": "Normal", - "form_263": "Shadow", - "form_264": "Purified", - "form_265": "Normal", - "form_266": "Shadow", - "form_267": "Purified", - "form_268": "Normal", - "form_269": "Shadow", - "form_270": "Purified", - "form_271": "Normal", - "form_272": "Shadow", - "form_273": "Purified", - "form_274": "Normal", - "form_275": "Shadow", - "form_276": "Purified", - "form_277": "Normal", - "form_278": "Shadow", - "form_279": "Purified", - "form_280": "Normal", - "form_281": "Shadow", - "form_282": "Purified", - "form_283": "Normal", - "form_284": "Shadow", - "form_285": "Purified", - "form_286": "Normal", - "form_287": "Shadow", - "form_288": "Purified", - "form_289": "Normal", - "form_290": "Shadow", - "form_291": "Purified", - "form_292": "Normal", - "form_293": "Shadow", - "form_294": "Purified", - "form_295": "Normal", - "form_296": "Shadow", - "form_297": "Purified", - "form_298": "Normal", - "form_299": "Shadow", - "form_300": "Purified", - "form_301": "Normal", - "form_302": "Shadow", - "form_303": "Purified", - "form_304": "Normal", - "form_305": "Shadow", - "form_306": "Purified", - "form_307": "Normal", - "form_308": "Shadow", - "form_309": "Purified", - "form_310": "Normal", - "form_311": "Shadow", - "form_312": "Purified", - "form_313": "Normal", - "form_314": "Shadow", - "form_315": "Purified", - "form_316": "Normal", - "form_317": "Shadow", - "form_318": "Purified", - "form_319": "Normal", - "form_320": "Shadow", - "form_321": "Purified", - "form_322": "Normal", - "form_323": "Shadow", - "form_324": "Purified", - "form_585": "Spring", - "form_586": "Summer", - "form_587": "Autumn", - "form_588": "Winter", - "form_589": "Spring", - "form_590": "Summer", - "form_591": "Autumn", - "form_592": "Winter", - "form_593": "Normal", - "form_594": "Shock", - "form_595": "Burn", - "form_596": "Chill", - "form_597": "Douse", - "form_598": "Normal", - "form_599": "Noevolve", - "form_600": "Normal", - "form_601": "Noevolve", - "form_602": "Normal", - "form_603": "Noevolve", - "form_604": "Noevolve", - "form_605": "Noevolve", - "form_606": "Noevolve", - "form_607": "Noevolve", - "form_608": "Noevolve", - "form_609": "Noevolve", - "form_610": "Normal", - "form_611": "Shadow", - "form_612": "Purified", - "form_613": "Normal", - "form_614": "Shadow", - "form_615": "Purified", - "form_616": "Normal", - "form_617": "Shadow", - "form_618": "Purified", - "form_619": "Normal", - "form_620": "Shadow", - "form_621": "Purified", - "form_622": "Normal", - "form_623": "Shadow", - "form_624": "Purified", - "form_625": "Normal", - "form_626": "Shadow", - "form_627": "Purified", - "form_628": "Normal", - "form_629": "Shadow", - "form_630": "Purified", - "form_631": "Normal", - "form_632": "Shadow", - "form_633": "Purified", - "form_634": "Normal", - "form_635": "Shadow", - "form_636": "Purified", - "form_637": "Normal", - "form_638": "Shadow", - "form_639": "Purified", - "form_640": "Normal", - "form_641": "Shadow", - "form_642": "Purified", - "form_643": "Normal", - "form_644": "Shadow", - "form_645": "Purified", - "form_646": "Normal", - "form_647": "Shadow", - "form_648": "Purified", - "form_649": "Normal", - "form_650": "Shadow", - "form_651": "Purified", - "form_652": "Normal", - "form_653": "Shadow", - "form_654": "Purified", - "form_655": "Normal", - "form_656": "Shadow", - "form_657": "Purified", - "form_658": "Normal", - "form_659": "Shadow", - "form_660": "Purified", - "form_661": "Normal", - "form_662": "Shadow", - "form_663": "Purified", - "form_664": "Normal", - "form_665": "Shadow", - "form_666": "Purified", - "form_667": "Normal", - "form_668": "Shadow", - "form_669": "Purified", - "form_670": "Normal", - "form_671": "Shadow", - "form_672": "Purified", - "form_673": "Shadow", - "form_674": "Purified", - "form_675": "Shadow", - "form_676": "Purified", - "form_677": "Normal", - "form_678": "Shadow", - "form_679": "Purified", - "form_680": "Normal", - "form_681": "Shadow", - "form_682": "Purified", - "form_683": "Normal", - "form_684": "Shadow", - "form_685": "Purified", - "form_686": "Shadow", - "form_687": "Purified", - "form_688": "Normal", - "form_689": "Shadow", - "form_690": "Purified", - "form_691": "Normal", - "form_692": "Shadow", - "form_693": "Purified", - "form_694": "Normal", - "form_695": "Shadow", - "form_696": "Purified", - "form_697": "Normal", - "form_698": "Shadow", - "form_699": "Purified", - "form_700": "Normal", - "form_701": "Shadow", - "form_702": "Purified", - "form_703": "Normal", - "form_704": "Shadow", - "form_705": "Purified", - "form_706": "Normal", - "form_707": "Shadow", - "form_708": "Purified", - "form_709": "Shadow", - "form_710": "Purified", - "form_711": "Shadow", - "form_712": "Purified", - "form_713": "Normal", - "form_714": "Shadow", - "form_715": "Purified", - "form_716": "Normal", - "form_717": "Shadow", - "form_718": "Purified", - "form_719": "Normal", - "form_720": "Shadow", - "form_721": "Purified", - "form_722": "Normal", - "form_723": "Shadow", - "form_724": "Purified", - "form_725": "Shadow", - "form_726": "Purified", - "form_727": "Shadow", - "form_728": "Purified", - "form_729": "Normal", - "form_730": "Shadow", - "form_731": "Purified", - "form_732": "Shadow", - "form_733": "Purified", - "form_734": "Normal", - "form_735": "Shadow", - "form_736": "Purified", - "form_737": "Normal", - "form_738": "Shadow", - "form_739": "Purified", - "form_740": "Normal", - "form_741": "Shadow", - "form_742": "Purified", - "form_743": "Normal", - "form_744": "Shadow", - "form_745": "Purified", - "form_746": "Normal", - "form_747": "Shadow", - "form_748": "Purified", - "form_749": "Normal", - "form_750": "Shadow", - "form_751": "Purified", - "form_752": "Normal", - "form_753": "Shadow", - "form_754": "Purified", - "form_755": "Normal", - "form_756": "Shadow", - "form_757": "Purified", - "form_758": "Normal", - "form_759": "Shadow", - "form_760": "Purified", - "form_761": "Normal", - "form_762": "Shadow", - "form_763": "Purified", - "form_764": "Normal", - "form_765": "Shadow", - "form_766": "Purified", - "form_767": "Normal", - "form_768": "Shadow", - "form_769": "Purified", - "form_770": "Normal", - "form_771": "Shadow", - "form_772": "Purified", - "form_773": "Normal", - "form_774": "Shadow", - "form_775": "Purified", - "form_776": "Normal", - "form_777": "Shadow", - "form_778": "Purified", - "form_779": "Normal", - "form_780": "Shadow", - "form_781": "Purified", - "form_782": "Normal", - "form_783": "Shadow", - "form_784": "Purified", - "form_785": "Normal", - "form_786": "Shadow", - "form_787": "Purified", - "form_788": "Normal", - "form_789": "Shadow", - "form_790": "Purified", - "form_791": "Normal", - "form_792": "Shadow", - "form_793": "Purified", - "form_794": "Normal", - "form_795": "Shadow", - "form_796": "Purified", - "form_797": "Normal", - "form_798": "Shadow", - "form_799": "Purified", - "form_800": "Normal", - "form_801": "Shadow", - "form_802": "Purified", - "form_803": "Normal", - "form_804": "Shadow", - "form_805": "Purified", - "form_806": "Normal", - "form_807": "Shadow", - "form_808": "Purified", - "form_809": "Normal", - "form_810": "Shadow", - "form_811": "Purified", - "form_812": "Normal", - "form_813": "Shadow", - "form_814": "Purified", - "form_815": "Normal", - "form_816": "Shadow", - "form_817": "Purified", - "form_818": "Normal", - "form_819": "Shadow", - "form_820": "Purified", - "form_821": "Normal", - "form_822": "Shadow", - "form_823": "Purified", - "form_824": "Normal", - "form_825": "Shadow", - "form_826": "Purified", - "form_827": "Normal", - "form_828": "Shadow", - "form_829": "Purified", - "form_830": "Normal", - "form_831": "Shadow", - "form_832": "Purified", - "form_833": "Normal", - "form_834": "Shadow", - "form_835": "Purified", - "form_836": "Normal", - "form_837": "Shadow", - "form_838": "Purified", - "form_839": "Normal", - "form_840": "Shadow", - "form_841": "Purified", - "form_842": "Shadow", - "form_843": "Purified", - "form_844": "Shadow", - "form_845": "Purified", - "form_846": "Normal", - "form_847": "Shadow", - "form_848": "Purified", - "form_849": "Normal", - "form_850": "Shadow", - "form_851": "Purified", - "form_852": "Normal", - "form_853": "Shadow", - "form_854": "Purified", - "form_855": "Normal", - "form_856": "Shadow", - "form_857": "Purified", - "form_858": "Normal", - "form_859": "Shadow", - "form_860": "Purified", - "form_861": "Normal", - "form_862": "Shadow", - "form_863": "Purified", - "form_864": "Normal", - "form_865": "Shadow", - "form_866": "Purified", - "form_867": "Normal", - "form_868": "Shadow", - "form_869": "Purified", - "form_870": "Normal", - "form_871": "Shadow", - "form_872": "Purified", - "form_873": "Normal", - "form_874": "Shadow", - "form_875": "Purified", - "form_876": "Normal", - "form_877": "Shadow", - "form_878": "Purified", - "form_879": "Normal", - "form_880": "Shadow", - "form_881": "Purified", - "form_882": "Shadow", - "form_883": "Purified", - "form_884": "Shadow", - "form_885": "Purified", - "form_886": "Shadow", - "form_887": "Purified", - "form_888": "Normal", - "form_889": "Shadow", - "form_890": "Purified", - "form_891": "Normal", - "form_892": "Shadow", - "form_893": "Purified", - "form_894": "Fall 2019", - "form_895": "Fall 2019", - "form_896": "Fall 2019", - "form_897": "Fall 2019", - "form_898": "Normal", - "form_899": "Shadow", - "form_900": "Purified", - "form_901": "Vs 2019", - "form_902": "Normal", - "form_903": "Shadow", - "form_904": "Purified", - "form_905": "Normal", - "form_906": "Shadow", - "form_907": "Purified", - "form_908": "Normal", - "form_909": "Shadow", - "form_910": "Purified", - "form_911": "Normal", - "form_912": "Shadow", - "form_913": "Purified", - "form_914": "Normal", - "form_915": "Shadow", - "form_916": "Purified", - "form_917": "Normal", - "form_918": "Shadow", - "form_919": "Purified", - "form_920": "Normal", - "form_921": "Shadow", - "form_922": "Purified", - "form_923": "Normal", - "form_924": "Shadow", - "form_925": "Purified", - "form_926": "Normal", - "form_927": "Shadow", - "form_928": "Purified", - "form_929": "Normal", - "form_930": "Shadow", - "form_931": "Purified", - "form_932": "Normal", - "form_933": "Shadow", - "form_934": "Purified", - "form_935": "Normal", - "form_936": "Shadow", - "form_937": "Purified", - "form_938": "Normal", - "form_939": "Shadow", - "form_940": "Purified", - "form_941": "Normal", - "form_942": "Shadow", - "form_943": "Purified", - "form_944": "Galarian", - "form_945": "Normal", - "form_946": "Galarian", - "form_947": "Normal", - "form_948": "Galarian", - "form_949": "Copy 2019", - "form_950": "Copy 2019", - "form_951": "Copy 2019", - "form_952": "Copy 2019", - "form_953": "Normal", - "form_954": "Shadow", - "form_955": "Purified", - "form_956": "Normal", - "form_957": "Shadow", - "form_958": "Purified", - "form_959": "Normal", - "form_960": "Shadow", - "form_961": "Purified", - "form_962": "Normal", - "form_963": "Shadow", - "form_964": "Purified", - "form_965": "Normal", - "form_966": "Shadow", - "form_967": "Purified", - "form_968": "Normal", - "form_969": "Shadow", - "form_970": "Purified", - "form_971": "Normal", - "form_972": "Shadow", - "form_973": "Purified", - "form_974": "Normal", - "form_975": "Shadow", - "form_976": "Purified", - "form_977": "Shadow", - "form_978": "Purified", - "form_979": "Shadow", - "form_980": "Purified", - "form_981": "Normal", - "form_982": "Shadow", - "form_983": "Purified", - "form_984": "Normal", - "form_985": "Shadow", - "form_986": "Purified", - "form_987": "Normal", - "form_988": "Shadow", - "form_989": "Purified", - "form_990": "Normal", - "form_991": "Shadow", - "form_992": "Purified", - "form_993": "Normal", - "form_994": "Shadow", - "form_995": "Purified", - "form_996": "Normal", - "form_997": "Shadow", - "form_998": "Purified", - "form_999": "Normal", - "form_1000": "Shadow", - "form_1001": "Purified", - "form_1002": "Normal", - "form_1003": "Shadow", - "form_1004": "Purified", - "form_1005": "Normal", - "form_1006": "Shadow", - "form_1007": "Purified", - "form_1008": "Normal", - "form_1009": "Shadow", - "form_1010": "Purified", - "form_1011": "Normal", - "form_1012": "Shadow", - "form_1013": "Purified", - "form_1014": "Normal", - "form_1015": "Shadow", - "form_1016": "Purified", - "form_1017": "Normal", - "form_1018": "Shadow", - "form_1019": "Purified", - "form_1020": "Normal", - "form_1021": "Shadow", - "form_1022": "Purified", - "form_1023": "Normal", - "form_1024": "Shadow", - "form_1025": "Purified", - "form_1026": "Normal", - "form_1027": "Shadow", - "form_1028": "Purified", - "form_1029": "Normal", - "form_1030": "Shadow", - "form_1031": "Purified", - "form_1032": "Normal", - "form_1033": "Shadow", - "form_1034": "Purified", - "form_1035": "Normal", - "form_1036": "Shadow", - "form_1037": "Purified", - "form_1038": "Normal", - "form_1039": "Shadow", - "form_1040": "Purified", - "form_1041": "Normal", - "form_1042": "Shadow", - "form_1043": "Purified", - "form_1044": "Normal", - "form_1045": "Shadow", - "form_1046": "Purified", - "form_1047": "Normal", - "form_1048": "Shadow", - "form_1049": "Purified", - "form_1050": "Normal", - "form_1051": "Shadow", - "form_1052": "Purified", - "form_1053": "Normal", - "form_1054": "Shadow", - "form_1055": "Purified", - "form_1056": "Normal", - "form_1057": "Shadow", - "form_1058": "Purified", - "form_1059": "Normal", - "form_1060": "Shadow", - "form_1061": "Purified", - "form_1062": "Normal", - "form_1063": "Shadow", - "form_1064": "Purified", - "form_1065": "Normal", - "form_1066": "Shadow", - "form_1067": "Purified", - "form_1068": "Normal", - "form_1069": "Shadow", - "form_1070": "Purified", - "form_1071": "Normal", - "form_1072": "Shadow", - "form_1073": "Purified", - "form_1074": "Normal", - "form_1075": "Shadow", - "form_1076": "Purified", - "form_1077": "Normal", - "form_1078": "Shadow", - "form_1079": "Purified", - "form_1080": "Normal", - "form_1081": "Shadow", - "form_1082": "Purified", - "form_1083": "Normal", - "form_1084": "Shadow", - "form_1085": "Purified", - "form_1086": "Normal", - "form_1087": "Shadow", - "form_1088": "Purified", - "form_1089": "Normal", - "form_1090": "Shadow", - "form_1091": "Purified", - "form_1092": "Normal", - "form_1093": "Shadow", - "form_1094": "Purified", - "form_1095": "Normal", - "form_1096": "Shadow", - "form_1097": "Purified", - "form_1098": "Normal", - "form_1099": "Shadow", - "form_1100": "Purified", - "form_1101": "Normal", - "form_1102": "Shadow", - "form_1103": "Purified", - "form_1104": "Normal", - "form_1105": "Shadow", - "form_1106": "Purified", - "form_1107": "Normal", - "form_1108": "Shadow", - "form_1109": "Purified", - "form_1110": "Normal", - "form_1111": "Shadow", - "form_1112": "Purified", - "form_1113": "Shadow", - "form_1114": "Purified", - "form_1115": "Normal", - "form_1116": "Shadow", - "form_1117": "Purified", - "form_1118": "Normal", - "form_1119": "Shadow", - "form_1120": "Purified", - "form_1121": "Normal", - "form_1122": "Shadow", - "form_1123": "Purified", - "form_1124": "Normal", - "form_1125": "Shadow", - "form_1126": "Purified", - "form_1127": "Normal", - "form_1128": "Shadow", - "form_1129": "Purified", - "form_1130": "Normal", - "form_1131": "Shadow", - "form_1132": "Purified", - "form_1133": "Normal", - "form_1134": "Shadow", - "form_1135": "Purified", - "form_1136": "Normal", - "form_1137": "Shadow", - "form_1138": "Purified", - "form_1139": "Normal", - "form_1140": "Shadow", - "form_1141": "Purified", - "form_1142": "Normal", - "form_1143": "Shadow", - "form_1144": "Purified", - "form_1145": "Normal", - "form_1146": "Shadow", - "form_1147": "Purified", - "form_1148": "Normal", - "form_1149": "Shadow", - "form_1150": "Purified", - "form_1151": "Normal", - "form_1152": "Shadow", - "form_1153": "Purified", - "form_1154": "Normal", - "form_1155": "Shadow", - "form_1156": "Purified", - "form_1157": "Normal", - "form_1158": "Shadow", - "form_1159": "Purified", - "form_1160": "Normal", - "form_1161": "Shadow", - "form_1162": "Purified", - "form_1163": "Normal", - "form_1164": "Shadow", - "form_1165": "Purified", - "form_1166": "Normal", - "form_1167": "Shadow", - "form_1168": "Purified", - "form_1169": "Normal", - "form_1170": "Shadow", - "form_1171": "Purified", - "form_1172": "Normal", - "form_1173": "Shadow", - "form_1174": "Purified", - "form_1175": "Normal", - "form_1176": "Shadow", - "form_1177": "Purified", - "form_1178": "Normal", - "form_1179": "Shadow", - "form_1180": "Purified", - "form_1181": "Normal", - "form_1182": "Shadow", - "form_1183": "Purified", - "form_1184": "Normal", - "form_1185": "Shadow", - "form_1186": "Purified", - "form_1187": "Normal", - "form_1188": "Shadow", - "form_1189": "Purified", - "form_1190": "Normal", - "form_1191": "Shadow", - "form_1192": "Purified", - "form_1193": "Normal", - "form_1194": "Shadow", - "form_1195": "Purified", - "form_1196": "Normal", - "form_1197": "Shadow", - "form_1198": "Purified", - "form_1199": "Normal", - "form_1200": "Shadow", - "form_1201": "Purified", - "form_1202": "Normal", - "form_1203": "Shadow", - "form_1204": "Purified", - "form_1205": "Normal", - "form_1206": "Shadow", - "form_1207": "Purified", - "form_1208": "Normal", - "form_1209": "Shadow", - "form_1210": "Purified", - "form_1211": "Normal", - "form_1212": "Shadow", - "form_1213": "Purified", - "form_1214": "Normal", - "form_1215": "Shadow", - "form_1216": "Purified", - "form_1217": "Normal", - "form_1218": "Shadow", - "form_1219": "Purified", - "form_1220": "Normal", - "form_1221": "Shadow", - "form_1222": "Purified", - "form_1223": "Normal", - "form_1224": "Shadow", - "form_1225": "Purified", - "form_1226": "Normal", - "form_1227": "Shadow", - "form_1228": "Purified", - "form_1229": "Normal", - "form_1230": "Shadow", - "form_1231": "Purified", - "form_1232": "Normal", - "form_1233": "Shadow", - "form_1234": "Purified", - "form_1235": "Normal", - "form_1236": "Shadow", - "form_1237": "Purified", - "form_1238": "Normal", - "form_1239": "Shadow", - "form_1240": "Purified", - "form_1241": "Normal", - "form_1242": "Shadow", - "form_1243": "Purified", - "form_1244": "Normal", - "form_1245": "Shadow", - "form_1246": "Purified", - "form_1247": "Normal", - "form_1248": "Shadow", - "form_1249": "Purified", - "form_1250": "Normal", - "form_1251": "Shadow", - "form_1252": "Purified", - "form_1253": "Normal", - "form_1254": "Shadow", - "form_1255": "Purified", - "form_1256": "Normal", - "form_1257": "Shadow", - "form_1258": "Purified", - "form_1259": "Normal", - "form_1260": "Shadow", - "form_1261": "Purified", - "form_1262": "Normal", - "form_1263": "Shadow", - "form_1264": "Purified", - "form_1265": "Normal", - "form_1266": "Shadow", - "form_1267": "Purified", - "form_1268": "Normal", - "form_1269": "Shadow", - "form_1270": "Purified", - "form_1271": "Normal", - "form_1272": "Shadow", - "form_1273": "Purified", - "form_1274": "Normal", - "form_1275": "Shadow", - "form_1276": "Purified", - "form_1277": "Normal", - "form_1278": "Shadow", - "form_1279": "Purified", - "form_1280": "Normal", - "form_1281": "Shadow", - "form_1282": "Purified", - "form_1283": "Normal", - "form_1284": "Shadow", - "form_1285": "Purified", - "form_1286": "Normal", - "form_1287": "Shadow", - "form_1288": "Purified", - "form_1289": "Normal", - "form_1290": "Shadow", - "form_1291": "Purified", - "form_1292": "Normal", - "form_1293": "Shadow", - "form_1294": "Purified", - "form_1295": "Normal", - "form_1296": "Shadow", - "form_1297": "Purified", - "form_1298": "Normal", - "form_1299": "Shadow", - "form_1300": "Purified", - "form_1301": "Normal", - "form_1302": "Shadow", - "form_1303": "Purified", - "form_1304": "Normal", - "form_1305": "Shadow", - "form_1306": "Purified", - "form_1307": "Normal", - "form_1308": "Shadow", - "form_1309": "Purified", - "form_1310": "Normal", - "form_1311": "Shadow", - "form_1312": "Purified", - "form_1313": "Normal", - "form_1314": "Shadow", - "form_1315": "Purified", - "form_1316": "Normal", - "form_1317": "Shadow", - "form_1318": "Purified", - "form_1319": "Normal", - "form_1320": "Shadow", - "form_1321": "Purified", - "form_1322": "Normal", - "form_1323": "Shadow", - "form_1324": "Purified", - "form_1325": "Normal", - "form_1326": "Shadow", - "form_1327": "Purified", - "form_1328": "Normal", - "form_1329": "Shadow", - "form_1330": "Purified", - "form_1331": "Normal", - "form_1332": "Shadow", - "form_1333": "Purified", - "form_1334": "Normal", - "form_1335": "Shadow", - "form_1336": "Purified", - "form_1337": "Normal", - "form_1338": "Shadow", - "form_1339": "Purified", - "form_1340": "Normal", - "form_1341": "Shadow", - "form_1342": "Purified", - "form_1343": "Normal", - "form_1344": "Shadow", - "form_1345": "Purified", - "form_1346": "Normal", - "form_1347": "Shadow", - "form_1348": "Purified", - "form_1349": "Normal", - "form_1350": "Shadow", - "form_1351": "Purified", - "form_1352": "Normal", - "form_1353": "Shadow", - "form_1354": "Purified", - "form_1355": "Normal", - "form_1356": "Shadow", - "form_1357": "Purified", - "form_1358": "Normal", - "form_1359": "Shadow", - "form_1360": "Purified", - "form_1361": "Normal", - "form_1362": "Shadow", - "form_1363": "Purified", - "form_1364": "Normal", - "form_1365": "Shadow", - "form_1366": "Purified", - "form_1367": "Normal", - "form_1368": "Shadow", - "form_1369": "Purified", - "form_1370": "Normal", - "form_1371": "Shadow", - "form_1372": "Purified", - "form_1373": "Shadow", - "form_1374": "Purified", - "form_1375": "Shadow", - "form_1376": "Purified", - "form_1377": "Shadow", - "form_1378": "Purified", - "form_1379": "Normal", - "form_1380": "Shadow", - "form_1381": "Purified", - "form_1382": "Normal", - "form_1383": "Shadow", - "form_1384": "Purified", - "form_1385": "Normal", - "form_1386": "Shadow", - "form_1387": "Purified", - "form_1388": "Normal", - "form_1389": "Shadow", - "form_1390": "Purified", - "form_1391": "Normal", - "form_1392": "Shadow", - "form_1393": "Purified", - "form_1394": "Normal", - "form_1395": "Shadow", - "form_1396": "Purified", - "form_1397": "Normal", - "form_1398": "Shadow", - "form_1399": "Purified", - "form_1400": "Normal", - "form_1401": "Shadow", - "form_1402": "Purified", - "form_1403": "Normal", - "form_1404": "Shadow", - "form_1405": "Purified", - "form_1406": "Normal", - "form_1407": "Shadow", - "form_1408": "Purified", - "form_1409": "Normal", - "form_1410": "Shadow", - "form_1411": "Purified", - "form_1412": "Normal", - "form_1413": "Shadow", - "form_1414": "Purified", - "form_1415": "Normal", - "form_1416": "Shadow", - "form_1417": "Purified", - "form_1418": "Normal", - "form_1419": "Shadow", - "form_1420": "Purified", - "form_1421": "Normal", - "form_1422": "Shadow", - "form_1423": "Purified", - "form_1424": "Normal", - "form_1425": "Shadow", - "form_1426": "Purified", - "form_1427": "Normal", - "form_1428": "Shadow", - "form_1429": "Purified", - "form_1430": "Normal", - "form_1431": "Shadow", - "form_1432": "Purified", - "form_1433": "Normal", - "form_1434": "Shadow", - "form_1435": "Purified", - "form_1436": "Normal", - "form_1437": "Shadow", - "form_1438": "Purified", - "form_1439": "Normal", - "form_1440": "Shadow", - "form_1441": "Purified", - "form_1442": "Normal", - "form_1443": "Shadow", - "form_1444": "Purified", - "form_1445": "Normal", - "form_1446": "Shadow", - "form_1447": "Purified", - "form_1448": "Normal", - "form_1449": "Shadow", - "form_1450": "Purified", - "form_1451": "Normal", - "form_1452": "Shadow", - "form_1453": "Purified", - "form_1454": "Normal", - "form_1455": "Shadow", - "form_1456": "Purified", - "form_1457": "Normal", - "form_1458": "Shadow", - "form_1459": "Purified", - "form_1460": "Normal", - "form_1461": "Shadow", - "form_1462": "Purified", - "form_1463": "Normal", - "form_1464": "Shadow", - "form_1465": "Purified", - "form_1466": "Normal", - "form_1467": "Shadow", - "form_1468": "Purified", - "form_1469": "Normal", - "form_1470": "Shadow", - "form_1471": "Purified", - "form_1472": "Normal", - "form_1473": "Shadow", - "form_1474": "Purified", - "form_1475": "Normal", - "form_1476": "Shadow", - "form_1477": "Purified", - "form_1478": "Normal", - "form_1479": "Shadow", - "form_1480": "Purified", - "form_1481": "Normal", - "form_1482": "Shadow", - "form_1483": "Purified", - "form_1484": "Normal", - "form_1485": "Shadow", - "form_1486": "Purified", - "form_1487": "Normal", - "form_1488": "Shadow", - "form_1489": "Purified", - "form_1490": "Normal", - "form_1491": "Shadow", - "form_1492": "Purified", - "form_1493": "Normal", - "form_1494": "Shadow", - "form_1495": "Purified", - "form_1496": "Normal", - "form_1497": "Shadow", - "form_1498": "Purified", - "form_1499": "Normal", - "form_1500": "Shadow", - "form_1501": "Purified", - "form_1502": "Normal", - "form_1503": "Shadow", - "form_1504": "Purified", - "form_1505": "Normal", - "form_1506": "Shadow", - "form_1507": "Purified", - "form_1508": "Normal", - "form_1509": "Shadow", - "form_1510": "Purified", - "form_1511": "Normal", - "form_1512": "Shadow", - "form_1513": "Purified", - "form_1514": "Normal", - "form_1515": "Shadow", - "form_1516": "Purified", - "form_1517": "Normal", - "form_1518": "Shadow", - "form_1519": "Purified", - "form_1520": "Normal", - "form_1521": "Shadow", - "form_1522": "Purified", - "form_1523": "Normal", - "form_1524": "Shadow", - "form_1525": "Purified", - "form_1526": "Normal", - "form_1527": "Shadow", - "form_1528": "Purified", - "form_1529": "Normal", - "form_1530": "Shadow", - "form_1531": "Purified", - "form_1532": "Normal", - "form_1533": "Shadow", - "form_1534": "Purified", - "form_1535": "Normal", - "form_1536": "Shadow", - "form_1537": "Purified", - "form_1538": "Normal", - "form_1539": "Shadow", - "form_1540": "Purified", - "form_1541": "Normal", - "form_1542": "Shadow", - "form_1543": "Purified", - "form_1544": "Normal", - "form_1545": "Shadow", - "form_1546": "Purified", - "form_1547": "Normal", - "form_1548": "Shadow", - "form_1549": "Purified", - "form_1550": "Normal", - "form_1551": "Shadow", - "form_1552": "Purified", - "form_1553": "Normal", - "form_1554": "Shadow", - "form_1555": "Purified", - "form_1556": "Normal", - "form_1557": "Shadow", - "form_1558": "Purified", - "form_1559": "Normal", - "form_1560": "Shadow", - "form_1561": "Purified", - "form_1562": "Normal", - "form_1563": "Shadow", - "form_1564": "Purified", - "form_1565": "Normal", - "form_1566": "Shadow", - "form_1567": "Purified", - "form_1568": "Normal", - "form_1569": "Shadow", - "form_1570": "Purified", - "form_1571": "Normal", - "form_1572": "Shadow", - "form_1573": "Purified", - "form_1574": "Normal", - "form_1575": "Shadow", - "form_1576": "Purified", - "form_1577": "Normal", - "form_1578": "Shadow", - "form_1579": "Purified", - "form_1580": "Normal", - "form_1581": "Shadow", - "form_1582": "Purified", - "form_1583": "Normal", - "form_1584": "Shadow", - "form_1585": "Purified", - "form_1586": "Normal", - "form_1587": "Shadow", - "form_1588": "Purified", - "form_1589": "Normal", - "form_1590": "Shadow", - "form_1591": "Purified", - "form_1592": "Normal", - "form_1593": "Shadow", - "form_1594": "Purified", - "form_1595": "Normal", - "form_1596": "Shadow", - "form_1597": "Purified", - "form_1598": "Normal", - "form_1599": "Shadow", - "form_1600": "Purified", - "form_1601": "Normal", - "form_1602": "Shadow", - "form_1603": "Purified", - "form_1604": "Normal", - "form_1605": "Shadow", - "form_1606": "Purified", - "form_1607": "Normal", - "form_1608": "Shadow", - "form_1609": "Purified", - "form_1610": "Normal", - "form_1611": "Shadow", - "form_1612": "Purified", - "form_1613": "Normal", - "form_1614": "Shadow", - "form_1615": "Purified", - "form_1616": "Normal", - "form_1617": "Shadow", - "form_1618": "Purified", - "form_1619": "Normal", - "form_1620": "Shadow", - "form_1621": "Purified", - "form_1622": "Normal", - "form_1623": "Shadow", - "form_1624": "Purified", - "form_1625": "Normal", - "form_1626": "Shadow", - "form_1627": "Purified", - "form_1628": "Normal", - "form_1629": "Shadow", - "form_1630": "Purified", - "form_1631": "Normal", - "form_1632": "Shadow", - "form_1633": "Purified", - "form_1634": "Normal", - "form_1635": "Shadow", - "form_1636": "Purified", - "form_1637": "Normal", - "form_1638": "Shadow", - "form_1639": "Purified", - "form_1640": "Normal", - "form_1641": "Shadow", - "form_1642": "Purified", - "form_1643": "Normal", - "form_1644": "Shadow", - "form_1645": "Purified", - "form_1646": "Normal", - "form_1647": "Shadow", - "form_1648": "Purified", - "form_1649": "Normal", - "form_1650": "Shadow", - "form_1651": "Purified", - "form_1652": "Normal", - "form_1653": "Shadow", - "form_1654": "Purified", - "form_1655": "Normal", - "form_1656": "Shadow", - "form_1657": "Purified", - "form_1658": "Normal", - "form_1659": "Shadow", - "form_1660": "Purified", - "form_1661": "Normal", - "form_1662": "Shadow", - "form_1663": "Purified", - "form_1664": "Normal", - "form_1665": "Shadow", - "form_1666": "Purified", - "form_1667": "Normal", - "form_1668": "Shadow", - "form_1669": "Purified", - "form_1670": "Normal", - "form_1671": "Shadow", - "form_1672": "Purified", - "form_1673": "Normal", - "form_1674": "Shadow", - "form_1675": "Purified", - "form_1676": "Normal", - "form_1677": "Shadow", - "form_1678": "Purified", - "form_1679": "Normal", - "form_1680": "Shadow", - "form_1681": "Purified", - "form_1682": "Normal", - "form_1683": "Shadow", - "form_1684": "Purified", - "form_1685": "Normal", - "form_1686": "Shadow", - "form_1687": "Purified", - "form_1688": "Normal", - "form_1689": "Shadow", - "form_1690": "Purified", - "form_1691": "Normal", - "form_1692": "Shadow", - "form_1693": "Purified", - "form_1694": "Normal", - "form_1695": "Shadow", - "form_1696": "Purified", - "form_1697": "Normal", - "form_1698": "Shadow", - "form_1699": "Purified", - "form_1700": "Normal", - "form_1701": "Shadow", - "form_1702": "Purified", - "form_1703": "Normal", - "form_1704": "Shadow", - "form_1705": "Purified", - "form_1706": "Normal", - "form_1707": "Shadow", - "form_1708": "Purified", - "form_1709": "Normal", - "form_1710": "Shadow", - "form_1711": "Purified", - "form_1712": "Normal", - "form_1713": "Shadow", - "form_1714": "Purified", - "form_1715": "Normal", - "form_1716": "Shadow", - "form_1717": "Purified", - "form_1718": "Normal", - "form_1719": "Shadow", - "form_1720": "Purified", - "form_1721": "Normal", - "form_1722": "Shadow", - "form_1723": "Purified", - "form_1724": "Normal", - "form_1725": "Shadow", - "form_1726": "Purified", - "form_1727": "Normal", - "form_1728": "Shadow", - "form_1729": "Purified", - "form_1730": "Normal", - "form_1731": "Shadow", - "form_1732": "Purified", - "form_1733": "Normal", - "form_1734": "Shadow", - "form_1735": "Purified", - "form_1736": "Normal", - "form_1737": "Shadow", - "form_1738": "Purified", - "form_1739": "Normal", - "form_1740": "Shadow", - "form_1741": "Purified", - "form_1742": "Normal", - "form_1743": "Shadow", - "form_1744": "Purified", - "form_1745": "Normal", - "form_1746": "Shadow", - "form_1747": "Purified", - "form_1748": "Normal", - "form_1749": "Shadow", - "form_1750": "Purified", - "form_1751": "Normal", - "form_1752": "Shadow", - "form_1753": "Purified", - "form_1754": "Normal", - "form_1755": "Shadow", - "form_1756": "Purified", - "form_1757": "Normal", - "form_1758": "Shadow", - "form_1759": "Purified", - "form_1760": "Normal", - "form_1761": "Shadow", - "form_1762": "Purified", - "form_1763": "Normal", - "form_1764": "Shadow", - "form_1765": "Purified", - "form_1766": "Normal", - "form_1767": "Shadow", - "form_1768": "Purified", - "form_1769": "Normal", - "form_1770": "Shadow", - "form_1771": "Purified", - "form_1772": "Normal", - "form_1773": "Shadow", - "form_1774": "Purified", - "form_1775": "Normal", - "form_1776": "Shadow", - "form_1777": "Purified", - "form_1778": "Normal", - "form_1779": "Shadow", - "form_1780": "Purified", - "form_1781": "Normal", - "form_1782": "Shadow", - "form_1783": "Purified", - "form_1784": "Normal", - "form_1785": "Shadow", - "form_1786": "Purified", - "form_1787": "Normal", - "form_1788": "Shadow", - "form_1789": "Purified", - "form_1790": "Normal", - "form_1791": "Shadow", - "form_1792": "Purified", - "form_1793": "Normal", - "form_1794": "Shadow", - "form_1795": "Purified", - "form_1796": "Normal", - "form_1797": "Shadow", - "form_1798": "Purified", - "form_1799": "Normal", - "form_1800": "Shadow", - "form_1801": "Purified", - "form_1802": "Normal", - "form_1803": "Shadow", - "form_1804": "Purified", - "form_1805": "Normal", - "form_1806": "Shadow", - "form_1807": "Purified", - "form_1808": "Normal", - "form_1809": "Shadow", - "form_1810": "Purified", - "form_1811": "Normal", - "form_1812": "Shadow", - "form_1813": "Purified", - "form_1814": "Normal", - "form_1815": "Shadow", - "form_1816": "Purified", - "form_1817": "Normal", - "form_1818": "Shadow", - "form_1819": "Purified", - "form_1820": "Normal", - "form_1821": "Shadow", - "form_1822": "Purified", - "form_1823": "Normal", - "form_1824": "Shadow", - "form_1825": "Purified", - "form_1826": "Normal", - "form_1827": "Shadow", - "form_1828": "Purified", - "form_1829": "Normal", - "form_1830": "Shadow", - "form_1831": "Purified", - "form_1832": "Normal", - "form_1833": "Shadow", - "form_1834": "Purified", - "form_1835": "Normal", - "form_1836": "Shadow", - "form_1837": "Purified", - "form_1838": "Normal", - "form_1839": "Shadow", - "form_1840": "Purified", - "form_1841": "Normal", - "form_1842": "Shadow", - "form_1843": "Purified", - "form_1844": "Normal", - "form_1845": "Shadow", - "form_1846": "Purified", - "form_1847": "Normal", - "form_1848": "Shadow", - "form_1849": "Purified", - "form_1850": "Normal", - "form_1851": "Shadow", - "form_1852": "Purified", - "form_1853": "Normal", - "form_1854": "Shadow", - "form_1855": "Purified", - "form_1856": "Normal", - "form_1857": "Shadow", - "form_1858": "Purified", - "form_1859": "Normal", - "form_1860": "Shadow", - "form_1861": "Purified", - "form_1862": "Normal", - "form_1863": "Shadow", - "form_1864": "Purified", - "form_1865": "Normal", - "form_1866": "Shadow", - "form_1867": "Purified", - "form_1868": "Normal", - "form_1869": "Shadow", - "form_1870": "Purified", - "form_1871": "Normal", - "form_1872": "Shadow", - "form_1873": "Purified", - "form_1874": "Normal", - "form_1875": "Shadow", - "form_1876": "Purified", - "form_1877": "Normal", - "form_1878": "Shadow", - "form_1879": "Purified", - "form_1880": "Normal", - "form_1881": "Shadow", - "form_1882": "Purified", - "form_1883": "Normal", - "form_1884": "Shadow", - "form_1885": "Purified", - "form_1886": "Normal", - "form_1887": "Shadow", - "form_1888": "Purified", - "form_1889": "Normal", - "form_1890": "Shadow", - "form_1891": "Purified", - "form_1892": "Normal", - "form_1893": "Shadow", - "form_1894": "Purified", - "form_1895": "Normal", - "form_1896": "Shadow", - "form_1897": "Purified", - "form_1898": "Normal", - "form_1899": "Shadow", - "form_1900": "Purified", - "form_1901": "Normal", - "form_1902": "Shadow", - "form_1903": "Purified", - "form_1904": "Normal", - "form_1905": "Shadow", - "form_1906": "Purified", - "form_1907": "Normal", - "form_1908": "Shadow", - "form_1909": "Purified", - "form_1910": "Normal", - "form_1911": "Shadow", - "form_1912": "Purified", - "form_1913": "Normal", - "form_1914": "Shadow", - "form_1915": "Purified", - "form_1916": "Normal", - "form_1917": "Shadow", - "form_1918": "Purified", - "form_1919": "Normal", - "form_1920": "Shadow", - "form_1921": "Purified", - "form_1922": "Normal", - "form_1923": "Shadow", - "form_1924": "Purified", - "form_1925": "Normal", - "form_1926": "Shadow", - "form_1927": "Purified", - "form_1928": "Normal", - "form_1929": "Shadow", - "form_1930": "Purified", - "form_1931": "Normal", - "form_1932": "Shadow", - "form_1933": "Purified", - "form_1934": "Normal", - "form_1935": "Shadow", - "form_1936": "Purified", - "form_1937": "Normal", - "form_1938": "Shadow", - "form_1939": "Purified", - "form_1940": "Normal", - "form_1941": "Shadow", - "form_1942": "Purified", - "form_1943": "Normal", - "form_1944": "Shadow", - "form_1945": "Purified", - "form_1946": "Normal", - "form_1947": "Shadow", - "form_1948": "Purified", - "form_1949": "Normal", - "form_1950": "Shadow", - "form_1951": "Purified", - "form_1952": "Normal", - "form_1953": "Shadow", - "form_1954": "Purified", - "form_1955": "Normal", - "form_1956": "Shadow", - "form_1957": "Purified", - "form_1958": "Normal", - "form_1959": "Shadow", - "form_1960": "Purified", - "form_1961": "Normal", - "form_1962": "Shadow", - "form_1963": "Purified", - "form_1964": "Normal", - "form_1965": "Shadow", - "form_1966": "Purified", - "form_1967": "Normal", - "form_1968": "Shadow", - "form_1969": "Purified", - "form_1970": "Normal", - "form_1971": "Shadow", - "form_1972": "Purified", - "form_1973": "Normal", - "form_1974": "Shadow", - "form_1975": "Purified", - "form_1976": "Normal", - "form_1977": "Shadow", - "form_1978": "Purified", - "form_1979": "Normal", - "form_1980": "Shadow", - "form_1981": "Purified", - "form_1982": "Normal", - "form_1983": "Shadow", - "form_1984": "Purified", - "form_1985": "Normal", - "form_1986": "Shadow", - "form_1987": "Purified", - "form_1988": "Normal", - "form_1989": "Shadow", - "form_1990": "Purified", - "form_1991": "Normal", - "form_1992": "Shadow", - "form_1993": "Purified", - "form_1994": "Normal", - "form_1995": "Shadow", - "form_1996": "Purified", - "form_1997": "Normal", - "form_1998": "Shadow", - "form_1999": "Purified", - "form_2000": "Normal", - "form_2001": "Shadow", - "form_2002": "Purified", - "form_2003": "Normal", - "form_2004": "Shadow", - "form_2005": "Purified", - "form_2006": "Normal", - "form_2007": "Shadow", - "form_2008": "Purified", - "form_2009": "Normal", - "form_2010": "Shadow", - "form_2011": "Purified", - "form_2012": "Normal", - "form_2013": "Shadow", - "form_2014": "Purified", - "form_2015": "Normal", - "form_2016": "Shadow", - "form_2017": "Purified", - "form_2018": "Normal", - "form_2019": "Shadow", - "form_2020": "Purified", - "form_2021": "Normal", - "form_2022": "Shadow", - "form_2023": "Purified", - "form_2024": "Normal", - "form_2025": "Shadow", - "form_2026": "Purified", - "form_2027": "Normal", - "form_2028": "Shadow", - "form_2029": "Purified", - "form_2030": "Normal", - "form_2031": "Shadow", - "form_2032": "Purified", - "form_2033": "Normal", - "form_2034": "Shadow", - "form_2035": "Purified", - "form_2036": "Normal", - "form_2037": "Shadow", - "form_2038": "Purified", - "form_2039": "Normal", - "form_2040": "Shadow", - "form_2041": "Purified", - "form_2042": "Normal", - "form_2043": "Shadow", - "form_2044": "Purified", - "form_2045": "Normal", - "form_2046": "Shadow", - "form_2047": "Purified", - "form_2048": "Normal", - "form_2049": "Shadow", - "form_2050": "Purified", - "form_2051": "Normal", - "form_2052": "Shadow", - "form_2053": "Purified", - "form_2054": "Normal", - "form_2055": "Shadow", - "form_2056": "Purified", - "form_2057": "Normal", - "form_2058": "Shadow", - "form_2059": "Purified", - "form_2060": "Normal", - "form_2061": "Shadow", - "form_2062": "Purified", - "form_2063": "Normal", - "form_2064": "Shadow", - "form_2065": "Purified", - "form_2066": "Normal", - "form_2067": "Shadow", - "form_2068": "Purified", - "form_2069": "Normal", - "form_2070": "Shadow", - "form_2071": "Purified", - "form_2072": "Normal", - "form_2073": "Shadow", - "form_2074": "Purified", - "form_2075": "Normal", - "form_2076": "Shadow", - "form_2077": "Purified", - "form_2078": "Normal", - "form_2079": "Shadow", - "form_2080": "Purified", - "form_2081": "Normal", - "form_2082": "Shadow", - "form_2083": "Purified", - "form_2084": "Normal", - "form_2085": "Shadow", - "form_2086": "Purified", - "form_2087": "Normal", - "form_2088": "Shadow", - "form_2089": "Purified", - "form_2090": "Normal", - "form_2091": "Shadow", - "form_2092": "Purified", - "form_2093": "Normal", - "form_2094": "Shadow", - "form_2095": "Purified", - "form_2096": "Normal", - "form_2097": "Shadow", - "form_2098": "Purified", - "form_2099": "Normal", - "form_2100": "Shadow", - "form_2101": "Purified", - "form_2102": "Normal", - "form_2103": "Shadow", - "form_2104": "Purified", - "form_2105": "Normal", - "form_2106": "Shadow", - "form_2107": "Purified", - "form_2108": "Normal", - "form_2109": "Shadow", - "form_2110": "Purified", - "form_2111": "Normal", - "form_2112": "Shadow", - "form_2113": "Purified", - "form_2114": "Normal", - "form_2115": "Shadow", - "form_2116": "Purified", - "form_2117": "Normal", - "form_2118": "Shadow", - "form_2119": "Purified", - "form_2120": "Normal", - "form_2121": "Shadow", - "form_2122": "Purified", - "form_2123": "Normal", - "form_2124": "Shadow", - "form_2125": "Purified", - "form_2126": "Normal", - "form_2127": "Shadow", - "form_2128": "Purified", - "form_2129": "Normal", - "form_2130": "Shadow", - "form_2131": "Purified", - "form_2132": "Normal", - "form_2133": "Shadow", - "form_2134": "Purified", - "form_2135": "Normal", - "form_2136": "Shadow", - "form_2137": "Purified", - "form_2138": "Normal", - "form_2139": "Shadow", - "form_2140": "Purified", - "form_2141": "Normal", - "form_2142": "Shadow", - "form_2143": "Purified", - "form_2144": "Normal", - "form_2145": "Shadow", - "form_2146": "Purified", - "form_2147": "Normal", - "form_2148": "Shadow", - "form_2149": "Purified", - "form_2150": "Normal", - "form_2151": "Shadow", - "form_2152": "Purified", - "form_2153": "Normal", - "form_2154": "Shadow", - "form_2155": "Purified", - "form_2156": "Normal", - "form_2157": "Shadow", - "form_2158": "Purified", - "form_2159": "Normal", - "form_2160": "Shadow", - "form_2161": "Purified", - "form_2162": "Normal", - "form_2163": "Shadow", - "form_2164": "Purified", - "form_2165": "Normal", - "form_2166": "Shadow", - "form_2167": "Purified", - "form_2168": "Normal", - "form_2169": "Shadow", - "form_2170": "Purified", - "form_2171": "Normal", - "form_2172": "Shadow", - "form_2173": "Purified", - "form_2174": "Normal", - "form_2175": "Shadow", - "form_2176": "Purified", - "form_2177": "Normal", - "form_2178": "Shadow", - "form_2179": "Purified", - "form_2180": "Normal", - "form_2181": "Shadow", - "form_2182": "Purified", - "form_2183": "Normal", - "form_2184": "Shadow", - "form_2185": "Purified", - "form_2186": "Normal", - "form_2187": "Shadow", - "form_2188": "Purified", - "form_2189": "Normal", - "form_2190": "Shadow", - "form_2191": "Purified", - "form_2192": "Normal", - "form_2193": "Shadow", - "form_2194": "Purified", - "form_2195": "Normal", - "form_2196": "Shadow", - "form_2197": "Purified", - "form_2198": "Normal", - "form_2199": "Shadow", - "form_2200": "Purified", - "form_2201": "Normal", - "form_2202": "Shadow", - "form_2203": "Purified", - "form_2204": "Normal", - "form_2205": "Shadow", - "form_2206": "Purified", - "form_2207": "Normal", - "form_2208": "Shadow", - "form_2209": "Purified", - "form_2210": "Normal", - "form_2211": "Shadow", - "form_2212": "Purified", - "form_2213": "Normal", - "form_2214": "Shadow", - "form_2215": "Purified", - "form_2216": "Normal", - "form_2217": "Shadow", - "form_2218": "Purified", - "form_2219": "Normal", - "form_2220": "Shadow", - "form_2221": "Purified", - "form_2222": "Normal", - "form_2223": "Shadow", - "form_2224": "Purified", - "form_2225": "Normal", - "form_2226": "Shadow", - "form_2227": "Purified", - "form_2228": "Normal", - "form_2229": "Shadow", - "form_2230": "Purified", - "form_2231": "Normal", - "form_2232": "Shadow", - "form_2233": "Purified", - "form_2234": "Normal", - "form_2235": "Shadow", - "form_2236": "Purified", - "form_2237": "Normal", - "form_2238": "Shadow", - "form_2239": "Purified", - "form_2240": "Normal", - "form_2241": "Shadow", - "form_2242": "Purified", - "form_2243": "Normal", - "form_2244": "Shadow", - "form_2245": "Purified", - "form_2246": "Normal", - "form_2247": "Shadow", - "form_2248": "Purified", - "form_2249": "Normal", - "form_2250": "Shadow", - "form_2251": "Purified", - "form_2252": "Normal", - "form_2253": "Shadow", - "form_2254": "Purified", - "form_2255": "Normal", - "form_2256": "Shadow", - "form_2257": "Purified", - "form_2258": "Normal", - "form_2259": "Shadow", - "form_2260": "Purified", - "form_2261": "Normal", - "form_2262": "Shadow", - "form_2263": "Purified", - "form_2264": "Normal", - "form_2265": "Shadow", - "form_2266": "Purified", - "form_2267": "Normal", - "form_2268": "Shadow", - "form_2269": "Purified", - "form_2270": "Normal", - "form_2271": "Shadow", - "form_2272": "Purified", - "form_2273": "Normal", - "form_2274": "Shadow", - "form_2275": "Purified", - "form_2276": "Normal", - "form_2277": "Shadow", - "form_2278": "Purified", - "form_2279": "Normal", - "form_2280": "Shadow", - "form_2281": "Purified", - "form_2282": "Normal", - "form_2283": "Shadow", - "form_2284": "Purified", - "form_2285": "Normal", - "form_2286": "Shadow", - "form_2287": "Purified", - "form_2288": "Normal", - "form_2289": "Shadow", - "form_2290": "Purified", - "form_2291": "Normal", - "form_2292": "Shadow", - "form_2293": "Purified", - "form_2294": "Normal", - "form_2295": "Shadow", - "form_2296": "Purified", - "form_2297": "Normal", - "form_2298": "Shadow", - "form_2299": "Purified", - "form_2300": "Normal", - "form_2301": "Shadow", - "form_2302": "Purified", - "form_2303": "Normal", - "form_2304": "Shadow", - "form_2305": "Purified", - "form_2306": "Normal", - "form_2307": "Shadow", - "form_2308": "Purified", - "form_2309": "Normal", - "form_2310": "Shadow", - "form_2311": "Purified", - "form_2312": "Normal", - "form_2313": "Shadow", - "form_2314": "Purified", - "form_2315": "Normal", - "form_2316": "Shadow", - "form_2317": "Purified", - "form_2318": "Normal", - "form_2319": "Shadow", - "form_2320": "Purified", - "form_2321": "Normal", - "form_2322": "Shadow", - "form_2323": "Purified", - "form_2324": "Normal", - "form_2325": "Shadow", - "form_2326": "Purified", - "form_2327": "Spring 2020", - "form_2328": "Spring 2020", - "form_2329": "Spring 2020", - "form_2330": "Female", - "form_2331": "Female", - "form_2332": "Costume 2020", - "form_2333": "Costume 2020", - "form_2334": "Costume 2020", - "form_2335": "Galarian", - "form_2336": "Galarian", - "form_2337": "Galarian", - "form_2338": "Galarian", - "form_2339": "Galarian", - "form_2340": "Galarian", - "form_2341": "Galarian", - "form_2342": "Galarian Standard", - "form_2343": "Galarian Zen", - "form_2344": "Galarian", - "form_2345": "Galarian", - "form_2501": "Normal", - "form_2502": "Shadow", - "form_2503": "Purified", - "form_2504": "Normal", - "form_2505": "Shadow", - "form_2506": "Purified", - "form_2510": "Normal", - "form_2511": "Shadow", - "form_2512": "Purified", - "form_2516": "Normal", - "form_2517": "Shadow", - "form_2518": "Purified", - "form_2582": "Galarian", - "form_2583": "Galarian", - "form_2585": "Costume 2020", - "form_2586": "Costume 2020", - "form_2587": "Normal", - "form_2588": "Female", - "form_2589": "Normal", - "form_2590": "Female", - "form_2591": "Ten Percent", - "form_2592": "Fifty Percent", - "form_2593": "Complete", - "form_2594": "Archipelago", - "form_2595": "Continental", - "form_2596": "Elegant", - "form_2597": "Fancy", - "form_2598": "Garden", - "form_2599": "High Plains", - "form_2600": "Icy Snow", - "form_2601": "Jungle", - "form_2602": "Marine", - "form_2603": "Meadow", - "form_2604": "Modern", - "form_2605": "Monsoon", - "form_2606": "Ocean", - "form_2607": "Pokeball", - "form_2608": "Polar", - "form_2609": "River", - "form_2610": "Sandstorm", - "form_2611": "Savanna", - "form_2612": "Sun", - "form_2613": "Tundra", - "form_2614": "Red", - "form_2615": "Yellow", - "form_2616": "Orange", - "form_2617": "Blue", - "form_2618": "White", - "form_2619": "Red", - "form_2620": "Yellow", - "form_2621": "Orange", - "form_2622": "Blue", - "form_2623": "White", - "form_2624": "Red", - "form_2625": "Yellow", - "form_2626": "Orange", - "form_2627": "Blue", - "form_2628": "White", - "form_2629": "Natural", - "form_2630": "Heart", - "form_2631": "Star", - "form_2632": "Diamond", - "form_2633": "Debutante", - "form_2634": "Matron", - "form_2635": "Dandy", - "form_2636": "La Reine", - "form_2637": "Kabuki", - "form_2638": "Pharaoh", - "form_2639": "Shield", - "form_2640": "Blade", - "form_2641": "Small", - "form_2642": "Average", - "form_2643": "Large", - "form_2644": "Super", - "form_2645": "Small", - "form_2646": "Average", - "form_2647": "Large", - "form_2648": "Super", - "form_2649": "Neutral", - "form_2650": "Active", - "form_2651": "Confined", - "form_2652": "Unbound", - "form_2666": "Costume 2020 Deprecated", - "form_2668": "Costume 2020", - "form_2669": "Adventure Hat 2020", - "form_2670": "Winter 2020", - "form_2671": "Winter 2020", - "form_2672": "Winter 2020", - "form_2673": "2020", - "form_2674": "2021", - "costume_1": "Holiday", - "costume_2": "Party", - "costume_3": "Ash", - "costume_4": "Witch", - "costume_5": "Adventure", - "costume_6": "Black Cap", - "costume_7": "Flower", - "costume_8": "Toque", - "costume_9": "Detective", - "costume_10": "One Piece", - "costume_11": "Pokemon Day", - "move_1": "Tuonoshock", - "move_2": "Attacco Rapido", - "move_3": "Graffio", - "move_4": "Braciere", - "move_5": "Frustata", - "move_6": "Azione", - "move_7": "Foglielama", - "move_8": "Riduttore", - "move_9": "Pistolacqua", - "move_10": "Morso", - "move_11": "Botta", - "move_12": "Doppiasberla", - "move_13": "Avvolgibotta", - "move_14": "Iper Raggio", - "move_15": "Leccata", - "move_16": "Neropulsar", - "move_17": "Smog", - "move_18": "Fango", - "move_19": "Ferrartigli", - "move_20": "Presa", - "move_21": "Ruotafuoco", - "move_22": "Megacorno", - "move_23": "Attacco d’Ala", - "move_24": "Lanciafiamme", - "move_25": "Sbigoattacco", - "move_26": "Fossa", - "move_27": "Colpo Basso", - "move_28": "Incrocolpo", - "move_29": "Psicotaglio", - "move_30": "Psicoraggio", - "move_31": "Terremoto", - "move_32": "Pietrataglio", - "move_33": "Gelopugno", - "move_34": "Cuorestampo", - "move_35": "Scarica", - "move_36": "Cannonflash", - "move_37": "Beccata", - "move_38": "Perforbecco", - "move_39": "Geloraggio", - "move_40": "Bora", - "move_41": "Eterelama", - "move_42": "Ondacalda", - "move_43": "Doppio Ago", - "move_44": "Velenpuntura", - "move_45": "Aeroassalto", - "move_46": "Giravvita", - "move_47": "Fiortempesta", - "move_48": "Megassorbimento", - "move_49": "Ronzio", - "move_50": "Velenodenti", - "move_51": "Nottesferza", - "move_52": "Lacerazione", - "move_53": "Bollaraggio", - "move_54": "Sottomissione", - "move_55": "Colpokarate", - "move_56": "Calciobasso", - "move_57": "Acquagetto", - "move_58": "Idrondata", - "move_59": "Semebomba", - "move_60": "Psicoshock", - "move_61": "Sassata", - "move_62": "Forzantica", - "move_63": "Rocciotomba", - "move_64": "Frana", - "move_65": "Gemmoforza", - "move_66": "Furtivombra", - "move_67": "Pugnodombra", - "move_68": "Ombrartigli", - "move_69": "Funestovento", - "move_70": "Palla Ombra", - "move_71": "Pugnoscarica", - "move_72": "Bombagnete", - "move_73": "Alacciaio", - "move_74": "Metaltestata", - "move_75": "Caricaparabola", - "move_76": "Scintilla", - "move_77": "Tuonopugno", - "move_78": "Tuono", - "move_79": "Fulmine", - "move_80": "Tornado", - "move_81": "Dragospiro", - "move_82": "Dragopulsar", - "move_83": "Dragartigli", - "move_84": "Incantavoce", - "move_85": "Assorbibacio", - "move_86": "Magibrillio", - "move_87": "Forza Lunare", - "move_88": "Carineria", - "move_89": "Velenocroce", - "move_90": "Fangobomba", - "move_91": "Fangonda", - "move_92": "Sporcolancio", - "move_93": "Colpodifango", - "move_94": "Ossoclava", - "move_95": "Battiterra", - "move_96": "Pantanobomba", - "move_97": "Tagliofuria", - "move_98": "Coleomorso", - "move_99": "Segnoraggio", - "move_100": "Forbice X", - "move_101": "Nitrocarica", - "move_102": "Pirolancio", - "move_103": "Fuocobomba", - "move_104": "Acquadisale", - "move_105": "Idropulsar", - "move_106": "Idrovampata", - "move_107": "Idropompa", - "move_108": "Psichico", - "move_109": "Psicobotta", - "move_110": "Geloscheggia", - "move_111": "Ventogelato", - "move_112": "Alitogelido", - "move_113": "Assorbimento", - "move_114": "Gigassorbimento", - "move_115": "Fuocopugno", - "move_116": "Solarraggio", - "move_117": "Fendifoglia", - "move_118": "Vigorcolpo", - "move_119": "Splash", - "move_120": "Acido", - "move_121": "Aerasoio", - "move_122": "Tifone", - "move_123": "Breccia", - "move_124": "Taglio", - "move_125": "Comete", - "move_126": "Incornata", - "move_127": "Pestone", - "move_128": "Bottintesta", - "move_129": "Iperzanna", - "move_130": "Schianto", - "move_131": "Corposcontro", - "move_132": "Riposo", - "move_133": "Scontro", - "move_134": "Idrovampata", - "move_135": "Idropompa", - "move_136": "Avvolgibotta", - "move_137": "Avvolgibotta", - "move_200": "Tagliofuria", - "move_201": "Coleomorso", - "move_202": "Morso", - "move_203": "Sbigoattacco", - "move_204": "Dragospiro", - "move_205": "Tuonoshock", - "move_206": "Scintilla", - "move_207": "Colpo Basso", - "move_208": "Colpokarate", - "move_209": "Braciere", - "move_210": "Attacco d’Ala", - "move_211": "Beccata", - "move_212": "Leccata", - "move_213": "Ombrartigli", - "move_214": "Frustata", - "move_215": "Foglielama", - "move_216": "Colpodifango", - "move_217": "Geloscheggia", - "move_218": "Alitogelido", - "move_219": "Attacco Rapido", - "move_220": "Graffio", - "move_221": "Azione", - "move_222": "Botta", - "move_223": "Taglio", - "move_224": "Velenpuntura", - "move_225": "Acido", - "move_226": "Psicotaglio", - "move_227": "Sassata", - "move_228": "Ferrartigli", - "move_229": "Pugnoscarica", - "move_230": "Pistolacqua", - "move_231": "Splash", - "move_232": "Pistolacqua", - "move_233": "Fangosberla", - "move_234": "Cozzata Zen", - "move_235": "Confusione", - "move_236": "Velenospina", - "move_237": "Bolla", - "move_238": "Finta", - "move_239": "Alacciaio", - "move_240": "Rogodenti", - "move_241": "Spaccaroccia", - "move_242": "Trasformazione", - "move_243": "Contrattacco", - "move_244": "Polneve", - "move_245": "Zuffa", - "move_246": "Dinamipugno", - "move_247": "Focalcolpo", - "move_248": "Raggiaurora", - "move_249": "Raggioscossa", - "move_250": "Invertivolt", - "move_251": "Sprizzalampo", - "move_252": "Falcecannone", - "move_253": "Codadrago", - "move_254": "Slavina", - "move_255": "Eterelama", - "move_256": "Baldeali", - "move_257": "Aeroattacco", - "move_258": "Sabbiotomba", - "move_259": "Cadutamassi", - "move_260": "Assillo", - "move_261": "Entomoblocco", - "move_262": "Ventargenteo", - "move_263": "Sgomento", - "move_264": "Sciagura", - "move_265": "Ombra Notturna", - "move_266": "Codacciaio", - "move_267": "Vortexpalla", - "move_268": "Pesobomba", - "move_269": "Turbofuoco", - "move_270": "Vampata", - "move_271": "Semitraglia", - "move_272": "Laccioerboso", - "move_273": "Energipalla", - "move_274": "Extrasenso", - "move_275": "Divinazione", - "move_276": "Specchiovelo", - "move_277": "Oltraggio", - "move_278": "Urlorabbia", - "move_279": "Sgranocchio", - "move_280": "Ripicca", - "move_281": "Introforza", - "move_287": "Sbadiglio", - "move_282": "Riduttore", - "move_285": "Dragobolide", - "move_283": "Cascata", - "move_284": "Surf", - "move_288": "Psicoslancio", - "move_286": "Obbliderio", - "move_290": "Spade Telluriche", - "move_289": "Primopulsar", - "move_291": "Regalino", - "move_292": "Palla Clima", - "move_293": "Palla Clima", - "move_294": "Palla Clima", - "move_295": "Palla Clima", - "move_296": "Radicalbero", - "move_298": "Incendio", - "move_297": "Abbattimento", - "move_299": "Idrocannone", - "move_300": "Ultimascelta", - "move_301": "Meteorpugno", - "move_302": "Capocciata", - "move_303": "Acidobomba", - "move_304": "Geoforza", - "move_305": "Martellata", - "move_306": "Assalto", - "move_307": "Tritartigli", - "move_308": "Octazooka", - "move_309": "Cristalcolpo", - "move_310": "Troppoforte", - "move_311": "Pungiglione", - "move_312": "Vorticerba", - "move_313": "Sanguisuga", - "move_314": "Assorbipugno", - "move_315": "Ossotetro", - "move_316": "Fanghiglia", - "move_317": "Calciardente", - "move_318": "Conchilama", - "move_319": "Crescipugno", - "move_320": "Fascino", - "move_321": "Gigaimpatto", - "move_322": "Frustrazione", - "move_323": "Ritorno", - "move_324": "Sincrumore", - "move_325": "Localizza", - "move_326": "Fulmindenti", - "move_327": "Gelodenti", - "move_328": "Perforcorno", - "move_329": "Abisso", - "move_330": "Spadasolenne", - "move_331": "Schiacciatuffo", - "move_332": "Forzasfera", - "move_333": "Rivincita", - "move_334": "Devastomasso", - "move_335": "Aerocolpo", - "move_336": "Tecnobotto", - "move_337": "Tecnobotto", - "move_338": "Tecnobotto", - "move_339": "Tecnobotto", - "move_340": "Tecnobotto", - "move_341": "Volo" -} diff --git a/static/locale/jp.json b/static/locale/jp.json deleted file mode 100644 index 6e747818..00000000 --- a/static/locale/jp.json +++ /dev/null @@ -1,3628 +0,0 @@ -{ - "UNKNOWN_POKESTOP": "Unknown Pokestop", - "EMBED_DIRECTIONS": "DIRECTIONS", - "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{0} Subscriptions are not enabled in the config.", - "MSG_NOT_MODERATOR_OR_HIGHER": "{0} is not a moderator or higher thus you may not see other's subscription settings.", - "MSG_INVALID_USER_MENTION": "{0} Failed to retrieve user with mention tag {1}.", - "MSG_USER_NOT_SUBSCRIBED": "{0} is not currently subscribed to any Pokemon or Raid notifications.", - "TIME_YEARS": "years", - "TIME_DAYS": "days", - "TIME_HOURS": "hours", - "TIME_MINUTES": "minutes", - "TIME_SECONDS": "seconds", - "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", - "NOTIFY_ENABLE_DISABLE": "{0} has **{1}d** Pokemon, Raid, Quest, and Invasion notifications.", - "NOTIFY_INVALID_COORDINATES": "{0} Unable not parse {1} as valid coordinates.", - "NOTIFY_DISTANCE_SET": "{0} Notifications only within a {1} meters radius of location {2},{3} will be sent.", - "NOTIFY_PHONE_NUMBER_SET": "{0} Text message notifications for ultra rare Pokemon will be sent to {1}.", - "NOTIFY_INVALID_IV_VALUES": "{0} {1} is not a valid value. (Example: `0-15-6`)", - "NOTIFY_INVALID_ATTACK_VALUE": "{0} {1} is not a valid attack value. Must be between `0-15`.", - "NOTIFY_INVALID_DEFENSE_VALUE": "{0} {1} is not a valid defense value. Must be between `0-15`.", - "NOTIFY_INVALID_STAMINA_VALUE": "{0} {1} is not a valid stamina value. Must be between `0-15`.", - "NOTIFY_INVALID_IV_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_INVALID_GENDER": "{0} {1} is not a valid gender. (i.e. `m`, `f`, `*`)", - "NOTIFY_INVALID_LEVEL": "{0} {1} must be within the range of `0-35`.", - "NOTIFY_INVALID_MINIMUM_IV": "{0} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", - "NOTIFY_INVALID_MINIMUM_LEVEL": "{0} Failed to parse minimum level provided '{1}'.", - "NOTIFY_INVALID_MAXIMUM_LEVEL": "{0} Failed to parse maximum level provided '{1}'.", - "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{0} {1} are not valid Pokemon names or IDs.", - "NOTIFY_INVALID_POKEMON_ID_OR_NAME": "{0} {1} are not valid Pokemon name or ID.", - "NOTIFY_INVALID_POKEMON_ID": "{0} {1} is not a valid Pokemon id.", - "NOTIFY_COMMON_TYPE_POKEMON": "{0} {1} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {2}% or higher.", - "NOTIFY_INVALID_POKEMON_SPECIFIED": "{0} Unable to recognize any of the Pokemon you specified.", - "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{0} is not subscribed to any Pokemon notifications.", - "NOTIFY_INVALID_PVP_LEAGUE": "{0} {1} is not a valid PvP league. (Great or Ultra)", - "NOTIFY_INVALID_PVP_RANK_RANGE": "{0} {1} must be within the range of `0-4096`.", - "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokemon notifications.", - "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} Unable to remove {1} Pokemon subscriptions.", - "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Pokemon notifications.", - "NOTIFY_INVALID_CITY_ROLE": "{0} {1} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", - "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} has unsubscribed from **all** raid boss notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} has unsubscribed from **all** quest notifications.", - "NOTIFY_INVALID_INVASION_GENDER": "{0} Please specify a gender. i.e. `.invmenot fire-m` or `.invmenot water-f ontario or `.invmenot giovanni`", - "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Team Rocket invasion notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokestop lure notifications.", - "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{0} added gym subscription `{1}` to your list of gyms to receive raid notifications from.", - "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{0} already subscribed to gym notifications from {1}.", - "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{0} Removed gym subscription `{1}` from your list of gyms to receive notifications from.", - "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} has unsubscribed from **all** gym notifications.", - "NOTIFY_INVALID_ICON_STYLE": "{0} invalid icon style, type `{1}icons` to see a list of valid options.", - "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Raid subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Quest subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Team Rocket Invasion subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Gym subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Lure subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_ICON_STYLE_CHANGE": "{0} Icon style changed to **{1}**.", - "NOTIFY_IMPORT_UPLOAD_FILE": "{0} Please upload your subscriptions.json file to import now within 3 minutes...", - "NOTIFY_IMPORT_MALFORMED_DATA": "{0} Malformed subscription data, unable to import.", - "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{0} Unable to get uploaded attachment.", - "NOTIFY_IMPORT_SUCCESS": "{0} subscriptions were imported successfully.", - "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{0} does not have any subscriptions to export.", - "NOTIFY_EXPORT_SUCCESS": "{0} Download your subscription settings here.", - "NOTIFY_SETTINGS_EMBED_TITLE": "**{0} Notification Settings (Page: {1}/{2}):**", - "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{0}**", - "NOTIFY_SETTINGS_EMBED_CITIES": "Pokemon Feed Zones: ```{0}```", - "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", - "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{0} meters (Location: {1})", - "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{0}**", - "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {0}% ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {0} ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({0}/{1} used)", - "NOTIFY_FROM": "{0} (From: {1})", - "ALL_AREAS": "All Areas", - "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", - "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{0}feedme cityname` to assign yourself to that city role.*", - "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{0} {1} is not a valid city name, type `{2}cities` to see a list of available cities.", - "FEEDS_INVALID_CITY_NAME": "{0} {1} is not a valid city name.", - "FEEDS_ASSIGNED_ALL_ROLES": "{0} was assigned all city feed roles.", - "FEEDS_UNASSIGNED_ALL_ROLES": "{0} was unassigned all city feed roles.", - "FEEDS_ASSIGNED_ROLES": "{0} has joined role(s) **{1}**.", - "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{0} is already assigned to role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES": "{0} has been removed from role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{0} is not assigned to role(s) **{1}**.", - "FEEDS_PLEASE_WAIT": "{0} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", - "CHANNEL_MESSAGES_DELETED": "{0} Channel {1} messages have been deleted.", - "GYM_NO_POKESTOPS_CONVERTED": "{0} No Pokestops have been converted to Gyms.", - "GYM_NO_POKESTOPS_UPDATED": "{0} No Pokestops have been updated.", - "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", - "GYM_UNKNOWN_NAME": "Unknown Gym Name", - "GYM_UNKNOWN_IMAGE": "Unknown Image Url", - "GYM_POKESTOPS_CONVERTED": "{0} {1} Pokestops updated to Gyms.", - "GYM_POKESTOPS_DELETED": "{0} {1} Pokestops deleted.", - "GYM_NAME": "- **{0}**", - "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({1})] [[Gym Image]({0})]", - "SHINY_STATS_INVALID_CHANNEL": "{0} Shiny stats channel does not exist.", - "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {0}**]", - "SHINY_STATS_NEWLINE": "----------------------------------------------", - "SHINY_STATS_MESSAGE": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours with a **1/{4}** ratio.", - "SHINY_STATS_TOTAL_MESSAGE": "Found **{0}** total shinies out of **{1}** possiblities.", - "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{0}** total shinies out of **{1}** possiblities with a **1/{2}** ratio in total.", - "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", - "ERROR_NESTS_DISABLED": "{0} Nests disabled.", - "ERROR_NESTS_LIST": "{0} Unable to retrieve nest list.", - "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {0} of {1} total members.", - "ERROR_PARSING_USER_ID": "{0} Unable to recognize user id {1}.", - "DONATE_MESSAGE": "{0} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", - "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", - "SUBSCRIPTIONS_FROM_CITY": " from city **{0}**", - "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** lure notifications{2}.", - "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** lure notifications{2}.", - "ERROR_NO_LURE_SUBSCRIPTIONS": "{0} is not subscribed to any lure notifications{1}.", - "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** raid notifications{2}.", - "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** raid notifications{2}.", - "ERROR_NO_RAID_SUBSCRIPTIONS": "{0} is not subscribed to any raid notifications{1}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** quest notifications{2}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** quest notifications{2}.", - "ERROR_NO_QUEST_SUBSCRIPTIONS": "{0} is not subscribed to any quest notifications{1}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** Team Rocket invasion reward notifications{2}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Team Rocket invasion reward notifications{2}.", - "ERROR_NO_INVASION_SUBSCRIPTIONS": "{0} is not subscribed to any Team Rocket invasion notifications{1}.", - "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** {2} League PvP notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your {2} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} has unsubscribed from **all** {1} League PvP Pokemon notifications.", - "EVENT_POKEMON_SET": "{0} event Pokemon set to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_ADD": "{0} event Pokemon added to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_REMOVE": "{0} event Pokemon `{1}` removed.", - "DIRECT_MESSAGE_NOT_SUPPORTED": "{0} Direct message is not supported for this command.", - "PVP_GREAT_LEAGUE": "Great League", - "PVP_ULTRA_LEAGUE": "Ultra League", - "PVP_RANK": "Rank", - "PVP_CP": "CP", - "weather_0": "None", - "weather_1": "Clear", - "weather_2": "Rainy", - "weather_3": "PartlyCloudy", - "weather_4": "Cloudy", - "weather_5": "Windy", - "weather_6": "Snow", - "weather_7": "Fog", - "quest_1": "{0} time(s) First Catch OTD", - "quest_2": "{0} time(s) First Pokestop OTD", - "quest_3": "Multi Part Quest", - "quest_4": "Catch {0} Pokemon", - "quest_5": "Spin {0} Pokestop(s)", - "quest_6": "Hatch {0} Egg(s)", - "quest_7": "Complete {0} Gym Battle(s)", - "quest_8": "Complete {0} Raid Battle(s)", - "quest_9": "Complete {0} Quest", - "quest_10": "Transfer {0} Pokemon", - "quest_11": "Favorite {0} Pokemon", - "quest_12": "Autocomplete", - "quest_13": "Use {0} Berries on Pokemon", - "quest_14": "Power up {0} Pokemon", - "quest_15": "Evolve {0} Pokemon", - "quest_16": "Land {0} Throw(s)", - "quest_17": "Get {0} Buddy candy", - "quest_18": "Get {0} Badge(s)", - "quest_19": "Get {0} Level", - "quest_20": "Join {0} Raid Battle(s)", - "quest_21": "Complete {0} Battle(s)", - "quest_22": "Add {0} Friend(s)", - "quest_23": "Trade {0} Pokemon", - "quest_24": "Send {0} Gift(s)", - "quest_25": "Evolve {0} Into Specific Pokemon", - "quest_27": "Complete {0} Combat(s)", - "quest_28": "Take {0} Snapshot(s)", - "quest_29": "Battle {0} Team Rocket Battle(s)", - "quest_30": "Purify {0} Pokemon", - "quest_31": "Find {0} Team Rocket Invasion(s)", - "quest_32": "{0} time(s) First Grunt OTD", - "quest_33": "Feed your Buddy {0} times", - "quest_34": "Earn {0} hearts with your Buddy", - "quest_35": "Play {0} times with your Buddy", - "quest_36": "Increase your Buddy Level {0} times", - "quest_37": "Earn {0} Friendship points by Walking with your Buddy", - "quest_38": "Earn {0} Souvenirs from your Buddy", - "quest_39": "Use Incense {0} times", - "quest_40": "quest_40", - "quest_41": "quest_41", - "quest_42": "quest_42", - "quest_43": "Mega-Evolve {0} Pokemon", - "quest_44": "quest_44", - "quest_45": "quest_45", - "quest_57": "Take {0} Snapshot(s) of wild Pokemon", - "quest_reward_1": "{0:N0} XP", - "quest_reward_2": "{0} {1}", - "quest_reward_3": "{0:N0} Stardust", - "quest_reward_4": "{0} {1} Candy", - "quest_reward_5": "Avatar Clothing", - "quest_reward_6": "Quest", - "quest_reward_7": "{0}", - "quest_reward_8": "{0:N0} Pokecoins", - "quest_reward_11": "Sticker", - "quest_reward_12": "Mega Energy", - "quest_condition_1": "Type(s): {0}", - "quest_condition_2": "Pokemon: {0}", - "quest_condition_3": "Weather Boosted", - "quest_condition_4": "Daily Capture Bonus", - "quest_condition_5": "Daily Spin Bonus", - "quest_condition_6": "Win Raid", - "quest_condition_7": "Raid Level(s): {0}", - "quest_condition_8": "{0} Throw", - "quest_condition_9": "Win Gym Battle", - "quest_condition_10": "Super Effective Charge", - "quest_condition_11": "Item: {0}", - "quest_condition_12": "Unique Pokestop", - "quest_condition_13": "Quest Context", - "quest_condition_14": "{0} Throw In a Row", - "quest_condition_15": "Curve Ball", - "quest_condition_16": "Badge Type", - "quest_condition_17": "Player Level", - "quest_condition_18": "Win Battle", - "quest_condition_19": "New Friend", - "quest_condition_20": "Days In a Row", - "quest_condition_21": "Unique Pokemon", - "quest_condition_22": "NPC Combat", - "quest_condition_23": "PVP Combat", - "quest_condition_24": "Location", - "quest_condition_25": "Distance", - "quest_condition_26": "Pokemon Alignment(s): {0}", - "quest_condition_27": "Invasion Category(s): {0}", - "quest_condition_28": "With Buddy", - "quest_condition_37": "With Mega Evo Pokemon", - "alignment_1": "Shadow", - "alignment_2": "Purified", - "character_category_1": "Team Leader", - "character_category_2": "Grunt", - "throw_type_10": "Nice", - "throw_type_11": "Great", - "throw_type_12": "Excellent", - "throw_type_13": "Curve", - "item_1": "モンスターボール", - "item_2": "スーパーボール", - "item_3": "ハイパーボール", - "item_4": "マスターボール", - "item_5": "Premier Ball", - "item_101": "キズぐすり", - "item_102": "いいキズぐすり", - "item_103": "すごいキズぐすり", - "item_104": "まんたんのくすり", - "item_201": "げんきのかけら", - "item_202": "げんきのかたまり", - "item_301": "しあわせタマゴ", - "item_401": "おこう", - "item_402": "Spicy Incense", - "item_403": "Cool Incense", - "item_404": "Floral Incense", - "item_501": "ルアーモジュール", - "item_502": "アイスルアー", - "item_503": "ハーブルアー", - "item_504": "マグネットルアー", - "item_602": "プラスパワー", - "item_603": "ディフェンダー", - "item_604": "不明", - "item_701": "ズリのみ", - "item_702": "ブリーのみ", - "item_703": "ナナのみ", - "item_704": "セシナのみ", - "item_705": "パイルのみ", - "item_706": "きんのズリのみ", - "item_707": "Golden Nanab Berry", - "item_708": "ぎんのパイルのみ", - "item_801": "カメラ", - "item_901": "ムゲンふかそうち", - "item_902": "ふかそうち", - "item_903": "スーパーふかそうち", - "item_1001": "Pokemon Storage Upgrade", - "item_1002": "Item Storage Upgrade", - "item_1101": "たいようのいし", - "item_1102": "おうじゃのしるし", - "item_1103": "メタルコート", - "item_1104": "りゅうのウロコ", - "item_1105": "アップグレード", - "item_1106": "シンオウのいし", - "item_1107": "イッシュのいし", - "item_1201": "わざマシン ノーマル", - "item_1202": "わざマシン スペシャル", - "item_1301": "ふしぎなアメ", - "item_1401": "レイドパス", - "item_1402": "プレミアムバトルパス", - "item_1403": "EXレイドパス", - "item_1404": "ほしのかけら", - "item_1405": "ギフト", - "lure_501": "Normal", - "lure_502": "Glacial", - "lure_503": "Mossy", - "lure_504": "Magnetic", - "grunt_0": "None", - "grunt_1": "ブランシェ", - "grunt_2": "キャンデラ", - "grunt_3": "スパーク", - "grunt_4": "GOロケット団 したっぱ (male)", - "grunt_5": "GOロケット団 したっぱ (female)", - "grunt_6": "むし - GOロケット団 したっぱ (female)", - "grunt_7": "むし - GOロケット団 したっぱ (male)", - "grunt_8": "Darkness - Female Grunt", - "grunt_9": "Darkness - Male Grunt", - "grunt_10": "あく - GOロケット団 したっぱ (female)", - "grunt_11": "あく - GOロケット団 したっぱ (male)", - "grunt_12": "ドラゴン - GOロケット団 したっぱ (female)", - "grunt_13": "ドラゴン - GOロケット団 したっぱ (male)", - "grunt_14": "フェアリー - GOロケット団 したっぱ (female)", - "grunt_15": "フェアリー - GOロケット団 したっぱ (male)", - "grunt_16": "かくとう - GOロケット団 したっぱ (female)", - "grunt_17": "かくとう - GOロケット団 したっぱ (male)", - "grunt_18": "ほのお - GOロケット団 したっぱ (female)", - "grunt_19": "ほのお - GOロケット団 したっぱ (male)", - "grunt_20": "ひこう - GOロケット団 したっぱ (female)", - "grunt_21": "ひこう - GOロケット団 したっぱ (male)", - "grunt_22": "くさ - GOロケット団 したっぱ (female)", - "grunt_23": "くさ - GOロケット団 したっぱ (male)", - "grunt_24": "じめん - GOロケット団 したっぱ (female)", - "grunt_25": "じめん - GOロケット団 したっぱ (male)", - "grunt_26": "こおり - GOロケット団 したっぱ (female)", - "grunt_27": "こおり - GOロケット団 したっぱ (male)", - "grunt_28": "GOロケット団 したっぱ (female)", - "grunt_29": "GOロケット団 したっぱ (male)", - "grunt_30": "ノーマル - GOロケット団 したっぱ (female)", - "grunt_31": "ノーマル - GOロケット団 したっぱ (male)", - "grunt_32": "どく - GOロケット団 したっぱ (female)", - "grunt_33": "どく - GOロケット団 したっぱ (male)", - "grunt_34": "エスパー - GOロケット団 したっぱ (female)", - "grunt_35": "エスパー - GOロケット団 したっぱ (male)", - "grunt_36": "いわ - GOロケット団 したっぱ (female)", - "grunt_37": "いわ - GOロケット団 したっぱ (male)", - "grunt_38": "みず - GOロケット団 したっぱ (female)", - "grunt_39": "みず - GOロケット団 したっぱ (male)", - "grunt_40": "Player Team Leader", - "grunt_41": "クリフ リーダー", - "grunt_42": "アルロ リーダー", - "grunt_43": "シエラ リーダー", - "grunt_44": "サカキ", - "grunt_45": "おとり要員 (male)", - "grunt_46": "おとり要員 (female)", - "grunt_47": "ゴースト - GOロケット団 したっぱ (female)", - "grunt_48": "ゴースト - GOロケット団 したっぱ (male)", - "grunt_49": "でんき - GOロケット団 したっぱ (female)", - "grunt_50": "でんき - GOロケット団 したっぱ (male)", - "poke_0": "--", - "poke_1": "フシギダネ", - "poke_2": "フシギソウ", - "poke_3": "フシギバナ", - "poke_4": "ヒトカゲ", - "poke_5": "リザード", - "poke_6": "リザードン", - "poke_7": "ゼニガメ", - "poke_8": "カメール", - "poke_9": "カメックス", - "poke_10": "キャタピー", - "poke_11": "トランセル", - "poke_12": "バタフリー", - "poke_13": "ビードル", - "poke_14": "コクーン", - "poke_15": "スピアー", - "poke_16": "ポッポ", - "poke_17": "ピジョン", - "poke_18": "ピジョット", - "poke_19": "コラッタ", - "poke_20": "ラッタ", - "poke_21": "オニスズメ", - "poke_22": "オニドリル", - "poke_23": "アーボ", - "poke_24": "アーボック", - "poke_25": "ピカチュウ", - "poke_26": "ライチュウ", - "poke_27": "サンド", - "poke_28": "サンドパン", - "poke_29": "ニドラン♀", - "poke_30": "ニドリーナ", - "poke_31": "ニドクイン", - "poke_32": "ニドラン♂", - "poke_33": "ニドリーノ", - "poke_34": "ニドキング", - "poke_35": "ピッピ", - "poke_36": "ピクシー", - "poke_37": "ロコン", - "poke_38": "キュウコン", - "poke_39": "プリン", - "poke_40": "プクリン", - "poke_41": "ズバット", - "poke_42": "ゴルバット", - "poke_43": "ナゾノクサ", - "poke_44": "クサイハナ", - "poke_45": "ラフレシア", - "poke_46": "パラス", - "poke_47": "パラセクト", - "poke_48": "コンパン", - "poke_49": "モルフォン", - "poke_50": "ディグダ", - "poke_51": "ダグトリオ", - "poke_52": "ニャース", - "poke_53": "ペルシアン", - "poke_54": "コダック", - "poke_55": "ゴルダック", - "poke_56": "マンキー", - "poke_57": "オコリザル", - "poke_58": "ガーディ", - "poke_59": "ウインディ", - "poke_60": "ニョロモ", - "poke_61": "ニョロゾ", - "poke_62": "ニョロボン", - "poke_63": "ケーシィ", - "poke_64": "ユンゲラー", - "poke_65": "フーディン", - "poke_66": "ワンリキー", - "poke_67": "ゴーリキー", - "poke_68": "カイリキー", - "poke_69": "マダツボミ", - "poke_70": "ウツドン", - "poke_71": "ウツボット", - "poke_72": "メノクラゲ", - "poke_73": "ドククラゲ", - "poke_74": "イシツブテ", - "poke_75": "ゴローン", - "poke_76": "ゴローニャ", - "poke_77": "ポニータ", - "poke_78": "ギャロップ", - "poke_79": "ヤドン", - "poke_80": "ヤドラン", - "poke_81": "コイル", - "poke_82": "レアコイル", - "poke_83": "カモネギ", - "poke_84": "ドードー", - "poke_85": "ドードリオ", - "poke_86": "パウワウ", - "poke_87": "ジュゴン", - "poke_88": "ベトベター", - "poke_89": "ベトベトン", - "poke_90": "シェルダー", - "poke_91": "パルシェン", - "poke_92": "ゴース", - "poke_93": "ゴースト", - "poke_94": "ゲンガー", - "poke_95": "イワーク", - "poke_96": "スリープ", - "poke_97": "スリーパー", - "poke_98": "クラブ", - "poke_99": "キングラー", - "poke_100": "ビリリダマ", - "poke_101": "マルマイン", - "poke_102": "タマタマ", - "poke_103": "ナッシー", - "poke_104": "カラカラ", - "poke_105": "ガラガラ", - "poke_106": "サワムラー", - "poke_107": "エビワラー", - "poke_108": "ベロリンガ", - "poke_109": "ドガース", - "poke_110": "マタドガス", - "poke_111": "サイホーン", - "poke_112": "サイドン", - "poke_113": "ラッキー", - "poke_114": "モンジャラ", - "poke_115": "ガルーラ", - "poke_116": "タッツー", - "poke_117": "シードラ", - "poke_118": "トサキント", - "poke_119": "アズマオウ", - "poke_120": "ヒトデマン", - "poke_121": "スターミー", - "poke_122": "バリヤード", - "poke_123": "ストライク", - "poke_124": "ルージュラ", - "poke_125": "エレブー", - "poke_126": "ブーバー", - "poke_127": "カイロス", - "poke_128": "ケンタロス", - "poke_129": "コイキング", - "poke_130": "ギャラドス", - "poke_131": "ラプラス", - "poke_132": "メタモン", - "poke_133": "イーブイ", - "poke_134": "シャワーズ", - "poke_135": "サンダース", - "poke_136": "ブースター", - "poke_137": "ポリゴン", - "poke_138": "オムナイト", - "poke_139": "オムスター", - "poke_140": "カブト", - "poke_141": "カブトプス", - "poke_142": "プテラ", - "poke_143": "カビゴン", - "poke_144": "フリーザー", - "poke_145": "サンダー", - "poke_146": "ファイヤー", - "poke_147": "ミニリュウ", - "poke_148": "ハクリュー", - "poke_149": "カイリュー", - "poke_150": "ミュウツー", - "poke_151": "ミュウ", - "poke_152": "チコリータ", - "poke_153": "ベイリーフ", - "poke_154": "メガニウム", - "poke_155": "ヒノアラシ", - "poke_156": "マグマラシ", - "poke_157": "バクフーン", - "poke_158": "ワニノコ", - "poke_159": "アリゲイツ", - "poke_160": "オーダイル", - "poke_161": "オタチ", - "poke_162": "オオタチ", - "poke_163": "ホーホー", - "poke_164": "ヨルノズク", - "poke_165": "レディバ", - "poke_166": "レディアン", - "poke_167": "イトマル", - "poke_168": "アリアドス", - "poke_169": "クロバット", - "poke_170": "チョンチー", - "poke_171": "ランターン", - "poke_172": "ピチュー", - "poke_173": "ピィ", - "poke_174": "ププリン", - "poke_175": "トゲピー", - "poke_176": "トゲチック", - "poke_177": "ネイティ", - "poke_178": "ネイティオ", - "poke_179": "メリープ", - "poke_180": "モココ", - "poke_181": "デンリュウ", - "poke_182": "キレイハナ", - "poke_183": "マリル", - "poke_184": "マリルリ", - "poke_185": "ウソッキー", - "poke_186": "ニョロトノ", - "poke_187": "ハネッコ", - "poke_188": "ポポッコ", - "poke_189": "ワタッコ", - "poke_190": "エイパム", - "poke_191": "ヒマナッツ", - "poke_192": "キマワリ", - "poke_193": "ヤンヤンマ", - "poke_194": "ウパー", - "poke_195": "ヌオー", - "poke_196": "エーフィ", - "poke_197": "ブラッキー", - "poke_198": "ヤミカラス", - "poke_199": "ヤドキング", - "poke_200": "ムウマ", - "poke_201": "アンノーン", - "poke_202": "ソーナンス", - "poke_203": "キリンリキ", - "poke_204": "クヌギダマ", - "poke_205": "フォレトス", - "poke_206": "ノコッチ", - "poke_207": "グライガー", - "poke_208": "ハガネール", - "poke_209": "ブルー", - "poke_210": "グランブル", - "poke_211": "ハリーセン", - "poke_212": "ハッサム", - "poke_213": "ツボツボ", - "poke_214": "ヘラクロス", - "poke_215": "ニューラ", - "poke_216": "ヒメグマ", - "poke_217": "リングマ", - "poke_218": "マグマッグ", - "poke_219": "マグカルゴ", - "poke_220": "ウリムー", - "poke_221": "イノムー", - "poke_222": "サニーゴ", - "poke_223": "テッポウオ", - "poke_224": "オクタン", - "poke_225": "デリバード", - "poke_226": "マンタイン", - "poke_227": "エアームド", - "poke_228": "デルビル", - "poke_229": "ヘルガー", - "poke_230": "キングドラ", - "poke_231": "ゴマゾウ", - "poke_232": "ドンファン", - "poke_233": "ポリゴン2", - "poke_234": "オドシシ", - "poke_235": "ドーブル", - "poke_236": "バルキー", - "poke_237": "カポエラー", - "poke_238": "ムチュール", - "poke_239": "エレキッド", - "poke_240": "ブビィ", - "poke_241": "ミルタンク", - "poke_242": "ハピナス", - "poke_243": "ライコウ", - "poke_244": "エンテイ", - "poke_245": "スイクン", - "poke_246": "ヨーギラス", - "poke_247": "サナギラス", - "poke_248": "バンギラス", - "poke_249": "ルギア", - "poke_250": "ホウオウ", - "poke_251": "セレビィ", - "poke_252": "キモリ", - "poke_253": "ジュプトル", - "poke_254": "ジュカイン", - "poke_255": "アチャモ", - "poke_256": "ワカシャモ", - "poke_257": "バシャーモ", - "poke_258": "ミズゴロウ", - "poke_259": "ヌマクロー", - "poke_260": "ラグラージ", - "poke_261": "ポチエナ", - "poke_262": "グラエナ", - "poke_263": "ジグザグマ", - "poke_264": "マッスグマ", - "poke_265": "ケムッソ", - "poke_266": "カラサリス", - "poke_267": "アゲハント", - "poke_268": "マユルド", - "poke_269": "ドクケイル", - "poke_270": "ハスボー", - "poke_271": "ハスブレロ", - "poke_272": "ルンパッパ", - "poke_273": "タネボー", - "poke_274": "コノハナ", - "poke_275": "ダーテング", - "poke_276": "スバメ", - "poke_277": "オオスバメ", - "poke_278": "キャモメ", - "poke_279": "ペリッパー", - "poke_280": "ラルトス", - "poke_281": "キルリア", - "poke_282": "サーナイト", - "poke_283": "アメタマ", - "poke_284": "アメモース", - "poke_285": "キノココ", - "poke_286": "キノガッサ", - "poke_287": "ナマケロ", - "poke_288": "ヤルキモノ", - "poke_289": "ケッキング", - "poke_290": "ツチニン", - "poke_291": "テッカニン", - "poke_292": "ヌケニン", - "poke_293": "ゴニョニョ", - "poke_294": "ドゴーム", - "poke_295": "バクオング", - "poke_296": "マクノシタ", - "poke_297": "ハリテヤマ", - "poke_298": "ルリリ", - "poke_299": "ノズパス", - "poke_300": "エネコ", - "poke_301": "エネコロロ", - "poke_302": "ヤミラミ", - "poke_303": "クチート", - "poke_304": "ココドラ", - "poke_305": "コドラ", - "poke_306": "ボスゴドラ", - "poke_307": "アサナン", - "poke_308": "チャーレム", - "poke_309": "ラクライ", - "poke_310": "ライボルト", - "poke_311": "プラスル", - "poke_312": "マイナン", - "poke_313": "バルビート", - "poke_314": "イルミーゼ", - "poke_315": "ロゼリア", - "poke_316": "ゴクリン", - "poke_317": "マルノーム", - "poke_318": "キバニア", - "poke_319": "サメハダー", - "poke_320": "ホエルコ", - "poke_321": "ホエルオー", - "poke_322": "ドンメル", - "poke_323": "バクーダ", - "poke_324": "コータス", - "poke_325": "バネブー", - "poke_326": "ブーピッグ", - "poke_327": "パッチール", - "poke_328": "ナックラー", - "poke_329": "ビブラーバ", - "poke_330": "フライゴン", - "poke_331": "サボネア", - "poke_332": "ノクタス", - "poke_333": "チルット", - "poke_334": "チルタリス", - "poke_335": "ザングース", - "poke_336": "ハブネーク", - "poke_337": "ルナトーン", - "poke_338": "ソルロック", - "poke_339": "ドジョッチ", - "poke_340": "ナマズン", - "poke_341": "ヘイガニ", - "poke_342": "シザリガー", - "poke_343": "ヤジロン", - "poke_344": "ネンドール", - "poke_345": "リリーラ", - "poke_346": "ユレイドル", - "poke_347": "アノプス", - "poke_348": "アーマルド", - "poke_349": "ヒンバス", - "poke_350": "ミロカロス", - "poke_351": "ポワルン", - "poke_352": "カクレオン", - "poke_353": "カゲボウズ", - "poke_354": "ジュペッタ", - "poke_355": "ヨマワル", - "poke_356": "サマヨール", - "poke_357": "トロピウス", - "poke_358": "チリーン", - "poke_359": "アブソル", - "poke_360": "ソーナノ", - "poke_361": "ユキワラシ", - "poke_362": "オニゴーリ", - "poke_363": "タマザラシ", - "poke_364": "トドグラー", - "poke_365": "トドゼルガ", - "poke_366": "パールル", - "poke_367": "ハンテール", - "poke_368": "サクラビス", - "poke_369": "ジーランス", - "poke_370": "ラブカス", - "poke_371": "タツベイ", - "poke_372": "コモルー", - "poke_373": "ボーマンダ", - "poke_374": "ダンバル", - "poke_375": "メタング", - "poke_376": "メタグロス", - "poke_377": "レジロック", - "poke_378": "レジアイス", - "poke_379": "レジスチル", - "poke_380": "ラティアス", - "poke_381": "ラティオス", - "poke_382": "カイオーガ", - "poke_383": "グラードン", - "poke_384": "レックウザ", - "poke_385": "ジラーチ", - "poke_386": "デオキシス", - "poke_387": "ナエトル", - "poke_388": "ハヤシガメ", - "poke_389": "ドダイトス", - "poke_390": "ヒコザル", - "poke_391": "モウカザル", - "poke_392": "ゴウカザル", - "poke_393": "ポッチャマ", - "poke_394": "ポッタイシ", - "poke_395": "エンペルト", - "poke_396": "ムックル", - "poke_397": "ムクバード", - "poke_398": "ムクホーク", - "poke_399": "ビッパ", - "poke_400": "ビーダル", - "poke_401": "コロボーシ", - "poke_402": "コロトック", - "poke_403": "コリンク", - "poke_404": "ルクシオ", - "poke_405": "レントラー", - "poke_406": "スボミー", - "poke_407": "ロズレイド", - "poke_408": "ズガイドス", - "poke_409": "ラムパルド", - "poke_410": "タテトプス", - "poke_411": "トリデプス", - "poke_412": "ミノムッチ", - "poke_413": "ミノマダム", - "poke_414": "ガーメイル", - "poke_415": "ミツハニー", - "poke_416": "ビークイン", - "poke_417": "パチリス", - "poke_418": "ブイゼル", - "poke_419": "フローゼル", - "poke_420": "チェリンボ", - "poke_421": "チェリム", - "poke_422": "カラナクシ", - "poke_423": "トリトドン", - "poke_424": "エテボース", - "poke_425": "フワンテ", - "poke_426": "フワライド", - "poke_427": "ミミロル", - "poke_428": "ミミロップ", - "poke_429": "ムウマージ", - "poke_430": "ドンカラス", - "poke_431": "ニャルマー", - "poke_432": "ブニャット", - "poke_433": "リーシャン", - "poke_434": "スカンプー", - "poke_435": "スカタンク", - "poke_436": "ドーミラー", - "poke_437": "ドータクン", - "poke_438": "ウソハチ", - "poke_439": "マネネ", - "poke_440": "ピンプク", - "poke_441": "ペラップ", - "poke_442": "ミカルゲ", - "poke_443": "フカマル", - "poke_444": "ガバイト", - "poke_445": "ガブリアス", - "poke_446": "ゴンベ", - "poke_447": "リオル", - "poke_448": "ルカリオ", - "poke_449": "ヒポポタス", - "poke_450": "カバルドン", - "poke_451": "スコルピ", - "poke_452": "ドラピオン", - "poke_453": "グレッグル", - "poke_454": "ドクロッグ", - "poke_455": "マスキッパ", - "poke_456": "ケイコウオ", - "poke_457": "ネオラント", - "poke_458": "タマンタ", - "poke_459": "ユキカブリ", - "poke_460": "ユキノオー", - "poke_461": "マニューラ", - "poke_462": "ジバコイル", - "poke_463": "ベロベルト", - "poke_464": "ドサイドン", - "poke_465": "モジャンボ", - "poke_466": "エレキブル", - "poke_467": "ブーバーン", - "poke_468": "トゲキッス", - "poke_469": "メガヤンマ", - "poke_470": "リーフィア", - "poke_471": "グレイシア", - "poke_472": "グライオン", - "poke_473": "マンムー", - "poke_474": "ポリゴンZ", - "poke_475": "エルレイド", - "poke_476": "ダイノーズ", - "poke_477": "ヨノワール", - "poke_478": "ユキメノコ", - "poke_479": "ロトム", - "poke_480": "ユクシー", - "poke_481": "エムリット", - "poke_482": "アグノム", - "poke_483": "ディアルガ", - "poke_484": "パルキア", - "poke_485": "ヒードラン", - "poke_486": "レジギガス", - "poke_487": "ギラティナ", - "poke_488": "クレセリア", - "poke_489": "フィオネ", - "poke_490": "マナフィ", - "poke_491": "ダークライ", - "poke_492": "シェイミ", - "poke_493": "アルセウス", - "poke_494": "ビクティニ", - "poke_495": "ツタージャ", - "poke_496": "ジャノビー", - "poke_497": "ジャローダ", - "poke_498": "ポカブ", - "poke_499": "チャオブー", - "poke_500": "エンブオー", - "poke_501": "ミジュマル", - "poke_502": "フタチマル", - "poke_503": "ダイケンキ", - "poke_504": "ミネズミ", - "poke_505": "ミルホッグ", - "poke_506": "ヨーテリー", - "poke_507": "ハーデリア", - "poke_508": "ムーランド", - "poke_509": "チョロネコ", - "poke_510": "レパルダス", - "poke_511": "ヤナップ", - "poke_512": "ヤナッキー", - "poke_513": "バオップ", - "poke_514": "バオッキー", - "poke_515": "ヒヤップ", - "poke_516": "ヒヤッキー", - "poke_517": "ムンナ", - "poke_518": "ムシャーナ", - "poke_519": "マメパト", - "poke_520": "ハトーボー", - "poke_521": "ケンホロウ", - "poke_522": "シママ", - "poke_523": "ゼブライカ", - "poke_524": "ダンゴロ", - "poke_525": "ガントル", - "poke_526": "ギガイアス", - "poke_527": "コロモリ", - "poke_528": "ココロモリ", - "poke_529": "モグリュー", - "poke_530": "ドリュウズ", - "poke_531": "タブンネ", - "poke_532": "ドッコラー", - "poke_533": "ドテッコツ", - "poke_534": "ローブシン", - "poke_535": "オタマロ", - "poke_536": "ガマガル", - "poke_537": "ガマゲロゲ", - "poke_538": "ナゲキ", - "poke_539": "ダゲキ", - "poke_540": "クルミル", - "poke_541": "クルマユ", - "poke_542": "ハハコモリ", - "poke_543": "フシデ", - "poke_544": "ホイーガ", - "poke_545": "ペンドラー", - "poke_546": "モンメン", - "poke_547": "エルフーン", - "poke_548": "チュリネ", - "poke_549": "ドレディア", - "poke_550": "バスラオ", - "poke_551": "メグロコ", - "poke_552": "ワルビル", - "poke_553": "ワルビアル", - "poke_554": "ダルマッカ", - "poke_555": "ヒヒダルマ", - "poke_556": "マラカッチ", - "poke_557": "イシズマイ", - "poke_558": "イワパレス", - "poke_559": "ズルッグ", - "poke_560": "ズルズキン", - "poke_561": "シンボラー", - "poke_562": "デスマス", - "poke_563": "デスカーン", - "poke_564": "プロトーガ", - "poke_565": "アバゴーラ", - "poke_566": "アーケン", - "poke_567": "アーケオス", - "poke_568": "ヤブクロン", - "poke_569": "ダストダス", - "poke_570": "ゾロア", - "poke_571": "ゾロアーク", - "poke_572": "チラーミィ", - "poke_573": "チラチーノ", - "poke_574": "ゴチム", - "poke_575": "ゴチミル", - "poke_576": "ゴチルゼル", - "poke_577": "ユニラン", - "poke_578": "ダブラン", - "poke_579": "ランクルス", - "poke_580": "コアルヒー", - "poke_581": "スワンナ", - "poke_582": "バニプッチ", - "poke_583": "バニリッチ", - "poke_584": "バイバニラ", - "poke_585": "シキジカ", - "poke_586": "メブキジカ", - "poke_587": "エモンガ", - "poke_588": "カブルモ", - "poke_589": "シュバルゴ", - "poke_590": "タマゲタケ", - "poke_591": "モロバレル", - "poke_592": "プルリル", - "poke_593": "ブルンゲル", - "poke_594": "ママンボウ", - "poke_595": "バチュル", - "poke_596": "デンチュラ", - "poke_597": "テッシード", - "poke_598": "ナットレイ", - "poke_599": "ギアル", - "poke_600": "ギギアル", - "poke_601": "ギギギアル", - "poke_602": "シビシラス", - "poke_603": "シビビール", - "poke_604": "シビルドン", - "poke_605": "リグレー", - "poke_606": "オーベム", - "poke_607": "ヒトモシ", - "poke_608": "ランプラー", - "poke_609": "シャンデラ", - "poke_610": "キバゴ", - "poke_611": "オノンド", - "poke_612": "オノノクス", - "poke_613": "クマシュン", - "poke_614": "ツンベアー", - "poke_615": "フリージオ", - "poke_616": "チョボマキ", - "poke_617": "アギルダー", - "poke_618": "マッギョ", - "poke_619": "コジョフー", - "poke_620": "コジョンド", - "poke_621": "クリムガン", - "poke_622": "ゴビット", - "poke_623": "ゴルーグ", - "poke_624": "コマタナ", - "poke_625": "キリキザン", - "poke_626": "バッフロン", - "poke_627": "ワシボン", - "poke_628": "ウォーグル", - "poke_629": "バルチャイ", - "poke_630": "バルジーナ", - "poke_631": "クイタラン", - "poke_632": "アイアント", - "poke_633": "モノズ", - "poke_634": "ジヘッド", - "poke_635": "サザンドラ", - "poke_636": "メラルバ", - "poke_637": "ウルガモス", - "poke_638": "コバルオン", - "poke_639": "テラキオン", - "poke_640": "ビリジオン", - "poke_641": "トルネロス", - "poke_642": "ボルトロス", - "poke_643": "レシラム", - "poke_644": "ゼクロム", - "poke_645": "ランドロス", - "poke_646": "キュレム", - "poke_647": "ケルディオ", - "poke_648": "メロエッタ", - "poke_649": "ゲノセクト", - "poke_650": "ハリマロン", - "poke_651": "ハリボーグ", - "poke_652": "ブリガロン", - "poke_653": "フォッコ", - "poke_654": "テールナー", - "poke_655": "マフォクシー", - "poke_656": "ケロマツ", - "poke_657": "ゲコガシラ", - "poke_658": "ゲッコウガ", - "poke_659": "ホルビー", - "poke_660": "ホルード", - "poke_661": "ヤヤコマ", - "poke_662": "ヒノヤコマ", - "poke_663": "ファイアロー", - "poke_664": "コフキムシ", - "poke_665": "コフーライ", - "poke_666": "ビビヨン", - "poke_667": "シシコ", - "poke_668": "カエンジシ", - "poke_669": "フラベベ", - "poke_670": "フラエッテ", - "poke_671": "フラージェス", - "poke_672": "メェークル", - "poke_673": "ゴーゴート", - "poke_674": "ヤンチャム", - "poke_675": "ゴロンダ", - "poke_676": "トリミアン", - "poke_677": "ニャスパー", - "poke_678": "ニャオニクス", - "poke_679": "ヒトツキ", - "poke_680": "ニダンギル", - "poke_681": "ギルガルド", - "poke_682": "シュシュプ", - "poke_683": "フレフワン", - "poke_684": "ペロッパフ", - "poke_685": "ペロリーム", - "poke_686": "マーイーカ", - "poke_687": "カラマネロ", - "poke_688": "カメテテ", - "poke_689": "ガメノデス", - "poke_690": "クズモー", - "poke_691": "ドラミドロ", - "poke_692": "ウデッポウ", - "poke_693": "ブロスター", - "poke_694": "エリキテル", - "poke_695": "エレザード", - "poke_696": "チゴラス", - "poke_697": "ガチゴラス", - "poke_698": "アマルス", - "poke_699": "アマルルガ", - "poke_700": "ニンフィア", - "poke_701": "ルチャブル", - "poke_702": "デデンネ", - "poke_703": "メレシー", - "poke_704": "ヌメラ", - "poke_705": "ヌメイル", - "poke_706": "ヌメルゴン", - "poke_707": "クレッフィ", - "poke_708": "ボクレー", - "poke_709": "オーロット", - "poke_710": "バケッチャ", - "poke_711": "パンプジン", - "poke_712": "カチコール", - "poke_713": "クレベース", - "poke_714": "オンバット", - "poke_715": "オンバーン", - "poke_716": "ゼルネアス", - "poke_717": "イベルタル", - "poke_718": "Zygarde", - "poke_719": "Diancie", - "poke_720": "Hoopa", - "poke_721": "Volcanion", - "poke_722": "Rowlet", - "poke_723": "Dartrix", - "poke_724": "Decidueye", - "poke_725": "Litten", - "poke_726": "Torracat", - "poke_727": "Incineroar", - "poke_728": "Popplio", - "poke_729": "Brionne", - "poke_730": "Primarina", - "poke_731": "Pikipek", - "poke_732": "Trumbeak", - "poke_733": "Toucannon", - "poke_734": "Yungoos", - "poke_735": "Gumshoos", - "poke_736": "Grubbin", - "poke_737": "Charjabug", - "poke_738": "Vikavolt", - "poke_739": "Crabrawler", - "poke_740": "Crabominable", - "poke_741": "Oricorio", - "poke_742": "Cutiefly", - "poke_743": "Ribombee", - "poke_744": "Rockruff", - "poke_745": "Lycanroc", - "poke_746": "Wishiwashi", - "poke_747": "Mareanie", - "poke_748": "Toxapex", - "poke_749": "Mudbray", - "poke_750": "Mudsdale", - "poke_751": "Dewpider", - "poke_752": "Araquanid", - "poke_753": "Fomantis", - "poke_754": "Lurantis", - "poke_755": "Morelull", - "poke_756": "Shiinotic", - "poke_757": "Salandit", - "poke_758": "Salazzle", - "poke_759": "Stufful", - "poke_760": "Bewear", - "poke_761": "Bounsweet", - "poke_762": "Steenee", - "poke_763": "Tsareena", - "poke_764": "Comfey", - "poke_765": "Oranguru", - "poke_766": "Passimian", - "poke_767": "Wimpod", - "poke_768": "Golisopod", - "poke_769": "Sandygast", - "poke_770": "Palossand", - "poke_771": "Pyukumuku", - "poke_772": "Type: Null", - "poke_773": "Silvally", - "poke_774": "Minior", - "poke_775": "Komala", - "poke_776": "Turtonator", - "poke_777": "Togedemaru", - "poke_778": "Mimikyu", - "poke_779": "Bruxish", - "poke_780": "Drampa", - "poke_781": "Dhelmise", - "poke_782": "Jangmo-o", - "poke_783": "Hakamo-o", - "poke_784": "Kommo-o", - "poke_785": "Tapu Koko", - "poke_786": "Tapu Lele", - "poke_787": "Tapu Bulu", - "poke_788": "Tapu Fini", - "poke_789": "Cosmog", - "poke_790": "Cosmoem", - "poke_791": "Solgaleo", - "poke_792": "Lunala", - "poke_793": "Nihilego", - "poke_794": "Buzzwole", - "poke_795": "Pheromosa", - "poke_796": "Xurkitree", - "poke_797": "Celesteela", - "poke_798": "Kartana", - "poke_799": "Guzzlord", - "poke_800": "Necrozma", - "poke_801": "Magearna", - "poke_802": "Marshadow", - "poke_808": "メルタン", - "poke_809": "メルメタル", - "poke_862": "タチフサグマ", - "poke_863": "ニャイキング", - "poke_865": "ネギガナイト", - "form_1": "A", - "form_2": "B", - "form_3": "C", - "form_4": "D", - "form_5": "E", - "form_6": "F", - "form_7": "G", - "form_8": "H", - "form_9": "I", - "form_10": "J", - "form_11": "K", - "form_12": "L", - "form_13": "M", - "form_14": "N", - "form_15": "O", - "form_16": "P", - "form_17": "Q", - "form_18": "R", - "form_19": "S", - "form_20": "T", - "form_21": "U", - "form_22": "V", - "form_23": "W", - "form_24": "X", - "form_25": "Y", - "form_26": "Z", - "form_27": "!", - "form_28": "?", - "form_29": "Normal", - "form_30": "Sunny", - "form_31": "Rainy", - "form_32": "Snowy", - "form_33": "Normal", - "form_34": "Attack", - "form_35": "Defense", - "form_36": "Speed", - "form_37": "00", - "form_38": "01", - "form_39": "02", - "form_40": "03", - "form_41": "04", - "form_42": "05", - "form_43": "06", - "form_44": "07", - "form_45": "Normal", - "form_46": "Alola", - "form_47": "Normal", - "form_48": "Alola", - "form_49": "Normal", - "form_50": "Alola", - "form_51": "Normal", - "form_52": "Alola", - "form_53": "Normal", - "form_54": "Alola", - "form_55": "Normal", - "form_56": "Alola", - "form_57": "Normal", - "form_58": "Alola", - "form_59": "Normal", - "form_60": "Alola", - "form_61": "Normal", - "form_62": "Alola", - "form_63": "Normal", - "form_64": "Alola", - "form_65": "Normal", - "form_66": "Alola", - "form_67": "Normal", - "form_68": "Alola", - "form_69": "Normal", - "form_70": "Alola", - "form_71": "Normal", - "form_72": "Alola", - "form_73": "Normal", - "form_74": "Alola", - "form_75": "Normal", - "form_76": "Alola", - "form_77": "Normal", - "form_78": "Alola", - "form_79": "Normal", - "form_80": "Alola", - "form_81": "Normal", - "form_82": "Frost", - "form_83": "Fan", - "form_84": "Mow", - "form_85": "Wash", - "form_86": "Heat", - "form_87": "Plant", - "form_88": "Sandy", - "form_89": "Trash", - "form_90": "Altered", - "form_91": "Origin", - "form_92": "Sky", - "form_93": "Land", - "form_94": "Overcast", - "form_95": "Sunny", - "form_96": "West Sea", - "form_97": "East Sea", - "form_98": "West Sea", - "form_99": "East Sea", - "form_100": "Normal", - "form_101": "Fighting", - "form_102": "Flying", - "form_103": "Poison", - "form_104": "Ground", - "form_105": "Rock", - "form_106": "Bug", - "form_107": "Ghost", - "form_108": "Steel", - "form_109": "Fire", - "form_110": "Water", - "form_111": "Grass", - "form_112": "Electric", - "form_113": "Psychic", - "form_114": "Ice", - "form_115": "Dragon", - "form_116": "Dark", - "form_117": "Fairy", - "form_118": "Plant", - "form_119": "Sandy", - "form_120": "Trash", - "form_121": "08", - "form_122": "09", - "form_123": "10", - "form_124": "11", - "form_125": "12", - "form_126": "13", - "form_127": "14", - "form_128": "15", - "form_129": "16", - "form_130": "17", - "form_131": "18", - "form_132": "19", - "form_133": "Armored", - "form_135": "Normal", - "form_136": "Red Striped", - "form_137": "Blue Striped", - "form_138": "Standard", - "form_139": "Zen", - "form_140": "Incarnate", - "form_141": "Therian", - "form_142": "Incarnate", - "form_143": "Therian", - "form_144": "Incarnate", - "form_145": "Therian", - "form_146": "Normal", - "form_147": "Black", - "form_148": "White", - "form_149": "Ordinary", - "form_150": "Resolute", - "form_151": "Aria", - "form_152": "Pirouette", - "form_153": "Shadow", - "form_154": "Purified", - "form_155": "Shadow", - "form_156": "Purified", - "form_157": "Normal", - "form_158": "Shadow", - "form_159": "Purified", - "form_160": "Normal", - "form_161": "Shadow", - "form_162": "Purified", - "form_163": "Normal", - "form_164": "Shadow", - "form_165": "Purified", - "form_166": "Normal", - "form_167": "Shadow", - "form_168": "Purified", - "form_169": "Normal", - "form_170": "Shadow", - "form_171": "Purified", - "form_172": "Normal", - "form_173": "Shadow", - "form_174": "Purified", - "form_175": "Normal", - "form_176": "Shadow", - "form_177": "Purified", - "form_178": "Normal", - "form_179": "Shadow", - "form_180": "Purified", - "form_181": "Normal", - "form_182": "Shadow", - "form_183": "Purified", - "form_184": "Normal", - "form_185": "Shadow", - "form_186": "Purified", - "form_187": "Normal", - "form_188": "Shadow", - "form_189": "Purified", - "form_190": "Normal", - "form_191": "Shadow", - "form_192": "Purified", - "form_193": "Normal", - "form_194": "Shadow", - "form_195": "Purified", - "form_196": "Normal", - "form_197": "Shadow", - "form_198": "Purified", - "form_199": "Normal", - "form_200": "Shadow", - "form_201": "Purified", - "form_202": "Normal", - "form_203": "Shadow", - "form_204": "Purified", - "form_205": "Normal", - "form_206": "Shadow", - "form_207": "Purified", - "form_208": "Normal", - "form_209": "Shadow", - "form_210": "Purified", - "form_211": "Normal", - "form_212": "Shadow", - "form_213": "Purified", - "form_214": "Normal", - "form_215": "Shadow", - "form_216": "Purified", - "form_217": "Normal", - "form_218": "Shadow", - "form_219": "Purified", - "form_220": "Shadow", - "form_221": "Purified", - "form_222": "Shadow", - "form_223": "Purified", - "form_224": "Normal", - "form_225": "Shadow", - "form_226": "Purified", - "form_227": "Shadow", - "form_228": "Purified", - "form_229": "Normal", - "form_230": "Shadow", - "form_231": "Purified", - "form_232": "Normal", - "form_233": "Shadow", - "form_234": "Purified", - "form_235": "Normal", - "form_236": "Shadow", - "form_237": "Purified", - "form_238": "Normal", - "form_239": "Shadow", - "form_240": "Purified", - "form_241": "Normal", - "form_242": "Shadow", - "form_243": "Purified", - "form_244": "Normal", - "form_245": "Shadow", - "form_246": "Purified", - "form_247": "Normal", - "form_248": "Shadow", - "form_249": "Purified", - "form_250": "Normal", - "form_251": "Shadow", - "form_252": "Purified", - "form_253": "Normal", - "form_254": "Shadow", - "form_255": "Purified", - "form_256": "Normal", - "form_257": "Shadow", - "form_258": "Purified", - "form_259": "Normal", - "form_260": "Shadow", - "form_261": "Purified", - "form_262": "Normal", - "form_263": "Shadow", - "form_264": "Purified", - "form_265": "Normal", - "form_266": "Shadow", - "form_267": "Purified", - "form_268": "Normal", - "form_269": "Shadow", - "form_270": "Purified", - "form_271": "Normal", - "form_272": "Shadow", - "form_273": "Purified", - "form_274": "Normal", - "form_275": "Shadow", - "form_276": "Purified", - "form_277": "Normal", - "form_278": "Shadow", - "form_279": "Purified", - "form_280": "Normal", - "form_281": "Shadow", - "form_282": "Purified", - "form_283": "Normal", - "form_284": "Shadow", - "form_285": "Purified", - "form_286": "Normal", - "form_287": "Shadow", - "form_288": "Purified", - "form_289": "Normal", - "form_290": "Shadow", - "form_291": "Purified", - "form_292": "Normal", - "form_293": "Shadow", - "form_294": "Purified", - "form_295": "Normal", - "form_296": "Shadow", - "form_297": "Purified", - "form_298": "Normal", - "form_299": "Shadow", - "form_300": "Purified", - "form_301": "Normal", - "form_302": "Shadow", - "form_303": "Purified", - "form_304": "Normal", - "form_305": "Shadow", - "form_306": "Purified", - "form_307": "Normal", - "form_308": "Shadow", - "form_309": "Purified", - "form_310": "Normal", - "form_311": "Shadow", - "form_312": "Purified", - "form_313": "Normal", - "form_314": "Shadow", - "form_315": "Purified", - "form_316": "Normal", - "form_317": "Shadow", - "form_318": "Purified", - "form_319": "Normal", - "form_320": "Shadow", - "form_321": "Purified", - "form_322": "Normal", - "form_323": "Shadow", - "form_324": "Purified", - "form_585": "Spring", - "form_586": "Summer", - "form_587": "Autumn", - "form_588": "Winter", - "form_589": "Spring", - "form_590": "Summer", - "form_591": "Autumn", - "form_592": "Winter", - "form_593": "Normal", - "form_594": "Shock", - "form_595": "Burn", - "form_596": "Chill", - "form_597": "Douse", - "form_598": "Normal", - "form_599": "Noevolve", - "form_600": "Normal", - "form_601": "Noevolve", - "form_602": "Normal", - "form_603": "Noevolve", - "form_604": "Noevolve", - "form_605": "Noevolve", - "form_606": "Noevolve", - "form_607": "Noevolve", - "form_608": "Noevolve", - "form_609": "Noevolve", - "form_610": "Normal", - "form_611": "Shadow", - "form_612": "Purified", - "form_613": "Normal", - "form_614": "Shadow", - "form_615": "Purified", - "form_616": "Normal", - "form_617": "Shadow", - "form_618": "Purified", - "form_619": "Normal", - "form_620": "Shadow", - "form_621": "Purified", - "form_622": "Normal", - "form_623": "Shadow", - "form_624": "Purified", - "form_625": "Normal", - "form_626": "Shadow", - "form_627": "Purified", - "form_628": "Normal", - "form_629": "Shadow", - "form_630": "Purified", - "form_631": "Normal", - "form_632": "Shadow", - "form_633": "Purified", - "form_634": "Normal", - "form_635": "Shadow", - "form_636": "Purified", - "form_637": "Normal", - "form_638": "Shadow", - "form_639": "Purified", - "form_640": "Normal", - "form_641": "Shadow", - "form_642": "Purified", - "form_643": "Normal", - "form_644": "Shadow", - "form_645": "Purified", - "form_646": "Normal", - "form_647": "Shadow", - "form_648": "Purified", - "form_649": "Normal", - "form_650": "Shadow", - "form_651": "Purified", - "form_652": "Normal", - "form_653": "Shadow", - "form_654": "Purified", - "form_655": "Normal", - "form_656": "Shadow", - "form_657": "Purified", - "form_658": "Normal", - "form_659": "Shadow", - "form_660": "Purified", - "form_661": "Normal", - "form_662": "Shadow", - "form_663": "Purified", - "form_664": "Normal", - "form_665": "Shadow", - "form_666": "Purified", - "form_667": "Normal", - "form_668": "Shadow", - "form_669": "Purified", - "form_670": "Normal", - "form_671": "Shadow", - "form_672": "Purified", - "form_673": "Shadow", - "form_674": "Purified", - "form_675": "Shadow", - "form_676": "Purified", - "form_677": "Normal", - "form_678": "Shadow", - "form_679": "Purified", - "form_680": "Normal", - "form_681": "Shadow", - "form_682": "Purified", - "form_683": "Normal", - "form_684": "Shadow", - "form_685": "Purified", - "form_686": "Shadow", - "form_687": "Purified", - "form_688": "Normal", - "form_689": "Shadow", - "form_690": "Purified", - "form_691": "Normal", - "form_692": "Shadow", - "form_693": "Purified", - "form_694": "Normal", - "form_695": "Shadow", - "form_696": "Purified", - "form_697": "Normal", - "form_698": "Shadow", - "form_699": "Purified", - "form_700": "Normal", - "form_701": "Shadow", - "form_702": "Purified", - "form_703": "Normal", - "form_704": "Shadow", - "form_705": "Purified", - "form_706": "Normal", - "form_707": "Shadow", - "form_708": "Purified", - "form_709": "Shadow", - "form_710": "Purified", - "form_711": "Shadow", - "form_712": "Purified", - "form_713": "Normal", - "form_714": "Shadow", - "form_715": "Purified", - "form_716": "Normal", - "form_717": "Shadow", - "form_718": "Purified", - "form_719": "Normal", - "form_720": "Shadow", - "form_721": "Purified", - "form_722": "Normal", - "form_723": "Shadow", - "form_724": "Purified", - "form_725": "Shadow", - "form_726": "Purified", - "form_727": "Shadow", - "form_728": "Purified", - "form_729": "Normal", - "form_730": "Shadow", - "form_731": "Purified", - "form_732": "Shadow", - "form_733": "Purified", - "form_734": "Normal", - "form_735": "Shadow", - "form_736": "Purified", - "form_737": "Normal", - "form_738": "Shadow", - "form_739": "Purified", - "form_740": "Normal", - "form_741": "Shadow", - "form_742": "Purified", - "form_743": "Normal", - "form_744": "Shadow", - "form_745": "Purified", - "form_746": "Normal", - "form_747": "Shadow", - "form_748": "Purified", - "form_749": "Normal", - "form_750": "Shadow", - "form_751": "Purified", - "form_752": "Normal", - "form_753": "Shadow", - "form_754": "Purified", - "form_755": "Normal", - "form_756": "Shadow", - "form_757": "Purified", - "form_758": "Normal", - "form_759": "Shadow", - "form_760": "Purified", - "form_761": "Normal", - "form_762": "Shadow", - "form_763": "Purified", - "form_764": "Normal", - "form_765": "Shadow", - "form_766": "Purified", - "form_767": "Normal", - "form_768": "Shadow", - "form_769": "Purified", - "form_770": "Normal", - "form_771": "Shadow", - "form_772": "Purified", - "form_773": "Normal", - "form_774": "Shadow", - "form_775": "Purified", - "form_776": "Normal", - "form_777": "Shadow", - "form_778": "Purified", - "form_779": "Normal", - "form_780": "Shadow", - "form_781": "Purified", - "form_782": "Normal", - "form_783": "Shadow", - "form_784": "Purified", - "form_785": "Normal", - "form_786": "Shadow", - "form_787": "Purified", - "form_788": "Normal", - "form_789": "Shadow", - "form_790": "Purified", - "form_791": "Normal", - "form_792": "Shadow", - "form_793": "Purified", - "form_794": "Normal", - "form_795": "Shadow", - "form_796": "Purified", - "form_797": "Normal", - "form_798": "Shadow", - "form_799": "Purified", - "form_800": "Normal", - "form_801": "Shadow", - "form_802": "Purified", - "form_803": "Normal", - "form_804": "Shadow", - "form_805": "Purified", - "form_806": "Normal", - "form_807": "Shadow", - "form_808": "Purified", - "form_809": "Normal", - "form_810": "Shadow", - "form_811": "Purified", - "form_812": "Normal", - "form_813": "Shadow", - "form_814": "Purified", - "form_815": "Normal", - "form_816": "Shadow", - "form_817": "Purified", - "form_818": "Normal", - "form_819": "Shadow", - "form_820": "Purified", - "form_821": "Normal", - "form_822": "Shadow", - "form_823": "Purified", - "form_824": "Normal", - "form_825": "Shadow", - "form_826": "Purified", - "form_827": "Normal", - "form_828": "Shadow", - "form_829": "Purified", - "form_830": "Normal", - "form_831": "Shadow", - "form_832": "Purified", - "form_833": "Normal", - "form_834": "Shadow", - "form_835": "Purified", - "form_836": "Normal", - "form_837": "Shadow", - "form_838": "Purified", - "form_839": "Normal", - "form_840": "Shadow", - "form_841": "Purified", - "form_842": "Shadow", - "form_843": "Purified", - "form_844": "Shadow", - "form_845": "Purified", - "form_846": "Normal", - "form_847": "Shadow", - "form_848": "Purified", - "form_849": "Normal", - "form_850": "Shadow", - "form_851": "Purified", - "form_852": "Normal", - "form_853": "Shadow", - "form_854": "Purified", - "form_855": "Normal", - "form_856": "Shadow", - "form_857": "Purified", - "form_858": "Normal", - "form_859": "Shadow", - "form_860": "Purified", - "form_861": "Normal", - "form_862": "Shadow", - "form_863": "Purified", - "form_864": "Normal", - "form_865": "Shadow", - "form_866": "Purified", - "form_867": "Normal", - "form_868": "Shadow", - "form_869": "Purified", - "form_870": "Normal", - "form_871": "Shadow", - "form_872": "Purified", - "form_873": "Normal", - "form_874": "Shadow", - "form_875": "Purified", - "form_876": "Normal", - "form_877": "Shadow", - "form_878": "Purified", - "form_879": "Normal", - "form_880": "Shadow", - "form_881": "Purified", - "form_882": "Shadow", - "form_883": "Purified", - "form_884": "Shadow", - "form_885": "Purified", - "form_886": "Shadow", - "form_887": "Purified", - "form_888": "Normal", - "form_889": "Shadow", - "form_890": "Purified", - "form_891": "Normal", - "form_892": "Shadow", - "form_893": "Purified", - "form_894": "Fall 2019", - "form_895": "Fall 2019", - "form_896": "Fall 2019", - "form_897": "Fall 2019", - "form_898": "Normal", - "form_899": "Shadow", - "form_900": "Purified", - "form_901": "Vs 2019", - "form_902": "Normal", - "form_903": "Shadow", - "form_904": "Purified", - "form_905": "Normal", - "form_906": "Shadow", - "form_907": "Purified", - "form_908": "Normal", - "form_909": "Shadow", - "form_910": "Purified", - "form_911": "Normal", - "form_912": "Shadow", - "form_913": "Purified", - "form_914": "Normal", - "form_915": "Shadow", - "form_916": "Purified", - "form_917": "Normal", - "form_918": "Shadow", - "form_919": "Purified", - "form_920": "Normal", - "form_921": "Shadow", - "form_922": "Purified", - "form_923": "Normal", - "form_924": "Shadow", - "form_925": "Purified", - "form_926": "Normal", - "form_927": "Shadow", - "form_928": "Purified", - "form_929": "Normal", - "form_930": "Shadow", - "form_931": "Purified", - "form_932": "Normal", - "form_933": "Shadow", - "form_934": "Purified", - "form_935": "Normal", - "form_936": "Shadow", - "form_937": "Purified", - "form_938": "Normal", - "form_939": "Shadow", - "form_940": "Purified", - "form_941": "Normal", - "form_942": "Shadow", - "form_943": "Purified", - "form_944": "Galarian", - "form_945": "Normal", - "form_946": "Galarian", - "form_947": "Normal", - "form_948": "Galarian", - "form_949": "Copy 2019", - "form_950": "Copy 2019", - "form_951": "Copy 2019", - "form_952": "Copy 2019", - "form_953": "Normal", - "form_954": "Shadow", - "form_955": "Purified", - "form_956": "Normal", - "form_957": "Shadow", - "form_958": "Purified", - "form_959": "Normal", - "form_960": "Shadow", - "form_961": "Purified", - "form_962": "Normal", - "form_963": "Shadow", - "form_964": "Purified", - "form_965": "Normal", - "form_966": "Shadow", - "form_967": "Purified", - "form_968": "Normal", - "form_969": "Shadow", - "form_970": "Purified", - "form_971": "Normal", - "form_972": "Shadow", - "form_973": "Purified", - "form_974": "Normal", - "form_975": "Shadow", - "form_976": "Purified", - "form_977": "Shadow", - "form_978": "Purified", - "form_979": "Shadow", - "form_980": "Purified", - "form_981": "Normal", - "form_982": "Shadow", - "form_983": "Purified", - "form_984": "Normal", - "form_985": "Shadow", - "form_986": "Purified", - "form_987": "Normal", - "form_988": "Shadow", - "form_989": "Purified", - "form_990": "Normal", - "form_991": "Shadow", - "form_992": "Purified", - "form_993": "Normal", - "form_994": "Shadow", - "form_995": "Purified", - "form_996": "Normal", - "form_997": "Shadow", - "form_998": "Purified", - "form_999": "Normal", - "form_1000": "Shadow", - "form_1001": "Purified", - "form_1002": "Normal", - "form_1003": "Shadow", - "form_1004": "Purified", - "form_1005": "Normal", - "form_1006": "Shadow", - "form_1007": "Purified", - "form_1008": "Normal", - "form_1009": "Shadow", - "form_1010": "Purified", - "form_1011": "Normal", - "form_1012": "Shadow", - "form_1013": "Purified", - "form_1014": "Normal", - "form_1015": "Shadow", - "form_1016": "Purified", - "form_1017": "Normal", - "form_1018": "Shadow", - "form_1019": "Purified", - "form_1020": "Normal", - "form_1021": "Shadow", - "form_1022": "Purified", - "form_1023": "Normal", - "form_1024": "Shadow", - "form_1025": "Purified", - "form_1026": "Normal", - "form_1027": "Shadow", - "form_1028": "Purified", - "form_1029": "Normal", - "form_1030": "Shadow", - "form_1031": "Purified", - "form_1032": "Normal", - "form_1033": "Shadow", - "form_1034": "Purified", - "form_1035": "Normal", - "form_1036": "Shadow", - "form_1037": "Purified", - "form_1038": "Normal", - "form_1039": "Shadow", - "form_1040": "Purified", - "form_1041": "Normal", - "form_1042": "Shadow", - "form_1043": "Purified", - "form_1044": "Normal", - "form_1045": "Shadow", - "form_1046": "Purified", - "form_1047": "Normal", - "form_1048": "Shadow", - "form_1049": "Purified", - "form_1050": "Normal", - "form_1051": "Shadow", - "form_1052": "Purified", - "form_1053": "Normal", - "form_1054": "Shadow", - "form_1055": "Purified", - "form_1056": "Normal", - "form_1057": "Shadow", - "form_1058": "Purified", - "form_1059": "Normal", - "form_1060": "Shadow", - "form_1061": "Purified", - "form_1062": "Normal", - "form_1063": "Shadow", - "form_1064": "Purified", - "form_1065": "Normal", - "form_1066": "Shadow", - "form_1067": "Purified", - "form_1068": "Normal", - "form_1069": "Shadow", - "form_1070": "Purified", - "form_1071": "Normal", - "form_1072": "Shadow", - "form_1073": "Purified", - "form_1074": "Normal", - "form_1075": "Shadow", - "form_1076": "Purified", - "form_1077": "Normal", - "form_1078": "Shadow", - "form_1079": "Purified", - "form_1080": "Normal", - "form_1081": "Shadow", - "form_1082": "Purified", - "form_1083": "Normal", - "form_1084": "Shadow", - "form_1085": "Purified", - "form_1086": "Normal", - "form_1087": "Shadow", - "form_1088": "Purified", - "form_1089": "Normal", - "form_1090": "Shadow", - "form_1091": "Purified", - "form_1092": "Normal", - "form_1093": "Shadow", - "form_1094": "Purified", - "form_1095": "Normal", - "form_1096": "Shadow", - "form_1097": "Purified", - "form_1098": "Normal", - "form_1099": "Shadow", - "form_1100": "Purified", - "form_1101": "Normal", - "form_1102": "Shadow", - "form_1103": "Purified", - "form_1104": "Normal", - "form_1105": "Shadow", - "form_1106": "Purified", - "form_1107": "Normal", - "form_1108": "Shadow", - "form_1109": "Purified", - "form_1110": "Normal", - "form_1111": "Shadow", - "form_1112": "Purified", - "form_1113": "Shadow", - "form_1114": "Purified", - "form_1115": "Normal", - "form_1116": "Shadow", - "form_1117": "Purified", - "form_1118": "Normal", - "form_1119": "Shadow", - "form_1120": "Purified", - "form_1121": "Normal", - "form_1122": "Shadow", - "form_1123": "Purified", - "form_1124": "Normal", - "form_1125": "Shadow", - "form_1126": "Purified", - "form_1127": "Normal", - "form_1128": "Shadow", - "form_1129": "Purified", - "form_1130": "Normal", - "form_1131": "Shadow", - "form_1132": "Purified", - "form_1133": "Normal", - "form_1134": "Shadow", - "form_1135": "Purified", - "form_1136": "Normal", - "form_1137": "Shadow", - "form_1138": "Purified", - "form_1139": "Normal", - "form_1140": "Shadow", - "form_1141": "Purified", - "form_1142": "Normal", - "form_1143": "Shadow", - "form_1144": "Purified", - "form_1145": "Normal", - "form_1146": "Shadow", - "form_1147": "Purified", - "form_1148": "Normal", - "form_1149": "Shadow", - "form_1150": "Purified", - "form_1151": "Normal", - "form_1152": "Shadow", - "form_1153": "Purified", - "form_1154": "Normal", - "form_1155": "Shadow", - "form_1156": "Purified", - "form_1157": "Normal", - "form_1158": "Shadow", - "form_1159": "Purified", - "form_1160": "Normal", - "form_1161": "Shadow", - "form_1162": "Purified", - "form_1163": "Normal", - "form_1164": "Shadow", - "form_1165": "Purified", - "form_1166": "Normal", - "form_1167": "Shadow", - "form_1168": "Purified", - "form_1169": "Normal", - "form_1170": "Shadow", - "form_1171": "Purified", - "form_1172": "Normal", - "form_1173": "Shadow", - "form_1174": "Purified", - "form_1175": "Normal", - "form_1176": "Shadow", - "form_1177": "Purified", - "form_1178": "Normal", - "form_1179": "Shadow", - "form_1180": "Purified", - "form_1181": "Normal", - "form_1182": "Shadow", - "form_1183": "Purified", - "form_1184": "Normal", - "form_1185": "Shadow", - "form_1186": "Purified", - "form_1187": "Normal", - "form_1188": "Shadow", - "form_1189": "Purified", - "form_1190": "Normal", - "form_1191": "Shadow", - "form_1192": "Purified", - "form_1193": "Normal", - "form_1194": "Shadow", - "form_1195": "Purified", - "form_1196": "Normal", - "form_1197": "Shadow", - "form_1198": "Purified", - "form_1199": "Normal", - "form_1200": "Shadow", - "form_1201": "Purified", - "form_1202": "Normal", - "form_1203": "Shadow", - "form_1204": "Purified", - "form_1205": "Normal", - "form_1206": "Shadow", - "form_1207": "Purified", - "form_1208": "Normal", - "form_1209": "Shadow", - "form_1210": "Purified", - "form_1211": "Normal", - "form_1212": "Shadow", - "form_1213": "Purified", - "form_1214": "Normal", - "form_1215": "Shadow", - "form_1216": "Purified", - "form_1217": "Normal", - "form_1218": "Shadow", - "form_1219": "Purified", - "form_1220": "Normal", - "form_1221": "Shadow", - "form_1222": "Purified", - "form_1223": "Normal", - "form_1224": "Shadow", - "form_1225": "Purified", - "form_1226": "Normal", - "form_1227": "Shadow", - "form_1228": "Purified", - "form_1229": "Normal", - "form_1230": "Shadow", - "form_1231": "Purified", - "form_1232": "Normal", - "form_1233": "Shadow", - "form_1234": "Purified", - "form_1235": "Normal", - "form_1236": "Shadow", - "form_1237": "Purified", - "form_1238": "Normal", - "form_1239": "Shadow", - "form_1240": "Purified", - "form_1241": "Normal", - "form_1242": "Shadow", - "form_1243": "Purified", - "form_1244": "Normal", - "form_1245": "Shadow", - "form_1246": "Purified", - "form_1247": "Normal", - "form_1248": "Shadow", - "form_1249": "Purified", - "form_1250": "Normal", - "form_1251": "Shadow", - "form_1252": "Purified", - "form_1253": "Normal", - "form_1254": "Shadow", - "form_1255": "Purified", - "form_1256": "Normal", - "form_1257": "Shadow", - "form_1258": "Purified", - "form_1259": "Normal", - "form_1260": "Shadow", - "form_1261": "Purified", - "form_1262": "Normal", - "form_1263": "Shadow", - "form_1264": "Purified", - "form_1265": "Normal", - "form_1266": "Shadow", - "form_1267": "Purified", - "form_1268": "Normal", - "form_1269": "Shadow", - "form_1270": "Purified", - "form_1271": "Normal", - "form_1272": "Shadow", - "form_1273": "Purified", - "form_1274": "Normal", - "form_1275": "Shadow", - "form_1276": "Purified", - "form_1277": "Normal", - "form_1278": "Shadow", - "form_1279": "Purified", - "form_1280": "Normal", - "form_1281": "Shadow", - "form_1282": "Purified", - "form_1283": "Normal", - "form_1284": "Shadow", - "form_1285": "Purified", - "form_1286": "Normal", - "form_1287": "Shadow", - "form_1288": "Purified", - "form_1289": "Normal", - "form_1290": "Shadow", - "form_1291": "Purified", - "form_1292": "Normal", - "form_1293": "Shadow", - "form_1294": "Purified", - "form_1295": "Normal", - "form_1296": "Shadow", - "form_1297": "Purified", - "form_1298": "Normal", - "form_1299": "Shadow", - "form_1300": "Purified", - "form_1301": "Normal", - "form_1302": "Shadow", - "form_1303": "Purified", - "form_1304": "Normal", - "form_1305": "Shadow", - "form_1306": "Purified", - "form_1307": "Normal", - "form_1308": "Shadow", - "form_1309": "Purified", - "form_1310": "Normal", - "form_1311": "Shadow", - "form_1312": "Purified", - "form_1313": "Normal", - "form_1314": "Shadow", - "form_1315": "Purified", - "form_1316": "Normal", - "form_1317": "Shadow", - "form_1318": "Purified", - "form_1319": "Normal", - "form_1320": "Shadow", - "form_1321": "Purified", - "form_1322": "Normal", - "form_1323": "Shadow", - "form_1324": "Purified", - "form_1325": "Normal", - "form_1326": "Shadow", - "form_1327": "Purified", - "form_1328": "Normal", - "form_1329": "Shadow", - "form_1330": "Purified", - "form_1331": "Normal", - "form_1332": "Shadow", - "form_1333": "Purified", - "form_1334": "Normal", - "form_1335": "Shadow", - "form_1336": "Purified", - "form_1337": "Normal", - "form_1338": "Shadow", - "form_1339": "Purified", - "form_1340": "Normal", - "form_1341": "Shadow", - "form_1342": "Purified", - "form_1343": "Normal", - "form_1344": "Shadow", - "form_1345": "Purified", - "form_1346": "Normal", - "form_1347": "Shadow", - "form_1348": "Purified", - "form_1349": "Normal", - "form_1350": "Shadow", - "form_1351": "Purified", - "form_1352": "Normal", - "form_1353": "Shadow", - "form_1354": "Purified", - "form_1355": "Normal", - "form_1356": "Shadow", - "form_1357": "Purified", - "form_1358": "Normal", - "form_1359": "Shadow", - "form_1360": "Purified", - "form_1361": "Normal", - "form_1362": "Shadow", - "form_1363": "Purified", - "form_1364": "Normal", - "form_1365": "Shadow", - "form_1366": "Purified", - "form_1367": "Normal", - "form_1368": "Shadow", - "form_1369": "Purified", - "form_1370": "Normal", - "form_1371": "Shadow", - "form_1372": "Purified", - "form_1373": "Shadow", - "form_1374": "Purified", - "form_1375": "Shadow", - "form_1376": "Purified", - "form_1377": "Shadow", - "form_1378": "Purified", - "form_1379": "Normal", - "form_1380": "Shadow", - "form_1381": "Purified", - "form_1382": "Normal", - "form_1383": "Shadow", - "form_1384": "Purified", - "form_1385": "Normal", - "form_1386": "Shadow", - "form_1387": "Purified", - "form_1388": "Normal", - "form_1389": "Shadow", - "form_1390": "Purified", - "form_1391": "Normal", - "form_1392": "Shadow", - "form_1393": "Purified", - "form_1394": "Normal", - "form_1395": "Shadow", - "form_1396": "Purified", - "form_1397": "Normal", - "form_1398": "Shadow", - "form_1399": "Purified", - "form_1400": "Normal", - "form_1401": "Shadow", - "form_1402": "Purified", - "form_1403": "Normal", - "form_1404": "Shadow", - "form_1405": "Purified", - "form_1406": "Normal", - "form_1407": "Shadow", - "form_1408": "Purified", - "form_1409": "Normal", - "form_1410": "Shadow", - "form_1411": "Purified", - "form_1412": "Normal", - "form_1413": "Shadow", - "form_1414": "Purified", - "form_1415": "Normal", - "form_1416": "Shadow", - "form_1417": "Purified", - "form_1418": "Normal", - "form_1419": "Shadow", - "form_1420": "Purified", - "form_1421": "Normal", - "form_1422": "Shadow", - "form_1423": "Purified", - "form_1424": "Normal", - "form_1425": "Shadow", - "form_1426": "Purified", - "form_1427": "Normal", - "form_1428": "Shadow", - "form_1429": "Purified", - "form_1430": "Normal", - "form_1431": "Shadow", - "form_1432": "Purified", - "form_1433": "Normal", - "form_1434": "Shadow", - "form_1435": "Purified", - "form_1436": "Normal", - "form_1437": "Shadow", - "form_1438": "Purified", - "form_1439": "Normal", - "form_1440": "Shadow", - "form_1441": "Purified", - "form_1442": "Normal", - "form_1443": "Shadow", - "form_1444": "Purified", - "form_1445": "Normal", - "form_1446": "Shadow", - "form_1447": "Purified", - "form_1448": "Normal", - "form_1449": "Shadow", - "form_1450": "Purified", - "form_1451": "Normal", - "form_1452": "Shadow", - "form_1453": "Purified", - "form_1454": "Normal", - "form_1455": "Shadow", - "form_1456": "Purified", - "form_1457": "Normal", - "form_1458": "Shadow", - "form_1459": "Purified", - "form_1460": "Normal", - "form_1461": "Shadow", - "form_1462": "Purified", - "form_1463": "Normal", - "form_1464": "Shadow", - "form_1465": "Purified", - "form_1466": "Normal", - "form_1467": "Shadow", - "form_1468": "Purified", - "form_1469": "Normal", - "form_1470": "Shadow", - "form_1471": "Purified", - "form_1472": "Normal", - "form_1473": "Shadow", - "form_1474": "Purified", - "form_1475": "Normal", - "form_1476": "Shadow", - "form_1477": "Purified", - "form_1478": "Normal", - "form_1479": "Shadow", - "form_1480": "Purified", - "form_1481": "Normal", - "form_1482": "Shadow", - "form_1483": "Purified", - "form_1484": "Normal", - "form_1485": "Shadow", - "form_1486": "Purified", - "form_1487": "Normal", - "form_1488": "Shadow", - "form_1489": "Purified", - "form_1490": "Normal", - "form_1491": "Shadow", - "form_1492": "Purified", - "form_1493": "Normal", - "form_1494": "Shadow", - "form_1495": "Purified", - "form_1496": "Normal", - "form_1497": "Shadow", - "form_1498": "Purified", - "form_1499": "Normal", - "form_1500": "Shadow", - "form_1501": "Purified", - "form_1502": "Normal", - "form_1503": "Shadow", - "form_1504": "Purified", - "form_1505": "Normal", - "form_1506": "Shadow", - "form_1507": "Purified", - "form_1508": "Normal", - "form_1509": "Shadow", - "form_1510": "Purified", - "form_1511": "Normal", - "form_1512": "Shadow", - "form_1513": "Purified", - "form_1514": "Normal", - "form_1515": "Shadow", - "form_1516": "Purified", - "form_1517": "Normal", - "form_1518": "Shadow", - "form_1519": "Purified", - "form_1520": "Normal", - "form_1521": "Shadow", - "form_1522": "Purified", - "form_1523": "Normal", - "form_1524": "Shadow", - "form_1525": "Purified", - "form_1526": "Normal", - "form_1527": "Shadow", - "form_1528": "Purified", - "form_1529": "Normal", - "form_1530": "Shadow", - "form_1531": "Purified", - "form_1532": "Normal", - "form_1533": "Shadow", - "form_1534": "Purified", - "form_1535": "Normal", - "form_1536": "Shadow", - "form_1537": "Purified", - "form_1538": "Normal", - "form_1539": "Shadow", - "form_1540": "Purified", - "form_1541": "Normal", - "form_1542": "Shadow", - "form_1543": "Purified", - "form_1544": "Normal", - "form_1545": "Shadow", - "form_1546": "Purified", - "form_1547": "Normal", - "form_1548": "Shadow", - "form_1549": "Purified", - "form_1550": "Normal", - "form_1551": "Shadow", - "form_1552": "Purified", - "form_1553": "Normal", - "form_1554": "Shadow", - "form_1555": "Purified", - "form_1556": "Normal", - "form_1557": "Shadow", - "form_1558": "Purified", - "form_1559": "Normal", - "form_1560": "Shadow", - "form_1561": "Purified", - "form_1562": "Normal", - "form_1563": "Shadow", - "form_1564": "Purified", - "form_1565": "Normal", - "form_1566": "Shadow", - "form_1567": "Purified", - "form_1568": "Normal", - "form_1569": "Shadow", - "form_1570": "Purified", - "form_1571": "Normal", - "form_1572": "Shadow", - "form_1573": "Purified", - "form_1574": "Normal", - "form_1575": "Shadow", - "form_1576": "Purified", - "form_1577": "Normal", - "form_1578": "Shadow", - "form_1579": "Purified", - "form_1580": "Normal", - "form_1581": "Shadow", - "form_1582": "Purified", - "form_1583": "Normal", - "form_1584": "Shadow", - "form_1585": "Purified", - "form_1586": "Normal", - "form_1587": "Shadow", - "form_1588": "Purified", - "form_1589": "Normal", - "form_1590": "Shadow", - "form_1591": "Purified", - "form_1592": "Normal", - "form_1593": "Shadow", - "form_1594": "Purified", - "form_1595": "Normal", - "form_1596": "Shadow", - "form_1597": "Purified", - "form_1598": "Normal", - "form_1599": "Shadow", - "form_1600": "Purified", - "form_1601": "Normal", - "form_1602": "Shadow", - "form_1603": "Purified", - "form_1604": "Normal", - "form_1605": "Shadow", - "form_1606": "Purified", - "form_1607": "Normal", - "form_1608": "Shadow", - "form_1609": "Purified", - "form_1610": "Normal", - "form_1611": "Shadow", - "form_1612": "Purified", - "form_1613": "Normal", - "form_1614": "Shadow", - "form_1615": "Purified", - "form_1616": "Normal", - "form_1617": "Shadow", - "form_1618": "Purified", - "form_1619": "Normal", - "form_1620": "Shadow", - "form_1621": "Purified", - "form_1622": "Normal", - "form_1623": "Shadow", - "form_1624": "Purified", - "form_1625": "Normal", - "form_1626": "Shadow", - "form_1627": "Purified", - "form_1628": "Normal", - "form_1629": "Shadow", - "form_1630": "Purified", - "form_1631": "Normal", - "form_1632": "Shadow", - "form_1633": "Purified", - "form_1634": "Normal", - "form_1635": "Shadow", - "form_1636": "Purified", - "form_1637": "Normal", - "form_1638": "Shadow", - "form_1639": "Purified", - "form_1640": "Normal", - "form_1641": "Shadow", - "form_1642": "Purified", - "form_1643": "Normal", - "form_1644": "Shadow", - "form_1645": "Purified", - "form_1646": "Normal", - "form_1647": "Shadow", - "form_1648": "Purified", - "form_1649": "Normal", - "form_1650": "Shadow", - "form_1651": "Purified", - "form_1652": "Normal", - "form_1653": "Shadow", - "form_1654": "Purified", - "form_1655": "Normal", - "form_1656": "Shadow", - "form_1657": "Purified", - "form_1658": "Normal", - "form_1659": "Shadow", - "form_1660": "Purified", - "form_1661": "Normal", - "form_1662": "Shadow", - "form_1663": "Purified", - "form_1664": "Normal", - "form_1665": "Shadow", - "form_1666": "Purified", - "form_1667": "Normal", - "form_1668": "Shadow", - "form_1669": "Purified", - "form_1670": "Normal", - "form_1671": "Shadow", - "form_1672": "Purified", - "form_1673": "Normal", - "form_1674": "Shadow", - "form_1675": "Purified", - "form_1676": "Normal", - "form_1677": "Shadow", - "form_1678": "Purified", - "form_1679": "Normal", - "form_1680": "Shadow", - "form_1681": "Purified", - "form_1682": "Normal", - "form_1683": "Shadow", - "form_1684": "Purified", - "form_1685": "Normal", - "form_1686": "Shadow", - "form_1687": "Purified", - "form_1688": "Normal", - "form_1689": "Shadow", - "form_1690": "Purified", - "form_1691": "Normal", - "form_1692": "Shadow", - "form_1693": "Purified", - "form_1694": "Normal", - "form_1695": "Shadow", - "form_1696": "Purified", - "form_1697": "Normal", - "form_1698": "Shadow", - "form_1699": "Purified", - "form_1700": "Normal", - "form_1701": "Shadow", - "form_1702": "Purified", - "form_1703": "Normal", - "form_1704": "Shadow", - "form_1705": "Purified", - "form_1706": "Normal", - "form_1707": "Shadow", - "form_1708": "Purified", - "form_1709": "Normal", - "form_1710": "Shadow", - "form_1711": "Purified", - "form_1712": "Normal", - "form_1713": "Shadow", - "form_1714": "Purified", - "form_1715": "Normal", - "form_1716": "Shadow", - "form_1717": "Purified", - "form_1718": "Normal", - "form_1719": "Shadow", - "form_1720": "Purified", - "form_1721": "Normal", - "form_1722": "Shadow", - "form_1723": "Purified", - "form_1724": "Normal", - "form_1725": "Shadow", - "form_1726": "Purified", - "form_1727": "Normal", - "form_1728": "Shadow", - "form_1729": "Purified", - "form_1730": "Normal", - "form_1731": "Shadow", - "form_1732": "Purified", - "form_1733": "Normal", - "form_1734": "Shadow", - "form_1735": "Purified", - "form_1736": "Normal", - "form_1737": "Shadow", - "form_1738": "Purified", - "form_1739": "Normal", - "form_1740": "Shadow", - "form_1741": "Purified", - "form_1742": "Normal", - "form_1743": "Shadow", - "form_1744": "Purified", - "form_1745": "Normal", - "form_1746": "Shadow", - "form_1747": "Purified", - "form_1748": "Normal", - "form_1749": "Shadow", - "form_1750": "Purified", - "form_1751": "Normal", - "form_1752": "Shadow", - "form_1753": "Purified", - "form_1754": "Normal", - "form_1755": "Shadow", - "form_1756": "Purified", - "form_1757": "Normal", - "form_1758": "Shadow", - "form_1759": "Purified", - "form_1760": "Normal", - "form_1761": "Shadow", - "form_1762": "Purified", - "form_1763": "Normal", - "form_1764": "Shadow", - "form_1765": "Purified", - "form_1766": "Normal", - "form_1767": "Shadow", - "form_1768": "Purified", - "form_1769": "Normal", - "form_1770": "Shadow", - "form_1771": "Purified", - "form_1772": "Normal", - "form_1773": "Shadow", - "form_1774": "Purified", - "form_1775": "Normal", - "form_1776": "Shadow", - "form_1777": "Purified", - "form_1778": "Normal", - "form_1779": "Shadow", - "form_1780": "Purified", - "form_1781": "Normal", - "form_1782": "Shadow", - "form_1783": "Purified", - "form_1784": "Normal", - "form_1785": "Shadow", - "form_1786": "Purified", - "form_1787": "Normal", - "form_1788": "Shadow", - "form_1789": "Purified", - "form_1790": "Normal", - "form_1791": "Shadow", - "form_1792": "Purified", - "form_1793": "Normal", - "form_1794": "Shadow", - "form_1795": "Purified", - "form_1796": "Normal", - "form_1797": "Shadow", - "form_1798": "Purified", - "form_1799": "Normal", - "form_1800": "Shadow", - "form_1801": "Purified", - "form_1802": "Normal", - "form_1803": "Shadow", - "form_1804": "Purified", - "form_1805": "Normal", - "form_1806": "Shadow", - "form_1807": "Purified", - "form_1808": "Normal", - "form_1809": "Shadow", - "form_1810": "Purified", - "form_1811": "Normal", - "form_1812": "Shadow", - "form_1813": "Purified", - "form_1814": "Normal", - "form_1815": "Shadow", - "form_1816": "Purified", - "form_1817": "Normal", - "form_1818": "Shadow", - "form_1819": "Purified", - "form_1820": "Normal", - "form_1821": "Shadow", - "form_1822": "Purified", - "form_1823": "Normal", - "form_1824": "Shadow", - "form_1825": "Purified", - "form_1826": "Normal", - "form_1827": "Shadow", - "form_1828": "Purified", - "form_1829": "Normal", - "form_1830": "Shadow", - "form_1831": "Purified", - "form_1832": "Normal", - "form_1833": "Shadow", - "form_1834": "Purified", - "form_1835": "Normal", - "form_1836": "Shadow", - "form_1837": "Purified", - "form_1838": "Normal", - "form_1839": "Shadow", - "form_1840": "Purified", - "form_1841": "Normal", - "form_1842": "Shadow", - "form_1843": "Purified", - "form_1844": "Normal", - "form_1845": "Shadow", - "form_1846": "Purified", - "form_1847": "Normal", - "form_1848": "Shadow", - "form_1849": "Purified", - "form_1850": "Normal", - "form_1851": "Shadow", - "form_1852": "Purified", - "form_1853": "Normal", - "form_1854": "Shadow", - "form_1855": "Purified", - "form_1856": "Normal", - "form_1857": "Shadow", - "form_1858": "Purified", - "form_1859": "Normal", - "form_1860": "Shadow", - "form_1861": "Purified", - "form_1862": "Normal", - "form_1863": "Shadow", - "form_1864": "Purified", - "form_1865": "Normal", - "form_1866": "Shadow", - "form_1867": "Purified", - "form_1868": "Normal", - "form_1869": "Shadow", - "form_1870": "Purified", - "form_1871": "Normal", - "form_1872": "Shadow", - "form_1873": "Purified", - "form_1874": "Normal", - "form_1875": "Shadow", - "form_1876": "Purified", - "form_1877": "Normal", - "form_1878": "Shadow", - "form_1879": "Purified", - "form_1880": "Normal", - "form_1881": "Shadow", - "form_1882": "Purified", - "form_1883": "Normal", - "form_1884": "Shadow", - "form_1885": "Purified", - "form_1886": "Normal", - "form_1887": "Shadow", - "form_1888": "Purified", - "form_1889": "Normal", - "form_1890": "Shadow", - "form_1891": "Purified", - "form_1892": "Normal", - "form_1893": "Shadow", - "form_1894": "Purified", - "form_1895": "Normal", - "form_1896": "Shadow", - "form_1897": "Purified", - "form_1898": "Normal", - "form_1899": "Shadow", - "form_1900": "Purified", - "form_1901": "Normal", - "form_1902": "Shadow", - "form_1903": "Purified", - "form_1904": "Normal", - "form_1905": "Shadow", - "form_1906": "Purified", - "form_1907": "Normal", - "form_1908": "Shadow", - "form_1909": "Purified", - "form_1910": "Normal", - "form_1911": "Shadow", - "form_1912": "Purified", - "form_1913": "Normal", - "form_1914": "Shadow", - "form_1915": "Purified", - "form_1916": "Normal", - "form_1917": "Shadow", - "form_1918": "Purified", - "form_1919": "Normal", - "form_1920": "Shadow", - "form_1921": "Purified", - "form_1922": "Normal", - "form_1923": "Shadow", - "form_1924": "Purified", - "form_1925": "Normal", - "form_1926": "Shadow", - "form_1927": "Purified", - "form_1928": "Normal", - "form_1929": "Shadow", - "form_1930": "Purified", - "form_1931": "Normal", - "form_1932": "Shadow", - "form_1933": "Purified", - "form_1934": "Normal", - "form_1935": "Shadow", - "form_1936": "Purified", - "form_1937": "Normal", - "form_1938": "Shadow", - "form_1939": "Purified", - "form_1940": "Normal", - "form_1941": "Shadow", - "form_1942": "Purified", - "form_1943": "Normal", - "form_1944": "Shadow", - "form_1945": "Purified", - "form_1946": "Normal", - "form_1947": "Shadow", - "form_1948": "Purified", - "form_1949": "Normal", - "form_1950": "Shadow", - "form_1951": "Purified", - "form_1952": "Normal", - "form_1953": "Shadow", - "form_1954": "Purified", - "form_1955": "Normal", - "form_1956": "Shadow", - "form_1957": "Purified", - "form_1958": "Normal", - "form_1959": "Shadow", - "form_1960": "Purified", - "form_1961": "Normal", - "form_1962": "Shadow", - "form_1963": "Purified", - "form_1964": "Normal", - "form_1965": "Shadow", - "form_1966": "Purified", - "form_1967": "Normal", - "form_1968": "Shadow", - "form_1969": "Purified", - "form_1970": "Normal", - "form_1971": "Shadow", - "form_1972": "Purified", - "form_1973": "Normal", - "form_1974": "Shadow", - "form_1975": "Purified", - "form_1976": "Normal", - "form_1977": "Shadow", - "form_1978": "Purified", - "form_1979": "Normal", - "form_1980": "Shadow", - "form_1981": "Purified", - "form_1982": "Normal", - "form_1983": "Shadow", - "form_1984": "Purified", - "form_1985": "Normal", - "form_1986": "Shadow", - "form_1987": "Purified", - "form_1988": "Normal", - "form_1989": "Shadow", - "form_1990": "Purified", - "form_1991": "Normal", - "form_1992": "Shadow", - "form_1993": "Purified", - "form_1994": "Normal", - "form_1995": "Shadow", - "form_1996": "Purified", - "form_1997": "Normal", - "form_1998": "Shadow", - "form_1999": "Purified", - "form_2000": "Normal", - "form_2001": "Shadow", - "form_2002": "Purified", - "form_2003": "Normal", - "form_2004": "Shadow", - "form_2005": "Purified", - "form_2006": "Normal", - "form_2007": "Shadow", - "form_2008": "Purified", - "form_2009": "Normal", - "form_2010": "Shadow", - "form_2011": "Purified", - "form_2012": "Normal", - "form_2013": "Shadow", - "form_2014": "Purified", - "form_2015": "Normal", - "form_2016": "Shadow", - "form_2017": "Purified", - "form_2018": "Normal", - "form_2019": "Shadow", - "form_2020": "Purified", - "form_2021": "Normal", - "form_2022": "Shadow", - "form_2023": "Purified", - "form_2024": "Normal", - "form_2025": "Shadow", - "form_2026": "Purified", - "form_2027": "Normal", - "form_2028": "Shadow", - "form_2029": "Purified", - "form_2030": "Normal", - "form_2031": "Shadow", - "form_2032": "Purified", - "form_2033": "Normal", - "form_2034": "Shadow", - "form_2035": "Purified", - "form_2036": "Normal", - "form_2037": "Shadow", - "form_2038": "Purified", - "form_2039": "Normal", - "form_2040": "Shadow", - "form_2041": "Purified", - "form_2042": "Normal", - "form_2043": "Shadow", - "form_2044": "Purified", - "form_2045": "Normal", - "form_2046": "Shadow", - "form_2047": "Purified", - "form_2048": "Normal", - "form_2049": "Shadow", - "form_2050": "Purified", - "form_2051": "Normal", - "form_2052": "Shadow", - "form_2053": "Purified", - "form_2054": "Normal", - "form_2055": "Shadow", - "form_2056": "Purified", - "form_2057": "Normal", - "form_2058": "Shadow", - "form_2059": "Purified", - "form_2060": "Normal", - "form_2061": "Shadow", - "form_2062": "Purified", - "form_2063": "Normal", - "form_2064": "Shadow", - "form_2065": "Purified", - "form_2066": "Normal", - "form_2067": "Shadow", - "form_2068": "Purified", - "form_2069": "Normal", - "form_2070": "Shadow", - "form_2071": "Purified", - "form_2072": "Normal", - "form_2073": "Shadow", - "form_2074": "Purified", - "form_2075": "Normal", - "form_2076": "Shadow", - "form_2077": "Purified", - "form_2078": "Normal", - "form_2079": "Shadow", - "form_2080": "Purified", - "form_2081": "Normal", - "form_2082": "Shadow", - "form_2083": "Purified", - "form_2084": "Normal", - "form_2085": "Shadow", - "form_2086": "Purified", - "form_2087": "Normal", - "form_2088": "Shadow", - "form_2089": "Purified", - "form_2090": "Normal", - "form_2091": "Shadow", - "form_2092": "Purified", - "form_2093": "Normal", - "form_2094": "Shadow", - "form_2095": "Purified", - "form_2096": "Normal", - "form_2097": "Shadow", - "form_2098": "Purified", - "form_2099": "Normal", - "form_2100": "Shadow", - "form_2101": "Purified", - "form_2102": "Normal", - "form_2103": "Shadow", - "form_2104": "Purified", - "form_2105": "Normal", - "form_2106": "Shadow", - "form_2107": "Purified", - "form_2108": "Normal", - "form_2109": "Shadow", - "form_2110": "Purified", - "form_2111": "Normal", - "form_2112": "Shadow", - "form_2113": "Purified", - "form_2114": "Normal", - "form_2115": "Shadow", - "form_2116": "Purified", - "form_2117": "Normal", - "form_2118": "Shadow", - "form_2119": "Purified", - "form_2120": "Normal", - "form_2121": "Shadow", - "form_2122": "Purified", - "form_2123": "Normal", - "form_2124": "Shadow", - "form_2125": "Purified", - "form_2126": "Normal", - "form_2127": "Shadow", - "form_2128": "Purified", - "form_2129": "Normal", - "form_2130": "Shadow", - "form_2131": "Purified", - "form_2132": "Normal", - "form_2133": "Shadow", - "form_2134": "Purified", - "form_2135": "Normal", - "form_2136": "Shadow", - "form_2137": "Purified", - "form_2138": "Normal", - "form_2139": "Shadow", - "form_2140": "Purified", - "form_2141": "Normal", - "form_2142": "Shadow", - "form_2143": "Purified", - "form_2144": "Normal", - "form_2145": "Shadow", - "form_2146": "Purified", - "form_2147": "Normal", - "form_2148": "Shadow", - "form_2149": "Purified", - "form_2150": "Normal", - "form_2151": "Shadow", - "form_2152": "Purified", - "form_2153": "Normal", - "form_2154": "Shadow", - "form_2155": "Purified", - "form_2156": "Normal", - "form_2157": "Shadow", - "form_2158": "Purified", - "form_2159": "Normal", - "form_2160": "Shadow", - "form_2161": "Purified", - "form_2162": "Normal", - "form_2163": "Shadow", - "form_2164": "Purified", - "form_2165": "Normal", - "form_2166": "Shadow", - "form_2167": "Purified", - "form_2168": "Normal", - "form_2169": "Shadow", - "form_2170": "Purified", - "form_2171": "Normal", - "form_2172": "Shadow", - "form_2173": "Purified", - "form_2174": "Normal", - "form_2175": "Shadow", - "form_2176": "Purified", - "form_2177": "Normal", - "form_2178": "Shadow", - "form_2179": "Purified", - "form_2180": "Normal", - "form_2181": "Shadow", - "form_2182": "Purified", - "form_2183": "Normal", - "form_2184": "Shadow", - "form_2185": "Purified", - "form_2186": "Normal", - "form_2187": "Shadow", - "form_2188": "Purified", - "form_2189": "Normal", - "form_2190": "Shadow", - "form_2191": "Purified", - "form_2192": "Normal", - "form_2193": "Shadow", - "form_2194": "Purified", - "form_2195": "Normal", - "form_2196": "Shadow", - "form_2197": "Purified", - "form_2198": "Normal", - "form_2199": "Shadow", - "form_2200": "Purified", - "form_2201": "Normal", - "form_2202": "Shadow", - "form_2203": "Purified", - "form_2204": "Normal", - "form_2205": "Shadow", - "form_2206": "Purified", - "form_2207": "Normal", - "form_2208": "Shadow", - "form_2209": "Purified", - "form_2210": "Normal", - "form_2211": "Shadow", - "form_2212": "Purified", - "form_2213": "Normal", - "form_2214": "Shadow", - "form_2215": "Purified", - "form_2216": "Normal", - "form_2217": "Shadow", - "form_2218": "Purified", - "form_2219": "Normal", - "form_2220": "Shadow", - "form_2221": "Purified", - "form_2222": "Normal", - "form_2223": "Shadow", - "form_2224": "Purified", - "form_2225": "Normal", - "form_2226": "Shadow", - "form_2227": "Purified", - "form_2228": "Normal", - "form_2229": "Shadow", - "form_2230": "Purified", - "form_2231": "Normal", - "form_2232": "Shadow", - "form_2233": "Purified", - "form_2234": "Normal", - "form_2235": "Shadow", - "form_2236": "Purified", - "form_2237": "Normal", - "form_2238": "Shadow", - "form_2239": "Purified", - "form_2240": "Normal", - "form_2241": "Shadow", - "form_2242": "Purified", - "form_2243": "Normal", - "form_2244": "Shadow", - "form_2245": "Purified", - "form_2246": "Normal", - "form_2247": "Shadow", - "form_2248": "Purified", - "form_2249": "Normal", - "form_2250": "Shadow", - "form_2251": "Purified", - "form_2252": "Normal", - "form_2253": "Shadow", - "form_2254": "Purified", - "form_2255": "Normal", - "form_2256": "Shadow", - "form_2257": "Purified", - "form_2258": "Normal", - "form_2259": "Shadow", - "form_2260": "Purified", - "form_2261": "Normal", - "form_2262": "Shadow", - "form_2263": "Purified", - "form_2264": "Normal", - "form_2265": "Shadow", - "form_2266": "Purified", - "form_2267": "Normal", - "form_2268": "Shadow", - "form_2269": "Purified", - "form_2270": "Normal", - "form_2271": "Shadow", - "form_2272": "Purified", - "form_2273": "Normal", - "form_2274": "Shadow", - "form_2275": "Purified", - "form_2276": "Normal", - "form_2277": "Shadow", - "form_2278": "Purified", - "form_2279": "Normal", - "form_2280": "Shadow", - "form_2281": "Purified", - "form_2282": "Normal", - "form_2283": "Shadow", - "form_2284": "Purified", - "form_2285": "Normal", - "form_2286": "Shadow", - "form_2287": "Purified", - "form_2288": "Normal", - "form_2289": "Shadow", - "form_2290": "Purified", - "form_2291": "Normal", - "form_2292": "Shadow", - "form_2293": "Purified", - "form_2294": "Normal", - "form_2295": "Shadow", - "form_2296": "Purified", - "form_2297": "Normal", - "form_2298": "Shadow", - "form_2299": "Purified", - "form_2300": "Normal", - "form_2301": "Shadow", - "form_2302": "Purified", - "form_2303": "Normal", - "form_2304": "Shadow", - "form_2305": "Purified", - "form_2306": "Normal", - "form_2307": "Shadow", - "form_2308": "Purified", - "form_2309": "Normal", - "form_2310": "Shadow", - "form_2311": "Purified", - "form_2312": "Normal", - "form_2313": "Shadow", - "form_2314": "Purified", - "form_2315": "Normal", - "form_2316": "Shadow", - "form_2317": "Purified", - "form_2318": "Normal", - "form_2319": "Shadow", - "form_2320": "Purified", - "form_2321": "Normal", - "form_2322": "Shadow", - "form_2323": "Purified", - "form_2324": "Normal", - "form_2325": "Shadow", - "form_2326": "Purified", - "form_2327": "Spring 2020", - "form_2328": "Spring 2020", - "form_2329": "Spring 2020", - "form_2330": "Female", - "form_2331": "Female", - "form_2332": "Costume 2020", - "form_2333": "Costume 2020", - "form_2334": "Costume 2020", - "form_2335": "Galarian", - "form_2336": "Galarian", - "form_2337": "Galarian", - "form_2338": "Galarian", - "form_2339": "Galarian", - "form_2340": "Galarian", - "form_2341": "Galarian", - "form_2342": "Galarian Standard", - "form_2343": "Galarian Zen", - "form_2344": "Galarian", - "form_2345": "Galarian", - "form_2501": "Normal", - "form_2502": "Shadow", - "form_2503": "Purified", - "form_2504": "Normal", - "form_2505": "Shadow", - "form_2506": "Purified", - "form_2510": "Normal", - "form_2511": "Shadow", - "form_2512": "Purified", - "form_2516": "Normal", - "form_2517": "Shadow", - "form_2518": "Purified", - "form_2582": "Galarian", - "form_2583": "Galarian", - "form_2585": "Costume 2020", - "form_2586": "Costume 2020", - "form_2587": "Normal", - "form_2588": "Female", - "form_2589": "Normal", - "form_2590": "Female", - "form_2591": "Ten Percent", - "form_2592": "Fifty Percent", - "form_2593": "Complete", - "form_2594": "Archipelago", - "form_2595": "Continental", - "form_2596": "Elegant", - "form_2597": "Fancy", - "form_2598": "Garden", - "form_2599": "High Plains", - "form_2600": "Icy Snow", - "form_2601": "Jungle", - "form_2602": "Marine", - "form_2603": "Meadow", - "form_2604": "Modern", - "form_2605": "Monsoon", - "form_2606": "Ocean", - "form_2607": "Pokeball", - "form_2608": "Polar", - "form_2609": "River", - "form_2610": "Sandstorm", - "form_2611": "Savanna", - "form_2612": "Sun", - "form_2613": "Tundra", - "form_2614": "Red", - "form_2615": "Yellow", - "form_2616": "Orange", - "form_2617": "Blue", - "form_2618": "White", - "form_2619": "Red", - "form_2620": "Yellow", - "form_2621": "Orange", - "form_2622": "Blue", - "form_2623": "White", - "form_2624": "Red", - "form_2625": "Yellow", - "form_2626": "Orange", - "form_2627": "Blue", - "form_2628": "White", - "form_2629": "Natural", - "form_2630": "Heart", - "form_2631": "Star", - "form_2632": "Diamond", - "form_2633": "Debutante", - "form_2634": "Matron", - "form_2635": "Dandy", - "form_2636": "La Reine", - "form_2637": "Kabuki", - "form_2638": "Pharaoh", - "form_2639": "Shield", - "form_2640": "Blade", - "form_2641": "Small", - "form_2642": "Average", - "form_2643": "Large", - "form_2644": "Super", - "form_2645": "Small", - "form_2646": "Average", - "form_2647": "Large", - "form_2648": "Super", - "form_2649": "Neutral", - "form_2650": "Active", - "form_2651": "Confined", - "form_2652": "Unbound", - "form_2666": "Costume 2020 Deprecated", - "form_2668": "Costume 2020", - "form_2669": "Adventure Hat 2020", - "form_2670": "Winter 2020", - "form_2671": "Winter 2020", - "form_2672": "Winter 2020", - "form_2673": "2020", - "form_2674": "2021", - "costume_1": "Holiday", - "costume_2": "Party", - "costume_3": "Ash", - "costume_4": "Witch", - "costume_5": "Adventure", - "costume_6": "Black Cap", - "costume_7": "Flower", - "costume_8": "Toque", - "costume_9": "Detective", - "costume_10": "One Piece", - "costume_11": "Pokemon Day", - "move_1": "でんきショック", - "move_2": "でんこうせっか", - "move_3": "ひっかく", - "move_4": "ひのこ", - "move_5": "つるのムチ", - "move_6": "たいあたり", - "move_7": "はっぱカッター", - "move_8": "とっしん", - "move_9": "みずでっぽう", - "move_10": "かみつく", - "move_11": "はたく", - "move_12": "おうふくビンタ", - "move_13": "まきつく", - "move_14": "はかいこうせん", - "move_15": "したでなめる", - "move_16": "あくのはどう", - "move_17": "スモッグ", - "move_18": "ヘドロこうげき", - "move_19": "メタルクロー", - "move_20": "はさむ", - "move_21": "かえんぐるま", - "move_22": "メガホーン", - "move_23": "つばさでうつ", - "move_24": "かえんほうしゃ", - "move_25": "ふいうち", - "move_26": "あなをほる", - "move_27": "けたぐり", - "move_28": "クロスチョップ", - "move_29": "サイコカッター", - "move_30": "サイケこうせん", - "move_31": "じしん", - "move_32": "ストーンエッジ", - "move_33": "れいとうパンチ", - "move_34": "ハートスタンプ", - "move_35": "ほうでん", - "move_36": "ラスターカノン", - "move_37": "つつく", - "move_38": "ドリルくちばし", - "move_39": "れいとうビーム", - "move_40": "ふぶき", - "move_41": "エアスラッシュ", - "move_42": "ねっぷう", - "move_43": "ダブルニードル", - "move_44": "どくづき", - "move_45": "つばめがえし", - "move_46": "ドリルライナー", - "move_47": "はなふぶき", - "move_48": "メガドレイン", - "move_49": "むしのさざめき", - "move_50": "どくどくのキバ", - "move_51": "つじぎり", - "move_52": "きりさく", - "move_53": "バブルこうせん", - "move_54": "じごくぐるま", - "move_55": "からてチョップ", - "move_56": "ローキック", - "move_57": "アクアジェット", - "move_58": "アクアテール", - "move_59": "タネばくだん", - "move_60": "サイコショック", - "move_61": "いわおとし", - "move_62": "げんしのちから", - "move_63": "がんせきふうじ", - "move_64": "いわなだれ", - "move_65": "パワージェム", - "move_66": "かげうち", - "move_67": "シャドーパンチ", - "move_68": "シャドークロー", - "move_69": "あやしいかぜ", - "move_70": "シャドーボール", - "move_71": "バレットパンチ", - "move_72": "マグネットボム", - "move_73": "はがねのつばさ", - "move_74": "アイアンヘッド", - "move_75": "パラボラチャージ", - "move_76": "スパーク", - "move_77": "かみなりパンチ", - "move_78": "かみなり", - "move_79": "10まんボルト", - "move_80": "たつまき", - "move_81": "りゅうのいぶき", - "move_82": "りゅうのはどう", - "move_83": "ドラゴンクロー", - "move_84": "チャームボイス", - "move_85": "ドレインキッス", - "move_86": "マジカルシャイン", - "move_87": "ムーンフォース", - "move_88": "じゃれつく", - "move_89": "クロスポイズン", - "move_90": "ヘドロばくだん", - "move_91": "ヘドロウェーブ", - "move_92": "ダストシュート", - "move_93": "マッドショット", - "move_94": "ホネこんぼう", - "move_95": "じならし", - "move_96": "どろばくだん", - "move_97": "れんぞくぎり", - "move_98": "むしくい", - "move_99": "シグナルビーム", - "move_100": "シザークロス", - "move_101": "ニトロチャージ", - "move_102": "はじけるほのお", - "move_103": "だいもんじ", - "move_104": "しおみず", - "move_105": "みずのはどう", - "move_106": "ねっとう", - "move_107": "ハイドロポンプ", - "move_108": "サイコキネシス", - "move_109": "サイコブレイク", - "move_110": "こおりのつぶて", - "move_111": "こごえるかぜ", - "move_112": "こおりのいぶき", - "move_113": "すいとる", - "move_114": "ギガドレイン", - "move_115": "ほのおのパンチ", - "move_116": "ソーラービーム", - "move_117": "リーフブレード", - "move_118": "パワーウィップ", - "move_119": "はねる", - "move_120": "ようかいえき", - "move_121": "エアカッター", - "move_122": "ぼうふう", - "move_123": "かわらわり", - "move_124": "いあいぎり", - "move_125": "スピードスター", - "move_126": "つのでつく", - "move_127": "ふみつけ", - "move_128": "ずつき", - "move_129": "ひっさつまえば", - "move_130": "たたきつける", - "move_131": "のしかかり", - "move_132": "ねむる", - "move_133": "わるあがき", - "move_134": "ねっとう", - "move_135": "ハイドロポンプ", - "move_136": "まきつく", - "move_137": "まきつく", - "move_200": "れんぞくぎり", - "move_201": "むしくい", - "move_202": "かみつく", - "move_203": "ふいうち", - "move_204": "りゅうのいぶき", - "move_205": "でんきショック", - "move_206": "スパーク", - "move_207": "けたぐり", - "move_208": "からてチョップ", - "move_209": "ひのこ", - "move_210": "つばさでうつ", - "move_211": "つつく", - "move_212": "したでなめる", - "move_213": "シャドークロー", - "move_214": "つるのムチ", - "move_215": "はっぱカッター", - "move_216": "マッドショット", - "move_217": "こおりのつぶて", - "move_218": "こおりのいぶき", - "move_219": "でんこうせっか", - "move_220": "ひっかく", - "move_221": "たいあたり", - "move_222": "はたく", - "move_223": "いあいぎり", - "move_224": "どくづき", - "move_225": "ようかいえき", - "move_226": "サイコカッター", - "move_227": "いわおとし", - "move_228": "メタルクロー", - "move_229": "バレットパンチ", - "move_230": "みずでっぽう", - "move_231": "はねる", - "move_232": "みずでっぽう", - "move_233": "どろかけ", - "move_234": "しねんのずつき", - "move_235": "ねんりき", - "move_236": "どくばり", - "move_237": "あわ", - "move_238": "だましうち", - "move_239": "はがねのつばさ", - "move_240": "ほのおのキバ", - "move_241": "いわくだき", - "move_242": "へんしん", - "move_243": "カウンター", - "move_244": "こなゆき", - "move_245": "インファイト", - "move_246": "ばくれつパンチ", - "move_247": "きあいだま", - "move_248": "オーロラビーム", - "move_249": "チャージビーム", - "move_250": "ボルトチェンジ", - "move_251": "ワイルドボルト", - "move_252": "でんじほう", - "move_253": "ドラゴンテール", - "move_254": "ゆきなだれ", - "move_255": "エアスラッシュ", - "move_256": "ブレイブバード", - "move_257": "ゴッドバード", - "move_258": "すなじごく", - "move_259": "ロックブラスト", - "move_260": "まとわりつく", - "move_261": "むしのていこう", - "move_262": "ぎんいろのかぜ", - "move_263": "おどろかす", - "move_264": "たたりめ", - "move_265": "ナイトヘッド", - "move_266": "アイアンテール", - "move_267": "ジャイロボール", - "move_268": "ヘビーボンバー", - "move_269": "ほのおのうず", - "move_270": "オーバーヒート", - "move_271": "タネマシンガン", - "move_272": "くさむすび", - "move_273": "エナジーボール", - "move_274": "じんつうりき", - "move_275": "みらいよち", - "move_276": "ミラーコート", - "move_277": "げきりん", - "move_278": "バークアウト", - "move_279": "かみくだく", - "move_280": "イカサマ", - "move_281": "めざめるパワー", - "move_287": "あくび", - "move_282": "とっしん", - "move_285": "りゅうせいぐん", - "move_283": "たきのぼり", - "move_284": "なみのり", - "move_288": "サイコブースト", - "move_286": "はめつのねがい", - "move_290": "だんがいのつるぎ", - "move_289": "こんげんのはどう", - "move_291": "プレゼント", - "move_292": "ウェザーボール", - "move_293": "ウェザーボール", - "move_294": "ウェザーボール", - "move_295": "ウェザーボール", - "move_296": "ハードプラント", - "move_298": "ブラストバーン", - "move_297": "うちおとす", - "move_299": "ハイドロカノン", - "move_300": "とっておき", - "move_301": "コメットパンチ", - "move_302": "ロケットずつき", - "move_303": "アシッドボム", - "move_304": "だいちのちから", - "move_305": "クラブハンマー", - "move_306": "とびかかる", - "move_307": "ブレイククロー", - "move_308": "オクタンほう", - "move_309": "ミラーショット", - "move_310": "ばかぢから", - "move_311": "とどめばり", - "move_312": "グラスミキサー", - "move_313": "きゅうけつ", - "move_314": "ドレインパンチ", - "move_315": "シャドーボーン", - "move_316": "だくりゅう", - "move_317": "ブレイズキック", - "move_318": "シェルブレード", - "move_319": "グロウパンチ", - "move_320": "あまえる", - "move_321": "ギガインパクト", - "move_322": "やつあたり", - "move_323": "おんがえし", - "move_324": "シンクロノイズ", - "move_325": "ロックオン", - "move_326": "かみなりのキバ", - "move_327": "こおりのキバ", - "move_328": "つのドリル", - "move_329": "じわれ", - "move_330": "せいなるつるぎ", - "move_331": "フライングプレス", - "move_332": "はどうだん", - "move_333": "しっぺがえし", - "move_334": "がんせきほう", - "move_335": "エアロブラスト", - "move_336": "テクノバスター", - "move_337": "テクノバスター", - "move_338": "テクノバスター", - "move_339": "テクノバスター", - "move_340": "テクノバスター", - "move_341": "そらをとぶ" -} diff --git a/static/locale/ko.json b/static/locale/ko.json deleted file mode 100644 index dac7a813..00000000 --- a/static/locale/ko.json +++ /dev/null @@ -1,3628 +0,0 @@ -{ - "UNKNOWN_POKESTOP": "Unknown Pokestop", - "EMBED_DIRECTIONS": "DIRECTIONS", - "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{0} Subscriptions are not enabled in the config.", - "MSG_NOT_MODERATOR_OR_HIGHER": "{0} is not a moderator or higher thus you may not see other's subscription settings.", - "MSG_INVALID_USER_MENTION": "{0} Failed to retrieve user with mention tag {1}.", - "MSG_USER_NOT_SUBSCRIBED": "{0} is not currently subscribed to any Pokemon or Raid notifications.", - "TIME_YEARS": "years", - "TIME_DAYS": "days", - "TIME_HOURS": "hours", - "TIME_MINUTES": "minutes", - "TIME_SECONDS": "seconds", - "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", - "NOTIFY_ENABLE_DISABLE": "{0} has **{1}d** Pokemon, Raid, Quest, and Invasion notifications.", - "NOTIFY_INVALID_COORDINATES": "{0} Unable not parse {1} as valid coordinates.", - "NOTIFY_DISTANCE_SET": "{0} Notifications only within a {1} meters radius of location {2},{3} will be sent.", - "NOTIFY_PHONE_NUMBER_SET": "{0} Text message notifications for ultra rare Pokemon will be sent to {1}.", - "NOTIFY_INVALID_IV_VALUES": "{0} {1} is not a valid value. (Example: `0-15-6`)", - "NOTIFY_INVALID_ATTACK_VALUE": "{0} {1} is not a valid attack value. Must be between `0-15`.", - "NOTIFY_INVALID_DEFENSE_VALUE": "{0} {1} is not a valid defense value. Must be between `0-15`.", - "NOTIFY_INVALID_STAMINA_VALUE": "{0} {1} is not a valid stamina value. Must be between `0-15`.", - "NOTIFY_INVALID_IV_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_INVALID_GENDER": "{0} {1} is not a valid gender. (i.e. `m`, `f`, `*`)", - "NOTIFY_INVALID_LEVEL": "{0} {1} must be within the range of `0-35`.", - "NOTIFY_INVALID_MINIMUM_IV": "{0} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", - "NOTIFY_INVALID_MINIMUM_LEVEL": "{0} Failed to parse minimum level provided '{1}'.", - "NOTIFY_INVALID_MAXIMUM_LEVEL": "{0} Failed to parse maximum level provided '{1}'.", - "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{0} {1} are not valid Pokemon names or IDs.", - "NOTIFY_INVALID_POKEMON_ID_OR_NAME": "{0} {1} are not valid Pokemon name or ID.", - "NOTIFY_INVALID_POKEMON_ID": "{0} {1} is not a valid Pokemon id.", - "NOTIFY_COMMON_TYPE_POKEMON": "{0} {1} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {2}% or higher.", - "NOTIFY_INVALID_POKEMON_SPECIFIED": "{0} Unable to recognize any of the Pokemon you specified.", - "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{0} is not subscribed to any Pokemon notifications.", - "NOTIFY_INVALID_PVP_LEAGUE": "{0} {1} is not a valid PvP league. (Great or Ultra)", - "NOTIFY_INVALID_PVP_RANK_RANGE": "{0} {1} must be within the range of `0-4096`.", - "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokemon notifications.", - "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} Unable to remove {1} Pokemon subscriptions.", - "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Pokemon notifications.", - "NOTIFY_INVALID_CITY_ROLE": "{0} {1} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", - "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} has unsubscribed from **all** raid boss notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} has unsubscribed from **all** quest notifications.", - "NOTIFY_INVALID_INVASION_GENDER": "{0} Please specify a gender. i.e. `.invmenot fire-m` or `.invmenot water-f ontario or `.invmenot giovanni`", - "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Team Rocket invasion notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokestop lure notifications.", - "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{0} added gym subscription `{1}` to your list of gyms to receive raid notifications from.", - "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{0} already subscribed to gym notifications from {1}.", - "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{0} Removed gym subscription `{1}` from your list of gyms to receive notifications from.", - "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} has unsubscribed from **all** gym notifications.", - "NOTIFY_INVALID_ICON_STYLE": "{0} invalid icon style, type `{1}icons` to see a list of valid options.", - "NOTIFY_ICON_STYLE_CHANGE": "{0} Icon style changed to **{1}**.", - "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Raid subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Quest subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Team Rocket Invasion subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Gym subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Lure subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_IMPORT_UPLOAD_FILE": "{0} Please upload your subscriptions.json file to import now within 3 minutes...", - "NOTIFY_IMPORT_MALFORMED_DATA": "{0} Malformed subscription data, unable to import.", - "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{0} Unable to get uploaded attachment.", - "NOTIFY_IMPORT_SUCCESS": "{0} subscriptions were imported successfully.", - "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{0} does not have any subscriptions to export.", - "NOTIFY_EXPORT_SUCCESS": "{0} Download your subscription settings here.", - "NOTIFY_SETTINGS_EMBED_TITLE": "**{0} Notification Settings (Page: {1}/{2}):**", - "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{0}**", - "NOTIFY_SETTINGS_EMBED_CITIES": "Pokemon Feed Zones: ```{0}```", - "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", - "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{0} meters (Location: {1})", - "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{0}**", - "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {0}% ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {0} ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({0}/{1} used)", - "NOTIFY_FROM": "{0} (From: {1})", - "ALL_AREAS": "All Areas", - "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", - "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{0}feedme cityname` to assign yourself to that city role.*", - "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{0} {1} is not a valid city name, type `{2}cities` to see a list of available cities.", - "FEEDS_INVALID_CITY_NAME": "{0} {1} is not a valid city name.", - "FEEDS_ASSIGNED_ALL_ROLES": "{0} was assigned all city feed roles.", - "FEEDS_UNASSIGNED_ALL_ROLES": "{0} was unassigned all city feed roles.", - "FEEDS_ASSIGNED_ROLES": "{0} has joined role(s) **{1}**.", - "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{0} is already assigned to role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES": "{0} has been removed from role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{0} is not assigned to role(s) **{1}**.", - "FEEDS_PLEASE_WAIT": "{0} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", - "CHANNEL_MESSAGES_DELETED": "{0} Channel {1} messages have been deleted.", - "GYM_NO_POKESTOPS_CONVERTED": "{0} No Pokestops have been converted to Gyms.", - "GYM_NO_POKESTOPS_UPDATED": "{0} No Pokestops have been updated.", - "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", - "GYM_UNKNOWN_NAME": "Unknown Gym Name", - "GYM_UNKNOWN_IMAGE": "Unknown Image Url", - "GYM_POKESTOPS_CONVERTED": "{0} {1} Pokestops updated to Gyms.", - "GYM_POKESTOPS_DELETED": "{0} {1} Pokestops deleted.", - "GYM_NAME": "- **{0}**", - "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({1})] [[Gym Image]({0})]", - "SHINY_STATS_INVALID_CHANNEL": "{0} Shiny stats channel does not exist.", - "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {0}**]", - "SHINY_STATS_NEWLINE": "----------------------------------------------", - "SHINY_STATS_MESSAGE": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours with a **1/{4}** ratio.", - "SHINY_STATS_TOTAL_MESSAGE": "Found **{0}** total shinies out of **{1}** possiblities.", - "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{0}** total shinies out of **{1}** possiblities with a **1/{2}** ratio in total.", - "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", - "ERROR_NESTS_DISABLED": "{0} Nests disabled.", - "ERROR_NESTS_LIST": "{0} Unable to retrieve nest list.", - "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {0} of {1} total members.", - "ERROR_PARSING_USER_ID": "{0} Unable to recognize user id {1}.", - "DONATE_MESSAGE": "{0} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", - "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", - "SUBSCRIPTIONS_FROM_CITY": " from city **{0}**", - "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** lure notifications{2}.", - "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** lure notifications{2}.", - "ERROR_NO_LURE_SUBSCRIPTIONS": "{0} is not subscribed to any lure notifications{1}.", - "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** raid notifications{2}.", - "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** raid notifications{2}.", - "ERROR_NO_RAID_SUBSCRIPTIONS": "{0} is not subscribed to any raid notifications{1}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** quest notifications{2}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** quest notifications{2}.", - "ERROR_NO_QUEST_SUBSCRIPTIONS": "{0} is not subscribed to any quest notifications{1}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** Team Rocket invasion reward notifications{2}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Team Rocket invasion reward notifications{2}.", - "ERROR_NO_INVASION_SUBSCRIPTIONS": "{0} is not subscribed to any Team Rocket invasion notifications{1}.", - "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** {2} League PvP notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your {2} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} has unsubscribed from **all** {1} League PvP Pokemon notifications.", - "EVENT_POKEMON_SET": "{0} event Pokemon set to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_ADD": "{0} event Pokemon added to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_REMOVE": "{0} event Pokemon `{1}` removed.", - "DIRECT_MESSAGE_NOT_SUPPORTED": "{0} Direct message is not supported for this command.", - "PVP_GREAT_LEAGUE": "Great League", - "PVP_ULTRA_LEAGUE": "Ultra League", - "PVP_RANK": "Rank", - "PVP_CP": "CP", - "weather_0": "None", - "weather_1": "Clear", - "weather_2": "Rainy", - "weather_3": "PartlyCloudy", - "weather_4": "Cloudy", - "weather_5": "Windy", - "weather_6": "Snow", - "weather_7": "Fog", - "quest_1": "{0} time(s) First Catch OTD", - "quest_2": "{0} time(s) First Pokestop OTD", - "quest_3": "Multi Part Quest", - "quest_4": "Catch {0} Pokemon", - "quest_5": "Spin {0} Pokestop(s)", - "quest_6": "Hatch {0} Egg(s)", - "quest_7": "Complete {0} Gym Battle(s)", - "quest_8": "Complete {0} Raid Battle(s)", - "quest_9": "Complete {0} Quest", - "quest_10": "Transfer {0} Pokemon", - "quest_11": "Favorite {0} Pokemon", - "quest_12": "Autocomplete", - "quest_13": "Use {0} Berries on Pokemon", - "quest_14": "Power up {0} Pokemon", - "quest_15": "Evolve {0} Pokemon", - "quest_16": "Land {0} Throw(s)", - "quest_17": "Get {0} Buddy candy", - "quest_18": "Get {0} Badge(s)", - "quest_19": "Get {0} Level", - "quest_20": "Join {0} Raid Battle(s)", - "quest_21": "Complete {0} Battle(s)", - "quest_22": "Add {0} Friend(s)", - "quest_23": "Trade {0} Pokemon", - "quest_24": "Send {0} Gift(s)", - "quest_25": "Evolve {0} Into Specific Pokemon", - "quest_27": "Complete {0} Combat(s)", - "quest_28": "Take {0} Snapshot(s)", - "quest_29": "Battle {0} Team Rocket Battle(s)", - "quest_30": "Purify {0} Pokemon", - "quest_31": "Find {0} Team Rocket Invasion(s)", - "quest_32": "{0} time(s) First Grunt OTD", - "quest_33": "Feed your Buddy {0} times", - "quest_34": "Earn {0} hearts with your Buddy", - "quest_35": "Play {0} times with your Buddy", - "quest_36": "Increase your Buddy Level {0} times", - "quest_37": "Earn {0} Friendship points by Walking with your Buddy", - "quest_38": "Earn {0} Souvenirs from your Buddy", - "quest_39": "Use Incense {0} times", - "quest_40": "quest_40", - "quest_41": "quest_41", - "quest_42": "quest_42", - "quest_43": "Mega-Evolve {0} Pokemon", - "quest_44": "quest_44", - "quest_45": "quest_45", - "quest_57": "Take {0} Snapshot(s) of wild Pokemon", - "quest_reward_1": "{0:N0} XP", - "quest_reward_2": "{0} {1}", - "quest_reward_3": "{0:N0} Stardust", - "quest_reward_4": "{0} {1} Candy", - "quest_reward_5": "Avatar Clothing", - "quest_reward_6": "Quest", - "quest_reward_7": "{0}", - "quest_reward_8": "{0:N0} Pokecoins", - "quest_reward_11": "Sticker", - "quest_reward_12": "Mega Energy", - "quest_condition_1": "Type(s): {0}", - "quest_condition_2": "Pokemon: {0}", - "quest_condition_3": "Weather Boosted", - "quest_condition_4": "Daily Capture Bonus", - "quest_condition_5": "Daily Spin Bonus", - "quest_condition_6": "Win Raid", - "quest_condition_7": "Raid Level(s): {0}", - "quest_condition_8": "{0} Throw", - "quest_condition_9": "Win Gym Battle", - "quest_condition_10": "Super Effective Charge", - "quest_condition_11": "Item: {0}", - "quest_condition_12": "Unique Pokestop", - "quest_condition_13": "Quest Context", - "quest_condition_14": "{0} Throw In a Row", - "quest_condition_15": "Curve Ball", - "quest_condition_16": "Badge Type", - "quest_condition_17": "Player Level", - "quest_condition_18": "Win Battle", - "quest_condition_19": "New Friend", - "quest_condition_20": "Days In a Row", - "quest_condition_21": "Unique Pokemon", - "quest_condition_22": "NPC Combat", - "quest_condition_23": "PVP Combat", - "quest_condition_24": "Location", - "quest_condition_25": "Distance", - "quest_condition_26": "Pokemon Alignment(s): {0}", - "quest_condition_27": "Invasion Category(s): {0}", - "quest_condition_28": "With Buddy", - "quest_condition_37": "With Mega Evo Pokemon", - "alignment_1": "Shadow", - "alignment_2": "Purified", - "character_category_1": "Team Leader", - "character_category_2": "Grunt", - "throw_type_10": "Nice", - "throw_type_11": "Great", - "throw_type_12": "Excellent", - "throw_type_13": "Curve", - "item_1": "몬스터볼", - "item_2": "수퍼볼", - "item_3": "하이퍼볼", - "item_4": "마스터볼", - "item_5": "Premier Ball", - "item_101": "상처약", - "item_102": "좋은상처약", - "item_103": "고급상처약", - "item_104": "풀회복약", - "item_201": "기력의조각", - "item_202": "기력의덩어리", - "item_301": "행복의알", - "item_401": "향로", - "item_402": "Spicy Incense", - "item_403": "Cool Incense", - "item_404": "Floral Incense", - "item_501": "루어모듈", - "item_502": "아이스 루어모듈", - "item_503": "허브 루어모듈", - "item_504": "마그네틱 루어모듈", - "item_602": "플러스파워", - "item_603": "디펜드업", - "item_604": "UNDEFINED", - "item_701": "라즈열매", - "item_702": "블리열매", - "item_703": "나나열매", - "item_704": "서배열매", - "item_705": "파인열매", - "item_706": "황금 라즈열매", - "item_707": "Golden Nanab Berry", - "item_708": "은 파인열매", - "item_801": "카메라", - "item_901": "무한 부화장치", - "item_902": "부화장치", - "item_903": "슈퍼 부화장치", - "item_1001": "Pokemon Storage Upgrade", - "item_1002": "Item Storage Upgrade", - "item_1101": "태양의돌", - "item_1102": "왕의징표석", - "item_1103": "금속코트", - "item_1104": "용의비늘", - "item_1105": "업그레이드", - "item_1106": "신오의 돌", - "item_1107": "하나의 돌", - "item_1201": "기술머신노말", - "item_1202": "기술머신스페셜", - "item_1301": "이상한사탕", - "item_1401": "레이드패스", - "item_1402": "프리미엄 배틀패스", - "item_1403": "EX레이드패스", - "item_1404": "별의조각", - "item_1405": "선물", - "lure_501": "Normal", - "lure_502": "Glacial", - "lure_503": "Mossy", - "lure_504": "Magnetic", - "grunt_0": "None", - "grunt_1": "블랑쉬", - "grunt_2": "칸델라", - "grunt_3": "스파크", - "grunt_4": "조무래기 (male)", - "grunt_5": "조무래기 (female)", - "grunt_6": "벌레 - 조무래기 (female)", - "grunt_7": "벌레 - 조무래기 (male)", - "grunt_8": "Darkness - Female Grunt", - "grunt_9": "Darkness - Male Grunt", - "grunt_10": "악 - 조무래기 (female)", - "grunt_11": "악 - 조무래기 (male)", - "grunt_12": "드래곤 - 조무래기 (female)", - "grunt_13": "드래곤 - 조무래기 (male)", - "grunt_14": "페어리 - 조무래기 (female)", - "grunt_15": "페어리 - 조무래기 (male)", - "grunt_16": "격투 - 조무래기 (female)", - "grunt_17": "격투 - 조무래기 (male)", - "grunt_18": "불꽃 - 조무래기 (female)", - "grunt_19": "불꽃 - 조무래기 (male)", - "grunt_20": "비행 - 조무래기 (female)", - "grunt_21": "비행 - 조무래기 (male)", - "grunt_22": "풀 - 조무래기 (female)", - "grunt_23": "풀 - 조무래기 (male)", - "grunt_24": "땅 - 조무래기 (female)", - "grunt_25": "땅 - 조무래기 (male)", - "grunt_26": "얼음 - 조무래기 (female)", - "grunt_27": "얼음 - 조무래기 (male)", - "grunt_28": "조무래기 (female)", - "grunt_29": "조무래기 (male)", - "grunt_30": "노말 - 조무래기 (female)", - "grunt_31": "노말 - 조무래기 (male)", - "grunt_32": "독 - 조무래기 (female)", - "grunt_33": "독 - 조무래기 (male)", - "grunt_34": "에스퍼 - 조무래기 (female)", - "grunt_35": "에스퍼 - 조무래기 (male)", - "grunt_36": "바위 - 조무래기 (female)", - "grunt_37": "바위 - 조무래기 (male)", - "grunt_38": "물 - 조무래기 (female)", - "grunt_39": "물 - 조무래기 (male)", - "grunt_40": "Player Team Leader", - "grunt_41": "리더 클리프", - "grunt_42": "리더 알로", - "grunt_43": "리더 시에라", - "grunt_44": "비주기", - "grunt_45": "미끼 조무래기 (male)", - "grunt_46": "미끼 조무래기 (female)", - "grunt_47": "고스트 - 조무래기 (female)", - "grunt_48": "고스트 - 조무래기 (male)", - "grunt_49": "전기 - 조무래기 (female)", - "grunt_50": "전기 - 조무래기 (male)", - "poke_0": "--", - "poke_1": "이상해씨", - "poke_2": "이상해풀", - "poke_3": "이상해꽃", - "poke_4": "파이리", - "poke_5": "리자드", - "poke_6": "리자몽", - "poke_7": "꼬부기", - "poke_8": "어니부기", - "poke_9": "거북왕", - "poke_10": "캐터피", - "poke_11": "단데기", - "poke_12": "버터플", - "poke_13": "뿔충이", - "poke_14": "딱충이", - "poke_15": "독침붕", - "poke_16": "구구", - "poke_17": "피죤", - "poke_18": "피죤투", - "poke_19": "꼬렛", - "poke_20": "레트라", - "poke_21": "깨비참", - "poke_22": "깨비드릴조", - "poke_23": "아보", - "poke_24": "아보크", - "poke_25": "피카츄", - "poke_26": "라이츄", - "poke_27": "모래두지", - "poke_28": "고지", - "poke_29": "니드런♀", - "poke_30": "니드리나", - "poke_31": "니드퀸", - "poke_32": "니드런♂", - "poke_33": "니드리노", - "poke_34": "니드킹", - "poke_35": "삐삐", - "poke_36": "픽시", - "poke_37": "식스테일", - "poke_38": "나인테일", - "poke_39": "푸린", - "poke_40": "푸크린", - "poke_41": "주뱃", - "poke_42": "골뱃", - "poke_43": "뚜벅쵸", - "poke_44": "냄새꼬", - "poke_45": "라플레시아", - "poke_46": "파라스", - "poke_47": "파라섹트", - "poke_48": "콘팡", - "poke_49": "도나리", - "poke_50": "디그다", - "poke_51": "닥트리오", - "poke_52": "나옹", - "poke_53": "페르시온", - "poke_54": "고라파덕", - "poke_55": "골덕", - "poke_56": "망키", - "poke_57": "성원숭", - "poke_58": "가디", - "poke_59": "윈디", - "poke_60": "발챙이", - "poke_61": "슈륙챙이", - "poke_62": "강챙이", - "poke_63": "캐이시", - "poke_64": "윤겔라", - "poke_65": "후딘", - "poke_66": "알통몬", - "poke_67": "근육몬", - "poke_68": "괴력몬", - "poke_69": "모다피", - "poke_70": "우츠동", - "poke_71": "우츠보트", - "poke_72": "왕눈해", - "poke_73": "독파리", - "poke_74": "꼬마돌", - "poke_75": "데구리", - "poke_76": "딱구리", - "poke_77": "포니타", - "poke_78": "날쌩마", - "poke_79": "야돈", - "poke_80": "야도란", - "poke_81": "코일", - "poke_82": "레어코일", - "poke_83": "파오리", - "poke_84": "두두", - "poke_85": "두트리오", - "poke_86": "쥬쥬", - "poke_87": "쥬레곤", - "poke_88": "질퍽이", - "poke_89": "질뻐기", - "poke_90": "셀러", - "poke_91": "파르셀", - "poke_92": "고오스", - "poke_93": "고우스트", - "poke_94": "팬텀", - "poke_95": "롱스톤", - "poke_96": "슬리프", - "poke_97": "슬리퍼", - "poke_98": "크랩", - "poke_99": "킹크랩", - "poke_100": "찌리리공", - "poke_101": "붐볼", - "poke_102": "아라리", - "poke_103": "나시", - "poke_104": "탕구리", - "poke_105": "텅구리", - "poke_106": "시라소몬", - "poke_107": "홍수몬", - "poke_108": "내루미", - "poke_109": "또가스", - "poke_110": "또도가스", - "poke_111": "뿔카노", - "poke_112": "코뿌리", - "poke_113": "럭키", - "poke_114": "덩쿠리", - "poke_115": "캥카", - "poke_116": "쏘드라", - "poke_117": "시드라", - "poke_118": "콘치", - "poke_119": "왕콘치", - "poke_120": "별가사리", - "poke_121": "아쿠스타", - "poke_122": "마임맨", - "poke_123": "스라크", - "poke_124": "루주라", - "poke_125": "에레브", - "poke_126": "마그마", - "poke_127": "쁘사이저", - "poke_128": "켄타로스", - "poke_129": "잉어킹", - "poke_130": "갸라도스", - "poke_131": "라프라스", - "poke_132": "메타몽", - "poke_133": "이브이", - "poke_134": "샤미드", - "poke_135": "쥬피썬더", - "poke_136": "부스터", - "poke_137": "폴리곤", - "poke_138": "암나이트", - "poke_139": "암스타", - "poke_140": "투구", - "poke_141": "투구푸스", - "poke_142": "프테라", - "poke_143": "잠만보", - "poke_144": "프리져", - "poke_145": "썬더", - "poke_146": "파이어", - "poke_147": "미뇽", - "poke_148": "신뇽", - "poke_149": "망나뇽", - "poke_150": "뮤츠", - "poke_151": "뮤", - "poke_152": "치코리타", - "poke_153": "베이리프", - "poke_154": "메가니움", - "poke_155": "브케인", - "poke_156": "마그케인", - "poke_157": "블레이범", - "poke_158": "리아코", - "poke_159": "엘리게이", - "poke_160": "장크로다일", - "poke_161": "꼬리선", - "poke_162": "다꼬리", - "poke_163": "부우부", - "poke_164": "야부엉", - "poke_165": "레디바", - "poke_166": "레디안", - "poke_167": "페이검", - "poke_168": "아리아도스", - "poke_169": "크로뱃", - "poke_170": "초라기", - "poke_171": "랜턴", - "poke_172": "피츄", - "poke_173": "삐", - "poke_174": "푸푸린", - "poke_175": "토게피", - "poke_176": "토게틱", - "poke_177": "네이티", - "poke_178": "네이티오", - "poke_179": "메리프", - "poke_180": "보송송", - "poke_181": "전룡", - "poke_182": "아르코", - "poke_183": "마릴", - "poke_184": "마릴리", - "poke_185": "꼬지모", - "poke_186": "왕구리", - "poke_187": "통통코", - "poke_188": "두코", - "poke_189": "솜솜코", - "poke_190": "에이팜", - "poke_191": "해너츠", - "poke_192": "해루미", - "poke_193": "왕자리", - "poke_194": "우파", - "poke_195": "누오", - "poke_196": "에브이", - "poke_197": "블래키", - "poke_198": "니로우", - "poke_199": "야도킹", - "poke_200": "무우마", - "poke_201": "안농", - "poke_202": "마자용", - "poke_203": "키링키", - "poke_204": "피콘", - "poke_205": "쏘콘", - "poke_206": "노고치", - "poke_207": "글라이거", - "poke_208": "강철톤", - "poke_209": "블루", - "poke_210": "그랑블루", - "poke_211": "침바루", - "poke_212": "핫삼", - "poke_213": "단단지", - "poke_214": "헤라크로스", - "poke_215": "포푸니", - "poke_216": "깜지곰", - "poke_217": "링곰", - "poke_218": "마그마그", - "poke_219": "마그카르고", - "poke_220": "꾸꾸리", - "poke_221": "메꾸리", - "poke_222": "코산호", - "poke_223": "총어", - "poke_224": "대포무노", - "poke_225": "딜리버드", - "poke_226": "만타인", - "poke_227": "무장조", - "poke_228": "델빌", - "poke_229": "헬가", - "poke_230": "킹드라", - "poke_231": "코코리", - "poke_232": "코리갑", - "poke_233": "폴리곤2", - "poke_234": "노라키", - "poke_235": "루브도", - "poke_236": "배루키", - "poke_237": "카포에라", - "poke_238": "뽀뽀라", - "poke_239": "에레키드", - "poke_240": "마그비", - "poke_241": "밀탱크", - "poke_242": "해피너스", - "poke_243": "라이코", - "poke_244": "앤테이", - "poke_245": "스이쿤", - "poke_246": "애버라스", - "poke_247": "데기라스", - "poke_248": "마기라스", - "poke_249": "루기아", - "poke_250": "칠색조", - "poke_251": "세레비", - "poke_252": "나무지기", - "poke_253": "나무돌이", - "poke_254": "나무킹", - "poke_255": "아차모", - "poke_256": "영치코", - "poke_257": "번치코", - "poke_258": "물짱이", - "poke_259": "늪짱이", - "poke_260": "대짱이", - "poke_261": "포챠나", - "poke_262": "그라에나", - "poke_263": "지그제구리", - "poke_264": "직구리", - "poke_265": "개무소", - "poke_266": "실쿤", - "poke_267": "뷰티플라이", - "poke_268": "카스쿤", - "poke_269": "독케일", - "poke_270": "연꽃몬", - "poke_271": "로토스", - "poke_272": "로파파", - "poke_273": "도토링", - "poke_274": "잎새코", - "poke_275": "다탱구", - "poke_276": "테일로", - "poke_277": "스왈로", - "poke_278": "갈모매", - "poke_279": "패리퍼", - "poke_280": "랄토스", - "poke_281": "킬리아", - "poke_282": "가디안", - "poke_283": "비구술", - "poke_284": "비나방", - "poke_285": "버섯꼬", - "poke_286": "버섯모", - "poke_287": "게을로", - "poke_288": "발바로", - "poke_289": "게을킹", - "poke_290": "토중몬", - "poke_291": "아이스크", - "poke_292": "껍질몬", - "poke_293": "소곤룡", - "poke_294": "노공룡", - "poke_295": "폭음룡", - "poke_296": "마크탕", - "poke_297": "하리뭉", - "poke_298": "루리리", - "poke_299": "코코파스", - "poke_300": "에나비", - "poke_301": "델케티", - "poke_302": "깜까미", - "poke_303": "입치트", - "poke_304": "가보리", - "poke_305": "갱도라", - "poke_306": "보스로라", - "poke_307": "요가랑", - "poke_308": "요가램", - "poke_309": "썬더라이", - "poke_310": "썬더볼트", - "poke_311": "플러시", - "poke_312": "마이농", - "poke_313": "볼비트", - "poke_314": "네오비트", - "poke_315": "로젤리아", - "poke_316": "꼴깍몬", - "poke_317": "꿀꺽몬", - "poke_318": "샤프니아", - "poke_319": "샤크니아", - "poke_320": "고래왕자", - "poke_321": "고래왕", - "poke_322": "둔타", - "poke_323": "폭타", - "poke_324": "코터스", - "poke_325": "피그점프", - "poke_326": "피그킹", - "poke_327": "얼루기", - "poke_328": "톱치", - "poke_329": "비브라바", - "poke_330": "플라이곤", - "poke_331": "선인왕", - "poke_332": "밤선인", - "poke_333": "파비코", - "poke_334": "파비코리", - "poke_335": "쟝고", - "poke_336": "세비퍼", - "poke_337": "루나톤", - "poke_338": "솔록", - "poke_339": "미꾸리", - "poke_340": "메깅", - "poke_341": "가재군", - "poke_342": "가재장군", - "poke_343": "오뚝군", - "poke_344": "점토도리", - "poke_345": "릴링", - "poke_346": "릴리요", - "poke_347": "아노딥스", - "poke_348": "아말도", - "poke_349": "빈티나", - "poke_350": "밀로틱", - "poke_351": "캐스퐁", - "poke_352": "켈리몬", - "poke_353": "어둠대신", - "poke_354": "다크펫", - "poke_355": "해골몽", - "poke_356": "미라몽", - "poke_357": "트로피우스", - "poke_358": "치렁", - "poke_359": "앱솔", - "poke_360": "마자", - "poke_361": "눈꼬마", - "poke_362": "얼음귀신", - "poke_363": "대굴레오", - "poke_364": "씨레오", - "poke_365": "씨카이저", - "poke_366": "진주몽", - "poke_367": "헌테일", - "poke_368": "분홍장이", - "poke_369": "시라칸", - "poke_370": "사랑동이", - "poke_371": "아공이", - "poke_372": "쉘곤", - "poke_373": "보만다", - "poke_374": "메탕", - "poke_375": "메탕구", - "poke_376": "메타그로스", - "poke_377": "레지락", - "poke_378": "레지아이스", - "poke_379": "레지스틸", - "poke_380": "라티아스", - "poke_381": "라티오스", - "poke_382": "가이오가", - "poke_383": "그란돈", - "poke_384": "레쿠쟈", - "poke_385": "지라치", - "poke_386": "테오키스", - "poke_387": "모부기", - "poke_388": "수풀부기", - "poke_389": "토대부기", - "poke_390": "불꽃숭이", - "poke_391": "파이숭이", - "poke_392": "초염몽", - "poke_393": "팽도리", - "poke_394": "팽태자", - "poke_395": "엠페르트", - "poke_396": "찌르꼬", - "poke_397": "찌르버드", - "poke_398": "찌르호크", - "poke_399": "비버니", - "poke_400": "비버통", - "poke_401": "귀뚤뚜기", - "poke_402": "귀뚤톡크", - "poke_403": "꼬링크", - "poke_404": "럭시오", - "poke_405": "렌트라", - "poke_406": "꼬몽울", - "poke_407": "로즈레이드", - "poke_408": "두개도스", - "poke_409": "램펄드", - "poke_410": "방패톱스", - "poke_411": "바리톱스", - "poke_412": "도롱충이", - "poke_413": "도롱마담", - "poke_414": "나메일", - "poke_415": "세꿀버리", - "poke_416": "비퀸", - "poke_417": "파치리스", - "poke_418": "브이젤", - "poke_419": "플로젤", - "poke_420": "체리버", - "poke_421": "체리꼬", - "poke_422": "깝질무", - "poke_423": "트리토돈", - "poke_424": "겟핸보숭", - "poke_425": "흔들풍손", - "poke_426": "둥실라이드", - "poke_427": "이어롤", - "poke_428": "이어롭", - "poke_429": "무우마직", - "poke_430": "돈크로우", - "poke_431": "나옹마", - "poke_432": "몬냥이", - "poke_433": "랑딸랑", - "poke_434": "스컹뿡", - "poke_435": "스컹탱크", - "poke_436": "동미러", - "poke_437": "동탁군", - "poke_438": "꼬지지", - "poke_439": "흉내내", - "poke_440": "핑복", - "poke_441": "페라페", - "poke_442": "화강돌", - "poke_443": "딥상어동", - "poke_444": "한바이트", - "poke_445": "한카리아스", - "poke_446": "먹고자", - "poke_447": "리오르", - "poke_448": "루카리오", - "poke_449": "히포포타스", - "poke_450": "하마돈", - "poke_451": "스콜피", - "poke_452": "드래피온", - "poke_453": "삐딱구리", - "poke_454": "독개굴", - "poke_455": "무스틈니", - "poke_456": "형광어", - "poke_457": "네오라이트", - "poke_458": "타만타", - "poke_459": "눈쓰개", - "poke_460": "눈설왕", - "poke_461": "포푸니라", - "poke_462": "자포코일", - "poke_463": "내룸벨트", - "poke_464": "거대코뿌리", - "poke_465": "덩쿠림보", - "poke_466": "에레키블", - "poke_467": "마그마번", - "poke_468": "토게키스", - "poke_469": "메가자리", - "poke_470": "리피아", - "poke_471": "글레이시아", - "poke_472": "글라이온", - "poke_473": "맘모꾸리", - "poke_474": "폴리곤Z", - "poke_475": "엘레이드", - "poke_476": "대코파스", - "poke_477": "야느와르몽", - "poke_478": "눈여아", - "poke_479": "로토무", - "poke_480": "유크시", - "poke_481": "엠라이트", - "poke_482": "아그놈", - "poke_483": "디아루가", - "poke_484": "펄기아", - "poke_485": "히드런", - "poke_486": "레지기가스", - "poke_487": "기라티나", - "poke_488": "크레세리아", - "poke_489": "피오네", - "poke_490": "마나피", - "poke_491": "다크라이", - "poke_492": "쉐이미", - "poke_493": "아르세우스", - "poke_494": "비크티니", - "poke_495": "주리비얀", - "poke_496": "샤비", - "poke_497": "샤로다", - "poke_498": "뚜꾸리", - "poke_499": "차오꿀", - "poke_500": "염무왕", - "poke_501": "수댕이", - "poke_502": "쌍검자비", - "poke_503": "대검귀", - "poke_504": "보르쥐", - "poke_505": "보르그", - "poke_506": "요테리", - "poke_507": "하데리어", - "poke_508": "바랜드", - "poke_509": "쌔비냥", - "poke_510": "레파르다스", - "poke_511": "야나프", - "poke_512": "야나키", - "poke_513": "바오프", - "poke_514": "바오키", - "poke_515": "앗차프", - "poke_516": "앗차키", - "poke_517": "몽나", - "poke_518": "몽얌나", - "poke_519": "콩둘기", - "poke_520": "유토브", - "poke_521": "켄호로우", - "poke_522": "줄뮤마", - "poke_523": "제브라이카", - "poke_524": "단굴", - "poke_525": "암트르", - "poke_526": "기가이어스", - "poke_527": "또르박쥐", - "poke_528": "맘박쥐", - "poke_529": "두더류", - "poke_530": "몰드류", - "poke_531": "다부니", - "poke_532": "으랏차", - "poke_533": "토쇠골", - "poke_534": "노보청", - "poke_535": "동챙이", - "poke_536": "두까비", - "poke_537": "두빅굴", - "poke_538": "던지미", - "poke_539": "타격귀", - "poke_540": "두르보", - "poke_541": "두르쿤", - "poke_542": "모아머", - "poke_543": "마디네", - "poke_544": "휠구", - "poke_545": "펜드라", - "poke_546": "소미안", - "poke_547": "엘풍", - "poke_548": "치릴리", - "poke_549": "드레디어", - "poke_550": "배쓰나이", - "poke_551": "깜눈크", - "poke_552": "악비르", - "poke_553": "악비아르", - "poke_554": "달막화", - "poke_555": "불비달마", - "poke_556": "마라카치", - "poke_557": "돌살이", - "poke_558": "암팰리스", - "poke_559": "곤율랭", - "poke_560": "곤율거니", - "poke_561": "심보러", - "poke_562": "데스마스", - "poke_563": "데스니칸", - "poke_564": "프로토가", - "poke_565": "늑골라", - "poke_566": "아켄", - "poke_567": "아케오스", - "poke_568": "깨봉이", - "poke_569": "더스트나", - "poke_570": "조로아", - "poke_571": "조로아크", - "poke_572": "치라미", - "poke_573": "치라치노", - "poke_574": "고디탱", - "poke_575": "고디보미", - "poke_576": "고디모아젤", - "poke_577": "유니란", - "poke_578": "듀란", - "poke_579": "란쿨루스", - "poke_580": "꼬지보리", - "poke_581": "스완나", - "poke_582": "바닐프티", - "poke_583": "바닐리치", - "poke_584": "배바닐라", - "poke_585": "사철록", - "poke_586": "바라철록", - "poke_587": "에몽가", - "poke_588": "딱정곤", - "poke_589": "슈바르고", - "poke_590": "깜놀버슬", - "poke_591": "뽀록나", - "poke_592": "탱그릴", - "poke_593": "탱탱겔", - "poke_594": "맘복치", - "poke_595": "파쪼옥", - "poke_596": "전툴라", - "poke_597": "철시드", - "poke_598": "너트령", - "poke_599": "기어르", - "poke_600": "기기어르", - "poke_601": "기기기어르", - "poke_602": "저리어", - "poke_603": "저리릴", - "poke_604": "저리더프", - "poke_605": "리그레", - "poke_606": "벰크", - "poke_607": "불켜미", - "poke_608": "램프라", - "poke_609": "샹델라", - "poke_610": "터검니", - "poke_611": "액슨도", - "poke_612": "액스라이즈", - "poke_613": "코고미", - "poke_614": "툰베어", - "poke_615": "프리지오", - "poke_616": "쪼마리", - "poke_617": "어지리더", - "poke_618": "메더", - "poke_619": "비조푸", - "poke_620": "비조도", - "poke_621": "크리만", - "poke_622": "골비람", - "poke_623": "골루그", - "poke_624": "자망칼", - "poke_625": "절각참", - "poke_626": "버프론", - "poke_627": "수리둥보", - "poke_628": "워글", - "poke_629": "벌차이", - "poke_630": "버랜지나", - "poke_631": "앤티골", - "poke_632": "아이앤트", - "poke_633": "모노두", - "poke_634": "디헤드", - "poke_635": "삼삼드래", - "poke_636": "활화르바", - "poke_637": "불카모스", - "poke_638": "코바르온", - "poke_639": "테라키온", - "poke_640": "비리디온", - "poke_641": "토네로스", - "poke_642": "볼트로스", - "poke_643": "레시라무", - "poke_644": "제크로무", - "poke_645": "랜드로스", - "poke_646": "큐레무", - "poke_647": "케르디오", - "poke_648": "메로엣타", - "poke_649": "게노세크트", - "poke_650": "도치마론", - "poke_651": "도치보구", - "poke_652": "브리가론", - "poke_653": "푸호꼬", - "poke_654": "테르나", - "poke_655": "마폭시", - "poke_656": "개구마르", - "poke_657": "개굴반장", - "poke_658": "개굴닌자", - "poke_659": "파르빗", - "poke_660": "파르토", - "poke_661": "화살꼬빈", - "poke_662": "불화살빈", - "poke_663": "파이어로", - "poke_664": "분이벌레", - "poke_665": "분떠도리", - "poke_666": "비비용", - "poke_667": "레오꼬", - "poke_668": "화염레오", - "poke_669": "플라베베", - "poke_670": "플라엣테", - "poke_671": "플라제스", - "poke_672": "메이클", - "poke_673": "고고트", - "poke_674": "판짱", - "poke_675": "부란다", - "poke_676": "트리미앙", - "poke_677": "냐스퍼", - "poke_678": "냐오닉스", - "poke_679": "단칼빙", - "poke_680": "쌍검킬", - "poke_681": "킬가르도", - "poke_682": "슈쁘", - "poke_683": "프레프티르", - "poke_684": "나룸퍼프", - "poke_685": "나루림", - "poke_686": "오케이징", - "poke_687": "칼라마네로", - "poke_688": "거북손손", - "poke_689": "거북손데스", - "poke_690": "수레기", - "poke_691": "드래캄", - "poke_692": "완철포", - "poke_693": "블로스터", - "poke_694": "목도리키텔", - "poke_695": "일레도리자드", - "poke_696": "티고라스", - "poke_697": "견고라스", - "poke_698": "아마루스", - "poke_699": "아마루르가", - "poke_700": "님피아", - "poke_701": "루차불", - "poke_702": "데덴네", - "poke_703": "멜리시", - "poke_704": "미끄메라", - "poke_705": "미끄네일", - "poke_706": "미끄래곤", - "poke_707": "클레피", - "poke_708": "나목령", - "poke_709": "대로트", - "poke_710": "호바귀", - "poke_711": "펌킨인", - "poke_712": "꽁어름", - "poke_713": "크레베이스", - "poke_714": "음뱃", - "poke_715": "음번", - "poke_716": "제르네아스", - "poke_717": "이벨타르", - "poke_718": "Zygarde", - "poke_719": "Diancie", - "poke_720": "Hoopa", - "poke_721": "Volcanion", - "poke_722": "Rowlet", - "poke_723": "Dartrix", - "poke_724": "Decidueye", - "poke_725": "Litten", - "poke_726": "Torracat", - "poke_727": "Incineroar", - "poke_728": "Popplio", - "poke_729": "Brionne", - "poke_730": "Primarina", - "poke_731": "Pikipek", - "poke_732": "Trumbeak", - "poke_733": "Toucannon", - "poke_734": "Yungoos", - "poke_735": "Gumshoos", - "poke_736": "Grubbin", - "poke_737": "Charjabug", - "poke_738": "Vikavolt", - "poke_739": "Crabrawler", - "poke_740": "Crabominable", - "poke_741": "Oricorio", - "poke_742": "Cutiefly", - "poke_743": "Ribombee", - "poke_744": "Rockruff", - "poke_745": "Lycanroc", - "poke_746": "Wishiwashi", - "poke_747": "Mareanie", - "poke_748": "Toxapex", - "poke_749": "Mudbray", - "poke_750": "Mudsdale", - "poke_751": "Dewpider", - "poke_752": "Araquanid", - "poke_753": "Fomantis", - "poke_754": "Lurantis", - "poke_755": "Morelull", - "poke_756": "Shiinotic", - "poke_757": "Salandit", - "poke_758": "Salazzle", - "poke_759": "Stufful", - "poke_760": "Bewear", - "poke_761": "Bounsweet", - "poke_762": "Steenee", - "poke_763": "Tsareena", - "poke_764": "Comfey", - "poke_765": "Oranguru", - "poke_766": "Passimian", - "poke_767": "Wimpod", - "poke_768": "Golisopod", - "poke_769": "Sandygast", - "poke_770": "Palossand", - "poke_771": "Pyukumuku", - "poke_772": "Type: Null", - "poke_773": "Silvally", - "poke_774": "Minior", - "poke_775": "Komala", - "poke_776": "Turtonator", - "poke_777": "Togedemaru", - "poke_778": "Mimikyu", - "poke_779": "Bruxish", - "poke_780": "Drampa", - "poke_781": "Dhelmise", - "poke_782": "Jangmo-o", - "poke_783": "Hakamo-o", - "poke_784": "Kommo-o", - "poke_785": "Tapu Koko", - "poke_786": "Tapu Lele", - "poke_787": "Tapu Bulu", - "poke_788": "Tapu Fini", - "poke_789": "Cosmog", - "poke_790": "Cosmoem", - "poke_791": "Solgaleo", - "poke_792": "Lunala", - "poke_793": "Nihilego", - "poke_794": "Buzzwole", - "poke_795": "Pheromosa", - "poke_796": "Xurkitree", - "poke_797": "Celesteela", - "poke_798": "Kartana", - "poke_799": "Guzzlord", - "poke_800": "Necrozma", - "poke_801": "Magearna", - "poke_802": "Marshadow", - "poke_808": "멜탄", - "poke_809": "멜메탈", - "poke_862": "가로막구리", - "poke_863": "나이킹", - "poke_865": "창파나이트", - "form_1": "A", - "form_2": "B", - "form_3": "C", - "form_4": "D", - "form_5": "E", - "form_6": "F", - "form_7": "G", - "form_8": "H", - "form_9": "I", - "form_10": "J", - "form_11": "K", - "form_12": "L", - "form_13": "M", - "form_14": "N", - "form_15": "O", - "form_16": "P", - "form_17": "Q", - "form_18": "R", - "form_19": "S", - "form_20": "T", - "form_21": "U", - "form_22": "V", - "form_23": "W", - "form_24": "X", - "form_25": "Y", - "form_26": "Z", - "form_27": "!", - "form_28": "?", - "form_29": "Normal", - "form_30": "Sunny", - "form_31": "Rainy", - "form_32": "Snowy", - "form_33": "Normal", - "form_34": "Attack", - "form_35": "Defense", - "form_36": "Speed", - "form_37": "00", - "form_38": "01", - "form_39": "02", - "form_40": "03", - "form_41": "04", - "form_42": "05", - "form_43": "06", - "form_44": "07", - "form_45": "Normal", - "form_46": "Alola", - "form_47": "Normal", - "form_48": "Alola", - "form_49": "Normal", - "form_50": "Alola", - "form_51": "Normal", - "form_52": "Alola", - "form_53": "Normal", - "form_54": "Alola", - "form_55": "Normal", - "form_56": "Alola", - "form_57": "Normal", - "form_58": "Alola", - "form_59": "Normal", - "form_60": "Alola", - "form_61": "Normal", - "form_62": "Alola", - "form_63": "Normal", - "form_64": "Alola", - "form_65": "Normal", - "form_66": "Alola", - "form_67": "Normal", - "form_68": "Alola", - "form_69": "Normal", - "form_70": "Alola", - "form_71": "Normal", - "form_72": "Alola", - "form_73": "Normal", - "form_74": "Alola", - "form_75": "Normal", - "form_76": "Alola", - "form_77": "Normal", - "form_78": "Alola", - "form_79": "Normal", - "form_80": "Alola", - "form_81": "Normal", - "form_82": "Frost", - "form_83": "Fan", - "form_84": "Mow", - "form_85": "Wash", - "form_86": "Heat", - "form_87": "Plant", - "form_88": "Sandy", - "form_89": "Trash", - "form_90": "Altered", - "form_91": "Origin", - "form_92": "Sky", - "form_93": "Land", - "form_94": "Overcast", - "form_95": "Sunny", - "form_96": "West Sea", - "form_97": "East Sea", - "form_98": "West Sea", - "form_99": "East Sea", - "form_100": "Normal", - "form_101": "Fighting", - "form_102": "Flying", - "form_103": "Poison", - "form_104": "Ground", - "form_105": "Rock", - "form_106": "Bug", - "form_107": "Ghost", - "form_108": "Steel", - "form_109": "Fire", - "form_110": "Water", - "form_111": "Grass", - "form_112": "Electric", - "form_113": "Psychic", - "form_114": "Ice", - "form_115": "Dragon", - "form_116": "Dark", - "form_117": "Fairy", - "form_118": "Plant", - "form_119": "Sandy", - "form_120": "Trash", - "form_121": "08", - "form_122": "09", - "form_123": "10", - "form_124": "11", - "form_125": "12", - "form_126": "13", - "form_127": "14", - "form_128": "15", - "form_129": "16", - "form_130": "17", - "form_131": "18", - "form_132": "19", - "form_133": "Armored", - "form_135": "Normal", - "form_136": "Red Striped", - "form_137": "Blue Striped", - "form_138": "Standard", - "form_139": "Zen", - "form_140": "Incarnate", - "form_141": "Therian", - "form_142": "Incarnate", - "form_143": "Therian", - "form_144": "Incarnate", - "form_145": "Therian", - "form_146": "Normal", - "form_147": "Black", - "form_148": "White", - "form_149": "Ordinary", - "form_150": "Resolute", - "form_151": "Aria", - "form_152": "Pirouette", - "form_153": "Shadow", - "form_154": "Purified", - "form_155": "Shadow", - "form_156": "Purified", - "form_157": "Normal", - "form_158": "Shadow", - "form_159": "Purified", - "form_160": "Normal", - "form_161": "Shadow", - "form_162": "Purified", - "form_163": "Normal", - "form_164": "Shadow", - "form_165": "Purified", - "form_166": "Normal", - "form_167": "Shadow", - "form_168": "Purified", - "form_169": "Normal", - "form_170": "Shadow", - "form_171": "Purified", - "form_172": "Normal", - "form_173": "Shadow", - "form_174": "Purified", - "form_175": "Normal", - "form_176": "Shadow", - "form_177": "Purified", - "form_178": "Normal", - "form_179": "Shadow", - "form_180": "Purified", - "form_181": "Normal", - "form_182": "Shadow", - "form_183": "Purified", - "form_184": "Normal", - "form_185": "Shadow", - "form_186": "Purified", - "form_187": "Normal", - "form_188": "Shadow", - "form_189": "Purified", - "form_190": "Normal", - "form_191": "Shadow", - "form_192": "Purified", - "form_193": "Normal", - "form_194": "Shadow", - "form_195": "Purified", - "form_196": "Normal", - "form_197": "Shadow", - "form_198": "Purified", - "form_199": "Normal", - "form_200": "Shadow", - "form_201": "Purified", - "form_202": "Normal", - "form_203": "Shadow", - "form_204": "Purified", - "form_205": "Normal", - "form_206": "Shadow", - "form_207": "Purified", - "form_208": "Normal", - "form_209": "Shadow", - "form_210": "Purified", - "form_211": "Normal", - "form_212": "Shadow", - "form_213": "Purified", - "form_214": "Normal", - "form_215": "Shadow", - "form_216": "Purified", - "form_217": "Normal", - "form_218": "Shadow", - "form_219": "Purified", - "form_220": "Shadow", - "form_221": "Purified", - "form_222": "Shadow", - "form_223": "Purified", - "form_224": "Normal", - "form_225": "Shadow", - "form_226": "Purified", - "form_227": "Shadow", - "form_228": "Purified", - "form_229": "Normal", - "form_230": "Shadow", - "form_231": "Purified", - "form_232": "Normal", - "form_233": "Shadow", - "form_234": "Purified", - "form_235": "Normal", - "form_236": "Shadow", - "form_237": "Purified", - "form_238": "Normal", - "form_239": "Shadow", - "form_240": "Purified", - "form_241": "Normal", - "form_242": "Shadow", - "form_243": "Purified", - "form_244": "Normal", - "form_245": "Shadow", - "form_246": "Purified", - "form_247": "Normal", - "form_248": "Shadow", - "form_249": "Purified", - "form_250": "Normal", - "form_251": "Shadow", - "form_252": "Purified", - "form_253": "Normal", - "form_254": "Shadow", - "form_255": "Purified", - "form_256": "Normal", - "form_257": "Shadow", - "form_258": "Purified", - "form_259": "Normal", - "form_260": "Shadow", - "form_261": "Purified", - "form_262": "Normal", - "form_263": "Shadow", - "form_264": "Purified", - "form_265": "Normal", - "form_266": "Shadow", - "form_267": "Purified", - "form_268": "Normal", - "form_269": "Shadow", - "form_270": "Purified", - "form_271": "Normal", - "form_272": "Shadow", - "form_273": "Purified", - "form_274": "Normal", - "form_275": "Shadow", - "form_276": "Purified", - "form_277": "Normal", - "form_278": "Shadow", - "form_279": "Purified", - "form_280": "Normal", - "form_281": "Shadow", - "form_282": "Purified", - "form_283": "Normal", - "form_284": "Shadow", - "form_285": "Purified", - "form_286": "Normal", - "form_287": "Shadow", - "form_288": "Purified", - "form_289": "Normal", - "form_290": "Shadow", - "form_291": "Purified", - "form_292": "Normal", - "form_293": "Shadow", - "form_294": "Purified", - "form_295": "Normal", - "form_296": "Shadow", - "form_297": "Purified", - "form_298": "Normal", - "form_299": "Shadow", - "form_300": "Purified", - "form_301": "Normal", - "form_302": "Shadow", - "form_303": "Purified", - "form_304": "Normal", - "form_305": "Shadow", - "form_306": "Purified", - "form_307": "Normal", - "form_308": "Shadow", - "form_309": "Purified", - "form_310": "Normal", - "form_311": "Shadow", - "form_312": "Purified", - "form_313": "Normal", - "form_314": "Shadow", - "form_315": "Purified", - "form_316": "Normal", - "form_317": "Shadow", - "form_318": "Purified", - "form_319": "Normal", - "form_320": "Shadow", - "form_321": "Purified", - "form_322": "Normal", - "form_323": "Shadow", - "form_324": "Purified", - "form_585": "Spring", - "form_586": "Summer", - "form_587": "Autumn", - "form_588": "Winter", - "form_589": "Spring", - "form_590": "Summer", - "form_591": "Autumn", - "form_592": "Winter", - "form_593": "Normal", - "form_594": "Shock", - "form_595": "Burn", - "form_596": "Chill", - "form_597": "Douse", - "form_598": "Normal", - "form_599": "Noevolve", - "form_600": "Normal", - "form_601": "Noevolve", - "form_602": "Normal", - "form_603": "Noevolve", - "form_604": "Noevolve", - "form_605": "Noevolve", - "form_606": "Noevolve", - "form_607": "Noevolve", - "form_608": "Noevolve", - "form_609": "Noevolve", - "form_610": "Normal", - "form_611": "Shadow", - "form_612": "Purified", - "form_613": "Normal", - "form_614": "Shadow", - "form_615": "Purified", - "form_616": "Normal", - "form_617": "Shadow", - "form_618": "Purified", - "form_619": "Normal", - "form_620": "Shadow", - "form_621": "Purified", - "form_622": "Normal", - "form_623": "Shadow", - "form_624": "Purified", - "form_625": "Normal", - "form_626": "Shadow", - "form_627": "Purified", - "form_628": "Normal", - "form_629": "Shadow", - "form_630": "Purified", - "form_631": "Normal", - "form_632": "Shadow", - "form_633": "Purified", - "form_634": "Normal", - "form_635": "Shadow", - "form_636": "Purified", - "form_637": "Normal", - "form_638": "Shadow", - "form_639": "Purified", - "form_640": "Normal", - "form_641": "Shadow", - "form_642": "Purified", - "form_643": "Normal", - "form_644": "Shadow", - "form_645": "Purified", - "form_646": "Normal", - "form_647": "Shadow", - "form_648": "Purified", - "form_649": "Normal", - "form_650": "Shadow", - "form_651": "Purified", - "form_652": "Normal", - "form_653": "Shadow", - "form_654": "Purified", - "form_655": "Normal", - "form_656": "Shadow", - "form_657": "Purified", - "form_658": "Normal", - "form_659": "Shadow", - "form_660": "Purified", - "form_661": "Normal", - "form_662": "Shadow", - "form_663": "Purified", - "form_664": "Normal", - "form_665": "Shadow", - "form_666": "Purified", - "form_667": "Normal", - "form_668": "Shadow", - "form_669": "Purified", - "form_670": "Normal", - "form_671": "Shadow", - "form_672": "Purified", - "form_673": "Shadow", - "form_674": "Purified", - "form_675": "Shadow", - "form_676": "Purified", - "form_677": "Normal", - "form_678": "Shadow", - "form_679": "Purified", - "form_680": "Normal", - "form_681": "Shadow", - "form_682": "Purified", - "form_683": "Normal", - "form_684": "Shadow", - "form_685": "Purified", - "form_686": "Shadow", - "form_687": "Purified", - "form_688": "Normal", - "form_689": "Shadow", - "form_690": "Purified", - "form_691": "Normal", - "form_692": "Shadow", - "form_693": "Purified", - "form_694": "Normal", - "form_695": "Shadow", - "form_696": "Purified", - "form_697": "Normal", - "form_698": "Shadow", - "form_699": "Purified", - "form_700": "Normal", - "form_701": "Shadow", - "form_702": "Purified", - "form_703": "Normal", - "form_704": "Shadow", - "form_705": "Purified", - "form_706": "Normal", - "form_707": "Shadow", - "form_708": "Purified", - "form_709": "Shadow", - "form_710": "Purified", - "form_711": "Shadow", - "form_712": "Purified", - "form_713": "Normal", - "form_714": "Shadow", - "form_715": "Purified", - "form_716": "Normal", - "form_717": "Shadow", - "form_718": "Purified", - "form_719": "Normal", - "form_720": "Shadow", - "form_721": "Purified", - "form_722": "Normal", - "form_723": "Shadow", - "form_724": "Purified", - "form_725": "Shadow", - "form_726": "Purified", - "form_727": "Shadow", - "form_728": "Purified", - "form_729": "Normal", - "form_730": "Shadow", - "form_731": "Purified", - "form_732": "Shadow", - "form_733": "Purified", - "form_734": "Normal", - "form_735": "Shadow", - "form_736": "Purified", - "form_737": "Normal", - "form_738": "Shadow", - "form_739": "Purified", - "form_740": "Normal", - "form_741": "Shadow", - "form_742": "Purified", - "form_743": "Normal", - "form_744": "Shadow", - "form_745": "Purified", - "form_746": "Normal", - "form_747": "Shadow", - "form_748": "Purified", - "form_749": "Normal", - "form_750": "Shadow", - "form_751": "Purified", - "form_752": "Normal", - "form_753": "Shadow", - "form_754": "Purified", - "form_755": "Normal", - "form_756": "Shadow", - "form_757": "Purified", - "form_758": "Normal", - "form_759": "Shadow", - "form_760": "Purified", - "form_761": "Normal", - "form_762": "Shadow", - "form_763": "Purified", - "form_764": "Normal", - "form_765": "Shadow", - "form_766": "Purified", - "form_767": "Normal", - "form_768": "Shadow", - "form_769": "Purified", - "form_770": "Normal", - "form_771": "Shadow", - "form_772": "Purified", - "form_773": "Normal", - "form_774": "Shadow", - "form_775": "Purified", - "form_776": "Normal", - "form_777": "Shadow", - "form_778": "Purified", - "form_779": "Normal", - "form_780": "Shadow", - "form_781": "Purified", - "form_782": "Normal", - "form_783": "Shadow", - "form_784": "Purified", - "form_785": "Normal", - "form_786": "Shadow", - "form_787": "Purified", - "form_788": "Normal", - "form_789": "Shadow", - "form_790": "Purified", - "form_791": "Normal", - "form_792": "Shadow", - "form_793": "Purified", - "form_794": "Normal", - "form_795": "Shadow", - "form_796": "Purified", - "form_797": "Normal", - "form_798": "Shadow", - "form_799": "Purified", - "form_800": "Normal", - "form_801": "Shadow", - "form_802": "Purified", - "form_803": "Normal", - "form_804": "Shadow", - "form_805": "Purified", - "form_806": "Normal", - "form_807": "Shadow", - "form_808": "Purified", - "form_809": "Normal", - "form_810": "Shadow", - "form_811": "Purified", - "form_812": "Normal", - "form_813": "Shadow", - "form_814": "Purified", - "form_815": "Normal", - "form_816": "Shadow", - "form_817": "Purified", - "form_818": "Normal", - "form_819": "Shadow", - "form_820": "Purified", - "form_821": "Normal", - "form_822": "Shadow", - "form_823": "Purified", - "form_824": "Normal", - "form_825": "Shadow", - "form_826": "Purified", - "form_827": "Normal", - "form_828": "Shadow", - "form_829": "Purified", - "form_830": "Normal", - "form_831": "Shadow", - "form_832": "Purified", - "form_833": "Normal", - "form_834": "Shadow", - "form_835": "Purified", - "form_836": "Normal", - "form_837": "Shadow", - "form_838": "Purified", - "form_839": "Normal", - "form_840": "Shadow", - "form_841": "Purified", - "form_842": "Shadow", - "form_843": "Purified", - "form_844": "Shadow", - "form_845": "Purified", - "form_846": "Normal", - "form_847": "Shadow", - "form_848": "Purified", - "form_849": "Normal", - "form_850": "Shadow", - "form_851": "Purified", - "form_852": "Normal", - "form_853": "Shadow", - "form_854": "Purified", - "form_855": "Normal", - "form_856": "Shadow", - "form_857": "Purified", - "form_858": "Normal", - "form_859": "Shadow", - "form_860": "Purified", - "form_861": "Normal", - "form_862": "Shadow", - "form_863": "Purified", - "form_864": "Normal", - "form_865": "Shadow", - "form_866": "Purified", - "form_867": "Normal", - "form_868": "Shadow", - "form_869": "Purified", - "form_870": "Normal", - "form_871": "Shadow", - "form_872": "Purified", - "form_873": "Normal", - "form_874": "Shadow", - "form_875": "Purified", - "form_876": "Normal", - "form_877": "Shadow", - "form_878": "Purified", - "form_879": "Normal", - "form_880": "Shadow", - "form_881": "Purified", - "form_882": "Shadow", - "form_883": "Purified", - "form_884": "Shadow", - "form_885": "Purified", - "form_886": "Shadow", - "form_887": "Purified", - "form_888": "Normal", - "form_889": "Shadow", - "form_890": "Purified", - "form_891": "Normal", - "form_892": "Shadow", - "form_893": "Purified", - "form_894": "Fall 2019", - "form_895": "Fall 2019", - "form_896": "Fall 2019", - "form_897": "Fall 2019", - "form_898": "Normal", - "form_899": "Shadow", - "form_900": "Purified", - "form_901": "Vs 2019", - "form_902": "Normal", - "form_903": "Shadow", - "form_904": "Purified", - "form_905": "Normal", - "form_906": "Shadow", - "form_907": "Purified", - "form_908": "Normal", - "form_909": "Shadow", - "form_910": "Purified", - "form_911": "Normal", - "form_912": "Shadow", - "form_913": "Purified", - "form_914": "Normal", - "form_915": "Shadow", - "form_916": "Purified", - "form_917": "Normal", - "form_918": "Shadow", - "form_919": "Purified", - "form_920": "Normal", - "form_921": "Shadow", - "form_922": "Purified", - "form_923": "Normal", - "form_924": "Shadow", - "form_925": "Purified", - "form_926": "Normal", - "form_927": "Shadow", - "form_928": "Purified", - "form_929": "Normal", - "form_930": "Shadow", - "form_931": "Purified", - "form_932": "Normal", - "form_933": "Shadow", - "form_934": "Purified", - "form_935": "Normal", - "form_936": "Shadow", - "form_937": "Purified", - "form_938": "Normal", - "form_939": "Shadow", - "form_940": "Purified", - "form_941": "Normal", - "form_942": "Shadow", - "form_943": "Purified", - "form_944": "Galarian", - "form_945": "Normal", - "form_946": "Galarian", - "form_947": "Normal", - "form_948": "Galarian", - "form_949": "Copy 2019", - "form_950": "Copy 2019", - "form_951": "Copy 2019", - "form_952": "Copy 2019", - "form_953": "Normal", - "form_954": "Shadow", - "form_955": "Purified", - "form_956": "Normal", - "form_957": "Shadow", - "form_958": "Purified", - "form_959": "Normal", - "form_960": "Shadow", - "form_961": "Purified", - "form_962": "Normal", - "form_963": "Shadow", - "form_964": "Purified", - "form_965": "Normal", - "form_966": "Shadow", - "form_967": "Purified", - "form_968": "Normal", - "form_969": "Shadow", - "form_970": "Purified", - "form_971": "Normal", - "form_972": "Shadow", - "form_973": "Purified", - "form_974": "Normal", - "form_975": "Shadow", - "form_976": "Purified", - "form_977": "Shadow", - "form_978": "Purified", - "form_979": "Shadow", - "form_980": "Purified", - "form_981": "Normal", - "form_982": "Shadow", - "form_983": "Purified", - "form_984": "Normal", - "form_985": "Shadow", - "form_986": "Purified", - "form_987": "Normal", - "form_988": "Shadow", - "form_989": "Purified", - "form_990": "Normal", - "form_991": "Shadow", - "form_992": "Purified", - "form_993": "Normal", - "form_994": "Shadow", - "form_995": "Purified", - "form_996": "Normal", - "form_997": "Shadow", - "form_998": "Purified", - "form_999": "Normal", - "form_1000": "Shadow", - "form_1001": "Purified", - "form_1002": "Normal", - "form_1003": "Shadow", - "form_1004": "Purified", - "form_1005": "Normal", - "form_1006": "Shadow", - "form_1007": "Purified", - "form_1008": "Normal", - "form_1009": "Shadow", - "form_1010": "Purified", - "form_1011": "Normal", - "form_1012": "Shadow", - "form_1013": "Purified", - "form_1014": "Normal", - "form_1015": "Shadow", - "form_1016": "Purified", - "form_1017": "Normal", - "form_1018": "Shadow", - "form_1019": "Purified", - "form_1020": "Normal", - "form_1021": "Shadow", - "form_1022": "Purified", - "form_1023": "Normal", - "form_1024": "Shadow", - "form_1025": "Purified", - "form_1026": "Normal", - "form_1027": "Shadow", - "form_1028": "Purified", - "form_1029": "Normal", - "form_1030": "Shadow", - "form_1031": "Purified", - "form_1032": "Normal", - "form_1033": "Shadow", - "form_1034": "Purified", - "form_1035": "Normal", - "form_1036": "Shadow", - "form_1037": "Purified", - "form_1038": "Normal", - "form_1039": "Shadow", - "form_1040": "Purified", - "form_1041": "Normal", - "form_1042": "Shadow", - "form_1043": "Purified", - "form_1044": "Normal", - "form_1045": "Shadow", - "form_1046": "Purified", - "form_1047": "Normal", - "form_1048": "Shadow", - "form_1049": "Purified", - "form_1050": "Normal", - "form_1051": "Shadow", - "form_1052": "Purified", - "form_1053": "Normal", - "form_1054": "Shadow", - "form_1055": "Purified", - "form_1056": "Normal", - "form_1057": "Shadow", - "form_1058": "Purified", - "form_1059": "Normal", - "form_1060": "Shadow", - "form_1061": "Purified", - "form_1062": "Normal", - "form_1063": "Shadow", - "form_1064": "Purified", - "form_1065": "Normal", - "form_1066": "Shadow", - "form_1067": "Purified", - "form_1068": "Normal", - "form_1069": "Shadow", - "form_1070": "Purified", - "form_1071": "Normal", - "form_1072": "Shadow", - "form_1073": "Purified", - "form_1074": "Normal", - "form_1075": "Shadow", - "form_1076": "Purified", - "form_1077": "Normal", - "form_1078": "Shadow", - "form_1079": "Purified", - "form_1080": "Normal", - "form_1081": "Shadow", - "form_1082": "Purified", - "form_1083": "Normal", - "form_1084": "Shadow", - "form_1085": "Purified", - "form_1086": "Normal", - "form_1087": "Shadow", - "form_1088": "Purified", - "form_1089": "Normal", - "form_1090": "Shadow", - "form_1091": "Purified", - "form_1092": "Normal", - "form_1093": "Shadow", - "form_1094": "Purified", - "form_1095": "Normal", - "form_1096": "Shadow", - "form_1097": "Purified", - "form_1098": "Normal", - "form_1099": "Shadow", - "form_1100": "Purified", - "form_1101": "Normal", - "form_1102": "Shadow", - "form_1103": "Purified", - "form_1104": "Normal", - "form_1105": "Shadow", - "form_1106": "Purified", - "form_1107": "Normal", - "form_1108": "Shadow", - "form_1109": "Purified", - "form_1110": "Normal", - "form_1111": "Shadow", - "form_1112": "Purified", - "form_1113": "Shadow", - "form_1114": "Purified", - "form_1115": "Normal", - "form_1116": "Shadow", - "form_1117": "Purified", - "form_1118": "Normal", - "form_1119": "Shadow", - "form_1120": "Purified", - "form_1121": "Normal", - "form_1122": "Shadow", - "form_1123": "Purified", - "form_1124": "Normal", - "form_1125": "Shadow", - "form_1126": "Purified", - "form_1127": "Normal", - "form_1128": "Shadow", - "form_1129": "Purified", - "form_1130": "Normal", - "form_1131": "Shadow", - "form_1132": "Purified", - "form_1133": "Normal", - "form_1134": "Shadow", - "form_1135": "Purified", - "form_1136": "Normal", - "form_1137": "Shadow", - "form_1138": "Purified", - "form_1139": "Normal", - "form_1140": "Shadow", - "form_1141": "Purified", - "form_1142": "Normal", - "form_1143": "Shadow", - "form_1144": "Purified", - "form_1145": "Normal", - "form_1146": "Shadow", - "form_1147": "Purified", - "form_1148": "Normal", - "form_1149": "Shadow", - "form_1150": "Purified", - "form_1151": "Normal", - "form_1152": "Shadow", - "form_1153": "Purified", - "form_1154": "Normal", - "form_1155": "Shadow", - "form_1156": "Purified", - "form_1157": "Normal", - "form_1158": "Shadow", - "form_1159": "Purified", - "form_1160": "Normal", - "form_1161": "Shadow", - "form_1162": "Purified", - "form_1163": "Normal", - "form_1164": "Shadow", - "form_1165": "Purified", - "form_1166": "Normal", - "form_1167": "Shadow", - "form_1168": "Purified", - "form_1169": "Normal", - "form_1170": "Shadow", - "form_1171": "Purified", - "form_1172": "Normal", - "form_1173": "Shadow", - "form_1174": "Purified", - "form_1175": "Normal", - "form_1176": "Shadow", - "form_1177": "Purified", - "form_1178": "Normal", - "form_1179": "Shadow", - "form_1180": "Purified", - "form_1181": "Normal", - "form_1182": "Shadow", - "form_1183": "Purified", - "form_1184": "Normal", - "form_1185": "Shadow", - "form_1186": "Purified", - "form_1187": "Normal", - "form_1188": "Shadow", - "form_1189": "Purified", - "form_1190": "Normal", - "form_1191": "Shadow", - "form_1192": "Purified", - "form_1193": "Normal", - "form_1194": "Shadow", - "form_1195": "Purified", - "form_1196": "Normal", - "form_1197": "Shadow", - "form_1198": "Purified", - "form_1199": "Normal", - "form_1200": "Shadow", - "form_1201": "Purified", - "form_1202": "Normal", - "form_1203": "Shadow", - "form_1204": "Purified", - "form_1205": "Normal", - "form_1206": "Shadow", - "form_1207": "Purified", - "form_1208": "Normal", - "form_1209": "Shadow", - "form_1210": "Purified", - "form_1211": "Normal", - "form_1212": "Shadow", - "form_1213": "Purified", - "form_1214": "Normal", - "form_1215": "Shadow", - "form_1216": "Purified", - "form_1217": "Normal", - "form_1218": "Shadow", - "form_1219": "Purified", - "form_1220": "Normal", - "form_1221": "Shadow", - "form_1222": "Purified", - "form_1223": "Normal", - "form_1224": "Shadow", - "form_1225": "Purified", - "form_1226": "Normal", - "form_1227": "Shadow", - "form_1228": "Purified", - "form_1229": "Normal", - "form_1230": "Shadow", - "form_1231": "Purified", - "form_1232": "Normal", - "form_1233": "Shadow", - "form_1234": "Purified", - "form_1235": "Normal", - "form_1236": "Shadow", - "form_1237": "Purified", - "form_1238": "Normal", - "form_1239": "Shadow", - "form_1240": "Purified", - "form_1241": "Normal", - "form_1242": "Shadow", - "form_1243": "Purified", - "form_1244": "Normal", - "form_1245": "Shadow", - "form_1246": "Purified", - "form_1247": "Normal", - "form_1248": "Shadow", - "form_1249": "Purified", - "form_1250": "Normal", - "form_1251": "Shadow", - "form_1252": "Purified", - "form_1253": "Normal", - "form_1254": "Shadow", - "form_1255": "Purified", - "form_1256": "Normal", - "form_1257": "Shadow", - "form_1258": "Purified", - "form_1259": "Normal", - "form_1260": "Shadow", - "form_1261": "Purified", - "form_1262": "Normal", - "form_1263": "Shadow", - "form_1264": "Purified", - "form_1265": "Normal", - "form_1266": "Shadow", - "form_1267": "Purified", - "form_1268": "Normal", - "form_1269": "Shadow", - "form_1270": "Purified", - "form_1271": "Normal", - "form_1272": "Shadow", - "form_1273": "Purified", - "form_1274": "Normal", - "form_1275": "Shadow", - "form_1276": "Purified", - "form_1277": "Normal", - "form_1278": "Shadow", - "form_1279": "Purified", - "form_1280": "Normal", - "form_1281": "Shadow", - "form_1282": "Purified", - "form_1283": "Normal", - "form_1284": "Shadow", - "form_1285": "Purified", - "form_1286": "Normal", - "form_1287": "Shadow", - "form_1288": "Purified", - "form_1289": "Normal", - "form_1290": "Shadow", - "form_1291": "Purified", - "form_1292": "Normal", - "form_1293": "Shadow", - "form_1294": "Purified", - "form_1295": "Normal", - "form_1296": "Shadow", - "form_1297": "Purified", - "form_1298": "Normal", - "form_1299": "Shadow", - "form_1300": "Purified", - "form_1301": "Normal", - "form_1302": "Shadow", - "form_1303": "Purified", - "form_1304": "Normal", - "form_1305": "Shadow", - "form_1306": "Purified", - "form_1307": "Normal", - "form_1308": "Shadow", - "form_1309": "Purified", - "form_1310": "Normal", - "form_1311": "Shadow", - "form_1312": "Purified", - "form_1313": "Normal", - "form_1314": "Shadow", - "form_1315": "Purified", - "form_1316": "Normal", - "form_1317": "Shadow", - "form_1318": "Purified", - "form_1319": "Normal", - "form_1320": "Shadow", - "form_1321": "Purified", - "form_1322": "Normal", - "form_1323": "Shadow", - "form_1324": "Purified", - "form_1325": "Normal", - "form_1326": "Shadow", - "form_1327": "Purified", - "form_1328": "Normal", - "form_1329": "Shadow", - "form_1330": "Purified", - "form_1331": "Normal", - "form_1332": "Shadow", - "form_1333": "Purified", - "form_1334": "Normal", - "form_1335": "Shadow", - "form_1336": "Purified", - "form_1337": "Normal", - "form_1338": "Shadow", - "form_1339": "Purified", - "form_1340": "Normal", - "form_1341": "Shadow", - "form_1342": "Purified", - "form_1343": "Normal", - "form_1344": "Shadow", - "form_1345": "Purified", - "form_1346": "Normal", - "form_1347": "Shadow", - "form_1348": "Purified", - "form_1349": "Normal", - "form_1350": "Shadow", - "form_1351": "Purified", - "form_1352": "Normal", - "form_1353": "Shadow", - "form_1354": "Purified", - "form_1355": "Normal", - "form_1356": "Shadow", - "form_1357": "Purified", - "form_1358": "Normal", - "form_1359": "Shadow", - "form_1360": "Purified", - "form_1361": "Normal", - "form_1362": "Shadow", - "form_1363": "Purified", - "form_1364": "Normal", - "form_1365": "Shadow", - "form_1366": "Purified", - "form_1367": "Normal", - "form_1368": "Shadow", - "form_1369": "Purified", - "form_1370": "Normal", - "form_1371": "Shadow", - "form_1372": "Purified", - "form_1373": "Shadow", - "form_1374": "Purified", - "form_1375": "Shadow", - "form_1376": "Purified", - "form_1377": "Shadow", - "form_1378": "Purified", - "form_1379": "Normal", - "form_1380": "Shadow", - "form_1381": "Purified", - "form_1382": "Normal", - "form_1383": "Shadow", - "form_1384": "Purified", - "form_1385": "Normal", - "form_1386": "Shadow", - "form_1387": "Purified", - "form_1388": "Normal", - "form_1389": "Shadow", - "form_1390": "Purified", - "form_1391": "Normal", - "form_1392": "Shadow", - "form_1393": "Purified", - "form_1394": "Normal", - "form_1395": "Shadow", - "form_1396": "Purified", - "form_1397": "Normal", - "form_1398": "Shadow", - "form_1399": "Purified", - "form_1400": "Normal", - "form_1401": "Shadow", - "form_1402": "Purified", - "form_1403": "Normal", - "form_1404": "Shadow", - "form_1405": "Purified", - "form_1406": "Normal", - "form_1407": "Shadow", - "form_1408": "Purified", - "form_1409": "Normal", - "form_1410": "Shadow", - "form_1411": "Purified", - "form_1412": "Normal", - "form_1413": "Shadow", - "form_1414": "Purified", - "form_1415": "Normal", - "form_1416": "Shadow", - "form_1417": "Purified", - "form_1418": "Normal", - "form_1419": "Shadow", - "form_1420": "Purified", - "form_1421": "Normal", - "form_1422": "Shadow", - "form_1423": "Purified", - "form_1424": "Normal", - "form_1425": "Shadow", - "form_1426": "Purified", - "form_1427": "Normal", - "form_1428": "Shadow", - "form_1429": "Purified", - "form_1430": "Normal", - "form_1431": "Shadow", - "form_1432": "Purified", - "form_1433": "Normal", - "form_1434": "Shadow", - "form_1435": "Purified", - "form_1436": "Normal", - "form_1437": "Shadow", - "form_1438": "Purified", - "form_1439": "Normal", - "form_1440": "Shadow", - "form_1441": "Purified", - "form_1442": "Normal", - "form_1443": "Shadow", - "form_1444": "Purified", - "form_1445": "Normal", - "form_1446": "Shadow", - "form_1447": "Purified", - "form_1448": "Normal", - "form_1449": "Shadow", - "form_1450": "Purified", - "form_1451": "Normal", - "form_1452": "Shadow", - "form_1453": "Purified", - "form_1454": "Normal", - "form_1455": "Shadow", - "form_1456": "Purified", - "form_1457": "Normal", - "form_1458": "Shadow", - "form_1459": "Purified", - "form_1460": "Normal", - "form_1461": "Shadow", - "form_1462": "Purified", - "form_1463": "Normal", - "form_1464": "Shadow", - "form_1465": "Purified", - "form_1466": "Normal", - "form_1467": "Shadow", - "form_1468": "Purified", - "form_1469": "Normal", - "form_1470": "Shadow", - "form_1471": "Purified", - "form_1472": "Normal", - "form_1473": "Shadow", - "form_1474": "Purified", - "form_1475": "Normal", - "form_1476": "Shadow", - "form_1477": "Purified", - "form_1478": "Normal", - "form_1479": "Shadow", - "form_1480": "Purified", - "form_1481": "Normal", - "form_1482": "Shadow", - "form_1483": "Purified", - "form_1484": "Normal", - "form_1485": "Shadow", - "form_1486": "Purified", - "form_1487": "Normal", - "form_1488": "Shadow", - "form_1489": "Purified", - "form_1490": "Normal", - "form_1491": "Shadow", - "form_1492": "Purified", - "form_1493": "Normal", - "form_1494": "Shadow", - "form_1495": "Purified", - "form_1496": "Normal", - "form_1497": "Shadow", - "form_1498": "Purified", - "form_1499": "Normal", - "form_1500": "Shadow", - "form_1501": "Purified", - "form_1502": "Normal", - "form_1503": "Shadow", - "form_1504": "Purified", - "form_1505": "Normal", - "form_1506": "Shadow", - "form_1507": "Purified", - "form_1508": "Normal", - "form_1509": "Shadow", - "form_1510": "Purified", - "form_1511": "Normal", - "form_1512": "Shadow", - "form_1513": "Purified", - "form_1514": "Normal", - "form_1515": "Shadow", - "form_1516": "Purified", - "form_1517": "Normal", - "form_1518": "Shadow", - "form_1519": "Purified", - "form_1520": "Normal", - "form_1521": "Shadow", - "form_1522": "Purified", - "form_1523": "Normal", - "form_1524": "Shadow", - "form_1525": "Purified", - "form_1526": "Normal", - "form_1527": "Shadow", - "form_1528": "Purified", - "form_1529": "Normal", - "form_1530": "Shadow", - "form_1531": "Purified", - "form_1532": "Normal", - "form_1533": "Shadow", - "form_1534": "Purified", - "form_1535": "Normal", - "form_1536": "Shadow", - "form_1537": "Purified", - "form_1538": "Normal", - "form_1539": "Shadow", - "form_1540": "Purified", - "form_1541": "Normal", - "form_1542": "Shadow", - "form_1543": "Purified", - "form_1544": "Normal", - "form_1545": "Shadow", - "form_1546": "Purified", - "form_1547": "Normal", - "form_1548": "Shadow", - "form_1549": "Purified", - "form_1550": "Normal", - "form_1551": "Shadow", - "form_1552": "Purified", - "form_1553": "Normal", - "form_1554": "Shadow", - "form_1555": "Purified", - "form_1556": "Normal", - "form_1557": "Shadow", - "form_1558": "Purified", - "form_1559": "Normal", - "form_1560": "Shadow", - "form_1561": "Purified", - "form_1562": "Normal", - "form_1563": "Shadow", - "form_1564": "Purified", - "form_1565": "Normal", - "form_1566": "Shadow", - "form_1567": "Purified", - "form_1568": "Normal", - "form_1569": "Shadow", - "form_1570": "Purified", - "form_1571": "Normal", - "form_1572": "Shadow", - "form_1573": "Purified", - "form_1574": "Normal", - "form_1575": "Shadow", - "form_1576": "Purified", - "form_1577": "Normal", - "form_1578": "Shadow", - "form_1579": "Purified", - "form_1580": "Normal", - "form_1581": "Shadow", - "form_1582": "Purified", - "form_1583": "Normal", - "form_1584": "Shadow", - "form_1585": "Purified", - "form_1586": "Normal", - "form_1587": "Shadow", - "form_1588": "Purified", - "form_1589": "Normal", - "form_1590": "Shadow", - "form_1591": "Purified", - "form_1592": "Normal", - "form_1593": "Shadow", - "form_1594": "Purified", - "form_1595": "Normal", - "form_1596": "Shadow", - "form_1597": "Purified", - "form_1598": "Normal", - "form_1599": "Shadow", - "form_1600": "Purified", - "form_1601": "Normal", - "form_1602": "Shadow", - "form_1603": "Purified", - "form_1604": "Normal", - "form_1605": "Shadow", - "form_1606": "Purified", - "form_1607": "Normal", - "form_1608": "Shadow", - "form_1609": "Purified", - "form_1610": "Normal", - "form_1611": "Shadow", - "form_1612": "Purified", - "form_1613": "Normal", - "form_1614": "Shadow", - "form_1615": "Purified", - "form_1616": "Normal", - "form_1617": "Shadow", - "form_1618": "Purified", - "form_1619": "Normal", - "form_1620": "Shadow", - "form_1621": "Purified", - "form_1622": "Normal", - "form_1623": "Shadow", - "form_1624": "Purified", - "form_1625": "Normal", - "form_1626": "Shadow", - "form_1627": "Purified", - "form_1628": "Normal", - "form_1629": "Shadow", - "form_1630": "Purified", - "form_1631": "Normal", - "form_1632": "Shadow", - "form_1633": "Purified", - "form_1634": "Normal", - "form_1635": "Shadow", - "form_1636": "Purified", - "form_1637": "Normal", - "form_1638": "Shadow", - "form_1639": "Purified", - "form_1640": "Normal", - "form_1641": "Shadow", - "form_1642": "Purified", - "form_1643": "Normal", - "form_1644": "Shadow", - "form_1645": "Purified", - "form_1646": "Normal", - "form_1647": "Shadow", - "form_1648": "Purified", - "form_1649": "Normal", - "form_1650": "Shadow", - "form_1651": "Purified", - "form_1652": "Normal", - "form_1653": "Shadow", - "form_1654": "Purified", - "form_1655": "Normal", - "form_1656": "Shadow", - "form_1657": "Purified", - "form_1658": "Normal", - "form_1659": "Shadow", - "form_1660": "Purified", - "form_1661": "Normal", - "form_1662": "Shadow", - "form_1663": "Purified", - "form_1664": "Normal", - "form_1665": "Shadow", - "form_1666": "Purified", - "form_1667": "Normal", - "form_1668": "Shadow", - "form_1669": "Purified", - "form_1670": "Normal", - "form_1671": "Shadow", - "form_1672": "Purified", - "form_1673": "Normal", - "form_1674": "Shadow", - "form_1675": "Purified", - "form_1676": "Normal", - "form_1677": "Shadow", - "form_1678": "Purified", - "form_1679": "Normal", - "form_1680": "Shadow", - "form_1681": "Purified", - "form_1682": "Normal", - "form_1683": "Shadow", - "form_1684": "Purified", - "form_1685": "Normal", - "form_1686": "Shadow", - "form_1687": "Purified", - "form_1688": "Normal", - "form_1689": "Shadow", - "form_1690": "Purified", - "form_1691": "Normal", - "form_1692": "Shadow", - "form_1693": "Purified", - "form_1694": "Normal", - "form_1695": "Shadow", - "form_1696": "Purified", - "form_1697": "Normal", - "form_1698": "Shadow", - "form_1699": "Purified", - "form_1700": "Normal", - "form_1701": "Shadow", - "form_1702": "Purified", - "form_1703": "Normal", - "form_1704": "Shadow", - "form_1705": "Purified", - "form_1706": "Normal", - "form_1707": "Shadow", - "form_1708": "Purified", - "form_1709": "Normal", - "form_1710": "Shadow", - "form_1711": "Purified", - "form_1712": "Normal", - "form_1713": "Shadow", - "form_1714": "Purified", - "form_1715": "Normal", - "form_1716": "Shadow", - "form_1717": "Purified", - "form_1718": "Normal", - "form_1719": "Shadow", - "form_1720": "Purified", - "form_1721": "Normal", - "form_1722": "Shadow", - "form_1723": "Purified", - "form_1724": "Normal", - "form_1725": "Shadow", - "form_1726": "Purified", - "form_1727": "Normal", - "form_1728": "Shadow", - "form_1729": "Purified", - "form_1730": "Normal", - "form_1731": "Shadow", - "form_1732": "Purified", - "form_1733": "Normal", - "form_1734": "Shadow", - "form_1735": "Purified", - "form_1736": "Normal", - "form_1737": "Shadow", - "form_1738": "Purified", - "form_1739": "Normal", - "form_1740": "Shadow", - "form_1741": "Purified", - "form_1742": "Normal", - "form_1743": "Shadow", - "form_1744": "Purified", - "form_1745": "Normal", - "form_1746": "Shadow", - "form_1747": "Purified", - "form_1748": "Normal", - "form_1749": "Shadow", - "form_1750": "Purified", - "form_1751": "Normal", - "form_1752": "Shadow", - "form_1753": "Purified", - "form_1754": "Normal", - "form_1755": "Shadow", - "form_1756": "Purified", - "form_1757": "Normal", - "form_1758": "Shadow", - "form_1759": "Purified", - "form_1760": "Normal", - "form_1761": "Shadow", - "form_1762": "Purified", - "form_1763": "Normal", - "form_1764": "Shadow", - "form_1765": "Purified", - "form_1766": "Normal", - "form_1767": "Shadow", - "form_1768": "Purified", - "form_1769": "Normal", - "form_1770": "Shadow", - "form_1771": "Purified", - "form_1772": "Normal", - "form_1773": "Shadow", - "form_1774": "Purified", - "form_1775": "Normal", - "form_1776": "Shadow", - "form_1777": "Purified", - "form_1778": "Normal", - "form_1779": "Shadow", - "form_1780": "Purified", - "form_1781": "Normal", - "form_1782": "Shadow", - "form_1783": "Purified", - "form_1784": "Normal", - "form_1785": "Shadow", - "form_1786": "Purified", - "form_1787": "Normal", - "form_1788": "Shadow", - "form_1789": "Purified", - "form_1790": "Normal", - "form_1791": "Shadow", - "form_1792": "Purified", - "form_1793": "Normal", - "form_1794": "Shadow", - "form_1795": "Purified", - "form_1796": "Normal", - "form_1797": "Shadow", - "form_1798": "Purified", - "form_1799": "Normal", - "form_1800": "Shadow", - "form_1801": "Purified", - "form_1802": "Normal", - "form_1803": "Shadow", - "form_1804": "Purified", - "form_1805": "Normal", - "form_1806": "Shadow", - "form_1807": "Purified", - "form_1808": "Normal", - "form_1809": "Shadow", - "form_1810": "Purified", - "form_1811": "Normal", - "form_1812": "Shadow", - "form_1813": "Purified", - "form_1814": "Normal", - "form_1815": "Shadow", - "form_1816": "Purified", - "form_1817": "Normal", - "form_1818": "Shadow", - "form_1819": "Purified", - "form_1820": "Normal", - "form_1821": "Shadow", - "form_1822": "Purified", - "form_1823": "Normal", - "form_1824": "Shadow", - "form_1825": "Purified", - "form_1826": "Normal", - "form_1827": "Shadow", - "form_1828": "Purified", - "form_1829": "Normal", - "form_1830": "Shadow", - "form_1831": "Purified", - "form_1832": "Normal", - "form_1833": "Shadow", - "form_1834": "Purified", - "form_1835": "Normal", - "form_1836": "Shadow", - "form_1837": "Purified", - "form_1838": "Normal", - "form_1839": "Shadow", - "form_1840": "Purified", - "form_1841": "Normal", - "form_1842": "Shadow", - "form_1843": "Purified", - "form_1844": "Normal", - "form_1845": "Shadow", - "form_1846": "Purified", - "form_1847": "Normal", - "form_1848": "Shadow", - "form_1849": "Purified", - "form_1850": "Normal", - "form_1851": "Shadow", - "form_1852": "Purified", - "form_1853": "Normal", - "form_1854": "Shadow", - "form_1855": "Purified", - "form_1856": "Normal", - "form_1857": "Shadow", - "form_1858": "Purified", - "form_1859": "Normal", - "form_1860": "Shadow", - "form_1861": "Purified", - "form_1862": "Normal", - "form_1863": "Shadow", - "form_1864": "Purified", - "form_1865": "Normal", - "form_1866": "Shadow", - "form_1867": "Purified", - "form_1868": "Normal", - "form_1869": "Shadow", - "form_1870": "Purified", - "form_1871": "Normal", - "form_1872": "Shadow", - "form_1873": "Purified", - "form_1874": "Normal", - "form_1875": "Shadow", - "form_1876": "Purified", - "form_1877": "Normal", - "form_1878": "Shadow", - "form_1879": "Purified", - "form_1880": "Normal", - "form_1881": "Shadow", - "form_1882": "Purified", - "form_1883": "Normal", - "form_1884": "Shadow", - "form_1885": "Purified", - "form_1886": "Normal", - "form_1887": "Shadow", - "form_1888": "Purified", - "form_1889": "Normal", - "form_1890": "Shadow", - "form_1891": "Purified", - "form_1892": "Normal", - "form_1893": "Shadow", - "form_1894": "Purified", - "form_1895": "Normal", - "form_1896": "Shadow", - "form_1897": "Purified", - "form_1898": "Normal", - "form_1899": "Shadow", - "form_1900": "Purified", - "form_1901": "Normal", - "form_1902": "Shadow", - "form_1903": "Purified", - "form_1904": "Normal", - "form_1905": "Shadow", - "form_1906": "Purified", - "form_1907": "Normal", - "form_1908": "Shadow", - "form_1909": "Purified", - "form_1910": "Normal", - "form_1911": "Shadow", - "form_1912": "Purified", - "form_1913": "Normal", - "form_1914": "Shadow", - "form_1915": "Purified", - "form_1916": "Normal", - "form_1917": "Shadow", - "form_1918": "Purified", - "form_1919": "Normal", - "form_1920": "Shadow", - "form_1921": "Purified", - "form_1922": "Normal", - "form_1923": "Shadow", - "form_1924": "Purified", - "form_1925": "Normal", - "form_1926": "Shadow", - "form_1927": "Purified", - "form_1928": "Normal", - "form_1929": "Shadow", - "form_1930": "Purified", - "form_1931": "Normal", - "form_1932": "Shadow", - "form_1933": "Purified", - "form_1934": "Normal", - "form_1935": "Shadow", - "form_1936": "Purified", - "form_1937": "Normal", - "form_1938": "Shadow", - "form_1939": "Purified", - "form_1940": "Normal", - "form_1941": "Shadow", - "form_1942": "Purified", - "form_1943": "Normal", - "form_1944": "Shadow", - "form_1945": "Purified", - "form_1946": "Normal", - "form_1947": "Shadow", - "form_1948": "Purified", - "form_1949": "Normal", - "form_1950": "Shadow", - "form_1951": "Purified", - "form_1952": "Normal", - "form_1953": "Shadow", - "form_1954": "Purified", - "form_1955": "Normal", - "form_1956": "Shadow", - "form_1957": "Purified", - "form_1958": "Normal", - "form_1959": "Shadow", - "form_1960": "Purified", - "form_1961": "Normal", - "form_1962": "Shadow", - "form_1963": "Purified", - "form_1964": "Normal", - "form_1965": "Shadow", - "form_1966": "Purified", - "form_1967": "Normal", - "form_1968": "Shadow", - "form_1969": "Purified", - "form_1970": "Normal", - "form_1971": "Shadow", - "form_1972": "Purified", - "form_1973": "Normal", - "form_1974": "Shadow", - "form_1975": "Purified", - "form_1976": "Normal", - "form_1977": "Shadow", - "form_1978": "Purified", - "form_1979": "Normal", - "form_1980": "Shadow", - "form_1981": "Purified", - "form_1982": "Normal", - "form_1983": "Shadow", - "form_1984": "Purified", - "form_1985": "Normal", - "form_1986": "Shadow", - "form_1987": "Purified", - "form_1988": "Normal", - "form_1989": "Shadow", - "form_1990": "Purified", - "form_1991": "Normal", - "form_1992": "Shadow", - "form_1993": "Purified", - "form_1994": "Normal", - "form_1995": "Shadow", - "form_1996": "Purified", - "form_1997": "Normal", - "form_1998": "Shadow", - "form_1999": "Purified", - "form_2000": "Normal", - "form_2001": "Shadow", - "form_2002": "Purified", - "form_2003": "Normal", - "form_2004": "Shadow", - "form_2005": "Purified", - "form_2006": "Normal", - "form_2007": "Shadow", - "form_2008": "Purified", - "form_2009": "Normal", - "form_2010": "Shadow", - "form_2011": "Purified", - "form_2012": "Normal", - "form_2013": "Shadow", - "form_2014": "Purified", - "form_2015": "Normal", - "form_2016": "Shadow", - "form_2017": "Purified", - "form_2018": "Normal", - "form_2019": "Shadow", - "form_2020": "Purified", - "form_2021": "Normal", - "form_2022": "Shadow", - "form_2023": "Purified", - "form_2024": "Normal", - "form_2025": "Shadow", - "form_2026": "Purified", - "form_2027": "Normal", - "form_2028": "Shadow", - "form_2029": "Purified", - "form_2030": "Normal", - "form_2031": "Shadow", - "form_2032": "Purified", - "form_2033": "Normal", - "form_2034": "Shadow", - "form_2035": "Purified", - "form_2036": "Normal", - "form_2037": "Shadow", - "form_2038": "Purified", - "form_2039": "Normal", - "form_2040": "Shadow", - "form_2041": "Purified", - "form_2042": "Normal", - "form_2043": "Shadow", - "form_2044": "Purified", - "form_2045": "Normal", - "form_2046": "Shadow", - "form_2047": "Purified", - "form_2048": "Normal", - "form_2049": "Shadow", - "form_2050": "Purified", - "form_2051": "Normal", - "form_2052": "Shadow", - "form_2053": "Purified", - "form_2054": "Normal", - "form_2055": "Shadow", - "form_2056": "Purified", - "form_2057": "Normal", - "form_2058": "Shadow", - "form_2059": "Purified", - "form_2060": "Normal", - "form_2061": "Shadow", - "form_2062": "Purified", - "form_2063": "Normal", - "form_2064": "Shadow", - "form_2065": "Purified", - "form_2066": "Normal", - "form_2067": "Shadow", - "form_2068": "Purified", - "form_2069": "Normal", - "form_2070": "Shadow", - "form_2071": "Purified", - "form_2072": "Normal", - "form_2073": "Shadow", - "form_2074": "Purified", - "form_2075": "Normal", - "form_2076": "Shadow", - "form_2077": "Purified", - "form_2078": "Normal", - "form_2079": "Shadow", - "form_2080": "Purified", - "form_2081": "Normal", - "form_2082": "Shadow", - "form_2083": "Purified", - "form_2084": "Normal", - "form_2085": "Shadow", - "form_2086": "Purified", - "form_2087": "Normal", - "form_2088": "Shadow", - "form_2089": "Purified", - "form_2090": "Normal", - "form_2091": "Shadow", - "form_2092": "Purified", - "form_2093": "Normal", - "form_2094": "Shadow", - "form_2095": "Purified", - "form_2096": "Normal", - "form_2097": "Shadow", - "form_2098": "Purified", - "form_2099": "Normal", - "form_2100": "Shadow", - "form_2101": "Purified", - "form_2102": "Normal", - "form_2103": "Shadow", - "form_2104": "Purified", - "form_2105": "Normal", - "form_2106": "Shadow", - "form_2107": "Purified", - "form_2108": "Normal", - "form_2109": "Shadow", - "form_2110": "Purified", - "form_2111": "Normal", - "form_2112": "Shadow", - "form_2113": "Purified", - "form_2114": "Normal", - "form_2115": "Shadow", - "form_2116": "Purified", - "form_2117": "Normal", - "form_2118": "Shadow", - "form_2119": "Purified", - "form_2120": "Normal", - "form_2121": "Shadow", - "form_2122": "Purified", - "form_2123": "Normal", - "form_2124": "Shadow", - "form_2125": "Purified", - "form_2126": "Normal", - "form_2127": "Shadow", - "form_2128": "Purified", - "form_2129": "Normal", - "form_2130": "Shadow", - "form_2131": "Purified", - "form_2132": "Normal", - "form_2133": "Shadow", - "form_2134": "Purified", - "form_2135": "Normal", - "form_2136": "Shadow", - "form_2137": "Purified", - "form_2138": "Normal", - "form_2139": "Shadow", - "form_2140": "Purified", - "form_2141": "Normal", - "form_2142": "Shadow", - "form_2143": "Purified", - "form_2144": "Normal", - "form_2145": "Shadow", - "form_2146": "Purified", - "form_2147": "Normal", - "form_2148": "Shadow", - "form_2149": "Purified", - "form_2150": "Normal", - "form_2151": "Shadow", - "form_2152": "Purified", - "form_2153": "Normal", - "form_2154": "Shadow", - "form_2155": "Purified", - "form_2156": "Normal", - "form_2157": "Shadow", - "form_2158": "Purified", - "form_2159": "Normal", - "form_2160": "Shadow", - "form_2161": "Purified", - "form_2162": "Normal", - "form_2163": "Shadow", - "form_2164": "Purified", - "form_2165": "Normal", - "form_2166": "Shadow", - "form_2167": "Purified", - "form_2168": "Normal", - "form_2169": "Shadow", - "form_2170": "Purified", - "form_2171": "Normal", - "form_2172": "Shadow", - "form_2173": "Purified", - "form_2174": "Normal", - "form_2175": "Shadow", - "form_2176": "Purified", - "form_2177": "Normal", - "form_2178": "Shadow", - "form_2179": "Purified", - "form_2180": "Normal", - "form_2181": "Shadow", - "form_2182": "Purified", - "form_2183": "Normal", - "form_2184": "Shadow", - "form_2185": "Purified", - "form_2186": "Normal", - "form_2187": "Shadow", - "form_2188": "Purified", - "form_2189": "Normal", - "form_2190": "Shadow", - "form_2191": "Purified", - "form_2192": "Normal", - "form_2193": "Shadow", - "form_2194": "Purified", - "form_2195": "Normal", - "form_2196": "Shadow", - "form_2197": "Purified", - "form_2198": "Normal", - "form_2199": "Shadow", - "form_2200": "Purified", - "form_2201": "Normal", - "form_2202": "Shadow", - "form_2203": "Purified", - "form_2204": "Normal", - "form_2205": "Shadow", - "form_2206": "Purified", - "form_2207": "Normal", - "form_2208": "Shadow", - "form_2209": "Purified", - "form_2210": "Normal", - "form_2211": "Shadow", - "form_2212": "Purified", - "form_2213": "Normal", - "form_2214": "Shadow", - "form_2215": "Purified", - "form_2216": "Normal", - "form_2217": "Shadow", - "form_2218": "Purified", - "form_2219": "Normal", - "form_2220": "Shadow", - "form_2221": "Purified", - "form_2222": "Normal", - "form_2223": "Shadow", - "form_2224": "Purified", - "form_2225": "Normal", - "form_2226": "Shadow", - "form_2227": "Purified", - "form_2228": "Normal", - "form_2229": "Shadow", - "form_2230": "Purified", - "form_2231": "Normal", - "form_2232": "Shadow", - "form_2233": "Purified", - "form_2234": "Normal", - "form_2235": "Shadow", - "form_2236": "Purified", - "form_2237": "Normal", - "form_2238": "Shadow", - "form_2239": "Purified", - "form_2240": "Normal", - "form_2241": "Shadow", - "form_2242": "Purified", - "form_2243": "Normal", - "form_2244": "Shadow", - "form_2245": "Purified", - "form_2246": "Normal", - "form_2247": "Shadow", - "form_2248": "Purified", - "form_2249": "Normal", - "form_2250": "Shadow", - "form_2251": "Purified", - "form_2252": "Normal", - "form_2253": "Shadow", - "form_2254": "Purified", - "form_2255": "Normal", - "form_2256": "Shadow", - "form_2257": "Purified", - "form_2258": "Normal", - "form_2259": "Shadow", - "form_2260": "Purified", - "form_2261": "Normal", - "form_2262": "Shadow", - "form_2263": "Purified", - "form_2264": "Normal", - "form_2265": "Shadow", - "form_2266": "Purified", - "form_2267": "Normal", - "form_2268": "Shadow", - "form_2269": "Purified", - "form_2270": "Normal", - "form_2271": "Shadow", - "form_2272": "Purified", - "form_2273": "Normal", - "form_2274": "Shadow", - "form_2275": "Purified", - "form_2276": "Normal", - "form_2277": "Shadow", - "form_2278": "Purified", - "form_2279": "Normal", - "form_2280": "Shadow", - "form_2281": "Purified", - "form_2282": "Normal", - "form_2283": "Shadow", - "form_2284": "Purified", - "form_2285": "Normal", - "form_2286": "Shadow", - "form_2287": "Purified", - "form_2288": "Normal", - "form_2289": "Shadow", - "form_2290": "Purified", - "form_2291": "Normal", - "form_2292": "Shadow", - "form_2293": "Purified", - "form_2294": "Normal", - "form_2295": "Shadow", - "form_2296": "Purified", - "form_2297": "Normal", - "form_2298": "Shadow", - "form_2299": "Purified", - "form_2300": "Normal", - "form_2301": "Shadow", - "form_2302": "Purified", - "form_2303": "Normal", - "form_2304": "Shadow", - "form_2305": "Purified", - "form_2306": "Normal", - "form_2307": "Shadow", - "form_2308": "Purified", - "form_2309": "Normal", - "form_2310": "Shadow", - "form_2311": "Purified", - "form_2312": "Normal", - "form_2313": "Shadow", - "form_2314": "Purified", - "form_2315": "Normal", - "form_2316": "Shadow", - "form_2317": "Purified", - "form_2318": "Normal", - "form_2319": "Shadow", - "form_2320": "Purified", - "form_2321": "Normal", - "form_2322": "Shadow", - "form_2323": "Purified", - "form_2324": "Normal", - "form_2325": "Shadow", - "form_2326": "Purified", - "form_2327": "Spring 2020", - "form_2328": "Spring 2020", - "form_2329": "Spring 2020", - "form_2330": "Female", - "form_2331": "Female", - "form_2332": "Costume 2020", - "form_2333": "Costume 2020", - "form_2334": "Costume 2020", - "form_2335": "Galarian", - "form_2336": "Galarian", - "form_2337": "Galarian", - "form_2338": "Galarian", - "form_2339": "Galarian", - "form_2340": "Galarian", - "form_2341": "Galarian", - "form_2342": "Galarian Standard", - "form_2343": "Galarian Zen", - "form_2344": "Galarian", - "form_2345": "Galarian", - "form_2501": "Normal", - "form_2502": "Shadow", - "form_2503": "Purified", - "form_2504": "Normal", - "form_2505": "Shadow", - "form_2506": "Purified", - "form_2510": "Normal", - "form_2511": "Shadow", - "form_2512": "Purified", - "form_2516": "Normal", - "form_2517": "Shadow", - "form_2518": "Purified", - "form_2582": "Galarian", - "form_2583": "Galarian", - "form_2585": "Costume 2020", - "form_2586": "Costume 2020", - "form_2587": "Normal", - "form_2588": "Female", - "form_2589": "Normal", - "form_2590": "Female", - "form_2591": "Ten Percent", - "form_2592": "Fifty Percent", - "form_2593": "Complete", - "form_2594": "Archipelago", - "form_2595": "Continental", - "form_2596": "Elegant", - "form_2597": "Fancy", - "form_2598": "Garden", - "form_2599": "High Plains", - "form_2600": "Icy Snow", - "form_2601": "Jungle", - "form_2602": "Marine", - "form_2603": "Meadow", - "form_2604": "Modern", - "form_2605": "Monsoon", - "form_2606": "Ocean", - "form_2607": "Pokeball", - "form_2608": "Polar", - "form_2609": "River", - "form_2610": "Sandstorm", - "form_2611": "Savanna", - "form_2612": "Sun", - "form_2613": "Tundra", - "form_2614": "Red", - "form_2615": "Yellow", - "form_2616": "Orange", - "form_2617": "Blue", - "form_2618": "White", - "form_2619": "Red", - "form_2620": "Yellow", - "form_2621": "Orange", - "form_2622": "Blue", - "form_2623": "White", - "form_2624": "Red", - "form_2625": "Yellow", - "form_2626": "Orange", - "form_2627": "Blue", - "form_2628": "White", - "form_2629": "Natural", - "form_2630": "Heart", - "form_2631": "Star", - "form_2632": "Diamond", - "form_2633": "Debutante", - "form_2634": "Matron", - "form_2635": "Dandy", - "form_2636": "La Reine", - "form_2637": "Kabuki", - "form_2638": "Pharaoh", - "form_2639": "Shield", - "form_2640": "Blade", - "form_2641": "Small", - "form_2642": "Average", - "form_2643": "Large", - "form_2644": "Super", - "form_2645": "Small", - "form_2646": "Average", - "form_2647": "Large", - "form_2648": "Super", - "form_2649": "Neutral", - "form_2650": "Active", - "form_2651": "Confined", - "form_2652": "Unbound", - "form_2666": "Costume 2020 Deprecated", - "form_2668": "Costume 2020", - "form_2669": "Adventure Hat 2020", - "form_2670": "Winter 2020", - "form_2671": "Winter 2020", - "form_2672": "Winter 2020", - "form_2673": "2020", - "form_2674": "2021", - "costume_1": "Holiday", - "costume_2": "Party", - "costume_3": "Ash", - "costume_4": "Witch", - "costume_5": "Adventure", - "costume_6": "Black Cap", - "costume_7": "Flower", - "costume_8": "Toque", - "costume_9": "Detective", - "costume_10": "One Piece", - "costume_11": "Pokemon Day", - "move_1": "전기쇼크", - "move_2": "전광석화", - "move_3": "할퀴기", - "move_4": "불꽃세례", - "move_5": "덩굴채찍", - "move_6": "몸통박치기", - "move_7": "잎날가르기", - "move_8": "돌진", - "move_9": "물대포", - "move_10": "물기", - "move_11": "막치기", - "move_12": "연속뺨치기", - "move_13": "김밥말이", - "move_14": "파괴광선", - "move_15": "핥기", - "move_16": "악의파동", - "move_17": "스모그", - "move_18": "오물공격", - "move_19": "메탈크로우", - "move_20": "찝기", - "move_21": "화염자동차", - "move_22": "메가폰", - "move_23": "날개치기", - "move_24": "화염방사", - "move_25": "기습", - "move_26": "구멍파기", - "move_27": "안다리걸기", - "move_28": "크로스촙", - "move_29": "사이코커터", - "move_30": "환상빔", - "move_31": "지진", - "move_32": "스톤에지", - "move_33": "냉동펀치", - "move_34": "하트스탬프", - "move_35": "방전", - "move_36": "러스터캐논", - "move_37": "쪼기", - "move_38": "회전부리", - "move_39": "냉동빔", - "move_40": "눈보라", - "move_41": "에어슬래시", - "move_42": "열풍", - "move_43": "더블니들", - "move_44": "독찌르기", - "move_45": "제비반환", - "move_46": "드릴라이너", - "move_47": "꽃보라", - "move_48": "메가드레인", - "move_49": "벌레의야단법석", - "move_50": "독엄니", - "move_51": "깜짝베기", - "move_52": "베어가르기", - "move_53": "거품광선", - "move_54": "지옥의바퀴", - "move_55": "태권당수", - "move_56": "로킥", - "move_57": "아쿠아제트", - "move_58": "아쿠아테일", - "move_59": "씨폭탄", - "move_60": "사이코쇼크", - "move_61": "돌떨구기", - "move_62": "원시의힘", - "move_63": "암석봉인", - "move_64": "스톤샤워", - "move_65": "파워젬", - "move_66": "야습", - "move_67": "섀도펀치", - "move_68": "섀도크루", - "move_69": "괴상한바람", - "move_70": "섀도볼", - "move_71": "불릿펀치", - "move_72": "마그넷봄", - "move_73": "강철날개", - "move_74": "아이언헤드", - "move_75": "파라볼라차지", - "move_76": "스파크", - "move_77": "번개펀치", - "move_78": "번개", - "move_79": "10만볼트", - "move_80": "회오리", - "move_81": "용의숨결", - "move_82": "용의파동", - "move_83": "드래곤크루", - "move_84": "차밍보이스", - "move_85": "드레인키스", - "move_86": "매지컬샤인", - "move_87": "문포스", - "move_88": "치근거리기", - "move_89": "크로스포이즌", - "move_90": "오물폭탄", - "move_91": "오물웨이브", - "move_92": "더스트슈트", - "move_93": "머드숏", - "move_94": "뼈다귀치기", - "move_95": "땅고르기", - "move_96": "진흙폭탄", - "move_97": "연속자르기", - "move_98": "벌레먹음", - "move_99": "시그널빔", - "move_100": "시저크로스", - "move_101": "니트로차지", - "move_102": "불꽃튀기기", - "move_103": "불대문자", - "move_104": "소금물", - "move_105": "물의파동", - "move_106": "열탕", - "move_107": "하이드로펌프", - "move_108": "사이코키네시스", - "move_109": "사이코브레이크", - "move_110": "얼음뭉치", - "move_111": "얼다바람", - "move_112": "얼음숨결", - "move_113": "흡수", - "move_114": "기가드레인", - "move_115": "불꽃펀치", - "move_116": "솔라빔", - "move_117": "리프블레이드", - "move_118": "파워휩", - "move_119": "튀어오르기", - "move_120": "용해액", - "move_121": "에어컷터", - "move_122": "폭풍", - "move_123": "깨트리다", - "move_124": "풀베기", - "move_125": "스피드스타", - "move_126": "뿔찌르기", - "move_127": "짓밟기", - "move_128": "박치기", - "move_129": "필살앞니", - "move_130": "힘껏치기", - "move_131": "누르기", - "move_132": "잠자기", - "move_133": "발버둥", - "move_134": "열탕", - "move_135": "하이드로펌프", - "move_136": "김밥말이", - "move_137": "김밥말이", - "move_200": "연속자르기", - "move_201": "벌레먹음", - "move_202": "물기", - "move_203": "기습", - "move_204": "용의숨결", - "move_205": "전기쇼크", - "move_206": "스파크", - "move_207": "안다리걸기", - "move_208": "태권당수", - "move_209": "불꽃세례", - "move_210": "날개치기", - "move_211": "쪼기", - "move_212": "핥기", - "move_213": "섀도크루", - "move_214": "덩굴채찍", - "move_215": "잎날가르기", - "move_216": "머드숏", - "move_217": "얼음뭉치", - "move_218": "얼음숨결", - "move_219": "전광석화", - "move_220": "할퀴기", - "move_221": "몸통박치기", - "move_222": "막치기", - "move_223": "풀베기", - "move_224": "독찌르기", - "move_225": "용해액", - "move_226": "사이코커터", - "move_227": "돌떨구기", - "move_228": "메탈크로우", - "move_229": "불릿펀치", - "move_230": "물대포", - "move_231": "튀어오르기", - "move_232": "물대포", - "move_233": "진흙뿌리기", - "move_234": "사념의박치기", - "move_235": "염동력", - "move_236": "독침", - "move_237": "거품", - "move_238": "속여때리기", - "move_239": "강철날개", - "move_240": "불꽃엄니", - "move_241": "바위깨기", - "move_242": "변신", - "move_243": "카운터", - "move_244": "눈싸라기", - "move_245": "인파이트", - "move_246": "폭발펀치", - "move_247": "기합구슬", - "move_248": "오로라빔", - "move_249": "차지빔", - "move_250": "볼트체인지", - "move_251": "와일드볼트", - "move_252": "전자포", - "move_253": "드래곤테일", - "move_254": "눈사태", - "move_255": "에어슬래시", - "move_256": "브레이브버드", - "move_257": "불새", - "move_258": "모래지옥", - "move_259": "락블레스트", - "move_260": "엉겨붙기", - "move_261": "벌레의저항", - "move_262": "은빛바람", - "move_263": "놀래키기", - "move_264": "병상첨병", - "move_265": "나이트헤드", - "move_266": "아이언테일", - "move_267": "자이로볼", - "move_268": "헤비봄버", - "move_269": "회오리불꽃", - "move_270": "오버히트", - "move_271": "기관총", - "move_272": "풀묶기", - "move_273": "에너지볼", - "move_274": "신통력", - "move_275": "미래예지", - "move_276": "미러코트", - "move_277": "역린", - "move_278": "바크아웃", - "move_279": "깨물어부수기", - "move_280": "속임수", - "move_281": "잠재파워", - "move_287": "하품", - "move_282": "돌진", - "move_285": "용성군", - "move_283": "폭포오르기", - "move_284": "파도타기", - "move_288": "사이코부스트", - "move_286": "파멸의소원", - "move_290": "단애의칼", - "move_289": "근원의파동", - "move_291": "프레젠트", - "move_292": "웨더볼", - "move_293": "웨더볼", - "move_294": "웨더볼", - "move_295": "웨더볼", - "move_296": "하드플랜트", - "move_298": "블러스트번", - "move_297": "떨어뜨리기", - "move_299": "하이드로캐논", - "move_300": "뒀다쓰기", - "move_301": "코멧펀치", - "move_302": "로케트박치기", - "move_303": "애시드봄", - "move_304": "대지의힘", - "move_305": "찝게햄머", - "move_306": "덤벼들기", - "move_307": "브레이크크루", - "move_308": "대포무노포", - "move_309": "미러숏", - "move_310": "엄청난힘", - "move_311": "마지막일침", - "move_312": "그래스믹서", - "move_313": "흡혈", - "move_314": "드레인펀치", - "move_315": "섀도본", - "move_316": "탁류", - "move_317": "브레이즈킥", - "move_318": "셸블레이드", - "move_319": "그로우펀치", - "move_320": "애교부리기", - "move_321": "기가임팩트", - "move_322": "화풀이", - "move_323": "은혜갚기", - "move_324": "싱크로노이즈", - "move_325": "록온", - "move_326": "번개엄니", - "move_327": "얼음엄니", - "move_328": "뿔드릴", - "move_329": "땅가르기", - "move_330": "성스러운칼", - "move_331": "플라잉프레스", - "move_332": "파동탄", - "move_333": "보복", - "move_334": "암석포", - "move_335": "에어로블라스트", - "move_336": "테크노버스터", - "move_337": "테크노버스터", - "move_338": "테크노버스터", - "move_339": "테크노버스터", - "move_340": "테크노버스터", - "move_341": "공중날기" -} diff --git a/static/locale/pt-br.json b/static/locale/pt-br.json deleted file mode 100644 index 4384123b..00000000 --- a/static/locale/pt-br.json +++ /dev/null @@ -1,3628 +0,0 @@ -{ - "UNKNOWN_POKESTOP": "Unknown Pokestop", - "EMBED_DIRECTIONS": "DIRECTIONS", - "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{0} Subscriptions are not enabled in the config.", - "MSG_NOT_MODERATOR_OR_HIGHER": "{0} is not a moderator or higher thus you may not see other's subscription settings.", - "MSG_INVALID_USER_MENTION": "{0} Failed to retrieve user with mention tag {1}.", - "MSG_USER_NOT_SUBSCRIBED": "{0} is not currently subscribed to any Pokemon or Raid notifications.", - "TIME_YEARS": "years", - "TIME_DAYS": "days", - "TIME_HOURS": "hours", - "TIME_MINUTES": "minutes", - "TIME_SECONDS": "seconds", - "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", - "NOTIFY_ENABLE_DISABLE": "{0} has **{1}d** Pokemon, Raid, Quest, and Invasion notifications.", - "NOTIFY_INVALID_COORDINATES": "{0} Unable not parse {1} as valid coordinates.", - "NOTIFY_DISTANCE_SET": "{0} Notifications only within a {1} meters radius of location {2},{3} will be sent.", - "NOTIFY_PHONE_NUMBER_SET": "{0} Text message notifications for ultra rare Pokemon will be sent to {1}.", - "NOTIFY_INVALID_IV_VALUES": "{0} {1} is not a valid value. (Example: `0-15-6`)", - "NOTIFY_INVALID_ATTACK_VALUE": "{0} {1} is not a valid attack value. Must be between `0-15`.", - "NOTIFY_INVALID_DEFENSE_VALUE": "{0} {1} is not a valid defense value. Must be between `0-15`.", - "NOTIFY_INVALID_STAMINA_VALUE": "{0} {1} is not a valid stamina value. Must be between `0-15`.", - "NOTIFY_INVALID_IV_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_INVALID_GENDER": "{0} {1} is not a valid gender. (i.e. `m`, `f`, `*`)", - "NOTIFY_INVALID_LEVEL": "{0} {1} must be within the range of `0-35`.", - "NOTIFY_INVALID_MINIMUM_IV": "{0} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", - "NOTIFY_INVALID_MINIMUM_LEVEL": "{0} Failed to parse minimum level provided '{1}'.", - "NOTIFY_INVALID_MAXIMUM_LEVEL": "{0} Failed to parse maximum level provided '{1}'.", - "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{0} {1} are not valid Pokemon names or IDs.", - "NOTIFY_INVALID_POKEMON_ID_OR_NAME": "{0} {1} are not valid Pokemon name or ID.", - "NOTIFY_INVALID_POKEMON_ID": "{0} {1} is not a valid Pokemon id.", - "NOTIFY_COMMON_TYPE_POKEMON": "{0} {1} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {2}% or higher.", - "NOTIFY_INVALID_POKEMON_SPECIFIED": "{0} Unable to recognize any of the Pokemon you specified.", - "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{0} is not subscribed to any Pokemon notifications.", - "NOTIFY_INVALID_PVP_LEAGUE": "{0} {1} is not a valid PvP league. (Great or Ultra)", - "NOTIFY_INVALID_PVP_RANK_RANGE": "{0} {1} must be within the range of `0-4096`.", - "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokemon notifications.", - "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} Unable to remove {1} Pokemon subscriptions.", - "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Pokemon notifications.", - "NOTIFY_INVALID_CITY_ROLE": "{0} {1} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", - "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} has unsubscribed from **all** raid boss notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} has unsubscribed from **all** quest notifications.", - "NOTIFY_INVALID_INVASION_GENDER": "{0} Please specify a gender. i.e. `.invmenot fire-m` or `.invmenot water-f ontario or `.invmenot giovanni`", - "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Team Rocket invasion notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokestop lure notifications.", - "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{0} added gym subscription `{1}` to your list of gyms to receive raid notifications from.", - "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{0} already subscribed to gym notifications from {1}.", - "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{0} Removed gym subscription `{1}` from your list of gyms to receive notifications from.", - "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} has unsubscribed from **all** gym notifications.", - "NOTIFY_INVALID_ICON_STYLE": "{0} invalid icon style, type `{1}icons` to see a list of valid options.", - "NOTIFY_ICON_STYLE_CHANGE": "{0} Icon style changed to **{1}**.", - "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Raid subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Quest subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Team Rocket Invasion subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Gym subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Lure subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_IMPORT_UPLOAD_FILE": "{0} Please upload your subscriptions.json file to import now within 3 minutes...", - "NOTIFY_IMPORT_MALFORMED_DATA": "{0} Malformed subscription data, unable to import.", - "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{0} Unable to get uploaded attachment.", - "NOTIFY_IMPORT_SUCCESS": "{0} subscriptions were imported successfully.", - "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{0} does not have any subscriptions to export.", - "NOTIFY_EXPORT_SUCCESS": "{0} Download your subscription settings here.", - "NOTIFY_SETTINGS_EMBED_TITLE": "**{0} Notification Settings (Page: {1}/{2}):**", - "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{0}**", - "NOTIFY_SETTINGS_EMBED_CITIES": "Pokemon Feed Zones: ```{0}```", - "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", - "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{0} meters (Location: {1})", - "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{0}**", - "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {0}% ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {0} ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({0}/{1} used)", - "NOTIFY_FROM": "{0} (From: {1})", - "ALL_AREAS": "All Areas", - "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", - "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{0}feedme cityname` to assign yourself to that city role.*", - "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{0} {1} is not a valid city name, type `{2}cities` to see a list of available cities.", - "FEEDS_INVALID_CITY_NAME": "{0} {1} is not a valid city name.", - "FEEDS_ASSIGNED_ALL_ROLES": "{0} was assigned all city feed roles.", - "FEEDS_UNASSIGNED_ALL_ROLES": "{0} was unassigned all city feed roles.", - "FEEDS_ASSIGNED_ROLES": "{0} has joined role(s) **{1}**.", - "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{0} is already assigned to role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES": "{0} has been removed from role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{0} is not assigned to role(s) **{1}**.", - "FEEDS_PLEASE_WAIT": "{0} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", - "CHANNEL_MESSAGES_DELETED": "{0} Channel {1} messages have been deleted.", - "GYM_NO_POKESTOPS_CONVERTED": "{0} No Pokestops have been converted to Gyms.", - "GYM_NO_POKESTOPS_UPDATED": "{0} No Pokestops have been updated.", - "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", - "GYM_UNKNOWN_NAME": "Unknown Gym Name", - "GYM_UNKNOWN_IMAGE": "Unknown Image Url", - "GYM_POKESTOPS_CONVERTED": "{0} {1} Pokestops updated to Gyms.", - "GYM_POKESTOPS_DELETED": "{0} {1} Pokestops deleted.", - "GYM_NAME": "- **{0}**", - "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({1})] [[Gym Image]({0})]", - "SHINY_STATS_INVALID_CHANNEL": "{0} Shiny stats channel does not exist.", - "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {0}**]", - "SHINY_STATS_NEWLINE": "----------------------------------------------", - "SHINY_STATS_MESSAGE": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours with a **1/{4}** ratio.", - "SHINY_STATS_TOTAL_MESSAGE": "Found **{0}** total shinies out of **{1}** possiblities.", - "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{0}** total shinies out of **{1}** possiblities with a **1/{2}** ratio in total.", - "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", - "ERROR_NESTS_DISABLED": "{0} Nests disabled.", - "ERROR_NESTS_LIST": "{0} Unable to retrieve nest list.", - "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {0} of {1} total members.", - "ERROR_PARSING_USER_ID": "{0} Unable to recognize user id {1}.", - "DONATE_MESSAGE": "{0} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", - "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", - "SUBSCRIPTIONS_FROM_CITY": " from city **{0}**", - "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** lure notifications{2}.", - "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** lure notifications{2}.", - "ERROR_NO_LURE_SUBSCRIPTIONS": "{0} is not subscribed to any lure notifications{1}.", - "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** raid notifications{2}.", - "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** raid notifications{2}.", - "ERROR_NO_RAID_SUBSCRIPTIONS": "{0} is not subscribed to any raid notifications{1}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** quest notifications{2}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** quest notifications{2}.", - "ERROR_NO_QUEST_SUBSCRIPTIONS": "{0} is not subscribed to any quest notifications{1}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** Team Rocket invasion reward notifications{2}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Team Rocket invasion reward notifications{2}.", - "ERROR_NO_INVASION_SUBSCRIPTIONS": "{0} is not subscribed to any Team Rocket invasion notifications{1}.", - "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** {2} League PvP notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your {2} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} has unsubscribed from **all** {1} League PvP Pokemon notifications.", - "EVENT_POKEMON_SET": "{0} event Pokemon set to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_ADD": "{0} event Pokemon added to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_REMOVE": "{0} event Pokemon `{1}` removed.", - "DIRECT_MESSAGE_NOT_SUPPORTED": "{0} Direct message is not supported for this command.", - "PVP_GREAT_LEAGUE": "Great League", - "PVP_ULTRA_LEAGUE": "Ultra League", - "PVP_RANK": "Rank", - "PVP_CP": "CP", - "weather_0": "None", - "weather_1": "Clear", - "weather_2": "Rainy", - "weather_3": "PartlyCloudy", - "weather_4": "Cloudy", - "weather_5": "Windy", - "weather_6": "Snow", - "weather_7": "Fog", - "quest_1": "{0} time(s) First Catch OTD", - "quest_2": "{0} time(s) First Pokestop OTD", - "quest_3": "Multi Part Quest", - "quest_4": "Catch {0} Pokemon", - "quest_5": "Spin {0} Pokestop(s)", - "quest_6": "Hatch {0} Egg(s)", - "quest_7": "Complete {0} Gym Battle(s)", - "quest_8": "Complete {0} Raid Battle(s)", - "quest_9": "Complete {0} Quest", - "quest_10": "Transfer {0} Pokemon", - "quest_11": "Favorite {0} Pokemon", - "quest_12": "Autocomplete", - "quest_13": "Use {0} Berries on Pokemon", - "quest_14": "Power up {0} Pokemon", - "quest_15": "Evolve {0} Pokemon", - "quest_16": "Land {0} Throw(s)", - "quest_17": "Get {0} Buddy candy", - "quest_18": "Get {0} Badge(s)", - "quest_19": "Get {0} Level", - "quest_20": "Join {0} Raid Battle(s)", - "quest_21": "Complete {0} Battle(s)", - "quest_22": "Add {0} Friend(s)", - "quest_23": "Trade {0} Pokemon", - "quest_24": "Send {0} Gift(s)", - "quest_25": "Evolve {0} Into Specific Pokemon", - "quest_27": "Complete {0} Combat(s)", - "quest_28": "Take {0} Snapshot(s)", - "quest_29": "Battle {0} Team Rocket Battle(s)", - "quest_30": "Purify {0} Pokemon", - "quest_31": "Find {0} Team Rocket Invasion(s)", - "quest_32": "{0} time(s) First Grunt OTD", - "quest_33": "Feed your Buddy {0} times", - "quest_34": "Earn {0} hearts with your Buddy", - "quest_35": "Play {0} times with your Buddy", - "quest_36": "Increase your Buddy Level {0} times", - "quest_37": "Earn {0} Friendship points by Walking with your Buddy", - "quest_38": "Earn {0} Souvenirs from your Buddy", - "quest_39": "Use Incense {0} times", - "quest_40": "quest_40", - "quest_41": "quest_41", - "quest_42": "quest_42", - "quest_43": "Mega-Evolve {0} Pokemon", - "quest_44": "quest_44", - "quest_45": "quest_45", - "quest_57": "Take {0} Snapshot(s) of wild Pokemon", - "quest_reward_1": "{0:N0} XP", - "quest_reward_2": "{0} {1}", - "quest_reward_3": "{0:N0} Stardust", - "quest_reward_4": "{0} {1} Candy", - "quest_reward_5": "Avatar Clothing", - "quest_reward_6": "Quest", - "quest_reward_7": "{0}", - "quest_reward_8": "{0:N0} Pokecoins", - "quest_reward_11": "Sticker", - "quest_reward_12": "Mega Energy", - "quest_condition_1": "Type(s): {0}", - "quest_condition_2": "Pokemon: {0}", - "quest_condition_3": "Weather Boosted", - "quest_condition_4": "Daily Capture Bonus", - "quest_condition_5": "Daily Spin Bonus", - "quest_condition_6": "Win Raid", - "quest_condition_7": "Raid Level(s): {0}", - "quest_condition_8": "{0} Throw", - "quest_condition_9": "Win Gym Battle", - "quest_condition_10": "Super Effective Charge", - "quest_condition_11": "Item: {0}", - "quest_condition_12": "Unique Pokestop", - "quest_condition_13": "Quest Context", - "quest_condition_14": "{0} Throw In a Row", - "quest_condition_15": "Curve Ball", - "quest_condition_16": "Badge Type", - "quest_condition_17": "Player Level", - "quest_condition_18": "Win Battle", - "quest_condition_19": "New Friend", - "quest_condition_20": "Days In a Row", - "quest_condition_21": "Unique Pokemon", - "quest_condition_22": "NPC Combat", - "quest_condition_23": "PVP Combat", - "quest_condition_24": "Location", - "quest_condition_25": "Distance", - "quest_condition_26": "Pokemon Alignment(s): {0}", - "quest_condition_27": "Invasion Category(s): {0}", - "quest_condition_28": "With Buddy", - "quest_condition_37": "With Mega Evo Pokemon", - "alignment_1": "Shadow", - "alignment_2": "Purified", - "character_category_1": "Team Leader", - "character_category_2": "Grunt", - "throw_type_10": "Nice", - "throw_type_11": "Great", - "throw_type_12": "Excellent", - "throw_type_13": "Curve", - "item_1": "Poke Ball", - "item_2": "Great Ball", - "item_3": "Ultra Ball", - "item_4": "Master Ball", - "item_5": "Premier Ball", - "item_101": "Potion", - "item_102": "Super Potion", - "item_103": "Hyper Potion", - "item_104": "Max Potion", - "item_201": "Revive", - "item_202": "Max Revive", - "item_301": "Lucky Egg", - "item_401": "Incense", - "item_402": "Spicy Incense", - "item_403": "Cool Incense", - "item_404": "Floral Incense", - "item_501": "Lure Module", - "item_502": "Glacial Lure Module", - "item_503": "Mossy Lure Module", - "item_504": "Magnetic Lure Module", - "item_602": "X Attack", - "item_603": "X Defense", - "item_604": "X Miracle", - "item_701": "Razz Berry", - "item_702": "Bluk Berry", - "item_703": "Nanab Berry", - "item_704": "Wepar Berry", - "item_705": "Pinap Berry", - "item_706": "Golden Razz Berry", - "item_707": "Golden Nanab Berry", - "item_708": "Silver Pinap Berry", - "item_801": "Special Camera", - "item_901": "Incubator Basic Unlimited", - "item_902": "Incubator Basic", - "item_903": "Incubator Super", - "item_1001": "Pokemon Storage Upgrade", - "item_1002": "Item Storage Upgrade", - "item_1101": "Sun Stone", - "item_1102": "King's Rock", - "item_1103": "Metal Coat", - "item_1104": "Dragon Scale", - "item_1105": "Up-Grade", - "item_1106": "Sinnoh Stone", - "item_1107": "Unova Stone", - "item_1201": "Fast TM", - "item_1202": "Charged TM", - "item_1301": "Rare Candy", - "item_1401": "Free Raid Pass", - "item_1402": "Premium Raid Pass", - "item_1403": "Legendary Raid Pass", - "item_1404": "Star Piece", - "item_1405": "Friend Gift Box", - "lure_501": "Normal", - "lure_502": "Glacial", - "lure_503": "Mossy", - "lure_504": "Magnetic", - "grunt_0": "None", - "grunt_1": "Blanche", - "grunt_2": "Candela", - "grunt_3": "Spark", - "grunt_4": "Male Grunt", - "grunt_5": "Female Grunt", - "grunt_6": "Bug - Female Grunt", - "grunt_7": "Bug - Male Grunt", - "grunt_8": "Darkness - Female Grunt", - "grunt_9": "Darkness - Male Grunt", - "grunt_10": "Dark - Female Grunt", - "grunt_11": "Dark - Male Grunt", - "grunt_12": "Dragon - Female Grunt", - "grunt_13": "Dragon - Male Grunt", - "grunt_14": "Fairy - Female Grunt", - "grunt_15": "Fairy - Male Grunt", - "grunt_16": "Fighting - Female Grunt", - "grunt_17": "Fighting - Male Grunt", - "grunt_18": "Fire - Female Grunt", - "grunt_19": "Fire - Male Grunt", - "grunt_20": "Flying - Female Grunt", - "grunt_21": "Flying - Male Grunt", - "grunt_22": "Grass - Female Grunt", - "grunt_23": "Grass - Male Grunt", - "grunt_24": "Ground - Female Grunt", - "grunt_25": "Ground - Male Grunt", - "grunt_26": "Ice - Female Grunt", - "grunt_27": "Ice - Male Grunt", - "grunt_28": "Metal - Female Grunt", - "grunt_29": "Metal - Male Grunt", - "grunt_30": "Normal - Female Grunt", - "grunt_31": "Normal - Male Grunt", - "grunt_32": "Poison - Female Grunt", - "grunt_33": "Poison - Male Grunt", - "grunt_34": "Psychic - Female Grunt", - "grunt_35": "Psychic - Male Grunt", - "grunt_36": "Rock - Female Grunt", - "grunt_37": "Rock - Male Grunt", - "grunt_38": "Water - Female Grunt", - "grunt_39": "Water - Male Grunt", - "grunt_40": "Player Team Leader", - "grunt_41": "Leader Cliff", - "grunt_42": "Leader Arlo", - "grunt_43": "Leader Sierra", - "grunt_44": "Giovanni", - "grunt_45": "Decoy - Male Grunt", - "grunt_46": "Decoy - Female Grunt", - "grunt_47": "Ghost - Female Grunt", - "grunt_48": "Ghost - Male Grunt", - "grunt_49": "Electric - Female Grunt", - "grunt_50": "Electric - Male Grunt", - "poke_0": "--", - "poke_1": "Bulbasaur", - "poke_2": "Ivysaur", - "poke_3": "Venusaur", - "poke_4": "Charmander", - "poke_5": "Charmeleon", - "poke_6": "Charizard", - "poke_7": "Squirtle", - "poke_8": "Wartortle", - "poke_9": "Blastoise", - "poke_10": "Caterpie", - "poke_11": "Metapod", - "poke_12": "Butterfree", - "poke_13": "Weedle", - "poke_14": "Kakuna", - "poke_15": "Beedrill", - "poke_16": "Pidgey", - "poke_17": "Pidgeotto", - "poke_18": "Pidgeot", - "poke_19": "Rattata", - "poke_20": "Raticate", - "poke_21": "Spearow", - "poke_22": "Fearow", - "poke_23": "Ekans", - "poke_24": "Arbok", - "poke_25": "Pikachu", - "poke_26": "Raichu", - "poke_27": "Sandshrew", - "poke_28": "Sandslash", - "poke_29": "Nidoran♀", - "poke_30": "Nidorina", - "poke_31": "Nidoqueen", - "poke_32": "Nidoran♂", - "poke_33": "Nidorino", - "poke_34": "Nidoking", - "poke_35": "Clefairy", - "poke_36": "Clefable", - "poke_37": "Vulpix", - "poke_38": "Ninetales", - "poke_39": "Jigglypuff", - "poke_40": "Wigglytuff", - "poke_41": "Zubat", - "poke_42": "Golbat", - "poke_43": "Oddish", - "poke_44": "Gloom", - "poke_45": "Vileplume", - "poke_46": "Paras", - "poke_47": "Parasect", - "poke_48": "Venonat", - "poke_49": "Venomoth", - "poke_50": "Diglett", - "poke_51": "Dugtrio", - "poke_52": "Meowth", - "poke_53": "Persian", - "poke_54": "Psyduck", - "poke_55": "Golduck", - "poke_56": "Mankey", - "poke_57": "Primeape", - "poke_58": "Growlithe", - "poke_59": "Arcanine", - "poke_60": "Poliwag", - "poke_61": "Poliwhirl", - "poke_62": "Poliwrath", - "poke_63": "Abra", - "poke_64": "Kadabra", - "poke_65": "Alakazam", - "poke_66": "Machop", - "poke_67": "Machoke", - "poke_68": "Machamp", - "poke_69": "Bellsprout", - "poke_70": "Weepinbell", - "poke_71": "Victreebel", - "poke_72": "Tentacool", - "poke_73": "Tentacruel", - "poke_74": "Geodude", - "poke_75": "Graveler", - "poke_76": "Golem", - "poke_77": "Ponyta", - "poke_78": "Rapidash", - "poke_79": "Slowpoke", - "poke_80": "Slowbro", - "poke_81": "Magnemite", - "poke_82": "Magneton", - "poke_83": "Farfetch'd", - "poke_84": "Doduo", - "poke_85": "Dodrio", - "poke_86": "Seel", - "poke_87": "Dewgong", - "poke_88": "Grimer", - "poke_89": "Muk", - "poke_90": "Shellder", - "poke_91": "Cloyster", - "poke_92": "Gastly", - "poke_93": "Haunter", - "poke_94": "Gengar", - "poke_95": "Onix", - "poke_96": "Drowzee", - "poke_97": "Hypno", - "poke_98": "Krabby", - "poke_99": "Kingler", - "poke_100": "Voltorb", - "poke_101": "Electrode", - "poke_102": "Exeggcute", - "poke_103": "Exeggutor", - "poke_104": "Cubone", - "poke_105": "Marowak", - "poke_106": "Hitmonlee", - "poke_107": "Hitmonchan", - "poke_108": "Lickitung", - "poke_109": "Koffing", - "poke_110": "Weezing", - "poke_111": "Rhyhorn", - "poke_112": "Rhydon", - "poke_113": "Chansey", - "poke_114": "Tangela", - "poke_115": "Kangaskhan", - "poke_116": "Horsea", - "poke_117": "Seadra", - "poke_118": "Goldeen", - "poke_119": "Seaking", - "poke_120": "Staryu", - "poke_121": "Starmie", - "poke_122": "Mr. Mime", - "poke_123": "Scyther", - "poke_124": "Jynx", - "poke_125": "Electabuzz", - "poke_126": "Magmar", - "poke_127": "Pinsir", - "poke_128": "Tauros", - "poke_129": "Magikarp", - "poke_130": "Gyarados", - "poke_131": "Lapras", - "poke_132": "Ditto", - "poke_133": "Eevee", - "poke_134": "Vaporeon", - "poke_135": "Jolteon", - "poke_136": "Flareon", - "poke_137": "Porygon", - "poke_138": "Omanyte", - "poke_139": "Omastar", - "poke_140": "Kabuto", - "poke_141": "Kabutops", - "poke_142": "Aerodactyl", - "poke_143": "Snorlax", - "poke_144": "Articuno", - "poke_145": "Zapdos", - "poke_146": "Moltres", - "poke_147": "Dratini", - "poke_148": "Dragonair", - "poke_149": "Dragonite", - "poke_150": "Mewtwo", - "poke_151": "Mew", - "poke_152": "Chikorita", - "poke_153": "Bayleef", - "poke_154": "Meganium", - "poke_155": "Cyndaquil", - "poke_156": "Quilava", - "poke_157": "Typhlosion", - "poke_158": "Totodile", - "poke_159": "Croconaw", - "poke_160": "Feraligatr", - "poke_161": "Sentret", - "poke_162": "Furret", - "poke_163": "Hoothoot", - "poke_164": "Noctowl", - "poke_165": "Ledyba", - "poke_166": "Ledian", - "poke_167": "Spinarak", - "poke_168": "Ariados", - "poke_169": "Crobat", - "poke_170": "Chinchou", - "poke_171": "Lanturn", - "poke_172": "Pichu", - "poke_173": "Cleffa", - "poke_174": "Igglybuff", - "poke_175": "Togepi", - "poke_176": "Togetic", - "poke_177": "Natu", - "poke_178": "Xatu", - "poke_179": "Mareep", - "poke_180": "Flaaffy", - "poke_181": "Ampharos", - "poke_182": "Bellossom", - "poke_183": "Marill", - "poke_184": "Azumarill", - "poke_185": "Sudowoodo", - "poke_186": "Politoed", - "poke_187": "Hoppip", - "poke_188": "Skiploom", - "poke_189": "Jumpluff", - "poke_190": "Aipom", - "poke_191": "Sunkern", - "poke_192": "Sunflora", - "poke_193": "Yanma", - "poke_194": "Wooper", - "poke_195": "Quagsire", - "poke_196": "Espeon", - "poke_197": "Umbreon", - "poke_198": "Murkrow", - "poke_199": "Slowking", - "poke_200": "Misdreavus", - "poke_201": "Unown", - "poke_202": "Wobbuffet", - "poke_203": "Girafarig", - "poke_204": "Pineco", - "poke_205": "Forretress", - "poke_206": "Dunsparce", - "poke_207": "Gligar", - "poke_208": "Steelix", - "poke_209": "Snubbull", - "poke_210": "Granbull", - "poke_211": "Qwilfish", - "poke_212": "Scizor", - "poke_213": "Shuckle", - "poke_214": "Heracross", - "poke_215": "Sneasel", - "poke_216": "Teddiursa", - "poke_217": "Ursaring", - "poke_218": "Slugma", - "poke_219": "Magcargo", - "poke_220": "Swinub", - "poke_221": "Piloswine", - "poke_222": "Corsola", - "poke_223": "Remoraid", - "poke_224": "Octillery", - "poke_225": "Delibird", - "poke_226": "Mantine", - "poke_227": "Skarmory", - "poke_228": "Houndour", - "poke_229": "Houndoom", - "poke_230": "Kingdra", - "poke_231": "Phanpy", - "poke_232": "Donphan", - "poke_233": "Porygon2", - "poke_234": "Stantler", - "poke_235": "Smeargle", - "poke_236": "Tyrogue", - "poke_237": "Hitmontop", - "poke_238": "Smoochum", - "poke_239": "Elekid", - "poke_240": "Magby", - "poke_241": "Miltank", - "poke_242": "Blissey", - "poke_243": "Raikou", - "poke_244": "Entei", - "poke_245": "Suicune", - "poke_246": "Larvitar", - "poke_247": "Pupitar", - "poke_248": "Tyranitar", - "poke_249": "Lugia", - "poke_250": "Ho-Oh", - "poke_251": "Celebi", - "poke_252": "Treecko", - "poke_253": "Grovyle", - "poke_254": "Sceptile", - "poke_255": "Torchic", - "poke_256": "Combusken", - "poke_257": "Blaziken", - "poke_258": "Mudkip", - "poke_259": "Marshtomp", - "poke_260": "Swampert", - "poke_261": "Poochyena", - "poke_262": "Mightyena", - "poke_263": "Zigzagoon", - "poke_264": "Linoone", - "poke_265": "Wurmple", - "poke_266": "Silcoon", - "poke_267": "Beautifly", - "poke_268": "Cascoon", - "poke_269": "Dustox", - "poke_270": "Lotad", - "poke_271": "Lombre", - "poke_272": "Ludicolo", - "poke_273": "Seedot", - "poke_274": "Nuzleaf", - "poke_275": "Shiftry", - "poke_276": "Taillow", - "poke_277": "Swellow", - "poke_278": "Wingull", - "poke_279": "Pelipper", - "poke_280": "Ralts", - "poke_281": "Kirlia", - "poke_282": "Gardevoir", - "poke_283": "Surskit", - "poke_284": "Masquerain", - "poke_285": "Shroomish", - "poke_286": "Breloom", - "poke_287": "Slakoth", - "poke_288": "Vigoroth", - "poke_289": "Slaking", - "poke_290": "Nincada", - "poke_291": "Ninjask", - "poke_292": "Shedinja", - "poke_293": "Whismur", - "poke_294": "Loudred", - "poke_295": "Exploud", - "poke_296": "Makuhita", - "poke_297": "Hariyama", - "poke_298": "Azurill", - "poke_299": "Nosepass", - "poke_300": "Skitty", - "poke_301": "Delcatty", - "poke_302": "Sableye", - "poke_303": "Mawile", - "poke_304": "Aron", - "poke_305": "Lairon", - "poke_306": "Aggron", - "poke_307": "Meditite", - "poke_308": "Medicham", - "poke_309": "Electrike", - "poke_310": "Manectric", - "poke_311": "Plusle", - "poke_312": "Minun", - "poke_313": "Volbeat", - "poke_314": "Illumise", - "poke_315": "Roselia", - "poke_316": "Gulpin", - "poke_317": "Swalot", - "poke_318": "Carvanha", - "poke_319": "Sharpedo", - "poke_320": "Wailmer", - "poke_321": "Wailord", - "poke_322": "Numel", - "poke_323": "Camerupt", - "poke_324": "Torkoal", - "poke_325": "Spoink", - "poke_326": "Grumpig", - "poke_327": "Spinda", - "poke_328": "Trapinch", - "poke_329": "Vibrava", - "poke_330": "Flygon", - "poke_331": "Cacnea", - "poke_332": "Cacturne", - "poke_333": "Swablu", - "poke_334": "Altaria", - "poke_335": "Zangoose", - "poke_336": "Seviper", - "poke_337": "Lunatone", - "poke_338": "Solrock", - "poke_339": "Barboach", - "poke_340": "Whiscash", - "poke_341": "Corphish", - "poke_342": "Crawdaunt", - "poke_343": "Baltoy", - "poke_344": "Claydol", - "poke_345": "Lileep", - "poke_346": "Cradily", - "poke_347": "Anorith", - "poke_348": "Armaldo", - "poke_349": "Feebas", - "poke_350": "Milotic", - "poke_351": "Castform", - "poke_352": "Kecleon", - "poke_353": "Shuppet", - "poke_354": "Banette", - "poke_355": "Duskull", - "poke_356": "Dusclops", - "poke_357": "Tropius", - "poke_358": "Chimecho", - "poke_359": "Absol", - "poke_360": "Wynaut", - "poke_361": "Snorunt", - "poke_362": "Glalie", - "poke_363": "Spheal", - "poke_364": "Sealeo", - "poke_365": "Walrein", - "poke_366": "Clamperl", - "poke_367": "Huntail", - "poke_368": "Gorebyss", - "poke_369": "Relicanth", - "poke_370": "Luvdisc", - "poke_371": "Bagon", - "poke_372": "Shelgon", - "poke_373": "Salamence", - "poke_374": "Beldum", - "poke_375": "Metang", - "poke_376": "Metagross", - "poke_377": "Regirock", - "poke_378": "Regice", - "poke_379": "Registeel", - "poke_380": "Latias", - "poke_381": "Latios", - "poke_382": "Kyogre", - "poke_383": "Groudon", - "poke_384": "Rayquaza", - "poke_385": "Jirachi", - "poke_386": "Deoxys", - "poke_387": "Turtwig", - "poke_388": "Grotle", - "poke_389": "Torterra", - "poke_390": "Chimchar", - "poke_391": "Monferno", - "poke_392": "Infernape", - "poke_393": "Piplup", - "poke_394": "Prinplup", - "poke_395": "Empoleon", - "poke_396": "Starly", - "poke_397": "Staravia", - "poke_398": "Staraptor", - "poke_399": "Bidoof", - "poke_400": "Bibarel", - "poke_401": "Kricketot", - "poke_402": "Kricketune", - "poke_403": "Shinx", - "poke_404": "Luxio", - "poke_405": "Luxray", - "poke_406": "Budew", - "poke_407": "Roserade", - "poke_408": "Cranidos", - "poke_409": "Rampardos", - "poke_410": "Shieldon", - "poke_411": "Bastiodon", - "poke_412": "Burmy", - "poke_413": "Wormadam", - "poke_414": "Mothim", - "poke_415": "Combee", - "poke_416": "Vespiquen", - "poke_417": "Pachirisu", - "poke_418": "Buizel", - "poke_419": "Floatzel", - "poke_420": "Cherubi", - "poke_421": "Cherrim", - "poke_422": "Shellos", - "poke_423": "Gastrodon", - "poke_424": "Ambipom", - "poke_425": "Drifloon", - "poke_426": "Drifblim", - "poke_427": "Buneary", - "poke_428": "Lopunny", - "poke_429": "Mismagius", - "poke_430": "Honchkrow", - "poke_431": "Glameow", - "poke_432": "Purugly", - "poke_433": "Chingling", - "poke_434": "Stunky", - "poke_435": "Skuntank", - "poke_436": "Bronzor", - "poke_437": "Bronzong", - "poke_438": "Bonsly", - "poke_439": "Mime Jr.", - "poke_440": "Happiny", - "poke_441": "Chatot", - "poke_442": "Spiritomb", - "poke_443": "Gible", - "poke_444": "Gabite", - "poke_445": "Garchomp", - "poke_446": "Munchlax", - "poke_447": "Riolu", - "poke_448": "Lucario", - "poke_449": "Hippopotas", - "poke_450": "Hippowdon", - "poke_451": "Skorupi", - "poke_452": "Drapion", - "poke_453": "Croagunk", - "poke_454": "Toxicroak", - "poke_455": "Carnivine", - "poke_456": "Finneon", - "poke_457": "Lumineon", - "poke_458": "Mantyke", - "poke_459": "Snover", - "poke_460": "Abomasnow", - "poke_461": "Weavile", - "poke_462": "Magnezone", - "poke_463": "Lickilicky", - "poke_464": "Rhyperior", - "poke_465": "Tangrowth", - "poke_466": "Electivire", - "poke_467": "Magmortar", - "poke_468": "Togekiss", - "poke_469": "Yanmega", - "poke_470": "Leafeon", - "poke_471": "Glaceon", - "poke_472": "Gliscor", - "poke_473": "Mamoswine", - "poke_474": "Porygon-Z", - "poke_475": "Gallade", - "poke_476": "Probopass", - "poke_477": "Dusknoir", - "poke_478": "Froslass", - "poke_479": "Rotom", - "poke_480": "Uxie", - "poke_481": "Mesprit", - "poke_482": "Azelf", - "poke_483": "Dialga", - "poke_484": "Palkia", - "poke_485": "Heatran", - "poke_486": "Regigigas", - "poke_487": "Giratina", - "poke_488": "Cresselia", - "poke_489": "Phione", - "poke_490": "Manaphy", - "poke_491": "Darkrai", - "poke_492": "Shaymin", - "poke_493": "Arceus", - "poke_494": "Victini", - "poke_495": "Snivy", - "poke_496": "Servine", - "poke_497": "Serperior", - "poke_498": "Tepig", - "poke_499": "Pignite", - "poke_500": "Emboar", - "poke_501": "Oshawott", - "poke_502": "Dewott", - "poke_503": "Samurott", - "poke_504": "Patrat", - "poke_505": "Watchog", - "poke_506": "Lillipup", - "poke_507": "Herdier", - "poke_508": "Stoutland", - "poke_509": "Purrloin", - "poke_510": "Liepard", - "poke_511": "Pansage", - "poke_512": "Simisage", - "poke_513": "Pansear", - "poke_514": "Simisear", - "poke_515": "Panpour", - "poke_516": "Simipour", - "poke_517": "Munna", - "poke_518": "Musharna", - "poke_519": "Pidove", - "poke_520": "Tranquill", - "poke_521": "Unfezant", - "poke_522": "Blitzle", - "poke_523": "Zebstrika", - "poke_524": "Roggenrola", - "poke_525": "Boldore", - "poke_526": "Gigalith", - "poke_527": "Woobat", - "poke_528": "Swoobat", - "poke_529": "Drilbur", - "poke_530": "Excadrill", - "poke_531": "Audino", - "poke_532": "Timburr", - "poke_533": "Gurdurr", - "poke_534": "Conkeldurr", - "poke_535": "Tympole", - "poke_536": "Palpitoad", - "poke_537": "Seismitoad", - "poke_538": "Throh", - "poke_539": "Sawk", - "poke_540": "Sewaddle", - "poke_541": "Swadloon", - "poke_542": "Leavanny", - "poke_543": "Venipede", - "poke_544": "Whirlipede", - "poke_545": "Scolipede", - "poke_546": "Cottonee", - "poke_547": "Whimsicott", - "poke_548": "Petilil", - "poke_549": "Lilligant", - "poke_550": "Basculin", - "poke_551": "Sandile", - "poke_552": "Krokorok", - "poke_553": "Krookodile", - "poke_554": "Darumaka", - "poke_555": "Darmanitan", - "poke_556": "Maractus", - "poke_557": "Dwebble", - "poke_558": "Crustle", - "poke_559": "Scraggy", - "poke_560": "Scrafty", - "poke_561": "Sigilyph", - "poke_562": "Yamask", - "poke_563": "Cofagrigus", - "poke_564": "Tirtouga", - "poke_565": "Carracosta", - "poke_566": "Archen", - "poke_567": "Archeops", - "poke_568": "Trubbish", - "poke_569": "Garbodor", - "poke_570": "Zorua", - "poke_571": "Zoroark", - "poke_572": "Minccino", - "poke_573": "Cinccino", - "poke_574": "Gothita", - "poke_575": "Gothorita", - "poke_576": "Gothitelle", - "poke_577": "Solosis", - "poke_578": "Duosion", - "poke_579": "Reuniclus", - "poke_580": "Ducklett", - "poke_581": "Swanna", - "poke_582": "Vanillite", - "poke_583": "Vanillish", - "poke_584": "Vanilluxe", - "poke_585": "Deerling", - "poke_586": "Sawsbuck", - "poke_587": "Emolga", - "poke_588": "Karrablast", - "poke_589": "Escavalier", - "poke_590": "Foongus", - "poke_591": "Amoonguss", - "poke_592": "Frillish", - "poke_593": "Jellicent", - "poke_594": "Alomomola", - "poke_595": "Joltik", - "poke_596": "Galvantula", - "poke_597": "Ferroseed", - "poke_598": "Ferrothorn", - "poke_599": "Klink", - "poke_600": "Klang", - "poke_601": "Klinklang", - "poke_602": "Tynamo", - "poke_603": "Eelektrik", - "poke_604": "Eelektross", - "poke_605": "Elgyem", - "poke_606": "Beheeyem", - "poke_607": "Litwick", - "poke_608": "Lampent", - "poke_609": "Chandelure", - "poke_610": "Axew", - "poke_611": "Fraxure", - "poke_612": "Haxorus", - "poke_613": "Cubchoo", - "poke_614": "Beartic", - "poke_615": "Cryogonal", - "poke_616": "Shelmet", - "poke_617": "Accelgor", - "poke_618": "Stunfisk", - "poke_619": "Mienfoo", - "poke_620": "Mienshao", - "poke_621": "Druddigon", - "poke_622": "Golett", - "poke_623": "Golurk", - "poke_624": "Pawniard", - "poke_625": "Bisharp", - "poke_626": "Bouffalant", - "poke_627": "Rufflet", - "poke_628": "Braviary", - "poke_629": "Vullaby", - "poke_630": "Mandibuzz", - "poke_631": "Heatmor", - "poke_632": "Durant", - "poke_633": "Deino", - "poke_634": "Zweilous", - "poke_635": "Hydreigon", - "poke_636": "Larvesta", - "poke_637": "Volcarona", - "poke_638": "Cobalion", - "poke_639": "Terrakion", - "poke_640": "Virizion", - "poke_641": "Tornadus", - "poke_642": "Thundurus", - "poke_643": "Reshiram", - "poke_644": "Zekrom", - "poke_645": "Landorus", - "poke_646": "Kyurem", - "poke_647": "Keldeo", - "poke_648": "Meloetta", - "poke_649": "Genesect", - "poke_650": "Chespin", - "poke_651": "Quilladin", - "poke_652": "Chesnaught", - "poke_653": "Fennekin", - "poke_654": "Braixen", - "poke_655": "Delphox", - "poke_656": "Froakie", - "poke_657": "Frogadier", - "poke_658": "Greninja", - "poke_659": "Bunnelby", - "poke_660": "Diggersby", - "poke_661": "Fletchling", - "poke_662": "Fletchinder", - "poke_663": "Talonflame", - "poke_664": "Scatterbug", - "poke_665": "Spewpa", - "poke_666": "Vivillon", - "poke_667": "Litleo", - "poke_668": "Pyroar", - "poke_669": "Flabébé", - "poke_670": "Floette", - "poke_671": "Florges", - "poke_672": "Skiddo", - "poke_673": "Gogoat", - "poke_674": "Pancham", - "poke_675": "Pangoro", - "poke_676": "Furfrou", - "poke_677": "Espurr", - "poke_678": "Meowstic", - "poke_679": "Honedge", - "poke_680": "Doublade", - "poke_681": "Aegislash", - "poke_682": "Spritzee", - "poke_683": "Aromatisse", - "poke_684": "Swirlix", - "poke_685": "Slurpuff", - "poke_686": "Inkay", - "poke_687": "Malamar", - "poke_688": "Binacle", - "poke_689": "Barbaracle", - "poke_690": "Skrelp", - "poke_691": "Dragalge", - "poke_692": "Clauncher", - "poke_693": "Clawitzer", - "poke_694": "Helioptile", - "poke_695": "Heliolisk", - "poke_696": "Tyrunt", - "poke_697": "Tyrantrum", - "poke_698": "Amaura", - "poke_699": "Aurorus", - "poke_700": "Sylveon", - "poke_701": "Hawlucha", - "poke_702": "Dedenne", - "poke_703": "Carbink", - "poke_704": "Goomy", - "poke_705": "Sliggoo", - "poke_706": "Goodra", - "poke_707": "Klefki", - "poke_708": "Phantump", - "poke_709": "Trevenant", - "poke_710": "Pumpkaboo", - "poke_711": "Gourgeist", - "poke_712": "Bergmite", - "poke_713": "Avalugg", - "poke_714": "Noibat", - "poke_715": "Noivern", - "poke_716": "Xerneas", - "poke_717": "Yveltal", - "poke_718": "Zygarde", - "poke_719": "Diancie", - "poke_720": "Hoopa", - "poke_721": "Volcanion", - "poke_722": "Rowlet", - "poke_723": "Dartrix", - "poke_724": "Decidueye", - "poke_725": "Litten", - "poke_726": "Torracat", - "poke_727": "Incineroar", - "poke_728": "Popplio", - "poke_729": "Brionne", - "poke_730": "Primarina", - "poke_731": "Pikipek", - "poke_732": "Trumbeak", - "poke_733": "Toucannon", - "poke_734": "Yungoos", - "poke_735": "Gumshoos", - "poke_736": "Grubbin", - "poke_737": "Charjabug", - "poke_738": "Vikavolt", - "poke_739": "Crabrawler", - "poke_740": "Crabominable", - "poke_741": "Oricorio", - "poke_742": "Cutiefly", - "poke_743": "Ribombee", - "poke_744": "Rockruff", - "poke_745": "Lycanroc", - "poke_746": "Wishiwashi", - "poke_747": "Mareanie", - "poke_748": "Toxapex", - "poke_749": "Mudbray", - "poke_750": "Mudsdale", - "poke_751": "Dewpider", - "poke_752": "Araquanid", - "poke_753": "Fomantis", - "poke_754": "Lurantis", - "poke_755": "Morelull", - "poke_756": "Shiinotic", - "poke_757": "Salandit", - "poke_758": "Salazzle", - "poke_759": "Stufful", - "poke_760": "Bewear", - "poke_761": "Bounsweet", - "poke_762": "Steenee", - "poke_763": "Tsareena", - "poke_764": "Comfey", - "poke_765": "Oranguru", - "poke_766": "Passimian", - "poke_767": "Wimpod", - "poke_768": "Golisopod", - "poke_769": "Sandygast", - "poke_770": "Palossand", - "poke_771": "Pyukumuku", - "poke_772": "Type: Null", - "poke_773": "Silvally", - "poke_774": "Minior", - "poke_775": "Komala", - "poke_776": "Turtonator", - "poke_777": "Togedemaru", - "poke_778": "Mimikyu", - "poke_779": "Bruxish", - "poke_780": "Drampa", - "poke_781": "Dhelmise", - "poke_782": "Jangmo-o", - "poke_783": "Hakamo-o", - "poke_784": "Kommo-o", - "poke_785": "Tapu Koko", - "poke_786": "Tapu Lele", - "poke_787": "Tapu Bulu", - "poke_788": "Tapu Fini", - "poke_789": "Cosmog", - "poke_790": "Cosmoem", - "poke_791": "Solgaleo", - "poke_792": "Lunala", - "poke_793": "Nihilego", - "poke_794": "Buzzwole", - "poke_795": "Pheromosa", - "poke_796": "Xurkitree", - "poke_797": "Celesteela", - "poke_798": "Kartana", - "poke_799": "Guzzlord", - "poke_800": "Necrozma", - "poke_801": "Magearna", - "poke_802": "Marshadow", - "poke_808": "Meltan", - "poke_809": "Melmetal", - "poke_862": "Obstagoon", - "poke_863": "Perrserker", - "poke_865": "Sirfetch’d", - "form_1": "A", - "form_2": "B", - "form_3": "C", - "form_4": "D", - "form_5": "E", - "form_6": "F", - "form_7": "G", - "form_8": "H", - "form_9": "I", - "form_10": "J", - "form_11": "K", - "form_12": "L", - "form_13": "M", - "form_14": "N", - "form_15": "O", - "form_16": "P", - "form_17": "Q", - "form_18": "R", - "form_19": "S", - "form_20": "T", - "form_21": "U", - "form_22": "V", - "form_23": "W", - "form_24": "X", - "form_25": "Y", - "form_26": "Z", - "form_27": "!", - "form_28": "?", - "form_29": "Normal", - "form_30": "Sunny", - "form_31": "Rainy", - "form_32": "Snowy", - "form_33": "Normal", - "form_34": "Attack", - "form_35": "Defense", - "form_36": "Speed", - "form_37": "00", - "form_38": "01", - "form_39": "02", - "form_40": "03", - "form_41": "04", - "form_42": "05", - "form_43": "06", - "form_44": "07", - "form_45": "Normal", - "form_46": "Alola", - "form_47": "Normal", - "form_48": "Alola", - "form_49": "Normal", - "form_50": "Alola", - "form_51": "Normal", - "form_52": "Alola", - "form_53": "Normal", - "form_54": "Alola", - "form_55": "Normal", - "form_56": "Alola", - "form_57": "Normal", - "form_58": "Alola", - "form_59": "Normal", - "form_60": "Alola", - "form_61": "Normal", - "form_62": "Alola", - "form_63": "Normal", - "form_64": "Alola", - "form_65": "Normal", - "form_66": "Alola", - "form_67": "Normal", - "form_68": "Alola", - "form_69": "Normal", - "form_70": "Alola", - "form_71": "Normal", - "form_72": "Alola", - "form_73": "Normal", - "form_74": "Alola", - "form_75": "Normal", - "form_76": "Alola", - "form_77": "Normal", - "form_78": "Alola", - "form_79": "Normal", - "form_80": "Alola", - "form_81": "Normal", - "form_82": "Frost", - "form_83": "Fan", - "form_84": "Mow", - "form_85": "Wash", - "form_86": "Heat", - "form_87": "Plant", - "form_88": "Sandy", - "form_89": "Trash", - "form_90": "Altered", - "form_91": "Origin", - "form_92": "Sky", - "form_93": "Land", - "form_94": "Overcast", - "form_95": "Sunny", - "form_96": "West Sea", - "form_97": "East Sea", - "form_98": "West Sea", - "form_99": "East Sea", - "form_100": "Normal", - "form_101": "Fighting", - "form_102": "Flying", - "form_103": "Poison", - "form_104": "Ground", - "form_105": "Rock", - "form_106": "Bug", - "form_107": "Ghost", - "form_108": "Steel", - "form_109": "Fire", - "form_110": "Water", - "form_111": "Grass", - "form_112": "Electric", - "form_113": "Psychic", - "form_114": "Ice", - "form_115": "Dragon", - "form_116": "Dark", - "form_117": "Fairy", - "form_118": "Plant", - "form_119": "Sandy", - "form_120": "Trash", - "form_121": "08", - "form_122": "09", - "form_123": "10", - "form_124": "11", - "form_125": "12", - "form_126": "13", - "form_127": "14", - "form_128": "15", - "form_129": "16", - "form_130": "17", - "form_131": "18", - "form_132": "19", - "form_133": "Armored", - "form_135": "Normal", - "form_136": "Red Striped", - "form_137": "Blue Striped", - "form_138": "Standard", - "form_139": "Zen", - "form_140": "Incarnate", - "form_141": "Therian", - "form_142": "Incarnate", - "form_143": "Therian", - "form_144": "Incarnate", - "form_145": "Therian", - "form_146": "Normal", - "form_147": "Black", - "form_148": "White", - "form_149": "Ordinary", - "form_150": "Resolute", - "form_151": "Aria", - "form_152": "Pirouette", - "form_153": "Shadow", - "form_154": "Purified", - "form_155": "Shadow", - "form_156": "Purified", - "form_157": "Normal", - "form_158": "Shadow", - "form_159": "Purified", - "form_160": "Normal", - "form_161": "Shadow", - "form_162": "Purified", - "form_163": "Normal", - "form_164": "Shadow", - "form_165": "Purified", - "form_166": "Normal", - "form_167": "Shadow", - "form_168": "Purified", - "form_169": "Normal", - "form_170": "Shadow", - "form_171": "Purified", - "form_172": "Normal", - "form_173": "Shadow", - "form_174": "Purified", - "form_175": "Normal", - "form_176": "Shadow", - "form_177": "Purified", - "form_178": "Normal", - "form_179": "Shadow", - "form_180": "Purified", - "form_181": "Normal", - "form_182": "Shadow", - "form_183": "Purified", - "form_184": "Normal", - "form_185": "Shadow", - "form_186": "Purified", - "form_187": "Normal", - "form_188": "Shadow", - "form_189": "Purified", - "form_190": "Normal", - "form_191": "Shadow", - "form_192": "Purified", - "form_193": "Normal", - "form_194": "Shadow", - "form_195": "Purified", - "form_196": "Normal", - "form_197": "Shadow", - "form_198": "Purified", - "form_199": "Normal", - "form_200": "Shadow", - "form_201": "Purified", - "form_202": "Normal", - "form_203": "Shadow", - "form_204": "Purified", - "form_205": "Normal", - "form_206": "Shadow", - "form_207": "Purified", - "form_208": "Normal", - "form_209": "Shadow", - "form_210": "Purified", - "form_211": "Normal", - "form_212": "Shadow", - "form_213": "Purified", - "form_214": "Normal", - "form_215": "Shadow", - "form_216": "Purified", - "form_217": "Normal", - "form_218": "Shadow", - "form_219": "Purified", - "form_220": "Shadow", - "form_221": "Purified", - "form_222": "Shadow", - "form_223": "Purified", - "form_224": "Normal", - "form_225": "Shadow", - "form_226": "Purified", - "form_227": "Shadow", - "form_228": "Purified", - "form_229": "Normal", - "form_230": "Shadow", - "form_231": "Purified", - "form_232": "Normal", - "form_233": "Shadow", - "form_234": "Purified", - "form_235": "Normal", - "form_236": "Shadow", - "form_237": "Purified", - "form_238": "Normal", - "form_239": "Shadow", - "form_240": "Purified", - "form_241": "Normal", - "form_242": "Shadow", - "form_243": "Purified", - "form_244": "Normal", - "form_245": "Shadow", - "form_246": "Purified", - "form_247": "Normal", - "form_248": "Shadow", - "form_249": "Purified", - "form_250": "Normal", - "form_251": "Shadow", - "form_252": "Purified", - "form_253": "Normal", - "form_254": "Shadow", - "form_255": "Purified", - "form_256": "Normal", - "form_257": "Shadow", - "form_258": "Purified", - "form_259": "Normal", - "form_260": "Shadow", - "form_261": "Purified", - "form_262": "Normal", - "form_263": "Shadow", - "form_264": "Purified", - "form_265": "Normal", - "form_266": "Shadow", - "form_267": "Purified", - "form_268": "Normal", - "form_269": "Shadow", - "form_270": "Purified", - "form_271": "Normal", - "form_272": "Shadow", - "form_273": "Purified", - "form_274": "Normal", - "form_275": "Shadow", - "form_276": "Purified", - "form_277": "Normal", - "form_278": "Shadow", - "form_279": "Purified", - "form_280": "Normal", - "form_281": "Shadow", - "form_282": "Purified", - "form_283": "Normal", - "form_284": "Shadow", - "form_285": "Purified", - "form_286": "Normal", - "form_287": "Shadow", - "form_288": "Purified", - "form_289": "Normal", - "form_290": "Shadow", - "form_291": "Purified", - "form_292": "Normal", - "form_293": "Shadow", - "form_294": "Purified", - "form_295": "Normal", - "form_296": "Shadow", - "form_297": "Purified", - "form_298": "Normal", - "form_299": "Shadow", - "form_300": "Purified", - "form_301": "Normal", - "form_302": "Shadow", - "form_303": "Purified", - "form_304": "Normal", - "form_305": "Shadow", - "form_306": "Purified", - "form_307": "Normal", - "form_308": "Shadow", - "form_309": "Purified", - "form_310": "Normal", - "form_311": "Shadow", - "form_312": "Purified", - "form_313": "Normal", - "form_314": "Shadow", - "form_315": "Purified", - "form_316": "Normal", - "form_317": "Shadow", - "form_318": "Purified", - "form_319": "Normal", - "form_320": "Shadow", - "form_321": "Purified", - "form_322": "Normal", - "form_323": "Shadow", - "form_324": "Purified", - "form_585": "Spring", - "form_586": "Summer", - "form_587": "Autumn", - "form_588": "Winter", - "form_589": "Spring", - "form_590": "Summer", - "form_591": "Autumn", - "form_592": "Winter", - "form_593": "Normal", - "form_594": "Shock", - "form_595": "Burn", - "form_596": "Chill", - "form_597": "Douse", - "form_598": "Normal", - "form_599": "Noevolve", - "form_600": "Normal", - "form_601": "Noevolve", - "form_602": "Normal", - "form_603": "Noevolve", - "form_604": "Noevolve", - "form_605": "Noevolve", - "form_606": "Noevolve", - "form_607": "Noevolve", - "form_608": "Noevolve", - "form_609": "Noevolve", - "form_610": "Normal", - "form_611": "Shadow", - "form_612": "Purified", - "form_613": "Normal", - "form_614": "Shadow", - "form_615": "Purified", - "form_616": "Normal", - "form_617": "Shadow", - "form_618": "Purified", - "form_619": "Normal", - "form_620": "Shadow", - "form_621": "Purified", - "form_622": "Normal", - "form_623": "Shadow", - "form_624": "Purified", - "form_625": "Normal", - "form_626": "Shadow", - "form_627": "Purified", - "form_628": "Normal", - "form_629": "Shadow", - "form_630": "Purified", - "form_631": "Normal", - "form_632": "Shadow", - "form_633": "Purified", - "form_634": "Normal", - "form_635": "Shadow", - "form_636": "Purified", - "form_637": "Normal", - "form_638": "Shadow", - "form_639": "Purified", - "form_640": "Normal", - "form_641": "Shadow", - "form_642": "Purified", - "form_643": "Normal", - "form_644": "Shadow", - "form_645": "Purified", - "form_646": "Normal", - "form_647": "Shadow", - "form_648": "Purified", - "form_649": "Normal", - "form_650": "Shadow", - "form_651": "Purified", - "form_652": "Normal", - "form_653": "Shadow", - "form_654": "Purified", - "form_655": "Normal", - "form_656": "Shadow", - "form_657": "Purified", - "form_658": "Normal", - "form_659": "Shadow", - "form_660": "Purified", - "form_661": "Normal", - "form_662": "Shadow", - "form_663": "Purified", - "form_664": "Normal", - "form_665": "Shadow", - "form_666": "Purified", - "form_667": "Normal", - "form_668": "Shadow", - "form_669": "Purified", - "form_670": "Normal", - "form_671": "Shadow", - "form_672": "Purified", - "form_673": "Shadow", - "form_674": "Purified", - "form_675": "Shadow", - "form_676": "Purified", - "form_677": "Normal", - "form_678": "Shadow", - "form_679": "Purified", - "form_680": "Normal", - "form_681": "Shadow", - "form_682": "Purified", - "form_683": "Normal", - "form_684": "Shadow", - "form_685": "Purified", - "form_686": "Shadow", - "form_687": "Purified", - "form_688": "Normal", - "form_689": "Shadow", - "form_690": "Purified", - "form_691": "Normal", - "form_692": "Shadow", - "form_693": "Purified", - "form_694": "Normal", - "form_695": "Shadow", - "form_696": "Purified", - "form_697": "Normal", - "form_698": "Shadow", - "form_699": "Purified", - "form_700": "Normal", - "form_701": "Shadow", - "form_702": "Purified", - "form_703": "Normal", - "form_704": "Shadow", - "form_705": "Purified", - "form_706": "Normal", - "form_707": "Shadow", - "form_708": "Purified", - "form_709": "Shadow", - "form_710": "Purified", - "form_711": "Shadow", - "form_712": "Purified", - "form_713": "Normal", - "form_714": "Shadow", - "form_715": "Purified", - "form_716": "Normal", - "form_717": "Shadow", - "form_718": "Purified", - "form_719": "Normal", - "form_720": "Shadow", - "form_721": "Purified", - "form_722": "Normal", - "form_723": "Shadow", - "form_724": "Purified", - "form_725": "Shadow", - "form_726": "Purified", - "form_727": "Shadow", - "form_728": "Purified", - "form_729": "Normal", - "form_730": "Shadow", - "form_731": "Purified", - "form_732": "Shadow", - "form_733": "Purified", - "form_734": "Normal", - "form_735": "Shadow", - "form_736": "Purified", - "form_737": "Normal", - "form_738": "Shadow", - "form_739": "Purified", - "form_740": "Normal", - "form_741": "Shadow", - "form_742": "Purified", - "form_743": "Normal", - "form_744": "Shadow", - "form_745": "Purified", - "form_746": "Normal", - "form_747": "Shadow", - "form_748": "Purified", - "form_749": "Normal", - "form_750": "Shadow", - "form_751": "Purified", - "form_752": "Normal", - "form_753": "Shadow", - "form_754": "Purified", - "form_755": "Normal", - "form_756": "Shadow", - "form_757": "Purified", - "form_758": "Normal", - "form_759": "Shadow", - "form_760": "Purified", - "form_761": "Normal", - "form_762": "Shadow", - "form_763": "Purified", - "form_764": "Normal", - "form_765": "Shadow", - "form_766": "Purified", - "form_767": "Normal", - "form_768": "Shadow", - "form_769": "Purified", - "form_770": "Normal", - "form_771": "Shadow", - "form_772": "Purified", - "form_773": "Normal", - "form_774": "Shadow", - "form_775": "Purified", - "form_776": "Normal", - "form_777": "Shadow", - "form_778": "Purified", - "form_779": "Normal", - "form_780": "Shadow", - "form_781": "Purified", - "form_782": "Normal", - "form_783": "Shadow", - "form_784": "Purified", - "form_785": "Normal", - "form_786": "Shadow", - "form_787": "Purified", - "form_788": "Normal", - "form_789": "Shadow", - "form_790": "Purified", - "form_791": "Normal", - "form_792": "Shadow", - "form_793": "Purified", - "form_794": "Normal", - "form_795": "Shadow", - "form_796": "Purified", - "form_797": "Normal", - "form_798": "Shadow", - "form_799": "Purified", - "form_800": "Normal", - "form_801": "Shadow", - "form_802": "Purified", - "form_803": "Normal", - "form_804": "Shadow", - "form_805": "Purified", - "form_806": "Normal", - "form_807": "Shadow", - "form_808": "Purified", - "form_809": "Normal", - "form_810": "Shadow", - "form_811": "Purified", - "form_812": "Normal", - "form_813": "Shadow", - "form_814": "Purified", - "form_815": "Normal", - "form_816": "Shadow", - "form_817": "Purified", - "form_818": "Normal", - "form_819": "Shadow", - "form_820": "Purified", - "form_821": "Normal", - "form_822": "Shadow", - "form_823": "Purified", - "form_824": "Normal", - "form_825": "Shadow", - "form_826": "Purified", - "form_827": "Normal", - "form_828": "Shadow", - "form_829": "Purified", - "form_830": "Normal", - "form_831": "Shadow", - "form_832": "Purified", - "form_833": "Normal", - "form_834": "Shadow", - "form_835": "Purified", - "form_836": "Normal", - "form_837": "Shadow", - "form_838": "Purified", - "form_839": "Normal", - "form_840": "Shadow", - "form_841": "Purified", - "form_842": "Shadow", - "form_843": "Purified", - "form_844": "Shadow", - "form_845": "Purified", - "form_846": "Normal", - "form_847": "Shadow", - "form_848": "Purified", - "form_849": "Normal", - "form_850": "Shadow", - "form_851": "Purified", - "form_852": "Normal", - "form_853": "Shadow", - "form_854": "Purified", - "form_855": "Normal", - "form_856": "Shadow", - "form_857": "Purified", - "form_858": "Normal", - "form_859": "Shadow", - "form_860": "Purified", - "form_861": "Normal", - "form_862": "Shadow", - "form_863": "Purified", - "form_864": "Normal", - "form_865": "Shadow", - "form_866": "Purified", - "form_867": "Normal", - "form_868": "Shadow", - "form_869": "Purified", - "form_870": "Normal", - "form_871": "Shadow", - "form_872": "Purified", - "form_873": "Normal", - "form_874": "Shadow", - "form_875": "Purified", - "form_876": "Normal", - "form_877": "Shadow", - "form_878": "Purified", - "form_879": "Normal", - "form_880": "Shadow", - "form_881": "Purified", - "form_882": "Shadow", - "form_883": "Purified", - "form_884": "Shadow", - "form_885": "Purified", - "form_886": "Shadow", - "form_887": "Purified", - "form_888": "Normal", - "form_889": "Shadow", - "form_890": "Purified", - "form_891": "Normal", - "form_892": "Shadow", - "form_893": "Purified", - "form_894": "Fall 2019", - "form_895": "Fall 2019", - "form_896": "Fall 2019", - "form_897": "Fall 2019", - "form_898": "Normal", - "form_899": "Shadow", - "form_900": "Purified", - "form_901": "Vs 2019", - "form_902": "Normal", - "form_903": "Shadow", - "form_904": "Purified", - "form_905": "Normal", - "form_906": "Shadow", - "form_907": "Purified", - "form_908": "Normal", - "form_909": "Shadow", - "form_910": "Purified", - "form_911": "Normal", - "form_912": "Shadow", - "form_913": "Purified", - "form_914": "Normal", - "form_915": "Shadow", - "form_916": "Purified", - "form_917": "Normal", - "form_918": "Shadow", - "form_919": "Purified", - "form_920": "Normal", - "form_921": "Shadow", - "form_922": "Purified", - "form_923": "Normal", - "form_924": "Shadow", - "form_925": "Purified", - "form_926": "Normal", - "form_927": "Shadow", - "form_928": "Purified", - "form_929": "Normal", - "form_930": "Shadow", - "form_931": "Purified", - "form_932": "Normal", - "form_933": "Shadow", - "form_934": "Purified", - "form_935": "Normal", - "form_936": "Shadow", - "form_937": "Purified", - "form_938": "Normal", - "form_939": "Shadow", - "form_940": "Purified", - "form_941": "Normal", - "form_942": "Shadow", - "form_943": "Purified", - "form_944": "Galarian", - "form_945": "Normal", - "form_946": "Galarian", - "form_947": "Normal", - "form_948": "Galarian", - "form_949": "Copy 2019", - "form_950": "Copy 2019", - "form_951": "Copy 2019", - "form_952": "Copy 2019", - "form_953": "Normal", - "form_954": "Shadow", - "form_955": "Purified", - "form_956": "Normal", - "form_957": "Shadow", - "form_958": "Purified", - "form_959": "Normal", - "form_960": "Shadow", - "form_961": "Purified", - "form_962": "Normal", - "form_963": "Shadow", - "form_964": "Purified", - "form_965": "Normal", - "form_966": "Shadow", - "form_967": "Purified", - "form_968": "Normal", - "form_969": "Shadow", - "form_970": "Purified", - "form_971": "Normal", - "form_972": "Shadow", - "form_973": "Purified", - "form_974": "Normal", - "form_975": "Shadow", - "form_976": "Purified", - "form_977": "Shadow", - "form_978": "Purified", - "form_979": "Shadow", - "form_980": "Purified", - "form_981": "Normal", - "form_982": "Shadow", - "form_983": "Purified", - "form_984": "Normal", - "form_985": "Shadow", - "form_986": "Purified", - "form_987": "Normal", - "form_988": "Shadow", - "form_989": "Purified", - "form_990": "Normal", - "form_991": "Shadow", - "form_992": "Purified", - "form_993": "Normal", - "form_994": "Shadow", - "form_995": "Purified", - "form_996": "Normal", - "form_997": "Shadow", - "form_998": "Purified", - "form_999": "Normal", - "form_1000": "Shadow", - "form_1001": "Purified", - "form_1002": "Normal", - "form_1003": "Shadow", - "form_1004": "Purified", - "form_1005": "Normal", - "form_1006": "Shadow", - "form_1007": "Purified", - "form_1008": "Normal", - "form_1009": "Shadow", - "form_1010": "Purified", - "form_1011": "Normal", - "form_1012": "Shadow", - "form_1013": "Purified", - "form_1014": "Normal", - "form_1015": "Shadow", - "form_1016": "Purified", - "form_1017": "Normal", - "form_1018": "Shadow", - "form_1019": "Purified", - "form_1020": "Normal", - "form_1021": "Shadow", - "form_1022": "Purified", - "form_1023": "Normal", - "form_1024": "Shadow", - "form_1025": "Purified", - "form_1026": "Normal", - "form_1027": "Shadow", - "form_1028": "Purified", - "form_1029": "Normal", - "form_1030": "Shadow", - "form_1031": "Purified", - "form_1032": "Normal", - "form_1033": "Shadow", - "form_1034": "Purified", - "form_1035": "Normal", - "form_1036": "Shadow", - "form_1037": "Purified", - "form_1038": "Normal", - "form_1039": "Shadow", - "form_1040": "Purified", - "form_1041": "Normal", - "form_1042": "Shadow", - "form_1043": "Purified", - "form_1044": "Normal", - "form_1045": "Shadow", - "form_1046": "Purified", - "form_1047": "Normal", - "form_1048": "Shadow", - "form_1049": "Purified", - "form_1050": "Normal", - "form_1051": "Shadow", - "form_1052": "Purified", - "form_1053": "Normal", - "form_1054": "Shadow", - "form_1055": "Purified", - "form_1056": "Normal", - "form_1057": "Shadow", - "form_1058": "Purified", - "form_1059": "Normal", - "form_1060": "Shadow", - "form_1061": "Purified", - "form_1062": "Normal", - "form_1063": "Shadow", - "form_1064": "Purified", - "form_1065": "Normal", - "form_1066": "Shadow", - "form_1067": "Purified", - "form_1068": "Normal", - "form_1069": "Shadow", - "form_1070": "Purified", - "form_1071": "Normal", - "form_1072": "Shadow", - "form_1073": "Purified", - "form_1074": "Normal", - "form_1075": "Shadow", - "form_1076": "Purified", - "form_1077": "Normal", - "form_1078": "Shadow", - "form_1079": "Purified", - "form_1080": "Normal", - "form_1081": "Shadow", - "form_1082": "Purified", - "form_1083": "Normal", - "form_1084": "Shadow", - "form_1085": "Purified", - "form_1086": "Normal", - "form_1087": "Shadow", - "form_1088": "Purified", - "form_1089": "Normal", - "form_1090": "Shadow", - "form_1091": "Purified", - "form_1092": "Normal", - "form_1093": "Shadow", - "form_1094": "Purified", - "form_1095": "Normal", - "form_1096": "Shadow", - "form_1097": "Purified", - "form_1098": "Normal", - "form_1099": "Shadow", - "form_1100": "Purified", - "form_1101": "Normal", - "form_1102": "Shadow", - "form_1103": "Purified", - "form_1104": "Normal", - "form_1105": "Shadow", - "form_1106": "Purified", - "form_1107": "Normal", - "form_1108": "Shadow", - "form_1109": "Purified", - "form_1110": "Normal", - "form_1111": "Shadow", - "form_1112": "Purified", - "form_1113": "Shadow", - "form_1114": "Purified", - "form_1115": "Normal", - "form_1116": "Shadow", - "form_1117": "Purified", - "form_1118": "Normal", - "form_1119": "Shadow", - "form_1120": "Purified", - "form_1121": "Normal", - "form_1122": "Shadow", - "form_1123": "Purified", - "form_1124": "Normal", - "form_1125": "Shadow", - "form_1126": "Purified", - "form_1127": "Normal", - "form_1128": "Shadow", - "form_1129": "Purified", - "form_1130": "Normal", - "form_1131": "Shadow", - "form_1132": "Purified", - "form_1133": "Normal", - "form_1134": "Shadow", - "form_1135": "Purified", - "form_1136": "Normal", - "form_1137": "Shadow", - "form_1138": "Purified", - "form_1139": "Normal", - "form_1140": "Shadow", - "form_1141": "Purified", - "form_1142": "Normal", - "form_1143": "Shadow", - "form_1144": "Purified", - "form_1145": "Normal", - "form_1146": "Shadow", - "form_1147": "Purified", - "form_1148": "Normal", - "form_1149": "Shadow", - "form_1150": "Purified", - "form_1151": "Normal", - "form_1152": "Shadow", - "form_1153": "Purified", - "form_1154": "Normal", - "form_1155": "Shadow", - "form_1156": "Purified", - "form_1157": "Normal", - "form_1158": "Shadow", - "form_1159": "Purified", - "form_1160": "Normal", - "form_1161": "Shadow", - "form_1162": "Purified", - "form_1163": "Normal", - "form_1164": "Shadow", - "form_1165": "Purified", - "form_1166": "Normal", - "form_1167": "Shadow", - "form_1168": "Purified", - "form_1169": "Normal", - "form_1170": "Shadow", - "form_1171": "Purified", - "form_1172": "Normal", - "form_1173": "Shadow", - "form_1174": "Purified", - "form_1175": "Normal", - "form_1176": "Shadow", - "form_1177": "Purified", - "form_1178": "Normal", - "form_1179": "Shadow", - "form_1180": "Purified", - "form_1181": "Normal", - "form_1182": "Shadow", - "form_1183": "Purified", - "form_1184": "Normal", - "form_1185": "Shadow", - "form_1186": "Purified", - "form_1187": "Normal", - "form_1188": "Shadow", - "form_1189": "Purified", - "form_1190": "Normal", - "form_1191": "Shadow", - "form_1192": "Purified", - "form_1193": "Normal", - "form_1194": "Shadow", - "form_1195": "Purified", - "form_1196": "Normal", - "form_1197": "Shadow", - "form_1198": "Purified", - "form_1199": "Normal", - "form_1200": "Shadow", - "form_1201": "Purified", - "form_1202": "Normal", - "form_1203": "Shadow", - "form_1204": "Purified", - "form_1205": "Normal", - "form_1206": "Shadow", - "form_1207": "Purified", - "form_1208": "Normal", - "form_1209": "Shadow", - "form_1210": "Purified", - "form_1211": "Normal", - "form_1212": "Shadow", - "form_1213": "Purified", - "form_1214": "Normal", - "form_1215": "Shadow", - "form_1216": "Purified", - "form_1217": "Normal", - "form_1218": "Shadow", - "form_1219": "Purified", - "form_1220": "Normal", - "form_1221": "Shadow", - "form_1222": "Purified", - "form_1223": "Normal", - "form_1224": "Shadow", - "form_1225": "Purified", - "form_1226": "Normal", - "form_1227": "Shadow", - "form_1228": "Purified", - "form_1229": "Normal", - "form_1230": "Shadow", - "form_1231": "Purified", - "form_1232": "Normal", - "form_1233": "Shadow", - "form_1234": "Purified", - "form_1235": "Normal", - "form_1236": "Shadow", - "form_1237": "Purified", - "form_1238": "Normal", - "form_1239": "Shadow", - "form_1240": "Purified", - "form_1241": "Normal", - "form_1242": "Shadow", - "form_1243": "Purified", - "form_1244": "Normal", - "form_1245": "Shadow", - "form_1246": "Purified", - "form_1247": "Normal", - "form_1248": "Shadow", - "form_1249": "Purified", - "form_1250": "Normal", - "form_1251": "Shadow", - "form_1252": "Purified", - "form_1253": "Normal", - "form_1254": "Shadow", - "form_1255": "Purified", - "form_1256": "Normal", - "form_1257": "Shadow", - "form_1258": "Purified", - "form_1259": "Normal", - "form_1260": "Shadow", - "form_1261": "Purified", - "form_1262": "Normal", - "form_1263": "Shadow", - "form_1264": "Purified", - "form_1265": "Normal", - "form_1266": "Shadow", - "form_1267": "Purified", - "form_1268": "Normal", - "form_1269": "Shadow", - "form_1270": "Purified", - "form_1271": "Normal", - "form_1272": "Shadow", - "form_1273": "Purified", - "form_1274": "Normal", - "form_1275": "Shadow", - "form_1276": "Purified", - "form_1277": "Normal", - "form_1278": "Shadow", - "form_1279": "Purified", - "form_1280": "Normal", - "form_1281": "Shadow", - "form_1282": "Purified", - "form_1283": "Normal", - "form_1284": "Shadow", - "form_1285": "Purified", - "form_1286": "Normal", - "form_1287": "Shadow", - "form_1288": "Purified", - "form_1289": "Normal", - "form_1290": "Shadow", - "form_1291": "Purified", - "form_1292": "Normal", - "form_1293": "Shadow", - "form_1294": "Purified", - "form_1295": "Normal", - "form_1296": "Shadow", - "form_1297": "Purified", - "form_1298": "Normal", - "form_1299": "Shadow", - "form_1300": "Purified", - "form_1301": "Normal", - "form_1302": "Shadow", - "form_1303": "Purified", - "form_1304": "Normal", - "form_1305": "Shadow", - "form_1306": "Purified", - "form_1307": "Normal", - "form_1308": "Shadow", - "form_1309": "Purified", - "form_1310": "Normal", - "form_1311": "Shadow", - "form_1312": "Purified", - "form_1313": "Normal", - "form_1314": "Shadow", - "form_1315": "Purified", - "form_1316": "Normal", - "form_1317": "Shadow", - "form_1318": "Purified", - "form_1319": "Normal", - "form_1320": "Shadow", - "form_1321": "Purified", - "form_1322": "Normal", - "form_1323": "Shadow", - "form_1324": "Purified", - "form_1325": "Normal", - "form_1326": "Shadow", - "form_1327": "Purified", - "form_1328": "Normal", - "form_1329": "Shadow", - "form_1330": "Purified", - "form_1331": "Normal", - "form_1332": "Shadow", - "form_1333": "Purified", - "form_1334": "Normal", - "form_1335": "Shadow", - "form_1336": "Purified", - "form_1337": "Normal", - "form_1338": "Shadow", - "form_1339": "Purified", - "form_1340": "Normal", - "form_1341": "Shadow", - "form_1342": "Purified", - "form_1343": "Normal", - "form_1344": "Shadow", - "form_1345": "Purified", - "form_1346": "Normal", - "form_1347": "Shadow", - "form_1348": "Purified", - "form_1349": "Normal", - "form_1350": "Shadow", - "form_1351": "Purified", - "form_1352": "Normal", - "form_1353": "Shadow", - "form_1354": "Purified", - "form_1355": "Normal", - "form_1356": "Shadow", - "form_1357": "Purified", - "form_1358": "Normal", - "form_1359": "Shadow", - "form_1360": "Purified", - "form_1361": "Normal", - "form_1362": "Shadow", - "form_1363": "Purified", - "form_1364": "Normal", - "form_1365": "Shadow", - "form_1366": "Purified", - "form_1367": "Normal", - "form_1368": "Shadow", - "form_1369": "Purified", - "form_1370": "Normal", - "form_1371": "Shadow", - "form_1372": "Purified", - "form_1373": "Shadow", - "form_1374": "Purified", - "form_1375": "Shadow", - "form_1376": "Purified", - "form_1377": "Shadow", - "form_1378": "Purified", - "form_1379": "Normal", - "form_1380": "Shadow", - "form_1381": "Purified", - "form_1382": "Normal", - "form_1383": "Shadow", - "form_1384": "Purified", - "form_1385": "Normal", - "form_1386": "Shadow", - "form_1387": "Purified", - "form_1388": "Normal", - "form_1389": "Shadow", - "form_1390": "Purified", - "form_1391": "Normal", - "form_1392": "Shadow", - "form_1393": "Purified", - "form_1394": "Normal", - "form_1395": "Shadow", - "form_1396": "Purified", - "form_1397": "Normal", - "form_1398": "Shadow", - "form_1399": "Purified", - "form_1400": "Normal", - "form_1401": "Shadow", - "form_1402": "Purified", - "form_1403": "Normal", - "form_1404": "Shadow", - "form_1405": "Purified", - "form_1406": "Normal", - "form_1407": "Shadow", - "form_1408": "Purified", - "form_1409": "Normal", - "form_1410": "Shadow", - "form_1411": "Purified", - "form_1412": "Normal", - "form_1413": "Shadow", - "form_1414": "Purified", - "form_1415": "Normal", - "form_1416": "Shadow", - "form_1417": "Purified", - "form_1418": "Normal", - "form_1419": "Shadow", - "form_1420": "Purified", - "form_1421": "Normal", - "form_1422": "Shadow", - "form_1423": "Purified", - "form_1424": "Normal", - "form_1425": "Shadow", - "form_1426": "Purified", - "form_1427": "Normal", - "form_1428": "Shadow", - "form_1429": "Purified", - "form_1430": "Normal", - "form_1431": "Shadow", - "form_1432": "Purified", - "form_1433": "Normal", - "form_1434": "Shadow", - "form_1435": "Purified", - "form_1436": "Normal", - "form_1437": "Shadow", - "form_1438": "Purified", - "form_1439": "Normal", - "form_1440": "Shadow", - "form_1441": "Purified", - "form_1442": "Normal", - "form_1443": "Shadow", - "form_1444": "Purified", - "form_1445": "Normal", - "form_1446": "Shadow", - "form_1447": "Purified", - "form_1448": "Normal", - "form_1449": "Shadow", - "form_1450": "Purified", - "form_1451": "Normal", - "form_1452": "Shadow", - "form_1453": "Purified", - "form_1454": "Normal", - "form_1455": "Shadow", - "form_1456": "Purified", - "form_1457": "Normal", - "form_1458": "Shadow", - "form_1459": "Purified", - "form_1460": "Normal", - "form_1461": "Shadow", - "form_1462": "Purified", - "form_1463": "Normal", - "form_1464": "Shadow", - "form_1465": "Purified", - "form_1466": "Normal", - "form_1467": "Shadow", - "form_1468": "Purified", - "form_1469": "Normal", - "form_1470": "Shadow", - "form_1471": "Purified", - "form_1472": "Normal", - "form_1473": "Shadow", - "form_1474": "Purified", - "form_1475": "Normal", - "form_1476": "Shadow", - "form_1477": "Purified", - "form_1478": "Normal", - "form_1479": "Shadow", - "form_1480": "Purified", - "form_1481": "Normal", - "form_1482": "Shadow", - "form_1483": "Purified", - "form_1484": "Normal", - "form_1485": "Shadow", - "form_1486": "Purified", - "form_1487": "Normal", - "form_1488": "Shadow", - "form_1489": "Purified", - "form_1490": "Normal", - "form_1491": "Shadow", - "form_1492": "Purified", - "form_1493": "Normal", - "form_1494": "Shadow", - "form_1495": "Purified", - "form_1496": "Normal", - "form_1497": "Shadow", - "form_1498": "Purified", - "form_1499": "Normal", - "form_1500": "Shadow", - "form_1501": "Purified", - "form_1502": "Normal", - "form_1503": "Shadow", - "form_1504": "Purified", - "form_1505": "Normal", - "form_1506": "Shadow", - "form_1507": "Purified", - "form_1508": "Normal", - "form_1509": "Shadow", - "form_1510": "Purified", - "form_1511": "Normal", - "form_1512": "Shadow", - "form_1513": "Purified", - "form_1514": "Normal", - "form_1515": "Shadow", - "form_1516": "Purified", - "form_1517": "Normal", - "form_1518": "Shadow", - "form_1519": "Purified", - "form_1520": "Normal", - "form_1521": "Shadow", - "form_1522": "Purified", - "form_1523": "Normal", - "form_1524": "Shadow", - "form_1525": "Purified", - "form_1526": "Normal", - "form_1527": "Shadow", - "form_1528": "Purified", - "form_1529": "Normal", - "form_1530": "Shadow", - "form_1531": "Purified", - "form_1532": "Normal", - "form_1533": "Shadow", - "form_1534": "Purified", - "form_1535": "Normal", - "form_1536": "Shadow", - "form_1537": "Purified", - "form_1538": "Normal", - "form_1539": "Shadow", - "form_1540": "Purified", - "form_1541": "Normal", - "form_1542": "Shadow", - "form_1543": "Purified", - "form_1544": "Normal", - "form_1545": "Shadow", - "form_1546": "Purified", - "form_1547": "Normal", - "form_1548": "Shadow", - "form_1549": "Purified", - "form_1550": "Normal", - "form_1551": "Shadow", - "form_1552": "Purified", - "form_1553": "Normal", - "form_1554": "Shadow", - "form_1555": "Purified", - "form_1556": "Normal", - "form_1557": "Shadow", - "form_1558": "Purified", - "form_1559": "Normal", - "form_1560": "Shadow", - "form_1561": "Purified", - "form_1562": "Normal", - "form_1563": "Shadow", - "form_1564": "Purified", - "form_1565": "Normal", - "form_1566": "Shadow", - "form_1567": "Purified", - "form_1568": "Normal", - "form_1569": "Shadow", - "form_1570": "Purified", - "form_1571": "Normal", - "form_1572": "Shadow", - "form_1573": "Purified", - "form_1574": "Normal", - "form_1575": "Shadow", - "form_1576": "Purified", - "form_1577": "Normal", - "form_1578": "Shadow", - "form_1579": "Purified", - "form_1580": "Normal", - "form_1581": "Shadow", - "form_1582": "Purified", - "form_1583": "Normal", - "form_1584": "Shadow", - "form_1585": "Purified", - "form_1586": "Normal", - "form_1587": "Shadow", - "form_1588": "Purified", - "form_1589": "Normal", - "form_1590": "Shadow", - "form_1591": "Purified", - "form_1592": "Normal", - "form_1593": "Shadow", - "form_1594": "Purified", - "form_1595": "Normal", - "form_1596": "Shadow", - "form_1597": "Purified", - "form_1598": "Normal", - "form_1599": "Shadow", - "form_1600": "Purified", - "form_1601": "Normal", - "form_1602": "Shadow", - "form_1603": "Purified", - "form_1604": "Normal", - "form_1605": "Shadow", - "form_1606": "Purified", - "form_1607": "Normal", - "form_1608": "Shadow", - "form_1609": "Purified", - "form_1610": "Normal", - "form_1611": "Shadow", - "form_1612": "Purified", - "form_1613": "Normal", - "form_1614": "Shadow", - "form_1615": "Purified", - "form_1616": "Normal", - "form_1617": "Shadow", - "form_1618": "Purified", - "form_1619": "Normal", - "form_1620": "Shadow", - "form_1621": "Purified", - "form_1622": "Normal", - "form_1623": "Shadow", - "form_1624": "Purified", - "form_1625": "Normal", - "form_1626": "Shadow", - "form_1627": "Purified", - "form_1628": "Normal", - "form_1629": "Shadow", - "form_1630": "Purified", - "form_1631": "Normal", - "form_1632": "Shadow", - "form_1633": "Purified", - "form_1634": "Normal", - "form_1635": "Shadow", - "form_1636": "Purified", - "form_1637": "Normal", - "form_1638": "Shadow", - "form_1639": "Purified", - "form_1640": "Normal", - "form_1641": "Shadow", - "form_1642": "Purified", - "form_1643": "Normal", - "form_1644": "Shadow", - "form_1645": "Purified", - "form_1646": "Normal", - "form_1647": "Shadow", - "form_1648": "Purified", - "form_1649": "Normal", - "form_1650": "Shadow", - "form_1651": "Purified", - "form_1652": "Normal", - "form_1653": "Shadow", - "form_1654": "Purified", - "form_1655": "Normal", - "form_1656": "Shadow", - "form_1657": "Purified", - "form_1658": "Normal", - "form_1659": "Shadow", - "form_1660": "Purified", - "form_1661": "Normal", - "form_1662": "Shadow", - "form_1663": "Purified", - "form_1664": "Normal", - "form_1665": "Shadow", - "form_1666": "Purified", - "form_1667": "Normal", - "form_1668": "Shadow", - "form_1669": "Purified", - "form_1670": "Normal", - "form_1671": "Shadow", - "form_1672": "Purified", - "form_1673": "Normal", - "form_1674": "Shadow", - "form_1675": "Purified", - "form_1676": "Normal", - "form_1677": "Shadow", - "form_1678": "Purified", - "form_1679": "Normal", - "form_1680": "Shadow", - "form_1681": "Purified", - "form_1682": "Normal", - "form_1683": "Shadow", - "form_1684": "Purified", - "form_1685": "Normal", - "form_1686": "Shadow", - "form_1687": "Purified", - "form_1688": "Normal", - "form_1689": "Shadow", - "form_1690": "Purified", - "form_1691": "Normal", - "form_1692": "Shadow", - "form_1693": "Purified", - "form_1694": "Normal", - "form_1695": "Shadow", - "form_1696": "Purified", - "form_1697": "Normal", - "form_1698": "Shadow", - "form_1699": "Purified", - "form_1700": "Normal", - "form_1701": "Shadow", - "form_1702": "Purified", - "form_1703": "Normal", - "form_1704": "Shadow", - "form_1705": "Purified", - "form_1706": "Normal", - "form_1707": "Shadow", - "form_1708": "Purified", - "form_1709": "Normal", - "form_1710": "Shadow", - "form_1711": "Purified", - "form_1712": "Normal", - "form_1713": "Shadow", - "form_1714": "Purified", - "form_1715": "Normal", - "form_1716": "Shadow", - "form_1717": "Purified", - "form_1718": "Normal", - "form_1719": "Shadow", - "form_1720": "Purified", - "form_1721": "Normal", - "form_1722": "Shadow", - "form_1723": "Purified", - "form_1724": "Normal", - "form_1725": "Shadow", - "form_1726": "Purified", - "form_1727": "Normal", - "form_1728": "Shadow", - "form_1729": "Purified", - "form_1730": "Normal", - "form_1731": "Shadow", - "form_1732": "Purified", - "form_1733": "Normal", - "form_1734": "Shadow", - "form_1735": "Purified", - "form_1736": "Normal", - "form_1737": "Shadow", - "form_1738": "Purified", - "form_1739": "Normal", - "form_1740": "Shadow", - "form_1741": "Purified", - "form_1742": "Normal", - "form_1743": "Shadow", - "form_1744": "Purified", - "form_1745": "Normal", - "form_1746": "Shadow", - "form_1747": "Purified", - "form_1748": "Normal", - "form_1749": "Shadow", - "form_1750": "Purified", - "form_1751": "Normal", - "form_1752": "Shadow", - "form_1753": "Purified", - "form_1754": "Normal", - "form_1755": "Shadow", - "form_1756": "Purified", - "form_1757": "Normal", - "form_1758": "Shadow", - "form_1759": "Purified", - "form_1760": "Normal", - "form_1761": "Shadow", - "form_1762": "Purified", - "form_1763": "Normal", - "form_1764": "Shadow", - "form_1765": "Purified", - "form_1766": "Normal", - "form_1767": "Shadow", - "form_1768": "Purified", - "form_1769": "Normal", - "form_1770": "Shadow", - "form_1771": "Purified", - "form_1772": "Normal", - "form_1773": "Shadow", - "form_1774": "Purified", - "form_1775": "Normal", - "form_1776": "Shadow", - "form_1777": "Purified", - "form_1778": "Normal", - "form_1779": "Shadow", - "form_1780": "Purified", - "form_1781": "Normal", - "form_1782": "Shadow", - "form_1783": "Purified", - "form_1784": "Normal", - "form_1785": "Shadow", - "form_1786": "Purified", - "form_1787": "Normal", - "form_1788": "Shadow", - "form_1789": "Purified", - "form_1790": "Normal", - "form_1791": "Shadow", - "form_1792": "Purified", - "form_1793": "Normal", - "form_1794": "Shadow", - "form_1795": "Purified", - "form_1796": "Normal", - "form_1797": "Shadow", - "form_1798": "Purified", - "form_1799": "Normal", - "form_1800": "Shadow", - "form_1801": "Purified", - "form_1802": "Normal", - "form_1803": "Shadow", - "form_1804": "Purified", - "form_1805": "Normal", - "form_1806": "Shadow", - "form_1807": "Purified", - "form_1808": "Normal", - "form_1809": "Shadow", - "form_1810": "Purified", - "form_1811": "Normal", - "form_1812": "Shadow", - "form_1813": "Purified", - "form_1814": "Normal", - "form_1815": "Shadow", - "form_1816": "Purified", - "form_1817": "Normal", - "form_1818": "Shadow", - "form_1819": "Purified", - "form_1820": "Normal", - "form_1821": "Shadow", - "form_1822": "Purified", - "form_1823": "Normal", - "form_1824": "Shadow", - "form_1825": "Purified", - "form_1826": "Normal", - "form_1827": "Shadow", - "form_1828": "Purified", - "form_1829": "Normal", - "form_1830": "Shadow", - "form_1831": "Purified", - "form_1832": "Normal", - "form_1833": "Shadow", - "form_1834": "Purified", - "form_1835": "Normal", - "form_1836": "Shadow", - "form_1837": "Purified", - "form_1838": "Normal", - "form_1839": "Shadow", - "form_1840": "Purified", - "form_1841": "Normal", - "form_1842": "Shadow", - "form_1843": "Purified", - "form_1844": "Normal", - "form_1845": "Shadow", - "form_1846": "Purified", - "form_1847": "Normal", - "form_1848": "Shadow", - "form_1849": "Purified", - "form_1850": "Normal", - "form_1851": "Shadow", - "form_1852": "Purified", - "form_1853": "Normal", - "form_1854": "Shadow", - "form_1855": "Purified", - "form_1856": "Normal", - "form_1857": "Shadow", - "form_1858": "Purified", - "form_1859": "Normal", - "form_1860": "Shadow", - "form_1861": "Purified", - "form_1862": "Normal", - "form_1863": "Shadow", - "form_1864": "Purified", - "form_1865": "Normal", - "form_1866": "Shadow", - "form_1867": "Purified", - "form_1868": "Normal", - "form_1869": "Shadow", - "form_1870": "Purified", - "form_1871": "Normal", - "form_1872": "Shadow", - "form_1873": "Purified", - "form_1874": "Normal", - "form_1875": "Shadow", - "form_1876": "Purified", - "form_1877": "Normal", - "form_1878": "Shadow", - "form_1879": "Purified", - "form_1880": "Normal", - "form_1881": "Shadow", - "form_1882": "Purified", - "form_1883": "Normal", - "form_1884": "Shadow", - "form_1885": "Purified", - "form_1886": "Normal", - "form_1887": "Shadow", - "form_1888": "Purified", - "form_1889": "Normal", - "form_1890": "Shadow", - "form_1891": "Purified", - "form_1892": "Normal", - "form_1893": "Shadow", - "form_1894": "Purified", - "form_1895": "Normal", - "form_1896": "Shadow", - "form_1897": "Purified", - "form_1898": "Normal", - "form_1899": "Shadow", - "form_1900": "Purified", - "form_1901": "Normal", - "form_1902": "Shadow", - "form_1903": "Purified", - "form_1904": "Normal", - "form_1905": "Shadow", - "form_1906": "Purified", - "form_1907": "Normal", - "form_1908": "Shadow", - "form_1909": "Purified", - "form_1910": "Normal", - "form_1911": "Shadow", - "form_1912": "Purified", - "form_1913": "Normal", - "form_1914": "Shadow", - "form_1915": "Purified", - "form_1916": "Normal", - "form_1917": "Shadow", - "form_1918": "Purified", - "form_1919": "Normal", - "form_1920": "Shadow", - "form_1921": "Purified", - "form_1922": "Normal", - "form_1923": "Shadow", - "form_1924": "Purified", - "form_1925": "Normal", - "form_1926": "Shadow", - "form_1927": "Purified", - "form_1928": "Normal", - "form_1929": "Shadow", - "form_1930": "Purified", - "form_1931": "Normal", - "form_1932": "Shadow", - "form_1933": "Purified", - "form_1934": "Normal", - "form_1935": "Shadow", - "form_1936": "Purified", - "form_1937": "Normal", - "form_1938": "Shadow", - "form_1939": "Purified", - "form_1940": "Normal", - "form_1941": "Shadow", - "form_1942": "Purified", - "form_1943": "Normal", - "form_1944": "Shadow", - "form_1945": "Purified", - "form_1946": "Normal", - "form_1947": "Shadow", - "form_1948": "Purified", - "form_1949": "Normal", - "form_1950": "Shadow", - "form_1951": "Purified", - "form_1952": "Normal", - "form_1953": "Shadow", - "form_1954": "Purified", - "form_1955": "Normal", - "form_1956": "Shadow", - "form_1957": "Purified", - "form_1958": "Normal", - "form_1959": "Shadow", - "form_1960": "Purified", - "form_1961": "Normal", - "form_1962": "Shadow", - "form_1963": "Purified", - "form_1964": "Normal", - "form_1965": "Shadow", - "form_1966": "Purified", - "form_1967": "Normal", - "form_1968": "Shadow", - "form_1969": "Purified", - "form_1970": "Normal", - "form_1971": "Shadow", - "form_1972": "Purified", - "form_1973": "Normal", - "form_1974": "Shadow", - "form_1975": "Purified", - "form_1976": "Normal", - "form_1977": "Shadow", - "form_1978": "Purified", - "form_1979": "Normal", - "form_1980": "Shadow", - "form_1981": "Purified", - "form_1982": "Normal", - "form_1983": "Shadow", - "form_1984": "Purified", - "form_1985": "Normal", - "form_1986": "Shadow", - "form_1987": "Purified", - "form_1988": "Normal", - "form_1989": "Shadow", - "form_1990": "Purified", - "form_1991": "Normal", - "form_1992": "Shadow", - "form_1993": "Purified", - "form_1994": "Normal", - "form_1995": "Shadow", - "form_1996": "Purified", - "form_1997": "Normal", - "form_1998": "Shadow", - "form_1999": "Purified", - "form_2000": "Normal", - "form_2001": "Shadow", - "form_2002": "Purified", - "form_2003": "Normal", - "form_2004": "Shadow", - "form_2005": "Purified", - "form_2006": "Normal", - "form_2007": "Shadow", - "form_2008": "Purified", - "form_2009": "Normal", - "form_2010": "Shadow", - "form_2011": "Purified", - "form_2012": "Normal", - "form_2013": "Shadow", - "form_2014": "Purified", - "form_2015": "Normal", - "form_2016": "Shadow", - "form_2017": "Purified", - "form_2018": "Normal", - "form_2019": "Shadow", - "form_2020": "Purified", - "form_2021": "Normal", - "form_2022": "Shadow", - "form_2023": "Purified", - "form_2024": "Normal", - "form_2025": "Shadow", - "form_2026": "Purified", - "form_2027": "Normal", - "form_2028": "Shadow", - "form_2029": "Purified", - "form_2030": "Normal", - "form_2031": "Shadow", - "form_2032": "Purified", - "form_2033": "Normal", - "form_2034": "Shadow", - "form_2035": "Purified", - "form_2036": "Normal", - "form_2037": "Shadow", - "form_2038": "Purified", - "form_2039": "Normal", - "form_2040": "Shadow", - "form_2041": "Purified", - "form_2042": "Normal", - "form_2043": "Shadow", - "form_2044": "Purified", - "form_2045": "Normal", - "form_2046": "Shadow", - "form_2047": "Purified", - "form_2048": "Normal", - "form_2049": "Shadow", - "form_2050": "Purified", - "form_2051": "Normal", - "form_2052": "Shadow", - "form_2053": "Purified", - "form_2054": "Normal", - "form_2055": "Shadow", - "form_2056": "Purified", - "form_2057": "Normal", - "form_2058": "Shadow", - "form_2059": "Purified", - "form_2060": "Normal", - "form_2061": "Shadow", - "form_2062": "Purified", - "form_2063": "Normal", - "form_2064": "Shadow", - "form_2065": "Purified", - "form_2066": "Normal", - "form_2067": "Shadow", - "form_2068": "Purified", - "form_2069": "Normal", - "form_2070": "Shadow", - "form_2071": "Purified", - "form_2072": "Normal", - "form_2073": "Shadow", - "form_2074": "Purified", - "form_2075": "Normal", - "form_2076": "Shadow", - "form_2077": "Purified", - "form_2078": "Normal", - "form_2079": "Shadow", - "form_2080": "Purified", - "form_2081": "Normal", - "form_2082": "Shadow", - "form_2083": "Purified", - "form_2084": "Normal", - "form_2085": "Shadow", - "form_2086": "Purified", - "form_2087": "Normal", - "form_2088": "Shadow", - "form_2089": "Purified", - "form_2090": "Normal", - "form_2091": "Shadow", - "form_2092": "Purified", - "form_2093": "Normal", - "form_2094": "Shadow", - "form_2095": "Purified", - "form_2096": "Normal", - "form_2097": "Shadow", - "form_2098": "Purified", - "form_2099": "Normal", - "form_2100": "Shadow", - "form_2101": "Purified", - "form_2102": "Normal", - "form_2103": "Shadow", - "form_2104": "Purified", - "form_2105": "Normal", - "form_2106": "Shadow", - "form_2107": "Purified", - "form_2108": "Normal", - "form_2109": "Shadow", - "form_2110": "Purified", - "form_2111": "Normal", - "form_2112": "Shadow", - "form_2113": "Purified", - "form_2114": "Normal", - "form_2115": "Shadow", - "form_2116": "Purified", - "form_2117": "Normal", - "form_2118": "Shadow", - "form_2119": "Purified", - "form_2120": "Normal", - "form_2121": "Shadow", - "form_2122": "Purified", - "form_2123": "Normal", - "form_2124": "Shadow", - "form_2125": "Purified", - "form_2126": "Normal", - "form_2127": "Shadow", - "form_2128": "Purified", - "form_2129": "Normal", - "form_2130": "Shadow", - "form_2131": "Purified", - "form_2132": "Normal", - "form_2133": "Shadow", - "form_2134": "Purified", - "form_2135": "Normal", - "form_2136": "Shadow", - "form_2137": "Purified", - "form_2138": "Normal", - "form_2139": "Shadow", - "form_2140": "Purified", - "form_2141": "Normal", - "form_2142": "Shadow", - "form_2143": "Purified", - "form_2144": "Normal", - "form_2145": "Shadow", - "form_2146": "Purified", - "form_2147": "Normal", - "form_2148": "Shadow", - "form_2149": "Purified", - "form_2150": "Normal", - "form_2151": "Shadow", - "form_2152": "Purified", - "form_2153": "Normal", - "form_2154": "Shadow", - "form_2155": "Purified", - "form_2156": "Normal", - "form_2157": "Shadow", - "form_2158": "Purified", - "form_2159": "Normal", - "form_2160": "Shadow", - "form_2161": "Purified", - "form_2162": "Normal", - "form_2163": "Shadow", - "form_2164": "Purified", - "form_2165": "Normal", - "form_2166": "Shadow", - "form_2167": "Purified", - "form_2168": "Normal", - "form_2169": "Shadow", - "form_2170": "Purified", - "form_2171": "Normal", - "form_2172": "Shadow", - "form_2173": "Purified", - "form_2174": "Normal", - "form_2175": "Shadow", - "form_2176": "Purified", - "form_2177": "Normal", - "form_2178": "Shadow", - "form_2179": "Purified", - "form_2180": "Normal", - "form_2181": "Shadow", - "form_2182": "Purified", - "form_2183": "Normal", - "form_2184": "Shadow", - "form_2185": "Purified", - "form_2186": "Normal", - "form_2187": "Shadow", - "form_2188": "Purified", - "form_2189": "Normal", - "form_2190": "Shadow", - "form_2191": "Purified", - "form_2192": "Normal", - "form_2193": "Shadow", - "form_2194": "Purified", - "form_2195": "Normal", - "form_2196": "Shadow", - "form_2197": "Purified", - "form_2198": "Normal", - "form_2199": "Shadow", - "form_2200": "Purified", - "form_2201": "Normal", - "form_2202": "Shadow", - "form_2203": "Purified", - "form_2204": "Normal", - "form_2205": "Shadow", - "form_2206": "Purified", - "form_2207": "Normal", - "form_2208": "Shadow", - "form_2209": "Purified", - "form_2210": "Normal", - "form_2211": "Shadow", - "form_2212": "Purified", - "form_2213": "Normal", - "form_2214": "Shadow", - "form_2215": "Purified", - "form_2216": "Normal", - "form_2217": "Shadow", - "form_2218": "Purified", - "form_2219": "Normal", - "form_2220": "Shadow", - "form_2221": "Purified", - "form_2222": "Normal", - "form_2223": "Shadow", - "form_2224": "Purified", - "form_2225": "Normal", - "form_2226": "Shadow", - "form_2227": "Purified", - "form_2228": "Normal", - "form_2229": "Shadow", - "form_2230": "Purified", - "form_2231": "Normal", - "form_2232": "Shadow", - "form_2233": "Purified", - "form_2234": "Normal", - "form_2235": "Shadow", - "form_2236": "Purified", - "form_2237": "Normal", - "form_2238": "Shadow", - "form_2239": "Purified", - "form_2240": "Normal", - "form_2241": "Shadow", - "form_2242": "Purified", - "form_2243": "Normal", - "form_2244": "Shadow", - "form_2245": "Purified", - "form_2246": "Normal", - "form_2247": "Shadow", - "form_2248": "Purified", - "form_2249": "Normal", - "form_2250": "Shadow", - "form_2251": "Purified", - "form_2252": "Normal", - "form_2253": "Shadow", - "form_2254": "Purified", - "form_2255": "Normal", - "form_2256": "Shadow", - "form_2257": "Purified", - "form_2258": "Normal", - "form_2259": "Shadow", - "form_2260": "Purified", - "form_2261": "Normal", - "form_2262": "Shadow", - "form_2263": "Purified", - "form_2264": "Normal", - "form_2265": "Shadow", - "form_2266": "Purified", - "form_2267": "Normal", - "form_2268": "Shadow", - "form_2269": "Purified", - "form_2270": "Normal", - "form_2271": "Shadow", - "form_2272": "Purified", - "form_2273": "Normal", - "form_2274": "Shadow", - "form_2275": "Purified", - "form_2276": "Normal", - "form_2277": "Shadow", - "form_2278": "Purified", - "form_2279": "Normal", - "form_2280": "Shadow", - "form_2281": "Purified", - "form_2282": "Normal", - "form_2283": "Shadow", - "form_2284": "Purified", - "form_2285": "Normal", - "form_2286": "Shadow", - "form_2287": "Purified", - "form_2288": "Normal", - "form_2289": "Shadow", - "form_2290": "Purified", - "form_2291": "Normal", - "form_2292": "Shadow", - "form_2293": "Purified", - "form_2294": "Normal", - "form_2295": "Shadow", - "form_2296": "Purified", - "form_2297": "Normal", - "form_2298": "Shadow", - "form_2299": "Purified", - "form_2300": "Normal", - "form_2301": "Shadow", - "form_2302": "Purified", - "form_2303": "Normal", - "form_2304": "Shadow", - "form_2305": "Purified", - "form_2306": "Normal", - "form_2307": "Shadow", - "form_2308": "Purified", - "form_2309": "Normal", - "form_2310": "Shadow", - "form_2311": "Purified", - "form_2312": "Normal", - "form_2313": "Shadow", - "form_2314": "Purified", - "form_2315": "Normal", - "form_2316": "Shadow", - "form_2317": "Purified", - "form_2318": "Normal", - "form_2319": "Shadow", - "form_2320": "Purified", - "form_2321": "Normal", - "form_2322": "Shadow", - "form_2323": "Purified", - "form_2324": "Normal", - "form_2325": "Shadow", - "form_2326": "Purified", - "form_2327": "Spring 2020", - "form_2328": "Spring 2020", - "form_2329": "Spring 2020", - "form_2330": "Female", - "form_2331": "Female", - "form_2332": "Costume 2020", - "form_2333": "Costume 2020", - "form_2334": "Costume 2020", - "form_2335": "Galarian", - "form_2336": "Galarian", - "form_2337": "Galarian", - "form_2338": "Galarian", - "form_2339": "Galarian", - "form_2340": "Galarian", - "form_2341": "Galarian", - "form_2342": "Galarian Standard", - "form_2343": "Galarian Zen", - "form_2344": "Galarian", - "form_2345": "Galarian", - "form_2501": "Normal", - "form_2502": "Shadow", - "form_2503": "Purified", - "form_2504": "Normal", - "form_2505": "Shadow", - "form_2506": "Purified", - "form_2510": "Normal", - "form_2511": "Shadow", - "form_2512": "Purified", - "form_2516": "Normal", - "form_2517": "Shadow", - "form_2518": "Purified", - "form_2582": "Galarian", - "form_2583": "Galarian", - "form_2585": "Costume 2020", - "form_2586": "Costume 2020", - "form_2587": "Normal", - "form_2588": "Female", - "form_2589": "Normal", - "form_2590": "Female", - "form_2591": "Ten Percent", - "form_2592": "Fifty Percent", - "form_2593": "Complete", - "form_2594": "Archipelago", - "form_2595": "Continental", - "form_2596": "Elegant", - "form_2597": "Fancy", - "form_2598": "Garden", - "form_2599": "High Plains", - "form_2600": "Icy Snow", - "form_2601": "Jungle", - "form_2602": "Marine", - "form_2603": "Meadow", - "form_2604": "Modern", - "form_2605": "Monsoon", - "form_2606": "Ocean", - "form_2607": "Pokeball", - "form_2608": "Polar", - "form_2609": "River", - "form_2610": "Sandstorm", - "form_2611": "Savanna", - "form_2612": "Sun", - "form_2613": "Tundra", - "form_2614": "Red", - "form_2615": "Yellow", - "form_2616": "Orange", - "form_2617": "Blue", - "form_2618": "White", - "form_2619": "Red", - "form_2620": "Yellow", - "form_2621": "Orange", - "form_2622": "Blue", - "form_2623": "White", - "form_2624": "Red", - "form_2625": "Yellow", - "form_2626": "Orange", - "form_2627": "Blue", - "form_2628": "White", - "form_2629": "Natural", - "form_2630": "Heart", - "form_2631": "Star", - "form_2632": "Diamond", - "form_2633": "Debutante", - "form_2634": "Matron", - "form_2635": "Dandy", - "form_2636": "La Reine", - "form_2637": "Kabuki", - "form_2638": "Pharaoh", - "form_2639": "Shield", - "form_2640": "Blade", - "form_2641": "Small", - "form_2642": "Average", - "form_2643": "Large", - "form_2644": "Super", - "form_2645": "Small", - "form_2646": "Average", - "form_2647": "Large", - "form_2648": "Super", - "form_2649": "Neutral", - "form_2650": "Active", - "form_2651": "Confined", - "form_2652": "Unbound", - "form_2666": "Costume 2020 Deprecated", - "form_2668": "Costume 2020", - "form_2669": "Adventure Hat 2020", - "form_2670": "Winter 2020", - "form_2671": "Winter 2020", - "form_2672": "Winter 2020", - "form_2673": "2020", - "form_2674": "2021", - "costume_1": "Holiday", - "costume_2": "Party", - "costume_3": "Ash", - "costume_4": "Witch", - "costume_5": "Adventure", - "costume_6": "Black Cap", - "costume_7": "Flower", - "costume_8": "Toque", - "costume_9": "Detective", - "costume_10": "One Piece", - "costume_11": "Pokemon Day", - "move_1": "Trovoada de Choques", - "move_2": "Ataque Rápido", - "move_3": "Arranhão", - "move_4": "Brasa", - "move_5": "Chicote de Vinha", - "move_6": "Investida", - "move_7": "Folha Navalha", - "move_8": "Desmantelar", - "move_9": "Revólver d'Água", - "move_10": "Mordida", - "move_11": "Pancada", - "move_12": "Tapa Duplo", - "move_13": "Embrulho", - "move_14": "Hiper-raio", - "move_15": "Lambida", - "move_16": "Pulso Sombrio", - "move_17": "Nevoeiro de Fumaça", - "move_18": "Ataque de Lama", - "move_19": "Garra de Metal", - "move_20": "Agarramento Compressor", - "move_21": "Roda de Fogo", - "move_22": "Megachifre", - "move_23": "Ataque de Asa", - "move_24": "Lança-chamas", - "move_25": "Soco Enganador", - "move_26": "Cavar", - "move_27": "Rasteira", - "move_28": "Golpe Cruzado", - "move_29": "Corte Psíquico", - "move_30": "Feixe Psíquico", - "move_31": "Terremoto", - "move_32": "Gume de Pedra", - "move_33": "Soco de Gelo", - "move_34": "Estampa de Coração", - "move_35": "Descarga", - "move_36": "Canhão de Flash", - "move_37": "Bicada", - "move_38": "Bico Broca", - "move_39": "Raio Congelante", - "move_40": "Nevasca", - "move_41": "Golpe de Ar", - "move_42": "Onda de Calor", - "move_43": "Agulha Dupla", - "move_44": "Golpe Envenenado", - "move_45": "Ás dos Ares", - "move_46": "Furação", - "move_47": "Nevasca de Pétalas", - "move_48": "Megadreno", - "move_49": "Zumbido de Inseto", - "move_50": "Presa Venenosa", - "move_51": "Talho Noturno", - "move_52": "Talho", - "move_53": "Jato de Bolhas", - "move_54": "Submissão", - "move_55": "Golpe de Caratê", - "move_56": "Movimento Baixo", - "move_57": "Aqua Jato", - "move_58": "Aqua Cauda", - "move_59": "Bomba de Sementes", - "move_60": "Choque Psíquico", - "move_61": "Lançamento de Rocha", - "move_62": "Poder Ancestral", - "move_63": "Tumba de Rochas", - "move_64": "Deslize de Pedras", - "move_65": "Gema Poderosa", - "move_66": "Furtividade nas Sombras", - "move_67": "Soco Sombrio", - "move_68": "Garra Sombria", - "move_69": "Vento Ominoso", - "move_70": "Bola Sombria", - "move_71": "Soco Projétil", - "move_72": "Bomba Ímã", - "move_73": "Asa de Aço", - "move_74": "Cabeça de Ferro", - "move_75": "Ataque Parabólico", - "move_76": "Faísca", - "move_77": "Soco Trovoada", - "move_78": "Trovão", - "move_79": "Relâmpago", - "move_80": "Twister", - "move_81": "Sopro do Dragão", - "move_82": "Pulso do Dragão", - "move_83": "Garra de Dragão", - "move_84": "Voz Desarmante", - "move_85": "Beijo Drenante", - "move_86": "Clarão Deslumbrante", - "move_87": "Explosão Lunar", - "move_88": "Jogo Duro", - "move_89": "Corte-veneno", - "move_90": "Bomba de Lodo", - "move_91": "Onda de Lama", - "move_92": "Tiro de Sujeira", - "move_93": "Tiro de Lama", - "move_94": "Bastão de Osso", - "move_95": "Tremor", - "move_96": "Bomba de Lama", - "move_97": "Cortador de Fúria", - "move_98": "Picada", - "move_99": "Feixe Sinalizador", - "move_100": "Tesoura X", - "move_101": "Ataque de Chamas", - "move_102": "Rajada de Chamas", - "move_103": "Rajada de Fogo", - "move_104": "Salmoura", - "move_105": "Pulso d'Água", - "move_106": "Escaldada", - "move_107": "Jato d'Água", - "move_108": "Psíquico", - "move_109": "Golpe Psíquico", - "move_110": "Caco de Gelo", - "move_111": "Vento Congelante", - "move_112": "Respiração de Gelo", - "move_113": "Absorção", - "move_114": "Gigadreno", - "move_115": "Soco de Fogo", - "move_116": "Raio Solar", - "move_117": "Lâmina de Folha", - "move_118": "Chicote Poderoso", - "move_119": "Borrifada", - "move_120": "Ácido", - "move_121": "Cortador de Ar", - "move_122": "Furacão", - "move_123": "Quebra-telha", - "move_124": "Cortar", - "move_125": "Ataque Veloz", - "move_126": "Ataque de Chifre", - "move_127": "Pisotear", - "move_128": "Cabeçada", - "move_129": "Hiperpresa", - "move_130": "Pancada Brusca", - "move_131": "Pancada Corporal", - "move_132": "Descansar", - "move_133": "Insistência", - "move_134": "Escaldada", - "move_135": "Jato d'Água", - "move_136": "Embrulho", - "move_137": "Embrulho", - "move_200": "Cortador de Fúria", - "move_201": "Picada", - "move_202": "Mordida", - "move_203": "Soco Enganador", - "move_204": "Sopro do Dragão", - "move_205": "Trovoada de Choques", - "move_206": "Faísca", - "move_207": "Rasteira", - "move_208": "Golpe de Caratê", - "move_209": "Brasa", - "move_210": "Ataque de Asa", - "move_211": "Bicada", - "move_212": "Lambida", - "move_213": "Garra Sombria", - "move_214": "Chicote de Vinha", - "move_215": "Folha Navalha", - "move_216": "Tiro de Lama", - "move_217": "Caco de Gelo", - "move_218": "Respiração de Gelo", - "move_219": "Ataque Rápido", - "move_220": "Arranhão", - "move_221": "Investida", - "move_222": "Pancada", - "move_223": "Cortar", - "move_224": "Golpe Envenenado", - "move_225": "Ácido", - "move_226": "Corte Psíquico", - "move_227": "Lançamento de Rocha", - "move_228": "Garra de Metal", - "move_229": "Soco Projétil", - "move_230": "Revólver d'Água", - "move_231": "Borrifada", - "move_232": "Revólver d'Água", - "move_233": "Tapa de Lama", - "move_234": "Cabeçada Zen", - "move_235": "Confusão", - "move_236": "Ferrão Venenoso", - "move_237": "Bolha", - "move_238": "Ataque Dissimulado", - "move_239": "Asa de Aço", - "move_240": "Presas de Fogo", - "move_241": "Esmagamento de Pedras", - "move_242": "Transformação", - "move_243": "Contra-atacar", - "move_244": "Neve em Pó", - "move_245": "Corpo-a-corpo", - "move_246": "Soco Dinâmico", - "move_247": "Explosão Focalizada", - "move_248": "Raio Aurora", - "move_249": "Carga de Raio", - "move_250": "Troca Elétrica", - "move_251": "Ataque Selvagem", - "move_252": "Canhão Zap", - "move_253": "Cauda do Dragão", - "move_254": "Avalanche", - "move_255": "Golpe de Ar", - "move_256": "Pássaro Bravo", - "move_257": "Ataque do Céu", - "move_258": "Fosso de Areia", - "move_259": "Explosão de Rocha", - "move_260": "Infestação", - "move_261": "Ira de Inseto", - "move_262": "Vento Prateado", - "move_263": "Abismar", - "move_264": "Feitiço", - "move_265": "Sombra Noturna", - "move_266": "Cauda de Ferro", - "move_267": "Girobola", - "move_268": "Golpe Pesado", - "move_269": "Chama Furacão", - "move_270": "Superaquecimento", - "move_271": "Projétil de Semente", - "move_272": "Nó de Grama", - "move_273": "Bola de Energia", - "move_274": "Extrassensorial", - "move_275": "Visão do Futuro", - "move_276": "Casaco Espelhado", - "move_277": "Ultraje", - "move_278": "Rosnado", - "move_279": "Mastigada", - "move_280": "Jogo Sujo", - "move_281": "Poder Oculto", - "move_287": "Bocejo", - "move_282": "Desmantelar", - "move_285": "Meteoro do Dragão", - "move_283": "Cachoeira", - "move_284": "Surfar", - "move_288": "Impulso Psíquico", - "move_286": "Desejo Cruel", - "move_290": "Lâmina Abissal", - "move_289": "Pulso Original", - "move_291": "Presente", - "move_292": "Esfera Climática", - "move_293": "Esfera Climática", - "move_294": "Esfera Climática", - "move_295": "Esfera Climática", - "move_296": "Planta Mortal", - "move_298": "Queimadura Explosiva", - "move_297": "Derrubada", - "move_299": "Hidro Canhão", - "move_300": "Último Recurso", - "move_301": "Meteoro Esmagador", - "move_302": "Quebra-crânio", - "move_303": "Spray Ácido", - "move_304": "Poder da Terra", - "move_305": "Martelo Caranguejo", - "move_306": "Estocada", - "move_307": "Garra Esmagadora", - "move_308": "Polvo-canhão", - "move_309": "Tiro no Espelho", - "move_310": "Superpoder", - "move_311": "Ferrão Letal", - "move_312": "Tornado de Folhas", - "move_313": "Suga-vidas", - "move_314": "Soco Dreno", - "move_315": "Osso Sombrio", - "move_316": "Água Barrenta", - "move_317": "Chute Labareda", - "move_318": "Concha Navalha", - "move_319": "Soco Empoderador", - "move_320": "Encantar", - "move_321": "Gigaimpacto", - "move_322": "Frustração", - "move_323": "Retorno", - "move_324": "Barulho Sincronizado", - "move_325": "Mirar", - "move_326": "Presa Trovejante", - "move_327": "Presa de Gelo", - "move_328": "Chifre Broca", - "move_329": "Fissura", - "move_330": "Espada Sagrada", - "move_331": "Aperto Voador", - "move_332": "Aura Esférica", - "move_333": "Revide", - "move_334": "Demolidor de Pedras", - "move_335": "Explosão Aérea", - "move_336": "Techno Blast Normal", - "move_337": "Techno Blast Burn", - "move_338": "Techno Blast Chill", - "move_339": "Techno Blast Water", - "move_340": "Techno Blast Shock", - "move_341": "Voar" -} diff --git a/static/locale/th.json b/static/locale/th.json deleted file mode 100644 index b6b69e4d..00000000 --- a/static/locale/th.json +++ /dev/null @@ -1,3628 +0,0 @@ -{ - "UNKNOWN_POKESTOP": "Unknown Pokestop", - "EMBED_DIRECTIONS": "DIRECTIONS", - "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{0} Subscriptions are not enabled in the config.", - "MSG_NOT_MODERATOR_OR_HIGHER": "{0} is not a moderator or higher thus you may not see other's subscription settings.", - "MSG_INVALID_USER_MENTION": "{0} Failed to retrieve user with mention tag {1}.", - "MSG_USER_NOT_SUBSCRIBED": "{0} is not currently subscribed to any Pokemon or Raid notifications.", - "TIME_YEARS": "years", - "TIME_DAYS": "days", - "TIME_HOURS": "hours", - "TIME_MINUTES": "minutes", - "TIME_SECONDS": "seconds", - "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", - "NOTIFY_ENABLE_DISABLE": "{0} has **{1}d** Pokemon, Raid, Quest, and Invasion notifications.", - "NOTIFY_INVALID_COORDINATES": "{0} Unable not parse {1} as valid coordinates.", - "NOTIFY_DISTANCE_SET": "{0} Notifications only within a {1} meter radius of location {2},{3} will be sent.", - "NOTIFY_PHONE_NUMBER_SET": "{0} Text message notifications for ultra rare Pokemon will be sent to {1}.", - "NOTIFY_INVALID_IV_VALUES": "{0} {1} is not a valid value. (Example: `0-15-6`)", - "NOTIFY_INVALID_ATTACK_VALUE": "{0} {1} is not a valid attack value. Must be between `0-15`.", - "NOTIFY_INVALID_DEFENSE_VALUE": "{0} {1} is not a valid defense value. Must be between `0-15`.", - "NOTIFY_INVALID_STAMINA_VALUE": "{0} {1} is not a valid stamina value. Must be between `0-15`.", - "NOTIFY_INVALID_IV_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_INVALID_GENDER": "{0} {1} is not a valid gender. (i.e. `m`, `f`, `*`)", - "NOTIFY_INVALID_LEVEL": "{0} {1} must be within the range of `0-35`.", - "NOTIFY_INVALID_MINIMUM_IV": "{0} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", - "NOTIFY_INVALID_MINIMUM_LEVEL": "{0} Failed to parse minimum level provided '{1}'.", - "NOTIFY_INVALID_MAXIMUM_LEVEL": "{0} Failed to parse maximum level provided '{1}'.", - "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{0} {1} are not valid Pokemon names or IDs.", - "NOTIFY_INVALID_POKEMON_ID_OR_NAME": "{0} {1} are not valid Pokemon name or ID.", - "NOTIFY_INVALID_POKEMON_ID": "{0} {1} is not a valid Pokemon id.", - "NOTIFY_COMMON_TYPE_POKEMON": "{0} {1} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {2}% or higher.", - "NOTIFY_INVALID_POKEMON_SPECIFIED": "{0} Unable to recognize any of the Pokemon you specified.", - "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{0} is not subscribed to any Pokemon notifications.", - "NOTIFY_INVALID_PVP_LEAGUE": "{0} {1} is not a valid PvP league. (Great or Ultra)", - "NOTIFY_INVALID_PVP_RANK_RANGE": "{0} {1} must be within the range of `0-4096`.", - "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokemon notifications.", - "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} Unable to remove {1} Pokemon subscriptions.", - "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Pokemon notifications.", - "NOTIFY_INVALID_CITY_ROLE": "{0} {1} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", - "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} has unsubscribed from **all** raid boss notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} has unsubscribed from **all** quest notifications.", - "NOTIFY_INVALID_INVASION_GENDER": "{0} Please specify a gender. i.e. `.invmenot fire-m` or `.invmenot water-f ontario or `.invmenot giovanni`", - "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Team Rocket invasion notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokestop lure notifications.", - "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{0} added gym subscription `{1}` to your list of gyms to receive raid notifications from.", - "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{0} already subscribed to gym notifications from {1}.", - "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{0} Removed gym subscription `{1}` from your list of gyms to receive notifications from.", - "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} has unsubscribed from **all** gym notifications.", - "NOTIFY_INVALID_ICON_STYLE": "{0} invalid icon style, type `{1}icons` to see a list of valid options.", - "NOTIFY_ICON_STYLE_CHANGE": "{0} Icon style changed to **{1}**.", - "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Raid subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Quest subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Team Rocket Invasion subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Gym subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Lure subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_IMPORT_UPLOAD_FILE": "{0} Please upload your subscriptions.json file to import now within 3 minutes...", - "NOTIFY_IMPORT_MALFORMED_DATA": "{0} Malformed subscription data, unable to import.", - "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{0} Unable to get uploaded attachment.", - "NOTIFY_IMPORT_SUCCESS": "{0} subscriptions were imported successfully.", - "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{0} does not have any subscriptions to export.", - "NOTIFY_EXPORT_SUCCESS": "{0} Download your subscription settings here.", - "NOTIFY_SETTINGS_EMBED_TITLE": "**{0} Notification Settings (Page: {1}/{2}):**", - "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{0}**", - "NOTIFY_SETTINGS_EMBED_CITIES": "Pokemon Feed Zones: ```{0}```", - "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", - "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{0} meters (Location: {1})", - "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{0}**", - "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {0}% ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {0} ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({0}/{1} used)", - "NOTIFY_FROM": "{0} (From: {1})", - "ALL_AREAS": "All Areas", - "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", - "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{0}feedme cityname` to assign yourself to that city role.*", - "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{0} {1} is not a valid city name, type `{2}cities` to see a list of available cities.", - "FEEDS_INVALID_CITY_NAME": "{0} {1} is not a valid city name.", - "FEEDS_ASSIGNED_ALL_ROLES": "{0} was assigned all city feed roles.", - "FEEDS_UNASSIGNED_ALL_ROLES": "{0} was unassigned all city feed roles.", - "FEEDS_ASSIGNED_ROLES": "{0} has joined role(s) **{1}**.", - "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{0} is already assigned to role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES": "{0} has been removed from role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{0} is not assigned to role(s) **{1}**.", - "FEEDS_PLEASE_WAIT": "{0} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", - "CHANNEL_MESSAGES_DELETED": "{0} Channel {1} messages have been deleted.", - "GYM_NO_POKESTOPS_CONVERTED": "{0} No Pokestops have been converted to Gyms.", - "GYM_NO_POKESTOPS_UPDATED": "{0} No Pokestops have been updated.", - "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", - "GYM_UNKNOWN_NAME": "Unknown Gym Name", - "GYM_UNKNOWN_IMAGE": "Unknown Image Url", - "GYM_POKESTOPS_CONVERTED": "{0} {1} Pokestops updated to Gyms.", - "GYM_POKESTOPS_DELETED": "{0} {1} Pokestops deleted.", - "GYM_NAME": "- **{0}**", - "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({1})] [[Gym Image]({0})]", - "SHINY_STATS_INVALID_CHANNEL": "{0} Shiny stats channel does not exist.", - "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {0}**]", - "SHINY_STATS_NEWLINE": "----------------------------------------------", - "SHINY_STATS_MESSAGE": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours with a **1/{4}** ratio.", - "SHINY_STATS_TOTAL_MESSAGE": "Found **{0}** total shinies out of **{1}** possiblities.", - "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{0}** total shinies out of **{1}** possiblities with a **1/{2}** ratio in total.", - "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", - "ERROR_NESTS_DISABLED": "{0} Nests disabled.", - "ERROR_NESTS_LIST": "{0} Unable to retrieve nest list.", - "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {0} of {1} total members.", - "ERROR_PARSING_USER_ID": "{0} Unable to recognize user id {1}.", - "DONATE_MESSAGE": "{0} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", - "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", - "SUBSCRIPTIONS_FROM_CITY": " from city **{0}**", - "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** lure notifications{2}.", - "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** lure notifications{2}.", - "ERROR_NO_LURE_SUBSCRIPTIONS": "{0} is not subscribed to any lure notifications{1}.", - "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** raid notifications{2}.", - "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** raid notifications{2}.", - "ERROR_NO_RAID_SUBSCRIPTIONS": "{0} is not subscribed to any raid notifications{1}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** quest notifications{2}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** quest notifications{2}.", - "ERROR_NO_QUEST_SUBSCRIPTIONS": "{0} is not subscribed to any quest notifications{1}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** Team Rocket invasion reward notifications{2}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Team Rocket invasion reward notifications{2}.", - "ERROR_NO_INVASION_SUBSCRIPTIONS": "{0} is not subscribed to any Team Rocket invasion notifications{1}.", - "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** {2} League PvP notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your {2} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} has unsubscribed from **all** {1} League PvP Pokemon notifications.", - "EVENT_POKEMON_SET": "{0} event Pokemon set to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_ADD": "{0} event Pokemon added to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_REMOVE": "{0} event Pokemon `{1}` removed.", - "DIRECT_MESSAGE_NOT_SUPPORTED": "{0} Direct message is not supported for this command.", - "PVP_GREAT_LEAGUE": "Great League", - "PVP_ULTRA_LEAGUE": "Ultra League", - "PVP_RANK": "Rank", - "PVP_CP": "CP", - "weather_0": "None", - "weather_1": "Clear", - "weather_2": "Rainy", - "weather_3": "PartlyCloudy", - "weather_4": "Cloudy", - "weather_5": "Windy", - "weather_6": "Snow", - "weather_7": "Fog", - "quest_1": "{0} time(s) First Catch OTD", - "quest_2": "{0} time(s) First Pokestop OTD", - "quest_3": "Multi Part Quest", - "quest_4": "Catch {0} Pokemon", - "quest_5": "Spin {0} Pokestop(s)", - "quest_6": "Hatch {0} Egg(s)", - "quest_7": "Complete {0} Gym Battle(s)", - "quest_8": "Complete {0} Raid Battle(s)", - "quest_9": "Complete {0} Quest", - "quest_10": "Transfer {0} Pokemon", - "quest_11": "Favorite {0} Pokemon", - "quest_12": "Autocomplete", - "quest_13": "Use {0} Berries on Pokemon", - "quest_14": "Power up {0} Pokemon", - "quest_15": "Evolve {0} Pokemon", - "quest_16": "Land {0} Throw(s)", - "quest_17": "Get {0} Buddy candy", - "quest_18": "Get {0} Badge(s)", - "quest_19": "Get {0} Level", - "quest_20": "Join {0} Raid Battle(s)", - "quest_21": "Complete {0} Battle(s)", - "quest_22": "Add {0} Friend(s)", - "quest_23": "Trade {0} Pokemon", - "quest_24": "Send {0} Gift(s)", - "quest_25": "Evolve {0} Into Specific Pokemon", - "quest_27": "Complete {0} Combat(s)", - "quest_28": "Take {0} Snapshot(s)", - "quest_29": "Battle {0} Team Rocket Battle(s)", - "quest_30": "Purify {0} Pokemon", - "quest_31": "Find {0} Team Rocket Invasion(s)", - "quest_32": "{0} time(s) First Grunt OTD", - "quest_33": "Feed your Buddy {0} times", - "quest_34": "Earn {0} hearts with your Buddy", - "quest_35": "Play {0} times with your Buddy", - "quest_36": "Increase your Buddy Level {0} times", - "quest_37": "Earn {0} Friendship points by Walking with your Buddy", - "quest_38": "Earn {0} Souvenirs from your Buddy", - "quest_39": "Use Incense {0} times", - "quest_40": "quest_40", - "quest_41": "quest_41", - "quest_42": "quest_42", - "quest_43": "Mega-Evolve {0} Pokemon", - "quest_44": "quest_44", - "quest_45": "quest_45", - "quest_57": "Take {0} Snapshot(s) of wild Pokemon", - "quest_reward_1": "{0:N0} XP", - "quest_reward_2": "{0} {1}", - "quest_reward_3": "{0:N0} Stardust", - "quest_reward_4": "{0} {1} Candy", - "quest_reward_5": "Avatar Clothing", - "quest_reward_6": "Quest", - "quest_reward_7": "{0}", - "quest_reward_8": "{0:N0} Pokecoins", - "quest_reward_11": "Sticker", - "quest_reward_12": "Mega Energy", - "quest_condition_1": "Type(s): {0}", - "quest_condition_2": "Pokemon: {0}", - "quest_condition_3": "Weather Boosted", - "quest_condition_4": "Daily Capture Bonus", - "quest_condition_5": "Daily Spin Bonus", - "quest_condition_6": "Win Raid", - "quest_condition_7": "Raid Level(s): {0}", - "quest_condition_8": "{0} Throw", - "quest_condition_9": "Win Gym Battle", - "quest_condition_10": "Super Effective Charge", - "quest_condition_11": "Item: {0}", - "quest_condition_12": "Unique Pokestop", - "quest_condition_13": "Quest Context", - "quest_condition_14": "{0} Throw In a Row", - "quest_condition_15": "Curve Ball", - "quest_condition_16": "Badge Type", - "quest_condition_17": "Player Level", - "quest_condition_18": "Win Battle", - "quest_condition_19": "New Friend", - "quest_condition_20": "Days In a Row", - "quest_condition_21": "Unique Pokemon", - "quest_condition_22": "NPC Combat", - "quest_condition_23": "PVP Combat", - "quest_condition_24": "Location", - "quest_condition_25": "Distance", - "quest_condition_26": "Pokemon Alignment(s): {0}", - "quest_condition_27": "Invasion Category(s): {0}", - "quest_condition_28": "With Buddy", - "quest_condition_37": "With Mega Evo Pokemon", - "alignment_1": "Shadow", - "alignment_2": "Purified", - "character_category_1": "Team Leader", - "character_category_2": "Grunt", - "throw_type_10": "Nice", - "throw_type_11": "Great", - "throw_type_12": "Excellent", - "throw_type_13": "Curve", - "item_1": "มอนสเตอร์บอล", - "item_2": "ซูเปอร์บอล", - "item_3": "ไฮเปอร์บอล", - "item_4": "มาสเตอร์บอล", - "item_5": "Premier Ball", - "item_101": "ยารักษาแผล", - "item_102": "ยารักษาแผลอย่างดี", - "item_103": "ยารักษาแผลชั้นยอด", - "item_104": "ยาฟื้นพลังกายเต็มถัง", - "item_201": "ยาคืนชีพ", - "item_202": "ยาคืนชีพชั้นยอด", - "item_301": "ไข่แห่งความสุข", - "item_401": "เครื่องหอม", - "item_402": "Spicy Incense", - "item_403": "Cool Incense", - "item_404": "Floral Incense", - "item_501": "อุปกรณ์ปล่อยลัวร์", - "item_502": "อุปกรณ์ปล่อยลัวร์เกล็ดน้ำแข็ง", - "item_503": "อุปกรณ์ปล่อยลัวร์มอส", - "item_504": "อุปกรณ์ปล่อยลัวร์แม่เหล็ก", - "item_602": "เพิ่มพลังโจมตี", - "item_603": "เพิ่มพลังป้องกัน", - "item_604": "UNDEFINED", - "item_701": "ผลราส", - "item_702": "ผลแบลร์", - "item_703": "ผลนานา", - "item_704": "ผลเซชินะ", - "item_705": "ผลไพน์", - "item_706": "ผลราสทองคำ", - "item_707": "Golden Nanab Berry", - "item_708": "ผลไพน์สีเงิน", - "item_801": "กล้องถ่ายรูป", - "item_901": "เครื่องฟักไข่ ∞", - "item_902": "เครื่องฟักไข่", - "item_903": "เครื่องฟักไข่ชั้นเยี่ยม", - "item_1001": "Pokemon Storage Upgrade", - "item_1002": "Item Storage Upgrade", - "item_1101": "หินพระอาทิตย์", - "item_1102": "สัญลักษณ์แห่งราชา", - "item_1103": "ฟิล์มโลหะ", - "item_1104": "เกล็ดมังกร", - "item_1105": "อัปเกรด", - "item_1106": "หินชินโอ", - "item_1107": "หินอิชชู", - "item_1201": "TM ท่าเร็ว", - "item_1202": "TM ท่าชาร์จ", - "item_1301": "ลูกอมประหลาด", - "item_1401": "บัตรตีบอส", - "item_1402": "บัตรแบตเทิลพรีเมียม", - "item_1403": "บัตรตีบอส EX", - "item_1404": "สตาร์พีซ", - "item_1405": "ของขวัญ", - "lure_501": "Normal", - "lure_502": "Glacial", - "lure_503": "Mossy", - "lure_504": "Magnetic", - "grunt_0": "None", - "grunt_1": "บลองช์", - "grunt_2": "แคนเดลา", - "grunt_3": "สปาร์ก", - "grunt_4": "ลูกสมุน (male)", - "grunt_5": "ลูกสมุน (female)", - "grunt_6": "แมลง - ลูกสมุน (female)", - "grunt_7": "แมลง - ลูกสมุน (male)", - "grunt_8": "Darkness - Female Grunt", - "grunt_9": "Darkness - Male Grunt", - "grunt_10": "ความมืด - ลูกสมุน (female)", - "grunt_11": "ความมืด - ลูกสมุน (male)", - "grunt_12": "มังกร - ลูกสมุน (female)", - "grunt_13": "มังกร - ลูกสมุน (male)", - "grunt_14": "แฟรี่ - ลูกสมุน (female)", - "grunt_15": "แฟรี่ - ลูกสมุน (male)", - "grunt_16": "ต่อสู้ - ลูกสมุน (female)", - "grunt_17": "ต่อสู้ - ลูกสมุน (male)", - "grunt_18": "ไฟ - ลูกสมุน (female)", - "grunt_19": "ไฟ - ลูกสมุน (male)", - "grunt_20": "บิน - ลูกสมุน (female)", - "grunt_21": "บิน - ลูกสมุน (male)", - "grunt_22": "หญ้า - ลูกสมุน (female)", - "grunt_23": "หญ้า - ลูกสมุน (male)", - "grunt_24": "ดิน - ลูกสมุน (female)", - "grunt_25": "ดิน - ลูกสมุน (male)", - "grunt_26": "น้ำแข็ง - ลูกสมุน (female)", - "grunt_27": "น้ำแข็ง - ลูกสมุน (male)", - "grunt_28": "ลูกสมุน (female)", - "grunt_29": "ลูกสมุน (male)", - "grunt_30": "ปกติ - ลูกสมุน (female)", - "grunt_31": "ปกติ - ลูกสมุน (male)", - "grunt_32": "พิษ - ลูกสมุน (female)", - "grunt_33": "พิษ - ลูกสมุน (male)", - "grunt_34": "พลังจิต - ลูกสมุน (female)", - "grunt_35": "พลังจิต - ลูกสมุน (male)", - "grunt_36": "หิน - ลูกสมุน (female)", - "grunt_37": "หิน - ลูกสมุน (male)", - "grunt_38": "น้ำ - ลูกสมุน (female)", - "grunt_39": "น้ำ - ลูกสมุน (male)", - "grunt_40": "Player Team Leader", - "grunt_41": "หัวหน้าคลิฟ", - "grunt_42": "หัวหน้าอาร์โล", - "grunt_43": "หัวหน้าเซียร์รา", - "grunt_44": "ซากากิ", - "grunt_45": "ลูกสมุนนกต่อ (male)", - "grunt_46": "ลูกสมุนนกต่อ (female)", - "grunt_47": "ผี - ลูกสมุน (female)", - "grunt_48": "ผี - ลูกสมุน (male)", - "grunt_49": "ไฟฟ้า - ลูกสมุน (female)", - "grunt_50": "ไฟฟ้า - ลูกสมุน (male)", - "poke_0": "--", - "poke_1": "ฟุชิกิดาเนะ", - "poke_2": "ฟุชิกิโซ", - "poke_3": "ฟุชิกิบานะ", - "poke_4": "ฮิโตคาเงะ", - "poke_5": "ลิซาร์โดะ", - "poke_6": "ลิซาร์ดอน", - "poke_7": "เซนิกาเมะ", - "poke_8": "คาเมล", - "poke_9": "คาเม็กซ์", - "poke_10": "คาเตอร์ปี", - "poke_11": "ทรานเซล", - "poke_12": "บัตเตอร์ฟรี", - "poke_13": "บีเดิล", - "poke_14": "โคคูน", - "poke_15": "สเปียร์", - "poke_16": "ป็อปโปะ", - "poke_17": "พีเจียน", - "poke_18": "พีเจียต", - "poke_19": "โครัตตา", - "poke_20": "รัตตา", - "poke_21": "โอนิสึซึเมะ", - "poke_22": "โอนิดริล", - "poke_23": "อาร์โบ", - "poke_24": "อาร์บอก", - "poke_25": "พิคาชู", - "poke_26": "ไรชู", - "poke_27": "แซนด์", - "poke_28": "แซนด์แพน", - "poke_29": "นิโดรัน♀", - "poke_30": "นิโดรินา", - "poke_31": "นิโดควีน", - "poke_32": "นิโดรัน♂", - "poke_33": "นิโดริโน", - "poke_34": "นิโดคิง", - "poke_35": "ปิปปี", - "poke_36": "ปิคซี", - "poke_37": "โรคอน", - "poke_38": "คิวคอน", - "poke_39": "พูริน", - "poke_40": "พูคูริน", - "poke_41": "ซูแบท", - "poke_42": "โกลแบท", - "poke_43": "นาโซโนะคุสะ", - "poke_44": "คุไซฮานะ", - "poke_45": "รัฟเฟรเซีย", - "poke_46": "พารัส", - "poke_47": "พาราเซ็คท์", - "poke_48": "คองปัง", - "poke_49": "มอร์ฟอน", - "poke_50": "ดิกดา", - "poke_51": "ดักทริโอ", - "poke_52": "เนียส", - "poke_53": "เปอร์เซียน", - "poke_54": "โคดัก", - "poke_55": "โกลดัก", - "poke_56": "แมนคี", - "poke_57": "โอโคริซารุ", - "poke_58": "การ์ดี", - "poke_59": "วินดี", - "poke_60": "เนียวโรโมะ", - "poke_61": "เนียวโรโซ", - "poke_62": "เนียวโรบอน", - "poke_63": "เคซี", - "poke_64": "ยุนเกเรอร์", - "poke_65": "ฟูดิน", - "poke_66": "วันริกี", - "poke_67": "โกริกี", - "poke_68": "ไคริกี", - "poke_69": "มาดาซึโบมิ", - "poke_70": "อุซึดง", - "poke_71": "อุซึบ็อท", - "poke_72": "เมโนคุราเกะ", - "poke_73": "โดคุคุราเกะ", - "poke_74": "อิชิซึบูเตะ", - "poke_75": "โกโลน", - "poke_76": "โกโลเนีย", - "poke_77": "โพนีตะ", - "poke_78": "แกลล็อป", - "poke_79": "ยาดง", - "poke_80": "ยาโดรัน", - "poke_81": "คอยล์", - "poke_82": "แรคอยล์", - "poke_83": "คาโมเนกิ", - "poke_84": "โดโด", - "poke_85": "โดโดริโอ", - "poke_86": "พาเวา", - "poke_87": "จูกอน", - "poke_88": "เบ็ทเบเตอร์", - "poke_89": "เบ็ทเบตัน", - "poke_90": "เชลเดอร์", - "poke_91": "พาร์เชน", - "poke_92": "โกส", - "poke_93": "โกสท์", - "poke_94": "เก็งกา", - "poke_95": "อิวาร์ค", - "poke_96": "สลีป", - "poke_97": "สลีปเปอร์", - "poke_98": "แครบ", - "poke_99": "คิงเกลอร์", - "poke_100": "บิริริดามา", - "poke_101": "มารุมายน์", - "poke_102": "ทามะทามะ", - "poke_103": "นัชชี", - "poke_104": "คาระคาระ", - "poke_105": "การะการะ", - "poke_106": "ซาวามูลาร์", - "poke_107": "เอบิวาลาร์", - "poke_108": "เบโรรินกา", - "poke_109": "โดกาซ", - "poke_110": "มาตาโดกัซ", - "poke_111": "ไซฮอร์น", - "poke_112": "ไซดอน", - "poke_113": "ลัคกี", - "poke_114": "มอนจารา", - "poke_115": "การูรา", - "poke_116": "ทัททู", - "poke_117": "ซีดรา", - "poke_118": "โทซาคินโตะ", - "poke_119": "อซึมาโอ", - "poke_120": "ฮิโตเดมัน", - "poke_121": "สตาร์มี", - "poke_122": "บาร์เรียด", - "poke_123": "สไตรค์", - "poke_124": "รูจูลา", - "poke_125": "เอเลบู", - "poke_126": "บูเบอร์", - "poke_127": "ไคลอส", - "poke_128": "เคนเทารอส", - "poke_129": "คอยคิง", - "poke_130": "เกียราดอส", - "poke_131": "ลาพลาซ", - "poke_132": "เมตามอน", - "poke_133": "อีวุย", - "poke_134": "ชาวเวอร์ส", - "poke_135": "ธันเดอร์ส", - "poke_136": "บูสเตอร์", - "poke_137": "โพรีกอน", - "poke_138": "ออมไนต์", - "poke_139": "ออมสตาร์", - "poke_140": "คาบูโตะ", - "poke_141": "คาบูท็อปส์", - "poke_142": "พเทอรา", - "poke_143": "คาบิกอน", - "poke_144": "ฟรีเซอร์", - "poke_145": "ธันเดอร์", - "poke_146": "ไฟเยอร์", - "poke_147": "มินิริว", - "poke_148": "ฮาคุริว", - "poke_149": "ไคริว", - "poke_150": "มิวทู", - "poke_151": "มิว", - "poke_152": "จิโคริตา", - "poke_153": "เบย์ลีฟ", - "poke_154": "เมกาเนียม", - "poke_155": "ฮิโนอาราชิ", - "poke_156": "แม็กมาราชิ", - "poke_157": "แบ็กฟูน", - "poke_158": "วานิโนโกะ", - "poke_159": "อัลลิเกต", - "poke_160": "ออไดล์", - "poke_161": "โอทาจิ", - "poke_162": "โอโอทาจิ", - "poke_163": "โฮโฮ", - "poke_164": "โยรุโนะซึคุ", - "poke_165": "เรดิบา", - "poke_166": "เรเดียน", - "poke_167": "อิโตมารุ", - "poke_168": "อาริอาโดส", - "poke_169": "โครแบท", - "poke_170": "ชอนชี", - "poke_171": "แลนเทอร์น", - "poke_172": "พิชู", - "poke_173": "ปี", - "poke_174": "พูพูริน", - "poke_175": "โทเกปี", - "poke_176": "โทเกชิก", - "poke_177": "เนที", - "poke_178": "เนทิโอ", - "poke_179": "เมรีป", - "poke_180": "โมโคโค", - "poke_181": "เด็นริว", - "poke_182": "คิเรอิฮานะ", - "poke_183": "มาริล", - "poke_184": "มาริลลิ", - "poke_185": "อุซกกี", - "poke_186": "นิวโรโทโน", - "poke_187": "ฮาเน็กโกะ", - "poke_188": "โพพ็อกโกะ", - "poke_189": "วาทักโกะ", - "poke_190": "เอย์แพม", - "poke_191": "ฮิมานัทส์", - "poke_192": "คิมาวาริ", - "poke_193": "ยันยันมา", - "poke_194": "อูปา", - "poke_195": "นูโอ", - "poke_196": "เอฟี", - "poke_197": "แบล็กกี", - "poke_198": "ยามิคาราซึ", - "poke_199": "ยาโดคิง", - "poke_200": "มูมา", - "poke_201": "อันโนน", - "poke_202": "โซนานส์", - "poke_203": "คิรินริกิ", - "poke_204": "คุนุกิดามะ", - "poke_205": "ฟอเรทอส", - "poke_206": "โนก็อจจิ", - "poke_207": "ไกลกา", - "poke_208": "ฮากาเนล", - "poke_209": "บูล", - "poke_210": "แกรนบูล", - "poke_211": "ฮารีเซน", - "poke_212": "ฮัซซัม", - "poke_213": "ซึโบซึโบะ", - "poke_214": "เฮราครอส", - "poke_215": "นิวลา", - "poke_216": "ฮิเมกุมะ", - "poke_217": "ริงกุมะ", - "poke_218": "มักแม็ก", - "poke_219": "มักคาร์โก", - "poke_220": "อุริมู", - "poke_221": "อิโนมู", - "poke_222": "ซันนีโก", - "poke_223": "เทปโปโอ", - "poke_224": "ออคตัน", - "poke_225": "เดลิเบิร์ด", - "poke_226": "แมนไทน์", - "poke_227": "แอร์มุโด", - "poke_228": "เดลวิล", - "poke_229": "เฮลการ์", - "poke_230": "คิงดรา", - "poke_231": "โกมาโซ", - "poke_232": "ดอนแฟน", - "poke_233": "โพรีกอน2", - "poke_234": "โอโดชิชิ", - "poke_235": "โดเบิล", - "poke_236": "บัลกี", - "poke_237": "คาโพเอลาร์", - "poke_238": "มุจูล", - "poke_239": "เอเลคิด", - "poke_240": "บูบี", - "poke_241": "มิลแทงค์", - "poke_242": "แฮปปีนาส", - "poke_243": "ไรโค", - "poke_244": "เอ็นเต", - "poke_245": "ซุยคูน", - "poke_246": "โยกิราส", - "poke_247": "ซานากิราส", - "poke_248": "บันกิราส", - "poke_249": "ลูเกีย", - "poke_250": "โฮโอ", - "poke_251": "เซเลบี", - "poke_252": "คิโมริ", - "poke_253": "จุปไทล์", - "poke_254": "จูไคน", - "poke_255": "อาชาโม", - "poke_256": "วาคาชาโม", - "poke_257": "บาชาโม", - "poke_258": "มิซึโกโร", - "poke_259": "นูมาโคร", - "poke_260": "ลากลาจ", - "poke_261": "โปชิเอนา", - "poke_262": "กราเอนา", - "poke_263": "จิกุซากุมะ", - "poke_264": "มัสสึกุมะ", - "poke_265": "เคมุตโสะ", - "poke_266": "คาราซาลิส", - "poke_267": "อาเกฮันท์", - "poke_268": "มายูลด์", - "poke_269": "โดคุเคล", - "poke_270": "ฮาซึโบ", - "poke_271": "ฮาซึเบรโร", - "poke_272": "รุนปัปปา", - "poke_273": "ทาเนโบ", - "poke_274": "โคโนฮานะ", - "poke_275": "ดาเทนกุ", - "poke_276": "สึบาเมะ", - "poke_277": "โอโอสึบาเมะ", - "poke_278": "คาโมเมะ", - "poke_279": "เพลิปเปอร์", - "poke_280": "ราลท์ซ", - "poke_281": "เคอเรีย", - "poke_282": "เซอไนท์", - "poke_283": "อาเมทามะ", - "poke_284": "อาเมมอธ", - "poke_285": "คิโนโคโค", - "poke_286": "คิโนกัซซา", - "poke_287": "นามาเคโร", - "poke_288": "ยารุคิโมโนะ", - "poke_289": "เค็คคิง", - "poke_290": "ซึชินิน", - "poke_291": "เท็คคานิน", - "poke_292": "นูเคนิน", - "poke_293": "โกเนียวเนียว", - "poke_294": "โดกอม", - "poke_295": "บาคุองก์", - "poke_296": "มาคุโนชิตะ", - "poke_297": "ฮาริเทยามะ", - "poke_298": "รูริริ", - "poke_299": "โนซพาส", - "poke_300": "เอเนโค", - "poke_301": "เอเนโคโรโระ", - "poke_302": "ยามิรามิ", - "poke_303": "คูชีท", - "poke_304": "โคโคโดรา", - "poke_305": "โคโดรา", - "poke_306": "บอสโกโดรา", - "poke_307": "อาซานัน", - "poke_308": "ชาเรม", - "poke_309": "ราคุไร", - "poke_310": "ไลโวลต์", - "poke_311": "พราเซิล", - "poke_312": "ไมนัน", - "poke_313": "บารูบีท", - "poke_314": "อิลูมิเซะ", - "poke_315": "โรเซเลีย", - "poke_316": "โกคูลิน", - "poke_317": "มารุโนม", - "poke_318": "คิบาเนีย", - "poke_319": "ซาเมฮาเดอร์", - "poke_320": "เวลโกะ", - "poke_321": "เวลโอ", - "poke_322": "ดอนเมล", - "poke_323": "บาคูดา", - "poke_324": "โคทอยซ์", - "poke_325": "บาเนบู", - "poke_326": "บูพิก", - "poke_327": "พัทชีล", - "poke_328": "นัคครา", - "poke_329": "วิบราวา", - "poke_330": "ฟลายกอน", - "poke_331": "ซาโบเนีย", - "poke_332": "น็อคทัส", - "poke_333": "ทิลท์โท", - "poke_334": "ทิลทาลิส", - "poke_335": "แซงกูส", - "poke_336": "ฮาบูเนค", - "poke_337": "ลูนาโทน", - "poke_338": "โซลร็อก", - "poke_339": "โดโจทช์", - "poke_340": "นามาซูน", - "poke_341": "เฮกานิ", - "poke_342": "ชิซาริเกอร์", - "poke_343": "ยาจิลอน", - "poke_344": "เนนดอลล์", - "poke_345": "ลิลีลา", - "poke_346": "ยูเรเดิล", - "poke_347": "อน็อปธ์", - "poke_348": "อามัลโด", - "poke_349": "ฮินบาส", - "poke_350": "มิโลคารอส", - "poke_351": "โปวาลุน", - "poke_352": "คาคุเลียน", - "poke_353": "คาเงะโบอุส", - "poke_354": "จุปเป็ตตะ", - "poke_355": "โยมาวารุ", - "poke_356": "ซามาโยรุ", - "poke_357": "โทรพิอุส", - "poke_358": "ชิรีน", - "poke_359": "แอบโซล", - "poke_360": "โซนาโนะ", - "poke_361": "ยูกิวาราชิ", - "poke_362": "โอนิโกริ", - "poke_363": "ทามาซาราชิ", - "poke_364": "โทดอกเกลอร์", - "poke_365": "โทโดเซรุกา", - "poke_366": "ปาลูลุ", - "poke_367": "ฮันเทล", - "poke_368": "ซาคุราบีส", - "poke_369": "จีแลนซ์", - "poke_370": "เลิฟคัส", - "poke_371": "ทัทซึเบ", - "poke_372": "โคโมรู", - "poke_373": "โบมันเดอร์", - "poke_374": "ดันบัล", - "poke_375": "เมแทงก์", - "poke_376": "เมทากรอส", - "poke_377": "เรจิร็อก", - "poke_378": "เรจิไอซ์", - "poke_379": "เรจิสตีล", - "poke_380": "ลาทิอาส", - "poke_381": "ลาทิโอส", - "poke_382": "ไคออกา", - "poke_383": "กราดอน", - "poke_384": "เร็คควอซา", - "poke_385": "จิราชิ", - "poke_386": "ดีอ็อกซิส", - "poke_387": "นาเอเติล", - "poke_388": "ฮายาชิกาเมะ", - "poke_389": "โดไดโทส", - "poke_390": "ฮิโกซารุ", - "poke_391": "โมคาซารุ", - "poke_392": "โกคาซารุ", - "poke_393": "โพจจามะ", - "poke_394": "โพจไทชิ", - "poke_395": "เอ็มเพลท์", - "poke_396": "มุคคูรุ", - "poke_397": "มุคูเบิร์ด", - "poke_398": "มุคูฮอว์ก", - "poke_399": "บิปปา", - "poke_400": "บีดารุ", - "poke_401": "โคโรโบชิ", - "poke_402": "โคโรท็อก", - "poke_403": "โคลิงก์", - "poke_404": "ลุคซิโอ", - "poke_405": "เร็นโทรา", - "poke_406": "ซึโบมี", - "poke_407": "โรสเรด", - "poke_408": "ซึไกโดส", - "poke_409": "แรมพาล์ด", - "poke_410": "ทาเทท็อปส์", - "poke_411": "โทริเด็ปส์", - "poke_412": "มิโนมุจจิ", - "poke_413": "มิโนมาดาม", - "poke_414": "กาเมล", - "poke_415": "มิทซึฮันนี", - "poke_416": "บีควิน", - "poke_417": "พาจิริซึ", - "poke_418": "บุยเซล", - "poke_419": "โฟลเซล", - "poke_420": "เชอรินโบ", - "poke_421": "เชอริม", - "poke_422": "คารานะคูชิ", - "poke_423": "ไทรโทดอน", - "poke_424": "เอเทโบธ", - "poke_425": "ฟูวันเต", - "poke_426": "ฟูวาไรด์", - "poke_427": "มิมิโรล", - "poke_428": "มิมิล็อป", - "poke_429": "มูมาจิ", - "poke_430": "ดอนคาราซึ", - "poke_431": "เนียรุมา", - "poke_432": "บูเนียตโตะ", - "poke_433": "ลีชาน", - "poke_434": "สกังพู", - "poke_435": "สกาแทงค์", - "poke_436": "โดมิเรอร์", - "poke_437": "โดทาคุน", - "poke_438": "อุโซฮาจิ", - "poke_439": "มาเนเน", - "poke_440": "พินพูคุ", - "poke_441": "เพราป", - "poke_442": "มิคารูเกะ", - "poke_443": "ฟุคามารุ", - "poke_444": "กาไบต์", - "poke_445": "กาเบรียส", - "poke_446": "กอนเบะ", - "poke_447": "ริโอลุ", - "poke_448": "ลูคาริโอ", - "poke_449": "ฮิปโปโปตัส", - "poke_450": "คาบัลดอน", - "poke_451": "สกอร์ปี", - "poke_452": "โดราเปียน", - "poke_453": "กูเรกกรู", - "poke_454": "โดคูร็อก", - "poke_455": "มัสคิปปา", - "poke_456": "เคโคโอ", - "poke_457": "เนโอแลนท์", - "poke_458": "ทาแมนทา", - "poke_459": "ยูกิคาบูริ", - "poke_460": "ยูกิโน", - "poke_461": "มานิวลา", - "poke_462": "จิบะคอยล์", - "poke_463": "เบโรเบลท์", - "poke_464": "โดไซดอน", - "poke_465": "โมจัมโบ", - "poke_466": "เอเลคิเบิล", - "poke_467": "บูเบิร์น", - "poke_468": "โทเกคิส", - "poke_469": "เมกกะยันมะ", - "poke_470": "ลีเฟีย", - "poke_471": "กราเซีย", - "poke_472": "ไกลออน", - "poke_473": "แมมมู", - "poke_474": "โพรีกอน-แซด", - "poke_475": "เอรูเรโด", - "poke_476": "ไดโนซ", - "poke_477": "โยนัว", - "poke_478": "ยูกิเมโนโกะ", - "poke_479": "โรตอม", - "poke_480": "ยุคซี", - "poke_481": "เอ็มริต", - "poke_482": "อักนอม", - "poke_483": "ดีอัลกา", - "poke_484": "พัลเกีย", - "poke_485": "ฮีดราน", - "poke_486": "เรจิกิกัส", - "poke_487": "กิราตินา", - "poke_488": "เครเซเลีย", - "poke_489": "ฟีโอเน", - "poke_490": "มานาฟี", - "poke_491": "ดาร์กไร", - "poke_492": "เชมิน", - "poke_493": "อาร์เซอุส", - "poke_494": "วิคทินี", - "poke_495": "ซึทาจะ", - "poke_496": "จาโนวี", - "poke_497": "จาโลดา", - "poke_498": "โพคาบู", - "poke_499": "จาโอบู", - "poke_500": "เอ็นบูโอ", - "poke_501": "มิจูมารุ", - "poke_502": "ฟุตาจิมารุ", - "poke_503": "ไดเคนคิ", - "poke_504": "มิเนซูมิ", - "poke_505": "มิรูฮอก", - "poke_506": "โยเทอรี", - "poke_507": "เฮอเดอเรีย", - "poke_508": "มูแลนด์", - "poke_509": "โจโรเนโกะ", - "poke_510": "เลพัลดัส", - "poke_511": "ยานัปปุ", - "poke_512": "ยานักกี", - "poke_513": "บาอปปุ", - "poke_514": "บาอกกี", - "poke_515": "ฮิยัปปุ", - "poke_516": "ฮิยักกี", - "poke_517": "มุนนะ", - "poke_518": "มุชานา", - "poke_519": "มาเมพาโตะ", - "poke_520": "ฮาโทโบ", - "poke_521": "เคนโฮโล", - "poke_522": "ชิมามา", - "poke_523": "ซีบรายกา", - "poke_524": "ดันโกโร", - "poke_525": "กันเทิล", - "poke_526": "กิไกอาซ", - "poke_527": "โคโรโมริ", - "poke_528": "โคโคโรโมริ", - "poke_529": "โมกุริว", - "poke_530": "โดริวซึ", - "poke_531": "ทาบุนเนะ", - "poke_532": "ด็อคโคเรอร์", - "poke_533": "โดเท็คคทซึ", - "poke_534": "โรบูชิน", - "poke_535": "โอทามาโร", - "poke_536": "กามาการุ", - "poke_537": "กามาเกโรเกะ", - "poke_538": "นาเกคิ", - "poke_539": "ดาเกคิ", - "poke_540": "คูรูมีรุ", - "poke_541": "คูรูมายุ", - "poke_542": "ฮาฮาโคโมริ", - "poke_543": "ฟูชิเดะ", - "poke_544": "วีกา", - "poke_545": "เพนโดรา", - "poke_546": "โมนเมน", - "poke_547": "เอลฟุน", - "poke_548": "จูริเน", - "poke_549": "เดรเดีย", - "poke_550": "บาสราโอ", - "poke_551": "เมะกุโรโกะ", - "poke_552": "วารุวิล", - "poke_553": "วารุเวียล", - "poke_554": "ดารุมักกะ", - "poke_555": "ฮิฮิดารุมะ", - "poke_556": "มาราคัจจิ", - "poke_557": "อิชิซึไม", - "poke_558": "อิวาพาเลซ", - "poke_559": "ซึรุกกุ", - "poke_560": "ซึรุซึคิน", - "poke_561": "ซิมโบลา", - "poke_562": "เดซึมาซึ", - "poke_563": "เดซึคาน", - "poke_564": "โปรโตกา", - "poke_565": "อบาโกรา", - "poke_566": "อาเคน", - "poke_567": "อาเคโอส", - "poke_568": "ยาบุคุรอน", - "poke_569": "ดัสต์ดาส", - "poke_570": "โซรัว", - "poke_571": "โซโรอาร์ค", - "poke_572": "จิลามี", - "poke_573": "จิลัคจิโน", - "poke_574": "โกธิมู", - "poke_575": "โกธิมิรุ", - "poke_576": "โกธิรูเซล", - "poke_577": "ยูนิรัน", - "poke_578": "ดาบูลัน", - "poke_579": "แลนคูลัส", - "poke_580": "โคอารูฮิ", - "poke_581": "สวอนนา", - "poke_582": "วานิเพ็ตติ", - "poke_583": "วานิริช", - "poke_584": "ไบวานิลลา", - "poke_585": "ชิคิจิกะ", - "poke_586": "เมบูคิจิกะ", - "poke_587": "เอมอนกา", - "poke_588": "คาบูรูโมะ", - "poke_589": "ชูวัลโก", - "poke_590": "ทามาเกะทาเคะ", - "poke_591": "โมโรบาเรรุ", - "poke_592": "พูรูริล", - "poke_593": "บูรุนเจล", - "poke_594": "มามันโบ", - "poke_595": "บาชูรุ", - "poke_596": "เดนทูลา", - "poke_597": "เทสซีด", - "poke_598": "นัทเทรย์", - "poke_599": "เกียร์", - "poke_600": "กิเกียร์", - "poke_601": "กิกิเกียร์", - "poke_602": "ชิบิชิราซึ", - "poke_603": "ชิบิบีล", - "poke_604": "ชิบิรูดอน", - "poke_605": "ลีเกรย์", - "poke_606": "โอเบ็ม", - "poke_607": "ฮิโตโมชิ", - "poke_608": "แลมพูลา", - "poke_609": "แชนเดลา", - "poke_610": "คิบาโกะ", - "poke_611": "โอโนนโดะ", - "poke_612": "โอโนโนคุส", - "poke_613": "คูมะชุน", - "poke_614": "ทันแบร์", - "poke_615": "ฟรีจิโอ", - "poke_616": "โชโบมากิ", - "poke_617": "อกิลดา", - "poke_618": "แมกเกียว", - "poke_619": "โคโจฟู", - "poke_620": "โคโจนโดะ", - "poke_621": "คริมแกน", - "poke_622": "โกบิท", - "poke_623": "โกลูก", - "poke_624": "โคมาทานา", - "poke_625": "คิริคิซัน", - "poke_626": "บัฟฟรอน", - "poke_627": "วาชิบอน", - "poke_628": "วอร์เกิล", - "poke_629": "วัลไจ", - "poke_630": "วัลจีนา", - "poke_631": "คุยทาแรน", - "poke_632": "ไอแอนท์", - "poke_633": "โมโนซึ", - "poke_634": "จิเฮด", - "poke_635": "ซาซันดรา", - "poke_636": "เมลาร์วา", - "poke_637": "อุลกามอธ", - "poke_638": "โคบัลออน", - "poke_639": "เทราคิออน", - "poke_640": "วิริซิออน", - "poke_641": "ทอร์เนลอส", - "poke_642": "โวลโทลอส", - "poke_643": "เรชิรัม", - "poke_644": "เซครอม", - "poke_645": "แลนโดลอส", - "poke_646": "คิวเรม", - "poke_647": "เคลดิโอ", - "poke_648": "เมโลเอตตา", - "poke_649": "เกโนเซ็กท์", - "poke_650": "ฮาริมารอน", - "poke_651": "ฮาริบอร์ก", - "poke_652": "บริการอน", - "poke_653": "ฟ็อกโกะ", - "poke_654": "ไทเรนาร์", - "poke_655": "มาโฮคซี", - "poke_656": "เคโรมัตซึ", - "poke_657": "เกโคกาชิระ", - "poke_658": "เก็คโคกะ", - "poke_659": "โฮรุบี", - "poke_660": "โฮรุโด", - "poke_661": "ยายาโคมะ", - "poke_662": "ฮิโนยาโคมะ", - "poke_663": "ไฟร์แอโรว์", - "poke_664": "โคฟูคิมูชิ", - "poke_665": "โคฟูไร", - "poke_666": "วิวิญอง", - "poke_667": "ชิชิโกะ", - "poke_668": "คาเอ็นจิชิ", - "poke_669": "ฟลาเบเบ", - "poke_670": "ฟลาเอตเต", - "poke_671": "ฟลาเจส", - "poke_672": "เมเคิล", - "poke_673": "โกโกท", - "poke_674": "ยันชัม", - "poke_675": "โกรอนดะ", - "poke_676": "ทริมเมียน", - "poke_677": "เนียสเปอร์", - "poke_678": "เนียโอนิกซ์", - "poke_679": "ฮิโตทซึกิ", - "poke_680": "นิดังกิล", - "poke_681": "กิลการ์ด", - "poke_682": "ชูชูป", - "poke_683": "เฟรฟุวัน", - "poke_684": "เพร็อพพัฟ", - "poke_685": "เพโรรีม", - "poke_686": "มาอีกะ", - "poke_687": "คาลามาเนโร", - "poke_688": "คาเมเทเทะ", - "poke_689": "กาเมโนเดส", - "poke_690": "คูซูโม", - "poke_691": "ดรามิโดโร", - "poke_692": "อุเด็ปโป", - "poke_693": "บลอสเตอร์", - "poke_694": "เอลิคิเทล", - "poke_695": "เอเลซาร์ด", - "poke_696": "จิโกรัส", - "poke_697": "กาจิโกรัส", - "poke_698": "อมารุส", - "poke_699": "อมารูรูกา", - "poke_700": "นิมเฟีย", - "poke_701": "ลูจาบูล", - "poke_702": "เดเด็นเนะ", - "poke_703": "เมเลซี", - "poke_704": "นูเมรา", - "poke_705": "นูเมล", - "poke_706": "นูเมลกอน", - "poke_707": "เคลฟฟี", - "poke_708": "โบคุเร", - "poke_709": "โอร็อต", - "poke_710": "บาเค็จจะ", - "poke_711": "พัมพ์จิน", - "poke_712": "คาจิคอล", - "poke_713": "เครเบส", - "poke_714": "ออนแบท", - "poke_715": "ออนเวิร์น", - "poke_716": "เซอเนียส", - "poke_717": "อีเวลทอล", - "poke_718": "Zygarde", - "poke_719": "Diancie", - "poke_720": "Hoopa", - "poke_721": "Volcanion", - "poke_722": "Rowlet", - "poke_723": "Dartrix", - "poke_724": "Decidueye", - "poke_725": "Litten", - "poke_726": "Torracat", - "poke_727": "Incineroar", - "poke_728": "Popplio", - "poke_729": "Brionne", - "poke_730": "Primarina", - "poke_731": "Pikipek", - "poke_732": "Trumbeak", - "poke_733": "Toucannon", - "poke_734": "Yungoos", - "poke_735": "Gumshoos", - "poke_736": "Grubbin", - "poke_737": "Charjabug", - "poke_738": "Vikavolt", - "poke_739": "Crabrawler", - "poke_740": "Crabominable", - "poke_741": "Oricorio", - "poke_742": "Cutiefly", - "poke_743": "Ribombee", - "poke_744": "Rockruff", - "poke_745": "Lycanroc", - "poke_746": "Wishiwashi", - "poke_747": "Mareanie", - "poke_748": "Toxapex", - "poke_749": "Mudbray", - "poke_750": "Mudsdale", - "poke_751": "Dewpider", - "poke_752": "Araquanid", - "poke_753": "Fomantis", - "poke_754": "Lurantis", - "poke_755": "Morelull", - "poke_756": "Shiinotic", - "poke_757": "Salandit", - "poke_758": "Salazzle", - "poke_759": "Stufful", - "poke_760": "Bewear", - "poke_761": "Bounsweet", - "poke_762": "Steenee", - "poke_763": "Tsareena", - "poke_764": "Comfey", - "poke_765": "Oranguru", - "poke_766": "Passimian", - "poke_767": "Wimpod", - "poke_768": "Golisopod", - "poke_769": "Sandygast", - "poke_770": "Palossand", - "poke_771": "Pyukumuku", - "poke_772": "Type: Null", - "poke_773": "Silvally", - "poke_774": "Minior", - "poke_775": "Komala", - "poke_776": "Turtonator", - "poke_777": "Togedemaru", - "poke_778": "Mimikyu", - "poke_779": "Bruxish", - "poke_780": "Drampa", - "poke_781": "Dhelmise", - "poke_782": "Jangmo-o", - "poke_783": "Hakamo-o", - "poke_784": "Kommo-o", - "poke_785": "Tapu Koko", - "poke_786": "Tapu Lele", - "poke_787": "Tapu Bulu", - "poke_788": "Tapu Fini", - "poke_789": "Cosmog", - "poke_790": "Cosmoem", - "poke_791": "Solgaleo", - "poke_792": "Lunala", - "poke_793": "Nihilego", - "poke_794": "Buzzwole", - "poke_795": "Pheromosa", - "poke_796": "Xurkitree", - "poke_797": "Celesteela", - "poke_798": "Kartana", - "poke_799": "Guzzlord", - "poke_800": "Necrozma", - "poke_801": "Magearna", - "poke_802": "Marshadow", - "poke_808": "เมลตัน", - "poke_809": "เมลเมทัล", - "poke_862": "ทาจิฟุซะกุมะ", - "poke_863": "เนียคิง", - "poke_865": "เนงิกะไนท์", - "form_1": "A", - "form_2": "B", - "form_3": "C", - "form_4": "D", - "form_5": "E", - "form_6": "F", - "form_7": "G", - "form_8": "H", - "form_9": "I", - "form_10": "J", - "form_11": "K", - "form_12": "L", - "form_13": "M", - "form_14": "N", - "form_15": "O", - "form_16": "P", - "form_17": "Q", - "form_18": "R", - "form_19": "S", - "form_20": "T", - "form_21": "U", - "form_22": "V", - "form_23": "W", - "form_24": "X", - "form_25": "Y", - "form_26": "Z", - "form_27": "!", - "form_28": "?", - "form_29": "Normal", - "form_30": "Sunny", - "form_31": "Rainy", - "form_32": "Snowy", - "form_33": "Normal", - "form_34": "Attack", - "form_35": "Defense", - "form_36": "Speed", - "form_37": "00", - "form_38": "01", - "form_39": "02", - "form_40": "03", - "form_41": "04", - "form_42": "05", - "form_43": "06", - "form_44": "07", - "form_45": "Normal", - "form_46": "Alola", - "form_47": "Normal", - "form_48": "Alola", - "form_49": "Normal", - "form_50": "Alola", - "form_51": "Normal", - "form_52": "Alola", - "form_53": "Normal", - "form_54": "Alola", - "form_55": "Normal", - "form_56": "Alola", - "form_57": "Normal", - "form_58": "Alola", - "form_59": "Normal", - "form_60": "Alola", - "form_61": "Normal", - "form_62": "Alola", - "form_63": "Normal", - "form_64": "Alola", - "form_65": "Normal", - "form_66": "Alola", - "form_67": "Normal", - "form_68": "Alola", - "form_69": "Normal", - "form_70": "Alola", - "form_71": "Normal", - "form_72": "Alola", - "form_73": "Normal", - "form_74": "Alola", - "form_75": "Normal", - "form_76": "Alola", - "form_77": "Normal", - "form_78": "Alola", - "form_79": "Normal", - "form_80": "Alola", - "form_81": "Normal", - "form_82": "Frost", - "form_83": "Fan", - "form_84": "Mow", - "form_85": "Wash", - "form_86": "Heat", - "form_87": "Plant", - "form_88": "Sandy", - "form_89": "Trash", - "form_90": "Altered", - "form_91": "Origin", - "form_92": "Sky", - "form_93": "Land", - "form_94": "Overcast", - "form_95": "Sunny", - "form_96": "West Sea", - "form_97": "East Sea", - "form_98": "West Sea", - "form_99": "East Sea", - "form_100": "Normal", - "form_101": "Fighting", - "form_102": "Flying", - "form_103": "Poison", - "form_104": "Ground", - "form_105": "Rock", - "form_106": "Bug", - "form_107": "Ghost", - "form_108": "Steel", - "form_109": "Fire", - "form_110": "Water", - "form_111": "Grass", - "form_112": "Electric", - "form_113": "Psychic", - "form_114": "Ice", - "form_115": "Dragon", - "form_116": "Dark", - "form_117": "Fairy", - "form_118": "Plant", - "form_119": "Sandy", - "form_120": "Trash", - "form_121": "08", - "form_122": "09", - "form_123": "10", - "form_124": "11", - "form_125": "12", - "form_126": "13", - "form_127": "14", - "form_128": "15", - "form_129": "16", - "form_130": "17", - "form_131": "18", - "form_132": "19", - "form_133": "Armored", - "form_135": "Normal", - "form_136": "Red Striped", - "form_137": "Blue Striped", - "form_138": "Standard", - "form_139": "Zen", - "form_140": "Incarnate", - "form_141": "Therian", - "form_142": "Incarnate", - "form_143": "Therian", - "form_144": "Incarnate", - "form_145": "Therian", - "form_146": "Normal", - "form_147": "Black", - "form_148": "White", - "form_149": "Ordinary", - "form_150": "Resolute", - "form_151": "Aria", - "form_152": "Pirouette", - "form_153": "Shadow", - "form_154": "Purified", - "form_155": "Shadow", - "form_156": "Purified", - "form_157": "Normal", - "form_158": "Shadow", - "form_159": "Purified", - "form_160": "Normal", - "form_161": "Shadow", - "form_162": "Purified", - "form_163": "Normal", - "form_164": "Shadow", - "form_165": "Purified", - "form_166": "Normal", - "form_167": "Shadow", - "form_168": "Purified", - "form_169": "Normal", - "form_170": "Shadow", - "form_171": "Purified", - "form_172": "Normal", - "form_173": "Shadow", - "form_174": "Purified", - "form_175": "Normal", - "form_176": "Shadow", - "form_177": "Purified", - "form_178": "Normal", - "form_179": "Shadow", - "form_180": "Purified", - "form_181": "Normal", - "form_182": "Shadow", - "form_183": "Purified", - "form_184": "Normal", - "form_185": "Shadow", - "form_186": "Purified", - "form_187": "Normal", - "form_188": "Shadow", - "form_189": "Purified", - "form_190": "Normal", - "form_191": "Shadow", - "form_192": "Purified", - "form_193": "Normal", - "form_194": "Shadow", - "form_195": "Purified", - "form_196": "Normal", - "form_197": "Shadow", - "form_198": "Purified", - "form_199": "Normal", - "form_200": "Shadow", - "form_201": "Purified", - "form_202": "Normal", - "form_203": "Shadow", - "form_204": "Purified", - "form_205": "Normal", - "form_206": "Shadow", - "form_207": "Purified", - "form_208": "Normal", - "form_209": "Shadow", - "form_210": "Purified", - "form_211": "Normal", - "form_212": "Shadow", - "form_213": "Purified", - "form_214": "Normal", - "form_215": "Shadow", - "form_216": "Purified", - "form_217": "Normal", - "form_218": "Shadow", - "form_219": "Purified", - "form_220": "Shadow", - "form_221": "Purified", - "form_222": "Shadow", - "form_223": "Purified", - "form_224": "Normal", - "form_225": "Shadow", - "form_226": "Purified", - "form_227": "Shadow", - "form_228": "Purified", - "form_229": "Normal", - "form_230": "Shadow", - "form_231": "Purified", - "form_232": "Normal", - "form_233": "Shadow", - "form_234": "Purified", - "form_235": "Normal", - "form_236": "Shadow", - "form_237": "Purified", - "form_238": "Normal", - "form_239": "Shadow", - "form_240": "Purified", - "form_241": "Normal", - "form_242": "Shadow", - "form_243": "Purified", - "form_244": "Normal", - "form_245": "Shadow", - "form_246": "Purified", - "form_247": "Normal", - "form_248": "Shadow", - "form_249": "Purified", - "form_250": "Normal", - "form_251": "Shadow", - "form_252": "Purified", - "form_253": "Normal", - "form_254": "Shadow", - "form_255": "Purified", - "form_256": "Normal", - "form_257": "Shadow", - "form_258": "Purified", - "form_259": "Normal", - "form_260": "Shadow", - "form_261": "Purified", - "form_262": "Normal", - "form_263": "Shadow", - "form_264": "Purified", - "form_265": "Normal", - "form_266": "Shadow", - "form_267": "Purified", - "form_268": "Normal", - "form_269": "Shadow", - "form_270": "Purified", - "form_271": "Normal", - "form_272": "Shadow", - "form_273": "Purified", - "form_274": "Normal", - "form_275": "Shadow", - "form_276": "Purified", - "form_277": "Normal", - "form_278": "Shadow", - "form_279": "Purified", - "form_280": "Normal", - "form_281": "Shadow", - "form_282": "Purified", - "form_283": "Normal", - "form_284": "Shadow", - "form_285": "Purified", - "form_286": "Normal", - "form_287": "Shadow", - "form_288": "Purified", - "form_289": "Normal", - "form_290": "Shadow", - "form_291": "Purified", - "form_292": "Normal", - "form_293": "Shadow", - "form_294": "Purified", - "form_295": "Normal", - "form_296": "Shadow", - "form_297": "Purified", - "form_298": "Normal", - "form_299": "Shadow", - "form_300": "Purified", - "form_301": "Normal", - "form_302": "Shadow", - "form_303": "Purified", - "form_304": "Normal", - "form_305": "Shadow", - "form_306": "Purified", - "form_307": "Normal", - "form_308": "Shadow", - "form_309": "Purified", - "form_310": "Normal", - "form_311": "Shadow", - "form_312": "Purified", - "form_313": "Normal", - "form_314": "Shadow", - "form_315": "Purified", - "form_316": "Normal", - "form_317": "Shadow", - "form_318": "Purified", - "form_319": "Normal", - "form_320": "Shadow", - "form_321": "Purified", - "form_322": "Normal", - "form_323": "Shadow", - "form_324": "Purified", - "form_585": "Spring", - "form_586": "Summer", - "form_587": "Autumn", - "form_588": "Winter", - "form_589": "Spring", - "form_590": "Summer", - "form_591": "Autumn", - "form_592": "Winter", - "form_593": "Normal", - "form_594": "Shock", - "form_595": "Burn", - "form_596": "Chill", - "form_597": "Douse", - "form_598": "Normal", - "form_599": "Noevolve", - "form_600": "Normal", - "form_601": "Noevolve", - "form_602": "Normal", - "form_603": "Noevolve", - "form_604": "Noevolve", - "form_605": "Noevolve", - "form_606": "Noevolve", - "form_607": "Noevolve", - "form_608": "Noevolve", - "form_609": "Noevolve", - "form_610": "Normal", - "form_611": "Shadow", - "form_612": "Purified", - "form_613": "Normal", - "form_614": "Shadow", - "form_615": "Purified", - "form_616": "Normal", - "form_617": "Shadow", - "form_618": "Purified", - "form_619": "Normal", - "form_620": "Shadow", - "form_621": "Purified", - "form_622": "Normal", - "form_623": "Shadow", - "form_624": "Purified", - "form_625": "Normal", - "form_626": "Shadow", - "form_627": "Purified", - "form_628": "Normal", - "form_629": "Shadow", - "form_630": "Purified", - "form_631": "Normal", - "form_632": "Shadow", - "form_633": "Purified", - "form_634": "Normal", - "form_635": "Shadow", - "form_636": "Purified", - "form_637": "Normal", - "form_638": "Shadow", - "form_639": "Purified", - "form_640": "Normal", - "form_641": "Shadow", - "form_642": "Purified", - "form_643": "Normal", - "form_644": "Shadow", - "form_645": "Purified", - "form_646": "Normal", - "form_647": "Shadow", - "form_648": "Purified", - "form_649": "Normal", - "form_650": "Shadow", - "form_651": "Purified", - "form_652": "Normal", - "form_653": "Shadow", - "form_654": "Purified", - "form_655": "Normal", - "form_656": "Shadow", - "form_657": "Purified", - "form_658": "Normal", - "form_659": "Shadow", - "form_660": "Purified", - "form_661": "Normal", - "form_662": "Shadow", - "form_663": "Purified", - "form_664": "Normal", - "form_665": "Shadow", - "form_666": "Purified", - "form_667": "Normal", - "form_668": "Shadow", - "form_669": "Purified", - "form_670": "Normal", - "form_671": "Shadow", - "form_672": "Purified", - "form_673": "Shadow", - "form_674": "Purified", - "form_675": "Shadow", - "form_676": "Purified", - "form_677": "Normal", - "form_678": "Shadow", - "form_679": "Purified", - "form_680": "Normal", - "form_681": "Shadow", - "form_682": "Purified", - "form_683": "Normal", - "form_684": "Shadow", - "form_685": "Purified", - "form_686": "Shadow", - "form_687": "Purified", - "form_688": "Normal", - "form_689": "Shadow", - "form_690": "Purified", - "form_691": "Normal", - "form_692": "Shadow", - "form_693": "Purified", - "form_694": "Normal", - "form_695": "Shadow", - "form_696": "Purified", - "form_697": "Normal", - "form_698": "Shadow", - "form_699": "Purified", - "form_700": "Normal", - "form_701": "Shadow", - "form_702": "Purified", - "form_703": "Normal", - "form_704": "Shadow", - "form_705": "Purified", - "form_706": "Normal", - "form_707": "Shadow", - "form_708": "Purified", - "form_709": "Shadow", - "form_710": "Purified", - "form_711": "Shadow", - "form_712": "Purified", - "form_713": "Normal", - "form_714": "Shadow", - "form_715": "Purified", - "form_716": "Normal", - "form_717": "Shadow", - "form_718": "Purified", - "form_719": "Normal", - "form_720": "Shadow", - "form_721": "Purified", - "form_722": "Normal", - "form_723": "Shadow", - "form_724": "Purified", - "form_725": "Shadow", - "form_726": "Purified", - "form_727": "Shadow", - "form_728": "Purified", - "form_729": "Normal", - "form_730": "Shadow", - "form_731": "Purified", - "form_732": "Shadow", - "form_733": "Purified", - "form_734": "Normal", - "form_735": "Shadow", - "form_736": "Purified", - "form_737": "Normal", - "form_738": "Shadow", - "form_739": "Purified", - "form_740": "Normal", - "form_741": "Shadow", - "form_742": "Purified", - "form_743": "Normal", - "form_744": "Shadow", - "form_745": "Purified", - "form_746": "Normal", - "form_747": "Shadow", - "form_748": "Purified", - "form_749": "Normal", - "form_750": "Shadow", - "form_751": "Purified", - "form_752": "Normal", - "form_753": "Shadow", - "form_754": "Purified", - "form_755": "Normal", - "form_756": "Shadow", - "form_757": "Purified", - "form_758": "Normal", - "form_759": "Shadow", - "form_760": "Purified", - "form_761": "Normal", - "form_762": "Shadow", - "form_763": "Purified", - "form_764": "Normal", - "form_765": "Shadow", - "form_766": "Purified", - "form_767": "Normal", - "form_768": "Shadow", - "form_769": "Purified", - "form_770": "Normal", - "form_771": "Shadow", - "form_772": "Purified", - "form_773": "Normal", - "form_774": "Shadow", - "form_775": "Purified", - "form_776": "Normal", - "form_777": "Shadow", - "form_778": "Purified", - "form_779": "Normal", - "form_780": "Shadow", - "form_781": "Purified", - "form_782": "Normal", - "form_783": "Shadow", - "form_784": "Purified", - "form_785": "Normal", - "form_786": "Shadow", - "form_787": "Purified", - "form_788": "Normal", - "form_789": "Shadow", - "form_790": "Purified", - "form_791": "Normal", - "form_792": "Shadow", - "form_793": "Purified", - "form_794": "Normal", - "form_795": "Shadow", - "form_796": "Purified", - "form_797": "Normal", - "form_798": "Shadow", - "form_799": "Purified", - "form_800": "Normal", - "form_801": "Shadow", - "form_802": "Purified", - "form_803": "Normal", - "form_804": "Shadow", - "form_805": "Purified", - "form_806": "Normal", - "form_807": "Shadow", - "form_808": "Purified", - "form_809": "Normal", - "form_810": "Shadow", - "form_811": "Purified", - "form_812": "Normal", - "form_813": "Shadow", - "form_814": "Purified", - "form_815": "Normal", - "form_816": "Shadow", - "form_817": "Purified", - "form_818": "Normal", - "form_819": "Shadow", - "form_820": "Purified", - "form_821": "Normal", - "form_822": "Shadow", - "form_823": "Purified", - "form_824": "Normal", - "form_825": "Shadow", - "form_826": "Purified", - "form_827": "Normal", - "form_828": "Shadow", - "form_829": "Purified", - "form_830": "Normal", - "form_831": "Shadow", - "form_832": "Purified", - "form_833": "Normal", - "form_834": "Shadow", - "form_835": "Purified", - "form_836": "Normal", - "form_837": "Shadow", - "form_838": "Purified", - "form_839": "Normal", - "form_840": "Shadow", - "form_841": "Purified", - "form_842": "Shadow", - "form_843": "Purified", - "form_844": "Shadow", - "form_845": "Purified", - "form_846": "Normal", - "form_847": "Shadow", - "form_848": "Purified", - "form_849": "Normal", - "form_850": "Shadow", - "form_851": "Purified", - "form_852": "Normal", - "form_853": "Shadow", - "form_854": "Purified", - "form_855": "Normal", - "form_856": "Shadow", - "form_857": "Purified", - "form_858": "Normal", - "form_859": "Shadow", - "form_860": "Purified", - "form_861": "Normal", - "form_862": "Shadow", - "form_863": "Purified", - "form_864": "Normal", - "form_865": "Shadow", - "form_866": "Purified", - "form_867": "Normal", - "form_868": "Shadow", - "form_869": "Purified", - "form_870": "Normal", - "form_871": "Shadow", - "form_872": "Purified", - "form_873": "Normal", - "form_874": "Shadow", - "form_875": "Purified", - "form_876": "Normal", - "form_877": "Shadow", - "form_878": "Purified", - "form_879": "Normal", - "form_880": "Shadow", - "form_881": "Purified", - "form_882": "Shadow", - "form_883": "Purified", - "form_884": "Shadow", - "form_885": "Purified", - "form_886": "Shadow", - "form_887": "Purified", - "form_888": "Normal", - "form_889": "Shadow", - "form_890": "Purified", - "form_891": "Normal", - "form_892": "Shadow", - "form_893": "Purified", - "form_894": "Fall 2019", - "form_895": "Fall 2019", - "form_896": "Fall 2019", - "form_897": "Fall 2019", - "form_898": "Normal", - "form_899": "Shadow", - "form_900": "Purified", - "form_901": "Vs 2019", - "form_902": "Normal", - "form_903": "Shadow", - "form_904": "Purified", - "form_905": "Normal", - "form_906": "Shadow", - "form_907": "Purified", - "form_908": "Normal", - "form_909": "Shadow", - "form_910": "Purified", - "form_911": "Normal", - "form_912": "Shadow", - "form_913": "Purified", - "form_914": "Normal", - "form_915": "Shadow", - "form_916": "Purified", - "form_917": "Normal", - "form_918": "Shadow", - "form_919": "Purified", - "form_920": "Normal", - "form_921": "Shadow", - "form_922": "Purified", - "form_923": "Normal", - "form_924": "Shadow", - "form_925": "Purified", - "form_926": "Normal", - "form_927": "Shadow", - "form_928": "Purified", - "form_929": "Normal", - "form_930": "Shadow", - "form_931": "Purified", - "form_932": "Normal", - "form_933": "Shadow", - "form_934": "Purified", - "form_935": "Normal", - "form_936": "Shadow", - "form_937": "Purified", - "form_938": "Normal", - "form_939": "Shadow", - "form_940": "Purified", - "form_941": "Normal", - "form_942": "Shadow", - "form_943": "Purified", - "form_944": "Galarian", - "form_945": "Normal", - "form_946": "Galarian", - "form_947": "Normal", - "form_948": "Galarian", - "form_949": "Copy 2019", - "form_950": "Copy 2019", - "form_951": "Copy 2019", - "form_952": "Copy 2019", - "form_953": "Normal", - "form_954": "Shadow", - "form_955": "Purified", - "form_956": "Normal", - "form_957": "Shadow", - "form_958": "Purified", - "form_959": "Normal", - "form_960": "Shadow", - "form_961": "Purified", - "form_962": "Normal", - "form_963": "Shadow", - "form_964": "Purified", - "form_965": "Normal", - "form_966": "Shadow", - "form_967": "Purified", - "form_968": "Normal", - "form_969": "Shadow", - "form_970": "Purified", - "form_971": "Normal", - "form_972": "Shadow", - "form_973": "Purified", - "form_974": "Normal", - "form_975": "Shadow", - "form_976": "Purified", - "form_977": "Shadow", - "form_978": "Purified", - "form_979": "Shadow", - "form_980": "Purified", - "form_981": "Normal", - "form_982": "Shadow", - "form_983": "Purified", - "form_984": "Normal", - "form_985": "Shadow", - "form_986": "Purified", - "form_987": "Normal", - "form_988": "Shadow", - "form_989": "Purified", - "form_990": "Normal", - "form_991": "Shadow", - "form_992": "Purified", - "form_993": "Normal", - "form_994": "Shadow", - "form_995": "Purified", - "form_996": "Normal", - "form_997": "Shadow", - "form_998": "Purified", - "form_999": "Normal", - "form_1000": "Shadow", - "form_1001": "Purified", - "form_1002": "Normal", - "form_1003": "Shadow", - "form_1004": "Purified", - "form_1005": "Normal", - "form_1006": "Shadow", - "form_1007": "Purified", - "form_1008": "Normal", - "form_1009": "Shadow", - "form_1010": "Purified", - "form_1011": "Normal", - "form_1012": "Shadow", - "form_1013": "Purified", - "form_1014": "Normal", - "form_1015": "Shadow", - "form_1016": "Purified", - "form_1017": "Normal", - "form_1018": "Shadow", - "form_1019": "Purified", - "form_1020": "Normal", - "form_1021": "Shadow", - "form_1022": "Purified", - "form_1023": "Normal", - "form_1024": "Shadow", - "form_1025": "Purified", - "form_1026": "Normal", - "form_1027": "Shadow", - "form_1028": "Purified", - "form_1029": "Normal", - "form_1030": "Shadow", - "form_1031": "Purified", - "form_1032": "Normal", - "form_1033": "Shadow", - "form_1034": "Purified", - "form_1035": "Normal", - "form_1036": "Shadow", - "form_1037": "Purified", - "form_1038": "Normal", - "form_1039": "Shadow", - "form_1040": "Purified", - "form_1041": "Normal", - "form_1042": "Shadow", - "form_1043": "Purified", - "form_1044": "Normal", - "form_1045": "Shadow", - "form_1046": "Purified", - "form_1047": "Normal", - "form_1048": "Shadow", - "form_1049": "Purified", - "form_1050": "Normal", - "form_1051": "Shadow", - "form_1052": "Purified", - "form_1053": "Normal", - "form_1054": "Shadow", - "form_1055": "Purified", - "form_1056": "Normal", - "form_1057": "Shadow", - "form_1058": "Purified", - "form_1059": "Normal", - "form_1060": "Shadow", - "form_1061": "Purified", - "form_1062": "Normal", - "form_1063": "Shadow", - "form_1064": "Purified", - "form_1065": "Normal", - "form_1066": "Shadow", - "form_1067": "Purified", - "form_1068": "Normal", - "form_1069": "Shadow", - "form_1070": "Purified", - "form_1071": "Normal", - "form_1072": "Shadow", - "form_1073": "Purified", - "form_1074": "Normal", - "form_1075": "Shadow", - "form_1076": "Purified", - "form_1077": "Normal", - "form_1078": "Shadow", - "form_1079": "Purified", - "form_1080": "Normal", - "form_1081": "Shadow", - "form_1082": "Purified", - "form_1083": "Normal", - "form_1084": "Shadow", - "form_1085": "Purified", - "form_1086": "Normal", - "form_1087": "Shadow", - "form_1088": "Purified", - "form_1089": "Normal", - "form_1090": "Shadow", - "form_1091": "Purified", - "form_1092": "Normal", - "form_1093": "Shadow", - "form_1094": "Purified", - "form_1095": "Normal", - "form_1096": "Shadow", - "form_1097": "Purified", - "form_1098": "Normal", - "form_1099": "Shadow", - "form_1100": "Purified", - "form_1101": "Normal", - "form_1102": "Shadow", - "form_1103": "Purified", - "form_1104": "Normal", - "form_1105": "Shadow", - "form_1106": "Purified", - "form_1107": "Normal", - "form_1108": "Shadow", - "form_1109": "Purified", - "form_1110": "Normal", - "form_1111": "Shadow", - "form_1112": "Purified", - "form_1113": "Shadow", - "form_1114": "Purified", - "form_1115": "Normal", - "form_1116": "Shadow", - "form_1117": "Purified", - "form_1118": "Normal", - "form_1119": "Shadow", - "form_1120": "Purified", - "form_1121": "Normal", - "form_1122": "Shadow", - "form_1123": "Purified", - "form_1124": "Normal", - "form_1125": "Shadow", - "form_1126": "Purified", - "form_1127": "Normal", - "form_1128": "Shadow", - "form_1129": "Purified", - "form_1130": "Normal", - "form_1131": "Shadow", - "form_1132": "Purified", - "form_1133": "Normal", - "form_1134": "Shadow", - "form_1135": "Purified", - "form_1136": "Normal", - "form_1137": "Shadow", - "form_1138": "Purified", - "form_1139": "Normal", - "form_1140": "Shadow", - "form_1141": "Purified", - "form_1142": "Normal", - "form_1143": "Shadow", - "form_1144": "Purified", - "form_1145": "Normal", - "form_1146": "Shadow", - "form_1147": "Purified", - "form_1148": "Normal", - "form_1149": "Shadow", - "form_1150": "Purified", - "form_1151": "Normal", - "form_1152": "Shadow", - "form_1153": "Purified", - "form_1154": "Normal", - "form_1155": "Shadow", - "form_1156": "Purified", - "form_1157": "Normal", - "form_1158": "Shadow", - "form_1159": "Purified", - "form_1160": "Normal", - "form_1161": "Shadow", - "form_1162": "Purified", - "form_1163": "Normal", - "form_1164": "Shadow", - "form_1165": "Purified", - "form_1166": "Normal", - "form_1167": "Shadow", - "form_1168": "Purified", - "form_1169": "Normal", - "form_1170": "Shadow", - "form_1171": "Purified", - "form_1172": "Normal", - "form_1173": "Shadow", - "form_1174": "Purified", - "form_1175": "Normal", - "form_1176": "Shadow", - "form_1177": "Purified", - "form_1178": "Normal", - "form_1179": "Shadow", - "form_1180": "Purified", - "form_1181": "Normal", - "form_1182": "Shadow", - "form_1183": "Purified", - "form_1184": "Normal", - "form_1185": "Shadow", - "form_1186": "Purified", - "form_1187": "Normal", - "form_1188": "Shadow", - "form_1189": "Purified", - "form_1190": "Normal", - "form_1191": "Shadow", - "form_1192": "Purified", - "form_1193": "Normal", - "form_1194": "Shadow", - "form_1195": "Purified", - "form_1196": "Normal", - "form_1197": "Shadow", - "form_1198": "Purified", - "form_1199": "Normal", - "form_1200": "Shadow", - "form_1201": "Purified", - "form_1202": "Normal", - "form_1203": "Shadow", - "form_1204": "Purified", - "form_1205": "Normal", - "form_1206": "Shadow", - "form_1207": "Purified", - "form_1208": "Normal", - "form_1209": "Shadow", - "form_1210": "Purified", - "form_1211": "Normal", - "form_1212": "Shadow", - "form_1213": "Purified", - "form_1214": "Normal", - "form_1215": "Shadow", - "form_1216": "Purified", - "form_1217": "Normal", - "form_1218": "Shadow", - "form_1219": "Purified", - "form_1220": "Normal", - "form_1221": "Shadow", - "form_1222": "Purified", - "form_1223": "Normal", - "form_1224": "Shadow", - "form_1225": "Purified", - "form_1226": "Normal", - "form_1227": "Shadow", - "form_1228": "Purified", - "form_1229": "Normal", - "form_1230": "Shadow", - "form_1231": "Purified", - "form_1232": "Normal", - "form_1233": "Shadow", - "form_1234": "Purified", - "form_1235": "Normal", - "form_1236": "Shadow", - "form_1237": "Purified", - "form_1238": "Normal", - "form_1239": "Shadow", - "form_1240": "Purified", - "form_1241": "Normal", - "form_1242": "Shadow", - "form_1243": "Purified", - "form_1244": "Normal", - "form_1245": "Shadow", - "form_1246": "Purified", - "form_1247": "Normal", - "form_1248": "Shadow", - "form_1249": "Purified", - "form_1250": "Normal", - "form_1251": "Shadow", - "form_1252": "Purified", - "form_1253": "Normal", - "form_1254": "Shadow", - "form_1255": "Purified", - "form_1256": "Normal", - "form_1257": "Shadow", - "form_1258": "Purified", - "form_1259": "Normal", - "form_1260": "Shadow", - "form_1261": "Purified", - "form_1262": "Normal", - "form_1263": "Shadow", - "form_1264": "Purified", - "form_1265": "Normal", - "form_1266": "Shadow", - "form_1267": "Purified", - "form_1268": "Normal", - "form_1269": "Shadow", - "form_1270": "Purified", - "form_1271": "Normal", - "form_1272": "Shadow", - "form_1273": "Purified", - "form_1274": "Normal", - "form_1275": "Shadow", - "form_1276": "Purified", - "form_1277": "Normal", - "form_1278": "Shadow", - "form_1279": "Purified", - "form_1280": "Normal", - "form_1281": "Shadow", - "form_1282": "Purified", - "form_1283": "Normal", - "form_1284": "Shadow", - "form_1285": "Purified", - "form_1286": "Normal", - "form_1287": "Shadow", - "form_1288": "Purified", - "form_1289": "Normal", - "form_1290": "Shadow", - "form_1291": "Purified", - "form_1292": "Normal", - "form_1293": "Shadow", - "form_1294": "Purified", - "form_1295": "Normal", - "form_1296": "Shadow", - "form_1297": "Purified", - "form_1298": "Normal", - "form_1299": "Shadow", - "form_1300": "Purified", - "form_1301": "Normal", - "form_1302": "Shadow", - "form_1303": "Purified", - "form_1304": "Normal", - "form_1305": "Shadow", - "form_1306": "Purified", - "form_1307": "Normal", - "form_1308": "Shadow", - "form_1309": "Purified", - "form_1310": "Normal", - "form_1311": "Shadow", - "form_1312": "Purified", - "form_1313": "Normal", - "form_1314": "Shadow", - "form_1315": "Purified", - "form_1316": "Normal", - "form_1317": "Shadow", - "form_1318": "Purified", - "form_1319": "Normal", - "form_1320": "Shadow", - "form_1321": "Purified", - "form_1322": "Normal", - "form_1323": "Shadow", - "form_1324": "Purified", - "form_1325": "Normal", - "form_1326": "Shadow", - "form_1327": "Purified", - "form_1328": "Normal", - "form_1329": "Shadow", - "form_1330": "Purified", - "form_1331": "Normal", - "form_1332": "Shadow", - "form_1333": "Purified", - "form_1334": "Normal", - "form_1335": "Shadow", - "form_1336": "Purified", - "form_1337": "Normal", - "form_1338": "Shadow", - "form_1339": "Purified", - "form_1340": "Normal", - "form_1341": "Shadow", - "form_1342": "Purified", - "form_1343": "Normal", - "form_1344": "Shadow", - "form_1345": "Purified", - "form_1346": "Normal", - "form_1347": "Shadow", - "form_1348": "Purified", - "form_1349": "Normal", - "form_1350": "Shadow", - "form_1351": "Purified", - "form_1352": "Normal", - "form_1353": "Shadow", - "form_1354": "Purified", - "form_1355": "Normal", - "form_1356": "Shadow", - "form_1357": "Purified", - "form_1358": "Normal", - "form_1359": "Shadow", - "form_1360": "Purified", - "form_1361": "Normal", - "form_1362": "Shadow", - "form_1363": "Purified", - "form_1364": "Normal", - "form_1365": "Shadow", - "form_1366": "Purified", - "form_1367": "Normal", - "form_1368": "Shadow", - "form_1369": "Purified", - "form_1370": "Normal", - "form_1371": "Shadow", - "form_1372": "Purified", - "form_1373": "Shadow", - "form_1374": "Purified", - "form_1375": "Shadow", - "form_1376": "Purified", - "form_1377": "Shadow", - "form_1378": "Purified", - "form_1379": "Normal", - "form_1380": "Shadow", - "form_1381": "Purified", - "form_1382": "Normal", - "form_1383": "Shadow", - "form_1384": "Purified", - "form_1385": "Normal", - "form_1386": "Shadow", - "form_1387": "Purified", - "form_1388": "Normal", - "form_1389": "Shadow", - "form_1390": "Purified", - "form_1391": "Normal", - "form_1392": "Shadow", - "form_1393": "Purified", - "form_1394": "Normal", - "form_1395": "Shadow", - "form_1396": "Purified", - "form_1397": "Normal", - "form_1398": "Shadow", - "form_1399": "Purified", - "form_1400": "Normal", - "form_1401": "Shadow", - "form_1402": "Purified", - "form_1403": "Normal", - "form_1404": "Shadow", - "form_1405": "Purified", - "form_1406": "Normal", - "form_1407": "Shadow", - "form_1408": "Purified", - "form_1409": "Normal", - "form_1410": "Shadow", - "form_1411": "Purified", - "form_1412": "Normal", - "form_1413": "Shadow", - "form_1414": "Purified", - "form_1415": "Normal", - "form_1416": "Shadow", - "form_1417": "Purified", - "form_1418": "Normal", - "form_1419": "Shadow", - "form_1420": "Purified", - "form_1421": "Normal", - "form_1422": "Shadow", - "form_1423": "Purified", - "form_1424": "Normal", - "form_1425": "Shadow", - "form_1426": "Purified", - "form_1427": "Normal", - "form_1428": "Shadow", - "form_1429": "Purified", - "form_1430": "Normal", - "form_1431": "Shadow", - "form_1432": "Purified", - "form_1433": "Normal", - "form_1434": "Shadow", - "form_1435": "Purified", - "form_1436": "Normal", - "form_1437": "Shadow", - "form_1438": "Purified", - "form_1439": "Normal", - "form_1440": "Shadow", - "form_1441": "Purified", - "form_1442": "Normal", - "form_1443": "Shadow", - "form_1444": "Purified", - "form_1445": "Normal", - "form_1446": "Shadow", - "form_1447": "Purified", - "form_1448": "Normal", - "form_1449": "Shadow", - "form_1450": "Purified", - "form_1451": "Normal", - "form_1452": "Shadow", - "form_1453": "Purified", - "form_1454": "Normal", - "form_1455": "Shadow", - "form_1456": "Purified", - "form_1457": "Normal", - "form_1458": "Shadow", - "form_1459": "Purified", - "form_1460": "Normal", - "form_1461": "Shadow", - "form_1462": "Purified", - "form_1463": "Normal", - "form_1464": "Shadow", - "form_1465": "Purified", - "form_1466": "Normal", - "form_1467": "Shadow", - "form_1468": "Purified", - "form_1469": "Normal", - "form_1470": "Shadow", - "form_1471": "Purified", - "form_1472": "Normal", - "form_1473": "Shadow", - "form_1474": "Purified", - "form_1475": "Normal", - "form_1476": "Shadow", - "form_1477": "Purified", - "form_1478": "Normal", - "form_1479": "Shadow", - "form_1480": "Purified", - "form_1481": "Normal", - "form_1482": "Shadow", - "form_1483": "Purified", - "form_1484": "Normal", - "form_1485": "Shadow", - "form_1486": "Purified", - "form_1487": "Normal", - "form_1488": "Shadow", - "form_1489": "Purified", - "form_1490": "Normal", - "form_1491": "Shadow", - "form_1492": "Purified", - "form_1493": "Normal", - "form_1494": "Shadow", - "form_1495": "Purified", - "form_1496": "Normal", - "form_1497": "Shadow", - "form_1498": "Purified", - "form_1499": "Normal", - "form_1500": "Shadow", - "form_1501": "Purified", - "form_1502": "Normal", - "form_1503": "Shadow", - "form_1504": "Purified", - "form_1505": "Normal", - "form_1506": "Shadow", - "form_1507": "Purified", - "form_1508": "Normal", - "form_1509": "Shadow", - "form_1510": "Purified", - "form_1511": "Normal", - "form_1512": "Shadow", - "form_1513": "Purified", - "form_1514": "Normal", - "form_1515": "Shadow", - "form_1516": "Purified", - "form_1517": "Normal", - "form_1518": "Shadow", - "form_1519": "Purified", - "form_1520": "Normal", - "form_1521": "Shadow", - "form_1522": "Purified", - "form_1523": "Normal", - "form_1524": "Shadow", - "form_1525": "Purified", - "form_1526": "Normal", - "form_1527": "Shadow", - "form_1528": "Purified", - "form_1529": "Normal", - "form_1530": "Shadow", - "form_1531": "Purified", - "form_1532": "Normal", - "form_1533": "Shadow", - "form_1534": "Purified", - "form_1535": "Normal", - "form_1536": "Shadow", - "form_1537": "Purified", - "form_1538": "Normal", - "form_1539": "Shadow", - "form_1540": "Purified", - "form_1541": "Normal", - "form_1542": "Shadow", - "form_1543": "Purified", - "form_1544": "Normal", - "form_1545": "Shadow", - "form_1546": "Purified", - "form_1547": "Normal", - "form_1548": "Shadow", - "form_1549": "Purified", - "form_1550": "Normal", - "form_1551": "Shadow", - "form_1552": "Purified", - "form_1553": "Normal", - "form_1554": "Shadow", - "form_1555": "Purified", - "form_1556": "Normal", - "form_1557": "Shadow", - "form_1558": "Purified", - "form_1559": "Normal", - "form_1560": "Shadow", - "form_1561": "Purified", - "form_1562": "Normal", - "form_1563": "Shadow", - "form_1564": "Purified", - "form_1565": "Normal", - "form_1566": "Shadow", - "form_1567": "Purified", - "form_1568": "Normal", - "form_1569": "Shadow", - "form_1570": "Purified", - "form_1571": "Normal", - "form_1572": "Shadow", - "form_1573": "Purified", - "form_1574": "Normal", - "form_1575": "Shadow", - "form_1576": "Purified", - "form_1577": "Normal", - "form_1578": "Shadow", - "form_1579": "Purified", - "form_1580": "Normal", - "form_1581": "Shadow", - "form_1582": "Purified", - "form_1583": "Normal", - "form_1584": "Shadow", - "form_1585": "Purified", - "form_1586": "Normal", - "form_1587": "Shadow", - "form_1588": "Purified", - "form_1589": "Normal", - "form_1590": "Shadow", - "form_1591": "Purified", - "form_1592": "Normal", - "form_1593": "Shadow", - "form_1594": "Purified", - "form_1595": "Normal", - "form_1596": "Shadow", - "form_1597": "Purified", - "form_1598": "Normal", - "form_1599": "Shadow", - "form_1600": "Purified", - "form_1601": "Normal", - "form_1602": "Shadow", - "form_1603": "Purified", - "form_1604": "Normal", - "form_1605": "Shadow", - "form_1606": "Purified", - "form_1607": "Normal", - "form_1608": "Shadow", - "form_1609": "Purified", - "form_1610": "Normal", - "form_1611": "Shadow", - "form_1612": "Purified", - "form_1613": "Normal", - "form_1614": "Shadow", - "form_1615": "Purified", - "form_1616": "Normal", - "form_1617": "Shadow", - "form_1618": "Purified", - "form_1619": "Normal", - "form_1620": "Shadow", - "form_1621": "Purified", - "form_1622": "Normal", - "form_1623": "Shadow", - "form_1624": "Purified", - "form_1625": "Normal", - "form_1626": "Shadow", - "form_1627": "Purified", - "form_1628": "Normal", - "form_1629": "Shadow", - "form_1630": "Purified", - "form_1631": "Normal", - "form_1632": "Shadow", - "form_1633": "Purified", - "form_1634": "Normal", - "form_1635": "Shadow", - "form_1636": "Purified", - "form_1637": "Normal", - "form_1638": "Shadow", - "form_1639": "Purified", - "form_1640": "Normal", - "form_1641": "Shadow", - "form_1642": "Purified", - "form_1643": "Normal", - "form_1644": "Shadow", - "form_1645": "Purified", - "form_1646": "Normal", - "form_1647": "Shadow", - "form_1648": "Purified", - "form_1649": "Normal", - "form_1650": "Shadow", - "form_1651": "Purified", - "form_1652": "Normal", - "form_1653": "Shadow", - "form_1654": "Purified", - "form_1655": "Normal", - "form_1656": "Shadow", - "form_1657": "Purified", - "form_1658": "Normal", - "form_1659": "Shadow", - "form_1660": "Purified", - "form_1661": "Normal", - "form_1662": "Shadow", - "form_1663": "Purified", - "form_1664": "Normal", - "form_1665": "Shadow", - "form_1666": "Purified", - "form_1667": "Normal", - "form_1668": "Shadow", - "form_1669": "Purified", - "form_1670": "Normal", - "form_1671": "Shadow", - "form_1672": "Purified", - "form_1673": "Normal", - "form_1674": "Shadow", - "form_1675": "Purified", - "form_1676": "Normal", - "form_1677": "Shadow", - "form_1678": "Purified", - "form_1679": "Normal", - "form_1680": "Shadow", - "form_1681": "Purified", - "form_1682": "Normal", - "form_1683": "Shadow", - "form_1684": "Purified", - "form_1685": "Normal", - "form_1686": "Shadow", - "form_1687": "Purified", - "form_1688": "Normal", - "form_1689": "Shadow", - "form_1690": "Purified", - "form_1691": "Normal", - "form_1692": "Shadow", - "form_1693": "Purified", - "form_1694": "Normal", - "form_1695": "Shadow", - "form_1696": "Purified", - "form_1697": "Normal", - "form_1698": "Shadow", - "form_1699": "Purified", - "form_1700": "Normal", - "form_1701": "Shadow", - "form_1702": "Purified", - "form_1703": "Normal", - "form_1704": "Shadow", - "form_1705": "Purified", - "form_1706": "Normal", - "form_1707": "Shadow", - "form_1708": "Purified", - "form_1709": "Normal", - "form_1710": "Shadow", - "form_1711": "Purified", - "form_1712": "Normal", - "form_1713": "Shadow", - "form_1714": "Purified", - "form_1715": "Normal", - "form_1716": "Shadow", - "form_1717": "Purified", - "form_1718": "Normal", - "form_1719": "Shadow", - "form_1720": "Purified", - "form_1721": "Normal", - "form_1722": "Shadow", - "form_1723": "Purified", - "form_1724": "Normal", - "form_1725": "Shadow", - "form_1726": "Purified", - "form_1727": "Normal", - "form_1728": "Shadow", - "form_1729": "Purified", - "form_1730": "Normal", - "form_1731": "Shadow", - "form_1732": "Purified", - "form_1733": "Normal", - "form_1734": "Shadow", - "form_1735": "Purified", - "form_1736": "Normal", - "form_1737": "Shadow", - "form_1738": "Purified", - "form_1739": "Normal", - "form_1740": "Shadow", - "form_1741": "Purified", - "form_1742": "Normal", - "form_1743": "Shadow", - "form_1744": "Purified", - "form_1745": "Normal", - "form_1746": "Shadow", - "form_1747": "Purified", - "form_1748": "Normal", - "form_1749": "Shadow", - "form_1750": "Purified", - "form_1751": "Normal", - "form_1752": "Shadow", - "form_1753": "Purified", - "form_1754": "Normal", - "form_1755": "Shadow", - "form_1756": "Purified", - "form_1757": "Normal", - "form_1758": "Shadow", - "form_1759": "Purified", - "form_1760": "Normal", - "form_1761": "Shadow", - "form_1762": "Purified", - "form_1763": "Normal", - "form_1764": "Shadow", - "form_1765": "Purified", - "form_1766": "Normal", - "form_1767": "Shadow", - "form_1768": "Purified", - "form_1769": "Normal", - "form_1770": "Shadow", - "form_1771": "Purified", - "form_1772": "Normal", - "form_1773": "Shadow", - "form_1774": "Purified", - "form_1775": "Normal", - "form_1776": "Shadow", - "form_1777": "Purified", - "form_1778": "Normal", - "form_1779": "Shadow", - "form_1780": "Purified", - "form_1781": "Normal", - "form_1782": "Shadow", - "form_1783": "Purified", - "form_1784": "Normal", - "form_1785": "Shadow", - "form_1786": "Purified", - "form_1787": "Normal", - "form_1788": "Shadow", - "form_1789": "Purified", - "form_1790": "Normal", - "form_1791": "Shadow", - "form_1792": "Purified", - "form_1793": "Normal", - "form_1794": "Shadow", - "form_1795": "Purified", - "form_1796": "Normal", - "form_1797": "Shadow", - "form_1798": "Purified", - "form_1799": "Normal", - "form_1800": "Shadow", - "form_1801": "Purified", - "form_1802": "Normal", - "form_1803": "Shadow", - "form_1804": "Purified", - "form_1805": "Normal", - "form_1806": "Shadow", - "form_1807": "Purified", - "form_1808": "Normal", - "form_1809": "Shadow", - "form_1810": "Purified", - "form_1811": "Normal", - "form_1812": "Shadow", - "form_1813": "Purified", - "form_1814": "Normal", - "form_1815": "Shadow", - "form_1816": "Purified", - "form_1817": "Normal", - "form_1818": "Shadow", - "form_1819": "Purified", - "form_1820": "Normal", - "form_1821": "Shadow", - "form_1822": "Purified", - "form_1823": "Normal", - "form_1824": "Shadow", - "form_1825": "Purified", - "form_1826": "Normal", - "form_1827": "Shadow", - "form_1828": "Purified", - "form_1829": "Normal", - "form_1830": "Shadow", - "form_1831": "Purified", - "form_1832": "Normal", - "form_1833": "Shadow", - "form_1834": "Purified", - "form_1835": "Normal", - "form_1836": "Shadow", - "form_1837": "Purified", - "form_1838": "Normal", - "form_1839": "Shadow", - "form_1840": "Purified", - "form_1841": "Normal", - "form_1842": "Shadow", - "form_1843": "Purified", - "form_1844": "Normal", - "form_1845": "Shadow", - "form_1846": "Purified", - "form_1847": "Normal", - "form_1848": "Shadow", - "form_1849": "Purified", - "form_1850": "Normal", - "form_1851": "Shadow", - "form_1852": "Purified", - "form_1853": "Normal", - "form_1854": "Shadow", - "form_1855": "Purified", - "form_1856": "Normal", - "form_1857": "Shadow", - "form_1858": "Purified", - "form_1859": "Normal", - "form_1860": "Shadow", - "form_1861": "Purified", - "form_1862": "Normal", - "form_1863": "Shadow", - "form_1864": "Purified", - "form_1865": "Normal", - "form_1866": "Shadow", - "form_1867": "Purified", - "form_1868": "Normal", - "form_1869": "Shadow", - "form_1870": "Purified", - "form_1871": "Normal", - "form_1872": "Shadow", - "form_1873": "Purified", - "form_1874": "Normal", - "form_1875": "Shadow", - "form_1876": "Purified", - "form_1877": "Normal", - "form_1878": "Shadow", - "form_1879": "Purified", - "form_1880": "Normal", - "form_1881": "Shadow", - "form_1882": "Purified", - "form_1883": "Normal", - "form_1884": "Shadow", - "form_1885": "Purified", - "form_1886": "Normal", - "form_1887": "Shadow", - "form_1888": "Purified", - "form_1889": "Normal", - "form_1890": "Shadow", - "form_1891": "Purified", - "form_1892": "Normal", - "form_1893": "Shadow", - "form_1894": "Purified", - "form_1895": "Normal", - "form_1896": "Shadow", - "form_1897": "Purified", - "form_1898": "Normal", - "form_1899": "Shadow", - "form_1900": "Purified", - "form_1901": "Normal", - "form_1902": "Shadow", - "form_1903": "Purified", - "form_1904": "Normal", - "form_1905": "Shadow", - "form_1906": "Purified", - "form_1907": "Normal", - "form_1908": "Shadow", - "form_1909": "Purified", - "form_1910": "Normal", - "form_1911": "Shadow", - "form_1912": "Purified", - "form_1913": "Normal", - "form_1914": "Shadow", - "form_1915": "Purified", - "form_1916": "Normal", - "form_1917": "Shadow", - "form_1918": "Purified", - "form_1919": "Normal", - "form_1920": "Shadow", - "form_1921": "Purified", - "form_1922": "Normal", - "form_1923": "Shadow", - "form_1924": "Purified", - "form_1925": "Normal", - "form_1926": "Shadow", - "form_1927": "Purified", - "form_1928": "Normal", - "form_1929": "Shadow", - "form_1930": "Purified", - "form_1931": "Normal", - "form_1932": "Shadow", - "form_1933": "Purified", - "form_1934": "Normal", - "form_1935": "Shadow", - "form_1936": "Purified", - "form_1937": "Normal", - "form_1938": "Shadow", - "form_1939": "Purified", - "form_1940": "Normal", - "form_1941": "Shadow", - "form_1942": "Purified", - "form_1943": "Normal", - "form_1944": "Shadow", - "form_1945": "Purified", - "form_1946": "Normal", - "form_1947": "Shadow", - "form_1948": "Purified", - "form_1949": "Normal", - "form_1950": "Shadow", - "form_1951": "Purified", - "form_1952": "Normal", - "form_1953": "Shadow", - "form_1954": "Purified", - "form_1955": "Normal", - "form_1956": "Shadow", - "form_1957": "Purified", - "form_1958": "Normal", - "form_1959": "Shadow", - "form_1960": "Purified", - "form_1961": "Normal", - "form_1962": "Shadow", - "form_1963": "Purified", - "form_1964": "Normal", - "form_1965": "Shadow", - "form_1966": "Purified", - "form_1967": "Normal", - "form_1968": "Shadow", - "form_1969": "Purified", - "form_1970": "Normal", - "form_1971": "Shadow", - "form_1972": "Purified", - "form_1973": "Normal", - "form_1974": "Shadow", - "form_1975": "Purified", - "form_1976": "Normal", - "form_1977": "Shadow", - "form_1978": "Purified", - "form_1979": "Normal", - "form_1980": "Shadow", - "form_1981": "Purified", - "form_1982": "Normal", - "form_1983": "Shadow", - "form_1984": "Purified", - "form_1985": "Normal", - "form_1986": "Shadow", - "form_1987": "Purified", - "form_1988": "Normal", - "form_1989": "Shadow", - "form_1990": "Purified", - "form_1991": "Normal", - "form_1992": "Shadow", - "form_1993": "Purified", - "form_1994": "Normal", - "form_1995": "Shadow", - "form_1996": "Purified", - "form_1997": "Normal", - "form_1998": "Shadow", - "form_1999": "Purified", - "form_2000": "Normal", - "form_2001": "Shadow", - "form_2002": "Purified", - "form_2003": "Normal", - "form_2004": "Shadow", - "form_2005": "Purified", - "form_2006": "Normal", - "form_2007": "Shadow", - "form_2008": "Purified", - "form_2009": "Normal", - "form_2010": "Shadow", - "form_2011": "Purified", - "form_2012": "Normal", - "form_2013": "Shadow", - "form_2014": "Purified", - "form_2015": "Normal", - "form_2016": "Shadow", - "form_2017": "Purified", - "form_2018": "Normal", - "form_2019": "Shadow", - "form_2020": "Purified", - "form_2021": "Normal", - "form_2022": "Shadow", - "form_2023": "Purified", - "form_2024": "Normal", - "form_2025": "Shadow", - "form_2026": "Purified", - "form_2027": "Normal", - "form_2028": "Shadow", - "form_2029": "Purified", - "form_2030": "Normal", - "form_2031": "Shadow", - "form_2032": "Purified", - "form_2033": "Normal", - "form_2034": "Shadow", - "form_2035": "Purified", - "form_2036": "Normal", - "form_2037": "Shadow", - "form_2038": "Purified", - "form_2039": "Normal", - "form_2040": "Shadow", - "form_2041": "Purified", - "form_2042": "Normal", - "form_2043": "Shadow", - "form_2044": "Purified", - "form_2045": "Normal", - "form_2046": "Shadow", - "form_2047": "Purified", - "form_2048": "Normal", - "form_2049": "Shadow", - "form_2050": "Purified", - "form_2051": "Normal", - "form_2052": "Shadow", - "form_2053": "Purified", - "form_2054": "Normal", - "form_2055": "Shadow", - "form_2056": "Purified", - "form_2057": "Normal", - "form_2058": "Shadow", - "form_2059": "Purified", - "form_2060": "Normal", - "form_2061": "Shadow", - "form_2062": "Purified", - "form_2063": "Normal", - "form_2064": "Shadow", - "form_2065": "Purified", - "form_2066": "Normal", - "form_2067": "Shadow", - "form_2068": "Purified", - "form_2069": "Normal", - "form_2070": "Shadow", - "form_2071": "Purified", - "form_2072": "Normal", - "form_2073": "Shadow", - "form_2074": "Purified", - "form_2075": "Normal", - "form_2076": "Shadow", - "form_2077": "Purified", - "form_2078": "Normal", - "form_2079": "Shadow", - "form_2080": "Purified", - "form_2081": "Normal", - "form_2082": "Shadow", - "form_2083": "Purified", - "form_2084": "Normal", - "form_2085": "Shadow", - "form_2086": "Purified", - "form_2087": "Normal", - "form_2088": "Shadow", - "form_2089": "Purified", - "form_2090": "Normal", - "form_2091": "Shadow", - "form_2092": "Purified", - "form_2093": "Normal", - "form_2094": "Shadow", - "form_2095": "Purified", - "form_2096": "Normal", - "form_2097": "Shadow", - "form_2098": "Purified", - "form_2099": "Normal", - "form_2100": "Shadow", - "form_2101": "Purified", - "form_2102": "Normal", - "form_2103": "Shadow", - "form_2104": "Purified", - "form_2105": "Normal", - "form_2106": "Shadow", - "form_2107": "Purified", - "form_2108": "Normal", - "form_2109": "Shadow", - "form_2110": "Purified", - "form_2111": "Normal", - "form_2112": "Shadow", - "form_2113": "Purified", - "form_2114": "Normal", - "form_2115": "Shadow", - "form_2116": "Purified", - "form_2117": "Normal", - "form_2118": "Shadow", - "form_2119": "Purified", - "form_2120": "Normal", - "form_2121": "Shadow", - "form_2122": "Purified", - "form_2123": "Normal", - "form_2124": "Shadow", - "form_2125": "Purified", - "form_2126": "Normal", - "form_2127": "Shadow", - "form_2128": "Purified", - "form_2129": "Normal", - "form_2130": "Shadow", - "form_2131": "Purified", - "form_2132": "Normal", - "form_2133": "Shadow", - "form_2134": "Purified", - "form_2135": "Normal", - "form_2136": "Shadow", - "form_2137": "Purified", - "form_2138": "Normal", - "form_2139": "Shadow", - "form_2140": "Purified", - "form_2141": "Normal", - "form_2142": "Shadow", - "form_2143": "Purified", - "form_2144": "Normal", - "form_2145": "Shadow", - "form_2146": "Purified", - "form_2147": "Normal", - "form_2148": "Shadow", - "form_2149": "Purified", - "form_2150": "Normal", - "form_2151": "Shadow", - "form_2152": "Purified", - "form_2153": "Normal", - "form_2154": "Shadow", - "form_2155": "Purified", - "form_2156": "Normal", - "form_2157": "Shadow", - "form_2158": "Purified", - "form_2159": "Normal", - "form_2160": "Shadow", - "form_2161": "Purified", - "form_2162": "Normal", - "form_2163": "Shadow", - "form_2164": "Purified", - "form_2165": "Normal", - "form_2166": "Shadow", - "form_2167": "Purified", - "form_2168": "Normal", - "form_2169": "Shadow", - "form_2170": "Purified", - "form_2171": "Normal", - "form_2172": "Shadow", - "form_2173": "Purified", - "form_2174": "Normal", - "form_2175": "Shadow", - "form_2176": "Purified", - "form_2177": "Normal", - "form_2178": "Shadow", - "form_2179": "Purified", - "form_2180": "Normal", - "form_2181": "Shadow", - "form_2182": "Purified", - "form_2183": "Normal", - "form_2184": "Shadow", - "form_2185": "Purified", - "form_2186": "Normal", - "form_2187": "Shadow", - "form_2188": "Purified", - "form_2189": "Normal", - "form_2190": "Shadow", - "form_2191": "Purified", - "form_2192": "Normal", - "form_2193": "Shadow", - "form_2194": "Purified", - "form_2195": "Normal", - "form_2196": "Shadow", - "form_2197": "Purified", - "form_2198": "Normal", - "form_2199": "Shadow", - "form_2200": "Purified", - "form_2201": "Normal", - "form_2202": "Shadow", - "form_2203": "Purified", - "form_2204": "Normal", - "form_2205": "Shadow", - "form_2206": "Purified", - "form_2207": "Normal", - "form_2208": "Shadow", - "form_2209": "Purified", - "form_2210": "Normal", - "form_2211": "Shadow", - "form_2212": "Purified", - "form_2213": "Normal", - "form_2214": "Shadow", - "form_2215": "Purified", - "form_2216": "Normal", - "form_2217": "Shadow", - "form_2218": "Purified", - "form_2219": "Normal", - "form_2220": "Shadow", - "form_2221": "Purified", - "form_2222": "Normal", - "form_2223": "Shadow", - "form_2224": "Purified", - "form_2225": "Normal", - "form_2226": "Shadow", - "form_2227": "Purified", - "form_2228": "Normal", - "form_2229": "Shadow", - "form_2230": "Purified", - "form_2231": "Normal", - "form_2232": "Shadow", - "form_2233": "Purified", - "form_2234": "Normal", - "form_2235": "Shadow", - "form_2236": "Purified", - "form_2237": "Normal", - "form_2238": "Shadow", - "form_2239": "Purified", - "form_2240": "Normal", - "form_2241": "Shadow", - "form_2242": "Purified", - "form_2243": "Normal", - "form_2244": "Shadow", - "form_2245": "Purified", - "form_2246": "Normal", - "form_2247": "Shadow", - "form_2248": "Purified", - "form_2249": "Normal", - "form_2250": "Shadow", - "form_2251": "Purified", - "form_2252": "Normal", - "form_2253": "Shadow", - "form_2254": "Purified", - "form_2255": "Normal", - "form_2256": "Shadow", - "form_2257": "Purified", - "form_2258": "Normal", - "form_2259": "Shadow", - "form_2260": "Purified", - "form_2261": "Normal", - "form_2262": "Shadow", - "form_2263": "Purified", - "form_2264": "Normal", - "form_2265": "Shadow", - "form_2266": "Purified", - "form_2267": "Normal", - "form_2268": "Shadow", - "form_2269": "Purified", - "form_2270": "Normal", - "form_2271": "Shadow", - "form_2272": "Purified", - "form_2273": "Normal", - "form_2274": "Shadow", - "form_2275": "Purified", - "form_2276": "Normal", - "form_2277": "Shadow", - "form_2278": "Purified", - "form_2279": "Normal", - "form_2280": "Shadow", - "form_2281": "Purified", - "form_2282": "Normal", - "form_2283": "Shadow", - "form_2284": "Purified", - "form_2285": "Normal", - "form_2286": "Shadow", - "form_2287": "Purified", - "form_2288": "Normal", - "form_2289": "Shadow", - "form_2290": "Purified", - "form_2291": "Normal", - "form_2292": "Shadow", - "form_2293": "Purified", - "form_2294": "Normal", - "form_2295": "Shadow", - "form_2296": "Purified", - "form_2297": "Normal", - "form_2298": "Shadow", - "form_2299": "Purified", - "form_2300": "Normal", - "form_2301": "Shadow", - "form_2302": "Purified", - "form_2303": "Normal", - "form_2304": "Shadow", - "form_2305": "Purified", - "form_2306": "Normal", - "form_2307": "Shadow", - "form_2308": "Purified", - "form_2309": "Normal", - "form_2310": "Shadow", - "form_2311": "Purified", - "form_2312": "Normal", - "form_2313": "Shadow", - "form_2314": "Purified", - "form_2315": "Normal", - "form_2316": "Shadow", - "form_2317": "Purified", - "form_2318": "Normal", - "form_2319": "Shadow", - "form_2320": "Purified", - "form_2321": "Normal", - "form_2322": "Shadow", - "form_2323": "Purified", - "form_2324": "Normal", - "form_2325": "Shadow", - "form_2326": "Purified", - "form_2327": "Spring 2020", - "form_2328": "Spring 2020", - "form_2329": "Spring 2020", - "form_2330": "Female", - "form_2331": "Female", - "form_2332": "Costume 2020", - "form_2333": "Costume 2020", - "form_2334": "Costume 2020", - "form_2335": "Galarian", - "form_2336": "Galarian", - "form_2337": "Galarian", - "form_2338": "Galarian", - "form_2339": "Galarian", - "form_2340": "Galarian", - "form_2341": "Galarian", - "form_2342": "Galarian Standard", - "form_2343": "Galarian Zen", - "form_2344": "Galarian", - "form_2345": "Galarian", - "form_2501": "Normal", - "form_2502": "Shadow", - "form_2503": "Purified", - "form_2504": "Normal", - "form_2505": "Shadow", - "form_2506": "Purified", - "form_2510": "Normal", - "form_2511": "Shadow", - "form_2512": "Purified", - "form_2516": "Normal", - "form_2517": "Shadow", - "form_2518": "Purified", - "form_2582": "Galarian", - "form_2583": "Galarian", - "form_2585": "Costume 2020", - "form_2586": "Costume 2020", - "form_2587": "Normal", - "form_2588": "Female", - "form_2589": "Normal", - "form_2590": "Female", - "form_2591": "Ten Percent", - "form_2592": "Fifty Percent", - "form_2593": "Complete", - "form_2594": "Archipelago", - "form_2595": "Continental", - "form_2596": "Elegant", - "form_2597": "Fancy", - "form_2598": "Garden", - "form_2599": "High Plains", - "form_2600": "Icy Snow", - "form_2601": "Jungle", - "form_2602": "Marine", - "form_2603": "Meadow", - "form_2604": "Modern", - "form_2605": "Monsoon", - "form_2606": "Ocean", - "form_2607": "Pokeball", - "form_2608": "Polar", - "form_2609": "River", - "form_2610": "Sandstorm", - "form_2611": "Savanna", - "form_2612": "Sun", - "form_2613": "Tundra", - "form_2614": "Red", - "form_2615": "Yellow", - "form_2616": "Orange", - "form_2617": "Blue", - "form_2618": "White", - "form_2619": "Red", - "form_2620": "Yellow", - "form_2621": "Orange", - "form_2622": "Blue", - "form_2623": "White", - "form_2624": "Red", - "form_2625": "Yellow", - "form_2626": "Orange", - "form_2627": "Blue", - "form_2628": "White", - "form_2629": "Natural", - "form_2630": "Heart", - "form_2631": "Star", - "form_2632": "Diamond", - "form_2633": "Debutante", - "form_2634": "Matron", - "form_2635": "Dandy", - "form_2636": "La Reine", - "form_2637": "Kabuki", - "form_2638": "Pharaoh", - "form_2639": "Shield", - "form_2640": "Blade", - "form_2641": "Small", - "form_2642": "Average", - "form_2643": "Large", - "form_2644": "Super", - "form_2645": "Small", - "form_2646": "Average", - "form_2647": "Large", - "form_2648": "Super", - "form_2649": "Neutral", - "form_2650": "Active", - "form_2651": "Confined", - "form_2652": "Unbound", - "form_2666": "Costume 2020 Deprecated", - "form_2668": "Costume 2020", - "form_2669": "Adventure Hat 2020", - "form_2670": "Winter 2020", - "form_2671": "Winter 2020", - "form_2672": "Winter 2020", - "form_2673": "2020", - "form_2674": "2021", - "costume_1": "Holiday", - "costume_2": "Party", - "costume_3": "Ash", - "costume_4": "Witch", - "costume_5": "Adventure", - "costume_6": "Black Cap", - "costume_7": "Flower", - "costume_8": "Toque", - "costume_9": "Detective", - "costume_10": "One Piece", - "costume_11": "Pokemon Day", - "move_1": "ช็อคไฟฟ้า", - "move_2": "เคลื่อนที่ความไวแสง", - "move_3": "ข่วน", - "move_4": "ลูกไฟ", - "move_5": "แส้เถาวัลย์", - "move_6": "พุ่งเข้าชน", - "move_7": "คัตเตอร์ใบไม้", - "move_8": "พุ่งเข้าใส่", - "move_9": "ปืนฉีดน้ำ", - "move_10": "กัดติด", - "move_11": "ปัด", - "move_12": "ตบเรียกสติ", - "move_13": "รัด", - "move_14": "แสงมฤตยู", - "move_15": "ลิ้นเลีย", - "move_16": "คลื่นชั่วร้าย", - "move_17": "ควัน", - "move_18": "สลัดจ์แอตแทก", - "move_19": "เมทัลคลอว์", - "move_20": "หนีบ", - "move_21": "กงล้อไฟ", - "move_22": "เมก้าฮอร์น", - "move_23": "โจมตีด้วยปีก", - "move_24": "พ่นไฟ", - "move_25": "โจมตีแบบไม่คาดคิด", - "move_26": "ขุดรู", - "move_27": "เตะเลียด", - "move_28": "ครอสช็อป", - "move_29": "ไซโคคัตเตอร์", - "move_30": "ลำแสงพลังจิต", - "move_31": "แผ่นดินไหว", - "move_32": "ศิลาพิฆาต", - "move_33": "หมัดเยือกแข็ง", - "move_34": "ฮาร์ทแสตมป์", - "move_35": "ปล่อยกระแสไฟฟ้า", - "move_36": "ลัสเตอร์แคนนอน", - "move_37": "จิก", - "move_38": "จะงอยสว่าน", - "move_39": "ลำแสงเยือกแข็ง", - "move_40": "พายุหิมะ", - "move_41": "แอร์สแลช", - "move_42": "คลื่นความร้อน", - "move_43": "ดับเบิ้ลนีดเดิ้ล", - "move_44": "โจมตีด้วยพิษ", - "move_45": "คมมีดบูมเมอแรง", - "move_46": "ดริลไลน์เนอร์", - "move_47": "บุษบาโปรยปราย", - "move_48": "เมกาเดรน", - "move_49": "เสียงฮัมของแมลง", - "move_50": "เขี้ยวพิษ", - "move_51": "ไนท์สแลช", - "move_52": "ฟันแหลก", - "move_53": "บับเบิ้ลบีม", - "move_54": "กงล้อนรก", - "move_55": "คาราเต้ช็อป", - "move_56": "เตะต่ำ", - "move_57": "อควาเจ็ท", - "move_58": "อควาเทล", - "move_59": "ระเบิดเมล็ดพืช", - "move_60": "ไซโคช็อค", - "move_61": "หินผาถล่ม", - "move_62": "พลังโบราณ", - "move_63": "สุสานกำแพงศิลา", - "move_64": "ผาทลาย", - "move_65": "พาวเวอร์เจม", - "move_66": "แฝงเงา", - "move_67": "ชาโดว์พันช์", - "move_68": "ชาโดว์คลอว์", - "move_69": "สายลมบอกเหตุ", - "move_70": "ชาโดว์บอล", - "move_71": "บูลเล็ทพันช์", - "move_72": "แมกเน็ทบอมบ์", - "move_73": "ปีกเหล็ก", - "move_74": "ไอออนเฮด", - "move_75": "พาราโบล่าชาร์จ", - "move_76": "สปาร์ค", - "move_77": "หมัดสายฟ้า", - "move_78": "ฟ้าผ่า", - "move_79": "หนึ่งแสนโวลต์", - "move_80": "พายุหมุน", - "move_81": "ลมหายใจมังกร", - "move_82": "คลื่นมังกร", - "move_83": "ดรากอนคลอว์", - "move_84": "เสียงทรงเสน่ห์", - "move_85": "เดรนคิส", - "move_86": "เมจิคัลไชน์", - "move_87": "มูนฟอร์ซ", - "move_88": "คลอเคลีย", - "move_89": "ครอสพอยซัน", - "move_90": "สลัดจ์บอมบ์", - "move_91": "สลัดจ์เวฟ", - "move_92": "ดัสท์ชูท", - "move_93": "มัดช็อต", - "move_94": "ตะบองกระดูก", - "move_95": "ปรับพื้นราบ", - "move_96": "ระเบิดโคลน", - "move_97": "ตัดต่อเนื่อง", - "move_98": "แมลงกัด", - "move_99": "ลำแสงสัญญาณ", - "move_100": "ซิสเซอร์ครอส", - "move_101": "ไนโตรชาร์จ", - "move_102": "ระเบิดไฟ", - "move_103": "เพลิงอัคคี", - "move_104": "น้ำเค็ม", - "move_105": "คลื่นน้ำ", - "move_106": "น้ำร้อน", - "move_107": "ไฮโดรปั๊มพ์", - "move_108": "ไซโคคิเนซิส", - "move_109": "ไซโคเบรก", - "move_110": "สะเก็ดน้ำแข็ง", - "move_111": "สายลมเยือกแข็ง", - "move_112": "ลมหายใจเยือกแข็ง", - "move_113": "ดูดซับ", - "move_114": "กิก้าเดรน", - "move_115": "หมัดไฟ", - "move_116": "โซล่าร์บีม", - "move_117": "ลีฟเบลด", - "move_118": "พาวเวอร์วิป", - "move_119": "ดิ้นกระแด่ว", - "move_120": "กรดละลาย", - "move_121": "แอร์คัตเตอร์", - "move_122": "ลมพายุ", - "move_123": "ผ่าอิฐ", - "move_124": "ตัด", - "move_125": "สปีดสตาร์", - "move_126": "เขาขวิด", - "move_127": "เหยียบแบน", - "move_128": "พุ่งหัวชน", - "move_129": "ฟันหน้ามรณะ", - "move_130": "ฟาดผัวะ", - "move_131": "ทิ้งตัวทับ", - "move_132": "นิทรา", - "move_133": "ดิ้นรน", - "move_134": "น้ำร้อน", - "move_135": "ไฮโดรปั๊มพ์", - "move_136": "รัด", - "move_137": "รัด", - "move_200": "ตัดต่อเนื่อง", - "move_201": "แมลงกัด", - "move_202": "กัดติด", - "move_203": "โจมตีแบบไม่คาดคิด", - "move_204": "ลมหายใจมังกร", - "move_205": "ช็อคไฟฟ้า", - "move_206": "สปาร์ค", - "move_207": "เตะเลียด", - "move_208": "คาราเต้ช็อป", - "move_209": "ลูกไฟ", - "move_210": "โจมตีด้วยปีก", - "move_211": "จิก", - "move_212": "ลิ้นเลีย", - "move_213": "ชาโดว์คลอว์", - "move_214": "แส้เถาวัลย์", - "move_215": "คัตเตอร์ใบไม้", - "move_216": "มัดช็อต", - "move_217": "สะเก็ดน้ำแข็ง", - "move_218": "ลมหายใจเยือกแข็ง", - "move_219": "เคลื่อนที่ความไวแสง", - "move_220": "ข่วน", - "move_221": "พุ่งเข้าชน", - "move_222": "ปัด", - "move_223": "ตัด", - "move_224": "โจมตีด้วยพิษ", - "move_225": "กรดละลาย", - "move_226": "ไซโคคัตเตอร์", - "move_227": "หินผาถล่ม", - "move_228": "เมทัลคลอว์", - "move_229": "บูลเล็ทพันช์", - "move_230": "ปืนฉีดน้ำ", - "move_231": "ดิ้นกระแด่ว", - "move_232": "ปืนฉีดน้ำ", - "move_233": "สาดโคลน", - "move_234": "ท่าโขกหัวเต็มพิกัด", - "move_235": "จิตตานุภาพ", - "move_236": "เหล็กในพิษ", - "move_237": "ฟอง", - "move_238": "หลอกตี", - "move_239": "ปีกเหล็ก", - "move_240": "เขี้ยวไฟ", - "move_241": "ถล่มหิน", - "move_242": "แปลงร่าง", - "move_243": "ตอบโต้", - "move_244": "ผงหิมะ", - "move_245": "อินไฟท์", - "move_246": "หมัดดินระเบิด", - "move_247": "โฟกัสบลาสท์", - "move_248": "ออโรร่าบีม", - "move_249": "ชาร์จบีม", - "move_250": "โวลต์เชนจ์", - "move_251": "ไวลด์โวลต์", - "move_252": "ปืนใหญ่แม่เหล็กไฟฟ้า", - "move_253": "ดรากอนเทล", - "move_254": "หิมะถล่ม", - "move_255": "แอร์สแลช", - "move_256": "เบรฟเบิร์ด", - "move_257": "ก็อดเบิร์ด", - "move_258": "สุสานทรายดูด", - "move_259": "ร็อคบลาสท์", - "move_260": "เกาะติด", - "move_261": "การต่อต้านของแมลง", - "move_262": "ลมสีเงิน", - "move_263": "ทำให้ตกใจ", - "move_264": "คำสาป", - "move_265": "ไนท์เฉด", - "move_266": "ไอออนเทล", - "move_267": "ไจโรบอล", - "move_268": "เฮฟวีบอมเบอร์", - "move_269": "วงล้อไฟ", - "move_270": "โอเวอร์ฮีท", - "move_271": "ปืนกลเมล็ดพืช", - "move_272": "ปมหญ้า", - "move_273": "เอนเนอร์จี้บอล", - "move_274": "สัมผัสพิเศษ", - "move_275": "รู้ล่วงหน้า", - "move_276": "มิเรอร์โค้ต", - "move_277": "อารมณ์เดือดพล่าน", - "move_278": "บาร์กเอาต์", - "move_279": "กัดขย้ำ", - "move_280": "หลอกลวง", - "move_281": "พลังเร้นลับ", - "move_287": "หาว", - "move_282": "พุ่งเข้าใส่", - "move_285": "หมู่ดาวตก", - "move_283": "ปีนน้ำตก", - "move_284": "โต้คลื่น", - "move_288": "ไซโคบูสท์", - "move_286": "คำอธิษฐานแห่งการทำลาย", - "move_290": "ดาบผาชัน", - "move_289": "กระแสคลื่นแหล่งกำเนิด", - "move_291": "ของขวัญ", - "move_292": "เวเธอร์บอล", - "move_293": "เวเธอร์บอล", - "move_294": "เวเธอร์บอล", - "move_295": "เวเธอร์บอล", - "move_296": "ฮาร์ดแพลนท์", - "move_298": "บลาสท์เบิร์น", - "move_297": "ตีตก", - "move_299": "ปืนใหญ่พลังน้ำ", - "move_300": "สุดยอดไม้ตาย", - "move_301": "โคเม็ทพันช์", - "move_302": "พุ่งหัวจรวด", - "move_303": "ระเบิดกรด", - "move_304": "พลังปฐพี", - "move_305": "ค้อนก้ามปู", - "move_306": "กระโจนใส่", - "move_307": "กรงเล็บทำลายล้าง", - "move_308": "ปืนใหญ่ออคตัน", - "move_309": "มิเรอร์ช็อต", - "move_310": "พลังสุดขีด", - "move_311": "เหล็กในปลิดชีพ", - "move_312": "กราสมิกเซอร์", - "move_313": "ดูดเลือด", - "move_314": "เดรนพันช์", - "move_315": "ชาโดว์โบน", - "move_316": "น้ำโคลน", - "move_317": "เตะเปลวเพลิง", - "move_318": "เชลล์เบลด", - "move_319": "โกรว์พันช์", - "move_320": "ออดอ้อน", - "move_321": "กีก้าอิมแพค", - "move_322": "ระเบิดอารมณ์", - "move_323": "ทดแทนคุณ", - "move_324": "ซิงโครนอยซ์", - "move_325": "ล็อคออน", - "move_326": "เขี้ยวสายฟ้า", - "move_327": "เขี้ยวน้ำแข็ง", - "move_328": "เขาสว่าน", - "move_329": "แยกพสุธา", - "move_330": "ดาบศักดิ์สิทธิ์", - "move_331": "ฟลายอิ้งเพรส", - "move_332": "กระสุนคลื่นพลัง", - "move_333": "เอาคืน", - "move_334": "ปืนใหญ่หิน", - "move_335": "แอโรบลาสท์", - "move_336": "เทคโนบัสเตอร์", - "move_337": "เทคโนบัสเตอร์", - "move_338": "เทคโนบัสเตอร์", - "move_339": "เทคโนบัสเตอร์", - "move_340": "เทคโนบัสเตอร์", - "move_341": "บินขึ้น" -} diff --git a/static/locale/zh.json b/static/locale/zh.json deleted file mode 100644 index 68b55479..00000000 --- a/static/locale/zh.json +++ /dev/null @@ -1,3625 +0,0 @@ -{ - "UNKNOWN_POKESTOP": "Unknown Pokestop", - "EMBED_DIRECTIONS": "DIRECTIONS", - "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{0} Subscriptions are not enabled in the config.", - "MSG_NOT_MODERATOR_OR_HIGHER": "{0} is not a moderator or higher thus you may not see other's subscription settings.", - "MSG_INVALID_USER_MENTION": "{0} Failed to retrieve user with mention tag {1}.", - "MSG_USER_NOT_SUBSCRIBED": "{0} is not currently subscribed to any Pokemon or Raid notifications.", - "TIME_YEARS": "years", - "TIME_DAYS": "days", - "TIME_HOURS": "hours", - "TIME_MINUTES": "minutes", - "TIME_SECONDS": "seconds", - "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", - "NOTIFY_ENABLE_DISABLE": "{0} has **{1}d** Pokemon, Raid, Quest, and Invasion notifications.", - "NOTIFY_INVALID_COORDINATES": "{0} Unable not parse {1} as valid coordinates.", - "NOTIFY_DISTANCE_SET": "{0} Notifications only within a {1} meters radius of location {2},{3} will be sent.", - "NOTIFY_PHONE_NUMBER_SET": "{0} Text message notifications for ultra rare Pokemon will be sent to {1}.", - "NOTIFY_INVALID_IV_VALUES": "{0} {1} is not a valid value. (Example: `0-15-6`)", - "NOTIFY_INVALID_ATTACK_VALUE": "{0} {1} is not a valid attack value. Must be between `0-15`.", - "NOTIFY_INVALID_DEFENSE_VALUE": "{0} {1} is not a valid defense value. Must be between `0-15`.", - "NOTIFY_INVALID_STAMINA_VALUE": "{0} {1} is not a valid stamina value. Must be between `0-15`.", - "NOTIFY_INVALID_IV_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_INVALID_GENDER": "{0} {1} is not a valid gender. (i.e. `m`, `f`, `*`)", - "NOTIFY_INVALID_LEVEL": "{0} {1} must be within the range of `0-35`.", - "NOTIFY_INVALID_MINIMUM_IV": "{0} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", - "NOTIFY_INVALID_MINIMUM_LEVEL": "{0} Failed to parse minimum level provided '{1}'.", - "NOTIFY_INVALID_MAXIMUM_LEVEL": "{0} Failed to parse maximum level provided '{1}'.", - "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{0} {1} are not valid Pokemon names or IDs.", - "NOTIFY_INVALID_POKEMON_ID_OR_NAME": "{0} {1} are not valid Pokemon name or ID.", - "NOTIFY_INVALID_POKEMON_ID": "{0} {1} is not a valid Pokemon id.", - "NOTIFY_COMMON_TYPE_POKEMON": "{0} {1} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {2}% or higher.", - "NOTIFY_INVALID_POKEMON_SPECIFIED": "{0} Unable to recognize any of the Pokemon you specified.", - "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{0} is not subscribed to any Pokemon notifications.", - "NOTIFY_INVALID_PVP_LEAGUE": "{0} {1} is not a valid PvP league. (Great or Ultra)", - "NOTIFY_INVALID_PVP_RANK_RANGE": "{0} {1} must be within the range of `0-4096`.", - "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{0} {1} must be within the range of `0-100`.", - "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokemon notifications.", - "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} Unable to remove {1} Pokemon subscriptions.", - "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Pokemon notifications.", - "NOTIFY_INVALID_CITY_ROLE": "{0} {1} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", - "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{0} has unsubscribed from **all** raid boss notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{0} has unsubscribed from **all** quest notifications.", - "NOTIFY_INVALID_INVASION_GENDER": "{0} Please specify a gender. i.e. `.invmenot fire-m` or `.invmenot water-f ontario or `.invmenot giovanni`", - "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Team Rocket invasion notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{0} has unsubscribed from **all** Pokestop lure notifications.", - "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{0} added gym subscription `{1}` to your list of gyms to receive raid notifications from.", - "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{0} already subscribed to gym notifications from {1}.", - "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{0} Removed gym subscription `{1}` from your list of gyms to receive notifications from.", - "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{0} has unsubscribed from **all** gym notifications.", - "NOTIFY_INVALID_ICON_STYLE": "{0} invalid icon style, type `{1}icons` to see a list of valid options.", - "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Pokemon subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Raid subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Quest subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Team Rocket Invasion subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Gym subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{0} You have reached the maximum Lure subscriptions limit of {1}, please remove subscriptions in order to add more.", - "NOTIFY_ICON_STYLE_CHANGE": "{0} Icon style changed to **{1}**.", - "NOTIFY_IMPORT_UPLOAD_FILE": "{0} Please upload your subscriptions.json file to import now within 3 minutes...", - "NOTIFY_IMPORT_MALFORMED_DATA": "{0} Malformed subscription data, unable to import.", - "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{0} Unable to get uploaded attachment.", - "NOTIFY_IMPORT_SUCCESS": "{0} subscriptions were imported successfully.", - "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{0} does not have any subscriptions to export.", - "NOTIFY_EXPORT_SUCCESS": "{0} Download your subscription settings here.", - "NOTIFY_SETTINGS_EMBED_TITLE": "**{0} Notification Settings (Page: {1}/{2}):**", - "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{0}**", - "NOTIFY_SETTINGS_EMBED_CITIES": "Pokemon Feed Zones: ```{0}```", - "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{0}**", - "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", - "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{0} meters (Location: {1})", - "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{0}**", - "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {0}% ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {0} ({1} unlisted)", - "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({0}/{1} used)", - "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({0}/{1} used)", - "NOTIFY_FROM": "{0} (From: {1})", - "ALL_AREAS": "All Areas", - "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", - "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{0}feedme cityname` to assign yourself to that city role.*", - "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{0} {1} is not a valid city name, type `{2}cities` to see a list of available cities.", - "FEEDS_INVALID_CITY_NAME": "{0} {1} is not a valid city name.", - "FEEDS_ASSIGNED_ALL_ROLES": "{0} was assigned all city feed roles.", - "FEEDS_UNASSIGNED_ALL_ROLES": "{0} was unassigned all city feed roles.", - "FEEDS_ASSIGNED_ROLES": "{0} has joined role(s) **{1}**.", - "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{0} is already assigned to role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES": "{0} has been removed from role(s) **{1}**.", - "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{0} is not assigned to role(s) **{1}**.", - "FEEDS_PLEASE_WAIT": "{0} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", - "CHANNEL_MESSAGES_DELETED": "{0} Channel {1} messages have been deleted.", - "GYM_NO_POKESTOPS_CONVERTED": "{0} No Pokestops have been converted to Gyms.", - "GYM_NO_POKESTOPS_UPDATED": "{0} No Pokestops have been updated.", - "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", - "GYM_UNKNOWN_NAME": "Unknown Gym Name", - "GYM_UNKNOWN_IMAGE": "Unknown Image Url", - "GYM_POKESTOPS_CONVERTED": "{0} {1} Pokestops updated to Gyms.", - "GYM_POKESTOPS_DELETED": "{0} {1} Pokestops deleted.", - "GYM_NAME": "- **{0}**", - "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({1})] [[Gym Image]({0})]", - "SHINY_STATS_INVALID_CHANNEL": "{0} Shiny stats channel does not exist.", - "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {0}**]", - "SHINY_STATS_NEWLINE": "----------------------------------------------", - "SHINY_STATS_MESSAGE": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{0} (#{1})** | **{2}** shiny out of **{3}** total seen in the last 24 hours with a **1/{4}** ratio.", - "SHINY_STATS_TOTAL_MESSAGE": "Found **{0}** total shinies out of **{1}** possiblities.", - "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{0}** total shinies out of **{1}** possiblities with a **1/{2}** ratio in total.", - "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", - "ERROR_NESTS_DISABLED": "{0} Nests disabled.", - "ERROR_NESTS_LIST": "{0} Unable to retrieve nest list.", - "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {0} of {1} total members.", - "ERROR_PARSING_USER_ID": "{0} Unable to recognize user id {1}.", - "DONATE_MESSAGE": "{0} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", - "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", - "SUBSCRIPTIONS_FROM_CITY": " from city **{0}**", - "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** lure notifications{2}.", - "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** lure notifications{2}.", - "ERROR_NO_LURE_SUBSCRIPTIONS": "{0} is not subscribed to any lure notifications{1}.", - "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** raid notifications{2}.", - "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** raid notifications{2}.", - "ERROR_NO_RAID_SUBSCRIPTIONS": "{0} is not subscribed to any raid notifications{1}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** quest notifications{2}.", - "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** quest notifications{2}.", - "ERROR_NO_QUEST_SUBSCRIPTIONS": "{0} is not subscribed to any quest notifications{1}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{0} has subscribed to **{1}** Team Rocket invasion reward notifications{2}.", - "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** Team Rocket invasion reward notifications{2}.", - "ERROR_NO_INVASION_SUBSCRIPTIONS": "{0} is not subscribed to any Team Rocket invasion notifications{1}.", - "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{0} has unsubscribed from **{1}** {2} League PvP notifications.", - "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} are you sure you want to remove **all** {1} of your {2} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", - "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{0} has unsubscribed from **all** {1} League PvP Pokemon notifications.", - "EVENT_POKEMON_SET": "{0} event Pokemon set to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_ADD": "{0} event Pokemon added to `{1}`, feeds will adjust to only show in channels that are 90% or higher.", - "EVENT_POKEMON_REMOVE": "{0} event Pokemon `{1}` removed.", - "DIRECT_MESSAGE_NOT_SUPPORTED": "{0} Direct message is not supported for this command.", - "PVP_GREAT_LEAGUE": "Great League", - "PVP_ULTRA_LEAGUE": "Ultra League", - "PVP_RANK": "Rank", - "PVP_CP": "CP", - "weather_0": "None", - "weather_1": "Clear", - "weather_2": "Rainy", - "weather_3": "PartlyCloudy", - "weather_4": "Cloudy", - "weather_5": "Windy", - "weather_6": "Snow", - "weather_7": "Fog", - "quest_1": "{0} time(s) First Catch OTD", - "quest_2": "{0} time(s) First Pokestop OTD", - "quest_3": "Multi Part Quest", - "quest_4": "Catch {0} Pokemon", - "quest_5": "Spin {0} Pokestop(s)", - "quest_6": "Hatch {0} Egg(s)", - "quest_7": "Complete {0} Gym Battle(s)", - "quest_8": "Complete {0} Raid Battle(s)", - "quest_9": "Complete {0} Quest", - "quest_10": "Transfer {0} Pokemon", - "quest_11": "Favorite {0} Pokemon", - "quest_12": "Autocomplete", - "quest_13": "Use {0} Berries on Pokemon", - "quest_14": "Power up {0} Pokemon", - "quest_15": "Evolve {0} Pokemon", - "quest_16": "Land {0} Throw(s)", - "quest_17": "Get {0} Buddy candy", - "quest_18": "Get {0} Badge(s)", - "quest_19": "Get {0} Level", - "quest_20": "Join {0} Raid Battle(s)", - "quest_21": "Complete {0} Battle(s)", - "quest_22": "Add {0} Friend(s)", - "quest_23": "Trade {0} Pokemon", - "quest_24": "Send {0} Gift(s)", - "quest_25": "Evolve {0} Into Specific Pokemon", - "quest_27": "Complete {0} Combat(s)", - "quest_28": "Take {0} Snapshot(s)", - "quest_29": "Battle {0} Team Rocket Battle(s)", - "quest_30": "Purify {0} Pokemon", - "quest_31": "Find {0} Team Rocket Invasion(s)", - "quest_32": "{0} time(s) First Grunt OTD", - "quest_33": "Feed your Buddy {0} times", - "quest_34": "Earn {0} hearts with your Buddy", - "quest_35": "Play {0} times with your Buddy", - "quest_36": "Increase your Buddy Level {0} times", - "quest_37": "Earn {0} Friendship points by Walking with your Buddy", - "quest_38": "Earn {0} Souvenirs from your Buddy", - "quest_39": "Use Incense {0} times", - "quest_40": "quest_40", - "quest_41": "quest_41", - "quest_42": "quest_42", - "quest_43": "Mega-Evolve {0} Pokemon", - "quest_reward_1": "{0:N0} XP", - "quest_reward_2": "{0} {1}", - "quest_reward_3": "{0:N0} Stardust", - "quest_reward_4": "{0} {1} Candy", - "quest_reward_5": "Avatar Clothing", - "quest_reward_6": "Quest", - "quest_reward_7": "{0}", - "quest_reward_8": "{0:N0} Pokecoins", - "quest_reward_11": "Sticker", - "quest_reward_12": "Mega Energy", - "quest_condition_1": "Type(s): {0}", - "quest_condition_2": "Pokemon: {0}", - "quest_condition_3": "Weather Boosted", - "quest_condition_4": "Daily Capture Bonus", - "quest_condition_5": "Daily Spin Bonus", - "quest_condition_6": "Win Raid", - "quest_condition_7": "Raid Level(s): {0}", - "quest_condition_8": "{0} Throw", - "quest_condition_9": "Win Gym Battle", - "quest_condition_10": "Super Effective Charge", - "quest_condition_11": "Item: {0}", - "quest_condition_12": "Unique Pokestop", - "quest_condition_13": "Quest Context", - "quest_condition_14": "{0} Throw In a Row", - "quest_condition_15": "Curve Ball", - "quest_condition_16": "Badge Type", - "quest_condition_17": "Player Level", - "quest_condition_18": "Win Battle", - "quest_condition_19": "New Friend", - "quest_condition_20": "Days In a Row", - "quest_condition_21": "Unique Pokemon", - "quest_condition_22": "NPC Combat", - "quest_condition_23": "PVP Combat", - "quest_condition_24": "Location", - "quest_condition_25": "Distance", - "quest_condition_26": "Pokemon Alignment(s): {0}", - "quest_condition_27": "Invasion Category(s): {0}", - "quest_condition_28": "With Buddy", - "quest_condition_37": "With Mega Evo Pokemon", - "alignment_1": "Shadow", - "alignment_2": "Purified", - "character_category_1": "Team Leader", - "character_category_2": "Grunt", - "throw_type_10": "Nice", - "throw_type_11": "Great", - "throw_type_12": "Excellent", - "throw_type_13": "Curve", - "item_1": "Poke Ball", - "item_2": "Great Ball", - "item_3": "Ultra Ball", - "item_4": "Master Ball", - "item_5": "Premier Ball", - "item_101": "Potion", - "item_102": "Super Potion", - "item_103": "Hyper Potion", - "item_104": "Max Potion", - "item_201": "Revive", - "item_202": "Max Revive", - "item_301": "Lucky Egg", - "item_401": "Incense", - "item_402": "Spicy Incense", - "item_403": "Cool Incense", - "item_404": "Floral Incense", - "item_501": "Lure Module", - "item_502": "Glacial Lure Module", - "item_503": "Mossy Lure Module", - "item_504": "Magnetic Lure Module", - "item_602": "X Attack", - "item_603": "X Defense", - "item_604": "X Miracle", - "item_701": "Razz Berry", - "item_702": "Bluk Berry", - "item_703": "Nanab Berry", - "item_704": "Wepar Berry", - "item_705": "Pinap Berry", - "item_706": "Golden Razz Berry", - "item_707": "Golden Nanab Berry", - "item_708": "Silver Pinap Berry", - "item_801": "Special Camera", - "item_901": "Incubator Basic Unlimited", - "item_902": "Incubator Basic", - "item_903": "Incubator Super", - "item_1001": "Pokemon Storage Upgrade", - "item_1002": "Item Storage Upgrade", - "item_1101": "Sun Stone", - "item_1102": "King's Rock", - "item_1103": "Metal Coat", - "item_1104": "Dragon Scale", - "item_1105": "Up-Grade", - "item_1106": "Sinnoh Stone", - "item_1107": "Unova Stone", - "item_1201": "Fast TM", - "item_1202": "Charged TM", - "item_1301": "Rare Candy", - "item_1401": "Free Raid Pass", - "item_1402": "Premium Raid Pass", - "item_1403": "Legendary Raid Pass", - "item_1404": "Star Piece", - "item_1405": "Friend Gift Box", - "lure_501": "Normal", - "lure_502": "Glacial", - "lure_503": "Mossy", - "lure_504": "Magnetic", - "grunt_0": "None", - "grunt_1": "Blanche", - "grunt_2": "Candela", - "grunt_3": "Spark", - "grunt_4": "Male Grunt", - "grunt_5": "Female Grunt", - "grunt_6": "Bug - Female Grunt", - "grunt_7": "Bug - Male Grunt", - "grunt_8": "Darkness - Female Grunt", - "grunt_9": "Darkness - Male Grunt", - "grunt_10": "Dark - Female Grunt", - "grunt_11": "Dark - Male Grunt", - "grunt_12": "Dragon - Female Grunt", - "grunt_13": "Dragon - Male Grunt", - "grunt_14": "Fairy - Female Grunt", - "grunt_15": "Fairy - Male Grunt", - "grunt_16": "Fighting - Female Grunt", - "grunt_17": "Fighting - Male Grunt", - "grunt_18": "Fire - Female Grunt", - "grunt_19": "Fire - Male Grunt", - "grunt_20": "Flying - Female Grunt", - "grunt_21": "Flying - Male Grunt", - "grunt_22": "Grass - Female Grunt", - "grunt_23": "Grass - Male Grunt", - "grunt_24": "Ground - Female Grunt", - "grunt_25": "Ground - Male Grunt", - "grunt_26": "Ice - Female Grunt", - "grunt_27": "Ice - Male Grunt", - "grunt_28": "Metal - Female Grunt", - "grunt_29": "Metal - Male Grunt", - "grunt_30": "Normal - Female Grunt", - "grunt_31": "Normal - Male Grunt", - "grunt_32": "Poison - Female Grunt", - "grunt_33": "Poison - Male Grunt", - "grunt_34": "Psychic - Female Grunt", - "grunt_35": "Psychic - Male Grunt", - "grunt_36": "Rock - Female Grunt", - "grunt_37": "Rock - Male Grunt", - "grunt_38": "Water - Female Grunt", - "grunt_39": "Water - Male Grunt", - "grunt_40": "Player Team Leader", - "grunt_41": "Leader Cliff", - "grunt_42": "Leader Arlo", - "grunt_43": "Leader Sierra", - "grunt_44": "Giovanni", - "grunt_45": "Decoy - Male Grunt", - "grunt_46": "Decoy - Female Grunt", - "grunt_47": "Ghost - Female Grunt", - "grunt_48": "Ghost - Male Grunt", - "grunt_49": "Electric - Female Grunt", - "grunt_50": "Electric - Male Grunt", - "poke_0": "--", - "poke_1": "妙蛙種子", - "poke_2": "妙蛙草", - "poke_3": "妙蛙花", - "poke_4": "小火龍", - "poke_5": "火恐龍", - "poke_6": "噴火龍", - "poke_7": "傑尼龜", - "poke_8": "卡咪龜", - "poke_9": "水箭龜", - "poke_10": "綠毛蟲", - "poke_11": "鐵甲蛹", - "poke_12": "巴大蝶", - "poke_13": "獨角蟲", - "poke_14": "鐵殼蛹", - "poke_15": "大針蜂", - "poke_16": "波波", - "poke_17": "比比鳥", - "poke_18": "大比鳥", - "poke_19": "小拉達", - "poke_20": "拉達", - "poke_21": "烈雀", - "poke_22": "大嘴雀", - "poke_23": "阿柏蛇", - "poke_24": "阿柏怪", - "poke_25": "皮卡丘", - "poke_26": "雷丘", - "poke_27": "穿山鼠", - "poke_28": "穿山王", - "poke_29": "尼多蘭", - "poke_30": "尼多娜", - "poke_31": "尼多后", - "poke_32": "尼多朗", - "poke_33": "尼多力諾", - "poke_34": "尼多王", - "poke_35": "皮皮", - "poke_36": "皮可西", - "poke_37": "六尾", - "poke_38": "九尾", - "poke_39": "胖丁", - "poke_40": "胖可丁", - "poke_41": "超音蝠", - "poke_42": "大嘴蝠", - "poke_43": "走路草", - "poke_44": "臭臭花", - "poke_45": "霸王花", - "poke_46": "派拉斯", - "poke_47": "派拉斯特", - "poke_48": "毛球", - "poke_49": "摩魯蛾", - "poke_50": "地鼠", - "poke_51": "三地鼠", - "poke_52": "喵喵", - "poke_53": "貓老大", - "poke_54": "可達鴨", - "poke_55": "哥達鴨", - "poke_56": "猴怪", - "poke_57": "火爆猴", - "poke_58": "卡蒂狗", - "poke_59": "風速狗", - "poke_60": "蚊香蝌蚪", - "poke_61": "蚊香君", - "poke_62": "蚊香泳士", - "poke_63": "凱西", - "poke_64": "勇基拉", - "poke_65": "胡地", - "poke_66": "腕力", - "poke_67": "豪力", - "poke_68": "怪力", - "poke_69": "喇叭芽", - "poke_70": "口呆花", - "poke_71": "大食花", - "poke_72": "瑪瑙水母", - "poke_73": "毒刺水母", - "poke_74": "小拳石", - "poke_75": "隆隆石", - "poke_76": "隆隆岩", - "poke_77": "小火馬", - "poke_78": "烈焰馬", - "poke_79": "呆呆獸", - "poke_80": "呆殼獸", - "poke_81": "小磁怪", - "poke_82": "三合一磁怪", - "poke_83": "大蔥鴨", - "poke_84": "嘟嘟", - "poke_85": "嘟嘟利", - "poke_86": "小海獅", - "poke_87": "白海獅", - "poke_88": "臭泥", - "poke_89": "臭臭泥", - "poke_90": "大舌貝", - "poke_91": "刺甲貝", - "poke_92": "鬼斯", - "poke_93": "鬼斯通", - "poke_94": "耿鬼", - "poke_95": "大岩蛇", - "poke_96": "催眠貘", - "poke_97": "引夢貘人", - "poke_98": "大鉗蟹", - "poke_99": "巨鉗蟹", - "poke_100": "霹靂電球", - "poke_101": "頑皮雷彈", - "poke_102": "蛋蛋", - "poke_103": "椰蛋樹", - "poke_104": "卡拉卡拉", - "poke_105": "嘎啦嘎啦", - "poke_106": "飛腿郎", - "poke_107": "快拳郎", - "poke_108": "大舌頭", - "poke_109": "瓦斯彈", - "poke_110": "雙彈瓦斯", - "poke_111": "獨角犀牛", - "poke_112": "鑽角犀獸", - "poke_113": "吉利蛋", - "poke_114": "蔓藤怪", - "poke_115": "袋獸", - "poke_116": "墨海馬", - "poke_117": "海刺龍", - "poke_118": "角金魚", - "poke_119": "金魚王", - "poke_120": "海星星", - "poke_121": "寶石海星", - "poke_122": "魔牆人偶", - "poke_123": "飛天螳螂", - "poke_124": "迷唇姐", - "poke_125": "電擊獸", - "poke_126": "鴨嘴火獸", - "poke_127": "凱羅斯", - "poke_128": "肯泰羅", - "poke_129": "鯉魚王", - "poke_130": "暴鯉龍", - "poke_131": "拉普拉斯", - "poke_132": "百變怪", - "poke_133": "伊布", - "poke_134": "水伊布", - "poke_135": "雷伊布", - "poke_136": "火伊布", - "poke_137": "多邊獸", - "poke_138": "菊石獸", - "poke_139": "多刺菊石獸", - "poke_140": "化石盔", - "poke_141": "鐮刀盔", - "poke_142": "化石翼龍", - "poke_143": "卡比獸", - "poke_144": "急凍鳥", - "poke_145": "閃電鳥", - "poke_146": "火焰鳥", - "poke_147": "迷你龍", - "poke_148": "哈克龍", - "poke_149": "快龍", - "poke_150": "超夢", - "poke_151": "夢幻", - "poke_152": "菊草葉", - "poke_153": "月桂葉", - "poke_154": "大竺葵", - "poke_155": "火球鼠", - "poke_156": "火岩鼠", - "poke_157": "火爆獸", - "poke_158": "小鋸鱷", - "poke_159": "藍鱷", - "poke_160": "大力鱷", - "poke_161": "尾立", - "poke_162": "大尾立", - "poke_163": "咕咕", - "poke_164": "貓頭夜鷹", - "poke_165": "芭瓢蟲", - "poke_166": "安瓢蟲", - "poke_167": "圓絲蛛", - "poke_168": "阿利多斯", - "poke_169": "叉字蝠", - "poke_170": "燈籠魚", - "poke_171": "電燈怪", - "poke_172": "皮丘", - "poke_173": "皮寶寶", - "poke_174": "寶寶丁", - "poke_175": "波克比", - "poke_176": "波克基古", - "poke_177": "天然雀", - "poke_178": "天然鳥", - "poke_179": "咩利羊", - "poke_180": "茸茸羊", - "poke_181": "電龍", - "poke_182": "美麗花", - "poke_183": "瑪力露", - "poke_184": "瑪力露麗", - "poke_185": "樹才怪", - "poke_186": "蚊香蛙皇", - "poke_187": "毽子草", - "poke_188": "毽子花", - "poke_189": "毽子棉", - "poke_190": "長尾怪手", - "poke_191": "向日種子", - "poke_192": "向日花怪", - "poke_193": "蜻蜻蜓", - "poke_194": "烏波", - "poke_195": "沼王", - "poke_196": "太陽伊布", - "poke_197": "月亮伊布", - "poke_198": "黑暗鴉", - "poke_199": "呆呆王", - "poke_200": "夢妖", - "poke_201": "未知圖騰", - "poke_202": "果然翁", - "poke_203": "麒麟奇", - "poke_204": "榛果球", - "poke_205": "佛烈托斯", - "poke_206": "土龍弟弟", - "poke_207": "天蠍", - "poke_208": "大鋼蛇", - "poke_209": "布魯", - "poke_210": "布魯皇", - "poke_211": "千針魚", - "poke_212": "巨鉗螳螂", - "poke_213": "壺壺", - "poke_214": "赫拉克羅斯", - "poke_215": "狃拉", - "poke_216": "熊寶寶", - "poke_217": "圈圈熊", - "poke_218": "熔岩蟲", - "poke_219": "熔岩蝸牛", - "poke_220": "小山豬", - "poke_221": "長毛豬", - "poke_222": "太陽珊瑚", - "poke_223": "鐵炮魚", - "poke_224": "章魚桶", - "poke_225": "信使鳥", - "poke_226": "巨翅飛魚", - "poke_227": "盔甲鳥", - "poke_228": "戴魯比", - "poke_229": "黑魯加", - "poke_230": "刺龍王", - "poke_231": "小小象", - "poke_232": "頓甲", - "poke_233": "多邊獸Ⅱ", - "poke_234": "驚角鹿", - "poke_235": "圖圖犬", - "poke_236": "無畏小子", - "poke_237": "戰舞郎", - "poke_238": "迷唇娃", - "poke_239": "電擊怪", - "poke_240": "鴨嘴寶寶", - "poke_241": "大奶罐", - "poke_242": "幸福蛋", - "poke_243": "雷公", - "poke_244": "炎帝", - "poke_245": "水君", - "poke_246": "幼基拉斯", - "poke_247": "沙基拉斯", - "poke_248": "班基拉斯", - "poke_249": "洛奇亞", - "poke_250": "鳳王", - "poke_251": "時拉比", - "poke_252": "木守宮", - "poke_253": "森林蜥蜴", - "poke_254": "蜥蜴王", - "poke_255": "火稚雞", - "poke_256": "力壯雞", - "poke_257": "火焰雞", - "poke_258": "水躍魚", - "poke_259": "沼躍魚", - "poke_260": "巨沼怪", - "poke_261": "土狼犬", - "poke_262": "大狼犬", - "poke_263": "蛇紋熊", - "poke_264": "直衝熊", - "poke_265": "刺尾蟲", - "poke_266": "甲殼繭", - "poke_267": "狩獵鳳蝶", - "poke_268": "盾甲繭", - "poke_269": "毒粉蛾", - "poke_270": "蓮葉童子", - "poke_271": "蓮帽小童", - "poke_272": "樂天河童", - "poke_273": "橡實果", - "poke_274": "長鼻葉", - "poke_275": "狡猾天狗", - "poke_276": "傲骨燕", - "poke_277": "大王燕", - "poke_278": "長翅鷗", - "poke_279": "大嘴鷗", - "poke_280": "拉魯拉絲", - "poke_281": "奇魯莉安", - "poke_282": "沙奈朵", - "poke_283": "溜溜糖球", - "poke_284": "雨翅蛾", - "poke_285": "蘑蘑菇", - "poke_286": "斗笠菇", - "poke_287": "懶人獺", - "poke_288": "過動猿", - "poke_289": "請假王", - "poke_290": "土居忍士", - "poke_291": "鐵面忍者", - "poke_292": "脫殼忍者", - "poke_293": "咕妞妞", - "poke_294": "吼爆彈", - "poke_295": "爆音怪", - "poke_296": "幕下力士", - "poke_297": "鐵掌力士", - "poke_298": "露力麗", - "poke_299": "朝北鼻", - "poke_300": "向尾喵", - "poke_301": "優雅貓", - "poke_302": "勾魂眼", - "poke_303": "大嘴娃", - "poke_304": "可可多拉", - "poke_305": "可多拉", - "poke_306": "波士可多拉", - "poke_307": "瑪沙那", - "poke_308": "恰雷姆", - "poke_309": "落雷獸", - "poke_310": "雷電獸", - "poke_311": "正電拍拍", - "poke_312": "負電拍拍", - "poke_313": "電螢蟲", - "poke_314": "甜甜螢", - "poke_315": "毒薔薇", - "poke_316": "溶食獸", - "poke_317": "吞食獸", - "poke_318": "利牙魚", - "poke_319": "巨牙鯊", - "poke_320": "吼吼鯨", - "poke_321": "吼鯨王", - "poke_322": "呆火駝", - "poke_323": "噴火駝", - "poke_324": "煤炭龜", - "poke_325": "跳跳豬", - "poke_326": "噗噗豬", - "poke_327": "晃晃斑", - "poke_328": "大顎蟻", - "poke_329": "超音波幼蟲", - "poke_330": "沙漠蜻蜓", - "poke_331": "刺球仙人掌", - "poke_332": "夢歌仙人掌", - "poke_333": "青綿鳥", - "poke_334": "七夕青鳥", - "poke_335": "貓鼬斬", - "poke_336": "飯匙蛇", - "poke_337": "月石", - "poke_338": "太陽岩", - "poke_339": "泥泥鰍", - "poke_340": "鯰魚王", - "poke_341": "龍蝦小兵", - "poke_342": "鐵螯龍蝦", - "poke_343": "天秤偶", - "poke_344": "念力土偶", - "poke_345": "觸手百合", - "poke_346": "搖籃百合", - "poke_347": "太古羽蟲", - "poke_348": "太古盔甲", - "poke_349": "醜醜魚", - "poke_350": "美納斯", - "poke_351": "飄浮泡泡", - "poke_352": "變隱龍", - "poke_353": "怨影娃娃", - "poke_354": "詛咒娃娃", - "poke_355": "夜巡靈", - "poke_356": "彷徨夜靈", - "poke_357": "熱帶龍", - "poke_358": "風鈴鈴", - "poke_359": "阿勃梭魯", - "poke_360": "小果然", - "poke_361": "雪童子", - "poke_362": "冰鬼護", - "poke_363": "海豹球", - "poke_364": "海魔獅", - "poke_365": "帝牙海獅", - "poke_366": "珍珠貝", - "poke_367": "獵斑魚", - "poke_368": "櫻花魚", - "poke_369": "古空棘魚", - "poke_370": "愛心魚", - "poke_371": "寶貝龍", - "poke_372": "甲殼龍", - "poke_373": "暴飛龍", - "poke_374": "鐵啞鈴", - "poke_375": "金屬怪", - "poke_376": "巨金怪", - "poke_377": "雷吉洛克", - "poke_378": "雷吉艾斯", - "poke_379": "雷吉斯奇魯", - "poke_380": "拉帝亞斯", - "poke_381": "拉帝歐斯", - "poke_382": "蓋歐卡", - "poke_383": "固拉多", - "poke_384": "烈空坐", - "poke_385": "基拉祈", - "poke_386": "代歐奇希斯", - "poke_387": "草苗龜", - "poke_388": "樹林龜", - "poke_389": "土台龜", - "poke_390": "小火焰猴", - "poke_391": "猛火猴", - "poke_392": "烈焰猴", - "poke_393": "波加曼", - "poke_394": "波皇子", - "poke_395": "帝王拿波", - "poke_396": "姆克兒", - "poke_397": "姆克鳥", - "poke_398": "姆克鷹", - "poke_399": "大牙狸", - "poke_400": "大尾狸", - "poke_401": "圓法師", - "poke_402": "音箱蟀", - "poke_403": "小貓怪", - "poke_404": "勒克貓", - "poke_405": "倫琴貓", - "poke_406": "含羞苞", - "poke_407": "羅絲雷朵", - "poke_408": "頭蓋龍", - "poke_409": "戰槌龍", - "poke_410": "盾甲龍", - "poke_411": "護城龍", - "poke_412": "結草兒", - "poke_413": "結草貴婦", - "poke_414": "紳士蛾", - "poke_415": "三蜜蜂", - "poke_416": "蜂女王", - "poke_417": "帕奇利茲", - "poke_418": "泳圈鼬", - "poke_419": "浮潛鼬", - "poke_420": "櫻花寶", - "poke_421": "櫻花兒", - "poke_422": "無殼海兔", - "poke_423": "海兔獸", - "poke_424": "雙尾怪手", - "poke_425": "飄飄球", - "poke_426": "隨風球", - "poke_427": "捲捲耳", - "poke_428": "長耳兔", - "poke_429": "夢妖魔", - "poke_430": "烏鴉頭頭", - "poke_431": "魅力喵", - "poke_432": "東施喵", - "poke_433": "鈴鐺響", - "poke_434": "臭鼬噗", - "poke_435": "坦克臭鼬", - "poke_436": "銅鏡怪", - "poke_437": "青銅鐘", - "poke_438": "盆才怪", - "poke_439": "魔尼尼", - "poke_440": "小福蛋", - "poke_441": "聒噪鳥", - "poke_442": "花岩怪", - "poke_443": "圓陸鯊", - "poke_444": "尖牙陸鯊", - "poke_445": "烈咬陸鯊", - "poke_446": "小卡比獸", - "poke_447": "利歐路", - "poke_448": "路卡利歐", - "poke_449": "沙河馬", - "poke_450": "河馬獸", - "poke_451": "鉗尾蠍", - "poke_452": "龍王蠍", - "poke_453": "不良蛙", - "poke_454": "毒骷蛙", - "poke_455": "尖牙籠", - "poke_456": "螢光魚", - "poke_457": "霓虹魚", - "poke_458": "小球飛魚", - "poke_459": "雪笠怪", - "poke_460": "暴雪王", - "poke_461": "瑪狃拉", - "poke_462": "自爆磁怪", - "poke_463": "大舌舔", - "poke_464": "超甲狂犀", - "poke_465": "巨蔓藤", - "poke_466": "電擊魔獸", - "poke_467": "鴨嘴炎獸", - "poke_468": "波克基斯", - "poke_469": "遠古巨蜓", - "poke_470": "葉伊布", - "poke_471": "冰伊布", - "poke_472": "天蠍王", - "poke_473": "象牙豬", - "poke_474": "多邊獸Z", - "poke_475": "艾路雷朵", - "poke_476": "大朝北鼻", - "poke_477": "黑夜魔靈", - "poke_478": "雪妖女", - "poke_479": "洛托姆", - "poke_480": "由克希", - "poke_481": "艾姆利多", - "poke_482": "亞克諾姆", - "poke_483": "帝牙盧卡", - "poke_484": "帕路奇亞", - "poke_485": "席多藍恩", - "poke_486": "雷吉奇卡斯", - "poke_487": "騎拉帝納", - "poke_488": "克雷色利亞", - "poke_489": "霏歐納", - "poke_490": "瑪納霏", - "poke_491": "達克萊伊", - "poke_492": "謝米", - "poke_493": "阿爾宙斯", - "poke_494": "比克提尼", - "poke_495": "藤藤蛇", - "poke_496": "青藤蛇", - "poke_497": "君主蛇", - "poke_498": "暖暖豬", - "poke_499": "炒炒豬", - "poke_500": "炎武王", - "poke_501": "水水獺", - "poke_502": "雙刃丸", - "poke_503": "大劍鬼", - "poke_504": "探探鼠", - "poke_505": "步哨鼠", - "poke_506": "小約克", - "poke_507": "哈約克", - "poke_508": "長毛狗", - "poke_509": "扒手貓", - "poke_510": "酷豹", - "poke_511": "花椰猴", - "poke_512": "花椰猿", - "poke_513": "爆香猴", - "poke_514": "爆香猿", - "poke_515": "冷水猴", - "poke_516": "冷水猿", - "poke_517": "食夢夢", - "poke_518": "夢夢蝕", - "poke_519": "豆豆鴿", - "poke_520": "咕咕鴿", - "poke_521": "高傲雉雞", - "poke_522": "斑斑馬", - "poke_523": "雷電斑馬", - "poke_524": "石丸子", - "poke_525": "地幔岩", - "poke_526": "龐岩怪", - "poke_527": "滾滾蝙蝠", - "poke_528": "心蝙蝠", - "poke_529": "螺釘地鼠", - "poke_530": "龍頭地鼠", - "poke_531": "差不多娃娃", - "poke_532": "搬運小匠", - "poke_533": "鐵骨土人", - "poke_534": "修建老匠", - "poke_535": "圓蝌蚪", - "poke_536": "藍蟾蜍", - "poke_537": "蟾蜍王", - "poke_538": "投摔鬼", - "poke_539": "打擊鬼", - "poke_540": "蟲寶包", - "poke_541": "寶包繭", - "poke_542": "保母蟲", - "poke_543": "百足蜈蚣", - "poke_544": "車輪毬", - "poke_545": "蜈蚣王", - "poke_546": "木棉球", - "poke_547": "風妖精", - "poke_548": "百合根娃娃", - "poke_549": "裙兒小姐", - "poke_550": "野蠻鱸魚", - "poke_551": "黑眼鱷", - "poke_552": "混混鱷", - "poke_553": "流氓鱷", - "poke_554": "火紅不倒翁", - "poke_555": "達摩狒狒", - "poke_556": "沙鈴仙人掌", - "poke_557": "石居蟹", - "poke_558": "岩殿居蟹", - "poke_559": "滑滑小子", - "poke_560": "頭巾混混", - "poke_561": "象徵鳥", - "poke_562": "哭哭面具", - "poke_563": "死神棺", - "poke_564": "原蓋海龜", - "poke_565": "肋骨海龜", - "poke_566": "始祖小鳥", - "poke_567": "始祖大鳥", - "poke_568": "破破袋", - "poke_569": "灰塵山", - "poke_570": "索羅亞", - "poke_571": "索羅亞克", - "poke_572": "泡沫栗鼠", - "poke_573": "奇諾栗鼠", - "poke_574": "哥德寶寶", - "poke_575": "哥德小童", - "poke_576": "哥德小姐", - "poke_577": "單卵細胞球", - "poke_578": "雙卵細胞球", - "poke_579": "人造細胞卵", - "poke_580": "鴨寶寶", - "poke_581": "舞天鵝", - "poke_582": "迷你冰", - "poke_583": "多多冰", - "poke_584": "雙倍多多冰", - "poke_585": "四季鹿", - "poke_586": "萌芽鹿", - "poke_587": "電飛鼠", - "poke_588": "蓋蓋蟲", - "poke_589": "騎士蝸牛", - "poke_590": "哎呀球菇", - "poke_591": "敗露球菇", - "poke_592": "輕飄飄", - "poke_593": "胖嘟嘟", - "poke_594": "保母曼波", - "poke_595": "電電蟲", - "poke_596": "電蜘蛛", - "poke_597": "種子鐵球", - "poke_598": "堅果啞鈴", - "poke_599": "齒輪兒", - "poke_600": "齒輪組", - "poke_601": "齒輪怪", - "poke_602": "麻麻小魚", - "poke_603": "麻麻鰻", - "poke_604": "麻麻鰻魚王", - "poke_605": "小灰怪", - "poke_606": "大宇怪", - "poke_607": "燭光靈", - "poke_608": "燈火幽靈", - "poke_609": "水晶燈火靈", - "poke_610": "牙牙", - "poke_611": "斧牙龍", - "poke_612": "雙斧戰龍", - "poke_613": "噴嚏熊", - "poke_614": "凍原熊", - "poke_615": "幾何雪花", - "poke_616": "小嘴蝸", - "poke_617": "敏捷蟲", - "poke_618": "泥巴魚", - "poke_619": "功夫鼬", - "poke_620": "師父鼬", - "poke_621": "赤面龍", - "poke_622": "泥偶小人", - "poke_623": "泥偶巨人", - "poke_624": "駒刀小兵", - "poke_625": "劈斬司令", - "poke_626": "爆炸頭水牛", - "poke_627": "毛頭小鷹", - "poke_628": "勇士雄鷹", - "poke_629": "禿鷹丫頭", - "poke_630": "禿鷹娜", - "poke_631": "熔蟻獸", - "poke_632": "鐵蟻", - "poke_633": "單首龍", - "poke_634": "雙首暴龍", - "poke_635": "三首惡龍", - "poke_636": "燃燒蟲", - "poke_637": "火神蛾", - "poke_638": "勾帕路翁", - "poke_639": "代拉基翁", - "poke_640": "畢力吉翁", - "poke_641": "龍捲雲", - "poke_642": "雷電雲", - "poke_643": "萊希拉姆", - "poke_644": "捷克羅姆", - "poke_645": "土地雲", - "poke_646": "酋雷姆", - "poke_647": "凱路迪歐", - "poke_648": "美洛耶塔", - "poke_649": "蓋諾賽克特", - "poke_650": "Chespin", - "poke_651": "Quilladin", - "poke_652": "Chesnaught", - "poke_653": "Fennekin", - "poke_654": "Braixen", - "poke_655": "Delphox", - "poke_656": "Froakie", - "poke_657": "Frogadier", - "poke_658": "Greninja", - "poke_659": "Bunnelby", - "poke_660": "Diggersby", - "poke_661": "Fletchling", - "poke_662": "Fletchinder", - "poke_663": "Talonflame", - "poke_664": "Scatterbug", - "poke_665": "Spewpa", - "poke_666": "Vivillon", - "poke_667": "Litleo", - "poke_668": "Pyroar", - "poke_669": "Flabébé", - "poke_670": "Floette", - "poke_671": "Florges", - "poke_672": "Skiddo", - "poke_673": "Gogoat", - "poke_674": "Pancham", - "poke_675": "Pangoro", - "poke_676": "Furfrou", - "poke_677": "Espurr", - "poke_678": "Meowstic", - "poke_679": "Honedge", - "poke_680": "Doublade", - "poke_681": "Aegislash", - "poke_682": "Spritzee", - "poke_683": "Aromatisse", - "poke_684": "Swirlix", - "poke_685": "Slurpuff", - "poke_686": "Inkay", - "poke_687": "Malamar", - "poke_688": "Binacle", - "poke_689": "Barbaracle", - "poke_690": "Skrelp", - "poke_691": "Dragalge", - "poke_692": "Clauncher", - "poke_693": "Clawitzer", - "poke_694": "Helioptile", - "poke_695": "Heliolisk", - "poke_696": "Tyrunt", - "poke_697": "Tyrantrum", - "poke_698": "Amaura", - "poke_699": "Aurorus", - "poke_700": "Sylveon", - "poke_701": "Hawlucha", - "poke_702": "Dedenne", - "poke_703": "Carbink", - "poke_704": "Goomy", - "poke_705": "Sliggoo", - "poke_706": "Goodra", - "poke_707": "Klefki", - "poke_708": "Phantump", - "poke_709": "Trevenant", - "poke_710": "Pumpkaboo", - "poke_711": "Gourgeist", - "poke_712": "Bergmite", - "poke_713": "Avalugg", - "poke_714": "Noibat", - "poke_715": "Noivern", - "poke_716": "Xerneas", - "poke_717": "Yveltal", - "poke_718": "Zygarde", - "poke_719": "Diancie", - "poke_720": "Hoopa", - "poke_721": "Volcanion", - "poke_722": "Rowlet", - "poke_723": "Dartrix", - "poke_724": "Decidueye", - "poke_725": "Litten", - "poke_726": "Torracat", - "poke_727": "Incineroar", - "poke_728": "Popplio", - "poke_729": "Brionne", - "poke_730": "Primarina", - "poke_731": "Pikipek", - "poke_732": "Trumbeak", - "poke_733": "Toucannon", - "poke_734": "Yungoos", - "poke_735": "Gumshoos", - "poke_736": "Grubbin", - "poke_737": "Charjabug", - "poke_738": "Vikavolt", - "poke_739": "Crabrawler", - "poke_740": "Crabominable", - "poke_741": "Oricorio", - "poke_742": "Cutiefly", - "poke_743": "Ribombee", - "poke_744": "Rockruff", - "poke_745": "Lycanroc", - "poke_746": "Wishiwashi", - "poke_747": "Mareanie", - "poke_748": "Toxapex", - "poke_749": "Mudbray", - "poke_750": "Mudsdale", - "poke_751": "Dewpider", - "poke_752": "Araquanid", - "poke_753": "Fomantis", - "poke_754": "Lurantis", - "poke_755": "Morelull", - "poke_756": "Shiinotic", - "poke_757": "Salandit", - "poke_758": "Salazzle", - "poke_759": "Stufful", - "poke_760": "Bewear", - "poke_761": "Bounsweet", - "poke_762": "Steenee", - "poke_763": "Tsareena", - "poke_764": "Comfey", - "poke_765": "Oranguru", - "poke_766": "Passimian", - "poke_767": "Wimpod", - "poke_768": "Golisopod", - "poke_769": "Sandygast", - "poke_770": "Palossand", - "poke_771": "Pyukumuku", - "poke_772": "Type: Null", - "poke_773": "Silvally", - "poke_774": "Minior", - "poke_775": "Komala", - "poke_776": "Turtonator", - "poke_777": "Togedemaru", - "poke_778": "Mimikyu", - "poke_779": "Bruxish", - "poke_780": "Drampa", - "poke_781": "Dhelmise", - "poke_782": "Jangmo-o", - "poke_783": "Hakamo-o", - "poke_784": "Kommo-o", - "poke_785": "Tapu Koko", - "poke_786": "Tapu Lele", - "poke_787": "Tapu Bulu", - "poke_788": "Tapu Fini", - "poke_789": "Cosmog", - "poke_790": "Cosmoem", - "poke_791": "Solgaleo", - "poke_792": "Lunala", - "poke_793": "Nihilego", - "poke_794": "Buzzwole", - "poke_795": "Pheromosa", - "poke_796": "Xurkitree", - "poke_797": "Celesteela", - "poke_798": "Kartana", - "poke_799": "Guzzlord", - "poke_800": "Necrozma", - "poke_801": "Magearna", - "poke_802": "Marshadow", - "poke_808": "美錄坦", - "poke_809": "美錄梅塔", - "poke_862": "堵攔熊", - "poke_863": "喵頭目", - "poke_865": "蔥遊兵", - "form_1": "A", - "form_2": "B", - "form_3": "C", - "form_4": "D", - "form_5": "E", - "form_6": "F", - "form_7": "G", - "form_8": "H", - "form_9": "I", - "form_10": "J", - "form_11": "K", - "form_12": "L", - "form_13": "M", - "form_14": "N", - "form_15": "O", - "form_16": "P", - "form_17": "Q", - "form_18": "R", - "form_19": "S", - "form_20": "T", - "form_21": "U", - "form_22": "V", - "form_23": "W", - "form_24": "X", - "form_25": "Y", - "form_26": "Z", - "form_27": "!", - "form_28": "?", - "form_29": "Normal", - "form_30": "Sunny", - "form_31": "Rainy", - "form_32": "Snowy", - "form_33": "Normal", - "form_34": "Attack", - "form_35": "Defense", - "form_36": "Speed", - "form_37": "00", - "form_38": "01", - "form_39": "02", - "form_40": "03", - "form_41": "04", - "form_42": "05", - "form_43": "06", - "form_44": "07", - "form_45": "Normal", - "form_46": "Alola", - "form_47": "Normal", - "form_48": "Alola", - "form_49": "Normal", - "form_50": "Alola", - "form_51": "Normal", - "form_52": "Alola", - "form_53": "Normal", - "form_54": "Alola", - "form_55": "Normal", - "form_56": "Alola", - "form_57": "Normal", - "form_58": "Alola", - "form_59": "Normal", - "form_60": "Alola", - "form_61": "Normal", - "form_62": "Alola", - "form_63": "Normal", - "form_64": "Alola", - "form_65": "Normal", - "form_66": "Alola", - "form_67": "Normal", - "form_68": "Alola", - "form_69": "Normal", - "form_70": "Alola", - "form_71": "Normal", - "form_72": "Alola", - "form_73": "Normal", - "form_74": "Alola", - "form_75": "Normal", - "form_76": "Alola", - "form_77": "Normal", - "form_78": "Alola", - "form_79": "Normal", - "form_80": "Alola", - "form_81": "Normal", - "form_82": "Frost", - "form_83": "Fan", - "form_84": "Mow", - "form_85": "Wash", - "form_86": "Heat", - "form_87": "Plant", - "form_88": "Sandy", - "form_89": "Trash", - "form_90": "Altered", - "form_91": "Origin", - "form_92": "Sky", - "form_93": "Land", - "form_94": "Overcast", - "form_95": "Sunny", - "form_96": "West Sea", - "form_97": "East Sea", - "form_98": "West Sea", - "form_99": "East Sea", - "form_100": "Normal", - "form_101": "Fighting", - "form_102": "Flying", - "form_103": "Poison", - "form_104": "Ground", - "form_105": "Rock", - "form_106": "Bug", - "form_107": "Ghost", - "form_108": "Steel", - "form_109": "Fire", - "form_110": "Water", - "form_111": "Grass", - "form_112": "Electric", - "form_113": "Psychic", - "form_114": "Ice", - "form_115": "Dragon", - "form_116": "Dark", - "form_117": "Fairy", - "form_118": "Plant", - "form_119": "Sandy", - "form_120": "Trash", - "form_121": "08", - "form_122": "09", - "form_123": "10", - "form_124": "11", - "form_125": "12", - "form_126": "13", - "form_127": "14", - "form_128": "15", - "form_129": "16", - "form_130": "17", - "form_131": "18", - "form_132": "19", - "form_133": "Armored", - "form_135": "Normal", - "form_136": "Red Striped", - "form_137": "Blue Striped", - "form_138": "Standard", - "form_139": "Zen", - "form_140": "Incarnate", - "form_141": "Therian", - "form_142": "Incarnate", - "form_143": "Therian", - "form_144": "Incarnate", - "form_145": "Therian", - "form_146": "Normal", - "form_147": "Black", - "form_148": "White", - "form_149": "Ordinary", - "form_150": "Resolute", - "form_151": "Aria", - "form_152": "Pirouette", - "form_153": "Shadow", - "form_154": "Purified", - "form_155": "Shadow", - "form_156": "Purified", - "form_157": "Normal", - "form_158": "Shadow", - "form_159": "Purified", - "form_160": "Normal", - "form_161": "Shadow", - "form_162": "Purified", - "form_163": "Normal", - "form_164": "Shadow", - "form_165": "Purified", - "form_166": "Normal", - "form_167": "Shadow", - "form_168": "Purified", - "form_169": "Normal", - "form_170": "Shadow", - "form_171": "Purified", - "form_172": "Normal", - "form_173": "Shadow", - "form_174": "Purified", - "form_175": "Normal", - "form_176": "Shadow", - "form_177": "Purified", - "form_178": "Normal", - "form_179": "Shadow", - "form_180": "Purified", - "form_181": "Normal", - "form_182": "Shadow", - "form_183": "Purified", - "form_184": "Normal", - "form_185": "Shadow", - "form_186": "Purified", - "form_187": "Normal", - "form_188": "Shadow", - "form_189": "Purified", - "form_190": "Normal", - "form_191": "Shadow", - "form_192": "Purified", - "form_193": "Normal", - "form_194": "Shadow", - "form_195": "Purified", - "form_196": "Normal", - "form_197": "Shadow", - "form_198": "Purified", - "form_199": "Normal", - "form_200": "Shadow", - "form_201": "Purified", - "form_202": "Normal", - "form_203": "Shadow", - "form_204": "Purified", - "form_205": "Normal", - "form_206": "Shadow", - "form_207": "Purified", - "form_208": "Normal", - "form_209": "Shadow", - "form_210": "Purified", - "form_211": "Normal", - "form_212": "Shadow", - "form_213": "Purified", - "form_214": "Normal", - "form_215": "Shadow", - "form_216": "Purified", - "form_217": "Normal", - "form_218": "Shadow", - "form_219": "Purified", - "form_220": "Shadow", - "form_221": "Purified", - "form_222": "Shadow", - "form_223": "Purified", - "form_224": "Normal", - "form_225": "Shadow", - "form_226": "Purified", - "form_227": "Shadow", - "form_228": "Purified", - "form_229": "Normal", - "form_230": "Shadow", - "form_231": "Purified", - "form_232": "Normal", - "form_233": "Shadow", - "form_234": "Purified", - "form_235": "Normal", - "form_236": "Shadow", - "form_237": "Purified", - "form_238": "Normal", - "form_239": "Shadow", - "form_240": "Purified", - "form_241": "Normal", - "form_242": "Shadow", - "form_243": "Purified", - "form_244": "Normal", - "form_245": "Shadow", - "form_246": "Purified", - "form_247": "Normal", - "form_248": "Shadow", - "form_249": "Purified", - "form_250": "Normal", - "form_251": "Shadow", - "form_252": "Purified", - "form_253": "Normal", - "form_254": "Shadow", - "form_255": "Purified", - "form_256": "Normal", - "form_257": "Shadow", - "form_258": "Purified", - "form_259": "Normal", - "form_260": "Shadow", - "form_261": "Purified", - "form_262": "Normal", - "form_263": "Shadow", - "form_264": "Purified", - "form_265": "Normal", - "form_266": "Shadow", - "form_267": "Purified", - "form_268": "Normal", - "form_269": "Shadow", - "form_270": "Purified", - "form_271": "Normal", - "form_272": "Shadow", - "form_273": "Purified", - "form_274": "Normal", - "form_275": "Shadow", - "form_276": "Purified", - "form_277": "Normal", - "form_278": "Shadow", - "form_279": "Purified", - "form_280": "Normal", - "form_281": "Shadow", - "form_282": "Purified", - "form_283": "Normal", - "form_284": "Shadow", - "form_285": "Purified", - "form_286": "Normal", - "form_287": "Shadow", - "form_288": "Purified", - "form_289": "Normal", - "form_290": "Shadow", - "form_291": "Purified", - "form_292": "Normal", - "form_293": "Shadow", - "form_294": "Purified", - "form_295": "Normal", - "form_296": "Shadow", - "form_297": "Purified", - "form_298": "Normal", - "form_299": "Shadow", - "form_300": "Purified", - "form_301": "Normal", - "form_302": "Shadow", - "form_303": "Purified", - "form_304": "Normal", - "form_305": "Shadow", - "form_306": "Purified", - "form_307": "Normal", - "form_308": "Shadow", - "form_309": "Purified", - "form_310": "Normal", - "form_311": "Shadow", - "form_312": "Purified", - "form_313": "Normal", - "form_314": "Shadow", - "form_315": "Purified", - "form_316": "Normal", - "form_317": "Shadow", - "form_318": "Purified", - "form_319": "Normal", - "form_320": "Shadow", - "form_321": "Purified", - "form_322": "Normal", - "form_323": "Shadow", - "form_324": "Purified", - "form_585": "Spring", - "form_586": "Summer", - "form_587": "Autumn", - "form_588": "Winter", - "form_589": "Spring", - "form_590": "Summer", - "form_591": "Autumn", - "form_592": "Winter", - "form_593": "Normal", - "form_594": "Shock", - "form_595": "Burn", - "form_596": "Chill", - "form_597": "Douse", - "form_598": "Normal", - "form_599": "Noevolve", - "form_600": "Normal", - "form_601": "Noevolve", - "form_602": "Normal", - "form_603": "Noevolve", - "form_604": "Noevolve", - "form_605": "Noevolve", - "form_606": "Noevolve", - "form_607": "Noevolve", - "form_608": "Noevolve", - "form_609": "Noevolve", - "form_610": "Normal", - "form_611": "Shadow", - "form_612": "Purified", - "form_613": "Normal", - "form_614": "Shadow", - "form_615": "Purified", - "form_616": "Normal", - "form_617": "Shadow", - "form_618": "Purified", - "form_619": "Normal", - "form_620": "Shadow", - "form_621": "Purified", - "form_622": "Normal", - "form_623": "Shadow", - "form_624": "Purified", - "form_625": "Normal", - "form_626": "Shadow", - "form_627": "Purified", - "form_628": "Normal", - "form_629": "Shadow", - "form_630": "Purified", - "form_631": "Normal", - "form_632": "Shadow", - "form_633": "Purified", - "form_634": "Normal", - "form_635": "Shadow", - "form_636": "Purified", - "form_637": "Normal", - "form_638": "Shadow", - "form_639": "Purified", - "form_640": "Normal", - "form_641": "Shadow", - "form_642": "Purified", - "form_643": "Normal", - "form_644": "Shadow", - "form_645": "Purified", - "form_646": "Normal", - "form_647": "Shadow", - "form_648": "Purified", - "form_649": "Normal", - "form_650": "Shadow", - "form_651": "Purified", - "form_652": "Normal", - "form_653": "Shadow", - "form_654": "Purified", - "form_655": "Normal", - "form_656": "Shadow", - "form_657": "Purified", - "form_658": "Normal", - "form_659": "Shadow", - "form_660": "Purified", - "form_661": "Normal", - "form_662": "Shadow", - "form_663": "Purified", - "form_664": "Normal", - "form_665": "Shadow", - "form_666": "Purified", - "form_667": "Normal", - "form_668": "Shadow", - "form_669": "Purified", - "form_670": "Normal", - "form_671": "Shadow", - "form_672": "Purified", - "form_673": "Shadow", - "form_674": "Purified", - "form_675": "Shadow", - "form_676": "Purified", - "form_677": "Normal", - "form_678": "Shadow", - "form_679": "Purified", - "form_680": "Normal", - "form_681": "Shadow", - "form_682": "Purified", - "form_683": "Normal", - "form_684": "Shadow", - "form_685": "Purified", - "form_686": "Shadow", - "form_687": "Purified", - "form_688": "Normal", - "form_689": "Shadow", - "form_690": "Purified", - "form_691": "Normal", - "form_692": "Shadow", - "form_693": "Purified", - "form_694": "Normal", - "form_695": "Shadow", - "form_696": "Purified", - "form_697": "Normal", - "form_698": "Shadow", - "form_699": "Purified", - "form_700": "Normal", - "form_701": "Shadow", - "form_702": "Purified", - "form_703": "Normal", - "form_704": "Shadow", - "form_705": "Purified", - "form_706": "Normal", - "form_707": "Shadow", - "form_708": "Purified", - "form_709": "Shadow", - "form_710": "Purified", - "form_711": "Shadow", - "form_712": "Purified", - "form_713": "Normal", - "form_714": "Shadow", - "form_715": "Purified", - "form_716": "Normal", - "form_717": "Shadow", - "form_718": "Purified", - "form_719": "Normal", - "form_720": "Shadow", - "form_721": "Purified", - "form_722": "Normal", - "form_723": "Shadow", - "form_724": "Purified", - "form_725": "Shadow", - "form_726": "Purified", - "form_727": "Shadow", - "form_728": "Purified", - "form_729": "Normal", - "form_730": "Shadow", - "form_731": "Purified", - "form_732": "Shadow", - "form_733": "Purified", - "form_734": "Normal", - "form_735": "Shadow", - "form_736": "Purified", - "form_737": "Normal", - "form_738": "Shadow", - "form_739": "Purified", - "form_740": "Normal", - "form_741": "Shadow", - "form_742": "Purified", - "form_743": "Normal", - "form_744": "Shadow", - "form_745": "Purified", - "form_746": "Normal", - "form_747": "Shadow", - "form_748": "Purified", - "form_749": "Normal", - "form_750": "Shadow", - "form_751": "Purified", - "form_752": "Normal", - "form_753": "Shadow", - "form_754": "Purified", - "form_755": "Normal", - "form_756": "Shadow", - "form_757": "Purified", - "form_758": "Normal", - "form_759": "Shadow", - "form_760": "Purified", - "form_761": "Normal", - "form_762": "Shadow", - "form_763": "Purified", - "form_764": "Normal", - "form_765": "Shadow", - "form_766": "Purified", - "form_767": "Normal", - "form_768": "Shadow", - "form_769": "Purified", - "form_770": "Normal", - "form_771": "Shadow", - "form_772": "Purified", - "form_773": "Normal", - "form_774": "Shadow", - "form_775": "Purified", - "form_776": "Normal", - "form_777": "Shadow", - "form_778": "Purified", - "form_779": "Normal", - "form_780": "Shadow", - "form_781": "Purified", - "form_782": "Normal", - "form_783": "Shadow", - "form_784": "Purified", - "form_785": "Normal", - "form_786": "Shadow", - "form_787": "Purified", - "form_788": "Normal", - "form_789": "Shadow", - "form_790": "Purified", - "form_791": "Normal", - "form_792": "Shadow", - "form_793": "Purified", - "form_794": "Normal", - "form_795": "Shadow", - "form_796": "Purified", - "form_797": "Normal", - "form_798": "Shadow", - "form_799": "Purified", - "form_800": "Normal", - "form_801": "Shadow", - "form_802": "Purified", - "form_803": "Normal", - "form_804": "Shadow", - "form_805": "Purified", - "form_806": "Normal", - "form_807": "Shadow", - "form_808": "Purified", - "form_809": "Normal", - "form_810": "Shadow", - "form_811": "Purified", - "form_812": "Normal", - "form_813": "Shadow", - "form_814": "Purified", - "form_815": "Normal", - "form_816": "Shadow", - "form_817": "Purified", - "form_818": "Normal", - "form_819": "Shadow", - "form_820": "Purified", - "form_821": "Normal", - "form_822": "Shadow", - "form_823": "Purified", - "form_824": "Normal", - "form_825": "Shadow", - "form_826": "Purified", - "form_827": "Normal", - "form_828": "Shadow", - "form_829": "Purified", - "form_830": "Normal", - "form_831": "Shadow", - "form_832": "Purified", - "form_833": "Normal", - "form_834": "Shadow", - "form_835": "Purified", - "form_836": "Normal", - "form_837": "Shadow", - "form_838": "Purified", - "form_839": "Normal", - "form_840": "Shadow", - "form_841": "Purified", - "form_842": "Shadow", - "form_843": "Purified", - "form_844": "Shadow", - "form_845": "Purified", - "form_846": "Normal", - "form_847": "Shadow", - "form_848": "Purified", - "form_849": "Normal", - "form_850": "Shadow", - "form_851": "Purified", - "form_852": "Normal", - "form_853": "Shadow", - "form_854": "Purified", - "form_855": "Normal", - "form_856": "Shadow", - "form_857": "Purified", - "form_858": "Normal", - "form_859": "Shadow", - "form_860": "Purified", - "form_861": "Normal", - "form_862": "Shadow", - "form_863": "Purified", - "form_864": "Normal", - "form_865": "Shadow", - "form_866": "Purified", - "form_867": "Normal", - "form_868": "Shadow", - "form_869": "Purified", - "form_870": "Normal", - "form_871": "Shadow", - "form_872": "Purified", - "form_873": "Normal", - "form_874": "Shadow", - "form_875": "Purified", - "form_876": "Normal", - "form_877": "Shadow", - "form_878": "Purified", - "form_879": "Normal", - "form_880": "Shadow", - "form_881": "Purified", - "form_882": "Shadow", - "form_883": "Purified", - "form_884": "Shadow", - "form_885": "Purified", - "form_886": "Shadow", - "form_887": "Purified", - "form_888": "Normal", - "form_889": "Shadow", - "form_890": "Purified", - "form_891": "Normal", - "form_892": "Shadow", - "form_893": "Purified", - "form_894": "Fall 2019", - "form_895": "Fall 2019", - "form_896": "Fall 2019", - "form_897": "Fall 2019", - "form_898": "Normal", - "form_899": "Shadow", - "form_900": "Purified", - "form_901": "Vs 2019", - "form_902": "Normal", - "form_903": "Shadow", - "form_904": "Purified", - "form_905": "Normal", - "form_906": "Shadow", - "form_907": "Purified", - "form_908": "Normal", - "form_909": "Shadow", - "form_910": "Purified", - "form_911": "Normal", - "form_912": "Shadow", - "form_913": "Purified", - "form_914": "Normal", - "form_915": "Shadow", - "form_916": "Purified", - "form_917": "Normal", - "form_918": "Shadow", - "form_919": "Purified", - "form_920": "Normal", - "form_921": "Shadow", - "form_922": "Purified", - "form_923": "Normal", - "form_924": "Shadow", - "form_925": "Purified", - "form_926": "Normal", - "form_927": "Shadow", - "form_928": "Purified", - "form_929": "Normal", - "form_930": "Shadow", - "form_931": "Purified", - "form_932": "Normal", - "form_933": "Shadow", - "form_934": "Purified", - "form_935": "Normal", - "form_936": "Shadow", - "form_937": "Purified", - "form_938": "Normal", - "form_939": "Shadow", - "form_940": "Purified", - "form_941": "Normal", - "form_942": "Shadow", - "form_943": "Purified", - "form_944": "Galarian", - "form_945": "Normal", - "form_946": "Galarian", - "form_947": "Normal", - "form_948": "Galarian", - "form_949": "Copy 2019", - "form_950": "Copy 2019", - "form_951": "Copy 2019", - "form_952": "Copy 2019", - "form_953": "Normal", - "form_954": "Shadow", - "form_955": "Purified", - "form_956": "Normal", - "form_957": "Shadow", - "form_958": "Purified", - "form_959": "Normal", - "form_960": "Shadow", - "form_961": "Purified", - "form_962": "Normal", - "form_963": "Shadow", - "form_964": "Purified", - "form_965": "Normal", - "form_966": "Shadow", - "form_967": "Purified", - "form_968": "Normal", - "form_969": "Shadow", - "form_970": "Purified", - "form_971": "Normal", - "form_972": "Shadow", - "form_973": "Purified", - "form_974": "Normal", - "form_975": "Shadow", - "form_976": "Purified", - "form_977": "Shadow", - "form_978": "Purified", - "form_979": "Shadow", - "form_980": "Purified", - "form_981": "Normal", - "form_982": "Shadow", - "form_983": "Purified", - "form_984": "Normal", - "form_985": "Shadow", - "form_986": "Purified", - "form_987": "Normal", - "form_988": "Shadow", - "form_989": "Purified", - "form_990": "Normal", - "form_991": "Shadow", - "form_992": "Purified", - "form_993": "Normal", - "form_994": "Shadow", - "form_995": "Purified", - "form_996": "Normal", - "form_997": "Shadow", - "form_998": "Purified", - "form_999": "Normal", - "form_1000": "Shadow", - "form_1001": "Purified", - "form_1002": "Normal", - "form_1003": "Shadow", - "form_1004": "Purified", - "form_1005": "Normal", - "form_1006": "Shadow", - "form_1007": "Purified", - "form_1008": "Normal", - "form_1009": "Shadow", - "form_1010": "Purified", - "form_1011": "Normal", - "form_1012": "Shadow", - "form_1013": "Purified", - "form_1014": "Normal", - "form_1015": "Shadow", - "form_1016": "Purified", - "form_1017": "Normal", - "form_1018": "Shadow", - "form_1019": "Purified", - "form_1020": "Normal", - "form_1021": "Shadow", - "form_1022": "Purified", - "form_1023": "Normal", - "form_1024": "Shadow", - "form_1025": "Purified", - "form_1026": "Normal", - "form_1027": "Shadow", - "form_1028": "Purified", - "form_1029": "Normal", - "form_1030": "Shadow", - "form_1031": "Purified", - "form_1032": "Normal", - "form_1033": "Shadow", - "form_1034": "Purified", - "form_1035": "Normal", - "form_1036": "Shadow", - "form_1037": "Purified", - "form_1038": "Normal", - "form_1039": "Shadow", - "form_1040": "Purified", - "form_1041": "Normal", - "form_1042": "Shadow", - "form_1043": "Purified", - "form_1044": "Normal", - "form_1045": "Shadow", - "form_1046": "Purified", - "form_1047": "Normal", - "form_1048": "Shadow", - "form_1049": "Purified", - "form_1050": "Normal", - "form_1051": "Shadow", - "form_1052": "Purified", - "form_1053": "Normal", - "form_1054": "Shadow", - "form_1055": "Purified", - "form_1056": "Normal", - "form_1057": "Shadow", - "form_1058": "Purified", - "form_1059": "Normal", - "form_1060": "Shadow", - "form_1061": "Purified", - "form_1062": "Normal", - "form_1063": "Shadow", - "form_1064": "Purified", - "form_1065": "Normal", - "form_1066": "Shadow", - "form_1067": "Purified", - "form_1068": "Normal", - "form_1069": "Shadow", - "form_1070": "Purified", - "form_1071": "Normal", - "form_1072": "Shadow", - "form_1073": "Purified", - "form_1074": "Normal", - "form_1075": "Shadow", - "form_1076": "Purified", - "form_1077": "Normal", - "form_1078": "Shadow", - "form_1079": "Purified", - "form_1080": "Normal", - "form_1081": "Shadow", - "form_1082": "Purified", - "form_1083": "Normal", - "form_1084": "Shadow", - "form_1085": "Purified", - "form_1086": "Normal", - "form_1087": "Shadow", - "form_1088": "Purified", - "form_1089": "Normal", - "form_1090": "Shadow", - "form_1091": "Purified", - "form_1092": "Normal", - "form_1093": "Shadow", - "form_1094": "Purified", - "form_1095": "Normal", - "form_1096": "Shadow", - "form_1097": "Purified", - "form_1098": "Normal", - "form_1099": "Shadow", - "form_1100": "Purified", - "form_1101": "Normal", - "form_1102": "Shadow", - "form_1103": "Purified", - "form_1104": "Normal", - "form_1105": "Shadow", - "form_1106": "Purified", - "form_1107": "Normal", - "form_1108": "Shadow", - "form_1109": "Purified", - "form_1110": "Normal", - "form_1111": "Shadow", - "form_1112": "Purified", - "form_1113": "Shadow", - "form_1114": "Purified", - "form_1115": "Normal", - "form_1116": "Shadow", - "form_1117": "Purified", - "form_1118": "Normal", - "form_1119": "Shadow", - "form_1120": "Purified", - "form_1121": "Normal", - "form_1122": "Shadow", - "form_1123": "Purified", - "form_1124": "Normal", - "form_1125": "Shadow", - "form_1126": "Purified", - "form_1127": "Normal", - "form_1128": "Shadow", - "form_1129": "Purified", - "form_1130": "Normal", - "form_1131": "Shadow", - "form_1132": "Purified", - "form_1133": "Normal", - "form_1134": "Shadow", - "form_1135": "Purified", - "form_1136": "Normal", - "form_1137": "Shadow", - "form_1138": "Purified", - "form_1139": "Normal", - "form_1140": "Shadow", - "form_1141": "Purified", - "form_1142": "Normal", - "form_1143": "Shadow", - "form_1144": "Purified", - "form_1145": "Normal", - "form_1146": "Shadow", - "form_1147": "Purified", - "form_1148": "Normal", - "form_1149": "Shadow", - "form_1150": "Purified", - "form_1151": "Normal", - "form_1152": "Shadow", - "form_1153": "Purified", - "form_1154": "Normal", - "form_1155": "Shadow", - "form_1156": "Purified", - "form_1157": "Normal", - "form_1158": "Shadow", - "form_1159": "Purified", - "form_1160": "Normal", - "form_1161": "Shadow", - "form_1162": "Purified", - "form_1163": "Normal", - "form_1164": "Shadow", - "form_1165": "Purified", - "form_1166": "Normal", - "form_1167": "Shadow", - "form_1168": "Purified", - "form_1169": "Normal", - "form_1170": "Shadow", - "form_1171": "Purified", - "form_1172": "Normal", - "form_1173": "Shadow", - "form_1174": "Purified", - "form_1175": "Normal", - "form_1176": "Shadow", - "form_1177": "Purified", - "form_1178": "Normal", - "form_1179": "Shadow", - "form_1180": "Purified", - "form_1181": "Normal", - "form_1182": "Shadow", - "form_1183": "Purified", - "form_1184": "Normal", - "form_1185": "Shadow", - "form_1186": "Purified", - "form_1187": "Normal", - "form_1188": "Shadow", - "form_1189": "Purified", - "form_1190": "Normal", - "form_1191": "Shadow", - "form_1192": "Purified", - "form_1193": "Normal", - "form_1194": "Shadow", - "form_1195": "Purified", - "form_1196": "Normal", - "form_1197": "Shadow", - "form_1198": "Purified", - "form_1199": "Normal", - "form_1200": "Shadow", - "form_1201": "Purified", - "form_1202": "Normal", - "form_1203": "Shadow", - "form_1204": "Purified", - "form_1205": "Normal", - "form_1206": "Shadow", - "form_1207": "Purified", - "form_1208": "Normal", - "form_1209": "Shadow", - "form_1210": "Purified", - "form_1211": "Normal", - "form_1212": "Shadow", - "form_1213": "Purified", - "form_1214": "Normal", - "form_1215": "Shadow", - "form_1216": "Purified", - "form_1217": "Normal", - "form_1218": "Shadow", - "form_1219": "Purified", - "form_1220": "Normal", - "form_1221": "Shadow", - "form_1222": "Purified", - "form_1223": "Normal", - "form_1224": "Shadow", - "form_1225": "Purified", - "form_1226": "Normal", - "form_1227": "Shadow", - "form_1228": "Purified", - "form_1229": "Normal", - "form_1230": "Shadow", - "form_1231": "Purified", - "form_1232": "Normal", - "form_1233": "Shadow", - "form_1234": "Purified", - "form_1235": "Normal", - "form_1236": "Shadow", - "form_1237": "Purified", - "form_1238": "Normal", - "form_1239": "Shadow", - "form_1240": "Purified", - "form_1241": "Normal", - "form_1242": "Shadow", - "form_1243": "Purified", - "form_1244": "Normal", - "form_1245": "Shadow", - "form_1246": "Purified", - "form_1247": "Normal", - "form_1248": "Shadow", - "form_1249": "Purified", - "form_1250": "Normal", - "form_1251": "Shadow", - "form_1252": "Purified", - "form_1253": "Normal", - "form_1254": "Shadow", - "form_1255": "Purified", - "form_1256": "Normal", - "form_1257": "Shadow", - "form_1258": "Purified", - "form_1259": "Normal", - "form_1260": "Shadow", - "form_1261": "Purified", - "form_1262": "Normal", - "form_1263": "Shadow", - "form_1264": "Purified", - "form_1265": "Normal", - "form_1266": "Shadow", - "form_1267": "Purified", - "form_1268": "Normal", - "form_1269": "Shadow", - "form_1270": "Purified", - "form_1271": "Normal", - "form_1272": "Shadow", - "form_1273": "Purified", - "form_1274": "Normal", - "form_1275": "Shadow", - "form_1276": "Purified", - "form_1277": "Normal", - "form_1278": "Shadow", - "form_1279": "Purified", - "form_1280": "Normal", - "form_1281": "Shadow", - "form_1282": "Purified", - "form_1283": "Normal", - "form_1284": "Shadow", - "form_1285": "Purified", - "form_1286": "Normal", - "form_1287": "Shadow", - "form_1288": "Purified", - "form_1289": "Normal", - "form_1290": "Shadow", - "form_1291": "Purified", - "form_1292": "Normal", - "form_1293": "Shadow", - "form_1294": "Purified", - "form_1295": "Normal", - "form_1296": "Shadow", - "form_1297": "Purified", - "form_1298": "Normal", - "form_1299": "Shadow", - "form_1300": "Purified", - "form_1301": "Normal", - "form_1302": "Shadow", - "form_1303": "Purified", - "form_1304": "Normal", - "form_1305": "Shadow", - "form_1306": "Purified", - "form_1307": "Normal", - "form_1308": "Shadow", - "form_1309": "Purified", - "form_1310": "Normal", - "form_1311": "Shadow", - "form_1312": "Purified", - "form_1313": "Normal", - "form_1314": "Shadow", - "form_1315": "Purified", - "form_1316": "Normal", - "form_1317": "Shadow", - "form_1318": "Purified", - "form_1319": "Normal", - "form_1320": "Shadow", - "form_1321": "Purified", - "form_1322": "Normal", - "form_1323": "Shadow", - "form_1324": "Purified", - "form_1325": "Normal", - "form_1326": "Shadow", - "form_1327": "Purified", - "form_1328": "Normal", - "form_1329": "Shadow", - "form_1330": "Purified", - "form_1331": "Normal", - "form_1332": "Shadow", - "form_1333": "Purified", - "form_1334": "Normal", - "form_1335": "Shadow", - "form_1336": "Purified", - "form_1337": "Normal", - "form_1338": "Shadow", - "form_1339": "Purified", - "form_1340": "Normal", - "form_1341": "Shadow", - "form_1342": "Purified", - "form_1343": "Normal", - "form_1344": "Shadow", - "form_1345": "Purified", - "form_1346": "Normal", - "form_1347": "Shadow", - "form_1348": "Purified", - "form_1349": "Normal", - "form_1350": "Shadow", - "form_1351": "Purified", - "form_1352": "Normal", - "form_1353": "Shadow", - "form_1354": "Purified", - "form_1355": "Normal", - "form_1356": "Shadow", - "form_1357": "Purified", - "form_1358": "Normal", - "form_1359": "Shadow", - "form_1360": "Purified", - "form_1361": "Normal", - "form_1362": "Shadow", - "form_1363": "Purified", - "form_1364": "Normal", - "form_1365": "Shadow", - "form_1366": "Purified", - "form_1367": "Normal", - "form_1368": "Shadow", - "form_1369": "Purified", - "form_1370": "Normal", - "form_1371": "Shadow", - "form_1372": "Purified", - "form_1373": "Shadow", - "form_1374": "Purified", - "form_1375": "Shadow", - "form_1376": "Purified", - "form_1377": "Shadow", - "form_1378": "Purified", - "form_1379": "Normal", - "form_1380": "Shadow", - "form_1381": "Purified", - "form_1382": "Normal", - "form_1383": "Shadow", - "form_1384": "Purified", - "form_1385": "Normal", - "form_1386": "Shadow", - "form_1387": "Purified", - "form_1388": "Normal", - "form_1389": "Shadow", - "form_1390": "Purified", - "form_1391": "Normal", - "form_1392": "Shadow", - "form_1393": "Purified", - "form_1394": "Normal", - "form_1395": "Shadow", - "form_1396": "Purified", - "form_1397": "Normal", - "form_1398": "Shadow", - "form_1399": "Purified", - "form_1400": "Normal", - "form_1401": "Shadow", - "form_1402": "Purified", - "form_1403": "Normal", - "form_1404": "Shadow", - "form_1405": "Purified", - "form_1406": "Normal", - "form_1407": "Shadow", - "form_1408": "Purified", - "form_1409": "Normal", - "form_1410": "Shadow", - "form_1411": "Purified", - "form_1412": "Normal", - "form_1413": "Shadow", - "form_1414": "Purified", - "form_1415": "Normal", - "form_1416": "Shadow", - "form_1417": "Purified", - "form_1418": "Normal", - "form_1419": "Shadow", - "form_1420": "Purified", - "form_1421": "Normal", - "form_1422": "Shadow", - "form_1423": "Purified", - "form_1424": "Normal", - "form_1425": "Shadow", - "form_1426": "Purified", - "form_1427": "Normal", - "form_1428": "Shadow", - "form_1429": "Purified", - "form_1430": "Normal", - "form_1431": "Shadow", - "form_1432": "Purified", - "form_1433": "Normal", - "form_1434": "Shadow", - "form_1435": "Purified", - "form_1436": "Normal", - "form_1437": "Shadow", - "form_1438": "Purified", - "form_1439": "Normal", - "form_1440": "Shadow", - "form_1441": "Purified", - "form_1442": "Normal", - "form_1443": "Shadow", - "form_1444": "Purified", - "form_1445": "Normal", - "form_1446": "Shadow", - "form_1447": "Purified", - "form_1448": "Normal", - "form_1449": "Shadow", - "form_1450": "Purified", - "form_1451": "Normal", - "form_1452": "Shadow", - "form_1453": "Purified", - "form_1454": "Normal", - "form_1455": "Shadow", - "form_1456": "Purified", - "form_1457": "Normal", - "form_1458": "Shadow", - "form_1459": "Purified", - "form_1460": "Normal", - "form_1461": "Shadow", - "form_1462": "Purified", - "form_1463": "Normal", - "form_1464": "Shadow", - "form_1465": "Purified", - "form_1466": "Normal", - "form_1467": "Shadow", - "form_1468": "Purified", - "form_1469": "Normal", - "form_1470": "Shadow", - "form_1471": "Purified", - "form_1472": "Normal", - "form_1473": "Shadow", - "form_1474": "Purified", - "form_1475": "Normal", - "form_1476": "Shadow", - "form_1477": "Purified", - "form_1478": "Normal", - "form_1479": "Shadow", - "form_1480": "Purified", - "form_1481": "Normal", - "form_1482": "Shadow", - "form_1483": "Purified", - "form_1484": "Normal", - "form_1485": "Shadow", - "form_1486": "Purified", - "form_1487": "Normal", - "form_1488": "Shadow", - "form_1489": "Purified", - "form_1490": "Normal", - "form_1491": "Shadow", - "form_1492": "Purified", - "form_1493": "Normal", - "form_1494": "Shadow", - "form_1495": "Purified", - "form_1496": "Normal", - "form_1497": "Shadow", - "form_1498": "Purified", - "form_1499": "Normal", - "form_1500": "Shadow", - "form_1501": "Purified", - "form_1502": "Normal", - "form_1503": "Shadow", - "form_1504": "Purified", - "form_1505": "Normal", - "form_1506": "Shadow", - "form_1507": "Purified", - "form_1508": "Normal", - "form_1509": "Shadow", - "form_1510": "Purified", - "form_1511": "Normal", - "form_1512": "Shadow", - "form_1513": "Purified", - "form_1514": "Normal", - "form_1515": "Shadow", - "form_1516": "Purified", - "form_1517": "Normal", - "form_1518": "Shadow", - "form_1519": "Purified", - "form_1520": "Normal", - "form_1521": "Shadow", - "form_1522": "Purified", - "form_1523": "Normal", - "form_1524": "Shadow", - "form_1525": "Purified", - "form_1526": "Normal", - "form_1527": "Shadow", - "form_1528": "Purified", - "form_1529": "Normal", - "form_1530": "Shadow", - "form_1531": "Purified", - "form_1532": "Normal", - "form_1533": "Shadow", - "form_1534": "Purified", - "form_1535": "Normal", - "form_1536": "Shadow", - "form_1537": "Purified", - "form_1538": "Normal", - "form_1539": "Shadow", - "form_1540": "Purified", - "form_1541": "Normal", - "form_1542": "Shadow", - "form_1543": "Purified", - "form_1544": "Normal", - "form_1545": "Shadow", - "form_1546": "Purified", - "form_1547": "Normal", - "form_1548": "Shadow", - "form_1549": "Purified", - "form_1550": "Normal", - "form_1551": "Shadow", - "form_1552": "Purified", - "form_1553": "Normal", - "form_1554": "Shadow", - "form_1555": "Purified", - "form_1556": "Normal", - "form_1557": "Shadow", - "form_1558": "Purified", - "form_1559": "Normal", - "form_1560": "Shadow", - "form_1561": "Purified", - "form_1562": "Normal", - "form_1563": "Shadow", - "form_1564": "Purified", - "form_1565": "Normal", - "form_1566": "Shadow", - "form_1567": "Purified", - "form_1568": "Normal", - "form_1569": "Shadow", - "form_1570": "Purified", - "form_1571": "Normal", - "form_1572": "Shadow", - "form_1573": "Purified", - "form_1574": "Normal", - "form_1575": "Shadow", - "form_1576": "Purified", - "form_1577": "Normal", - "form_1578": "Shadow", - "form_1579": "Purified", - "form_1580": "Normal", - "form_1581": "Shadow", - "form_1582": "Purified", - "form_1583": "Normal", - "form_1584": "Shadow", - "form_1585": "Purified", - "form_1586": "Normal", - "form_1587": "Shadow", - "form_1588": "Purified", - "form_1589": "Normal", - "form_1590": "Shadow", - "form_1591": "Purified", - "form_1592": "Normal", - "form_1593": "Shadow", - "form_1594": "Purified", - "form_1595": "Normal", - "form_1596": "Shadow", - "form_1597": "Purified", - "form_1598": "Normal", - "form_1599": "Shadow", - "form_1600": "Purified", - "form_1601": "Normal", - "form_1602": "Shadow", - "form_1603": "Purified", - "form_1604": "Normal", - "form_1605": "Shadow", - "form_1606": "Purified", - "form_1607": "Normal", - "form_1608": "Shadow", - "form_1609": "Purified", - "form_1610": "Normal", - "form_1611": "Shadow", - "form_1612": "Purified", - "form_1613": "Normal", - "form_1614": "Shadow", - "form_1615": "Purified", - "form_1616": "Normal", - "form_1617": "Shadow", - "form_1618": "Purified", - "form_1619": "Normal", - "form_1620": "Shadow", - "form_1621": "Purified", - "form_1622": "Normal", - "form_1623": "Shadow", - "form_1624": "Purified", - "form_1625": "Normal", - "form_1626": "Shadow", - "form_1627": "Purified", - "form_1628": "Normal", - "form_1629": "Shadow", - "form_1630": "Purified", - "form_1631": "Normal", - "form_1632": "Shadow", - "form_1633": "Purified", - "form_1634": "Normal", - "form_1635": "Shadow", - "form_1636": "Purified", - "form_1637": "Normal", - "form_1638": "Shadow", - "form_1639": "Purified", - "form_1640": "Normal", - "form_1641": "Shadow", - "form_1642": "Purified", - "form_1643": "Normal", - "form_1644": "Shadow", - "form_1645": "Purified", - "form_1646": "Normal", - "form_1647": "Shadow", - "form_1648": "Purified", - "form_1649": "Normal", - "form_1650": "Shadow", - "form_1651": "Purified", - "form_1652": "Normal", - "form_1653": "Shadow", - "form_1654": "Purified", - "form_1655": "Normal", - "form_1656": "Shadow", - "form_1657": "Purified", - "form_1658": "Normal", - "form_1659": "Shadow", - "form_1660": "Purified", - "form_1661": "Normal", - "form_1662": "Shadow", - "form_1663": "Purified", - "form_1664": "Normal", - "form_1665": "Shadow", - "form_1666": "Purified", - "form_1667": "Normal", - "form_1668": "Shadow", - "form_1669": "Purified", - "form_1670": "Normal", - "form_1671": "Shadow", - "form_1672": "Purified", - "form_1673": "Normal", - "form_1674": "Shadow", - "form_1675": "Purified", - "form_1676": "Normal", - "form_1677": "Shadow", - "form_1678": "Purified", - "form_1679": "Normal", - "form_1680": "Shadow", - "form_1681": "Purified", - "form_1682": "Normal", - "form_1683": "Shadow", - "form_1684": "Purified", - "form_1685": "Normal", - "form_1686": "Shadow", - "form_1687": "Purified", - "form_1688": "Normal", - "form_1689": "Shadow", - "form_1690": "Purified", - "form_1691": "Normal", - "form_1692": "Shadow", - "form_1693": "Purified", - "form_1694": "Normal", - "form_1695": "Shadow", - "form_1696": "Purified", - "form_1697": "Normal", - "form_1698": "Shadow", - "form_1699": "Purified", - "form_1700": "Normal", - "form_1701": "Shadow", - "form_1702": "Purified", - "form_1703": "Normal", - "form_1704": "Shadow", - "form_1705": "Purified", - "form_1706": "Normal", - "form_1707": "Shadow", - "form_1708": "Purified", - "form_1709": "Normal", - "form_1710": "Shadow", - "form_1711": "Purified", - "form_1712": "Normal", - "form_1713": "Shadow", - "form_1714": "Purified", - "form_1715": "Normal", - "form_1716": "Shadow", - "form_1717": "Purified", - "form_1718": "Normal", - "form_1719": "Shadow", - "form_1720": "Purified", - "form_1721": "Normal", - "form_1722": "Shadow", - "form_1723": "Purified", - "form_1724": "Normal", - "form_1725": "Shadow", - "form_1726": "Purified", - "form_1727": "Normal", - "form_1728": "Shadow", - "form_1729": "Purified", - "form_1730": "Normal", - "form_1731": "Shadow", - "form_1732": "Purified", - "form_1733": "Normal", - "form_1734": "Shadow", - "form_1735": "Purified", - "form_1736": "Normal", - "form_1737": "Shadow", - "form_1738": "Purified", - "form_1739": "Normal", - "form_1740": "Shadow", - "form_1741": "Purified", - "form_1742": "Normal", - "form_1743": "Shadow", - "form_1744": "Purified", - "form_1745": "Normal", - "form_1746": "Shadow", - "form_1747": "Purified", - "form_1748": "Normal", - "form_1749": "Shadow", - "form_1750": "Purified", - "form_1751": "Normal", - "form_1752": "Shadow", - "form_1753": "Purified", - "form_1754": "Normal", - "form_1755": "Shadow", - "form_1756": "Purified", - "form_1757": "Normal", - "form_1758": "Shadow", - "form_1759": "Purified", - "form_1760": "Normal", - "form_1761": "Shadow", - "form_1762": "Purified", - "form_1763": "Normal", - "form_1764": "Shadow", - "form_1765": "Purified", - "form_1766": "Normal", - "form_1767": "Shadow", - "form_1768": "Purified", - "form_1769": "Normal", - "form_1770": "Shadow", - "form_1771": "Purified", - "form_1772": "Normal", - "form_1773": "Shadow", - "form_1774": "Purified", - "form_1775": "Normal", - "form_1776": "Shadow", - "form_1777": "Purified", - "form_1778": "Normal", - "form_1779": "Shadow", - "form_1780": "Purified", - "form_1781": "Normal", - "form_1782": "Shadow", - "form_1783": "Purified", - "form_1784": "Normal", - "form_1785": "Shadow", - "form_1786": "Purified", - "form_1787": "Normal", - "form_1788": "Shadow", - "form_1789": "Purified", - "form_1790": "Normal", - "form_1791": "Shadow", - "form_1792": "Purified", - "form_1793": "Normal", - "form_1794": "Shadow", - "form_1795": "Purified", - "form_1796": "Normal", - "form_1797": "Shadow", - "form_1798": "Purified", - "form_1799": "Normal", - "form_1800": "Shadow", - "form_1801": "Purified", - "form_1802": "Normal", - "form_1803": "Shadow", - "form_1804": "Purified", - "form_1805": "Normal", - "form_1806": "Shadow", - "form_1807": "Purified", - "form_1808": "Normal", - "form_1809": "Shadow", - "form_1810": "Purified", - "form_1811": "Normal", - "form_1812": "Shadow", - "form_1813": "Purified", - "form_1814": "Normal", - "form_1815": "Shadow", - "form_1816": "Purified", - "form_1817": "Normal", - "form_1818": "Shadow", - "form_1819": "Purified", - "form_1820": "Normal", - "form_1821": "Shadow", - "form_1822": "Purified", - "form_1823": "Normal", - "form_1824": "Shadow", - "form_1825": "Purified", - "form_1826": "Normal", - "form_1827": "Shadow", - "form_1828": "Purified", - "form_1829": "Normal", - "form_1830": "Shadow", - "form_1831": "Purified", - "form_1832": "Normal", - "form_1833": "Shadow", - "form_1834": "Purified", - "form_1835": "Normal", - "form_1836": "Shadow", - "form_1837": "Purified", - "form_1838": "Normal", - "form_1839": "Shadow", - "form_1840": "Purified", - "form_1841": "Normal", - "form_1842": "Shadow", - "form_1843": "Purified", - "form_1844": "Normal", - "form_1845": "Shadow", - "form_1846": "Purified", - "form_1847": "Normal", - "form_1848": "Shadow", - "form_1849": "Purified", - "form_1850": "Normal", - "form_1851": "Shadow", - "form_1852": "Purified", - "form_1853": "Normal", - "form_1854": "Shadow", - "form_1855": "Purified", - "form_1856": "Normal", - "form_1857": "Shadow", - "form_1858": "Purified", - "form_1859": "Normal", - "form_1860": "Shadow", - "form_1861": "Purified", - "form_1862": "Normal", - "form_1863": "Shadow", - "form_1864": "Purified", - "form_1865": "Normal", - "form_1866": "Shadow", - "form_1867": "Purified", - "form_1868": "Normal", - "form_1869": "Shadow", - "form_1870": "Purified", - "form_1871": "Normal", - "form_1872": "Shadow", - "form_1873": "Purified", - "form_1874": "Normal", - "form_1875": "Shadow", - "form_1876": "Purified", - "form_1877": "Normal", - "form_1878": "Shadow", - "form_1879": "Purified", - "form_1880": "Normal", - "form_1881": "Shadow", - "form_1882": "Purified", - "form_1883": "Normal", - "form_1884": "Shadow", - "form_1885": "Purified", - "form_1886": "Normal", - "form_1887": "Shadow", - "form_1888": "Purified", - "form_1889": "Normal", - "form_1890": "Shadow", - "form_1891": "Purified", - "form_1892": "Normal", - "form_1893": "Shadow", - "form_1894": "Purified", - "form_1895": "Normal", - "form_1896": "Shadow", - "form_1897": "Purified", - "form_1898": "Normal", - "form_1899": "Shadow", - "form_1900": "Purified", - "form_1901": "Normal", - "form_1902": "Shadow", - "form_1903": "Purified", - "form_1904": "Normal", - "form_1905": "Shadow", - "form_1906": "Purified", - "form_1907": "Normal", - "form_1908": "Shadow", - "form_1909": "Purified", - "form_1910": "Normal", - "form_1911": "Shadow", - "form_1912": "Purified", - "form_1913": "Normal", - "form_1914": "Shadow", - "form_1915": "Purified", - "form_1916": "Normal", - "form_1917": "Shadow", - "form_1918": "Purified", - "form_1919": "Normal", - "form_1920": "Shadow", - "form_1921": "Purified", - "form_1922": "Normal", - "form_1923": "Shadow", - "form_1924": "Purified", - "form_1925": "Normal", - "form_1926": "Shadow", - "form_1927": "Purified", - "form_1928": "Normal", - "form_1929": "Shadow", - "form_1930": "Purified", - "form_1931": "Normal", - "form_1932": "Shadow", - "form_1933": "Purified", - "form_1934": "Normal", - "form_1935": "Shadow", - "form_1936": "Purified", - "form_1937": "Normal", - "form_1938": "Shadow", - "form_1939": "Purified", - "form_1940": "Normal", - "form_1941": "Shadow", - "form_1942": "Purified", - "form_1943": "Normal", - "form_1944": "Shadow", - "form_1945": "Purified", - "form_1946": "Normal", - "form_1947": "Shadow", - "form_1948": "Purified", - "form_1949": "Normal", - "form_1950": "Shadow", - "form_1951": "Purified", - "form_1952": "Normal", - "form_1953": "Shadow", - "form_1954": "Purified", - "form_1955": "Normal", - "form_1956": "Shadow", - "form_1957": "Purified", - "form_1958": "Normal", - "form_1959": "Shadow", - "form_1960": "Purified", - "form_1961": "Normal", - "form_1962": "Shadow", - "form_1963": "Purified", - "form_1964": "Normal", - "form_1965": "Shadow", - "form_1966": "Purified", - "form_1967": "Normal", - "form_1968": "Shadow", - "form_1969": "Purified", - "form_1970": "Normal", - "form_1971": "Shadow", - "form_1972": "Purified", - "form_1973": "Normal", - "form_1974": "Shadow", - "form_1975": "Purified", - "form_1976": "Normal", - "form_1977": "Shadow", - "form_1978": "Purified", - "form_1979": "Normal", - "form_1980": "Shadow", - "form_1981": "Purified", - "form_1982": "Normal", - "form_1983": "Shadow", - "form_1984": "Purified", - "form_1985": "Normal", - "form_1986": "Shadow", - "form_1987": "Purified", - "form_1988": "Normal", - "form_1989": "Shadow", - "form_1990": "Purified", - "form_1991": "Normal", - "form_1992": "Shadow", - "form_1993": "Purified", - "form_1994": "Normal", - "form_1995": "Shadow", - "form_1996": "Purified", - "form_1997": "Normal", - "form_1998": "Shadow", - "form_1999": "Purified", - "form_2000": "Normal", - "form_2001": "Shadow", - "form_2002": "Purified", - "form_2003": "Normal", - "form_2004": "Shadow", - "form_2005": "Purified", - "form_2006": "Normal", - "form_2007": "Shadow", - "form_2008": "Purified", - "form_2009": "Normal", - "form_2010": "Shadow", - "form_2011": "Purified", - "form_2012": "Normal", - "form_2013": "Shadow", - "form_2014": "Purified", - "form_2015": "Normal", - "form_2016": "Shadow", - "form_2017": "Purified", - "form_2018": "Normal", - "form_2019": "Shadow", - "form_2020": "Purified", - "form_2021": "Normal", - "form_2022": "Shadow", - "form_2023": "Purified", - "form_2024": "Normal", - "form_2025": "Shadow", - "form_2026": "Purified", - "form_2027": "Normal", - "form_2028": "Shadow", - "form_2029": "Purified", - "form_2030": "Normal", - "form_2031": "Shadow", - "form_2032": "Purified", - "form_2033": "Normal", - "form_2034": "Shadow", - "form_2035": "Purified", - "form_2036": "Normal", - "form_2037": "Shadow", - "form_2038": "Purified", - "form_2039": "Normal", - "form_2040": "Shadow", - "form_2041": "Purified", - "form_2042": "Normal", - "form_2043": "Shadow", - "form_2044": "Purified", - "form_2045": "Normal", - "form_2046": "Shadow", - "form_2047": "Purified", - "form_2048": "Normal", - "form_2049": "Shadow", - "form_2050": "Purified", - "form_2051": "Normal", - "form_2052": "Shadow", - "form_2053": "Purified", - "form_2054": "Normal", - "form_2055": "Shadow", - "form_2056": "Purified", - "form_2057": "Normal", - "form_2058": "Shadow", - "form_2059": "Purified", - "form_2060": "Normal", - "form_2061": "Shadow", - "form_2062": "Purified", - "form_2063": "Normal", - "form_2064": "Shadow", - "form_2065": "Purified", - "form_2066": "Normal", - "form_2067": "Shadow", - "form_2068": "Purified", - "form_2069": "Normal", - "form_2070": "Shadow", - "form_2071": "Purified", - "form_2072": "Normal", - "form_2073": "Shadow", - "form_2074": "Purified", - "form_2075": "Normal", - "form_2076": "Shadow", - "form_2077": "Purified", - "form_2078": "Normal", - "form_2079": "Shadow", - "form_2080": "Purified", - "form_2081": "Normal", - "form_2082": "Shadow", - "form_2083": "Purified", - "form_2084": "Normal", - "form_2085": "Shadow", - "form_2086": "Purified", - "form_2087": "Normal", - "form_2088": "Shadow", - "form_2089": "Purified", - "form_2090": "Normal", - "form_2091": "Shadow", - "form_2092": "Purified", - "form_2093": "Normal", - "form_2094": "Shadow", - "form_2095": "Purified", - "form_2096": "Normal", - "form_2097": "Shadow", - "form_2098": "Purified", - "form_2099": "Normal", - "form_2100": "Shadow", - "form_2101": "Purified", - "form_2102": "Normal", - "form_2103": "Shadow", - "form_2104": "Purified", - "form_2105": "Normal", - "form_2106": "Shadow", - "form_2107": "Purified", - "form_2108": "Normal", - "form_2109": "Shadow", - "form_2110": "Purified", - "form_2111": "Normal", - "form_2112": "Shadow", - "form_2113": "Purified", - "form_2114": "Normal", - "form_2115": "Shadow", - "form_2116": "Purified", - "form_2117": "Normal", - "form_2118": "Shadow", - "form_2119": "Purified", - "form_2120": "Normal", - "form_2121": "Shadow", - "form_2122": "Purified", - "form_2123": "Normal", - "form_2124": "Shadow", - "form_2125": "Purified", - "form_2126": "Normal", - "form_2127": "Shadow", - "form_2128": "Purified", - "form_2129": "Normal", - "form_2130": "Shadow", - "form_2131": "Purified", - "form_2132": "Normal", - "form_2133": "Shadow", - "form_2134": "Purified", - "form_2135": "Normal", - "form_2136": "Shadow", - "form_2137": "Purified", - "form_2138": "Normal", - "form_2139": "Shadow", - "form_2140": "Purified", - "form_2141": "Normal", - "form_2142": "Shadow", - "form_2143": "Purified", - "form_2144": "Normal", - "form_2145": "Shadow", - "form_2146": "Purified", - "form_2147": "Normal", - "form_2148": "Shadow", - "form_2149": "Purified", - "form_2150": "Normal", - "form_2151": "Shadow", - "form_2152": "Purified", - "form_2153": "Normal", - "form_2154": "Shadow", - "form_2155": "Purified", - "form_2156": "Normal", - "form_2157": "Shadow", - "form_2158": "Purified", - "form_2159": "Normal", - "form_2160": "Shadow", - "form_2161": "Purified", - "form_2162": "Normal", - "form_2163": "Shadow", - "form_2164": "Purified", - "form_2165": "Normal", - "form_2166": "Shadow", - "form_2167": "Purified", - "form_2168": "Normal", - "form_2169": "Shadow", - "form_2170": "Purified", - "form_2171": "Normal", - "form_2172": "Shadow", - "form_2173": "Purified", - "form_2174": "Normal", - "form_2175": "Shadow", - "form_2176": "Purified", - "form_2177": "Normal", - "form_2178": "Shadow", - "form_2179": "Purified", - "form_2180": "Normal", - "form_2181": "Shadow", - "form_2182": "Purified", - "form_2183": "Normal", - "form_2184": "Shadow", - "form_2185": "Purified", - "form_2186": "Normal", - "form_2187": "Shadow", - "form_2188": "Purified", - "form_2189": "Normal", - "form_2190": "Shadow", - "form_2191": "Purified", - "form_2192": "Normal", - "form_2193": "Shadow", - "form_2194": "Purified", - "form_2195": "Normal", - "form_2196": "Shadow", - "form_2197": "Purified", - "form_2198": "Normal", - "form_2199": "Shadow", - "form_2200": "Purified", - "form_2201": "Normal", - "form_2202": "Shadow", - "form_2203": "Purified", - "form_2204": "Normal", - "form_2205": "Shadow", - "form_2206": "Purified", - "form_2207": "Normal", - "form_2208": "Shadow", - "form_2209": "Purified", - "form_2210": "Normal", - "form_2211": "Shadow", - "form_2212": "Purified", - "form_2213": "Normal", - "form_2214": "Shadow", - "form_2215": "Purified", - "form_2216": "Normal", - "form_2217": "Shadow", - "form_2218": "Purified", - "form_2219": "Normal", - "form_2220": "Shadow", - "form_2221": "Purified", - "form_2222": "Normal", - "form_2223": "Shadow", - "form_2224": "Purified", - "form_2225": "Normal", - "form_2226": "Shadow", - "form_2227": "Purified", - "form_2228": "Normal", - "form_2229": "Shadow", - "form_2230": "Purified", - "form_2231": "Normal", - "form_2232": "Shadow", - "form_2233": "Purified", - "form_2234": "Normal", - "form_2235": "Shadow", - "form_2236": "Purified", - "form_2237": "Normal", - "form_2238": "Shadow", - "form_2239": "Purified", - "form_2240": "Normal", - "form_2241": "Shadow", - "form_2242": "Purified", - "form_2243": "Normal", - "form_2244": "Shadow", - "form_2245": "Purified", - "form_2246": "Normal", - "form_2247": "Shadow", - "form_2248": "Purified", - "form_2249": "Normal", - "form_2250": "Shadow", - "form_2251": "Purified", - "form_2252": "Normal", - "form_2253": "Shadow", - "form_2254": "Purified", - "form_2255": "Normal", - "form_2256": "Shadow", - "form_2257": "Purified", - "form_2258": "Normal", - "form_2259": "Shadow", - "form_2260": "Purified", - "form_2261": "Normal", - "form_2262": "Shadow", - "form_2263": "Purified", - "form_2264": "Normal", - "form_2265": "Shadow", - "form_2266": "Purified", - "form_2267": "Normal", - "form_2268": "Shadow", - "form_2269": "Purified", - "form_2270": "Normal", - "form_2271": "Shadow", - "form_2272": "Purified", - "form_2273": "Normal", - "form_2274": "Shadow", - "form_2275": "Purified", - "form_2276": "Normal", - "form_2277": "Shadow", - "form_2278": "Purified", - "form_2279": "Normal", - "form_2280": "Shadow", - "form_2281": "Purified", - "form_2282": "Normal", - "form_2283": "Shadow", - "form_2284": "Purified", - "form_2285": "Normal", - "form_2286": "Shadow", - "form_2287": "Purified", - "form_2288": "Normal", - "form_2289": "Shadow", - "form_2290": "Purified", - "form_2291": "Normal", - "form_2292": "Shadow", - "form_2293": "Purified", - "form_2294": "Normal", - "form_2295": "Shadow", - "form_2296": "Purified", - "form_2297": "Normal", - "form_2298": "Shadow", - "form_2299": "Purified", - "form_2300": "Normal", - "form_2301": "Shadow", - "form_2302": "Purified", - "form_2303": "Normal", - "form_2304": "Shadow", - "form_2305": "Purified", - "form_2306": "Normal", - "form_2307": "Shadow", - "form_2308": "Purified", - "form_2309": "Normal", - "form_2310": "Shadow", - "form_2311": "Purified", - "form_2312": "Normal", - "form_2313": "Shadow", - "form_2314": "Purified", - "form_2315": "Normal", - "form_2316": "Shadow", - "form_2317": "Purified", - "form_2318": "Normal", - "form_2319": "Shadow", - "form_2320": "Purified", - "form_2321": "Normal", - "form_2322": "Shadow", - "form_2323": "Purified", - "form_2324": "Normal", - "form_2325": "Shadow", - "form_2326": "Purified", - "form_2327": "Spring 2020", - "form_2328": "Spring 2020", - "form_2329": "Spring 2020", - "form_2330": "Female", - "form_2331": "Female", - "form_2332": "Costume 2020", - "form_2333": "Costume 2020", - "form_2334": "Costume 2020", - "form_2335": "Galarian", - "form_2336": "Galarian", - "form_2337": "Galarian", - "form_2338": "Galarian", - "form_2339": "Galarian", - "form_2340": "Galarian", - "form_2341": "Galarian", - "form_2342": "Galarian Standard", - "form_2343": "Galarian Zen", - "form_2344": "Galarian", - "form_2345": "Galarian", - "form_2501": "Normal", - "form_2502": "Shadow", - "form_2503": "Purified", - "form_2504": "Normal", - "form_2505": "Shadow", - "form_2506": "Purified", - "form_2510": "Normal", - "form_2511": "Shadow", - "form_2512": "Purified", - "form_2516": "Normal", - "form_2517": "Shadow", - "form_2518": "Purified", - "form_2582": "Galarian", - "form_2583": "Galarian", - "form_2585": "Costume 2020", - "form_2586": "Costume 2020", - "form_2587": "Normal", - "form_2588": "Female", - "form_2589": "Normal", - "form_2590": "Female", - "form_2591": "Ten Percent", - "form_2592": "Fifty Percent", - "form_2593": "Complete", - "form_2594": "Archipelago", - "form_2595": "Continental", - "form_2596": "Elegant", - "form_2597": "Fancy", - "form_2598": "Garden", - "form_2599": "High Plains", - "form_2600": "Icy Snow", - "form_2601": "Jungle", - "form_2602": "Marine", - "form_2603": "Meadow", - "form_2604": "Modern", - "form_2605": "Monsoon", - "form_2606": "Ocean", - "form_2607": "Pokeball", - "form_2608": "Polar", - "form_2609": "River", - "form_2610": "Sandstorm", - "form_2611": "Savanna", - "form_2612": "Sun", - "form_2613": "Tundra", - "form_2614": "Red", - "form_2615": "Yellow", - "form_2616": "Orange", - "form_2617": "Blue", - "form_2618": "White", - "form_2619": "Red", - "form_2620": "Yellow", - "form_2621": "Orange", - "form_2622": "Blue", - "form_2623": "White", - "form_2624": "Red", - "form_2625": "Yellow", - "form_2626": "Orange", - "form_2627": "Blue", - "form_2628": "White", - "form_2629": "Natural", - "form_2630": "Heart", - "form_2631": "Star", - "form_2632": "Diamond", - "form_2633": "Debutante", - "form_2634": "Matron", - "form_2635": "Dandy", - "form_2636": "La Reine", - "form_2637": "Kabuki", - "form_2638": "Pharaoh", - "form_2639": "Shield", - "form_2640": "Blade", - "form_2641": "Small", - "form_2642": "Average", - "form_2643": "Large", - "form_2644": "Super", - "form_2645": "Small", - "form_2646": "Average", - "form_2647": "Large", - "form_2648": "Super", - "form_2649": "Neutral", - "form_2650": "Active", - "form_2651": "Confined", - "form_2652": "Unbound", - "form_2666": "Costume 2020 Deprecated", - "form_2668": "Costume 2020", - "form_2669": "Adventure Hat 2020", - "form_2670": "Winter 2020", - "form_2671": "Winter 2020", - "form_2672": "Winter 2020", - "form_2673": "2020", - "form_2674": "2021", - "costume_1": "Holiday", - "costume_2": "Party", - "costume_3": "Ash", - "costume_4": "Witch", - "costume_5": "Adventure", - "costume_6": "Black Cap", - "costume_7": "Flower", - "costume_8": "Toque", - "costume_9": "Detective", - "costume_10": "One Piece", - "costume_11": "Pokemon Day", - "move_1": "電擊", - "move_2": "電光一閃", - "move_3": "抓", - "move_4": "火花", - "move_5": "藤鞭", - "move_6": "撞擊", - "move_7": "飛葉快刀", - "move_8": "猛撞", - "move_9": "水槍", - "move_10": "咬住", - "move_11": "拍擊", - "move_12": "連環巴掌", - "move_13": "緊束", - "move_14": "破壞光線", - "move_15": "舌舔", - "move_16": "惡之波動", - "move_17": "濁霧", - "move_18": "污泥攻擊", - "move_19": "金屬爪", - "move_20": "夾住", - "move_21": "火焰輪", - "move_22": "超級角擊", - "move_23": "翅膀攻擊", - "move_24": "噴射火焰", - "move_25": "突襲", - "move_26": "挖洞", - "move_27": "踢倒", - "move_28": "十字劈", - "move_29": "精神利刃", - "move_30": "幻象光線", - "move_31": "地震", - "move_32": "尖石攻擊", - "move_33": "冰凍拳", - "move_34": "愛心印章", - "move_35": "放電", - "move_36": "加農光炮", - "move_37": "啄", - "move_38": "啄鑽", - "move_39": "冰凍光束", - "move_40": "暴風雪", - "move_41": "空氣斬", - "move_42": "熱風", - "move_43": "雙針", - "move_44": "毒擊", - "move_45": "燕返", - "move_46": "直衝鑽", - "move_47": "落英繽紛", - "move_48": "超級吸取", - "move_49": "蟲鳴", - "move_50": "劇毒牙", - "move_51": "暗襲要害", - "move_52": "劈開", - "move_53": "泡沫光線", - "move_54": "地獄翻滾", - "move_55": "空手劈", - "move_56": "下盤踢", - "move_57": "水流噴射", - "move_58": "水流尾", - "move_59": "種子炸彈", - "move_60": "精神衝擊", - "move_61": "落石", - "move_62": "原始之力", - "move_63": "岩石封鎖", - "move_64": "岩崩", - "move_65": "力量寶石", - "move_66": "影子偷襲", - "move_67": "暗影拳", - "move_68": "暗影爪", - "move_69": "奇異之風", - "move_70": "暗影球", - "move_71": "子彈拳", - "move_72": "磁鐵炸彈", - "move_73": "鋼翼", - "move_74": "鐵頭", - "move_75": "拋物面充電", - "move_76": "電光", - "move_77": "雷電拳", - "move_78": "打雷", - "move_79": "十萬伏特", - "move_80": "龍捲風", - "move_81": "龍息", - "move_82": "龍之波動", - "move_83": "龍爪", - "move_84": "魅惑之聲", - "move_85": "吸取之吻", - "move_86": "魔法閃耀", - "move_87": "月亮之力", - "move_88": "嬉鬧", - "move_89": "十字毒刃", - "move_90": "污泥炸彈", - "move_91": "污泥波", - "move_92": "垃圾射擊", - "move_93": "泥巴射擊", - "move_94": "骨棒", - "move_95": "重踏", - "move_96": "泥巴炸彈", - "move_97": "連斬", - "move_98": "蟲咬", - "move_99": "信號光束", - "move_100": "十字剪", - "move_101": "蓄能焰襲", - "move_102": "烈焰濺射", - "move_103": "大字爆炎", - "move_104": "鹽水", - "move_105": "水之波動", - "move_106": "熱水", - "move_107": "水炮", - "move_108": "精神強念", - "move_109": "精神擊破", - "move_110": "冰礫", - "move_111": "冰凍之風", - "move_112": "冰息", - "move_113": "吸取", - "move_114": "終極吸取", - "move_115": "火焰拳", - "move_116": "日光束", - "move_117": "葉刃", - "move_118": "強力鞭打", - "move_119": "躍起", - "move_120": "溶解液", - "move_121": "空氣利刃", - "move_122": "暴風", - "move_123": "劈瓦", - "move_124": "居合斬", - "move_125": "高速星星", - "move_126": "角撞", - "move_127": "踩踏", - "move_128": "頭錘", - "move_129": "必殺門牙", - "move_130": "摔打", - "move_131": "泰山壓頂", - "move_132": "睡覺", - "move_133": "掙扎", - "move_134": "熱水", - "move_135": "水炮", - "move_136": "緊束", - "move_137": "緊束", - "move_200": "連斬", - "move_201": "蟲咬", - "move_202": "咬住", - "move_203": "突襲", - "move_204": "龍息", - "move_205": "電擊", - "move_206": "電光", - "move_207": "踢倒", - "move_208": "空手劈", - "move_209": "火花", - "move_210": "翅膀攻擊", - "move_211": "啄", - "move_212": "舌舔", - "move_213": "暗影爪", - "move_214": "藤鞭", - "move_215": "飛葉快刀", - "move_216": "泥巴射擊", - "move_217": "冰礫", - "move_218": "冰息", - "move_219": "電光一閃", - "move_220": "抓", - "move_221": "撞擊", - "move_222": "拍擊", - "move_223": "居合斬", - "move_224": "毒擊", - "move_225": "溶解液", - "move_226": "精神利刃", - "move_227": "落石", - "move_228": "金屬爪", - "move_229": "子彈拳", - "move_230": "水槍", - "move_231": "躍起", - "move_232": "水槍", - "move_233": "擲泥", - "move_234": "意念頭錘", - "move_235": "念力", - "move_236": "毒針", - "move_237": "泡沫", - "move_238": "出奇一擊", - "move_239": "鋼翼", - "move_240": "火焰牙", - "move_241": "碎岩", - "move_242": "變身", - "move_243": "雙倍奉還", - "move_244": "細雪", - "move_245": "近身戰", - "move_246": "爆裂拳", - "move_247": "真氣彈", - "move_248": "極光束", - "move_249": "充電光束", - "move_250": "伏特替換", - "move_251": "瘋狂伏特", - "move_252": "電磁炮", - "move_253": "龍尾", - "move_254": "雪崩", - "move_255": "空氣斬", - "move_256": "勇鳥猛攻", - "move_257": "神鳥猛擊", - "move_258": "流沙地獄", - "move_259": "岩石爆擊", - "move_260": "死纏爛打", - "move_261": "蟲之抵抗", - "move_262": "銀色旋風", - "move_263": "驚嚇", - "move_264": "禍不單行", - "move_265": "黑夜魔影", - "move_266": "鐵尾", - "move_267": "陀螺球", - "move_268": "重磅衝撞", - "move_269": "火焰旋渦", - "move_270": "過熱", - "move_271": "種子機關槍", - "move_272": "打草結", - "move_273": "能量球", - "move_274": "神通力", - "move_275": "預知未來", - "move_276": "鏡面反射", - "move_277": "逆麟", - "move_278": "大聲咆哮", - "move_279": "咬碎", - "move_280": "欺詐", - "move_281": "覺醒力量", - "move_287": "哈欠", - "move_282": "猛撞", - "move_285": "流星群", - "move_283": "攀瀑", - "move_284": "衝浪", - "move_288": "精神突進", - "move_286": "破滅之願", - "move_290": "斷崖之劍", - "move_289": "根源波動", - "move_291": "禮物", - "move_292": "氣象球", - "move_293": "氣象球", - "move_294": "氣象球", - "move_295": "氣象球", - "move_296": "瘋狂植物", - "move_298": "爆炸烈焰", - "move_297": "擊落", - "move_299": "加農水砲", - "move_300": "珍藏", - "move_301": "彗星拳", - "move_302": "火箭頭錘", - "move_303": "酸液炸彈", - "move_304": "大地之力", - "move_305": "蟹鉗錘", - "move_306": "猛撲", - "move_307": "撕裂爪", - "move_308": "章魚桶炮", - "move_309": "鏡光射擊", - "move_310": "蠻力", - "move_311": "致命針刺", - "move_312": "青草攪拌器", - "move_313": "吸血", - "move_314": "吸取拳", - "move_315": "暗影之骨", - "move_316": "濁流", - "move_317": "火焰踢", - "move_318": "貝殼刃", - "move_319": "增強拳", - "move_320": "撒嬌", - "move_321": "終極衝擊", - "move_322": "遷怒", - "move_323": "報恩", - "move_324": "同步干擾", - "move_325": "鎖定", - "move_326": "雷電牙", - "move_327": "冰凍牙", - "move_328": "角鑽", - "move_329": "地裂", - "move_330": "聖劍", - "move_331": "飛身重壓", - "move_332": "波導彈", - "move_333": "以牙還牙", - "move_334": "岩石炮", - "move_335": "氣旋攻擊", - "move_336": "Techno Blast Normal", - "move_337": "Techno Blast Burn", - "move_338": "Techno Blast Chill", - "move_339": "Techno Blast Water", - "move_340": "Techno Blast Shock", - "move_341": "飛翔" -} diff --git a/static/locales/_de.json b/static/locales/_de.json new file mode 100644 index 00000000..6c061466 --- /dev/null +++ b/static/locales/_de.json @@ -0,0 +1,158 @@ +{ + "ALL_AREAS": "All Areas", + "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", + "CHANNEL_MESSAGES_DELETED": "{{author}} Channel {{channel}} messages have been deleted.", + "DIRECT_MESSAGE_NOT_SUPPORTED": "{{author}} Direct message is not supported for this command.", + "DONATE_MESSAGE": "{{author}} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", + "EMBED_DIRECTIONS": "DIRECTIONS", + "ERROR_NESTS_DISABLED": "{{author}} Nests disabled.", + "ERROR_NESTS_LIST": "{{author}} Unable to retrieve nest list.", + "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", + "ERROR_NO_INVASION_SUBSCRIPTIONS": "{{author}} is not subscribed to any Team Rocket invasion notifications{{cities}}.", + "ERROR_NO_QUEST_SUBSCRIPTIONS": "{{author}} is not subscribed to any quest notifications{{cities}}.", + "ERROR_NO_RAID_SUBSCRIPTIONS": "{{author}} is not subscribed to any raid notifications{{cities}}.", + "ERROR_NO_LURE_SUBSCRIPTIONS": "{{author}} is not subscribed to any lure notifications{{cities}}.", + "ERROR_PARSING_USER_ID": "{{author}} Unable to recognize user id {{id}}.", + "EVENT_POKEMON_ADD": "{{author}} event Pokemon added to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "EVENT_POKEMON_REMOVE": "{{author}} event Pokemon `{{pokemon}}` removed.", + "EVENT_POKEMON_SET": "{{author}} event Pokemon set to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} Unable to remove {{pokemon}} Pokemon subscriptions.", + "FEEDS_ASSIGNED_ALL_ROLES": "{{author}} was assigned all city feed roles: {{roles}}", + "FEEDS_ASSIGNED_ROLES": "{{author}} has joined role(s) **{{roles}}**.", + "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{{author}} is already assigned to role(s) **{{roles}}**.", + "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", + "FEEDS_INVALID_CITY_NAME": "{{author}} {{city}} is not a valid city name.", + "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{{author}} {{city}} is not a valid city name, type `{{prefix}}cities` to see a list of available cities.", + "FEEDS_PLEASE_WAIT": "{{author}} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", + "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{{prefix}}feedme cityname` to assign yourself to that city role.*", + "FEEDS_UNASSIGNED_ALL_ROLES": "{{author}} was unassigned all city feed roles: {{roles}}", + "FEEDS_UNASSIGNED_ROLES": "{{author}} has been removed from role(s) **{{roles}}**.", + "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{{author}} is not assigned to role(s) **{{roles}}**.", + "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({{location_url}})] [[Gym Image]({{image_url}})]", + "GYM_NAME": "- **{{name}}**", + "GYM_NO_POKESTOPS_CONVERTED": "{{author}} No Pokestops have been converted to Gyms.", + "GYM_NO_POKESTOPS_UPDATED": "{{author}} No Pokestops have been updated.", + "GYM_POKESTOPS_CONVERTED": "{{author}} {{amount}} Pokestops updated to Gyms.", + "GYM_POKESTOPS_DELETED": "{{author}} {{amount}} Pokestops deleted.", + "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", + "GYM_UNKNOWN_IMAGE": "Unknown Image Url", + "GYM_UNKNOWN_NAME": "Unknown Gym Name", + "MSG_INVALID_USER_MENTION": "{{author}} Failed to retrieve user with mention tag {{mention}}.", + "MSG_NOT_MODERATOR_OR_HIGHER": "{{author}} is not a moderator or higher thus you may not see other's subscription settings.", + "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{{0}} Subscriptions are not enabled in the config.", + "MSG_USER_NOT_SUBSCRIBED": "{{author}} is not currently subscribed to any Pokemon or Raid notifications.", + "NOTIFY_COMMON_TYPE_POKEMON": "{{author}} {{pokemon}} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {{min_iv}}% or higher.", + "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your {{league}} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_DISTANCE_SET": "{{author}} Notifications only within a {{distance}} kilometer radius of location {{latitude}},{{longitude}} will be sent.", + "NOTIFY_ENABLE_DISABLE": "{{author}} has **{{command}}d** Pokemon, PvP, Raid, Gym, Quest, Invasion, and Lure notifications.", + "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{{author}} does not have any subscriptions to export.", + "NOTIFY_EXPORT_SUCCESS": "{{author}} Download your subscription settings here.", + "NOTIFY_FROM": "{{line}} (From: {{cities}})", + "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{{author}} added gym subscription `{{gym}}` to your list of gyms to receive raid notifications from.", + "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{{author}} already subscribed to gym notifications from {{gym}}.", + "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{{author}} Removed gym subscription `{{gym}}` from your list of gyms to receive notifications from.", + "NOTIFY_ICON_STYLE_CHANGE": "{{author}} Icon style changed to **{{style}}**.", + "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{{author}} Unable to get uploaded attachment.", + "NOTIFY_IMPORT_MALFORMED_DATA": "{{author}} Malformed subscription data, unable to import.", + "NOTIFY_IMPORT_SUCCESS": "{{author}} subscriptions were imported successfully.", + "NOTIFY_IMPORT_UPLOAD_FILE": "{{author}} Please upload your subscriptions.json file to import now within 3 minutes...", + "NOTIFY_INVALID_ATTACK_VALUE": "{{author}} {{atk_iv}} is not a valid attack value. Must be between `0-15`.", + "NOTIFY_INVALID_CITY_ROLE": "{{author}} {{role}} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", + "NOTIFY_INVALID_COORDINATES": "{{author}} Unable not parse {{coordinates}} as valid coordinates.", + "NOTIFY_INVALID_DEFENSE_VALUE": "{{author}} {{def_iv}} is not a valid defense value. Must be between `0-15`.", + "NOTIFY_INVALID_GENDER": "{{author}} {{gender}} is not a valid gender. (i.e. `m`, `f`, `*`)", + "NOTIFY_INVALID_ICON_STYLE": "{{author}} invalid icon style, type `{{prefix}}icons` to see a list of valid options.", + "NOTIFY_INVALID_IV_RANGE": "{{author}} {{iv}} must be within the range of `0-100`.", + "NOTIFY_INVALID_IV_VALUES": "{{author}} {{iv}} is not a valid value. (Example: `0-15-6`)", + "NOTIFY_INVALID_LEVEL": "{{author}} {{level}} must be within the range of `0-35`.", + "NOTIFY_INVALID_MAXIMUM_LEVEL": "{{author}} Failed to parse maximum level provided '{{level}}'.", + "NOTIFY_INVALID_MINIMUM_IV": "{{author}} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", + "NOTIFY_INVALID_MINIMUM_LEVEL": "{{author}} Failed to parse minimum level provided '{{level}}'.", + "NOTIFY_INVALID_POKEMON_ID": "{{author}} {{pokemon}} is not a valid Pokemon id.", + "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{{author}} {{pokemon}} are not valid Pokemon names or IDs.", + "NOTIFY_INVALID_POKEMON_SPECIFIED": "{{author}} Unable to recognize any of the Pokemon you specified.", + "NOTIFY_INVALID_PVP_LEAGUE": "{{author}} {{league}} is not a valid PvP league. (Great or Ultra)", + "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{{author}} {{percent}} must be within the range of `0-100`.", + "NOTIFY_INVALID_PVP_RANK_RANGE": "{{author}} {{rank}} must be within the range of `0-4096`.", + "NOTIFY_INVALID_STAMINA_VALUE": "{{author}} {{sta_iv}} is not a valid stamina value. Must be between `0-15`.", + "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon PvP subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Raid subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Quest subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Team Rocket Invasion subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Gym subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Lure subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon notifications.", + "NOTIFY_NO_PVP_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon PvP notifications.", + "NOTIFY_PHONE_NUMBER_SET": "{{author}} Text message notifications for ultra rare Pokemon will be sent to {{number}}.", + "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{{distance}}**", + "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{{location_url}} meters", + "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", + "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{{status}}**", + "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{{style}}**", + "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{{number}}**", + "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {{iv}}% ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {{rank}} ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_TITLE": "**{{author}} Notification Settings (Page: {{page}}/{{pages}}):**", + "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** gym notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Team Rocket invasion notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** {{league}} League PvP Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** quest notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** raid boss notifications.", + "PVP_CP": "CP", + "PVP_GREAT_LEAGUE": "Great League", + "PVP_RANK": "Rank", + "PVP_ULTRA_LEAGUE": "Ultra League", + "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", + "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_NEWLINE": "----------------------------------------------", + "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", + "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", + "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_NEWLINE": "----------------------------------------------", + "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", + "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", + "HUNDO_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{count}}** total hundos out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", + "SUBSCRIPTIONS_FROM_CITY": " from city **{{city}}**", + "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Pokemon notifications.", + "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** {{league}} League PvP notifications.", + "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{lure}}** lure notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{lure}}** lure notifications{{cities}}.", + "TIME_DAYS": "days", + "TIME_HOURS": "hours", + "TIME_MINUTES": "minutes", + "TIME_SECONDS": "seconds", + "TIME_YEARS": "years", + "UNKNOWN_POKESTOP": "Unknown Pokestop", + "NORMAL": "Normal", + "UNKNOWN": "Unknown", + "EGG": "Egg", + "FULL": "Full", + "EMPTY": "Empty" +} \ No newline at end of file diff --git a/static/locales/_en.json b/static/locales/_en.json new file mode 100644 index 00000000..6c061466 --- /dev/null +++ b/static/locales/_en.json @@ -0,0 +1,158 @@ +{ + "ALL_AREAS": "All Areas", + "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", + "CHANNEL_MESSAGES_DELETED": "{{author}} Channel {{channel}} messages have been deleted.", + "DIRECT_MESSAGE_NOT_SUPPORTED": "{{author}} Direct message is not supported for this command.", + "DONATE_MESSAGE": "{{author}} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", + "EMBED_DIRECTIONS": "DIRECTIONS", + "ERROR_NESTS_DISABLED": "{{author}} Nests disabled.", + "ERROR_NESTS_LIST": "{{author}} Unable to retrieve nest list.", + "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", + "ERROR_NO_INVASION_SUBSCRIPTIONS": "{{author}} is not subscribed to any Team Rocket invasion notifications{{cities}}.", + "ERROR_NO_QUEST_SUBSCRIPTIONS": "{{author}} is not subscribed to any quest notifications{{cities}}.", + "ERROR_NO_RAID_SUBSCRIPTIONS": "{{author}} is not subscribed to any raid notifications{{cities}}.", + "ERROR_NO_LURE_SUBSCRIPTIONS": "{{author}} is not subscribed to any lure notifications{{cities}}.", + "ERROR_PARSING_USER_ID": "{{author}} Unable to recognize user id {{id}}.", + "EVENT_POKEMON_ADD": "{{author}} event Pokemon added to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "EVENT_POKEMON_REMOVE": "{{author}} event Pokemon `{{pokemon}}` removed.", + "EVENT_POKEMON_SET": "{{author}} event Pokemon set to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} Unable to remove {{pokemon}} Pokemon subscriptions.", + "FEEDS_ASSIGNED_ALL_ROLES": "{{author}} was assigned all city feed roles: {{roles}}", + "FEEDS_ASSIGNED_ROLES": "{{author}} has joined role(s) **{{roles}}**.", + "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{{author}} is already assigned to role(s) **{{roles}}**.", + "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", + "FEEDS_INVALID_CITY_NAME": "{{author}} {{city}} is not a valid city name.", + "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{{author}} {{city}} is not a valid city name, type `{{prefix}}cities` to see a list of available cities.", + "FEEDS_PLEASE_WAIT": "{{author}} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", + "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{{prefix}}feedme cityname` to assign yourself to that city role.*", + "FEEDS_UNASSIGNED_ALL_ROLES": "{{author}} was unassigned all city feed roles: {{roles}}", + "FEEDS_UNASSIGNED_ROLES": "{{author}} has been removed from role(s) **{{roles}}**.", + "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{{author}} is not assigned to role(s) **{{roles}}**.", + "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({{location_url}})] [[Gym Image]({{image_url}})]", + "GYM_NAME": "- **{{name}}**", + "GYM_NO_POKESTOPS_CONVERTED": "{{author}} No Pokestops have been converted to Gyms.", + "GYM_NO_POKESTOPS_UPDATED": "{{author}} No Pokestops have been updated.", + "GYM_POKESTOPS_CONVERTED": "{{author}} {{amount}} Pokestops updated to Gyms.", + "GYM_POKESTOPS_DELETED": "{{author}} {{amount}} Pokestops deleted.", + "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", + "GYM_UNKNOWN_IMAGE": "Unknown Image Url", + "GYM_UNKNOWN_NAME": "Unknown Gym Name", + "MSG_INVALID_USER_MENTION": "{{author}} Failed to retrieve user with mention tag {{mention}}.", + "MSG_NOT_MODERATOR_OR_HIGHER": "{{author}} is not a moderator or higher thus you may not see other's subscription settings.", + "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{{0}} Subscriptions are not enabled in the config.", + "MSG_USER_NOT_SUBSCRIBED": "{{author}} is not currently subscribed to any Pokemon or Raid notifications.", + "NOTIFY_COMMON_TYPE_POKEMON": "{{author}} {{pokemon}} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {{min_iv}}% or higher.", + "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your {{league}} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_DISTANCE_SET": "{{author}} Notifications only within a {{distance}} kilometer radius of location {{latitude}},{{longitude}} will be sent.", + "NOTIFY_ENABLE_DISABLE": "{{author}} has **{{command}}d** Pokemon, PvP, Raid, Gym, Quest, Invasion, and Lure notifications.", + "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{{author}} does not have any subscriptions to export.", + "NOTIFY_EXPORT_SUCCESS": "{{author}} Download your subscription settings here.", + "NOTIFY_FROM": "{{line}} (From: {{cities}})", + "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{{author}} added gym subscription `{{gym}}` to your list of gyms to receive raid notifications from.", + "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{{author}} already subscribed to gym notifications from {{gym}}.", + "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{{author}} Removed gym subscription `{{gym}}` from your list of gyms to receive notifications from.", + "NOTIFY_ICON_STYLE_CHANGE": "{{author}} Icon style changed to **{{style}}**.", + "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{{author}} Unable to get uploaded attachment.", + "NOTIFY_IMPORT_MALFORMED_DATA": "{{author}} Malformed subscription data, unable to import.", + "NOTIFY_IMPORT_SUCCESS": "{{author}} subscriptions were imported successfully.", + "NOTIFY_IMPORT_UPLOAD_FILE": "{{author}} Please upload your subscriptions.json file to import now within 3 minutes...", + "NOTIFY_INVALID_ATTACK_VALUE": "{{author}} {{atk_iv}} is not a valid attack value. Must be between `0-15`.", + "NOTIFY_INVALID_CITY_ROLE": "{{author}} {{role}} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", + "NOTIFY_INVALID_COORDINATES": "{{author}} Unable not parse {{coordinates}} as valid coordinates.", + "NOTIFY_INVALID_DEFENSE_VALUE": "{{author}} {{def_iv}} is not a valid defense value. Must be between `0-15`.", + "NOTIFY_INVALID_GENDER": "{{author}} {{gender}} is not a valid gender. (i.e. `m`, `f`, `*`)", + "NOTIFY_INVALID_ICON_STYLE": "{{author}} invalid icon style, type `{{prefix}}icons` to see a list of valid options.", + "NOTIFY_INVALID_IV_RANGE": "{{author}} {{iv}} must be within the range of `0-100`.", + "NOTIFY_INVALID_IV_VALUES": "{{author}} {{iv}} is not a valid value. (Example: `0-15-6`)", + "NOTIFY_INVALID_LEVEL": "{{author}} {{level}} must be within the range of `0-35`.", + "NOTIFY_INVALID_MAXIMUM_LEVEL": "{{author}} Failed to parse maximum level provided '{{level}}'.", + "NOTIFY_INVALID_MINIMUM_IV": "{{author}} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", + "NOTIFY_INVALID_MINIMUM_LEVEL": "{{author}} Failed to parse minimum level provided '{{level}}'.", + "NOTIFY_INVALID_POKEMON_ID": "{{author}} {{pokemon}} is not a valid Pokemon id.", + "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{{author}} {{pokemon}} are not valid Pokemon names or IDs.", + "NOTIFY_INVALID_POKEMON_SPECIFIED": "{{author}} Unable to recognize any of the Pokemon you specified.", + "NOTIFY_INVALID_PVP_LEAGUE": "{{author}} {{league}} is not a valid PvP league. (Great or Ultra)", + "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{{author}} {{percent}} must be within the range of `0-100`.", + "NOTIFY_INVALID_PVP_RANK_RANGE": "{{author}} {{rank}} must be within the range of `0-4096`.", + "NOTIFY_INVALID_STAMINA_VALUE": "{{author}} {{sta_iv}} is not a valid stamina value. Must be between `0-15`.", + "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon PvP subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Raid subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Quest subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Team Rocket Invasion subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Gym subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Lure subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon notifications.", + "NOTIFY_NO_PVP_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon PvP notifications.", + "NOTIFY_PHONE_NUMBER_SET": "{{author}} Text message notifications for ultra rare Pokemon will be sent to {{number}}.", + "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{{distance}}**", + "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{{location_url}} meters", + "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", + "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{{status}}**", + "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{{style}}**", + "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{{number}}**", + "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {{iv}}% ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {{rank}} ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_TITLE": "**{{author}} Notification Settings (Page: {{page}}/{{pages}}):**", + "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** gym notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Team Rocket invasion notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** {{league}} League PvP Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** quest notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** raid boss notifications.", + "PVP_CP": "CP", + "PVP_GREAT_LEAGUE": "Great League", + "PVP_RANK": "Rank", + "PVP_ULTRA_LEAGUE": "Ultra League", + "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", + "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_NEWLINE": "----------------------------------------------", + "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", + "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", + "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_NEWLINE": "----------------------------------------------", + "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", + "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", + "HUNDO_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{count}}** total hundos out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", + "SUBSCRIPTIONS_FROM_CITY": " from city **{{city}}**", + "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Pokemon notifications.", + "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** {{league}} League PvP notifications.", + "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{lure}}** lure notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{lure}}** lure notifications{{cities}}.", + "TIME_DAYS": "days", + "TIME_HOURS": "hours", + "TIME_MINUTES": "minutes", + "TIME_SECONDS": "seconds", + "TIME_YEARS": "years", + "UNKNOWN_POKESTOP": "Unknown Pokestop", + "NORMAL": "Normal", + "UNKNOWN": "Unknown", + "EGG": "Egg", + "FULL": "Full", + "EMPTY": "Empty" +} \ No newline at end of file diff --git a/static/locales/_es.json b/static/locales/_es.json new file mode 100644 index 00000000..6c061466 --- /dev/null +++ b/static/locales/_es.json @@ -0,0 +1,158 @@ +{ + "ALL_AREAS": "All Areas", + "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", + "CHANNEL_MESSAGES_DELETED": "{{author}} Channel {{channel}} messages have been deleted.", + "DIRECT_MESSAGE_NOT_SUPPORTED": "{{author}} Direct message is not supported for this command.", + "DONATE_MESSAGE": "{{author}} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", + "EMBED_DIRECTIONS": "DIRECTIONS", + "ERROR_NESTS_DISABLED": "{{author}} Nests disabled.", + "ERROR_NESTS_LIST": "{{author}} Unable to retrieve nest list.", + "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", + "ERROR_NO_INVASION_SUBSCRIPTIONS": "{{author}} is not subscribed to any Team Rocket invasion notifications{{cities}}.", + "ERROR_NO_QUEST_SUBSCRIPTIONS": "{{author}} is not subscribed to any quest notifications{{cities}}.", + "ERROR_NO_RAID_SUBSCRIPTIONS": "{{author}} is not subscribed to any raid notifications{{cities}}.", + "ERROR_NO_LURE_SUBSCRIPTIONS": "{{author}} is not subscribed to any lure notifications{{cities}}.", + "ERROR_PARSING_USER_ID": "{{author}} Unable to recognize user id {{id}}.", + "EVENT_POKEMON_ADD": "{{author}} event Pokemon added to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "EVENT_POKEMON_REMOVE": "{{author}} event Pokemon `{{pokemon}}` removed.", + "EVENT_POKEMON_SET": "{{author}} event Pokemon set to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} Unable to remove {{pokemon}} Pokemon subscriptions.", + "FEEDS_ASSIGNED_ALL_ROLES": "{{author}} was assigned all city feed roles: {{roles}}", + "FEEDS_ASSIGNED_ROLES": "{{author}} has joined role(s) **{{roles}}**.", + "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{{author}} is already assigned to role(s) **{{roles}}**.", + "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", + "FEEDS_INVALID_CITY_NAME": "{{author}} {{city}} is not a valid city name.", + "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{{author}} {{city}} is not a valid city name, type `{{prefix}}cities` to see a list of available cities.", + "FEEDS_PLEASE_WAIT": "{{author}} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", + "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{{prefix}}feedme cityname` to assign yourself to that city role.*", + "FEEDS_UNASSIGNED_ALL_ROLES": "{{author}} was unassigned all city feed roles: {{roles}}", + "FEEDS_UNASSIGNED_ROLES": "{{author}} has been removed from role(s) **{{roles}}**.", + "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{{author}} is not assigned to role(s) **{{roles}}**.", + "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({{location_url}})] [[Gym Image]({{image_url}})]", + "GYM_NAME": "- **{{name}}**", + "GYM_NO_POKESTOPS_CONVERTED": "{{author}} No Pokestops have been converted to Gyms.", + "GYM_NO_POKESTOPS_UPDATED": "{{author}} No Pokestops have been updated.", + "GYM_POKESTOPS_CONVERTED": "{{author}} {{amount}} Pokestops updated to Gyms.", + "GYM_POKESTOPS_DELETED": "{{author}} {{amount}} Pokestops deleted.", + "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", + "GYM_UNKNOWN_IMAGE": "Unknown Image Url", + "GYM_UNKNOWN_NAME": "Unknown Gym Name", + "MSG_INVALID_USER_MENTION": "{{author}} Failed to retrieve user with mention tag {{mention}}.", + "MSG_NOT_MODERATOR_OR_HIGHER": "{{author}} is not a moderator or higher thus you may not see other's subscription settings.", + "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{{0}} Subscriptions are not enabled in the config.", + "MSG_USER_NOT_SUBSCRIBED": "{{author}} is not currently subscribed to any Pokemon or Raid notifications.", + "NOTIFY_COMMON_TYPE_POKEMON": "{{author}} {{pokemon}} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {{min_iv}}% or higher.", + "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your {{league}} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_DISTANCE_SET": "{{author}} Notifications only within a {{distance}} kilometer radius of location {{latitude}},{{longitude}} will be sent.", + "NOTIFY_ENABLE_DISABLE": "{{author}} has **{{command}}d** Pokemon, PvP, Raid, Gym, Quest, Invasion, and Lure notifications.", + "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{{author}} does not have any subscriptions to export.", + "NOTIFY_EXPORT_SUCCESS": "{{author}} Download your subscription settings here.", + "NOTIFY_FROM": "{{line}} (From: {{cities}})", + "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{{author}} added gym subscription `{{gym}}` to your list of gyms to receive raid notifications from.", + "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{{author}} already subscribed to gym notifications from {{gym}}.", + "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{{author}} Removed gym subscription `{{gym}}` from your list of gyms to receive notifications from.", + "NOTIFY_ICON_STYLE_CHANGE": "{{author}} Icon style changed to **{{style}}**.", + "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{{author}} Unable to get uploaded attachment.", + "NOTIFY_IMPORT_MALFORMED_DATA": "{{author}} Malformed subscription data, unable to import.", + "NOTIFY_IMPORT_SUCCESS": "{{author}} subscriptions were imported successfully.", + "NOTIFY_IMPORT_UPLOAD_FILE": "{{author}} Please upload your subscriptions.json file to import now within 3 minutes...", + "NOTIFY_INVALID_ATTACK_VALUE": "{{author}} {{atk_iv}} is not a valid attack value. Must be between `0-15`.", + "NOTIFY_INVALID_CITY_ROLE": "{{author}} {{role}} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", + "NOTIFY_INVALID_COORDINATES": "{{author}} Unable not parse {{coordinates}} as valid coordinates.", + "NOTIFY_INVALID_DEFENSE_VALUE": "{{author}} {{def_iv}} is not a valid defense value. Must be between `0-15`.", + "NOTIFY_INVALID_GENDER": "{{author}} {{gender}} is not a valid gender. (i.e. `m`, `f`, `*`)", + "NOTIFY_INVALID_ICON_STYLE": "{{author}} invalid icon style, type `{{prefix}}icons` to see a list of valid options.", + "NOTIFY_INVALID_IV_RANGE": "{{author}} {{iv}} must be within the range of `0-100`.", + "NOTIFY_INVALID_IV_VALUES": "{{author}} {{iv}} is not a valid value. (Example: `0-15-6`)", + "NOTIFY_INVALID_LEVEL": "{{author}} {{level}} must be within the range of `0-35`.", + "NOTIFY_INVALID_MAXIMUM_LEVEL": "{{author}} Failed to parse maximum level provided '{{level}}'.", + "NOTIFY_INVALID_MINIMUM_IV": "{{author}} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", + "NOTIFY_INVALID_MINIMUM_LEVEL": "{{author}} Failed to parse minimum level provided '{{level}}'.", + "NOTIFY_INVALID_POKEMON_ID": "{{author}} {{pokemon}} is not a valid Pokemon id.", + "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{{author}} {{pokemon}} are not valid Pokemon names or IDs.", + "NOTIFY_INVALID_POKEMON_SPECIFIED": "{{author}} Unable to recognize any of the Pokemon you specified.", + "NOTIFY_INVALID_PVP_LEAGUE": "{{author}} {{league}} is not a valid PvP league. (Great or Ultra)", + "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{{author}} {{percent}} must be within the range of `0-100`.", + "NOTIFY_INVALID_PVP_RANK_RANGE": "{{author}} {{rank}} must be within the range of `0-4096`.", + "NOTIFY_INVALID_STAMINA_VALUE": "{{author}} {{sta_iv}} is not a valid stamina value. Must be between `0-15`.", + "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon PvP subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Raid subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Quest subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Team Rocket Invasion subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Gym subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Lure subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon notifications.", + "NOTIFY_NO_PVP_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon PvP notifications.", + "NOTIFY_PHONE_NUMBER_SET": "{{author}} Text message notifications for ultra rare Pokemon will be sent to {{number}}.", + "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{{distance}}**", + "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{{location_url}} meters", + "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", + "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{{status}}**", + "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{{style}}**", + "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{{number}}**", + "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {{iv}}% ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {{rank}} ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_TITLE": "**{{author}} Notification Settings (Page: {{page}}/{{pages}}):**", + "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** gym notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Team Rocket invasion notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** {{league}} League PvP Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** quest notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** raid boss notifications.", + "PVP_CP": "CP", + "PVP_GREAT_LEAGUE": "Great League", + "PVP_RANK": "Rank", + "PVP_ULTRA_LEAGUE": "Ultra League", + "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", + "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_NEWLINE": "----------------------------------------------", + "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", + "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", + "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_NEWLINE": "----------------------------------------------", + "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", + "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", + "HUNDO_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{count}}** total hundos out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", + "SUBSCRIPTIONS_FROM_CITY": " from city **{{city}}**", + "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Pokemon notifications.", + "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** {{league}} League PvP notifications.", + "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{lure}}** lure notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{lure}}** lure notifications{{cities}}.", + "TIME_DAYS": "days", + "TIME_HOURS": "hours", + "TIME_MINUTES": "minutes", + "TIME_SECONDS": "seconds", + "TIME_YEARS": "years", + "UNKNOWN_POKESTOP": "Unknown Pokestop", + "NORMAL": "Normal", + "UNKNOWN": "Unknown", + "EGG": "Egg", + "FULL": "Full", + "EMPTY": "Empty" +} \ No newline at end of file diff --git a/static/locales/_fr.json b/static/locales/_fr.json new file mode 100644 index 00000000..6c061466 --- /dev/null +++ b/static/locales/_fr.json @@ -0,0 +1,158 @@ +{ + "ALL_AREAS": "All Areas", + "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", + "CHANNEL_MESSAGES_DELETED": "{{author}} Channel {{channel}} messages have been deleted.", + "DIRECT_MESSAGE_NOT_SUPPORTED": "{{author}} Direct message is not supported for this command.", + "DONATE_MESSAGE": "{{author}} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", + "EMBED_DIRECTIONS": "DIRECTIONS", + "ERROR_NESTS_DISABLED": "{{author}} Nests disabled.", + "ERROR_NESTS_LIST": "{{author}} Unable to retrieve nest list.", + "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", + "ERROR_NO_INVASION_SUBSCRIPTIONS": "{{author}} is not subscribed to any Team Rocket invasion notifications{{cities}}.", + "ERROR_NO_QUEST_SUBSCRIPTIONS": "{{author}} is not subscribed to any quest notifications{{cities}}.", + "ERROR_NO_RAID_SUBSCRIPTIONS": "{{author}} is not subscribed to any raid notifications{{cities}}.", + "ERROR_NO_LURE_SUBSCRIPTIONS": "{{author}} is not subscribed to any lure notifications{{cities}}.", + "ERROR_PARSING_USER_ID": "{{author}} Unable to recognize user id {{id}}.", + "EVENT_POKEMON_ADD": "{{author}} event Pokemon added to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "EVENT_POKEMON_REMOVE": "{{author}} event Pokemon `{{pokemon}}` removed.", + "EVENT_POKEMON_SET": "{{author}} event Pokemon set to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} Unable to remove {{pokemon}} Pokemon subscriptions.", + "FEEDS_ASSIGNED_ALL_ROLES": "{{author}} was assigned all city feed roles: {{roles}}", + "FEEDS_ASSIGNED_ROLES": "{{author}} has joined role(s) **{{roles}}**.", + "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{{author}} is already assigned to role(s) **{{roles}}**.", + "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", + "FEEDS_INVALID_CITY_NAME": "{{author}} {{city}} is not a valid city name.", + "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{{author}} {{city}} is not a valid city name, type `{{prefix}}cities` to see a list of available cities.", + "FEEDS_PLEASE_WAIT": "{{author}} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", + "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{{prefix}}feedme cityname` to assign yourself to that city role.*", + "FEEDS_UNASSIGNED_ALL_ROLES": "{{author}} was unassigned all city feed roles: {{roles}}", + "FEEDS_UNASSIGNED_ROLES": "{{author}} has been removed from role(s) **{{roles}}**.", + "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{{author}} is not assigned to role(s) **{{roles}}**.", + "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({{location_url}})] [[Gym Image]({{image_url}})]", + "GYM_NAME": "- **{{name}}**", + "GYM_NO_POKESTOPS_CONVERTED": "{{author}} No Pokestops have been converted to Gyms.", + "GYM_NO_POKESTOPS_UPDATED": "{{author}} No Pokestops have been updated.", + "GYM_POKESTOPS_CONVERTED": "{{author}} {{amount}} Pokestops updated to Gyms.", + "GYM_POKESTOPS_DELETED": "{{author}} {{amount}} Pokestops deleted.", + "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", + "GYM_UNKNOWN_IMAGE": "Unknown Image Url", + "GYM_UNKNOWN_NAME": "Unknown Gym Name", + "MSG_INVALID_USER_MENTION": "{{author}} Failed to retrieve user with mention tag {{mention}}.", + "MSG_NOT_MODERATOR_OR_HIGHER": "{{author}} is not a moderator or higher thus you may not see other's subscription settings.", + "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{{0}} Subscriptions are not enabled in the config.", + "MSG_USER_NOT_SUBSCRIBED": "{{author}} is not currently subscribed to any Pokemon or Raid notifications.", + "NOTIFY_COMMON_TYPE_POKEMON": "{{author}} {{pokemon}} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {{min_iv}}% or higher.", + "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your {{league}} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_DISTANCE_SET": "{{author}} Notifications only within a {{distance}} kilometer radius of location {{latitude}},{{longitude}} will be sent.", + "NOTIFY_ENABLE_DISABLE": "{{author}} has **{{command}}d** Pokemon, PvP, Raid, Gym, Quest, Invasion, and Lure notifications.", + "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{{author}} does not have any subscriptions to export.", + "NOTIFY_EXPORT_SUCCESS": "{{author}} Download your subscription settings here.", + "NOTIFY_FROM": "{{line}} (From: {{cities}})", + "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{{author}} added gym subscription `{{gym}}` to your list of gyms to receive raid notifications from.", + "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{{author}} already subscribed to gym notifications from {{gym}}.", + "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{{author}} Removed gym subscription `{{gym}}` from your list of gyms to receive notifications from.", + "NOTIFY_ICON_STYLE_CHANGE": "{{author}} Icon style changed to **{{style}}**.", + "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{{author}} Unable to get uploaded attachment.", + "NOTIFY_IMPORT_MALFORMED_DATA": "{{author}} Malformed subscription data, unable to import.", + "NOTIFY_IMPORT_SUCCESS": "{{author}} subscriptions were imported successfully.", + "NOTIFY_IMPORT_UPLOAD_FILE": "{{author}} Please upload your subscriptions.json file to import now within 3 minutes...", + "NOTIFY_INVALID_ATTACK_VALUE": "{{author}} {{atk_iv}} is not a valid attack value. Must be between `0-15`.", + "NOTIFY_INVALID_CITY_ROLE": "{{author}} {{role}} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", + "NOTIFY_INVALID_COORDINATES": "{{author}} Unable not parse {{coordinates}} as valid coordinates.", + "NOTIFY_INVALID_DEFENSE_VALUE": "{{author}} {{def_iv}} is not a valid defense value. Must be between `0-15`.", + "NOTIFY_INVALID_GENDER": "{{author}} {{gender}} is not a valid gender. (i.e. `m`, `f`, `*`)", + "NOTIFY_INVALID_ICON_STYLE": "{{author}} invalid icon style, type `{{prefix}}icons` to see a list of valid options.", + "NOTIFY_INVALID_IV_RANGE": "{{author}} {{iv}} must be within the range of `0-100`.", + "NOTIFY_INVALID_IV_VALUES": "{{author}} {{iv}} is not a valid value. (Example: `0-15-6`)", + "NOTIFY_INVALID_LEVEL": "{{author}} {{level}} must be within the range of `0-35`.", + "NOTIFY_INVALID_MAXIMUM_LEVEL": "{{author}} Failed to parse maximum level provided '{{level}}'.", + "NOTIFY_INVALID_MINIMUM_IV": "{{author}} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", + "NOTIFY_INVALID_MINIMUM_LEVEL": "{{author}} Failed to parse minimum level provided '{{level}}'.", + "NOTIFY_INVALID_POKEMON_ID": "{{author}} {{pokemon}} is not a valid Pokemon id.", + "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{{author}} {{pokemon}} are not valid Pokemon names or IDs.", + "NOTIFY_INVALID_POKEMON_SPECIFIED": "{{author}} Unable to recognize any of the Pokemon you specified.", + "NOTIFY_INVALID_PVP_LEAGUE": "{{author}} {{league}} is not a valid PvP league. (Great or Ultra)", + "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{{author}} {{percent}} must be within the range of `0-100`.", + "NOTIFY_INVALID_PVP_RANK_RANGE": "{{author}} {{rank}} must be within the range of `0-4096`.", + "NOTIFY_INVALID_STAMINA_VALUE": "{{author}} {{sta_iv}} is not a valid stamina value. Must be between `0-15`.", + "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon PvP subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Raid subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Quest subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Team Rocket Invasion subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Gym subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Lure subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon notifications.", + "NOTIFY_NO_PVP_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon PvP notifications.", + "NOTIFY_PHONE_NUMBER_SET": "{{author}} Text message notifications for ultra rare Pokemon will be sent to {{number}}.", + "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{{distance}}**", + "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{{location_url}} meters", + "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", + "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{{status}}**", + "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{{style}}**", + "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{{number}}**", + "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {{iv}}% ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {{rank}} ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_TITLE": "**{{author}} Notification Settings (Page: {{page}}/{{pages}}):**", + "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** gym notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Team Rocket invasion notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** {{league}} League PvP Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** quest notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** raid boss notifications.", + "PVP_CP": "CP", + "PVP_GREAT_LEAGUE": "Great League", + "PVP_RANK": "Rank", + "PVP_ULTRA_LEAGUE": "Ultra League", + "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", + "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_NEWLINE": "----------------------------------------------", + "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", + "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", + "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_NEWLINE": "----------------------------------------------", + "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", + "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", + "HUNDO_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{count}}** total hundos out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", + "SUBSCRIPTIONS_FROM_CITY": " from city **{{city}}**", + "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Pokemon notifications.", + "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** {{league}} League PvP notifications.", + "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{lure}}** lure notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{lure}}** lure notifications{{cities}}.", + "TIME_DAYS": "days", + "TIME_HOURS": "hours", + "TIME_MINUTES": "minutes", + "TIME_SECONDS": "seconds", + "TIME_YEARS": "years", + "UNKNOWN_POKESTOP": "Unknown Pokestop", + "NORMAL": "Normal", + "UNKNOWN": "Unknown", + "EGG": "Egg", + "FULL": "Full", + "EMPTY": "Empty" +} \ No newline at end of file diff --git a/static/locales/_it.json b/static/locales/_it.json new file mode 100644 index 00000000..6c061466 --- /dev/null +++ b/static/locales/_it.json @@ -0,0 +1,158 @@ +{ + "ALL_AREAS": "All Areas", + "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", + "CHANNEL_MESSAGES_DELETED": "{{author}} Channel {{channel}} messages have been deleted.", + "DIRECT_MESSAGE_NOT_SUPPORTED": "{{author}} Direct message is not supported for this command.", + "DONATE_MESSAGE": "{{author}} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", + "EMBED_DIRECTIONS": "DIRECTIONS", + "ERROR_NESTS_DISABLED": "{{author}} Nests disabled.", + "ERROR_NESTS_LIST": "{{author}} Unable to retrieve nest list.", + "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", + "ERROR_NO_INVASION_SUBSCRIPTIONS": "{{author}} is not subscribed to any Team Rocket invasion notifications{{cities}}.", + "ERROR_NO_QUEST_SUBSCRIPTIONS": "{{author}} is not subscribed to any quest notifications{{cities}}.", + "ERROR_NO_RAID_SUBSCRIPTIONS": "{{author}} is not subscribed to any raid notifications{{cities}}.", + "ERROR_NO_LURE_SUBSCRIPTIONS": "{{author}} is not subscribed to any lure notifications{{cities}}.", + "ERROR_PARSING_USER_ID": "{{author}} Unable to recognize user id {{id}}.", + "EVENT_POKEMON_ADD": "{{author}} event Pokemon added to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "EVENT_POKEMON_REMOVE": "{{author}} event Pokemon `{{pokemon}}` removed.", + "EVENT_POKEMON_SET": "{{author}} event Pokemon set to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} Unable to remove {{pokemon}} Pokemon subscriptions.", + "FEEDS_ASSIGNED_ALL_ROLES": "{{author}} was assigned all city feed roles: {{roles}}", + "FEEDS_ASSIGNED_ROLES": "{{author}} has joined role(s) **{{roles}}**.", + "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{{author}} is already assigned to role(s) **{{roles}}**.", + "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", + "FEEDS_INVALID_CITY_NAME": "{{author}} {{city}} is not a valid city name.", + "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{{author}} {{city}} is not a valid city name, type `{{prefix}}cities` to see a list of available cities.", + "FEEDS_PLEASE_WAIT": "{{author}} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", + "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{{prefix}}feedme cityname` to assign yourself to that city role.*", + "FEEDS_UNASSIGNED_ALL_ROLES": "{{author}} was unassigned all city feed roles: {{roles}}", + "FEEDS_UNASSIGNED_ROLES": "{{author}} has been removed from role(s) **{{roles}}**.", + "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{{author}} is not assigned to role(s) **{{roles}}**.", + "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({{location_url}})] [[Gym Image]({{image_url}})]", + "GYM_NAME": "- **{{name}}**", + "GYM_NO_POKESTOPS_CONVERTED": "{{author}} No Pokestops have been converted to Gyms.", + "GYM_NO_POKESTOPS_UPDATED": "{{author}} No Pokestops have been updated.", + "GYM_POKESTOPS_CONVERTED": "{{author}} {{amount}} Pokestops updated to Gyms.", + "GYM_POKESTOPS_DELETED": "{{author}} {{amount}} Pokestops deleted.", + "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", + "GYM_UNKNOWN_IMAGE": "Unknown Image Url", + "GYM_UNKNOWN_NAME": "Unknown Gym Name", + "MSG_INVALID_USER_MENTION": "{{author}} Failed to retrieve user with mention tag {{mention}}.", + "MSG_NOT_MODERATOR_OR_HIGHER": "{{author}} is not a moderator or higher thus you may not see other's subscription settings.", + "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{{0}} Subscriptions are not enabled in the config.", + "MSG_USER_NOT_SUBSCRIBED": "{{author}} is not currently subscribed to any Pokemon or Raid notifications.", + "NOTIFY_COMMON_TYPE_POKEMON": "{{author}} {{pokemon}} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {{min_iv}}% or higher.", + "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your {{league}} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_DISTANCE_SET": "{{author}} Notifications only within a {{distance}} kilometer radius of location {{latitude}},{{longitude}} will be sent.", + "NOTIFY_ENABLE_DISABLE": "{{author}} has **{{command}}d** Pokemon, PvP, Raid, Gym, Quest, Invasion, and Lure notifications.", + "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{{author}} does not have any subscriptions to export.", + "NOTIFY_EXPORT_SUCCESS": "{{author}} Download your subscription settings here.", + "NOTIFY_FROM": "{{line}} (From: {{cities}})", + "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{{author}} added gym subscription `{{gym}}` to your list of gyms to receive raid notifications from.", + "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{{author}} already subscribed to gym notifications from {{gym}}.", + "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{{author}} Removed gym subscription `{{gym}}` from your list of gyms to receive notifications from.", + "NOTIFY_ICON_STYLE_CHANGE": "{{author}} Icon style changed to **{{style}}**.", + "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{{author}} Unable to get uploaded attachment.", + "NOTIFY_IMPORT_MALFORMED_DATA": "{{author}} Malformed subscription data, unable to import.", + "NOTIFY_IMPORT_SUCCESS": "{{author}} subscriptions were imported successfully.", + "NOTIFY_IMPORT_UPLOAD_FILE": "{{author}} Please upload your subscriptions.json file to import now within 3 minutes...", + "NOTIFY_INVALID_ATTACK_VALUE": "{{author}} {{atk_iv}} is not a valid attack value. Must be between `0-15`.", + "NOTIFY_INVALID_CITY_ROLE": "{{author}} {{role}} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", + "NOTIFY_INVALID_COORDINATES": "{{author}} Unable not parse {{coordinates}} as valid coordinates.", + "NOTIFY_INVALID_DEFENSE_VALUE": "{{author}} {{def_iv}} is not a valid defense value. Must be between `0-15`.", + "NOTIFY_INVALID_GENDER": "{{author}} {{gender}} is not a valid gender. (i.e. `m`, `f`, `*`)", + "NOTIFY_INVALID_ICON_STYLE": "{{author}} invalid icon style, type `{{prefix}}icons` to see a list of valid options.", + "NOTIFY_INVALID_IV_RANGE": "{{author}} {{iv}} must be within the range of `0-100`.", + "NOTIFY_INVALID_IV_VALUES": "{{author}} {{iv}} is not a valid value. (Example: `0-15-6`)", + "NOTIFY_INVALID_LEVEL": "{{author}} {{level}} must be within the range of `0-35`.", + "NOTIFY_INVALID_MAXIMUM_LEVEL": "{{author}} Failed to parse maximum level provided '{{level}}'.", + "NOTIFY_INVALID_MINIMUM_IV": "{{author}} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", + "NOTIFY_INVALID_MINIMUM_LEVEL": "{{author}} Failed to parse minimum level provided '{{level}}'.", + "NOTIFY_INVALID_POKEMON_ID": "{{author}} {{pokemon}} is not a valid Pokemon id.", + "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{{author}} {{pokemon}} are not valid Pokemon names or IDs.", + "NOTIFY_INVALID_POKEMON_SPECIFIED": "{{author}} Unable to recognize any of the Pokemon you specified.", + "NOTIFY_INVALID_PVP_LEAGUE": "{{author}} {{league}} is not a valid PvP league. (Great or Ultra)", + "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{{author}} {{percent}} must be within the range of `0-100`.", + "NOTIFY_INVALID_PVP_RANK_RANGE": "{{author}} {{rank}} must be within the range of `0-4096`.", + "NOTIFY_INVALID_STAMINA_VALUE": "{{author}} {{sta_iv}} is not a valid stamina value. Must be between `0-15`.", + "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon PvP subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Raid subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Quest subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Team Rocket Invasion subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Gym subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Lure subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon notifications.", + "NOTIFY_NO_PVP_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon PvP notifications.", + "NOTIFY_PHONE_NUMBER_SET": "{{author}} Text message notifications for ultra rare Pokemon will be sent to {{number}}.", + "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{{distance}}**", + "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{{location_url}} meters", + "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", + "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{{status}}**", + "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{{style}}**", + "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{{number}}**", + "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {{iv}}% ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {{rank}} ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_TITLE": "**{{author}} Notification Settings (Page: {{page}}/{{pages}}):**", + "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** gym notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Team Rocket invasion notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** {{league}} League PvP Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** quest notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** raid boss notifications.", + "PVP_CP": "CP", + "PVP_GREAT_LEAGUE": "Great League", + "PVP_RANK": "Rank", + "PVP_ULTRA_LEAGUE": "Ultra League", + "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", + "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_NEWLINE": "----------------------------------------------", + "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", + "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", + "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_NEWLINE": "----------------------------------------------", + "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", + "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", + "HUNDO_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{count}}** total hundos out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", + "SUBSCRIPTIONS_FROM_CITY": " from city **{{city}}**", + "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Pokemon notifications.", + "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** {{league}} League PvP notifications.", + "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{lure}}** lure notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{lure}}** lure notifications{{cities}}.", + "TIME_DAYS": "days", + "TIME_HOURS": "hours", + "TIME_MINUTES": "minutes", + "TIME_SECONDS": "seconds", + "TIME_YEARS": "years", + "UNKNOWN_POKESTOP": "Unknown Pokestop", + "NORMAL": "Normal", + "UNKNOWN": "Unknown", + "EGG": "Egg", + "FULL": "Full", + "EMPTY": "Empty" +} \ No newline at end of file diff --git a/static/locales/_ja.json b/static/locales/_ja.json new file mode 100644 index 00000000..6c061466 --- /dev/null +++ b/static/locales/_ja.json @@ -0,0 +1,158 @@ +{ + "ALL_AREAS": "All Areas", + "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", + "CHANNEL_MESSAGES_DELETED": "{{author}} Channel {{channel}} messages have been deleted.", + "DIRECT_MESSAGE_NOT_SUPPORTED": "{{author}} Direct message is not supported for this command.", + "DONATE_MESSAGE": "{{author}} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", + "EMBED_DIRECTIONS": "DIRECTIONS", + "ERROR_NESTS_DISABLED": "{{author}} Nests disabled.", + "ERROR_NESTS_LIST": "{{author}} Unable to retrieve nest list.", + "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", + "ERROR_NO_INVASION_SUBSCRIPTIONS": "{{author}} is not subscribed to any Team Rocket invasion notifications{{cities}}.", + "ERROR_NO_QUEST_SUBSCRIPTIONS": "{{author}} is not subscribed to any quest notifications{{cities}}.", + "ERROR_NO_RAID_SUBSCRIPTIONS": "{{author}} is not subscribed to any raid notifications{{cities}}.", + "ERROR_NO_LURE_SUBSCRIPTIONS": "{{author}} is not subscribed to any lure notifications{{cities}}.", + "ERROR_PARSING_USER_ID": "{{author}} Unable to recognize user id {{id}}.", + "EVENT_POKEMON_ADD": "{{author}} event Pokemon added to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "EVENT_POKEMON_REMOVE": "{{author}} event Pokemon `{{pokemon}}` removed.", + "EVENT_POKEMON_SET": "{{author}} event Pokemon set to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} Unable to remove {{pokemon}} Pokemon subscriptions.", + "FEEDS_ASSIGNED_ALL_ROLES": "{{author}} was assigned all city feed roles: {{roles}}", + "FEEDS_ASSIGNED_ROLES": "{{author}} has joined role(s) **{{roles}}**.", + "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{{author}} is already assigned to role(s) **{{roles}}**.", + "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", + "FEEDS_INVALID_CITY_NAME": "{{author}} {{city}} is not a valid city name.", + "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{{author}} {{city}} is not a valid city name, type `{{prefix}}cities` to see a list of available cities.", + "FEEDS_PLEASE_WAIT": "{{author}} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", + "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{{prefix}}feedme cityname` to assign yourself to that city role.*", + "FEEDS_UNASSIGNED_ALL_ROLES": "{{author}} was unassigned all city feed roles: {{roles}}", + "FEEDS_UNASSIGNED_ROLES": "{{author}} has been removed from role(s) **{{roles}}**.", + "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{{author}} is not assigned to role(s) **{{roles}}**.", + "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({{location_url}})] [[Gym Image]({{image_url}})]", + "GYM_NAME": "- **{{name}}**", + "GYM_NO_POKESTOPS_CONVERTED": "{{author}} No Pokestops have been converted to Gyms.", + "GYM_NO_POKESTOPS_UPDATED": "{{author}} No Pokestops have been updated.", + "GYM_POKESTOPS_CONVERTED": "{{author}} {{amount}} Pokestops updated to Gyms.", + "GYM_POKESTOPS_DELETED": "{{author}} {{amount}} Pokestops deleted.", + "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", + "GYM_UNKNOWN_IMAGE": "Unknown Image Url", + "GYM_UNKNOWN_NAME": "Unknown Gym Name", + "MSG_INVALID_USER_MENTION": "{{author}} Failed to retrieve user with mention tag {{mention}}.", + "MSG_NOT_MODERATOR_OR_HIGHER": "{{author}} is not a moderator or higher thus you may not see other's subscription settings.", + "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{{0}} Subscriptions are not enabled in the config.", + "MSG_USER_NOT_SUBSCRIBED": "{{author}} is not currently subscribed to any Pokemon or Raid notifications.", + "NOTIFY_COMMON_TYPE_POKEMON": "{{author}} {{pokemon}} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {{min_iv}}% or higher.", + "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your {{league}} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_DISTANCE_SET": "{{author}} Notifications only within a {{distance}} kilometer radius of location {{latitude}},{{longitude}} will be sent.", + "NOTIFY_ENABLE_DISABLE": "{{author}} has **{{command}}d** Pokemon, PvP, Raid, Gym, Quest, Invasion, and Lure notifications.", + "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{{author}} does not have any subscriptions to export.", + "NOTIFY_EXPORT_SUCCESS": "{{author}} Download your subscription settings here.", + "NOTIFY_FROM": "{{line}} (From: {{cities}})", + "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{{author}} added gym subscription `{{gym}}` to your list of gyms to receive raid notifications from.", + "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{{author}} already subscribed to gym notifications from {{gym}}.", + "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{{author}} Removed gym subscription `{{gym}}` from your list of gyms to receive notifications from.", + "NOTIFY_ICON_STYLE_CHANGE": "{{author}} Icon style changed to **{{style}}**.", + "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{{author}} Unable to get uploaded attachment.", + "NOTIFY_IMPORT_MALFORMED_DATA": "{{author}} Malformed subscription data, unable to import.", + "NOTIFY_IMPORT_SUCCESS": "{{author}} subscriptions were imported successfully.", + "NOTIFY_IMPORT_UPLOAD_FILE": "{{author}} Please upload your subscriptions.json file to import now within 3 minutes...", + "NOTIFY_INVALID_ATTACK_VALUE": "{{author}} {{atk_iv}} is not a valid attack value. Must be between `0-15`.", + "NOTIFY_INVALID_CITY_ROLE": "{{author}} {{role}} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", + "NOTIFY_INVALID_COORDINATES": "{{author}} Unable not parse {{coordinates}} as valid coordinates.", + "NOTIFY_INVALID_DEFENSE_VALUE": "{{author}} {{def_iv}} is not a valid defense value. Must be between `0-15`.", + "NOTIFY_INVALID_GENDER": "{{author}} {{gender}} is not a valid gender. (i.e. `m`, `f`, `*`)", + "NOTIFY_INVALID_ICON_STYLE": "{{author}} invalid icon style, type `{{prefix}}icons` to see a list of valid options.", + "NOTIFY_INVALID_IV_RANGE": "{{author}} {{iv}} must be within the range of `0-100`.", + "NOTIFY_INVALID_IV_VALUES": "{{author}} {{iv}} is not a valid value. (Example: `0-15-6`)", + "NOTIFY_INVALID_LEVEL": "{{author}} {{level}} must be within the range of `0-35`.", + "NOTIFY_INVALID_MAXIMUM_LEVEL": "{{author}} Failed to parse maximum level provided '{{level}}'.", + "NOTIFY_INVALID_MINIMUM_IV": "{{author}} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", + "NOTIFY_INVALID_MINIMUM_LEVEL": "{{author}} Failed to parse minimum level provided '{{level}}'.", + "NOTIFY_INVALID_POKEMON_ID": "{{author}} {{pokemon}} is not a valid Pokemon id.", + "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{{author}} {{pokemon}} are not valid Pokemon names or IDs.", + "NOTIFY_INVALID_POKEMON_SPECIFIED": "{{author}} Unable to recognize any of the Pokemon you specified.", + "NOTIFY_INVALID_PVP_LEAGUE": "{{author}} {{league}} is not a valid PvP league. (Great or Ultra)", + "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{{author}} {{percent}} must be within the range of `0-100`.", + "NOTIFY_INVALID_PVP_RANK_RANGE": "{{author}} {{rank}} must be within the range of `0-4096`.", + "NOTIFY_INVALID_STAMINA_VALUE": "{{author}} {{sta_iv}} is not a valid stamina value. Must be between `0-15`.", + "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon PvP subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Raid subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Quest subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Team Rocket Invasion subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Gym subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Lure subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon notifications.", + "NOTIFY_NO_PVP_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon PvP notifications.", + "NOTIFY_PHONE_NUMBER_SET": "{{author}} Text message notifications for ultra rare Pokemon will be sent to {{number}}.", + "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{{distance}}**", + "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{{location_url}} meters", + "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", + "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{{status}}**", + "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{{style}}**", + "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{{number}}**", + "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {{iv}}% ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {{rank}} ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_TITLE": "**{{author}} Notification Settings (Page: {{page}}/{{pages}}):**", + "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** gym notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Team Rocket invasion notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** {{league}} League PvP Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** quest notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** raid boss notifications.", + "PVP_CP": "CP", + "PVP_GREAT_LEAGUE": "Great League", + "PVP_RANK": "Rank", + "PVP_ULTRA_LEAGUE": "Ultra League", + "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", + "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_NEWLINE": "----------------------------------------------", + "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", + "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", + "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_NEWLINE": "----------------------------------------------", + "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", + "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", + "HUNDO_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{count}}** total hundos out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", + "SUBSCRIPTIONS_FROM_CITY": " from city **{{city}}**", + "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Pokemon notifications.", + "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** {{league}} League PvP notifications.", + "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{lure}}** lure notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{lure}}** lure notifications{{cities}}.", + "TIME_DAYS": "days", + "TIME_HOURS": "hours", + "TIME_MINUTES": "minutes", + "TIME_SECONDS": "seconds", + "TIME_YEARS": "years", + "UNKNOWN_POKESTOP": "Unknown Pokestop", + "NORMAL": "Normal", + "UNKNOWN": "Unknown", + "EGG": "Egg", + "FULL": "Full", + "EMPTY": "Empty" +} \ No newline at end of file diff --git a/static/locales/_ko.json b/static/locales/_ko.json new file mode 100644 index 00000000..6c061466 --- /dev/null +++ b/static/locales/_ko.json @@ -0,0 +1,158 @@ +{ + "ALL_AREAS": "All Areas", + "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", + "CHANNEL_MESSAGES_DELETED": "{{author}} Channel {{channel}} messages have been deleted.", + "DIRECT_MESSAGE_NOT_SUPPORTED": "{{author}} Direct message is not supported for this command.", + "DONATE_MESSAGE": "{{author}} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", + "EMBED_DIRECTIONS": "DIRECTIONS", + "ERROR_NESTS_DISABLED": "{{author}} Nests disabled.", + "ERROR_NESTS_LIST": "{{author}} Unable to retrieve nest list.", + "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", + "ERROR_NO_INVASION_SUBSCRIPTIONS": "{{author}} is not subscribed to any Team Rocket invasion notifications{{cities}}.", + "ERROR_NO_QUEST_SUBSCRIPTIONS": "{{author}} is not subscribed to any quest notifications{{cities}}.", + "ERROR_NO_RAID_SUBSCRIPTIONS": "{{author}} is not subscribed to any raid notifications{{cities}}.", + "ERROR_NO_LURE_SUBSCRIPTIONS": "{{author}} is not subscribed to any lure notifications{{cities}}.", + "ERROR_PARSING_USER_ID": "{{author}} Unable to recognize user id {{id}}.", + "EVENT_POKEMON_ADD": "{{author}} event Pokemon added to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "EVENT_POKEMON_REMOVE": "{{author}} event Pokemon `{{pokemon}}` removed.", + "EVENT_POKEMON_SET": "{{author}} event Pokemon set to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} Unable to remove {{pokemon}} Pokemon subscriptions.", + "FEEDS_ASSIGNED_ALL_ROLES": "{{author}} was assigned all city feed roles: {{roles}}", + "FEEDS_ASSIGNED_ROLES": "{{author}} has joined role(s) **{{roles}}**.", + "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{{author}} is already assigned to role(s) **{{roles}}**.", + "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", + "FEEDS_INVALID_CITY_NAME": "{{author}} {{city}} is not a valid city name.", + "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{{author}} {{city}} is not a valid city name, type `{{prefix}}cities` to see a list of available cities.", + "FEEDS_PLEASE_WAIT": "{{author}} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", + "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{{prefix}}feedme cityname` to assign yourself to that city role.*", + "FEEDS_UNASSIGNED_ALL_ROLES": "{{author}} was unassigned all city feed roles: {{roles}}", + "FEEDS_UNASSIGNED_ROLES": "{{author}} has been removed from role(s) **{{roles}}**.", + "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{{author}} is not assigned to role(s) **{{roles}}**.", + "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({{location_url}})] [[Gym Image]({{image_url}})]", + "GYM_NAME": "- **{{name}}**", + "GYM_NO_POKESTOPS_CONVERTED": "{{author}} No Pokestops have been converted to Gyms.", + "GYM_NO_POKESTOPS_UPDATED": "{{author}} No Pokestops have been updated.", + "GYM_POKESTOPS_CONVERTED": "{{author}} {{amount}} Pokestops updated to Gyms.", + "GYM_POKESTOPS_DELETED": "{{author}} {{amount}} Pokestops deleted.", + "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", + "GYM_UNKNOWN_IMAGE": "Unknown Image Url", + "GYM_UNKNOWN_NAME": "Unknown Gym Name", + "MSG_INVALID_USER_MENTION": "{{author}} Failed to retrieve user with mention tag {{mention}}.", + "MSG_NOT_MODERATOR_OR_HIGHER": "{{author}} is not a moderator or higher thus you may not see other's subscription settings.", + "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{{0}} Subscriptions are not enabled in the config.", + "MSG_USER_NOT_SUBSCRIBED": "{{author}} is not currently subscribed to any Pokemon or Raid notifications.", + "NOTIFY_COMMON_TYPE_POKEMON": "{{author}} {{pokemon}} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {{min_iv}}% or higher.", + "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your {{league}} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_DISTANCE_SET": "{{author}} Notifications only within a {{distance}} kilometer radius of location {{latitude}},{{longitude}} will be sent.", + "NOTIFY_ENABLE_DISABLE": "{{author}} has **{{command}}d** Pokemon, PvP, Raid, Gym, Quest, Invasion, and Lure notifications.", + "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{{author}} does not have any subscriptions to export.", + "NOTIFY_EXPORT_SUCCESS": "{{author}} Download your subscription settings here.", + "NOTIFY_FROM": "{{line}} (From: {{cities}})", + "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{{author}} added gym subscription `{{gym}}` to your list of gyms to receive raid notifications from.", + "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{{author}} already subscribed to gym notifications from {{gym}}.", + "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{{author}} Removed gym subscription `{{gym}}` from your list of gyms to receive notifications from.", + "NOTIFY_ICON_STYLE_CHANGE": "{{author}} Icon style changed to **{{style}}**.", + "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{{author}} Unable to get uploaded attachment.", + "NOTIFY_IMPORT_MALFORMED_DATA": "{{author}} Malformed subscription data, unable to import.", + "NOTIFY_IMPORT_SUCCESS": "{{author}} subscriptions were imported successfully.", + "NOTIFY_IMPORT_UPLOAD_FILE": "{{author}} Please upload your subscriptions.json file to import now within 3 minutes...", + "NOTIFY_INVALID_ATTACK_VALUE": "{{author}} {{atk_iv}} is not a valid attack value. Must be between `0-15`.", + "NOTIFY_INVALID_CITY_ROLE": "{{author}} {{role}} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", + "NOTIFY_INVALID_COORDINATES": "{{author}} Unable not parse {{coordinates}} as valid coordinates.", + "NOTIFY_INVALID_DEFENSE_VALUE": "{{author}} {{def_iv}} is not a valid defense value. Must be between `0-15`.", + "NOTIFY_INVALID_GENDER": "{{author}} {{gender}} is not a valid gender. (i.e. `m`, `f`, `*`)", + "NOTIFY_INVALID_ICON_STYLE": "{{author}} invalid icon style, type `{{prefix}}icons` to see a list of valid options.", + "NOTIFY_INVALID_IV_RANGE": "{{author}} {{iv}} must be within the range of `0-100`.", + "NOTIFY_INVALID_IV_VALUES": "{{author}} {{iv}} is not a valid value. (Example: `0-15-6`)", + "NOTIFY_INVALID_LEVEL": "{{author}} {{level}} must be within the range of `0-35`.", + "NOTIFY_INVALID_MAXIMUM_LEVEL": "{{author}} Failed to parse maximum level provided '{{level}}'.", + "NOTIFY_INVALID_MINIMUM_IV": "{{author}} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", + "NOTIFY_INVALID_MINIMUM_LEVEL": "{{author}} Failed to parse minimum level provided '{{level}}'.", + "NOTIFY_INVALID_POKEMON_ID": "{{author}} {{pokemon}} is not a valid Pokemon id.", + "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{{author}} {{pokemon}} are not valid Pokemon names or IDs.", + "NOTIFY_INVALID_POKEMON_SPECIFIED": "{{author}} Unable to recognize any of the Pokemon you specified.", + "NOTIFY_INVALID_PVP_LEAGUE": "{{author}} {{league}} is not a valid PvP league. (Great or Ultra)", + "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{{author}} {{percent}} must be within the range of `0-100`.", + "NOTIFY_INVALID_PVP_RANK_RANGE": "{{author}} {{rank}} must be within the range of `0-4096`.", + "NOTIFY_INVALID_STAMINA_VALUE": "{{author}} {{sta_iv}} is not a valid stamina value. Must be between `0-15`.", + "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon PvP subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Raid subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Quest subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Team Rocket Invasion subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Gym subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Lure subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon notifications.", + "NOTIFY_NO_PVP_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon PvP notifications.", + "NOTIFY_PHONE_NUMBER_SET": "{{author}} Text message notifications for ultra rare Pokemon will be sent to {{number}}.", + "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{{distance}}**", + "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{{location_url}} meters", + "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", + "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{{status}}**", + "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{{style}}**", + "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{{number}}**", + "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {{iv}}% ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {{rank}} ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_TITLE": "**{{author}} Notification Settings (Page: {{page}}/{{pages}}):**", + "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** gym notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Team Rocket invasion notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** {{league}} League PvP Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** quest notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** raid boss notifications.", + "PVP_CP": "CP", + "PVP_GREAT_LEAGUE": "Great League", + "PVP_RANK": "Rank", + "PVP_ULTRA_LEAGUE": "Ultra League", + "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", + "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_NEWLINE": "----------------------------------------------", + "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", + "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", + "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_NEWLINE": "----------------------------------------------", + "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", + "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", + "HUNDO_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{count}}** total hundos out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", + "SUBSCRIPTIONS_FROM_CITY": " from city **{{city}}**", + "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Pokemon notifications.", + "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** {{league}} League PvP notifications.", + "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{lure}}** lure notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{lure}}** lure notifications{{cities}}.", + "TIME_DAYS": "days", + "TIME_HOURS": "hours", + "TIME_MINUTES": "minutes", + "TIME_SECONDS": "seconds", + "TIME_YEARS": "years", + "UNKNOWN_POKESTOP": "Unknown Pokestop", + "NORMAL": "Normal", + "UNKNOWN": "Unknown", + "EGG": "Egg", + "FULL": "Full", + "EMPTY": "Empty" +} \ No newline at end of file diff --git a/static/locales/_pt-br.json b/static/locales/_pt-br.json new file mode 100644 index 00000000..6c061466 --- /dev/null +++ b/static/locales/_pt-br.json @@ -0,0 +1,158 @@ +{ + "ALL_AREAS": "All Areas", + "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", + "CHANNEL_MESSAGES_DELETED": "{{author}} Channel {{channel}} messages have been deleted.", + "DIRECT_MESSAGE_NOT_SUPPORTED": "{{author}} Direct message is not supported for this command.", + "DONATE_MESSAGE": "{{author}} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", + "EMBED_DIRECTIONS": "DIRECTIONS", + "ERROR_NESTS_DISABLED": "{{author}} Nests disabled.", + "ERROR_NESTS_LIST": "{{author}} Unable to retrieve nest list.", + "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", + "ERROR_NO_INVASION_SUBSCRIPTIONS": "{{author}} is not subscribed to any Team Rocket invasion notifications{{cities}}.", + "ERROR_NO_QUEST_SUBSCRIPTIONS": "{{author}} is not subscribed to any quest notifications{{cities}}.", + "ERROR_NO_RAID_SUBSCRIPTIONS": "{{author}} is not subscribed to any raid notifications{{cities}}.", + "ERROR_NO_LURE_SUBSCRIPTIONS": "{{author}} is not subscribed to any lure notifications{{cities}}.", + "ERROR_PARSING_USER_ID": "{{author}} Unable to recognize user id {{id}}.", + "EVENT_POKEMON_ADD": "{{author}} event Pokemon added to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "EVENT_POKEMON_REMOVE": "{{author}} event Pokemon `{{pokemon}}` removed.", + "EVENT_POKEMON_SET": "{{author}} event Pokemon set to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} Unable to remove {{pokemon}} Pokemon subscriptions.", + "FEEDS_ASSIGNED_ALL_ROLES": "{{author}} was assigned all city feed roles: {{roles}}", + "FEEDS_ASSIGNED_ROLES": "{{author}} has joined role(s) **{{roles}}**.", + "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{{author}} is already assigned to role(s) **{{roles}}**.", + "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", + "FEEDS_INVALID_CITY_NAME": "{{author}} {{city}} is not a valid city name.", + "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{{author}} {{city}} is not a valid city name, type `{{prefix}}cities` to see a list of available cities.", + "FEEDS_PLEASE_WAIT": "{{author}} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", + "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{{prefix}}feedme cityname` to assign yourself to that city role.*", + "FEEDS_UNASSIGNED_ALL_ROLES": "{{author}} was unassigned all city feed roles: {{roles}}", + "FEEDS_UNASSIGNED_ROLES": "{{author}} has been removed from role(s) **{{roles}}**.", + "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{{author}} is not assigned to role(s) **{{roles}}**.", + "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({{location_url}})] [[Gym Image]({{image_url}})]", + "GYM_NAME": "- **{{name}}**", + "GYM_NO_POKESTOPS_CONVERTED": "{{author}} No Pokestops have been converted to Gyms.", + "GYM_NO_POKESTOPS_UPDATED": "{{author}} No Pokestops have been updated.", + "GYM_POKESTOPS_CONVERTED": "{{author}} {{amount}} Pokestops updated to Gyms.", + "GYM_POKESTOPS_DELETED": "{{author}} {{amount}} Pokestops deleted.", + "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", + "GYM_UNKNOWN_IMAGE": "Unknown Image Url", + "GYM_UNKNOWN_NAME": "Unknown Gym Name", + "MSG_INVALID_USER_MENTION": "{{author}} Failed to retrieve user with mention tag {{mention}}.", + "MSG_NOT_MODERATOR_OR_HIGHER": "{{author}} is not a moderator or higher thus you may not see other's subscription settings.", + "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{{0}} Subscriptions are not enabled in the config.", + "MSG_USER_NOT_SUBSCRIBED": "{{author}} is not currently subscribed to any Pokemon or Raid notifications.", + "NOTIFY_COMMON_TYPE_POKEMON": "{{author}} {{pokemon}} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {{min_iv}}% or higher.", + "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your {{league}} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_DISTANCE_SET": "{{author}} Notifications only within a {{distance}} kilometer radius of location {{latitude}},{{longitude}} will be sent.", + "NOTIFY_ENABLE_DISABLE": "{{author}} has **{{command}}d** Pokemon, PvP, Raid, Gym, Quest, Invasion, and Lure notifications.", + "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{{author}} does not have any subscriptions to export.", + "NOTIFY_EXPORT_SUCCESS": "{{author}} Download your subscription settings here.", + "NOTIFY_FROM": "{{line}} (From: {{cities}})", + "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{{author}} added gym subscription `{{gym}}` to your list of gyms to receive raid notifications from.", + "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{{author}} already subscribed to gym notifications from {{gym}}.", + "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{{author}} Removed gym subscription `{{gym}}` from your list of gyms to receive notifications from.", + "NOTIFY_ICON_STYLE_CHANGE": "{{author}} Icon style changed to **{{style}}**.", + "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{{author}} Unable to get uploaded attachment.", + "NOTIFY_IMPORT_MALFORMED_DATA": "{{author}} Malformed subscription data, unable to import.", + "NOTIFY_IMPORT_SUCCESS": "{{author}} subscriptions were imported successfully.", + "NOTIFY_IMPORT_UPLOAD_FILE": "{{author}} Please upload your subscriptions.json file to import now within 3 minutes...", + "NOTIFY_INVALID_ATTACK_VALUE": "{{author}} {{atk_iv}} is not a valid attack value. Must be between `0-15`.", + "NOTIFY_INVALID_CITY_ROLE": "{{author}} {{role}} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", + "NOTIFY_INVALID_COORDINATES": "{{author}} Unable not parse {{coordinates}} as valid coordinates.", + "NOTIFY_INVALID_DEFENSE_VALUE": "{{author}} {{def_iv}} is not a valid defense value. Must be between `0-15`.", + "NOTIFY_INVALID_GENDER": "{{author}} {{gender}} is not a valid gender. (i.e. `m`, `f`, `*`)", + "NOTIFY_INVALID_ICON_STYLE": "{{author}} invalid icon style, type `{{prefix}}icons` to see a list of valid options.", + "NOTIFY_INVALID_IV_RANGE": "{{author}} {{iv}} must be within the range of `0-100`.", + "NOTIFY_INVALID_IV_VALUES": "{{author}} {{iv}} is not a valid value. (Example: `0-15-6`)", + "NOTIFY_INVALID_LEVEL": "{{author}} {{level}} must be within the range of `0-35`.", + "NOTIFY_INVALID_MAXIMUM_LEVEL": "{{author}} Failed to parse maximum level provided '{{level}}'.", + "NOTIFY_INVALID_MINIMUM_IV": "{{author}} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", + "NOTIFY_INVALID_MINIMUM_LEVEL": "{{author}} Failed to parse minimum level provided '{{level}}'.", + "NOTIFY_INVALID_POKEMON_ID": "{{author}} {{pokemon}} is not a valid Pokemon id.", + "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{{author}} {{pokemon}} are not valid Pokemon names or IDs.", + "NOTIFY_INVALID_POKEMON_SPECIFIED": "{{author}} Unable to recognize any of the Pokemon you specified.", + "NOTIFY_INVALID_PVP_LEAGUE": "{{author}} {{league}} is not a valid PvP league. (Great or Ultra)", + "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{{author}} {{percent}} must be within the range of `0-100`.", + "NOTIFY_INVALID_PVP_RANK_RANGE": "{{author}} {{rank}} must be within the range of `0-4096`.", + "NOTIFY_INVALID_STAMINA_VALUE": "{{author}} {{sta_iv}} is not a valid stamina value. Must be between `0-15`.", + "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon PvP subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Raid subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Quest subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Team Rocket Invasion subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Gym subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Lure subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon notifications.", + "NOTIFY_NO_PVP_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon PvP notifications.", + "NOTIFY_PHONE_NUMBER_SET": "{{author}} Text message notifications for ultra rare Pokemon will be sent to {{number}}.", + "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{{distance}}**", + "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{{location_url}} meters", + "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", + "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{{status}}**", + "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{{style}}**", + "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{{number}}**", + "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {{iv}}% ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {{rank}} ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_TITLE": "**{{author}} Notification Settings (Page: {{page}}/{{pages}}):**", + "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** gym notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Team Rocket invasion notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** {{league}} League PvP Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** quest notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** raid boss notifications.", + "PVP_CP": "CP", + "PVP_GREAT_LEAGUE": "Great League", + "PVP_RANK": "Rank", + "PVP_ULTRA_LEAGUE": "Ultra League", + "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", + "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_NEWLINE": "----------------------------------------------", + "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", + "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", + "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_NEWLINE": "----------------------------------------------", + "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", + "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", + "HUNDO_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{count}}** total hundos out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", + "SUBSCRIPTIONS_FROM_CITY": " from city **{{city}}**", + "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Pokemon notifications.", + "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** {{league}} League PvP notifications.", + "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{lure}}** lure notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{lure}}** lure notifications{{cities}}.", + "TIME_DAYS": "days", + "TIME_HOURS": "hours", + "TIME_MINUTES": "minutes", + "TIME_SECONDS": "seconds", + "TIME_YEARS": "years", + "UNKNOWN_POKESTOP": "Unknown Pokestop", + "NORMAL": "Normal", + "UNKNOWN": "Unknown", + "EGG": "Egg", + "FULL": "Full", + "EMPTY": "Empty" +} \ No newline at end of file diff --git a/static/locales/_th.json b/static/locales/_th.json new file mode 100644 index 00000000..6c061466 --- /dev/null +++ b/static/locales/_th.json @@ -0,0 +1,158 @@ +{ + "ALL_AREAS": "All Areas", + "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", + "CHANNEL_MESSAGES_DELETED": "{{author}} Channel {{channel}} messages have been deleted.", + "DIRECT_MESSAGE_NOT_SUPPORTED": "{{author}} Direct message is not supported for this command.", + "DONATE_MESSAGE": "{{author}} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", + "EMBED_DIRECTIONS": "DIRECTIONS", + "ERROR_NESTS_DISABLED": "{{author}} Nests disabled.", + "ERROR_NESTS_LIST": "{{author}} Unable to retrieve nest list.", + "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", + "ERROR_NO_INVASION_SUBSCRIPTIONS": "{{author}} is not subscribed to any Team Rocket invasion notifications{{cities}}.", + "ERROR_NO_QUEST_SUBSCRIPTIONS": "{{author}} is not subscribed to any quest notifications{{cities}}.", + "ERROR_NO_RAID_SUBSCRIPTIONS": "{{author}} is not subscribed to any raid notifications{{cities}}.", + "ERROR_NO_LURE_SUBSCRIPTIONS": "{{author}} is not subscribed to any lure notifications{{cities}}.", + "ERROR_PARSING_USER_ID": "{{author}} Unable to recognize user id {{id}}.", + "EVENT_POKEMON_ADD": "{{author}} event Pokemon added to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "EVENT_POKEMON_REMOVE": "{{author}} event Pokemon `{{pokemon}}` removed.", + "EVENT_POKEMON_SET": "{{author}} event Pokemon set to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} Unable to remove {{pokemon}} Pokemon subscriptions.", + "FEEDS_ASSIGNED_ALL_ROLES": "{{author}} was assigned all city feed roles: {{roles}}", + "FEEDS_ASSIGNED_ROLES": "{{author}} has joined role(s) **{{roles}}**.", + "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{{author}} is already assigned to role(s) **{{roles}}**.", + "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", + "FEEDS_INVALID_CITY_NAME": "{{author}} {{city}} is not a valid city name.", + "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{{author}} {{city}} is not a valid city name, type `{{prefix}}cities` to see a list of available cities.", + "FEEDS_PLEASE_WAIT": "{{author}} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", + "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{{prefix}}feedme cityname` to assign yourself to that city role.*", + "FEEDS_UNASSIGNED_ALL_ROLES": "{{author}} was unassigned all city feed roles: {{roles}}", + "FEEDS_UNASSIGNED_ROLES": "{{author}} has been removed from role(s) **{{roles}}**.", + "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{{author}} is not assigned to role(s) **{{roles}}**.", + "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({{location_url}})] [[Gym Image]({{image_url}})]", + "GYM_NAME": "- **{{name}}**", + "GYM_NO_POKESTOPS_CONVERTED": "{{author}} No Pokestops have been converted to Gyms.", + "GYM_NO_POKESTOPS_UPDATED": "{{author}} No Pokestops have been updated.", + "GYM_POKESTOPS_CONVERTED": "{{author}} {{amount}} Pokestops updated to Gyms.", + "GYM_POKESTOPS_DELETED": "{{author}} {{amount}} Pokestops deleted.", + "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", + "GYM_UNKNOWN_IMAGE": "Unknown Image Url", + "GYM_UNKNOWN_NAME": "Unknown Gym Name", + "MSG_INVALID_USER_MENTION": "{{author}} Failed to retrieve user with mention tag {{mention}}.", + "MSG_NOT_MODERATOR_OR_HIGHER": "{{author}} is not a moderator or higher thus you may not see other's subscription settings.", + "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{{0}} Subscriptions are not enabled in the config.", + "MSG_USER_NOT_SUBSCRIBED": "{{author}} is not currently subscribed to any Pokemon or Raid notifications.", + "NOTIFY_COMMON_TYPE_POKEMON": "{{author}} {{pokemon}} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {{min_iv}}% or higher.", + "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your {{league}} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_DISTANCE_SET": "{{author}} Notifications only within a {{distance}} kilometer radius of location {{latitude}},{{longitude}} will be sent.", + "NOTIFY_ENABLE_DISABLE": "{{author}} has **{{command}}d** Pokemon, PvP, Raid, Gym, Quest, Invasion, and Lure notifications.", + "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{{author}} does not have any subscriptions to export.", + "NOTIFY_EXPORT_SUCCESS": "{{author}} Download your subscription settings here.", + "NOTIFY_FROM": "{{line}} (From: {{cities}})", + "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{{author}} added gym subscription `{{gym}}` to your list of gyms to receive raid notifications from.", + "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{{author}} already subscribed to gym notifications from {{gym}}.", + "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{{author}} Removed gym subscription `{{gym}}` from your list of gyms to receive notifications from.", + "NOTIFY_ICON_STYLE_CHANGE": "{{author}} Icon style changed to **{{style}}**.", + "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{{author}} Unable to get uploaded attachment.", + "NOTIFY_IMPORT_MALFORMED_DATA": "{{author}} Malformed subscription data, unable to import.", + "NOTIFY_IMPORT_SUCCESS": "{{author}} subscriptions were imported successfully.", + "NOTIFY_IMPORT_UPLOAD_FILE": "{{author}} Please upload your subscriptions.json file to import now within 3 minutes...", + "NOTIFY_INVALID_ATTACK_VALUE": "{{author}} {{atk_iv}} is not a valid attack value. Must be between `0-15`.", + "NOTIFY_INVALID_CITY_ROLE": "{{author}} {{role}} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", + "NOTIFY_INVALID_COORDINATES": "{{author}} Unable not parse {{coordinates}} as valid coordinates.", + "NOTIFY_INVALID_DEFENSE_VALUE": "{{author}} {{def_iv}} is not a valid defense value. Must be between `0-15`.", + "NOTIFY_INVALID_GENDER": "{{author}} {{gender}} is not a valid gender. (i.e. `m`, `f`, `*`)", + "NOTIFY_INVALID_ICON_STYLE": "{{author}} invalid icon style, type `{{prefix}}icons` to see a list of valid options.", + "NOTIFY_INVALID_IV_RANGE": "{{author}} {{iv}} must be within the range of `0-100`.", + "NOTIFY_INVALID_IV_VALUES": "{{author}} {{iv}} is not a valid value. (Example: `0-15-6`)", + "NOTIFY_INVALID_LEVEL": "{{author}} {{level}} must be within the range of `0-35`.", + "NOTIFY_INVALID_MAXIMUM_LEVEL": "{{author}} Failed to parse maximum level provided '{{level}}'.", + "NOTIFY_INVALID_MINIMUM_IV": "{{author}} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", + "NOTIFY_INVALID_MINIMUM_LEVEL": "{{author}} Failed to parse minimum level provided '{{level}}'.", + "NOTIFY_INVALID_POKEMON_ID": "{{author}} {{pokemon}} is not a valid Pokemon id.", + "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{{author}} {{pokemon}} are not valid Pokemon names or IDs.", + "NOTIFY_INVALID_POKEMON_SPECIFIED": "{{author}} Unable to recognize any of the Pokemon you specified.", + "NOTIFY_INVALID_PVP_LEAGUE": "{{author}} {{league}} is not a valid PvP league. (Great or Ultra)", + "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{{author}} {{percent}} must be within the range of `0-100`.", + "NOTIFY_INVALID_PVP_RANK_RANGE": "{{author}} {{rank}} must be within the range of `0-4096`.", + "NOTIFY_INVALID_STAMINA_VALUE": "{{author}} {{sta_iv}} is not a valid stamina value. Must be between `0-15`.", + "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon PvP subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Raid subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Quest subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Team Rocket Invasion subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Gym subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Lure subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon notifications.", + "NOTIFY_NO_PVP_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon PvP notifications.", + "NOTIFY_PHONE_NUMBER_SET": "{{author}} Text message notifications for ultra rare Pokemon will be sent to {{number}}.", + "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{{distance}}**", + "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{{location_url}} meters", + "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", + "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{{status}}**", + "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{{style}}**", + "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{{number}}**", + "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {{iv}}% ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {{rank}} ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_TITLE": "**{{author}} Notification Settings (Page: {{page}}/{{pages}}):**", + "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** gym notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Team Rocket invasion notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** {{league}} League PvP Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** quest notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** raid boss notifications.", + "PVP_CP": "CP", + "PVP_GREAT_LEAGUE": "Great League", + "PVP_RANK": "Rank", + "PVP_ULTRA_LEAGUE": "Ultra League", + "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", + "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_NEWLINE": "----------------------------------------------", + "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", + "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", + "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_NEWLINE": "----------------------------------------------", + "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", + "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", + "HUNDO_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{count}}** total hundos out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", + "SUBSCRIPTIONS_FROM_CITY": " from city **{{city}}**", + "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Pokemon notifications.", + "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** {{league}} League PvP notifications.", + "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{lure}}** lure notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{lure}}** lure notifications{{cities}}.", + "TIME_DAYS": "days", + "TIME_HOURS": "hours", + "TIME_MINUTES": "minutes", + "TIME_SECONDS": "seconds", + "TIME_YEARS": "years", + "UNKNOWN_POKESTOP": "Unknown Pokestop", + "NORMAL": "Normal", + "UNKNOWN": "Unknown", + "EGG": "Egg", + "FULL": "Full", + "EMPTY": "Empty" +} \ No newline at end of file diff --git a/static/locales/_zh-tw.json b/static/locales/_zh-tw.json new file mode 100644 index 00000000..6c061466 --- /dev/null +++ b/static/locales/_zh-tw.json @@ -0,0 +1,158 @@ +{ + "ALL_AREAS": "All Areas", + "BOT_CRASH_MESSAGE": "WHM JUST CRASHED!", + "CHANNEL_MESSAGES_DELETED": "{{author}} Channel {{channel}} messages have been deleted.", + "DIRECT_MESSAGE_NOT_SUPPORTED": "{{author}} Direct message is not supported for this command.", + "DONATE_MESSAGE": "{{author}} This feature is only available to supporters, please donate to unlock this feature and more.\r\n\r\nDonation information can be found by typing the `donate` command.\r\n\r\n*If you have already donated and are still receiving this message, please tag an Administrator or Moderator for help.*", + "EMBED_DIRECTIONS": "DIRECTIONS", + "ERROR_NESTS_DISABLED": "{{author}} Nests disabled.", + "ERROR_NESTS_LIST": "{{author}} Unable to retrieve nest list.", + "ERROR_NOT_IN_DISCORD_SERVER": "Not in discord server.", + "ERROR_NO_INVASION_SUBSCRIPTIONS": "{{author}} is not subscribed to any Team Rocket invasion notifications{{cities}}.", + "ERROR_NO_QUEST_SUBSCRIPTIONS": "{{author}} is not subscribed to any quest notifications{{cities}}.", + "ERROR_NO_RAID_SUBSCRIPTIONS": "{{author}} is not subscribed to any raid notifications{{cities}}.", + "ERROR_NO_LURE_SUBSCRIPTIONS": "{{author}} is not subscribed to any lure notifications{{cities}}.", + "ERROR_PARSING_USER_ID": "{{author}} Unable to recognize user id {{id}}.", + "EVENT_POKEMON_ADD": "{{author}} event Pokemon added to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "EVENT_POKEMON_REMOVE": "{{author}} event Pokemon `{{pokemon}}` removed.", + "EVENT_POKEMON_SET": "{{author}} event Pokemon set to `{{pokemon}}`, feeds will adjust to only show in channels that are 90% or higher, 0%, or include PvP rankings.", + "FAILED_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} Unable to remove {{pokemon}} Pokemon subscriptions.", + "FEEDS_ASSIGNED_ALL_ROLES": "{{author}} was assigned all city feed roles: {{roles}}", + "FEEDS_ASSIGNED_ROLES": "{{author}} has joined role(s) **{{roles}}**.", + "FEEDS_ASSIGNED_ROLES_ALREADY": "\r\n{{author}} is already assigned to role(s) **{{roles}}**.", + "FEEDS_AVAILABLE_CITY_ROLES": "**Available City Roles:**", + "FEEDS_INVALID_CITY_NAME": "{{author}} {{city}} is not a valid city name.", + "FEEDS_INVALID_CITY_NAME_TYPE_COMMAND": "{{author}} {{city}} is not a valid city name, type `{{prefix}}cities` to see a list of available cities.", + "FEEDS_PLEASE_WAIT": "{{author}} Please wait while I assign all city roles, this may take a couple of minutes depending on the amount of cities.", + "FEEDS_TYPE_COMMAND_ASSIGN_ROLE": "*Type `{{prefix}}feedme cityname` to assign yourself to that city role.*", + "FEEDS_UNASSIGNED_ALL_ROLES": "{{author}} was unassigned all city feed roles: {{roles}}", + "FEEDS_UNASSIGNED_ROLES": "{{author}} has been removed from role(s) **{{roles}}**.", + "FEEDS_UNASSIGNED_ROLES_ALREADY": "\r\n{{author}} is not assigned to role(s) **{{roles}}**.", + "GYM_DIRECTIONS_IMAGE_LINK": "[[Directions]({{location_url}})] [[Gym Image]({{image_url}})]", + "GYM_NAME": "- **{{name}}**", + "GYM_NO_POKESTOPS_CONVERTED": "{{author}} No Pokestops have been converted to Gyms.", + "GYM_NO_POKESTOPS_UPDATED": "{{author}} No Pokestops have been updated.", + "GYM_POKESTOPS_CONVERTED": "{{author}} {{amount}} Pokestops updated to Gyms.", + "GYM_POKESTOPS_DELETED": "{{author}} {{amount}} Pokestops deleted.", + "GYM_POKESTOPS_EMBED_TITLE": "**List of Pokestops converted to Gyms:**", + "GYM_UNKNOWN_IMAGE": "Unknown Image Url", + "GYM_UNKNOWN_NAME": "Unknown Gym Name", + "MSG_INVALID_USER_MENTION": "{{author}} Failed to retrieve user with mention tag {{mention}}.", + "MSG_NOT_MODERATOR_OR_HIGHER": "{{author}} is not a moderator or higher thus you may not see other's subscription settings.", + "MSG_SUBSCRIPTIONS_NOT_ENABLED": "{{0}} Subscriptions are not enabled in the config.", + "MSG_USER_NOT_SUBSCRIBED": "{{author}} is not currently subscribed to any Pokemon or Raid notifications.", + "NOTIFY_COMMON_TYPE_POKEMON": "{{author}} {{pokemon}} is a common type Pokemon and cannot be subscribed to for notifications unless the IV is set to at least {{min_iv}}% or higher.", + "NOTIFY_CONFIRM_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your gym subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Team Rocket invasion subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your {{league}} League PvP Pokemon subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your field research quest subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your raid boss subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_CONFIRM_REMOVE_ALL_LURE_SUBSCRIPTIONS": "{{author}} are you sure you want to remove **all** {{amount}} of your Pokestop lure subscriptions? Please reply back with `y` or `yes` to confirm.", + "NOTIFY_DISTANCE_SET": "{{author}} Notifications only within a {{distance}} kilometer radius of location {{latitude}},{{longitude}} will be sent.", + "NOTIFY_ENABLE_DISABLE": "{{author}} has **{{command}}d** Pokemon, PvP, Raid, Gym, Quest, Invasion, and Lure notifications.", + "NOTIFY_EXPORT_NO_SUBSCRIPTIONS": "{{author}} does not have any subscriptions to export.", + "NOTIFY_EXPORT_SUCCESS": "{{author}} Download your subscription settings here.", + "NOTIFY_FROM": "{{line}} (From: {{cities}})", + "NOTIFY_GYM_SUBSCRIPTION_ADDED": "{{author}} added gym subscription `{{gym}}` to your list of gyms to receive raid notifications from.", + "NOTIFY_GYM_SUBSCRIPTION_EXISTS": "{{author}} already subscribed to gym notifications from {{gym}}.", + "NOTIFY_GYM_SUBSCRIPTION_REMOVED": "{{author}} Removed gym subscription `{{gym}}` from your list of gyms to receive notifications from.", + "NOTIFY_ICON_STYLE_CHANGE": "{{author}} Icon style changed to **{{style}}**.", + "NOTIFY_IMPORT_INVALID_ATTACHMENT": "{{author}} Unable to get uploaded attachment.", + "NOTIFY_IMPORT_MALFORMED_DATA": "{{author}} Malformed subscription data, unable to import.", + "NOTIFY_IMPORT_SUCCESS": "{{author}} subscriptions were imported successfully.", + "NOTIFY_IMPORT_UPLOAD_FILE": "{{author}} Please upload your subscriptions.json file to import now within 3 minutes...", + "NOTIFY_INVALID_ATTACK_VALUE": "{{author}} {{atk_iv}} is not a valid attack value. Must be between `0-15`.", + "NOTIFY_INVALID_CITY_ROLE": "{{author}} {{role}} is not a valid city role. To see a list of valid city roles type the command `.cities` or `.feeds`.", + "NOTIFY_INVALID_COORDINATES": "{{author}} Unable not parse {{coordinates}} as valid coordinates.", + "NOTIFY_INVALID_DEFENSE_VALUE": "{{author}} {{def_iv}} is not a valid defense value. Must be between `0-15`.", + "NOTIFY_INVALID_GENDER": "{{author}} {{gender}} is not a valid gender. (i.e. `m`, `f`, `*`)", + "NOTIFY_INVALID_ICON_STYLE": "{{author}} invalid icon style, type `{{prefix}}icons` to see a list of valid options.", + "NOTIFY_INVALID_IV_RANGE": "{{author}} {{iv}} must be within the range of `0-100`.", + "NOTIFY_INVALID_IV_VALUES": "{{author}} {{iv}} is not a valid value. (Example: `0-15-6`)", + "NOTIFY_INVALID_LEVEL": "{{author}} {{level}} must be within the range of `0-35`.", + "NOTIFY_INVALID_MAXIMUM_LEVEL": "{{author}} Failed to parse maximum level provided '{{level}}'.", + "NOTIFY_INVALID_MINIMUM_IV": "{{author}} may not subscribe to **all** Pokemon with a minimum IV less than 90, please set something higher.", + "NOTIFY_INVALID_MINIMUM_LEVEL": "{{author}} Failed to parse minimum level provided '{{level}}'.", + "NOTIFY_INVALID_POKEMON_ID": "{{author}} {{pokemon}} is not a valid Pokemon id.", + "NOTIFY_INVALID_POKEMON_IDS_OR_NAMES": "{{author}} {{pokemon}} are not valid Pokemon names or IDs.", + "NOTIFY_INVALID_POKEMON_SPECIFIED": "{{author}} Unable to recognize any of the Pokemon you specified.", + "NOTIFY_INVALID_PVP_LEAGUE": "{{author}} {{league}} is not a valid PvP league. (Great or Ultra)", + "NOTIFY_INVALID_PVP_PERCENT_RANGE": "{{author}} {{percent}} must be within the range of `0-100`.", + "NOTIFY_INVALID_PVP_RANK_RANGE": "{{author}} {{rank}} must be within the range of `0-4096`.", + "NOTIFY_INVALID_STAMINA_VALUE": "{{author}} {{sta_iv}} is not a valid stamina value. Must be between `0-15`.", + "NOTIFY_INVALID_POKEMON_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_PVP_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Pokemon PvP subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_RAID_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Raid subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_QUEST_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Quest subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_INVASION_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Team Rocket Invasion subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_GYM_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Gym subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_INVALID_LURE_SUBSCRIPTIONS_LIMIT": "{{author}} You have reached the maximum Lure subscriptions limit of {{amount}}, please remove subscriptions in order to add more.", + "NOTIFY_NO_POKEMON_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon notifications.", + "NOTIFY_NO_PVP_SUBSCRIPTIONS": "{{author}} is not subscribed to any Pokemon PvP notifications.", + "NOTIFY_PHONE_NUMBER_SET": "{{author}} Text message notifications for ultra rare Pokemon will be sent to {{number}}.", + "NOTIFY_SETTINGS_EMBED_DISTANCE": "Distance: **{{distance}}**", + "NOTIFY_SETTINGS_EMBED_DISTANCE_KM": "{{location_url}} meters", + "NOTIFY_SETTINGS_EMBED_DISTANCE_NOT_SET": "Not Set (Any Distance)", + "NOTIFY_SETTINGS_EMBED_ENABLED": "Enabled: **{{status}}**", + "NOTIFY_SETTINGS_EMBED_GYMS": "Gym Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_ICON_STYLE": "Icon Style: **{{style}}**", + "NOTIFY_SETTINGS_EMBED_INVASIONS": "Invasion Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_PHONE_NUMBER": "Phone Number: **{{number}}**", + "NOTIFY_SETTINGS_EMBED_POKEMON": "Pokemon Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_POKEMON_DEFAULT_UNLISTED": "Default: {{iv}}% ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP_DEFAULT_UNLISTED": "Default: Rank {{rank}} ({{amount}} unlisted)", + "NOTIFY_SETTINGS_EMBED_PVP": "PvP Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_QUESTS": "Quest Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_RAIDS": "Raid Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_LURES": "Lure Subscriptions: ({{amount}}/{{max}} used)", + "NOTIFY_SETTINGS_EMBED_TITLE": "**{{author}} Notification Settings (Page: {{page}}/{{pages}}):**", + "NOTIFY_SUCCESS_REMOVE_ALL_GYM_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** gym notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_INVASION_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Team Rocket invasion notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_POKEMON_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_PVP_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** {{league}} League PvP Pokemon notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_QUEST_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** quest notifications.", + "NOTIFY_SUCCESS_REMOVE_ALL_RAID_SUBSCRIPTIONS": "{{author}} has unsubscribed from **all** raid boss notifications.", + "PVP_CP": "CP", + "PVP_GREAT_LEAGUE": "Great League", + "PVP_RANK": "Rank", + "PVP_ULTRA_LEAGUE": "Ultra League", + "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", + "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_NEWLINE": "----------------------------------------------", + "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", + "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", + "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_NEWLINE": "----------------------------------------------", + "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", + "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", + "HUNDO_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{count}}** total hundos out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", + "SUBSCRIPTIONS_FROM_ALL_CITIES": " from **all** areas", + "SUBSCRIPTIONS_FROM_CITY": " from city **{{city}}**", + "SUCCESS_INVASION_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_INVASION_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Team Rocket invasion reward notifications{{cities}}.", + "SUCCESS_POKEMON_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** Pokemon notifications.", + "SUCCESS_PVP_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** {{league}} League PvP notifications.", + "SUCCESS_QUEST_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_QUEST_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{reward}}** quest notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_RAID_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{pokemon}}** raid notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_SUBSCRIBE": "{{author}} has subscribed to **{{lure}}** lure notifications{{cities}}.", + "SUCCESS_LURE_SUBSCRIPTIONS_UNSUBSCRIBE": "{{author}} has unsubscribed from **{{lure}}** lure notifications{{cities}}.", + "TIME_DAYS": "days", + "TIME_HOURS": "hours", + "TIME_MINUTES": "minutes", + "TIME_SECONDS": "seconds", + "TIME_YEARS": "years", + "UNKNOWN_POKESTOP": "Unknown Pokestop", + "NORMAL": "Normal", + "UNKNOWN": "Unknown", + "EGG": "Egg", + "FULL": "Full", + "EMPTY": "Empty" +} \ No newline at end of file diff --git a/static/nest.json b/static/nest.json index 1b2471e8..d5d9ced7 100644 --- a/static/nest.json +++ b/static/nest.json @@ -1,32 +1,323915 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -118.1, - 31.0 - ], - [ - -118.2, - 31.1 - ] - ] - ] - }, - "type": "Feature", - "id": 12345678, - "properties": { - "name": "Unknown Areaname", - "stroke-opacity": 1.0, - "fill-opacity": 0.5, - "stroke": "#352BFF", - "stroke-width": 2.0, - "fill": "#0651FF" - } - } - ] +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "id": 12143584, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.185508, + 34.05361 + ], + [ + -117.185397, + 34.05366 + ], + [ + -117.185326, + 34.053564 + ], + [ + -117.184819, + 34.053828 + ], + [ + -117.184457, + 34.054009 + ], + [ + -117.18409, + 34.05353 + ], + [ + -117.184027, + 34.053448 + ], + [ + -117.184991, + 34.052942 + ], + [ + -117.185508, + 34.05361 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 13878860, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.169868, + 34.039107 + ], + [ + -117.169721, + 34.038972 + ], + [ + -117.169535, + 34.038859 + ], + [ + -117.169248, + 34.038757 + ], + [ + -117.169301, + 34.038632 + ], + [ + -117.169409, + 34.038584 + ], + [ + -117.169514, + 34.038478 + ], + [ + -117.169574, + 34.038375 + ], + [ + -117.169573, + 34.038281 + ], + [ + -117.169662, + 34.038117 + ], + [ + -117.169715, + 34.037995 + ], + [ + -117.169756, + 34.037914 + ], + [ + -117.169823, + 34.037886 + ], + [ + -117.169968, + 34.0379 + ], + [ + -117.170116, + 34.03798 + ], + [ + -117.170355, + 34.038013 + ], + [ + -117.170479, + 34.037798 + ], + [ + -117.170505, + 34.037674 + ], + [ + -117.170499, + 34.03754 + ], + [ + -117.170482, + 34.03747 + ], + [ + -117.170317, + 34.037273 + ], + [ + -117.170449, + 34.037177 + ], + [ + -117.170754, + 34.036994 + ], + [ + -117.17107, + 34.036816 + ], + [ + -117.171444, + 34.037306 + ], + [ + -117.172452, + 34.037545 + ], + [ + -117.173001, + 34.037858 + ], + [ + -117.173525, + 34.038313 + ], + [ + -117.173722, + 34.038494 + ], + [ + -117.174077, + 34.03854 + ], + [ + -117.17083, + 34.040306 + ], + [ + -117.169962, + 34.039223 + ], + [ + -117.169868, + 34.039107 + ] + ] + ] + }, + "properties": { + "name": "Prospect Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 13879825, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.175299, + 34.039336 + ], + [ + -117.17167, + 34.041377 + ], + [ + -117.17083, + 34.040306 + ], + [ + -117.174077, + 34.03854 + ], + [ + -117.174412, + 34.038665 + ], + [ + -117.174831, + 34.038867 + ], + [ + -117.175115, + 34.03912 + ], + [ + -117.175299, + 34.039336 + ] + ] + ] + }, + "properties": { + "name": "Orange Grove", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 13898817, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.210854, + 34.044816 + ], + [ + -117.21085, + 34.045106 + ], + [ + -117.210858, + 34.045735 + ], + [ + -117.210853, + 34.046518 + ], + [ + -117.210178, + 34.046521 + ], + [ + -117.20935, + 34.046522 + ], + [ + -117.208935, + 34.046523 + ], + [ + -117.208673, + 34.04652 + ], + [ + -117.208664, + 34.045882 + ], + [ + -117.208665, + 34.045117 + ], + [ + -117.208664, + 34.044819 + ], + [ + -117.209923, + 34.044817 + ], + [ + -117.210854, + 34.044816 + ] + ] + ] + }, + "properties": { + "name": "Brookside Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 13900224, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.160452, + 34.024068 + ], + [ + -117.160491, + 34.024274 + ], + [ + -117.160505, + 34.024464 + ], + [ + -117.160479, + 34.024745 + ], + [ + -117.160453, + 34.02498 + ], + [ + -117.160251, + 34.024852 + ], + [ + -117.160145, + 34.024793 + ], + [ + -117.160038, + 34.02473 + ], + [ + -117.159877, + 34.024667 + ], + [ + -117.159723, + 34.024621 + ], + [ + -117.158913, + 34.024409 + ], + [ + -117.158084, + 34.024183 + ], + [ + -117.158101, + 34.024122 + ], + [ + -117.157991, + 34.023178 + ], + [ + -117.157867, + 34.023031 + ], + [ + -117.157092, + 34.022965 + ], + [ + -117.157028, + 34.022969 + ], + [ + -117.156998, + 34.023014 + ], + [ + -117.157187, + 34.023274 + ], + [ + -117.157237, + 34.02344 + ], + [ + -117.157201, + 34.023669 + ], + [ + -117.156946, + 34.023674 + ], + [ + -117.1567, + 34.023775 + ], + [ + -117.156548, + 34.023953 + ], + [ + -117.156213, + 34.023689 + ], + [ + -117.155844, + 34.021605 + ], + [ + -117.155953, + 34.021519 + ], + [ + -117.156178, + 34.021621 + ], + [ + -117.156302, + 34.021645 + ], + [ + -117.156457, + 34.021634 + ], + [ + -117.156571, + 34.021639 + ], + [ + -117.156647, + 34.021666 + ], + [ + -117.156751, + 34.021726 + ], + [ + -117.157073, + 34.021907 + ], + [ + -117.157197, + 34.021977 + ], + [ + -117.157232, + 34.021994 + ], + [ + -117.157291, + 34.022016 + ], + [ + -117.157325, + 34.022023 + ], + [ + -117.157354, + 34.022023 + ], + [ + -117.15741, + 34.022012 + ], + [ + -117.157556, + 34.021978 + ], + [ + -117.157854, + 34.021889 + ], + [ + -117.157907, + 34.021875 + ], + [ + -117.157958, + 34.021886 + ], + [ + -117.158044, + 34.021911 + ], + [ + -117.158475, + 34.022203 + ], + [ + -117.158702, + 34.022315 + ], + [ + -117.158948, + 34.022421 + ], + [ + -117.159138, + 34.022522 + ], + [ + -117.159363, + 34.022699 + ], + [ + -117.159553, + 34.022898 + ], + [ + -117.15995, + 34.023362 + ], + [ + -117.160027, + 34.023422 + ], + [ + -117.160155, + 34.023464 + ], + [ + -117.160332, + 34.023508 + ], + [ + -117.160505, + 34.023544 + ], + [ + -117.160638, + 34.02361 + ], + [ + -117.160742, + 34.023733 + ], + [ + -117.160825, + 34.023861 + ], + [ + -117.160988, + 34.024238 + ], + [ + -117.161053, + 34.024383 + ], + [ + -117.161051, + 34.024452 + ], + [ + -117.161041, + 34.02447 + ], + [ + -117.160939, + 34.024421 + ], + [ + -117.160885, + 34.024338 + ], + [ + -117.160693, + 34.024037 + ], + [ + -117.16062, + 34.023956 + ], + [ + -117.160579, + 34.023924 + ], + [ + -117.160524, + 34.023905 + ], + [ + -117.160462, + 34.023916 + ], + [ + -117.160447, + 34.023973 + ], + [ + -117.160452, + 34.024068 + ] + ] + ] + }, + "properties": { + "name": "Caroline Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 13900646, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.175899, + 34.07375 + ], + [ + -117.175924, + 34.077152 + ], + [ + -117.173856, + 34.077152 + ], + [ + -117.173873, + 34.073775 + ], + [ + -117.175899, + 34.07375 + ] + ] + ] + }, + "properties": { + "name": "Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 13900700, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.192265, + 34.070223 + ], + [ + -117.192261, + 34.072058 + ], + [ + -117.191704, + 34.07206 + ], + [ + -117.191707, + 34.072301 + ], + [ + -117.191774, + 34.072302 + ], + [ + -117.191775, + 34.072695 + ], + [ + -117.191867, + 34.072695 + ], + [ + -117.191868, + 34.073193 + ], + [ + -117.191822, + 34.073231 + ], + [ + -117.191745, + 34.073239 + ], + [ + -117.191737, + 34.073605 + ], + [ + -117.191271, + 34.073607 + ], + [ + -117.191245, + 34.070213 + ], + [ + -117.192265, + 34.070223 + ] + ] + ] + }, + "properties": { + "name": "Texonia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 13901686, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.163659, + 34.044586 + ], + [ + -117.162606, + 34.045178 + ], + [ + -117.162517, + 34.045058 + ], + [ + -117.162418, + 34.044925 + ], + [ + -117.162309, + 34.044778 + ], + [ + -117.161766, + 34.045082 + ], + [ + -117.161265, + 34.045362 + ], + [ + -117.161127, + 34.045439 + ], + [ + -117.160701, + 34.045103 + ], + [ + -117.159539, + 34.044187 + ], + [ + -117.159479, + 34.043988 + ], + [ + -117.159007, + 34.043675 + ], + [ + -117.159016, + 34.043533 + ], + [ + -117.158998, + 34.043419 + ], + [ + -117.158106, + 34.042829 + ], + [ + -117.158664, + 34.042025 + ], + [ + -117.160475, + 34.042893 + ], + [ + -117.160878, + 34.04305 + ], + [ + -117.163024, + 34.04374 + ], + [ + -117.163628, + 34.043919 + ], + [ + -117.164389, + 34.044145 + ], + [ + -117.163659, + 34.044586 + ] + ] + ] + }, + "properties": { + "name": "Ford Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 13902652, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.139146, + 34.062146 + ], + [ + -117.139146, + 34.060515 + ], + [ + -117.139151, + 34.060471 + ], + [ + -117.139162, + 34.060451 + ], + [ + -117.139174, + 34.060442 + ], + [ + -117.13919, + 34.060438 + ], + [ + -117.139223, + 34.060437 + ], + [ + -117.140204, + 34.060443 + ], + [ + -117.140739, + 34.060443 + ], + [ + -117.141189, + 34.060446 + ], + [ + -117.14119, + 34.061078 + ], + [ + -117.140571, + 34.061283 + ], + [ + -117.13991, + 34.061724 + ], + [ + -117.139219, + 34.062167 + ], + [ + -117.139146, + 34.062146 + ] + ] + ] + }, + "properties": { + "name": "Crafton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 13907472, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.195652, + 34.058591 + ], + [ + -117.195662, + 34.059331 + ], + [ + -117.195656, + 34.059359 + ], + [ + -117.19562, + 34.059391 + ], + [ + -117.195573, + 34.059407 + ], + [ + -117.194877, + 34.059216 + ], + [ + -117.194667, + 34.059152 + ], + [ + -117.194466, + 34.059083 + ], + [ + -117.194281, + 34.059016 + ], + [ + -117.194156, + 34.05896 + ], + [ + -117.19386, + 34.058816 + ], + [ + -117.193547, + 34.058661 + ], + [ + -117.193557, + 34.058598 + ], + [ + -117.195652, + 34.058591 + ] + ] + ] + }, + "properties": { + "name": "Jennie Davis Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 13910161, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.168367, + 34.062702 + ], + [ + -117.167448, + 34.062702 + ], + [ + -117.167397, + 34.062688 + ], + [ + -117.167321, + 34.062575 + ], + [ + -117.167141, + 34.062224 + ], + [ + -117.167052, + 34.06213 + ], + [ + -117.166983, + 34.062022 + ], + [ + -117.166946, + 34.06193 + ], + [ + -117.166922, + 34.061834 + ], + [ + -117.166936, + 34.060483 + ], + [ + -117.16717, + 34.060426 + ], + [ + -117.167559, + 34.06027 + ], + [ + -117.167654, + 34.06024 + ], + [ + -117.167649, + 34.059416 + ], + [ + -117.167649, + 34.058983 + ], + [ + -117.170112, + 34.059012 + ], + [ + -117.170145, + 34.059015 + ], + [ + -117.17018, + 34.05903 + ], + [ + -117.170181, + 34.05909 + ], + [ + -117.170179, + 34.059509 + ], + [ + -117.17018, + 34.060356 + ], + [ + -117.170142, + 34.060375 + ], + [ + -117.168595, + 34.060378 + ], + [ + -117.168545, + 34.060309 + ], + [ + -117.168459, + 34.060271 + ], + [ + -117.168367, + 34.060254 + ], + [ + -117.168261, + 34.060273 + ], + [ + -117.168182, + 34.06035 + ], + [ + -117.16817, + 34.06044 + ], + [ + -117.16821, + 34.060525 + ], + [ + -117.168286, + 34.060594 + ], + [ + -117.168365, + 34.061123 + ], + [ + -117.168367, + 34.062702 + ] + ] + ] + }, + "properties": { + "name": "Sylvan Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35161021, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.56399, + 34.130384 + ], + [ + -117.56334, + 34.13038 + ], + [ + -117.563062, + 34.130456 + ], + [ + -117.562883, + 34.130555 + ], + [ + -117.562598, + 34.130707 + ], + [ + -117.562234, + 34.13079 + ], + [ + -117.562017, + 34.130836 + ], + [ + -117.561907, + 34.130852 + ], + [ + -117.561791, + 34.13084 + ], + [ + -117.561603, + 34.130815 + ], + [ + -117.561608, + 34.130612 + ], + [ + -117.561579, + 34.13025 + ], + [ + -117.561582, + 34.130125 + ], + [ + -117.561608, + 34.129984 + ], + [ + -117.561668, + 34.129853 + ], + [ + -117.561772, + 34.129705 + ], + [ + -117.561899, + 34.129601 + ], + [ + -117.561993, + 34.129542 + ], + [ + -117.562088, + 34.129494 + ], + [ + -117.562215, + 34.129448 + ], + [ + -117.562331, + 34.129419 + ], + [ + -117.563036, + 34.129362 + ], + [ + -117.56371, + 34.129307 + ], + [ + -117.564018, + 34.129271 + ], + [ + -117.564112, + 34.129247 + ], + [ + -117.563995, + 34.129369 + ], + [ + -117.563961, + 34.129433 + ], + [ + -117.56397, + 34.12952 + ], + [ + -117.564004, + 34.129598 + ], + [ + -117.564098, + 34.129732 + ], + [ + -117.564117, + 34.129783 + ], + [ + -117.564122, + 34.129831 + ], + [ + -117.56409, + 34.129908 + ], + [ + -117.564013, + 34.130001 + ], + [ + -117.563966, + 34.130081 + ], + [ + -117.563944, + 34.130157 + ], + [ + -117.563961, + 34.130193 + ], + [ + -117.563958, + 34.130236 + ], + [ + -117.56399, + 34.130384 + ] + ] + ] + }, + "properties": { + "name": "Victoria Groves Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35200807, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.500374, + 34.147934 + ], + [ + -117.500044, + 34.14802 + ], + [ + -117.499733, + 34.148069 + ], + [ + -117.499409, + 34.148118 + ], + [ + -117.499158, + 34.148125 + ], + [ + -117.498773, + 34.148125 + ], + [ + -117.498779, + 34.147239 + ], + [ + -117.498786, + 34.147183 + ], + [ + -117.498795, + 34.147127 + ], + [ + -117.498811, + 34.147069 + ], + [ + -117.498832, + 34.147012 + ], + [ + -117.498855, + 34.146965 + ], + [ + -117.498884, + 34.146913 + ], + [ + -117.498958, + 34.146812 + ], + [ + -117.499042, + 34.146726 + ], + [ + -117.499168, + 34.146604 + ], + [ + -117.499195, + 34.146589 + ], + [ + -117.499228, + 34.146582 + ], + [ + -117.499263, + 34.146584 + ], + [ + -117.499293, + 34.146597 + ], + [ + -117.499438, + 34.146711 + ], + [ + -117.499505, + 34.146767 + ], + [ + -117.499565, + 34.14682 + ], + [ + -117.499586, + 34.146845 + ], + [ + -117.499604, + 34.146872 + ], + [ + -117.499631, + 34.146926 + ], + [ + -117.499744, + 34.147172 + ], + [ + -117.499754, + 34.147193 + ], + [ + -117.499767, + 34.147208 + ], + [ + -117.499783, + 34.14722 + ], + [ + -117.499803, + 34.147232 + ], + [ + -117.499833, + 34.147242 + ], + [ + -117.499867, + 34.147244 + ], + [ + -117.499902, + 34.147241 + ], + [ + -117.499934, + 34.147227 + ], + [ + -117.499953, + 34.147214 + ], + [ + -117.499969, + 34.147199 + ], + [ + -117.499981, + 34.147181 + ], + [ + -117.499989, + 34.147163 + ], + [ + -117.500157, + 34.147255 + ], + [ + -117.500112, + 34.147494 + ], + [ + -117.500098, + 34.1475 + ], + [ + -117.500084, + 34.147509 + ], + [ + -117.50007, + 34.14752 + ], + [ + -117.500055, + 34.14754 + ], + [ + -117.500046, + 34.147561 + ], + [ + -117.500043, + 34.147587 + ], + [ + -117.500044, + 34.147612 + ], + [ + -117.50006, + 34.147639 + ], + [ + -117.500333, + 34.147881 + ], + [ + -117.500356, + 34.147909 + ], + [ + -117.500374, + 34.147934 + ] + ] + ] + }, + "properties": { + "name": "Legacy Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35399218, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.536465, + 34.145244 + ], + [ + -117.534485, + 34.14523 + ], + [ + -117.534491, + 34.145038 + ], + [ + -117.534485, + 34.143273 + ], + [ + -117.534477, + 34.143248 + ], + [ + -117.535627, + 34.143262 + ], + [ + -117.53573, + 34.143294 + ], + [ + -117.536417, + 34.143309 + ], + [ + -117.536513, + 34.143387 + ], + [ + -117.536478, + 34.143627 + ], + [ + -117.536465, + 34.145244 + ] + ] + ] + }, + "properties": { + "name": "Day Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35399219, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.536357, + 34.144171 + ], + [ + -117.536301, + 34.1444 + ], + [ + -117.536314, + 34.144625 + ], + [ + -117.53634, + 34.14474 + ], + [ + -117.536297, + 34.14489 + ], + [ + -117.536124, + 34.14504 + ], + [ + -117.535972, + 34.145062 + ], + [ + -117.535791, + 34.145047 + ], + [ + -117.53557, + 34.145026 + ], + [ + -117.535341, + 34.145072 + ], + [ + -117.535194, + 34.145069 + ], + [ + -117.535004, + 34.145029 + ], + [ + -117.534862, + 34.144961 + ], + [ + -117.53474, + 34.144858 + ], + [ + -117.534715, + 34.144736 + ], + [ + -117.535601, + 34.143967 + ], + [ + -117.535942, + 34.143878 + ], + [ + -117.53624, + 34.143892 + ], + [ + -117.536366, + 34.144031 + ], + [ + -117.536357, + 34.144171 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35684547, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.503702, + 34.146765 + ], + [ + -117.50335, + 34.146766 + ], + [ + -117.503292, + 34.146824 + ], + [ + -117.503277, + 34.146813 + ], + [ + -117.503255, + 34.146803 + ], + [ + -117.503232, + 34.146794 + ], + [ + -117.503201, + 34.146788 + ], + [ + -117.503164, + 34.146786 + ], + [ + -117.503116, + 34.146788 + ], + [ + -117.503001, + 34.146797 + ], + [ + -117.502572, + 34.146798 + ], + [ + -117.502528, + 34.146798 + ], + [ + -117.50248, + 34.146795 + ], + [ + -117.502435, + 34.14679 + ], + [ + -117.502387, + 34.146781 + ], + [ + -117.502298, + 34.146762 + ], + [ + -117.502211, + 34.146737 + ], + [ + -117.502131, + 34.146703 + ], + [ + -117.502051, + 34.146662 + ], + [ + -117.501996, + 34.146626 + ], + [ + -117.501941, + 34.146589 + ], + [ + -117.501864, + 34.146518 + ], + [ + -117.501813, + 34.146459 + ], + [ + -117.501699, + 34.146287 + ], + [ + -117.501664, + 34.146197 + ], + [ + -117.501644, + 34.146067 + ], + [ + -117.50165, + 34.145962 + ], + [ + -117.501659, + 34.145901 + ], + [ + -117.501673, + 34.145839 + ], + [ + -117.50172, + 34.145729 + ], + [ + -117.501754, + 34.145667 + ], + [ + -117.501806, + 34.145601 + ], + [ + -117.501855, + 34.145545 + ], + [ + -117.502025, + 34.145408 + ], + [ + -117.50208, + 34.145378 + ], + [ + -117.502137, + 34.14535 + ], + [ + -117.502205, + 34.145324 + ], + [ + -117.502286, + 34.145298 + ], + [ + -117.502367, + 34.145281 + ], + [ + -117.502451, + 34.145267 + ], + [ + -117.50251, + 34.145262 + ], + [ + -117.502576, + 34.14526 + ], + [ + -117.502736, + 34.145259 + ], + [ + -117.502941, + 34.145259 + ], + [ + -117.503025, + 34.145268 + ], + [ + -117.503115, + 34.145281 + ], + [ + -117.503169, + 34.145286 + ], + [ + -117.50322, + 34.145279 + ], + [ + -117.503255, + 34.145265 + ], + [ + -117.503287, + 34.145249 + ], + [ + -117.503475, + 34.145419 + ], + [ + -117.503709, + 34.145418 + ], + [ + -117.503702, + 34.146765 + ] + ] + ] + }, + "properties": { + "name": "Rancho Summit Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35804126, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.475357, + 34.145972 + ], + [ + -117.475043, + 34.145739 + ], + [ + -117.475013, + 34.145708 + ], + [ + -117.474987, + 34.145665 + ], + [ + -117.474959, + 34.145634 + ], + [ + -117.474928, + 34.145612 + ], + [ + -117.474883, + 34.145595 + ], + [ + -117.47485, + 34.145587 + ], + [ + -117.474822, + 34.145586 + ], + [ + -117.474774, + 34.145584 + ], + [ + -117.474754, + 34.145555 + ], + [ + -117.474722, + 34.145532 + ], + [ + -117.474739, + 34.145515 + ], + [ + -117.474631, + 34.145431 + ], + [ + -117.474432, + 34.145285 + ], + [ + -117.474503, + 34.145219 + ], + [ + -117.475102, + 34.144666 + ], + [ + -117.4752, + 34.144577 + ], + [ + -117.475568, + 34.144841 + ], + [ + -117.475572, + 34.144881 + ], + [ + -117.475573, + 34.144888 + ], + [ + -117.475582, + 34.144922 + ], + [ + -117.475612, + 34.144962 + ], + [ + -117.47565, + 34.144998 + ], + [ + -117.475747, + 34.145033 + ], + [ + -117.475773, + 34.145047 + ], + [ + -117.476153, + 34.145328 + ], + [ + -117.476157, + 34.145403 + ], + [ + -117.476029, + 34.145517 + ], + [ + -117.47581, + 34.145695 + ], + [ + -117.475788, + 34.145713 + ], + [ + -117.475616, + 34.14585 + ], + [ + -117.475442, + 34.145975 + ], + [ + -117.475357, + 34.145972 + ] + ] + ] + }, + "properties": { + "name": "Rosena Park West", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35804251, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.466487, + 34.154053 + ], + [ + -117.4627, + 34.15406 + ], + [ + -117.462789, + 34.153836 + ], + [ + -117.462836, + 34.153669 + ], + [ + -117.462873, + 34.153467 + ], + [ + -117.462884, + 34.153276 + ], + [ + -117.462878, + 34.153073 + ], + [ + -117.462852, + 34.152897 + ], + [ + -117.462814, + 34.152721 + ], + [ + -117.462745, + 34.152513 + ], + [ + -117.462609, + 34.152243 + ], + [ + -117.462552, + 34.152149 + ], + [ + -117.462442, + 34.151932 + ], + [ + -117.462381, + 34.151777 + ], + [ + -117.462336, + 34.151626 + ], + [ + -117.462302, + 34.151453 + ], + [ + -117.462283, + 34.151262 + ], + [ + -117.462287, + 34.150677 + ], + [ + -117.46228, + 34.150617 + ], + [ + -117.462287, + 34.150556 + ], + [ + -117.462322, + 34.150517 + ], + [ + -117.462376, + 34.150503 + ], + [ + -117.462477, + 34.150507 + ], + [ + -117.463761, + 34.150508 + ], + [ + -117.463881, + 34.150508 + ], + [ + -117.464031, + 34.150533 + ], + [ + -117.464139, + 34.150536 + ], + [ + -117.464519, + 34.150532 + ], + [ + -117.464629, + 34.150518 + ], + [ + -117.46473, + 34.150508 + ], + [ + -117.464869, + 34.150506 + ], + [ + -117.465595, + 34.15052 + ], + [ + -117.465782, + 34.150543 + ], + [ + -117.465874, + 34.150547 + ], + [ + -117.46621, + 34.150552 + ], + [ + -117.466313, + 34.150548 + ], + [ + -117.466365, + 34.150556 + ], + [ + -117.466402, + 34.150578 + ], + [ + -117.466423, + 34.150596 + ], + [ + -117.466438, + 34.150624 + ], + [ + -117.466448, + 34.150656 + ], + [ + -117.466487, + 34.154053 + ] + ] + ] + }, + "properties": { + "name": "Fontana Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35887531, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.472888, + 34.144914 + ], + [ + -117.472942, + 34.144859 + ], + [ + -117.472951, + 34.144851 + ], + [ + -117.474202, + 34.143703 + ], + [ + -117.47421, + 34.143696 + ], + [ + -117.474772, + 34.143171 + ], + [ + -117.473663, + 34.143172 + ], + [ + -117.470833, + 34.143151 + ], + [ + -117.470663, + 34.143442 + ], + [ + -117.47054, + 34.143591 + ], + [ + -117.47043, + 34.143667 + ], + [ + -117.470432, + 34.143791 + ], + [ + -117.47065, + 34.143908 + ], + [ + -117.470891, + 34.144003 + ], + [ + -117.471143, + 34.144042 + ], + [ + -117.471374, + 34.144058 + ], + [ + -117.471503, + 34.14406 + ], + [ + -117.471598, + 34.144102 + ], + [ + -117.471622, + 34.144131 + ], + [ + -117.471646, + 34.14416 + ], + [ + -117.471666, + 34.144208 + ], + [ + -117.471887, + 34.144283 + ], + [ + -117.472113, + 34.144382 + ], + [ + -117.472371, + 34.14453 + ], + [ + -117.472888, + 34.144914 + ] + ] + ] + }, + "properties": { + "name": "Rosena Park East", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35887536, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.472951, + 34.144851 + ], + [ + -117.472819, + 34.144719 + ], + [ + -117.472596, + 34.144605 + ], + [ + -117.472379, + 34.144404 + ], + [ + -117.472173, + 34.144334 + ], + [ + -117.472009, + 34.144137 + ], + [ + -117.471813, + 34.144115 + ], + [ + -117.471723, + 34.14408 + ], + [ + -117.471739, + 34.143975 + ], + [ + -117.471824, + 34.143879 + ], + [ + -117.471966, + 34.14366 + ], + [ + -117.47207, + 34.14365 + ], + [ + -117.472115, + 34.143619 + ], + [ + -117.47215, + 34.143575 + ], + [ + -117.472211, + 34.143517 + ], + [ + -117.472263, + 34.143509 + ], + [ + -117.472285, + 34.143481 + ], + [ + -117.472272, + 34.143448 + ], + [ + -117.472292, + 34.143426 + ], + [ + -117.472289, + 34.143389 + ], + [ + -117.472246, + 34.143353 + ], + [ + -117.47224, + 34.143304 + ], + [ + -117.47248, + 34.143274 + ], + [ + -117.472676, + 34.143257 + ], + [ + -117.472961, + 34.143358 + ], + [ + -117.4734, + 34.143305 + ], + [ + -117.47357, + 34.143336 + ], + [ + -117.473813, + 34.143524 + ], + [ + -117.474202, + 34.143703 + ], + [ + -117.472951, + 34.144851 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35893490, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.441678, + 34.143922 + ], + [ + -117.442295, + 34.1439 + ], + [ + -117.442383, + 34.143998 + ], + [ + -117.442581, + 34.144261 + ], + [ + -117.442959, + 34.144271 + ], + [ + -117.443021, + 34.143463 + ], + [ + -117.442994, + 34.142949 + ], + [ + -117.443179, + 34.142785 + ], + [ + -117.443474, + 34.142195 + ], + [ + -117.443584, + 34.141991 + ], + [ + -117.444121, + 34.141572 + ], + [ + -117.44395, + 34.141328 + ], + [ + -117.444113, + 34.141262 + ], + [ + -117.444777, + 34.141189 + ], + [ + -117.444835, + 34.141805 + ], + [ + -117.444694, + 34.142158 + ], + [ + -117.445059, + 34.14241 + ], + [ + -117.445719, + 34.142195 + ], + [ + -117.446235, + 34.141885 + ], + [ + -117.446477, + 34.14179 + ], + [ + -117.44671, + 34.142144 + ], + [ + -117.446842, + 34.142271 + ], + [ + -117.446855, + 34.142348 + ], + [ + -117.446697, + 34.142504 + ], + [ + -117.446591, + 34.142708 + ], + [ + -117.445623, + 34.142952 + ], + [ + -117.444478, + 34.143608 + ], + [ + -117.444306, + 34.143772 + ], + [ + -117.444258, + 34.14406 + ], + [ + -117.444324, + 34.144242 + ], + [ + -117.444993, + 34.144953 + ], + [ + -117.445279, + 34.145109 + ], + [ + -117.445486, + 34.145281 + ], + [ + -117.44575, + 34.145328 + ], + [ + -117.446041, + 34.145313 + ], + [ + -117.446543, + 34.144909 + ], + [ + -117.446855, + 34.14476 + ], + [ + -117.447049, + 34.144694 + ], + [ + -117.447576, + 34.144684 + ], + [ + -117.447575, + 34.144409 + ], + [ + -117.447692, + 34.144409 + ], + [ + -117.447914, + 34.144348 + ], + [ + -117.448107, + 34.144269 + ], + [ + -117.44834, + 34.144088 + ], + [ + -117.44847, + 34.144333 + ], + [ + -117.448819, + 34.144235 + ], + [ + -117.449417, + 34.144097 + ], + [ + -117.452072, + 34.143896 + ], + [ + -117.452098, + 34.144413 + ], + [ + -117.452032, + 34.144803 + ], + [ + -117.451733, + 34.144792 + ], + [ + -117.451139, + 34.144847 + ], + [ + -117.45087, + 34.145022 + ], + [ + -117.450778, + 34.145058 + ], + [ + -117.450289, + 34.145131 + ], + [ + -117.44973, + 34.145226 + ], + [ + -117.448867, + 34.145459 + ], + [ + -117.448273, + 34.14543 + ], + [ + -117.447947, + 34.145434 + ], + [ + -117.447485, + 34.145477 + ], + [ + -117.447172, + 34.145568 + ], + [ + -117.447075, + 34.145638 + ], + [ + -117.44693, + 34.14586 + ], + [ + -117.447014, + 34.146155 + ], + [ + -117.447221, + 34.146403 + ], + [ + -117.447806, + 34.147084 + ], + [ + -117.448387, + 34.147732 + ], + [ + -117.448643, + 34.148184 + ], + [ + -117.448819, + 34.148796 + ], + [ + -117.449153, + 34.149378 + ], + [ + -117.44876, + 34.14952 + ], + [ + -117.448326, + 34.149634 + ], + [ + -117.447984, + 34.149668 + ], + [ + -117.447688, + 34.149668 + ], + [ + -117.447679, + 34.149185 + ], + [ + -117.447418, + 34.148833 + ], + [ + -117.447053, + 34.14846 + ], + [ + -117.446903, + 34.148228 + ], + [ + -117.446838, + 34.147873 + ], + [ + -117.446677, + 34.147633 + ], + [ + -117.4462, + 34.147167 + ], + [ + -117.445674, + 34.146768 + ], + [ + -117.445429, + 34.146738 + ], + [ + -117.445259, + 34.146746 + ], + [ + -117.444498, + 34.147214 + ], + [ + -117.444768, + 34.147686 + ], + [ + -117.443941, + 34.148172 + ], + [ + -117.442763, + 34.148135 + ], + [ + -117.441124, + 34.148353 + ], + [ + -117.44093, + 34.148374 + ], + [ + -117.440504, + 34.148286 + ], + [ + -117.439575, + 34.148121 + ], + [ + -117.439216, + 34.14819 + ], + [ + -117.438927, + 34.148064 + ], + [ + -117.438597, + 34.147876 + ], + [ + -117.438456, + 34.148013 + ], + [ + -117.438333, + 34.147791 + ], + [ + -117.438298, + 34.147523 + ], + [ + -117.438546, + 34.147516 + ], + [ + -117.438821, + 34.147445 + ], + [ + -117.439169, + 34.147259 + ], + [ + -117.439373, + 34.147542 + ], + [ + -117.439892, + 34.147131 + ], + [ + -117.439946, + 34.147254 + ], + [ + -117.440448, + 34.147394 + ], + [ + -117.441088, + 34.147472 + ], + [ + -117.442059, + 34.147404 + ], + [ + -117.442518, + 34.147361 + ], + [ + -117.442845, + 34.147325 + ], + [ + -117.443064, + 34.147247 + ], + [ + -117.443235, + 34.146935 + ], + [ + -117.443091, + 34.146917 + ], + [ + -117.442932, + 34.146511 + ], + [ + -117.442537, + 34.146017 + ], + [ + -117.442058, + 34.145619 + ], + [ + -117.441548, + 34.145589 + ], + [ + -117.441205, + 34.145633 + ], + [ + -117.440434, + 34.145961 + ], + [ + -117.439959, + 34.146314 + ], + [ + -117.439087, + 34.146609 + ], + [ + -117.438797, + 34.146904 + ], + [ + -117.438436, + 34.147064 + ], + [ + -117.438238, + 34.147061 + ], + [ + -117.437744, + 34.147035 + ], + [ + -117.437855, + 34.146704 + ], + [ + -117.437987, + 34.146453 + ], + [ + -117.438233, + 34.146041 + ], + [ + -117.438629, + 34.145181 + ], + [ + -117.439224, + 34.145239 + ], + [ + -117.440116, + 34.145213 + ], + [ + -117.440128, + 34.144754 + ], + [ + -117.440343, + 34.143488 + ], + [ + -117.440734, + 34.142859 + ], + [ + -117.44063, + 34.142531 + ], + [ + -117.440288, + 34.142149 + ], + [ + -117.440151, + 34.142149 + ], + [ + -117.439463, + 34.142395 + ], + [ + -117.439282, + 34.142418 + ], + [ + -117.438401, + 34.142418 + ], + [ + -117.4384, + 34.142304 + ], + [ + -117.438886, + 34.142307 + ], + [ + -117.439013, + 34.142307 + ], + [ + -117.439721, + 34.142056 + ], + [ + -117.439847, + 34.14198 + ], + [ + -117.439935, + 34.141867 + ], + [ + -117.439184, + 34.139424 + ], + [ + -117.439425, + 34.13933 + ], + [ + -117.439492, + 34.139305 + ], + [ + -117.439537, + 34.13927 + ], + [ + -117.439955, + 34.139097 + ], + [ + -117.44016, + 34.13904 + ], + [ + -117.440365, + 34.139001 + ], + [ + -117.440945, + 34.139595 + ], + [ + -117.441226, + 34.139882 + ], + [ + -117.441412, + 34.140074 + ], + [ + -117.441466, + 34.14013 + ], + [ + -117.441521, + 34.14018 + ], + [ + -117.441638, + 34.140254 + ], + [ + -117.441854, + 34.14025 + ], + [ + -117.441986, + 34.140202 + ], + [ + -117.442126, + 34.140148 + ], + [ + -117.442534, + 34.139992 + ], + [ + -117.442759, + 34.139906 + ], + [ + -117.443334, + 34.139689 + ], + [ + -117.444005, + 34.139433 + ], + [ + -117.445981, + 34.138864 + ], + [ + -117.446264, + 34.139488 + ], + [ + -117.447014, + 34.13952 + ], + [ + -117.447345, + 34.139459 + ], + [ + -117.447602, + 34.139019 + ], + [ + -117.448022, + 34.13811 + ], + [ + -117.448296, + 34.138112 + ], + [ + -117.448571, + 34.13812 + ], + [ + -117.448897, + 34.138151 + ], + [ + -117.448891, + 34.138946 + ], + [ + -117.448891, + 34.139491 + ], + [ + -117.448782, + 34.140086 + ], + [ + -117.448796, + 34.140427 + ], + [ + -117.448617, + 34.140943 + ], + [ + -117.448719, + 34.141298 + ], + [ + -117.448814, + 34.141508 + ], + [ + -117.448458, + 34.141418 + ], + [ + -117.447859, + 34.14194 + ], + [ + -117.447711, + 34.142176 + ], + [ + -117.447637, + 34.142421 + ], + [ + -117.447609, + 34.142663 + ], + [ + -117.447567, + 34.142788 + ], + [ + -117.447631, + 34.142936 + ], + [ + -117.44788, + 34.142998 + ], + [ + -117.447863, + 34.143205 + ], + [ + -117.447979, + 34.143511 + ], + [ + -117.448233, + 34.143942 + ], + [ + -117.448046, + 34.1441 + ], + [ + -117.447902, + 34.144184 + ], + [ + -117.447627, + 34.144254 + ], + [ + -117.447384, + 34.144254 + ], + [ + -117.447169, + 34.143178 + ], + [ + -117.447173, + 34.142802 + ], + [ + -117.447208, + 34.142482 + ], + [ + -117.447278, + 34.142316 + ], + [ + -117.446919, + 34.14205 + ], + [ + -117.446694, + 34.141779 + ], + [ + -117.446595, + 34.141599 + ], + [ + -117.446849, + 34.140914 + ], + [ + -117.447155, + 34.139963 + ], + [ + -117.447053, + 34.139794 + ], + [ + -117.446747, + 34.139631 + ], + [ + -117.446514, + 34.139587 + ], + [ + -117.446292, + 34.139678 + ], + [ + -117.446035, + 34.13994 + ], + [ + -117.445845, + 34.140701 + ], + [ + -117.445528, + 34.140628 + ], + [ + -117.445105, + 34.140631 + ], + [ + -117.444186, + 34.140797 + ], + [ + -117.444221, + 34.141068 + ], + [ + -117.44389, + 34.141141 + ], + [ + -117.443577, + 34.141263 + ], + [ + -117.443257, + 34.141196 + ], + [ + -117.442566, + 34.141056 + ], + [ + -117.442031, + 34.141053 + ], + [ + -117.441513, + 34.141225 + ], + [ + -117.441312, + 34.141351 + ], + [ + -117.441196, + 34.141438 + ], + [ + -117.441112, + 34.141552 + ], + [ + -117.441105, + 34.141773 + ], + [ + -117.441739, + 34.142741 + ], + [ + -117.441358, + 34.143152 + ], + [ + -117.441196, + 34.143522 + ], + [ + -117.441126, + 34.143846 + ], + [ + -117.441158, + 34.144703 + ], + [ + -117.441728, + 34.144671 + ], + [ + -117.441678, + 34.143922 + ] + ] + ] + }, + "properties": { + "name": "Sierra Lakes", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 36055316, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.45571, + 34.14304 + ], + [ + -117.455341, + 34.143054 + ], + [ + -117.453787, + 34.143054 + ], + [ + -117.453701, + 34.142983 + ], + [ + -117.453727, + 34.139801 + ], + [ + -117.453744, + 34.139516 + ], + [ + -117.453744, + 34.139296 + ], + [ + -117.453882, + 34.139182 + ], + [ + -117.454088, + 34.13919 + ], + [ + -117.454173, + 34.139204 + ], + [ + -117.454448, + 34.139211 + ], + [ + -117.454508, + 34.13919 + ], + [ + -117.454714, + 34.13919 + ], + [ + -117.45504, + 34.139211 + ], + [ + -117.455306, + 34.139239 + ], + [ + -117.45571, + 34.139339 + ], + [ + -117.45571, + 34.14304 + ] + ] + ] + }, + "properties": { + "name": "Ralph M. Lewis Sports Complex", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 36344702, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.586635, + 34.151728 + ], + [ + -117.584531, + 34.151726 + ], + [ + -117.584533, + 34.150607 + ], + [ + -117.586637, + 34.15061 + ], + [ + -117.586635, + 34.151728 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 37870117, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.568803, + 34.114188 + ], + [ + -117.567596, + 34.114198 + ], + [ + -117.567571, + 34.114198 + ], + [ + -117.56756, + 34.113905 + ], + [ + -117.56744, + 34.113438 + ], + [ + -117.567274, + 34.113074 + ], + [ + -117.56722, + 34.11293 + ], + [ + -117.567226, + 34.112877 + ], + [ + -117.567265, + 34.11284 + ], + [ + -117.56836, + 34.11258 + ], + [ + -117.568365, + 34.1126 + ], + [ + -117.568377, + 34.112644 + ], + [ + -117.568803, + 34.114188 + ] + ] + ] + }, + "properties": { + "name": "Spruce Avenue Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 37870118, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.56217, + 34.110351 + ], + [ + -117.562589, + 34.109855 + ], + [ + -117.562665, + 34.109614 + ], + [ + -117.563748, + 34.109822 + ], + [ + -117.563851, + 34.109562 + ], + [ + -117.564347, + 34.109593 + ], + [ + -117.564358, + 34.10943 + ], + [ + -117.564433, + 34.109389 + ], + [ + -117.564491, + 34.109223 + ], + [ + -117.564482, + 34.108872 + ], + [ + -117.564512, + 34.108752 + ], + [ + -117.564045, + 34.108688 + ], + [ + -117.563524, + 34.108646 + ], + [ + -117.563094, + 34.108635 + ], + [ + -117.56256, + 34.108634 + ], + [ + -117.562281, + 34.108641 + ], + [ + -117.562091, + 34.108673 + ], + [ + -117.561784, + 34.108687 + ], + [ + -117.561696, + 34.108672 + ], + [ + -117.561616, + 34.108674 + ], + [ + -117.561524, + 34.108786 + ], + [ + -117.561529, + 34.10936 + ], + [ + -117.561551, + 34.109523 + ], + [ + -117.561596, + 34.109668 + ], + [ + -117.561638, + 34.109783 + ], + [ + -117.561699, + 34.109887 + ], + [ + -117.561815, + 34.110048 + ], + [ + -117.56191, + 34.110148 + ], + [ + -117.56202, + 34.110247 + ], + [ + -117.56217, + 34.110351 + ] + ] + ] + }, + "properties": { + "name": "Ralph M. Lewis Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 37876364, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.54932, + 34.11704 + ], + [ + -117.549465, + 34.117005 + ], + [ + -117.550922, + 34.115784 + ], + [ + -117.550894, + 34.115751 + ], + [ + -117.550842, + 34.11567 + ], + [ + -117.550614, + 34.1154 + ], + [ + -117.550551, + 34.11533 + ], + [ + -117.550325, + 34.115078 + ], + [ + -117.550205, + 34.114984 + ], + [ + -117.550077, + 34.11483 + ], + [ + -117.54936, + 34.115262 + ], + [ + -117.54932, + 34.11704 + ] + ] + ] + }, + "properties": { + "name": "Mountain View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 37876372, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.530716, + 34.11651 + ], + [ + -117.530709, + 34.117485 + ], + [ + -117.530481, + 34.117482 + ], + [ + -117.530459, + 34.117524 + ], + [ + -117.530686, + 34.117891 + ], + [ + -117.530565, + 34.11808 + ], + [ + -117.530166, + 34.118324 + ], + [ + -117.529926, + 34.118587 + ], + [ + -117.529802, + 34.118828 + ], + [ + -117.529688, + 34.118954 + ], + [ + -117.529642, + 34.118969 + ], + [ + -117.529613, + 34.118975 + ], + [ + -117.529543, + 34.118965 + ], + [ + -117.52946, + 34.118987 + ], + [ + -117.52953, + 34.119187 + ], + [ + -117.52967, + 34.119091 + ], + [ + -117.530053, + 34.118795 + ], + [ + -117.530567, + 34.118848 + ], + [ + -117.530753, + 34.118849 + ], + [ + -117.530927, + 34.11881 + ], + [ + -117.531461, + 34.118587 + ], + [ + -117.531908, + 34.118488 + ], + [ + -117.531986, + 34.118488 + ], + [ + -117.532021, + 34.118472 + ], + [ + -117.531997, + 34.118408 + ], + [ + -117.531948, + 34.118337 + ], + [ + -117.531867, + 34.118273 + ], + [ + -117.531821, + 34.118163 + ], + [ + -117.531823, + 34.11809 + ], + [ + -117.531849, + 34.118023 + ], + [ + -117.531923, + 34.117925 + ], + [ + -117.531958, + 34.117863 + ], + [ + -117.531942, + 34.116638 + ], + [ + -117.531838, + 34.11653 + ], + [ + -117.531769, + 34.116529 + ], + [ + -117.531731, + 34.116514 + ], + [ + -117.531524, + 34.116517 + ], + [ + -117.531332, + 34.116516 + ], + [ + -117.530716, + 34.11651 + ] + ] + ] + }, + "properties": { + "name": "Victoria Arbors Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 37905435, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.558705, + 34.113074 + ], + [ + -117.558703, + 34.113418 + ], + [ + -117.560004, + 34.113367 + ], + [ + -117.561373, + 34.113556 + ], + [ + -117.561956, + 34.113474 + ], + [ + -117.563047, + 34.11334 + ], + [ + -117.563056, + 34.113225 + ], + [ + -117.562526, + 34.112924 + ], + [ + -117.562087, + 34.112899 + ], + [ + -117.560732, + 34.112493 + ], + [ + -117.560397, + 34.112824 + ], + [ + -117.559652, + 34.113043 + ], + [ + -117.558705, + 34.113074 + ] + ] + ] + }, + "properties": { + "name": "West Greenway Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 37927749, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.513047, + 34.108039 + ], + [ + -117.513063, + 34.108008 + ], + [ + -117.513101, + 34.10792 + ], + [ + -117.51313, + 34.107849 + ], + [ + -117.513142, + 34.107819 + ], + [ + -117.513151, + 34.107789 + ], + [ + -117.51317, + 34.107714 + ], + [ + -117.513219, + 34.107486 + ], + [ + -117.513281, + 34.107189 + ], + [ + -117.513285, + 34.107156 + ], + [ + -117.513287, + 34.107118 + ], + [ + -117.513281, + 34.107083 + ], + [ + -117.513268, + 34.107059 + ], + [ + -117.513243, + 34.107036 + ], + [ + -117.513211, + 34.107021 + ], + [ + -117.513171, + 34.107011 + ], + [ + -117.513106, + 34.107006 + ], + [ + -117.513029, + 34.107006 + ], + [ + -117.512476, + 34.107011 + ], + [ + -117.512414, + 34.107015 + ], + [ + -117.512338, + 34.107024 + ], + [ + -117.51229, + 34.107033 + ], + [ + -117.512242, + 34.10705 + ], + [ + -117.512216, + 34.107073 + ], + [ + -117.512199, + 34.107102 + ], + [ + -117.512192, + 34.107134 + ], + [ + -117.512195, + 34.107175 + ], + [ + -117.512217, + 34.10724 + ], + [ + -117.51224, + 34.107302 + ], + [ + -117.512282, + 34.107386 + ], + [ + -117.512341, + 34.107484 + ], + [ + -117.512389, + 34.107558 + ], + [ + -117.512429, + 34.107612 + ], + [ + -117.512538, + 34.107749 + ], + [ + -117.512767, + 34.107979 + ], + [ + -117.512858, + 34.108063 + ], + [ + -117.512884, + 34.108079 + ], + [ + -117.512912, + 34.108087 + ], + [ + -117.512934, + 34.10809 + ], + [ + -117.512963, + 34.108089 + ], + [ + -117.512991, + 34.108081 + ], + [ + -117.513011, + 34.108071 + ], + [ + -117.51303, + 34.108058 + ], + [ + -117.513047, + 34.108039 + ] + ] + ] + }, + "properties": { + "name": "Patricia M. Murray Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38133303, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.492617, + 34.117449 + ], + [ + -117.492463, + 34.117432 + ], + [ + -117.492317, + 34.117387 + ], + [ + -117.492186, + 34.117318 + ], + [ + -117.492076, + 34.117227 + ], + [ + -117.491993, + 34.117118 + ], + [ + -117.49194, + 34.116997 + ], + [ + -117.491919, + 34.116869 + ], + [ + -117.491933, + 34.116741 + ], + [ + -117.491979, + 34.116618 + ], + [ + -117.492056, + 34.116506 + ], + [ + -117.49216, + 34.116411 + ], + [ + -117.492287, + 34.116337 + ], + [ + -117.49243, + 34.116286 + ], + [ + -117.492583, + 34.116263 + ], + [ + -117.492739, + 34.116267 + ], + [ + -117.49287, + 34.116294 + ], + [ + -117.492994, + 34.11634 + ], + [ + -117.493105, + 34.116405 + ], + [ + -117.493199, + 34.116486 + ], + [ + -117.493273, + 34.11658 + ], + [ + -117.493324, + 34.116684 + ], + [ + -117.493351, + 34.116794 + ], + [ + -117.493352, + 34.116906 + ], + [ + -117.493328, + 34.117016 + ], + [ + -117.493279, + 34.117121 + ], + [ + -117.493207, + 34.117216 + ], + [ + -117.493115, + 34.117299 + ], + [ + -117.493006, + 34.117365 + ], + [ + -117.492883, + 34.117414 + ], + [ + -117.492752, + 34.117442 + ], + [ + -117.492617, + 34.117449 + ] + ] + ] + }, + "properties": { + "name": "Heritage Circle Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38320207, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.58263, + 34.131268 + ], + [ + -117.58262, + 34.131076 + ], + [ + -117.58267, + 34.13091 + ], + [ + -117.582662, + 34.130224 + ], + [ + -117.58265, + 34.129275 + ], + [ + -117.583419, + 34.129273 + ], + [ + -117.583726, + 34.129273 + ], + [ + -117.584609, + 34.129278 + ], + [ + -117.584632, + 34.131157 + ], + [ + -117.584626, + 34.131189 + ], + [ + -117.584598, + 34.131207 + ], + [ + -117.584574, + 34.131222 + ], + [ + -117.584366, + 34.131253 + ], + [ + -117.58263, + 34.131268 + ] + ] + ] + }, + "properties": { + "name": "Hermosa Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38561689, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.611086, + 34.114488 + ], + [ + -117.613922, + 34.114488 + ], + [ + -117.614242, + 34.114399 + ], + [ + -117.61436, + 34.114667 + ], + [ + -117.613811, + 34.116021 + ], + [ + -117.613463, + 34.116024 + ], + [ + -117.613503, + 34.119656 + ], + [ + -117.613806, + 34.119658 + ], + [ + -117.613817, + 34.120631 + ], + [ + -117.613783, + 34.120588 + ], + [ + -117.613747, + 34.12056 + ], + [ + -117.613657, + 34.120531 + ], + [ + -117.612966, + 34.120531 + ], + [ + -117.612987, + 34.121449 + ], + [ + -117.611048, + 34.121447 + ], + [ + -117.611086, + 34.114488 + ] + ] + ] + }, + "properties": { + "name": "Red Hill Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38561694, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.612245, + 34.117639 + ], + [ + -117.612204, + 34.117668 + ], + [ + -117.612135, + 34.117685 + ], + [ + -117.611233, + 34.117687 + ], + [ + -117.611189, + 34.117517 + ], + [ + -117.611177, + 34.11738 + ], + [ + -117.611191, + 34.117249 + ], + [ + -117.611254, + 34.117104 + ], + [ + -117.611366, + 34.116969 + ], + [ + -117.61148, + 34.116874 + ], + [ + -117.611635, + 34.116782 + ], + [ + -117.611826, + 34.116733 + ], + [ + -117.612071, + 34.116731 + ], + [ + -117.612243, + 34.116758 + ], + [ + -117.612299, + 34.116789 + ], + [ + -117.612276, + 34.117233 + ], + [ + -117.612305, + 34.117351 + ], + [ + -117.612293, + 34.117523 + ], + [ + -117.612245, + 34.117639 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38561700, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.613609, + 34.12032 + ], + [ + -117.612415, + 34.120446 + ], + [ + -117.612338, + 34.120426 + ], + [ + -117.612296, + 34.120393 + ], + [ + -117.612263, + 34.120349 + ], + [ + -117.612253, + 34.120299 + ], + [ + -117.612404, + 34.119335 + ], + [ + -117.612578, + 34.119324 + ], + [ + -117.612778, + 34.11933 + ], + [ + -117.612968, + 34.119382 + ], + [ + -117.613186, + 34.11948 + ], + [ + -117.613342, + 34.119611 + ], + [ + -117.613468, + 34.119762 + ], + [ + -117.613543, + 34.119917 + ], + [ + -117.613585, + 34.120052 + ], + [ + -117.613609, + 34.12032 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38561706, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.613312, + 34.119011 + ], + [ + -117.612598, + 34.119013 + ], + [ + -117.612595, + 34.117969 + ], + [ + -117.613309, + 34.117967 + ], + [ + -117.613312, + 34.119011 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38561707, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.613307, + 34.117808 + ], + [ + -117.612593, + 34.11781 + ], + [ + -117.61259, + 34.116767 + ], + [ + -117.613304, + 34.116765 + ], + [ + -117.613307, + 34.117808 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38628915, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.555988, + 34.133911 + ], + [ + -117.556202, + 34.133482 + ], + [ + -117.556295, + 34.132737 + ], + [ + -117.556287, + 34.132403 + ], + [ + -117.556292, + 34.13225 + ], + [ + -117.5558, + 34.132211 + ], + [ + -117.55509, + 34.132116 + ], + [ + -117.554581, + 34.13205 + ], + [ + -117.554153, + 34.132005 + ], + [ + -117.553825, + 34.131945 + ], + [ + -117.553366, + 34.131919 + ], + [ + -117.552952, + 34.131815 + ], + [ + -117.552545, + 34.131726 + ], + [ + -117.552271, + 34.13163 + ], + [ + -117.552013, + 34.131577 + ], + [ + -117.551966, + 34.13165 + ], + [ + -117.551929, + 34.131746 + ], + [ + -117.551889, + 34.131907 + ], + [ + -117.551881, + 34.132132 + ], + [ + -117.551904, + 34.132272 + ], + [ + -117.551933, + 34.132391 + ], + [ + -117.551996, + 34.132543 + ], + [ + -117.552075, + 34.132688 + ], + [ + -117.552153, + 34.13279 + ], + [ + -117.552236, + 34.132882 + ], + [ + -117.552362, + 34.132995 + ], + [ + -117.552519, + 34.133112 + ], + [ + -117.552695, + 34.1332 + ], + [ + -117.552853, + 34.133263 + ], + [ + -117.553075, + 34.133321 + ], + [ + -117.553186, + 34.133338 + ], + [ + -117.553313, + 34.133352 + ], + [ + -117.553538, + 34.133366 + ], + [ + -117.553844, + 34.133393 + ], + [ + -117.554239, + 34.133443 + ], + [ + -117.554644, + 34.133518 + ], + [ + -117.554978, + 34.133595 + ], + [ + -117.555302, + 34.133686 + ], + [ + -117.555663, + 34.133806 + ], + [ + -117.555988, + 34.133911 + ] + ] + ] + }, + "properties": { + "name": "Kenyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38652871, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.549947, + 34.128407 + ], + [ + -117.549718, + 34.128453 + ], + [ + -117.549446, + 34.128492 + ], + [ + -117.549126, + 34.128543 + ], + [ + -117.548625, + 34.128535 + ], + [ + -117.548591, + 34.128535 + ], + [ + -117.548433, + 34.128529 + ], + [ + -117.54835, + 34.128525 + ], + [ + -117.548297, + 34.128115 + ], + [ + -117.548177, + 34.127752 + ], + [ + -117.548105, + 34.127574 + ], + [ + -117.548048, + 34.127541 + ], + [ + -117.547931, + 34.12745 + ], + [ + -117.547944, + 34.127262 + ], + [ + -117.548208, + 34.126813 + ], + [ + -117.54826, + 34.126655 + ], + [ + -117.548437, + 34.126528 + ], + [ + -117.54863, + 34.126485 + ], + [ + -117.548792, + 34.126396 + ], + [ + -117.548987, + 34.126365 + ], + [ + -117.549088, + 34.126417 + ], + [ + -117.549087, + 34.1265 + ], + [ + -117.549657, + 34.12651 + ], + [ + -117.549741, + 34.12668 + ], + [ + -117.549658, + 34.126843 + ], + [ + -117.549674, + 34.127007 + ], + [ + -117.549686, + 34.127164 + ], + [ + -117.549664, + 34.127285 + ], + [ + -117.549607, + 34.127357 + ], + [ + -117.549596, + 34.1274 + ], + [ + -117.549581, + 34.127461 + ], + [ + -117.549533, + 34.127534 + ], + [ + -117.549488, + 34.127612 + ], + [ + -117.549451, + 34.127732 + ], + [ + -117.549458, + 34.127857 + ], + [ + -117.549489, + 34.127925 + ], + [ + -117.549531, + 34.128 + ], + [ + -117.549601, + 34.128085 + ], + [ + -117.549699, + 34.128159 + ], + [ + -117.549788, + 34.128234 + ], + [ + -117.549878, + 34.128323 + ], + [ + -117.549947, + 34.128407 + ] + ] + ] + }, + "properties": { + "name": "Vintage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38652872, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.549241, + 34.124989 + ], + [ + -117.550081, + 34.125002 + ], + [ + -117.550316, + 34.125049 + ], + [ + -117.550508, + 34.125051 + ], + [ + -117.550519, + 34.124757 + ], + [ + -117.550528, + 34.124643 + ], + [ + -117.550552, + 34.124362 + ], + [ + -117.550751, + 34.123223 + ], + [ + -117.550702, + 34.123168 + ], + [ + -117.550552, + 34.123139 + ], + [ + -117.550378, + 34.123119 + ], + [ + -117.550197, + 34.123114 + ], + [ + -117.549994, + 34.123131 + ], + [ + -117.549751, + 34.123174 + ], + [ + -117.549539, + 34.123239 + ], + [ + -117.549395, + 34.123258 + ], + [ + -117.549242, + 34.123258 + ], + [ + -117.549283, + 34.123309 + ], + [ + -117.549297, + 34.123348 + ], + [ + -117.549284, + 34.12355 + ], + [ + -117.549293, + 34.123818 + ], + [ + -117.549266, + 34.123885 + ], + [ + -117.549281, + 34.124208 + ], + [ + -117.549317, + 34.124272 + ], + [ + -117.549338, + 34.124561 + ], + [ + -117.549313, + 34.124681 + ], + [ + -117.549243, + 34.124949 + ], + [ + -117.549241, + 34.124989 + ] + ] + ] + }, + "properties": { + "name": "Ellena Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38655314, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.530901, + 34.130491 + ], + [ + -117.530728, + 34.130587 + ], + [ + -117.530715, + 34.130536 + ], + [ + -117.53043, + 34.130342 + ], + [ + -117.530256, + 34.130285 + ], + [ + -117.530101, + 34.130412 + ], + [ + -117.529705, + 34.130307 + ], + [ + -117.529452, + 34.130246 + ], + [ + -117.529375, + 34.130024 + ], + [ + -117.529284, + 34.129835 + ], + [ + -117.529175, + 34.129729 + ], + [ + -117.529179, + 34.128445 + ], + [ + -117.529305, + 34.128436 + ], + [ + -117.52951, + 34.128436 + ], + [ + -117.529652, + 34.128422 + ], + [ + -117.529793, + 34.12838 + ], + [ + -117.529928, + 34.12833 + ], + [ + -117.529955, + 34.128327 + ], + [ + -117.529982, + 34.128331 + ], + [ + -117.530004, + 34.128338 + ], + [ + -117.530029, + 34.128356 + ], + [ + -117.530049, + 34.128378 + ], + [ + -117.530073, + 34.12842 + ], + [ + -117.530151, + 34.128538 + ], + [ + -117.53027, + 34.128693 + ], + [ + -117.53039, + 34.128816 + ], + [ + -117.530519, + 34.128931 + ], + [ + -117.53069, + 34.129055 + ], + [ + -117.5309, + 34.129178 + ], + [ + -117.531084, + 34.129263 + ], + [ + -117.531221, + 34.129315 + ], + [ + -117.531323, + 34.129348 + ], + [ + -117.531325, + 34.130367 + ], + [ + -117.531339, + 34.130415 + ], + [ + -117.531092, + 34.130438 + ], + [ + -117.530901, + 34.130491 + ] + ] + ] + }, + "properties": { + "name": "Windrows Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38656624, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.565926, + 34.11792 + ], + [ + -117.565044, + 34.118092 + ], + [ + -117.564623, + 34.118169 + ], + [ + -117.564402, + 34.118215 + ], + [ + -117.564231, + 34.116853 + ], + [ + -117.564483, + 34.116931 + ], + [ + -117.565659, + 34.116903 + ], + [ + -117.565926, + 34.11792 + ] + ] + ] + }, + "properties": { + "name": "Coyote Canyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38857150, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.519163, + 34.109716 + ], + [ + -117.518864, + 34.109726 + ], + [ + -117.518551, + 34.109754 + ], + [ + -117.518218, + 34.109804 + ], + [ + -117.516973, + 34.110125 + ], + [ + -117.516987, + 34.109342 + ], + [ + -117.517691, + 34.108758 + ], + [ + -117.519185, + 34.10877 + ], + [ + -117.519163, + 34.109716 + ] + ] + ] + }, + "properties": { + "name": "Garcia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38899006, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.558332, + 34.113376 + ], + [ + -117.55833, + 34.113119 + ], + [ + -117.558363, + 34.113119 + ], + [ + -117.558353, + 34.112893 + ], + [ + -117.558348, + 34.112781 + ], + [ + -117.558335, + 34.112595 + ], + [ + -117.558326, + 34.112479 + ], + [ + -117.558293, + 34.112299 + ], + [ + -117.558174, + 34.111772 + ], + [ + -117.558179, + 34.111624 + ], + [ + -117.558142, + 34.111456 + ], + [ + -117.557322, + 34.111599 + ], + [ + -117.557412, + 34.111932 + ], + [ + -117.557215, + 34.112063 + ], + [ + -117.557022, + 34.112093 + ], + [ + -117.557015, + 34.11206 + ], + [ + -117.556682, + 34.112116 + ], + [ + -117.556512, + 34.112131 + ], + [ + -117.556417, + 34.112169 + ], + [ + -117.556276, + 34.112378 + ], + [ + -117.555982, + 34.113035 + ], + [ + -117.555754, + 34.113549 + ], + [ + -117.555798, + 34.113634 + ], + [ + -117.556618, + 34.113385 + ], + [ + -117.556783, + 34.113356 + ], + [ + -117.558127, + 34.113352 + ], + [ + -117.558332, + 34.113376 + ] + ] + ] + }, + "properties": { + "name": "Milliken Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40040134, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.599738, + 34.084704 + ], + [ + -117.599736, + 34.084338 + ], + [ + -117.599735, + 34.083867 + ], + [ + -117.59969, + 34.083731 + ], + [ + -117.599689, + 34.083705 + ], + [ + -117.599686, + 34.08362 + ], + [ + -117.597826, + 34.083627 + ], + [ + -117.597829, + 34.084678 + ], + [ + -117.599738, + 34.084704 + ] + ] + ] + }, + "properties": { + "name": "Golden Oak Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40055980, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.532308, + 34.120839 + ], + [ + -117.530235, + 34.12085 + ], + [ + -117.530238, + 34.120985 + ], + [ + -117.531107, + 34.121258 + ], + [ + -117.531474, + 34.121356 + ], + [ + -117.532068, + 34.121462 + ], + [ + -117.533002, + 34.121506 + ], + [ + -117.534941, + 34.12149 + ], + [ + -117.534953, + 34.119676 + ], + [ + -117.532304, + 34.119674 + ], + [ + -117.532308, + 34.120839 + ] + ] + ] + }, + "properties": { + "name": "Joseph Filippi Winery", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40497290, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.641496, + 34.125176 + ], + [ + -117.641464, + 34.121664 + ], + [ + -117.63661, + 34.121637 + ], + [ + -117.636609, + 34.121444 + ], + [ + -117.636627, + 34.11899 + ], + [ + -117.636893, + 34.118987 + ], + [ + -117.6369, + 34.11804 + ], + [ + -117.632934, + 34.118051 + ], + [ + -117.632934, + 34.118438 + ], + [ + -117.62494, + 34.118433 + ], + [ + -117.624871, + 34.118654 + ], + [ + -117.623467, + 34.118656 + ], + [ + -117.623465, + 34.120927 + ], + [ + -117.62346, + 34.121415 + ], + [ + -117.624877, + 34.121418 + ], + [ + -117.624835, + 34.124229 + ], + [ + -117.624833, + 34.1247 + ], + [ + -117.625111, + 34.124475 + ], + [ + -117.625664, + 34.124543 + ], + [ + -117.632228, + 34.125356 + ], + [ + -117.632253, + 34.125188 + ], + [ + -117.632586, + 34.125193 + ], + [ + -117.641496, + 34.125176 + ] + ] + ] + }, + "properties": { + "name": "Upland Hills Country Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40549523, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.57692, + 33.982479 + ], + [ + -117.575926, + 33.982807 + ], + [ + -117.5759, + 33.979451 + ], + [ + -117.576003, + 33.979372 + ], + [ + -117.576634, + 33.97938 + ], + [ + -117.577044, + 33.97934 + ], + [ + -117.577172, + 33.979393 + ], + [ + -117.57723, + 33.97977 + ], + [ + -117.577264, + 33.980329 + ], + [ + -117.577355, + 33.980602 + ], + [ + -117.577851, + 33.981671 + ], + [ + -117.57782, + 33.981755 + ], + [ + -117.577172, + 33.981947 + ], + [ + -117.576886, + 33.981915 + ], + [ + -117.576802, + 33.981963 + ], + [ + -117.576726, + 33.981905 + ], + [ + -117.576718, + 33.982065 + ], + [ + -117.576844, + 33.982256 + ], + [ + -117.57692, + 33.982479 + ] + ] + ] + }, + "properties": { + "name": "Orchard Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40598097, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.599578, + 34.024297 + ], + [ + -117.597567, + 34.02427 + ], + [ + -117.59755, + 34.019279 + ], + [ + -117.599619, + 34.019299 + ], + [ + -117.599578, + 34.024297 + ] + ] + ] + }, + "properties": { + "name": "Westwind Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40790647, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.588834, + 33.972734 + ], + [ + -117.588824, + 33.972525 + ], + [ + -117.588324, + 33.972289 + ], + [ + -117.588588, + 33.971967 + ], + [ + -117.588792, + 33.971783 + ], + [ + -117.588973, + 33.971643 + ], + [ + -117.589183, + 33.971504 + ], + [ + -117.589468, + 33.971369 + ], + [ + -117.589813, + 33.97124 + ], + [ + -117.591702, + 33.970668 + ], + [ + -117.591877, + 33.970642 + ], + [ + -117.591975, + 33.970576 + ], + [ + -117.592007, + 33.970469 + ], + [ + -117.592004, + 33.970377 + ], + [ + -117.592935, + 33.970389 + ], + [ + -117.592945, + 33.971393 + ], + [ + -117.592837, + 33.971424 + ], + [ + -117.590222, + 33.972246 + ], + [ + -117.589186, + 33.972585 + ], + [ + -117.589129, + 33.97264 + ], + [ + -117.588834, + 33.972734 + ] + ] + ] + }, + "properties": { + "name": "James C. Huber Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40796264, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.581745, + 33.956843 + ], + [ + -117.581776, + 33.956254 + ], + [ + -117.581487, + 33.956318 + ], + [ + -117.581428, + 33.956312 + ], + [ + -117.581384, + 33.956302 + ], + [ + -117.581345, + 33.956287 + ], + [ + -117.581313, + 33.956266 + ], + [ + -117.581275, + 33.956223 + ], + [ + -117.581256, + 33.956192 + ], + [ + -117.581255, + 33.956126 + ], + [ + -117.581238, + 33.956017 + ], + [ + -117.581222, + 33.95596 + ], + [ + -117.581141, + 33.955792 + ], + [ + -117.581042, + 33.955624 + ], + [ + -117.580483, + 33.954754 + ], + [ + -117.580216, + 33.954279 + ], + [ + -117.580168, + 33.954152 + ], + [ + -117.580135, + 33.954022 + ], + [ + -117.580115, + 33.953845 + ], + [ + -117.580106, + 33.953606 + ], + [ + -117.580011, + 33.953532 + ], + [ + -117.579014, + 33.953536 + ], + [ + -117.579024, + 33.953942 + ], + [ + -117.578997, + 33.95419 + ], + [ + -117.578937, + 33.954352 + ], + [ + -117.578777, + 33.954623 + ], + [ + -117.578913, + 33.954721 + ], + [ + -117.579022, + 33.954826 + ], + [ + -117.579139, + 33.955041 + ], + [ + -117.579184, + 33.955169 + ], + [ + -117.579198, + 33.955207 + ], + [ + -117.579207, + 33.955486 + ], + [ + -117.579557, + 33.95548 + ], + [ + -117.579553, + 33.957 + ], + [ + -117.579854, + 33.957004 + ], + [ + -117.579943, + 33.956847 + ], + [ + -117.580088, + 33.956847 + ], + [ + -117.581745, + 33.956843 + ] + ] + ] + }, + "properties": { + "name": "McCune Family Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40796347, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.590616, + 33.954728 + ], + [ + -117.590625, + 33.954419 + ], + [ + -117.590642, + 33.954309 + ], + [ + -117.590786, + 33.953808 + ], + [ + -117.590896, + 33.953555 + ], + [ + -117.590877, + 33.953477 + ], + [ + -117.590549, + 33.953319 + ], + [ + -117.590338, + 33.953191 + ], + [ + -117.590133, + 33.953038 + ], + [ + -117.589887, + 33.952814 + ], + [ + -117.589466, + 33.952359 + ], + [ + -117.589385, + 33.952271 + ], + [ + -117.587891, + 33.953193 + ], + [ + -117.588256, + 33.953739 + ], + [ + -117.588408, + 33.954013 + ], + [ + -117.588529, + 33.954381 + ], + [ + -117.588583, + 33.954749 + ], + [ + -117.58867, + 33.954806 + ], + [ + -117.590535, + 33.954799 + ], + [ + -117.590616, + 33.954728 + ] + ] + ] + }, + "properties": { + "name": "McCune Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40796404, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.571406, + 33.967983 + ], + [ + -117.571401, + 33.964547 + ], + [ + -117.567282, + 33.964539 + ], + [ + -117.567176, + 33.964621 + ], + [ + -117.567178, + 33.967028 + ], + [ + -117.567276, + 33.967111 + ], + [ + -117.567548, + 33.96711 + ], + [ + -117.567883, + 33.967131 + ], + [ + -117.568046, + 33.967161 + ], + [ + -117.568369, + 33.967208 + ], + [ + -117.568698, + 33.967262 + ], + [ + -117.569007, + 33.967348 + ], + [ + -117.569322, + 33.967452 + ], + [ + -117.569681, + 33.967601 + ], + [ + -117.570084, + 33.967746 + ], + [ + -117.570433, + 33.967844 + ], + [ + -117.570735, + 33.967905 + ], + [ + -117.57109, + 33.967955 + ], + [ + -117.571406, + 33.967983 + ] + ] + ] + }, + "properties": { + "name": "Harada Heritage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40796428, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.580098, + 33.967108 + ], + [ + -117.580917, + 33.967109 + ], + [ + -117.580906, + 33.96463 + ], + [ + -117.580862, + 33.964584 + ], + [ + -117.580783, + 33.964571 + ], + [ + -117.58033, + 33.964617 + ], + [ + -117.579038, + 33.964611 + ], + [ + -117.578964, + 33.964641 + ], + [ + -117.578874, + 33.964738 + ], + [ + -117.578474, + 33.96517 + ], + [ + -117.578454, + 33.965218 + ], + [ + -117.578472, + 33.96526 + ], + [ + -117.579019, + 33.965635 + ], + [ + -117.579497, + 33.965978 + ], + [ + -117.579701, + 33.966178 + ], + [ + -117.579862, + 33.966375 + ], + [ + -117.579999, + 33.966635 + ], + [ + -117.580065, + 33.96686 + ], + [ + -117.580087, + 33.966981 + ], + [ + -117.580098, + 33.967108 + ] + ] + ] + }, + "properties": { + "name": "Cedar Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40876934, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.688929, + 33.997105 + ], + [ + -117.68883, + 33.997169 + ], + [ + -117.678166, + 33.997152 + ], + [ + -117.678194, + 33.994581 + ], + [ + -117.678195, + 33.994512 + ], + [ + -117.678198, + 33.994253 + ], + [ + -117.678198, + 33.994209 + ], + [ + -117.678573, + 33.994207 + ], + [ + -117.678757, + 33.994196 + ], + [ + -117.678942, + 33.994166 + ], + [ + -117.679128, + 33.994118 + ], + [ + -117.67925, + 33.99407 + ], + [ + -117.67936, + 33.994012 + ], + [ + -117.679553, + 33.993904 + ], + [ + -117.679679, + 33.993801 + ], + [ + -117.679889, + 33.993591 + ], + [ + -117.680334, + 33.993121 + ], + [ + -117.680604, + 33.992913 + ], + [ + -117.680891, + 33.992727 + ], + [ + -117.681217, + 33.992554 + ], + [ + -117.681393, + 33.992484 + ], + [ + -117.681504, + 33.992352 + ], + [ + -117.681828, + 33.992213 + ], + [ + -117.68264, + 33.992211 + ], + [ + -117.682636, + 33.992118 + ], + [ + -117.683324, + 33.992103 + ], + [ + -117.683326, + 33.992166 + ], + [ + -117.684788, + 33.992157 + ], + [ + -117.684788, + 33.992194 + ], + [ + -117.688897, + 33.992178 + ], + [ + -117.688929, + 33.997105 + ] + ] + ] + }, + "properties": { + "name": "Ruben S Ayala Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40876981, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.678322, + 33.96152 + ], + [ + -117.67842, + 33.961444 + ], + [ + -117.6796, + 33.960524 + ], + [ + -117.67963, + 33.960346 + ], + [ + -117.679526, + 33.960311 + ], + [ + -117.679467, + 33.960237 + ], + [ + -117.679437, + 33.960168 + ], + [ + -117.679471, + 33.960093 + ], + [ + -117.679585, + 33.959806 + ], + [ + -117.679561, + 33.959717 + ], + [ + -117.679605, + 33.959632 + ], + [ + -117.679724, + 33.959553 + ], + [ + -117.679858, + 33.959563 + ], + [ + -117.679883, + 33.958914 + ], + [ + -117.680254, + 33.958681 + ], + [ + -117.680512, + 33.958453 + ], + [ + -117.681191, + 33.958111 + ], + [ + -117.680571, + 33.957284 + ], + [ + -117.679907, + 33.957239 + ], + [ + -117.678084, + 33.956436 + ], + [ + -117.675443, + 33.95828 + ], + [ + -117.678322, + 33.96152 + ] + ] + ] + }, + "properties": { + "name": "Fairfield Ranch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 41237384, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.600032, + 33.952045 + ], + [ + -117.600032, + 33.951984 + ], + [ + -117.600028, + 33.949954 + ], + [ + -117.600025, + 33.949787 + ], + [ + -117.599633, + 33.949781 + ], + [ + -117.599592, + 33.949866 + ], + [ + -117.599513, + 33.949928 + ], + [ + -117.599384, + 33.949948 + ], + [ + -117.599233, + 33.949925 + ], + [ + -117.598669, + 33.949922 + ], + [ + -117.598606, + 33.949971 + ], + [ + -117.59863, + 33.951498 + ], + [ + -117.598609, + 33.951668 + ], + [ + -117.598542, + 33.951839 + ], + [ + -117.598461, + 33.95196 + ], + [ + -117.598335, + 33.952097 + ], + [ + -117.598134, + 33.952241 + ], + [ + -117.599392, + 33.952251 + ], + [ + -117.599326, + 33.952185 + ], + [ + -117.599309, + 33.952115 + ], + [ + -117.599336, + 33.952058 + ], + [ + -117.599378, + 33.952023 + ], + [ + -117.599437, + 33.952008 + ], + [ + -117.599499, + 33.952008 + ], + [ + -117.599677, + 33.95208 + ], + [ + -117.599767, + 33.952105 + ], + [ + -117.599928, + 33.952113 + ], + [ + -117.599972, + 33.952109 + ], + [ + -117.60001, + 33.952085 + ], + [ + -117.600032, + 33.952045 + ] + ] + ] + }, + "properties": { + "name": "Mountain View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 41442233, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.606568, + 34.033452 + ], + [ + -117.606764, + 34.03345 + ], + [ + -117.606736, + 34.030937 + ], + [ + -117.606629, + 34.030162 + ], + [ + -117.606596, + 34.024517 + ], + [ + -117.606601, + 34.022231 + ], + [ + -117.606834, + 34.021844 + ], + [ + -117.607165, + 34.021601 + ], + [ + -117.606833, + 34.021161 + ], + [ + -117.606634, + 34.020734 + ], + [ + -117.606578, + 34.020468 + ], + [ + -117.606568, + 34.019614 + ], + [ + -117.604912, + 34.019413 + ], + [ + -117.600196, + 34.019371 + ], + [ + -117.600019, + 34.026551 + ], + [ + -117.603803, + 34.026601 + ], + [ + -117.603825, + 34.030173 + ], + [ + -117.603831, + 34.030843 + ], + [ + -117.6053, + 34.030845 + ], + [ + -117.60532, + 34.031201 + ], + [ + -117.604805, + 34.031963 + ], + [ + -117.604431, + 34.032258 + ], + [ + -117.603882, + 34.032294 + ], + [ + -117.603316, + 34.032389 + ], + [ + -117.602703, + 34.032412 + ], + [ + -117.602172, + 34.032423 + ], + [ + -117.60176, + 34.032423 + ], + [ + -117.601483, + 34.032421 + ], + [ + -117.601442, + 34.032529 + ], + [ + -117.60108, + 34.032469 + ], + [ + -117.600658, + 34.03242 + ], + [ + -117.600501, + 34.032469 + ], + [ + -117.600342, + 34.032522 + ], + [ + -117.600027, + 34.032819 + ], + [ + -117.599643, + 34.032842 + ], + [ + -117.599412, + 34.032857 + ], + [ + -117.599436, + 34.03299 + ], + [ + -117.599287, + 34.033086 + ], + [ + -117.599553, + 34.03327 + ], + [ + -117.599861, + 34.033395 + ], + [ + -117.60019, + 34.033439 + ], + [ + -117.601874, + 34.033429 + ], + [ + -117.605977, + 34.033488 + ], + [ + -117.606568, + 34.033452 + ] + ] + ] + }, + "properties": { + "name": "Whispering Lakes Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 41445610, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.706466, + 33.974463 + ], + [ + -117.706801, + 33.973772 + ], + [ + -117.706253, + 33.972324 + ], + [ + -117.706163, + 33.971891 + ], + [ + -117.706435, + 33.971744 + ], + [ + -117.705467, + 33.968941 + ], + [ + -117.705449, + 33.968733 + ], + [ + -117.705472, + 33.968395 + ], + [ + -117.705573, + 33.967993 + ], + [ + -117.705755, + 33.967828 + ], + [ + -117.707134, + 33.96747 + ], + [ + -117.707374, + 33.96745 + ], + [ + -117.708249, + 33.967611 + ], + [ + -117.708411, + 33.967623 + ], + [ + -117.70896, + 33.967302 + ], + [ + -117.709298, + 33.967071 + ], + [ + -117.709645, + 33.967077 + ], + [ + -117.710018, + 33.967138 + ], + [ + -117.710593, + 33.967308 + ], + [ + -117.711566, + 33.966875 + ], + [ + -117.71152, + 33.966678 + ], + [ + -117.711893, + 33.966664 + ], + [ + -117.712208, + 33.966733 + ], + [ + -117.71256, + 33.966973 + ], + [ + -117.712771, + 33.966808 + ], + [ + -117.713112, + 33.966719 + ], + [ + -117.71384, + 33.966765 + ], + [ + -117.714834, + 33.966395 + ], + [ + -117.714846, + 33.966239 + ], + [ + -117.715028, + 33.965762 + ], + [ + -117.715629, + 33.964846 + ], + [ + -117.715794, + 33.964433 + ], + [ + -117.715788, + 33.96387 + ], + [ + -117.715661, + 33.963451 + ], + [ + -117.715314, + 33.962856 + ], + [ + -117.715008, + 33.962324 + ], + [ + -117.714863, + 33.961942 + ], + [ + -117.714785, + 33.961466 + ], + [ + -117.714776, + 33.960931 + ], + [ + -117.71184, + 33.960911 + ], + [ + -117.711204, + 33.960907 + ], + [ + -117.710113, + 33.960899 + ], + [ + -117.708515, + 33.960957 + ], + [ + -117.706906, + 33.960971 + ], + [ + -117.706645, + 33.960922 + ], + [ + -117.705042, + 33.960971 + ], + [ + -117.702476, + 33.960966 + ], + [ + -117.701112, + 33.96235 + ], + [ + -117.700693, + 33.962832 + ], + [ + -117.700323, + 33.963075 + ], + [ + -117.7, + 33.963202 + ], + [ + -117.698893, + 33.963471 + ], + [ + -117.698228, + 33.963977 + ], + [ + -117.697992, + 33.964138 + ], + [ + -117.699335, + 33.965598 + ], + [ + -117.700115, + 33.966386 + ], + [ + -117.699014, + 33.9668 + ], + [ + -117.700576, + 33.969885 + ], + [ + -117.701169, + 33.971055 + ], + [ + -117.702037, + 33.972784 + ], + [ + -117.706466, + 33.974463 + ] + ] + ] + }, + "properties": { + "name": "Los Serranos Golf & Country Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 41666756, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.660816, + 34.137842 + ], + [ + -117.659449, + 34.137861 + ], + [ + -117.659435, + 34.136111 + ], + [ + -117.660811, + 34.136091 + ], + [ + -117.660816, + 34.137842 + ] + ] + ] + }, + "properties": { + "name": "McCarthy Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 41845465, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.607452, + 33.957291 + ], + [ + -117.607269, + 33.956995 + ], + [ + -117.607165, + 33.956801 + ], + [ + -117.607141, + 33.9567 + ], + [ + -117.60709, + 33.956662 + ], + [ + -117.607024, + 33.956662 + ], + [ + -117.606434, + 33.956638 + ], + [ + -117.606441, + 33.956886 + ], + [ + -117.606357, + 33.957124 + ], + [ + -117.606222, + 33.95734 + ], + [ + -117.605913, + 33.95775 + ], + [ + -117.605914, + 33.957803 + ], + [ + -117.606299, + 33.957799 + ], + [ + -117.606697, + 33.957886 + ], + [ + -117.606839, + 33.957746 + ], + [ + -117.606999, + 33.957614 + ], + [ + -117.607249, + 33.957449 + ], + [ + -117.607438, + 33.957349 + ], + [ + -117.607452, + 33.957291 + ] + ] + ] + }, + "properties": { + "name": "Avonlea Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 41847407, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.610826, + 33.96805 + ], + [ + -117.610812, + 33.967 + ], + [ + -117.610812, + 33.965877 + ], + [ + -117.609469, + 33.966298 + ], + [ + -117.607411, + 33.966925 + ], + [ + -117.604319, + 33.967902 + ], + [ + -117.604361, + 33.968045 + ], + [ + -117.610826, + 33.96805 + ] + ] + ] + }, + "properties": { + "name": "American Heroes Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 41938279, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.558209, + 33.948207 + ], + [ + -117.556073, + 33.94826 + ], + [ + -117.556052, + 33.949948 + ], + [ + -117.553762, + 33.949986 + ], + [ + -117.553486, + 33.950547 + ], + [ + -117.552896, + 33.951109 + ], + [ + -117.552161, + 33.951582 + ], + [ + -117.551801, + 33.951966 + ], + [ + -117.551129, + 33.952944 + ], + [ + -117.550232, + 33.95465 + ], + [ + -117.549491, + 33.957127 + ], + [ + -117.553705, + 33.957155 + ], + [ + -117.553753, + 33.956738 + ], + [ + -117.558154, + 33.954863 + ], + [ + -117.558174, + 33.952513 + ], + [ + -117.558209, + 33.948207 + ] + ] + ] + }, + "properties": { + "name": "Silverlakes Equestrian & Sports Park (proposed)", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 41960005, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.573321, + 34.023307 + ], + [ + -117.573293, + 34.02347 + ], + [ + -117.572851, + 34.023449 + ], + [ + -117.572716, + 34.02346 + ], + [ + -117.572399, + 34.023554 + ], + [ + -117.572262, + 34.023482 + ], + [ + -117.572227, + 34.023216 + ], + [ + -117.572236, + 34.023183 + ], + [ + -117.57235, + 34.023198 + ], + [ + -117.572499, + 34.023158 + ], + [ + -117.572576, + 34.023169 + ], + [ + -117.572646, + 34.023205 + ], + [ + -117.572709, + 34.02327 + ], + [ + -117.57307, + 34.023263 + ], + [ + -117.573321, + 34.023307 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 41961814, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.56506, + 34.014864 + ], + [ + -117.565062, + 34.014316 + ], + [ + -117.564618, + 34.014314 + ], + [ + -117.564616, + 34.014862 + ], + [ + -117.56506, + 34.014864 + ] + ] + ] + }, + "properties": { + "name": "Pinheiro Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 42193756, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.688945, + 33.999099 + ], + [ + -117.688934, + 33.997437 + ], + [ + -117.68486, + 33.997463 + ], + [ + -117.684871, + 33.999125 + ], + [ + -117.688945, + 33.999099 + ] + ] + ] + }, + "properties": { + "name": "Chino Fairgrounds", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46033919, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.648488, + 34.116729 + ], + [ + -117.648492, + 34.117821 + ], + [ + -117.646298, + 34.117829 + ], + [ + -117.646293, + 34.116627 + ], + [ + -117.648028, + 34.116621 + ], + [ + -117.648028, + 34.11673 + ], + [ + -117.648488, + 34.116729 + ] + ] + ] + }, + "properties": { + "name": "Sierra Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 51208907, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.763376, + 34.143491 + ], + [ + -117.763369, + 34.142104 + ], + [ + -117.759591, + 34.143178 + ], + [ + -117.758696, + 34.14324 + ], + [ + -117.758756, + 34.14359 + ], + [ + -117.759503, + 34.143537 + ], + [ + -117.763284, + 34.143514 + ], + [ + -117.763376, + 34.143491 + ] + ] + ] + }, + "properties": { + "name": "Lowell Brandt Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 66966891, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.736641, + 34.079646 + ], + [ + -117.736571, + 34.079601 + ], + [ + -117.736367, + 34.0796 + ], + [ + -117.736029, + 34.079597 + ], + [ + -117.735509, + 34.079597 + ], + [ + -117.73494, + 34.07961 + ], + [ + -117.734801, + 34.079641 + ], + [ + -117.734656, + 34.079619 + ], + [ + -117.734602, + 34.079552 + ], + [ + -117.734575, + 34.079499 + ], + [ + -117.734141, + 34.07949 + ], + [ + -117.734162, + 34.080508 + ], + [ + -117.734221, + 34.080912 + ], + [ + -117.735015, + 34.08065 + ], + [ + -117.736072, + 34.080259 + ], + [ + -117.736619, + 34.080006 + ], + [ + -117.736641, + 34.079646 + ] + ] + ] + }, + "properties": { + "name": "Pomona Jaycees Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 95038200, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.629729, + 34.138856 + ], + [ + -117.629716, + 34.13858 + ], + [ + -117.62969, + 34.13839 + ], + [ + -117.629668, + 34.138221 + ], + [ + -117.629649, + 34.138091 + ], + [ + -117.629574, + 34.137829 + ], + [ + -117.629493, + 34.137593 + ], + [ + -117.629432, + 34.137459 + ], + [ + -117.629543, + 34.137435 + ], + [ + -117.629728, + 34.137421 + ], + [ + -117.630292, + 34.138466 + ], + [ + -117.630583, + 34.138924 + ], + [ + -117.630887, + 34.139261 + ], + [ + -117.631052, + 34.139398 + ], + [ + -117.631182, + 34.139503 + ], + [ + -117.631457, + 34.139683 + ], + [ + -117.631845, + 34.1399 + ], + [ + -117.630858, + 34.139916 + ], + [ + -117.629781, + 34.139919 + ], + [ + -117.629537, + 34.139926 + ], + [ + -117.62957, + 34.139841 + ], + [ + -117.629629, + 34.139622 + ], + [ + -117.629678, + 34.139364 + ], + [ + -117.629705, + 34.139172 + ], + [ + -117.629716, + 34.139083 + ], + [ + -117.629729, + 34.138856 + ] + ] + ] + }, + "properties": { + "name": "Confluence Park Trail Rest", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 95613758, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.607392, + 34.136399 + ], + [ + -117.607389, + 34.136217 + ], + [ + -117.607378, + 34.135501 + ], + [ + -117.607377, + 34.135465 + ], + [ + -117.607797, + 34.13547 + ], + [ + -117.611848, + 34.135452 + ], + [ + -117.612422, + 34.135459 + ], + [ + -117.612914, + 34.135466 + ], + [ + -117.613538, + 34.135477 + ], + [ + -117.613852, + 34.135494 + ], + [ + -117.614229, + 34.135528 + ], + [ + -117.616115, + 34.135754 + ], + [ + -117.616116, + 34.135897 + ], + [ + -117.616105, + 34.136203 + ], + [ + -117.616136, + 34.136426 + ], + [ + -117.615958, + 34.136417 + ], + [ + -117.61575, + 34.136399 + ], + [ + -117.615454, + 34.136343 + ], + [ + -117.615161, + 34.136339 + ], + [ + -117.614565, + 34.136338 + ], + [ + -117.613962, + 34.136354 + ], + [ + -117.610402, + 34.136379 + ], + [ + -117.607392, + 34.136399 + ] + ] + ] + }, + "properties": { + "name": "Beryl Park East", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 95613762, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.607973, + 34.135856 + ], + [ + -117.607936, + 34.13583 + ], + [ + -117.607935, + 34.135546 + ], + [ + -117.607966, + 34.13552 + ], + [ + -117.608698, + 34.13551 + ], + [ + -117.608734, + 34.135546 + ], + [ + -117.608734, + 34.135817 + ], + [ + -117.608698, + 34.135847 + ], + [ + -117.607973, + 34.135856 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 97336220, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.609261, + 34.065864 + ], + [ + -117.609297, + 34.065874 + ], + [ + -117.609312, + 34.065908 + ], + [ + -117.609327, + 34.065942 + ], + [ + -117.609341, + 34.065981 + ], + [ + -117.609341, + 34.066012 + ], + [ + -117.609333, + 34.066042 + ], + [ + -117.609323, + 34.066069 + ], + [ + -117.609298, + 34.066127 + ], + [ + -117.609304, + 34.066163 + ], + [ + -117.609319, + 34.066183 + ], + [ + -117.609348, + 34.066202 + ], + [ + -117.609382, + 34.066218 + ], + [ + -117.609423, + 34.066231 + ], + [ + -117.609442, + 34.066223 + ], + [ + -117.609466, + 34.066231 + ], + [ + -117.609469, + 34.066245 + ], + [ + -117.609457, + 34.06627 + ], + [ + -117.60945, + 34.066286 + ], + [ + -117.609458, + 34.066302 + ], + [ + -117.609477, + 34.066315 + ], + [ + -117.609505, + 34.066313 + ], + [ + -117.609525, + 34.066302 + ], + [ + -117.609546, + 34.066278 + ], + [ + -117.609556, + 34.066212 + ], + [ + -117.609558, + 34.066381 + ], + [ + -117.609454, + 34.066383 + ], + [ + -117.609451, + 34.066336 + ], + [ + -117.609335, + 34.066337 + ], + [ + -117.609335, + 34.066383 + ], + [ + -117.609217, + 34.066384 + ], + [ + -117.609215, + 34.066338 + ], + [ + -117.609256, + 34.066337 + ], + [ + -117.60925, + 34.065889 + ], + [ + -117.609261, + 34.065889 + ], + [ + -117.609261, + 34.065864 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 98603269, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.654575, + 33.990024 + ], + [ + -117.654308, + 33.990033 + ], + [ + -117.654122, + 33.990046 + ], + [ + -117.653961, + 33.990062 + ], + [ + -117.653799, + 33.990082 + ], + [ + -117.653631, + 33.990096 + ], + [ + -117.652981, + 33.990105 + ], + [ + -117.652924, + 33.990065 + ], + [ + -117.652917, + 33.989208 + ], + [ + -117.652994, + 33.989136 + ], + [ + -117.654561, + 33.989122 + ], + [ + -117.654575, + 33.990024 + ] + ] + ] + }, + "properties": { + "name": "Constellation Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 98851350, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.641257, + 34.020238 + ], + [ + -117.641221, + 34.020252 + ], + [ + -117.641187, + 34.020258 + ], + [ + -117.641158, + 34.020274 + ], + [ + -117.640102, + 34.020279 + ], + [ + -117.640069, + 34.020277 + ], + [ + -117.640011, + 34.020266 + ], + [ + -117.639939, + 34.02026 + ], + [ + -117.639854, + 34.020276 + ], + [ + -117.639803, + 34.020307 + ], + [ + -117.639772, + 34.020347 + ], + [ + -117.639252, + 34.02035 + ], + [ + -117.639249, + 34.019526 + ], + [ + -117.641217, + 34.019514 + ], + [ + -117.641248, + 34.019533 + ], + [ + -117.641255, + 34.019552 + ], + [ + -117.641253, + 34.01968 + ], + [ + -117.641292, + 34.019681 + ], + [ + -117.641301, + 34.020074 + ], + [ + -117.64127, + 34.020084 + ], + [ + -117.641284, + 34.02012 + ], + [ + -117.641279, + 34.020183 + ], + [ + -117.641274, + 34.020222 + ], + [ + -117.641257, + 34.020238 + ] + ] + ] + }, + "properties": { + "name": "Centennial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 98851370, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.64123, + 34.026533 + ], + [ + -117.639307, + 34.026545 + ], + [ + -117.639298, + 34.025193 + ], + [ + -117.641333, + 34.025178 + ], + [ + -117.641343, + 34.026424 + ], + [ + -117.641332, + 34.026465 + ], + [ + -117.641306, + 34.026498 + ], + [ + -117.641274, + 34.026521 + ], + [ + -117.64123, + 34.026533 + ] + ] + ] + }, + "properties": { + "name": "Kimball Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 99056071, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.593373, + 33.977268 + ], + [ + -117.593281, + 33.973122 + ], + [ + -117.593415, + 33.973121 + ], + [ + -117.597504, + 33.973097 + ], + [ + -117.597614, + 33.974065 + ], + [ + -117.597416, + 33.974397 + ], + [ + -117.597408, + 33.974754 + ], + [ + -117.597425, + 33.975902 + ], + [ + -117.593373, + 33.977268 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 99094688, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.598551, + 33.965467 + ], + [ + -117.597814, + 33.965453 + ], + [ + -117.597517, + 33.965578 + ], + [ + -117.597516, + 33.965661 + ], + [ + -117.597253, + 33.965656 + ], + [ + -117.597139, + 33.965639 + ], + [ + -117.597176, + 33.965549 + ], + [ + -117.597184, + 33.965407 + ], + [ + -117.597108, + 33.965331 + ], + [ + -117.597041, + 33.965293 + ], + [ + -117.596947, + 33.96528 + ], + [ + -117.596769, + 33.965308 + ], + [ + -117.5963, + 33.965308 + ], + [ + -117.596242, + 33.965258 + ], + [ + -117.596246, + 33.965057 + ], + [ + -117.596227, + 33.964827 + ], + [ + -117.596339, + 33.964736 + ], + [ + -117.596336, + 33.964093 + ], + [ + -117.596408, + 33.964076 + ], + [ + -117.596516, + 33.964041 + ], + [ + -117.596727, + 33.963938 + ], + [ + -117.597514, + 33.963945 + ], + [ + -117.597513, + 33.963874 + ], + [ + -117.597859, + 33.963828 + ], + [ + -117.597871, + 33.963867 + ], + [ + -117.597903, + 33.963903 + ], + [ + -117.597972, + 33.963928 + ], + [ + -117.598104, + 33.963941 + ], + [ + -117.598211, + 33.963959 + ], + [ + -117.59858, + 33.964089 + ], + [ + -117.598683, + 33.964135 + ], + [ + -117.59903, + 33.964321 + ], + [ + -117.59905, + 33.964384 + ], + [ + -117.598957, + 33.964529 + ], + [ + -117.59891, + 33.964648 + ], + [ + -117.598878, + 33.964768 + ], + [ + -117.59887, + 33.964856 + ], + [ + -117.598852, + 33.964935 + ], + [ + -117.598816, + 33.96505 + ], + [ + -117.59882, + 33.96509 + ], + [ + -117.598845, + 33.965138 + ], + [ + -117.598551, + 33.965467 + ] + ] + ] + }, + "properties": { + "name": "Deer Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 100010941, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.814296, + 34.019341 + ], + [ + -117.813877, + 34.018777 + ], + [ + -117.81377, + 34.018827 + ], + [ + -117.813669, + 34.01862 + ], + [ + -117.813586, + 34.018479 + ], + [ + -117.813447, + 34.018303 + ], + [ + -117.813308, + 34.018149 + ], + [ + -117.813197, + 34.018026 + ], + [ + -117.813026, + 34.017897 + ], + [ + -117.812829, + 34.01776 + ], + [ + -117.813124, + 34.017377 + ], + [ + -117.814387, + 34.015715 + ], + [ + -117.814796, + 34.015169 + ], + [ + -117.815428, + 34.01474 + ], + [ + -117.815935, + 34.014361 + ], + [ + -117.816478, + 34.014019 + ], + [ + -117.816363, + 34.013901 + ], + [ + -117.816488, + 34.013763 + ], + [ + -117.816418, + 34.013483 + ], + [ + -117.816367, + 34.013467 + ], + [ + -117.816338, + 34.012597 + ], + [ + -117.816306, + 34.012601 + ], + [ + -117.816251, + 34.012357 + ], + [ + -117.81621, + 34.012237 + ], + [ + -117.81614, + 34.012256 + ], + [ + -117.816074, + 34.012106 + ], + [ + -117.815881, + 34.011831 + ], + [ + -117.815855, + 34.011828 + ], + [ + -117.815764, + 34.011879 + ], + [ + -117.815486, + 34.011198 + ], + [ + -117.815454, + 34.011052 + ], + [ + -117.815153, + 34.010635 + ], + [ + -117.815429, + 34.01041 + ], + [ + -117.815837, + 34.010124 + ], + [ + -117.816251, + 34.009871 + ], + [ + -117.816642, + 34.009653 + ], + [ + -117.817459, + 34.0092 + ], + [ + -117.820147, + 34.007682 + ], + [ + -117.821577, + 34.006868 + ], + [ + -117.822083, + 34.006589 + ], + [ + -117.822589, + 34.006264 + ], + [ + -117.822954, + 34.005938 + ], + [ + -117.823172, + 34.0057 + ], + [ + -117.823403, + 34.005361 + ], + [ + -117.824073, + 34.004229 + ], + [ + -117.824468, + 34.003769 + ], + [ + -117.82479, + 34.003501 + ], + [ + -117.825182, + 34.003256 + ], + [ + -117.825598, + 34.00306 + ], + [ + -117.825861, + 34.002971 + ], + [ + -117.826027, + 34.002915 + ], + [ + -117.826515, + 34.002818 + ], + [ + -117.826921, + 34.002772 + ], + [ + -117.827472, + 34.002778 + ], + [ + -117.828005, + 34.002836 + ], + [ + -117.828993, + 34.003311 + ], + [ + -117.8302, + 34.003722 + ], + [ + -117.82945, + 34.004265 + ], + [ + -117.828375, + 34.005066 + ], + [ + -117.827607, + 34.005648 + ], + [ + -117.826575, + 34.006494 + ], + [ + -117.825344, + 34.007478 + ], + [ + -117.824683, + 34.008055 + ], + [ + -117.824191, + 34.008592 + ], + [ + -117.823514, + 34.009179 + ], + [ + -117.823423, + 34.009221 + ], + [ + -117.823338, + 34.009218 + ], + [ + -117.822954, + 34.009474 + ], + [ + -117.821769, + 34.011153 + ], + [ + -117.821362, + 34.011576 + ], + [ + -117.820326, + 34.012644 + ], + [ + -117.819732, + 34.013332 + ], + [ + -117.816611, + 34.017224 + ], + [ + -117.816541, + 34.017145 + ], + [ + -117.816236, + 34.017445 + ], + [ + -117.814296, + 34.019341 + ] + ] + ] + }, + "properties": { + "name": "Diamond Bar Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 100795868, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.628107, + 34.006785 + ], + [ + -117.62171, + 34.006779 + ], + [ + -117.621692, + 34.008715 + ], + [ + -117.619582, + 34.008723 + ], + [ + -117.61955, + 34.005085 + ], + [ + -117.620515, + 34.00508 + ], + [ + -117.621196, + 34.005077 + ], + [ + -117.621857, + 34.005073 + ], + [ + -117.622559, + 34.00507 + ], + [ + -117.623244, + 34.005066 + ], + [ + -117.623939, + 34.005063 + ], + [ + -117.62461, + 34.005059 + ], + [ + -117.625337, + 34.005055 + ], + [ + -117.62602, + 34.005052 + ], + [ + -117.626717, + 34.005048 + ], + [ + -117.627411, + 34.005044 + ], + [ + -117.628071, + 34.005041 + ], + [ + -117.628107, + 34.006785 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 100795874, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.619696, + 34.033731 + ], + [ + -117.619697, + 34.033836 + ], + [ + -117.619687, + 34.033865 + ], + [ + -117.619657, + 34.033892 + ], + [ + -117.619623, + 34.033907 + ], + [ + -117.619591, + 34.033907 + ], + [ + -117.618112, + 34.033905 + ], + [ + -117.61811, + 34.033482 + ], + [ + -117.618699, + 34.033479 + ], + [ + -117.618697, + 34.033735 + ], + [ + -117.619638, + 34.033731 + ], + [ + -117.619696, + 34.033731 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 101081843, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.631904, + 34.077863 + ], + [ + -117.630513, + 34.077865 + ], + [ + -117.630297, + 34.077865 + ], + [ + -117.629627, + 34.077869 + ], + [ + -117.629577, + 34.077885 + ], + [ + -117.629335, + 34.077882 + ], + [ + -117.629147, + 34.07786 + ], + [ + -117.628855, + 34.077777 + ], + [ + -117.628462, + 34.077632 + ], + [ + -117.62827, + 34.077582 + ], + [ + -117.628098, + 34.077559 + ], + [ + -117.627944, + 34.077555 + ], + [ + -117.627294, + 34.077549 + ], + [ + -117.627275, + 34.074455 + ], + [ + -117.627347, + 34.074426 + ], + [ + -117.629508, + 34.074425 + ], + [ + -117.629868, + 34.074427 + ], + [ + -117.631852, + 34.07442 + ], + [ + -117.631885, + 34.074439 + ], + [ + -117.631904, + 34.077863 + ] + ] + ] + }, + "properties": { + "name": "Galvin Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 105702507, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.599068, + 33.939104 + ], + [ + -117.598996, + 33.939157 + ], + [ + -117.597988, + 33.939148 + ], + [ + -117.597776, + 33.939123 + ], + [ + -117.59755, + 33.939075 + ], + [ + -117.597346, + 33.939005 + ], + [ + -117.597184, + 33.938924 + ], + [ + -117.597006, + 33.938811 + ], + [ + -117.596807, + 33.938637 + ], + [ + -117.596698, + 33.938512 + ], + [ + -117.596584, + 33.938333 + ], + [ + -117.596508, + 33.938162 + ], + [ + -117.598361, + 33.938142 + ], + [ + -117.598363, + 33.938209 + ], + [ + -117.598716, + 33.938198 + ], + [ + -117.598725, + 33.938287 + ], + [ + -117.599084, + 33.93829 + ], + [ + -117.599068, + 33.939104 + ] + ] + ] + }, + "properties": { + "name": "Half Moon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 105702540, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.603343, + 33.93317 + ], + [ + -117.603272, + 33.933223 + ], + [ + -117.600361, + 33.933223 + ], + [ + -117.600301, + 33.932944 + ], + [ + -117.600218, + 33.932752 + ], + [ + -117.600126, + 33.932614 + ], + [ + -117.599822, + 33.932226 + ], + [ + -117.599757, + 33.932094 + ], + [ + -117.599744, + 33.932 + ], + [ + -117.599748, + 33.931525 + ], + [ + -117.599876, + 33.931387 + ], + [ + -117.600306, + 33.931653 + ], + [ + -117.600641, + 33.931832 + ], + [ + -117.601053, + 33.932004 + ], + [ + -117.601517, + 33.932164 + ], + [ + -117.601961, + 33.932278 + ], + [ + -117.602499, + 33.932366 + ], + [ + -117.602844, + 33.932398 + ], + [ + -117.60324, + 33.932413 + ], + [ + -117.603344, + 33.932489 + ], + [ + -117.603343, + 33.93317 + ] + ] + ] + }, + "properties": { + "name": "Dairyland Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 110979162, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.162606, + 34.045178 + ], + [ + -117.162274, + 34.045372 + ], + [ + -117.162064, + 34.045495 + ], + [ + -117.162603, + 34.046188 + ], + [ + -117.162571, + 34.046234 + ], + [ + -117.162515, + 34.046314 + ], + [ + -117.162197, + 34.046492 + ], + [ + -117.160813, + 34.047265 + ], + [ + -117.158907, + 34.048329 + ], + [ + -117.158457, + 34.047562 + ], + [ + -117.158385, + 34.047404 + ], + [ + -117.158309, + 34.047239 + ], + [ + -117.158149, + 34.046847 + ], + [ + -117.158073, + 34.046651 + ], + [ + -117.158076, + 34.046618 + ], + [ + -117.158121, + 34.046564 + ], + [ + -117.158037, + 34.046279 + ], + [ + -117.157955, + 34.045966 + ], + [ + -117.157907, + 34.04571 + ], + [ + -117.157854, + 34.04543 + ], + [ + -117.157787, + 34.045181 + ], + [ + -117.157731, + 34.045148 + ], + [ + -117.157647, + 34.044956 + ], + [ + -117.157536, + 34.044768 + ], + [ + -117.157408, + 34.044646 + ], + [ + -117.157245, + 34.044543 + ], + [ + -117.157125, + 34.044421 + ], + [ + -117.157061, + 34.044355 + ], + [ + -117.156954, + 34.043992 + ], + [ + -117.157114, + 34.043913 + ], + [ + -117.157468, + 34.043741 + ], + [ + -117.158548, + 34.044094 + ], + [ + -117.159007, + 34.043675 + ], + [ + -117.159479, + 34.043988 + ], + [ + -117.159539, + 34.044187 + ], + [ + -117.160701, + 34.045103 + ], + [ + -117.161127, + 34.045439 + ], + [ + -117.161265, + 34.045362 + ], + [ + -117.161766, + 34.045082 + ], + [ + -117.162309, + 34.044778 + ], + [ + -117.162418, + 34.044925 + ], + [ + -117.162517, + 34.045058 + ], + [ + -117.162606, + 34.045178 + ] + ] + ] + }, + "properties": { + "name": "El Carmelo Retreat House", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 110980907, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.157114, + 34.043913 + ], + [ + -117.157244, + 34.044248 + ], + [ + -117.157263, + 34.044285 + ], + [ + -117.15732, + 34.044319 + ], + [ + -117.157378, + 34.044343 + ], + [ + -117.157735, + 34.044414 + ], + [ + -117.157981, + 34.044459 + ], + [ + -117.15806, + 34.044195 + ], + [ + -117.158124, + 34.0442 + ], + [ + -117.158185, + 34.044227 + ], + [ + -117.158229, + 34.044277 + ], + [ + -117.158277, + 34.044361 + ], + [ + -117.158316, + 34.044427 + ], + [ + -117.158379, + 34.044451 + ], + [ + -117.158427, + 34.044462 + ], + [ + -117.15866, + 34.04447 + ], + [ + -117.158711, + 34.044504 + ], + [ + -117.158743, + 34.044528 + ], + [ + -117.158778, + 34.044573 + ], + [ + -117.158781, + 34.044612 + ], + [ + -117.158756, + 34.044937 + ], + [ + -117.15873, + 34.044964 + ], + [ + -117.158676, + 34.04499 + ], + [ + -117.15865, + 34.045021 + ], + [ + -117.158599, + 34.045215 + ], + [ + -117.158892, + 34.04528 + ], + [ + -117.158929, + 34.045288 + ], + [ + -117.159091, + 34.045344 + ], + [ + -117.15914, + 34.045358 + ], + [ + -117.159129, + 34.045383 + ], + [ + -117.159354, + 34.045452 + ], + [ + -117.159383, + 34.045459 + ], + [ + -117.159428, + 34.04544 + ], + [ + -117.159495, + 34.045413 + ], + [ + -117.159548, + 34.045398 + ], + [ + -117.159585, + 34.045386 + ], + [ + -117.159619, + 34.04538 + ], + [ + -117.15958, + 34.045355 + ], + [ + -117.159578, + 34.04531 + ], + [ + -117.159624, + 34.045264 + ], + [ + -117.159642, + 34.045243 + ], + [ + -117.159631, + 34.045217 + ], + [ + -117.159629, + 34.045169 + ], + [ + -117.159675, + 34.045152 + ], + [ + -117.159728, + 34.045141 + ], + [ + -117.159767, + 34.045127 + ], + [ + -117.159825, + 34.04512 + ], + [ + -117.159884, + 34.045127 + ], + [ + -117.159968, + 34.045163 + ], + [ + -117.160011, + 34.045203 + ], + [ + -117.160093, + 34.045243 + ], + [ + -117.160231, + 34.045266 + ], + [ + -117.160374, + 34.045283 + ], + [ + -117.160438, + 34.04527 + ], + [ + -117.160512, + 34.045245 + ], + [ + -117.160598, + 34.045179 + ], + [ + -117.160701, + 34.045103 + ], + [ + -117.159539, + 34.044187 + ], + [ + -117.159479, + 34.043988 + ], + [ + -117.159007, + 34.043675 + ], + [ + -117.158548, + 34.044094 + ], + [ + -117.157468, + 34.043741 + ], + [ + -117.157114, + 34.043913 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 119010218, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.612441, + 34.116406 + ], + [ + -117.612433, + 34.116434 + ], + [ + -117.61242, + 34.116458 + ], + [ + -117.6124, + 34.116476 + ], + [ + -117.612369, + 34.116486 + ], + [ + -117.612344, + 34.116487 + ], + [ + -117.612315, + 34.116484 + ], + [ + -117.612285, + 34.116467 + ], + [ + -117.612259, + 34.116445 + ], + [ + -117.612228, + 34.116412 + ], + [ + -117.6122, + 34.11637 + ], + [ + -117.612181, + 34.11632 + ], + [ + -117.612173, + 34.116276 + ], + [ + -117.612173, + 34.116222 + ], + [ + -117.61218, + 34.116179 + ], + [ + -117.612202, + 34.116148 + ], + [ + -117.612228, + 34.116129 + ], + [ + -117.612262, + 34.116121 + ], + [ + -117.612296, + 34.116123 + ], + [ + -117.612319, + 34.116129 + ], + [ + -117.612339, + 34.116143 + ], + [ + -117.612352, + 34.116165 + ], + [ + -117.612363, + 34.11619 + ], + [ + -117.612384, + 34.116212 + ], + [ + -117.612408, + 34.116224 + ], + [ + -117.612438, + 34.116229 + ], + [ + -117.612469, + 34.116228 + ], + [ + -117.612504, + 34.116234 + ], + [ + -117.612533, + 34.11625 + ], + [ + -117.612554, + 34.116272 + ], + [ + -117.612556, + 34.116296 + ], + [ + -117.612547, + 34.116328 + ], + [ + -117.612526, + 34.116351 + ], + [ + -117.612491, + 34.116367 + ], + [ + -117.612459, + 34.11638 + ], + [ + -117.612441, + 34.116406 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 119010220, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.612153, + 34.120952 + ], + [ + -117.612149, + 34.120978 + ], + [ + -117.612139, + 34.121001 + ], + [ + -117.612118, + 34.121018 + ], + [ + -117.612086, + 34.121027 + ], + [ + -117.612052, + 34.121043 + ], + [ + -117.612041, + 34.121089 + ], + [ + -117.612039, + 34.121121 + ], + [ + -117.612043, + 34.121138 + ], + [ + -117.612033, + 34.121161 + ], + [ + -117.612015, + 34.121179 + ], + [ + -117.611989, + 34.121193 + ], + [ + -117.611953, + 34.1212 + ], + [ + -117.611919, + 34.121197 + ], + [ + -117.611881, + 34.121184 + ], + [ + -117.611855, + 34.121163 + ], + [ + -117.611835, + 34.121141 + ], + [ + -117.611823, + 34.121111 + ], + [ + -117.611826, + 34.121083 + ], + [ + -117.611841, + 34.121057 + ], + [ + -117.611866, + 34.121038 + ], + [ + -117.611894, + 34.121029 + ], + [ + -117.61192, + 34.121024 + ], + [ + -117.611953, + 34.121005 + ], + [ + -117.611969, + 34.120984 + ], + [ + -117.611974, + 34.120965 + ], + [ + -117.611981, + 34.120939 + ], + [ + -117.611995, + 34.120917 + ], + [ + -117.61202, + 34.120898 + ], + [ + -117.612047, + 34.12089 + ], + [ + -117.612072, + 34.120889 + ], + [ + -117.612103, + 34.120895 + ], + [ + -117.612125, + 34.120908 + ], + [ + -117.612143, + 34.120927 + ], + [ + -117.612153, + 34.120952 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 119010312, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.648095, + 34.11737 + ], + [ + -117.647955, + 34.117401 + ], + [ + -117.647821, + 34.117423 + ], + [ + -117.647703, + 34.117428 + ], + [ + -117.647719, + 34.117357 + ], + [ + -117.647859, + 34.117294 + ], + [ + -117.64788, + 34.117263 + ], + [ + -117.647853, + 34.117206 + ], + [ + -117.647886, + 34.11713 + ], + [ + -117.647961, + 34.117081 + ], + [ + -117.648041, + 34.11717 + ], + [ + -117.648089, + 34.11729 + ], + [ + -117.648095, + 34.11737 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 131899966, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.653821, + 34.068337 + ], + [ + -117.653822, + 34.068301 + ], + [ + -117.653817, + 34.068301 + ], + [ + -117.653809, + 34.068296 + ], + [ + -117.6538, + 34.068287 + ], + [ + -117.6538, + 34.068278 + ], + [ + -117.653814, + 34.068266 + ], + [ + -117.653818, + 34.068253 + ], + [ + -117.653751, + 34.068253 + ], + [ + -117.653714, + 34.068253 + ], + [ + -117.653676, + 34.068296 + ], + [ + -117.653707, + 34.0683 + ], + [ + -117.653724, + 34.068313 + ], + [ + -117.653724, + 34.068338 + ], + [ + -117.65374, + 34.068337 + ], + [ + -117.653821, + 34.068337 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133332529, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.483695, + 34.15565 + ], + [ + -117.483105, + 34.155139 + ], + [ + -117.483052, + 34.155084 + ], + [ + -117.483439, + 34.15481 + ], + [ + -117.483851, + 34.154547 + ], + [ + -117.484091, + 34.154407 + ], + [ + -117.484281, + 34.154282 + ], + [ + -117.484469, + 34.154165 + ], + [ + -117.485736, + 34.155246 + ], + [ + -117.486025, + 34.155567 + ], + [ + -117.483695, + 34.15565 + ] + ] + ] + }, + "properties": { + "name": "San Sevaine Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 134632725, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.567667, + 34.145744 + ], + [ + -117.566167, + 34.145737 + ], + [ + -117.566181, + 34.145069 + ], + [ + -117.566198, + 34.144965 + ], + [ + -117.566248, + 34.144847 + ], + [ + -117.566324, + 34.144738 + ], + [ + -117.56638, + 34.14469 + ], + [ + -117.566457, + 34.144642 + ], + [ + -117.566543, + 34.144605 + ], + [ + -117.566675, + 34.144564 + ], + [ + -117.567761, + 34.144556 + ], + [ + -117.567766, + 34.145207 + ], + [ + -117.567711, + 34.145287 + ], + [ + -117.567662, + 34.145287 + ], + [ + -117.567667, + 34.145744 + ] + ] + ] + }, + "properties": { + "name": "Lowder Baseball Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 134705858, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.586626, + 34.092125 + ], + [ + -117.585283, + 34.092117 + ], + [ + -117.585283, + 34.092571 + ], + [ + -117.585302, + 34.092602 + ], + [ + -117.585299, + 34.093209 + ], + [ + -117.585612, + 34.093209 + ], + [ + -117.585615, + 34.093719 + ], + [ + -117.58568, + 34.093719 + ], + [ + -117.585797, + 34.093718 + ], + [ + -117.586146, + 34.093719 + ], + [ + -117.586258, + 34.09372 + ], + [ + -117.586631, + 34.093722 + ], + [ + -117.586626, + 34.092125 + ] + ] + ] + }, + "properties": { + "name": "Old Town Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 136039989, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.73169, + 33.996946 + ], + [ + -117.73169, + 33.99695 + ], + [ + -117.731542, + 33.996955 + ], + [ + -117.731541, + 33.9969 + ], + [ + -117.731501, + 33.996896 + ], + [ + -117.731501, + 33.99687 + ], + [ + -117.731461, + 33.996867 + ], + [ + -117.731461, + 33.99684 + ], + [ + -117.731422, + 33.996835 + ], + [ + -117.731422, + 33.996803 + ], + [ + -117.731448, + 33.996802 + ], + [ + -117.731614, + 33.996935 + ], + [ + -117.731689, + 33.996936 + ], + [ + -117.73169, + 33.996946 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 136044822, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.732416, + 33.996958 + ], + [ + -117.732416, + 33.996947 + ], + [ + -117.732415, + 33.996936 + ], + [ + -117.732474, + 33.996891 + ], + [ + -117.732486, + 33.996884 + ], + [ + -117.732482, + 33.996272 + ], + [ + -117.732467, + 33.996276 + ], + [ + -117.73245, + 33.996285 + ], + [ + -117.732441, + 33.996302 + ], + [ + -117.732435, + 33.99633 + ], + [ + -117.732426, + 33.996362 + ], + [ + -117.732424, + 33.996401 + ], + [ + -117.732425, + 33.996472 + ], + [ + -117.732431, + 33.996509 + ], + [ + -117.732446, + 33.996558 + ], + [ + -117.732457, + 33.996599 + ], + [ + -117.732463, + 33.996632 + ], + [ + -117.732462, + 33.996659 + ], + [ + -117.732454, + 33.996693 + ], + [ + -117.732443, + 33.996735 + ], + [ + -117.732435, + 33.99677 + ], + [ + -117.732435, + 33.996803 + ], + [ + -117.732437, + 33.996832 + ], + [ + -117.732445, + 33.996855 + ], + [ + -117.732454, + 33.996876 + ], + [ + -117.732454, + 33.996889 + ], + [ + -117.732444, + 33.9969 + ], + [ + -117.732428, + 33.996912 + ], + [ + -117.732413, + 33.99692 + ], + [ + -117.732389, + 33.996924 + ], + [ + -117.732364, + 33.996936 + ], + [ + -117.732353, + 33.996942 + ], + [ + -117.732086, + 33.997004 + ], + [ + -117.731904, + 33.997038 + ], + [ + -117.731746, + 33.997055 + ], + [ + -117.731575, + 33.997069 + ], + [ + -117.731478, + 33.997071 + ], + [ + -117.73148, + 33.997097 + ], + [ + -117.731615, + 33.99709 + ], + [ + -117.731799, + 33.997072 + ], + [ + -117.731967, + 33.997048 + ], + [ + -117.732279, + 33.996984 + ], + [ + -117.732416, + 33.996958 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 136044830, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.732353, + 33.996942 + ], + [ + -117.732086, + 33.997004 + ], + [ + -117.731904, + 33.997038 + ], + [ + -117.731746, + 33.997055 + ], + [ + -117.731575, + 33.997069 + ], + [ + -117.731478, + 33.997071 + ], + [ + -117.731476, + 33.997028 + ], + [ + -117.731985, + 33.997003 + ], + [ + -117.732029, + 33.996998 + ], + [ + -117.732062, + 33.996987 + ], + [ + -117.732076, + 33.99698 + ], + [ + -117.732094, + 33.996965 + ], + [ + -117.732103, + 33.996946 + ], + [ + -117.732106, + 33.996936 + ], + [ + -117.73211, + 33.996923 + ], + [ + -117.732111, + 33.996909 + ], + [ + -117.73213, + 33.996925 + ], + [ + -117.732147, + 33.996936 + ], + [ + -117.732169, + 33.996944 + ], + [ + -117.732197, + 33.996944 + ], + [ + -117.732218, + 33.996942 + ], + [ + -117.73224, + 33.996933 + ], + [ + -117.732258, + 33.996927 + ], + [ + -117.732276, + 33.996923 + ], + [ + -117.732303, + 33.996925 + ], + [ + -117.732327, + 33.996934 + ], + [ + -117.732353, + 33.996942 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143495239, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.556197, + 33.988533 + ], + [ + -117.555939, + 33.987994 + ], + [ + -117.555615, + 33.9881 + ], + [ + -117.555872, + 33.98864 + ], + [ + -117.556197, + 33.988533 + ] + ] + ] + }, + "properties": { + "name": "Cambria Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143495474, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.546066, + 33.969403 + ], + [ + -117.545294, + 33.969315 + ], + [ + -117.54509, + 33.969266 + ], + [ + -117.54465, + 33.969101 + ], + [ + -117.544768, + 33.968834 + ], + [ + -117.544816, + 33.968638 + ], + [ + -117.544833, + 33.968193 + ], + [ + -117.546061, + 33.968171 + ], + [ + -117.546066, + 33.969403 + ] + ] + ] + }, + "properties": { + "name": "Limonite Meadows Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143496079, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.582067, + 33.946413 + ], + [ + -117.582067, + 33.946309 + ], + [ + -117.581448, + 33.946309 + ], + [ + -117.581165, + 33.946203 + ], + [ + -117.575769, + 33.946302 + ], + [ + -117.575727, + 33.948171 + ], + [ + -117.576639, + 33.948153 + ], + [ + -117.576638, + 33.948783 + ], + [ + -117.576987, + 33.948776 + ], + [ + -117.576939, + 33.94866 + ], + [ + -117.576901, + 33.948558 + ], + [ + -117.576917, + 33.948482 + ], + [ + -117.576987, + 33.948464 + ], + [ + -117.577084, + 33.94846 + ], + [ + -117.577532, + 33.948449 + ], + [ + -117.577533, + 33.947581 + ], + [ + -117.57995, + 33.947595 + ], + [ + -117.57997, + 33.947493 + ], + [ + -117.579969, + 33.947424 + ], + [ + -117.579965, + 33.947376 + ], + [ + -117.579962, + 33.947345 + ], + [ + -117.57996, + 33.947327 + ], + [ + -117.579941, + 33.947265 + ], + [ + -117.579936, + 33.947237 + ], + [ + -117.579938, + 33.947205 + ], + [ + -117.579958, + 33.947168 + ], + [ + -117.579993, + 33.947136 + ], + [ + -117.580045, + 33.947116 + ], + [ + -117.580125, + 33.94712 + ], + [ + -117.580174, + 33.947134 + ], + [ + -117.580571, + 33.947138 + ], + [ + -117.580791, + 33.947183 + ], + [ + -117.582067, + 33.946413 + ] + ] + ] + }, + "properties": { + "name": "River Walk Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143736543, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.283902, + 34.053424 + ], + [ + -117.283773, + 34.052877 + ], + [ + -117.283569, + 34.052597 + ], + [ + -117.283008, + 34.052089 + ], + [ + -117.2827, + 34.051805 + ], + [ + -117.2828, + 34.052151 + ], + [ + -117.28277, + 34.052322 + ], + [ + -117.282452, + 34.052728 + ], + [ + -117.283586, + 34.053348 + ], + [ + -117.283902, + 34.053424 + ] + ] + ] + }, + "properties": { + "name": "Colony Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143786612, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.405401, + 34.048566 + ], + [ + -117.40539, + 34.04649 + ], + [ + -117.402698, + 34.046495 + ], + [ + -117.402708, + 34.046681 + ], + [ + -117.400825, + 34.046668 + ], + [ + -117.40082, + 34.048601 + ], + [ + -117.405401, + 34.048566 + ] + ] + ] + }, + "properties": { + "name": "Kessler Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143788957, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.470766, + 34.131343 + ], + [ + -117.469288, + 34.131342 + ], + [ + -117.469292, + 34.128713 + ], + [ + -117.470777, + 34.128713 + ], + [ + -117.470817, + 34.12872 + ], + [ + -117.470856, + 34.12874 + ], + [ + -117.470879, + 34.128771 + ], + [ + -117.470885, + 34.128809 + ], + [ + -117.470876, + 34.131244 + ], + [ + -117.470868, + 34.13128 + ], + [ + -117.470845, + 34.131312 + ], + [ + -117.470812, + 34.131332 + ], + [ + -117.470766, + 34.131343 + ] + ] + ] + }, + "properties": { + "name": "Koehler Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143789049, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.46228, + 34.123174 + ], + [ + -117.460295, + 34.123178 + ], + [ + -117.460295, + 34.121513 + ], + [ + -117.462258, + 34.121522 + ], + [ + -117.46228, + 34.123174 + ] + ] + ] + }, + "properties": { + "name": "Almeria Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143789369, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.431161, + 34.133267 + ], + [ + -117.431065, + 34.133582 + ], + [ + -117.430829, + 34.133636 + ], + [ + -117.430689, + 34.133809 + ], + [ + -117.430533, + 34.133667 + ], + [ + -117.430319, + 34.133605 + ], + [ + -117.429965, + 34.133613 + ], + [ + -117.429959, + 34.133472 + ], + [ + -117.43026, + 34.13349 + ], + [ + -117.43026, + 34.132872 + ], + [ + -117.430415, + 34.132872 + ], + [ + -117.430415, + 34.132659 + ], + [ + -117.430716, + 34.132646 + ], + [ + -117.430694, + 34.133063 + ], + [ + -117.430903, + 34.133245 + ], + [ + -117.431161, + 34.133267 + ] + ] + ] + }, + "properties": { + "name": "Cambria Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143789595, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.499273, + 34.121273 + ], + [ + -117.499262, + 34.118844 + ], + [ + -117.498758, + 34.11895 + ], + [ + -117.498339, + 34.119159 + ], + [ + -117.497921, + 34.119417 + ], + [ + -117.497631, + 34.119621 + ], + [ + -117.497352, + 34.119968 + ], + [ + -117.497062, + 34.120385 + ], + [ + -117.496944, + 34.120794 + ], + [ + -117.496902, + 34.121096 + ], + [ + -117.496902, + 34.121247 + ], + [ + -117.499273, + 34.121273 + ] + ] + ] + }, + "properties": { + "name": "McDermott Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143790224, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.444481, + 34.111174 + ], + [ + -117.444481, + 34.110281 + ], + [ + -117.441101, + 34.110259 + ], + [ + -117.441085, + 34.110628 + ], + [ + -117.440501, + 34.110627 + ], + [ + -117.440265, + 34.110627 + ], + [ + -117.440281, + 34.112977 + ], + [ + -117.441246, + 34.112982 + ], + [ + -117.441246, + 34.112085 + ], + [ + -117.44233, + 34.112067 + ], + [ + -117.442351, + 34.111165 + ], + [ + -117.444481, + 34.111174 + ] + ] + ] + }, + "properties": { + "name": "Bill Martin Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143790464, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.422692, + 34.108523 + ], + [ + -117.420509, + 34.108533 + ], + [ + -117.420515, + 34.107618 + ], + [ + -117.422685, + 34.10763 + ], + [ + -117.422692, + 34.108523 + ] + ] + ] + }, + "properties": { + "name": "North Tamarind Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143790511, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.411522, + 34.114394 + ], + [ + -117.411516, + 34.114092 + ], + [ + -117.409768, + 34.114096 + ], + [ + -117.409794, + 34.114914 + ], + [ + -117.411372, + 34.114909 + ], + [ + -117.411361, + 34.114399 + ], + [ + -117.411522, + 34.114394 + ] + ] + ] + }, + "properties": { + "name": "Fernandez Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143790664, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.444411, + 34.101542 + ], + [ + -117.440258, + 34.101563 + ], + [ + -117.440271, + 34.101074 + ], + [ + -117.440273, + 34.100934 + ], + [ + -117.44441, + 34.100923 + ], + [ + -117.444411, + 34.101542 + ] + ] + ] + }, + "properties": { + "name": "Seville Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143790737, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.434511, + 34.100966 + ], + [ + -117.432855, + 34.100974 + ], + [ + -117.432848, + 34.099974 + ], + [ + -117.432844, + 34.099457 + ], + [ + -117.432844, + 34.099432 + ], + [ + -117.433949, + 34.099415 + ], + [ + -117.433945, + 34.100016 + ], + [ + -117.434496, + 34.100019 + ], + [ + -117.434498, + 34.100123 + ], + [ + -117.434499, + 34.100158 + ], + [ + -117.434511, + 34.100966 + ] + ] + ] + }, + "properties": { + "name": "Miller Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143790832, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.436722, + 34.095763 + ], + [ + -117.436707, + 34.095353 + ], + [ + -117.435881, + 34.095373 + ], + [ + -117.435896, + 34.095784 + ], + [ + -117.436722, + 34.095763 + ] + ] + ] + }, + "properties": { + "name": "Santa Fe Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143790956, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.431317, + 34.091238 + ], + [ + -117.43131, + 34.089188 + ], + [ + -117.431311, + 34.088519 + ], + [ + -117.429185, + 34.088526 + ], + [ + -117.429176, + 34.090337 + ], + [ + -117.427095, + 34.09035 + ], + [ + -117.427116, + 34.092069 + ], + [ + -117.430308, + 34.092047 + ], + [ + -117.430307, + 34.091245 + ], + [ + -117.431317, + 34.091238 + ] + ] + ] + }, + "properties": { + "name": "Veterans Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143791011, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.44388, + 34.082055 + ], + [ + -117.443868, + 34.081217 + ], + [ + -117.44434, + 34.081204 + ], + [ + -117.444346, + 34.079389 + ], + [ + -117.440157, + 34.079403 + ], + [ + -117.440146, + 34.082086 + ], + [ + -117.44388, + 34.082055 + ] + ] + ] + }, + "properties": { + "name": "Jack Bulik Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143791219, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.501751, + 34.044259 + ], + [ + -117.501767, + 34.045677 + ], + [ + -117.502282, + 34.045686 + ], + [ + -117.502272, + 34.046233 + ], + [ + -117.497782, + 34.046257 + ], + [ + -117.497779, + 34.045699 + ], + [ + -117.49953, + 34.045701 + ], + [ + -117.500067, + 34.045702 + ], + [ + -117.500094, + 34.045702 + ], + [ + -117.500563, + 34.045702 + ], + [ + -117.500573, + 34.045623 + ], + [ + -117.500591, + 34.045524 + ], + [ + -117.500624, + 34.045384 + ], + [ + -117.500761, + 34.045133 + ], + [ + -117.500867, + 34.045037 + ], + [ + -117.500985, + 34.044932 + ], + [ + -117.501135, + 34.044874 + ], + [ + -117.50113, + 34.044778 + ], + [ + -117.501166, + 34.044577 + ], + [ + -117.501194, + 34.044408 + ], + [ + -117.501196, + 34.044393 + ], + [ + -117.501203, + 34.044269 + ], + [ + -117.501751, + 34.044259 + ] + ] + ] + }, + "properties": { + "name": "Chaparrel Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143791254, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.495062, + 34.044259 + ], + [ + -117.495057, + 34.045172 + ], + [ + -117.495041, + 34.04529 + ], + [ + -117.495121, + 34.045388 + ], + [ + -117.495159, + 34.045432 + ], + [ + -117.495153, + 34.045673 + ], + [ + -117.495073, + 34.045677 + ], + [ + -117.495078, + 34.046224 + ], + [ + -117.492471, + 34.046203 + ], + [ + -117.492476, + 34.045646 + ], + [ + -117.493925, + 34.045628 + ], + [ + -117.494102, + 34.045315 + ], + [ + -117.494214, + 34.045086 + ], + [ + -117.494225, + 34.044935 + ], + [ + -117.494108, + 34.044932 + ], + [ + -117.494107, + 34.044846 + ], + [ + -117.494241, + 34.044792 + ], + [ + -117.494102, + 34.044701 + ], + [ + -117.494129, + 34.044228 + ], + [ + -117.495062, + 34.044259 + ] + ] + ] + }, + "properties": { + "name": "Shadow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143791295, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.496902, + 34.03604 + ], + [ + -117.495529, + 34.035028 + ], + [ + -117.49561, + 34.034993 + ], + [ + -117.495775, + 34.034955 + ], + [ + -117.495995, + 34.034951 + ], + [ + -117.497251, + 34.034942 + ], + [ + -117.497567, + 34.034982 + ], + [ + -117.497669, + 34.035044 + ], + [ + -117.497744, + 34.035102 + ], + [ + -117.497825, + 34.035102 + ], + [ + -117.497927, + 34.035066 + ], + [ + -117.497969, + 34.035142 + ], + [ + -117.496902, + 34.03604 + ] + ] + ] + }, + "properties": { + "name": "Oak Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143791348, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.486436, + 34.040636 + ], + [ + -117.486442, + 34.040492 + ], + [ + -117.486496, + 34.040207 + ], + [ + -117.486549, + 34.039869 + ], + [ + -117.486683, + 34.039529 + ], + [ + -117.486767, + 34.039383 + ], + [ + -117.486892, + 34.039165 + ], + [ + -117.486989, + 34.039038 + ], + [ + -117.486404, + 34.038818 + ], + [ + -117.485626, + 34.038598 + ], + [ + -117.483433, + 34.03858 + ], + [ + -117.483121, + 34.038538 + ], + [ + -117.481656, + 34.037987 + ], + [ + -117.481603, + 34.03808 + ], + [ + -117.481887, + 34.038463 + ], + [ + -117.482509, + 34.039961 + ], + [ + -117.482698, + 34.040914 + ], + [ + -117.482665, + 34.041543 + ], + [ + -117.482981, + 34.041832 + ], + [ + -117.483233, + 34.04153 + ], + [ + -117.483459, + 34.041332 + ], + [ + -117.483803, + 34.041078 + ], + [ + -117.484226, + 34.040861 + ], + [ + -117.484613, + 34.04074 + ], + [ + -117.485015, + 34.040667 + ], + [ + -117.485293, + 34.040641 + ], + [ + -117.486436, + 34.040636 + ] + ] + ] + }, + "properties": { + "name": "Southridge Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143792652, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.466775, + 34.042259 + ], + [ + -117.465086, + 34.042259 + ], + [ + -117.464935, + 34.042134 + ], + [ + -117.464905, + 34.040904 + ], + [ + -117.463478, + 34.040904 + ], + [ + -117.463167, + 34.040908 + ], + [ + -117.462757, + 34.043099 + ], + [ + -117.462859, + 34.04313 + ], + [ + -117.466791, + 34.043072 + ], + [ + -117.466775, + 34.042259 + ] + ] + ] + }, + "properties": { + "name": "Village Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143792703, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.462409, + 34.046641 + ], + [ + -117.462373, + 34.045851 + ], + [ + -117.458591, + 34.045887 + ], + [ + -117.458584, + 34.045459 + ], + [ + -117.45843, + 34.04546 + ], + [ + -117.45836, + 34.045438 + ], + [ + -117.458301, + 34.04538 + ], + [ + -117.458301, + 34.045305 + ], + [ + -117.458321, + 34.045259 + ], + [ + -117.457867, + 34.045265 + ], + [ + -117.45787, + 34.045885 + ], + [ + -117.456923, + 34.045896 + ], + [ + -117.45691, + 34.046708 + ], + [ + -117.462409, + 34.046641 + ] + ] + ] + }, + "properties": { + "name": "Catawba Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143792798, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.431491, + 34.044323 + ], + [ + -117.431351, + 34.044134 + ], + [ + -117.431196, + 34.044268 + ], + [ + -117.431015, + 34.04448 + ], + [ + -117.430853, + 34.044739 + ], + [ + -117.430536, + 34.044608 + ], + [ + -117.430244, + 34.045094 + ], + [ + -117.430482, + 34.045177 + ], + [ + -117.430643, + 34.045188 + ], + [ + -117.430828, + 34.045181 + ], + [ + -117.431096, + 34.045166 + ], + [ + -117.431153, + 34.045157 + ], + [ + -117.431142, + 34.044812 + ], + [ + -117.431341, + 34.044452 + ], + [ + -117.431349, + 34.044399 + ], + [ + -117.431378, + 34.044356 + ], + [ + -117.431421, + 34.044339 + ], + [ + -117.431491, + 34.044323 + ] + ] + ] + }, + "properties": { + "name": "Fiesta Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 143792890, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.42997, + 34.053762 + ], + [ + -117.429854, + 34.053852 + ], + [ + -117.429645, + 34.053927 + ], + [ + -117.429455, + 34.053939 + ], + [ + -117.428983, + 34.053939 + ], + [ + -117.428978, + 34.052362 + ], + [ + -117.429772, + 34.052344 + ], + [ + -117.429777, + 34.053295 + ], + [ + -117.429852, + 34.053513 + ], + [ + -117.429907, + 34.053638 + ], + [ + -117.42997, + 34.053762 + ] + ] + ] + }, + "properties": { + "name": "Sycamore Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144086936, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.743802, + 34.093603 + ], + [ + -117.742892, + 34.093671 + ], + [ + -117.742888, + 34.093217 + ], + [ + -117.741611, + 34.093226 + ], + [ + -117.741633, + 34.090142 + ], + [ + -117.743784, + 34.09013 + ], + [ + -117.743802, + 34.093603 + ] + ] + ] + }, + "properties": { + "name": "Palomares Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144086942, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.746332, + 34.084624 + ], + [ + -117.745322, + 34.084275 + ], + [ + -117.745336, + 34.084211 + ], + [ + -117.746279, + 34.08234 + ], + [ + -117.746301, + 34.082316 + ], + [ + -117.746328, + 34.082303 + ], + [ + -117.746359, + 34.082299 + ], + [ + -117.746393, + 34.082306 + ], + [ + -117.747214, + 34.082859 + ], + [ + -117.746332, + 34.084624 + ] + ] + ] + }, + "properties": { + "name": "Ted Greene Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144175045, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.582506, + 34.074082 + ], + [ + -117.581275, + 34.074111 + ], + [ + -117.5805, + 34.074111 + ], + [ + -117.58009, + 34.074851 + ], + [ + -117.580607, + 34.075249 + ], + [ + -117.581063, + 34.075257 + ], + [ + -117.582378, + 34.07524 + ], + [ + -117.582507, + 34.075239 + ], + [ + -117.582506, + 34.074082 + ] + ] + ] + }, + "properties": { + "name": "Ontario Motor Speedway Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144175091, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.63908, + 34.053571 + ], + [ + -117.636725, + 34.053562 + ], + [ + -117.636746, + 34.052471 + ], + [ + -117.63679, + 34.05214 + ], + [ + -117.636886, + 34.051828 + ], + [ + -117.637068, + 34.051544 + ], + [ + -117.639112, + 34.051539 + ], + [ + -117.63908, + 34.053571 + ] + ] + ] + }, + "properties": { + "name": "Bon View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144175636, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.583121, + 34.020228 + ], + [ + -117.584429, + 34.020233 + ], + [ + -117.58443, + 34.019274 + ], + [ + -117.584335, + 34.019175 + ], + [ + -117.581104, + 34.019157 + ], + [ + -117.581097, + 34.019702 + ], + [ + -117.583133, + 34.019702 + ], + [ + -117.583121, + 34.020228 + ] + ] + ] + }, + "properties": { + "name": "Creekside Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144175851, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.654615, + 34.050046 + ], + [ + -117.654615, + 34.049772 + ], + [ + -117.654613, + 34.048808 + ], + [ + -117.65461, + 34.04749 + ], + [ + -117.65457, + 34.04749 + ], + [ + -117.653744, + 34.04748 + ], + [ + -117.652357, + 34.047463 + ], + [ + -117.652357, + 34.048357 + ], + [ + -117.65123, + 34.048326 + ], + [ + -117.651204, + 34.050295 + ], + [ + -117.651911, + 34.050243 + ], + [ + -117.653804, + 34.050105 + ], + [ + -117.654615, + 34.050046 + ] + ] + ] + }, + "properties": { + "name": "De Anza Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144175883, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.665527, + 34.036395 + ], + [ + -117.665436, + 34.036391 + ], + [ + -117.665403, + 34.03648 + ], + [ + -117.665285, + 34.036506 + ], + [ + -117.665162, + 34.036493 + ], + [ + -117.664963, + 34.036448 + ], + [ + -117.663424, + 34.036462 + ], + [ + -117.663434, + 34.037373 + ], + [ + -117.665516, + 34.037364 + ], + [ + -117.665527, + 34.036395 + ] + ] + ] + }, + "properties": { + "name": "Del Rancho Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176032, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.674282, + 34.037279 + ], + [ + -117.676334, + 34.037263 + ], + [ + -117.676312, + 34.034575 + ], + [ + -117.674248, + 34.034593 + ], + [ + -117.674282, + 34.037279 + ] + ] + ] + }, + "properties": { + "name": "Homer F. Briggs Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176441, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.647169, + 34.058394 + ], + [ + -117.64611, + 34.058397 + ], + [ + -117.646108, + 34.057946 + ], + [ + -117.647167, + 34.057943 + ], + [ + -117.647169, + 34.058394 + ] + ] + ] + }, + "properties": { + "name": "Sam Alba Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176491, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.62899, + 34.070591 + ], + [ + -117.628614, + 34.070573 + ], + [ + -117.628587, + 34.070222 + ], + [ + -117.628518, + 34.070062 + ], + [ + -117.628437, + 34.069956 + ], + [ + -117.62833, + 34.069849 + ], + [ + -117.62855, + 34.069667 + ], + [ + -117.627627, + 34.068872 + ], + [ + -117.625733, + 34.068876 + ], + [ + -117.625728, + 34.067152 + ], + [ + -117.626538, + 34.067138 + ], + [ + -117.627069, + 34.067645 + ], + [ + -117.628158, + 34.068991 + ], + [ + -117.628544, + 34.069467 + ], + [ + -117.628689, + 34.069742 + ], + [ + -117.628845, + 34.070165 + ], + [ + -117.62899, + 34.070591 + ] + ] + ] + }, + "properties": { + "name": "Veterans Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176516, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.622061, + 34.084816 + ], + [ + -117.622069, + 34.083103 + ], + [ + -117.619969, + 34.083097 + ], + [ + -117.619961, + 34.084809 + ], + [ + -117.622061, + 34.084816 + ] + ] + ] + }, + "properties": { + "name": "Vineyard Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176609, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.691708, + 34.014535 + ], + [ + -117.69132, + 34.014538 + ], + [ + -117.691314, + 34.013967 + ], + [ + -117.691701, + 34.013964 + ], + [ + -117.691708, + 34.014535 + ] + ] + ] + }, + "properties": { + "name": "Agular Square", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176718, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.662732, + 34.004641 + ], + [ + -117.660807, + 34.004607 + ], + [ + -117.660731, + 34.004606 + ], + [ + -117.660722, + 34.002929 + ], + [ + -117.6627, + 34.002937 + ], + [ + -117.662732, + 34.004641 + ] + ] + ] + }, + "properties": { + "name": "Cypress Trails Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176730, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.61619, + 33.966335 + ], + [ + -117.616176, + 33.966416 + ], + [ + -117.616139, + 33.966491 + ], + [ + -117.61609, + 33.966565 + ], + [ + -117.615999, + 33.966629 + ], + [ + -117.615938, + 33.96666 + ], + [ + -117.615063, + 33.966934 + ], + [ + -117.614935, + 33.966938 + ], + [ + -117.614838, + 33.966927 + ], + [ + -117.614749, + 33.966901 + ], + [ + -117.61468, + 33.966863 + ], + [ + -117.61461, + 33.966807 + ], + [ + -117.614564, + 33.966749 + ], + [ + -117.614521, + 33.96668 + ], + [ + -117.614503, + 33.966609 + ], + [ + -117.614495, + 33.96652 + ], + [ + -117.614513, + 33.966445 + ], + [ + -117.614548, + 33.966373 + ], + [ + -117.614597, + 33.966318 + ], + [ + -117.614664, + 33.966258 + ], + [ + -117.614712, + 33.96622 + ], + [ + -117.614776, + 33.966202 + ], + [ + -117.615651, + 33.965933 + ], + [ + -117.615728, + 33.965931 + ], + [ + -117.615828, + 33.965937 + ], + [ + -117.615897, + 33.965955 + ], + [ + -117.615986, + 33.965989 + ], + [ + -117.616053, + 33.96604 + ], + [ + -117.616123, + 33.966115 + ], + [ + -117.616166, + 33.966189 + ], + [ + -117.616182, + 33.966262 + ], + [ + -117.61619, + 33.966335 + ] + ] + ] + }, + "properties": { + "name": "Forest Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176839, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.713181, + 34.013456 + ], + [ + -117.711119, + 34.013466 + ], + [ + -117.711106, + 34.011758 + ], + [ + -117.713167, + 34.011747 + ], + [ + -117.713181, + 34.013456 + ] + ] + ] + }, + "properties": { + "name": "Heritage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176879, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.696049, + 34.038946 + ], + [ + -117.696056, + 34.038253 + ], + [ + -117.695977, + 34.038189 + ], + [ + -117.69597, + 34.038129 + ], + [ + -117.695986, + 34.038049 + ], + [ + -117.696013, + 34.038 + ], + [ + -117.696013, + 34.037978 + ], + [ + -117.696014, + 34.037883 + ], + [ + -117.696016, + 34.037766 + ], + [ + -117.696023, + 34.037151 + ], + [ + -117.695285, + 34.037126 + ], + [ + -117.69516, + 34.037182 + ], + [ + -117.695053, + 34.0372 + ], + [ + -117.694908, + 34.037173 + ], + [ + -117.693955, + 34.03718 + ], + [ + -117.693952, + 34.037277 + ], + [ + -117.693931, + 34.03804 + ], + [ + -117.694951, + 34.038027 + ], + [ + -117.694951, + 34.038613 + ], + [ + -117.694902, + 34.038782 + ], + [ + -117.694908, + 34.038876 + ], + [ + -117.69494, + 34.038938 + ], + [ + -117.695015, + 34.038956 + ], + [ + -117.695428, + 34.038952 + ], + [ + -117.6956, + 34.03895 + ], + [ + -117.695705, + 34.03895 + ], + [ + -117.696049, + 34.038946 + ] + ] + ] + }, + "properties": { + "name": "Liberty Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176889, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.669853, + 34.025706 + ], + [ + -117.671076, + 34.025701 + ], + [ + -117.671076, + 34.024603 + ], + [ + -117.669749, + 34.024601 + ], + [ + -117.669753, + 34.024772 + ], + [ + -117.66981, + 34.024905 + ], + [ + -117.66985, + 34.025072 + ], + [ + -117.669855, + 34.025299 + ], + [ + -117.669853, + 34.025706 + ] + ] + ] + }, + "properties": { + "name": "McLeod Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176907, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.699151, + 34.014459 + ], + [ + -117.698145, + 34.014457 + ], + [ + -117.698132, + 34.012785 + ], + [ + -117.699116, + 34.012767 + ], + [ + -117.699111, + 34.01256 + ], + [ + -117.699443, + 34.012745 + ], + [ + -117.699446, + 34.013436 + ], + [ + -117.699124, + 34.013441 + ], + [ + -117.699151, + 34.014459 + ] + ] + ] + }, + "properties": { + "name": "Monte Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176930, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.667319, + 34.011844 + ], + [ + -117.665288, + 34.011849 + ], + [ + -117.665256, + 34.010155 + ], + [ + -117.667319, + 34.010146 + ], + [ + -117.667319, + 34.011844 + ] + ] + ] + }, + "properties": { + "name": "Mountain View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176973, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.658704, + 34.013472 + ], + [ + -117.657713, + 34.01346 + ], + [ + -117.65767, + 34.012122 + ], + [ + -117.656587, + 34.012117 + ], + [ + -117.656606, + 34.013756 + ], + [ + -117.65674, + 34.013756 + ], + [ + -117.656831, + 34.01373 + ], + [ + -117.656955, + 34.013712 + ], + [ + -117.657062, + 34.013739 + ], + [ + -117.657126, + 34.013788 + ], + [ + -117.657164, + 34.013863 + ], + [ + -117.658709, + 34.013854 + ], + [ + -117.658704, + 34.013472 + ] + ] + ] + }, + "properties": { + "name": "Shady Grove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176977, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.696002, + 34.008349 + ], + [ + -117.694291, + 34.008331 + ], + [ + -117.694259, + 34.006335 + ], + [ + -117.694334, + 34.006286 + ], + [ + -117.69443, + 34.006335 + ], + [ + -117.696002, + 34.006357 + ], + [ + -117.696002, + 34.008349 + ] + ] + ] + }, + "properties": { + "name": "Villa Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144176990, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.705363, + 34.027895 + ], + [ + -117.704636, + 34.027826 + ], + [ + -117.704303, + 34.027644 + ], + [ + -117.703606, + 34.027666 + ], + [ + -117.703732, + 34.027344 + ], + [ + -117.703738, + 34.02713 + ], + [ + -117.704134, + 34.027144 + ], + [ + -117.704129, + 34.026299 + ], + [ + -117.705341, + 34.026281 + ], + [ + -117.705363, + 34.027895 + ] + ] + ] + }, + "properties": { + "name": "Walnut Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144177348, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.611967, + 34.154819 + ], + [ + -117.61196, + 34.154257 + ], + [ + -117.611926, + 34.151181 + ], + [ + -117.611871, + 34.151135 + ], + [ + -117.607504, + 34.151148 + ], + [ + -117.60754, + 34.154782 + ], + [ + -117.607561, + 34.15482 + ], + [ + -117.607607, + 34.154838 + ], + [ + -117.611967, + 34.154819 + ] + ] + ] + }, + "properties": { + "name": "Heritage Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144177369, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.514551, + 34.14676 + ], + [ + -117.511218, + 34.146777 + ], + [ + -117.511193, + 34.145136 + ], + [ + -117.514544, + 34.145113 + ], + [ + -117.514551, + 34.14676 + ] + ] + ] + }, + "properties": { + "name": "Etiwanda Creek Community Park & Dog Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144177476, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.570801, + 34.121586 + ], + [ + -117.570251, + 34.122552 + ], + [ + -117.570007, + 34.12299 + ], + [ + -117.56974, + 34.12347 + ], + [ + -117.569327, + 34.12422 + ], + [ + -117.569121, + 34.124595 + ], + [ + -117.568961, + 34.124879 + ], + [ + -117.56885, + 34.125081 + ], + [ + -117.568757, + 34.125239 + ], + [ + -117.568708, + 34.125327 + ], + [ + -117.56861, + 34.125503 + ], + [ + -117.558725, + 34.125344 + ], + [ + -117.558714, + 34.122637 + ], + [ + -117.558753, + 34.122268 + ], + [ + -117.558754, + 34.121702 + ], + [ + -117.558763, + 34.121665 + ], + [ + -117.558786, + 34.12163 + ], + [ + -117.558813, + 34.121616 + ], + [ + -117.558855, + 34.121605 + ], + [ + -117.559179, + 34.121601 + ], + [ + -117.559303, + 34.121623 + ], + [ + -117.559621, + 34.121621 + ], + [ + -117.559793, + 34.121595 + ], + [ + -117.560504, + 34.121572 + ], + [ + -117.562045, + 34.121577 + ], + [ + -117.562196, + 34.121605 + ], + [ + -117.562718, + 34.121607 + ], + [ + -117.563152, + 34.121573 + ], + [ + -117.569114, + 34.121582 + ], + [ + -117.56971, + 34.121583 + ], + [ + -117.570585, + 34.121588 + ], + [ + -117.570801, + 34.121586 + ] + ] + ] + }, + "properties": { + "name": "Rancho Cucamonga Central Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144177656, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.605429, + 34.121444 + ], + [ + -117.604148, + 34.12144 + ], + [ + -117.60415, + 34.120961 + ], + [ + -117.604138, + 34.120502 + ], + [ + -117.604132, + 34.119824 + ], + [ + -117.604668, + 34.119836 + ], + [ + -117.604669, + 34.120012 + ], + [ + -117.605453, + 34.120005 + ], + [ + -117.605429, + 34.121444 + ] + ] + ] + }, + "properties": { + "name": "Lions Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144177710, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.583636, + 34.1155 + ], + [ + -117.583641, + 34.114134 + ], + [ + -117.58211, + 34.114138 + ], + [ + -117.582111, + 34.114752 + ], + [ + -117.581783, + 34.114752 + ], + [ + -117.581785, + 34.115878 + ], + [ + -117.582556, + 34.115869 + ], + [ + -117.58255, + 34.115503 + ], + [ + -117.583636, + 34.1155 + ] + ] + ] + }, + "properties": { + "name": "Church Street Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144177785, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.606689, + 34.101195 + ], + [ + -117.607703, + 34.101184 + ], + [ + -117.607826, + 34.101183 + ], + [ + -117.607785, + 34.099491 + ], + [ + -117.606704, + 34.099497 + ], + [ + -117.606689, + 34.101195 + ] + ] + ] + }, + "properties": { + "name": "Bear Gulch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144177823, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.673186, + 34.152308 + ], + [ + -117.670516, + 34.15231 + ], + [ + -117.670511, + 34.151968 + ], + [ + -117.670462, + 34.151884 + ], + [ + -117.670403, + 34.151813 + ], + [ + -117.670462, + 34.151662 + ], + [ + -117.670516, + 34.15148 + ], + [ + -117.670543, + 34.151298 + ], + [ + -117.670527, + 34.150583 + ], + [ + -117.672554, + 34.150554 + ], + [ + -117.672546, + 34.151104 + ], + [ + -117.672577, + 34.151262 + ], + [ + -117.672822, + 34.151568 + ], + [ + -117.672881, + 34.151534 + ], + [ + -117.67295, + 34.151599 + ], + [ + -117.672997, + 34.151708 + ], + [ + -117.672984, + 34.151835 + ], + [ + -117.672925, + 34.151933 + ], + [ + -117.673163, + 34.152024 + ], + [ + -117.673216, + 34.152161 + ], + [ + -117.673186, + 34.152308 + ] + ] + ] + }, + "properties": { + "name": "San Antonio Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144177863, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.679426, + 34.117756 + ], + [ + -117.67941, + 34.116002 + ], + [ + -117.678305, + 34.116001 + ], + [ + -117.678305, + 34.115416 + ], + [ + -117.677355, + 34.115562 + ], + [ + -117.677355, + 34.116121 + ], + [ + -117.677339, + 34.116268 + ], + [ + -117.677323, + 34.117107 + ], + [ + -117.677339, + 34.117303 + ], + [ + -117.677457, + 34.11776 + ], + [ + -117.679426, + 34.117756 + ] + ] + ] + }, + "properties": { + "name": "Greenbelt Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144177877, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.660774, + 34.118986 + ], + [ + -117.659631, + 34.118986 + ], + [ + -117.659613, + 34.117925 + ], + [ + -117.658462, + 34.117924 + ], + [ + -117.658483, + 34.119696 + ], + [ + -117.660769, + 34.11969 + ], + [ + -117.660774, + 34.118986 + ] + ] + ] + }, + "properties": { + "name": "Magnolia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144178010, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.677992, + 34.105052 + ], + [ + -117.677987, + 34.103317 + ], + [ + -117.674408, + 34.103323 + ], + [ + -117.674412, + 34.105101 + ], + [ + -117.674756, + 34.1051 + ], + [ + -117.674758, + 34.105813 + ], + [ + -117.676938, + 34.10581 + ], + [ + -117.676936, + 34.105053 + ], + [ + -117.677992, + 34.105052 + ] + ] + ] + }, + "properties": { + "name": "Cabrillo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144178011, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.667891, + 34.105115 + ], + [ + -117.666735, + 34.105118 + ], + [ + -117.666727, + 34.103382 + ], + [ + -117.667883, + 34.103378 + ], + [ + -117.667891, + 34.105115 + ] + ] + ] + }, + "properties": { + "name": "Baldy View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144178033, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.632531, + 34.103112 + ], + [ + -117.634984, + 34.102045 + ], + [ + -117.635088, + 34.102205 + ], + [ + -117.635276, + 34.102342 + ], + [ + -117.635393, + 34.102527 + ], + [ + -117.635724, + 34.103048 + ], + [ + -117.635747, + 34.103251 + ], + [ + -117.635829, + 34.103338 + ], + [ + -117.635996, + 34.103503 + ], + [ + -117.636173, + 34.103871 + ], + [ + -117.636323, + 34.104284 + ], + [ + -117.636371, + 34.1046 + ], + [ + -117.636398, + 34.10583 + ], + [ + -117.636505, + 34.106204 + ], + [ + -117.636624, + 34.106453 + ], + [ + -117.636682, + 34.106665 + ], + [ + -117.636683, + 34.106808 + ], + [ + -117.636656, + 34.106883 + ], + [ + -117.636505, + 34.106892 + ], + [ + -117.632901, + 34.106901 + ], + [ + -117.632466, + 34.106896 + ], + [ + -117.632332, + 34.106865 + ], + [ + -117.63237, + 34.106675 + ], + [ + -117.632565, + 34.106692 + ], + [ + -117.632541, + 34.104565 + ], + [ + -117.632531, + 34.103112 + ] + ] + ] + }, + "properties": { + "name": "Upland Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144178103, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.645334, + 34.092419 + ], + [ + -117.643891, + 34.09242 + ], + [ + -117.643888, + 34.090702 + ], + [ + -117.645331, + 34.0907 + ], + [ + -117.645334, + 34.092419 + ] + ] + ] + }, + "properties": { + "name": "Olivedale Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 145901373, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.681969, + 33.996493 + ], + [ + -117.681021, + 33.9965 + ], + [ + -117.680193, + 33.996512 + ], + [ + -117.680192, + 33.995984 + ], + [ + -117.680264, + 33.995984 + ], + [ + -117.680262, + 33.995893 + ], + [ + -117.680282, + 33.995862 + ], + [ + -117.680317, + 33.995853 + ], + [ + -117.680363, + 33.995852 + ], + [ + -117.680956, + 33.995849 + ], + [ + -117.680957, + 33.995882 + ], + [ + -117.681015, + 33.995881 + ], + [ + -117.681015, + 33.995784 + ], + [ + -117.681967, + 33.995791 + ], + [ + -117.681969, + 33.996493 + ] + ] + ] + }, + "properties": { + "name": "YMCA", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 154083410, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.746092, + 34.070451 + ], + [ + -117.746125, + 34.070347 + ], + [ + -117.746138, + 34.070229 + ], + [ + -117.746151, + 34.070098 + ], + [ + -117.746143, + 34.069905 + ], + [ + -117.746001, + 34.069975 + ], + [ + -117.745851, + 34.069998 + ], + [ + -117.74569, + 34.069996 + ], + [ + -117.745556, + 34.069958 + ], + [ + -117.745392, + 34.069925 + ], + [ + -117.745248, + 34.06992 + ], + [ + -117.745137, + 34.069929 + ], + [ + -117.745006, + 34.069969 + ], + [ + -117.744906, + 34.070009 + ], + [ + -117.744786, + 34.070091 + ], + [ + -117.744676, + 34.070215 + ], + [ + -117.744622, + 34.070327 + ], + [ + -117.744601, + 34.07042 + ], + [ + -117.744604, + 34.070554 + ], + [ + -117.744628, + 34.070662 + ], + [ + -117.744681, + 34.070778 + ], + [ + -117.744754, + 34.070866 + ], + [ + -117.744848, + 34.070936 + ], + [ + -117.744963, + 34.071013 + ], + [ + -117.745105, + 34.071064 + ], + [ + -117.745274, + 34.071071 + ], + [ + -117.7454, + 34.071071 + ], + [ + -117.745521, + 34.07106 + ], + [ + -117.745649, + 34.071009 + ], + [ + -117.745757, + 34.070944 + ], + [ + -117.745851, + 34.070858 + ], + [ + -117.745929, + 34.070769 + ], + [ + -117.746004, + 34.070645 + ], + [ + -117.746054, + 34.070553 + ], + [ + -117.746092, + 34.070451 + ] + ] + ] + }, + "properties": { + "name": "Lincoln Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 165683151, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.804793, + 34.108632 + ], + [ + -117.804807, + 34.107873 + ], + [ + -117.80386, + 34.107875 + ], + [ + -117.803852, + 34.108632 + ], + [ + -117.804793, + 34.108632 + ] + ] + ] + }, + "properties": { + "name": "Civic Center Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 165687422, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.813598, + 34.105624 + ], + [ + -117.813609, + 34.104666 + ], + [ + -117.812, + 34.104654 + ], + [ + -117.811579, + 34.10465 + ], + [ + -117.811577, + 34.104774 + ], + [ + -117.811568, + 34.105608 + ], + [ + -117.811931, + 34.105611 + ], + [ + -117.81202, + 34.105612 + ], + [ + -117.813598, + 34.105624 + ] + ] + ] + }, + "properties": { + "name": "Pioneer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172913581, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.573437, + 34.106316 + ], + [ + -117.573431, + 34.106331 + ], + [ + -117.573425, + 34.106339 + ], + [ + -117.573414, + 34.106346 + ], + [ + -117.573401, + 34.106349 + ], + [ + -117.573373, + 34.106349 + ], + [ + -117.572901, + 34.106344 + ], + [ + -117.572428, + 34.10634 + ], + [ + -117.572388, + 34.106337 + ], + [ + -117.572254, + 34.106316 + ], + [ + -117.572196, + 34.106308 + ], + [ + -117.572151, + 34.106304 + ], + [ + -117.571506, + 34.106303 + ], + [ + -117.571506, + 34.106279 + ], + [ + -117.571482, + 34.106274 + ], + [ + -117.571467, + 34.106266 + ], + [ + -117.571451, + 34.106255 + ], + [ + -117.571438, + 34.10624 + ], + [ + -117.571427, + 34.106225 + ], + [ + -117.571424, + 34.10621 + ], + [ + -117.571397, + 34.106211 + ], + [ + -117.571392, + 34.105239 + ], + [ + -117.571401, + 34.105229 + ], + [ + -117.571413, + 34.105227 + ], + [ + -117.571432, + 34.105228 + ], + [ + -117.571452, + 34.105229 + ], + [ + -117.571457, + 34.105231 + ], + [ + -117.571463, + 34.105238 + ], + [ + -117.571465, + 34.10556 + ], + [ + -117.57146, + 34.105583 + ], + [ + -117.571456, + 34.105632 + ], + [ + -117.571455, + 34.105741 + ], + [ + -117.571442, + 34.105752 + ], + [ + -117.571442, + 34.105826 + ], + [ + -117.571457, + 34.105841 + ], + [ + -117.571456, + 34.105915 + ], + [ + -117.571445, + 34.105922 + ], + [ + -117.571445, + 34.105961 + ], + [ + -117.571429, + 34.105961 + ], + [ + -117.571427, + 34.106033 + ], + [ + -117.571463, + 34.10606 + ], + [ + -117.57148, + 34.106091 + ], + [ + -117.571495, + 34.106116 + ], + [ + -117.571521, + 34.106144 + ], + [ + -117.571551, + 34.106171 + ], + [ + -117.571587, + 34.106193 + ], + [ + -117.571633, + 34.106211 + ], + [ + -117.57165, + 34.106215 + ], + [ + -117.571683, + 34.106248 + ], + [ + -117.571764, + 34.106248 + ], + [ + -117.571764, + 34.106233 + ], + [ + -117.571827, + 34.106234 + ], + [ + -117.571827, + 34.106226 + ], + [ + -117.571922, + 34.106226 + ], + [ + -117.571933, + 34.106235 + ], + [ + -117.572016, + 34.106236 + ], + [ + -117.572022, + 34.106228 + ], + [ + -117.572201, + 34.106227 + ], + [ + -117.572241, + 34.106221 + ], + [ + -117.572271, + 34.106211 + ], + [ + -117.572285, + 34.106206 + ], + [ + -117.572299, + 34.106205 + ], + [ + -117.572304, + 34.10621 + ], + [ + -117.572304, + 34.106256 + ], + [ + -117.573322, + 34.106254 + ], + [ + -117.573322, + 34.106206 + ], + [ + -117.573397, + 34.106206 + ], + [ + -117.573394, + 34.106059 + ], + [ + -117.573345, + 34.106059 + ], + [ + -117.573335, + 34.106054 + ], + [ + -117.573331, + 34.106043 + ], + [ + -117.573335, + 34.106036 + ], + [ + -117.573343, + 34.106029 + ], + [ + -117.57338, + 34.106029 + ], + [ + -117.573402, + 34.106036 + ], + [ + -117.573417, + 34.106044 + ], + [ + -117.57343, + 34.106059 + ], + [ + -117.573437, + 34.106079 + ], + [ + -117.573437, + 34.106316 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 186841384, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.159689, + 34.043442 + ], + [ + -117.159766, + 34.043377 + ], + [ + -117.159683, + 34.043308 + ], + [ + -117.159678, + 34.043272 + ], + [ + -117.159592, + 34.043201 + ], + [ + -117.159495, + 34.043281 + ], + [ + -117.159689, + 34.043442 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 191625049, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.686511, + 33.996389 + ], + [ + -117.686513, + 33.996628 + ], + [ + -117.687365, + 33.99663 + ], + [ + -117.687476, + 33.996627 + ], + [ + -117.687539, + 33.996554 + ], + [ + -117.687544, + 33.996537 + ], + [ + -117.68754, + 33.996517 + ], + [ + -117.687521, + 33.996493 + ], + [ + -117.687516, + 33.996414 + ], + [ + -117.687465, + 33.996365 + ], + [ + -117.687426, + 33.996363 + ], + [ + -117.687398, + 33.996378 + ], + [ + -117.686511, + 33.996383 + ], + [ + -117.686511, + 33.996389 + ] + ] + ] + }, + "properties": { + "name": "Ayala Park Skate Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 191626317, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.657567, + 34.012387 + ], + [ + -117.65749, + 34.01233 + ], + [ + -117.657481, + 34.012324 + ], + [ + -117.657367, + 34.012431 + ], + [ + -117.65751, + 34.012534 + ], + [ + -117.657532, + 34.012551 + ], + [ + -117.657646, + 34.012445 + ], + [ + -117.657567, + 34.012387 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 203688468, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.561982, + 34.123583 + ], + [ + -117.561923, + 34.123566 + ], + [ + -117.56186, + 34.123539 + ], + [ + -117.561779, + 34.123488 + ], + [ + -117.561709, + 34.12342 + ], + [ + -117.561652, + 34.123324 + ], + [ + -117.561627, + 34.123236 + ], + [ + -117.561623, + 34.123196 + ], + [ + -117.561625, + 34.123118 + ], + [ + -117.561815, + 34.123081 + ], + [ + -117.56196, + 34.123074 + ], + [ + -117.5621, + 34.123089 + ], + [ + -117.562222, + 34.123116 + ], + [ + -117.56234, + 34.123158 + ], + [ + -117.562232, + 34.123248 + ], + [ + -117.562132, + 34.123353 + ], + [ + -117.562062, + 34.123441 + ], + [ + -117.562007, + 34.123525 + ], + [ + -117.561982, + 34.123583 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220399924, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.864129, + 33.951094 + ], + [ + -117.86076, + 33.956647 + ], + [ + -117.859912, + 33.957546 + ], + [ + -117.857767, + 33.958329 + ], + [ + -117.855243, + 33.959772 + ], + [ + -117.853848, + 33.960636 + ], + [ + -117.853132, + 33.960608 + ], + [ + -117.852359, + 33.960821 + ], + [ + -117.851595, + 33.961312 + ], + [ + -117.851027, + 33.962166 + ], + [ + -117.850074, + 33.961764 + ], + [ + -117.849205, + 33.963161 + ], + [ + -117.848892, + 33.963029 + ], + [ + -117.848604, + 33.963055 + ], + [ + -117.848602, + 33.962896 + ], + [ + -117.848291, + 33.962771 + ], + [ + -117.848057, + 33.963095 + ], + [ + -117.847314, + 33.963394 + ], + [ + -117.847089, + 33.963341 + ], + [ + -117.847156, + 33.963286 + ], + [ + -117.847445, + 33.963046 + ], + [ + -117.847327, + 33.962957 + ], + [ + -117.84766, + 33.962681 + ], + [ + -117.848035, + 33.962218 + ], + [ + -117.848119, + 33.962041 + ], + [ + -117.848377, + 33.962041 + ], + [ + -117.848411, + 33.961907 + ], + [ + -117.848626, + 33.961675 + ], + [ + -117.848626, + 33.961257 + ], + [ + -117.84857, + 33.961178 + ], + [ + -117.848484, + 33.960822 + ], + [ + -117.848259, + 33.960653 + ], + [ + -117.846845, + 33.960874 + ], + [ + -117.846727, + 33.961364 + ], + [ + -117.846362, + 33.961444 + ], + [ + -117.846038, + 33.961187 + ], + [ + -117.845675, + 33.961658 + ], + [ + -117.845641, + 33.961614 + ], + [ + -117.846008, + 33.960865 + ], + [ + -117.845439, + 33.960821 + ], + [ + -117.845214, + 33.96107 + ], + [ + -117.844903, + 33.960999 + ], + [ + -117.844634, + 33.961177 + ], + [ + -117.843969, + 33.96156 + ], + [ + -117.843637, + 33.961791 + ], + [ + -117.843218, + 33.962022 + ], + [ + -117.842701, + 33.962166 + ], + [ + -117.842038, + 33.962325 + ], + [ + -117.841266, + 33.962618 + ], + [ + -117.840491, + 33.963163 + ], + [ + -117.839976, + 33.963421 + ], + [ + -117.839826, + 33.963447 + ], + [ + -117.840094, + 33.963163 + ], + [ + -117.841459, + 33.962361 + ], + [ + -117.842574, + 33.961996 + ], + [ + -117.843366, + 33.96141 + ], + [ + -117.843624, + 33.960947 + ], + [ + -117.843227, + 33.961098 + ], + [ + -117.842883, + 33.96092 + ], + [ + -117.842476, + 33.960938 + ], + [ + -117.841972, + 33.961125 + ], + [ + -117.841424, + 33.961152 + ], + [ + -117.841145, + 33.961196 + ], + [ + -117.840781, + 33.961 + ], + [ + -117.840246, + 33.960972 + ], + [ + -117.839452, + 33.961311 + ], + [ + -117.839023, + 33.961702 + ], + [ + -117.838753, + 33.961748 + ], + [ + -117.83827, + 33.961508 + ], + [ + -117.83795, + 33.961391 + ], + [ + -117.837465, + 33.961561 + ], + [ + -117.83735, + 33.961818 + ], + [ + -117.837403, + 33.962102 + ], + [ + -117.837639, + 33.962369 + ], + [ + -117.838004, + 33.962547 + ], + [ + -117.837873, + 33.962825 + ], + [ + -117.837519, + 33.963163 + ], + [ + -117.836996, + 33.963517 + ], + [ + -117.835459, + 33.96286 + ], + [ + -117.835172, + 33.962894 + ], + [ + -117.83515, + 33.963126 + ], + [ + -117.835405, + 33.96343 + ], + [ + -117.835708, + 33.963757 + ], + [ + -117.835772, + 33.964452 + ], + [ + -117.836157, + 33.964515 + ], + [ + -117.836298, + 33.964763 + ], + [ + -117.836287, + 33.965377 + ], + [ + -117.836405, + 33.965795 + ], + [ + -117.836245, + 33.966285 + ], + [ + -117.835837, + 33.966552 + ], + [ + -117.835472, + 33.966578 + ], + [ + -117.835322, + 33.96697 + ], + [ + -117.835663, + 33.967443 + ], + [ + -117.83621, + 33.967683 + ], + [ + -117.836607, + 33.967719 + ], + [ + -117.836049, + 33.967772 + ], + [ + -117.835631, + 33.967781 + ], + [ + -117.835373, + 33.967407 + ], + [ + -117.835129, + 33.967086 + ], + [ + -117.834515, + 33.967274 + ], + [ + -117.834279, + 33.96666 + ], + [ + -117.834667, + 33.966534 + ], + [ + -117.834764, + 33.966124 + ], + [ + -117.834483, + 33.965716 + ], + [ + -117.834045, + 33.965377 + ], + [ + -117.833968, + 33.965013 + ], + [ + -117.832992, + 33.964008 + ], + [ + -117.832543, + 33.964425 + ], + [ + -117.8322, + 33.964398 + ], + [ + -117.831985, + 33.964416 + ], + [ + -117.831135, + 33.963501 + ], + [ + -117.830247, + 33.963633 + ], + [ + -117.83014, + 33.964185 + ], + [ + -117.830043, + 33.964638 + ], + [ + -117.830556, + 33.964987 + ], + [ + -117.830902, + 33.966089 + ], + [ + -117.83135, + 33.966998 + ], + [ + -117.831693, + 33.967149 + ], + [ + -117.831921, + 33.96745 + ], + [ + -117.831695, + 33.967602 + ], + [ + -117.831803, + 33.968046 + ], + [ + -117.832401, + 33.968288 + ], + [ + -117.83297, + 33.968297 + ], + [ + -117.833155, + 33.968455 + ], + [ + -117.833187, + 33.968847 + ], + [ + -117.833144, + 33.969078 + ], + [ + -117.832382, + 33.96931 + ], + [ + -117.832275, + 33.969621 + ], + [ + -117.832307, + 33.969941 + ], + [ + -117.831951, + 33.969792 + ], + [ + -117.831779, + 33.969578 + ], + [ + -117.831352, + 33.969354 + ], + [ + -117.831084, + 33.969141 + ], + [ + -117.831135, + 33.968777 + ], + [ + -117.830985, + 33.968368 + ], + [ + -117.83062, + 33.967905 + ], + [ + -117.830342, + 33.967621 + ], + [ + -117.830022, + 33.967335 + ], + [ + -117.830009, + 33.967042 + ], + [ + -117.830041, + 33.966473 + ], + [ + -117.829902, + 33.965877 + ], + [ + -117.829644, + 33.965423 + ], + [ + -117.828981, + 33.964985 + ], + [ + -117.828176, + 33.965083 + ], + [ + -117.827573, + 33.965458 + ], + [ + -117.82749, + 33.966035 + ], + [ + -117.827436, + 33.966471 + ], + [ + -117.827039, + 33.96673 + ], + [ + -117.826449, + 33.966836 + ], + [ + -117.826149, + 33.966943 + ], + [ + -117.826739, + 33.967842 + ], + [ + -117.826889, + 33.968687 + ], + [ + -117.827479, + 33.969461 + ], + [ + -117.827294, + 33.969516 + ], + [ + -117.82708, + 33.969249 + ], + [ + -117.82679, + 33.969062 + ], + [ + -117.826554, + 33.968333 + ], + [ + -117.826565, + 33.967968 + ], + [ + -117.826179, + 33.967238 + ], + [ + -117.825889, + 33.966873 + ], + [ + -117.825827, + 33.966489 + ], + [ + -117.825666, + 33.966294 + ], + [ + -117.825473, + 33.966294 + ], + [ + -117.825127, + 33.966473 + ], + [ + -117.824763, + 33.966971 + ], + [ + -117.824893, + 33.967851 + ], + [ + -117.825162, + 33.969176 + ], + [ + -117.825589, + 33.969774 + ], + [ + -117.826728, + 33.97157 + ], + [ + -117.82853, + 33.973465 + ], + [ + -117.828928, + 33.973883 + ], + [ + -117.82896, + 33.974132 + ], + [ + -117.828046, + 33.974801 + ], + [ + -117.827402, + 33.975246 + ], + [ + -117.826964, + 33.975369 + ], + [ + -117.826565, + 33.974943 + ], + [ + -117.826717, + 33.974461 + ], + [ + -117.826524, + 33.974105 + ], + [ + -117.825956, + 33.974212 + ], + [ + -117.825632, + 33.973742 + ], + [ + -117.826222, + 33.973431 + ], + [ + -117.825805, + 33.973038 + ], + [ + -117.82426, + 33.973803 + ], + [ + -117.824904, + 33.974719 + ], + [ + -117.825353, + 33.974846 + ], + [ + -117.825503, + 33.975344 + ], + [ + -117.825494, + 33.97568 + ], + [ + -117.825462, + 33.975965 + ], + [ + -117.824968, + 33.976027 + ], + [ + -117.824355, + 33.975557 + ], + [ + -117.823477, + 33.975662 + ], + [ + -117.822887, + 33.97584 + ], + [ + -117.822769, + 33.976677 + ], + [ + -117.822587, + 33.977584 + ], + [ + -117.822426, + 33.978056 + ], + [ + -117.821739, + 33.978216 + ], + [ + -117.820879, + 33.978582 + ], + [ + -117.820484, + 33.978705 + ], + [ + -117.82028, + 33.979168 + ], + [ + -117.820645, + 33.979355 + ], + [ + -117.821329, + 33.979445 + ], + [ + -117.82163, + 33.979855 + ], + [ + -117.821503, + 33.980049 + ], + [ + -117.821201, + 33.980273 + ], + [ + -117.821469, + 33.980691 + ], + [ + -117.821278, + 33.980911 + ], + [ + -117.820924, + 33.981018 + ], + [ + -117.820688, + 33.980778 + ], + [ + -117.820591, + 33.980556 + ], + [ + -117.820698, + 33.980244 + ], + [ + -117.820922, + 33.98021 + ], + [ + -117.821074, + 33.979995 + ], + [ + -117.821106, + 33.979835 + ], + [ + -117.820975, + 33.97965 + ], + [ + -117.820484, + 33.979524 + ], + [ + -117.819581, + 33.979098 + ], + [ + -117.819379, + 33.97867 + ], + [ + -117.819731, + 33.976216 + ], + [ + -117.819291, + 33.975522 + ], + [ + -117.819183, + 33.975433 + ], + [ + -117.819368, + 33.975226 + ], + [ + -117.82002, + 33.975246 + ], + [ + -117.820291, + 33.975182 + ], + [ + -117.820409, + 33.974871 + ], + [ + -117.820462, + 33.970965 + ], + [ + -117.819679, + 33.971036 + ], + [ + -117.819207, + 33.971276 + ], + [ + -117.819505, + 33.971927 + ], + [ + -117.819465, + 33.972789 + ], + [ + -117.819014, + 33.972699 + ], + [ + -117.818368, + 33.972408 + ], + [ + -117.818005, + 33.972504 + ], + [ + -117.817673, + 33.973118 + ], + [ + -117.817812, + 33.973767 + ], + [ + -117.818113, + 33.974701 + ], + [ + -117.81733, + 33.974604 + ], + [ + -117.816847, + 33.974728 + ], + [ + -117.81733, + 33.975235 + ], + [ + -117.817898, + 33.975876 + ], + [ + -117.818177, + 33.976427 + ], + [ + -117.818596, + 33.977015 + ], + [ + -117.817694, + 33.977006 + ], + [ + -117.817662, + 33.979017 + ], + [ + -117.817896, + 33.979454 + ], + [ + -117.818218, + 33.979979 + ], + [ + -117.818521, + 33.980858 + ], + [ + -117.817832, + 33.981118 + ], + [ + -117.818035, + 33.981607 + ], + [ + -117.818563, + 33.982041 + ], + [ + -117.819409, + 33.982541 + ], + [ + -117.819357, + 33.982833 + ], + [ + -117.819744, + 33.983349 + ], + [ + -117.82075, + 33.98287 + ], + [ + -117.821492, + 33.98302 + ], + [ + -117.822188, + 33.983066 + ], + [ + -117.822263, + 33.983395 + ], + [ + -117.82161, + 33.983429 + ], + [ + -117.82046, + 33.983858 + ], + [ + -117.820656, + 33.984328 + ], + [ + -117.820226, + 33.984381 + ], + [ + -117.819711, + 33.98423 + ], + [ + -117.819226, + 33.984792 + ], + [ + -117.819497, + 33.985048 + ], + [ + -117.818628, + 33.985555 + ], + [ + -117.818057, + 33.985753 + ], + [ + -117.817617, + 33.985459 + ], + [ + -117.81748, + 33.98528 + ], + [ + -117.818499, + 33.984648 + ], + [ + -117.818907, + 33.983919 + ], + [ + -117.818982, + 33.98358 + ], + [ + -117.818681, + 33.983278 + ], + [ + -117.818113, + 33.9831 + ], + [ + -117.817553, + 33.983306 + ], + [ + -117.81719, + 33.983732 + ], + [ + -117.816791, + 33.983911 + ], + [ + -117.816171, + 33.983874 + ], + [ + -117.815141, + 33.983296 + ], + [ + -117.814626, + 33.983047 + ], + [ + -117.813746, + 33.983073 + ], + [ + -117.813628, + 33.983625 + ], + [ + -117.813261, + 33.983991 + ], + [ + -117.812748, + 33.984426 + ], + [ + -117.813175, + 33.984694 + ], + [ + -117.812587, + 33.985395 + ], + [ + -117.813229, + 33.986411 + ], + [ + -117.814014, + 33.986694 + ], + [ + -117.81457, + 33.987158 + ], + [ + -117.813864, + 33.987157 + ], + [ + -117.812877, + 33.98673 + ], + [ + -117.812802, + 33.986605 + ], + [ + -117.812124, + 33.986331 + ], + [ + -117.811118, + 33.986436 + ], + [ + -117.8103, + 33.986589 + ], + [ + -117.810055, + 33.986925 + ], + [ + -117.811362, + 33.987425 + ], + [ + -117.812941, + 33.987948 + ], + [ + -117.813446, + 33.988384 + ], + [ + -117.812759, + 33.988598 + ], + [ + -117.81218, + 33.989007 + ], + [ + -117.812049, + 33.988777 + ], + [ + -117.811931, + 33.988342 + ], + [ + -117.811343, + 33.988055 + ], + [ + -117.81086, + 33.988073 + ], + [ + -117.810646, + 33.988962 + ], + [ + -117.810772, + 33.989427 + ], + [ + -117.809862, + 33.989336 + ], + [ + -117.809571, + 33.989747 + ], + [ + -117.80895, + 33.989532 + ], + [ + -117.808843, + 33.988971 + ], + [ + -117.808937, + 33.988537 + ], + [ + -117.80853, + 33.988306 + ], + [ + -117.808081, + 33.988571 + ], + [ + -117.807586, + 33.988822 + ], + [ + -117.806472, + 33.988776 + ], + [ + -117.805678, + 33.989052 + ], + [ + -117.805131, + 33.989069 + ], + [ + -117.804573, + 33.988936 + ], + [ + -117.804528, + 33.98811 + ], + [ + -117.803682, + 33.987868 + ], + [ + -117.80291, + 33.988758 + ], + [ + -117.803359, + 33.989347 + ], + [ + -117.802803, + 33.990012 + ], + [ + -117.802395, + 33.989434 + ], + [ + -117.802157, + 33.988706 + ], + [ + -117.801878, + 33.987977 + ], + [ + -117.802253, + 33.986838 + ], + [ + -117.802663, + 33.986658 + ], + [ + -117.802964, + 33.985778 + ], + [ + -117.803661, + 33.985929 + ], + [ + -117.804841, + 33.986205 + ], + [ + -117.805773, + 33.986064 + ], + [ + -117.806762, + 33.985564 + ], + [ + -117.806279, + 33.984817 + ], + [ + -117.808262, + 33.98424 + ], + [ + -117.808746, + 33.984755 + ], + [ + -117.809508, + 33.984559 + ], + [ + -117.809862, + 33.984176 + ], + [ + -117.809195, + 33.983467 + ], + [ + -117.808918, + 33.982717 + ], + [ + -117.809304, + 33.982593 + ], + [ + -117.809937, + 33.982157 + ], + [ + -117.810055, + 33.982068 + ], + [ + -117.811427, + 33.982515 + ], + [ + -117.812231, + 33.981981 + ], + [ + -117.81103, + 33.981153 + ], + [ + -117.8113, + 33.980823 + ], + [ + -117.811793, + 33.980938 + ], + [ + -117.811987, + 33.98068 + ], + [ + -117.812317, + 33.979828 + ], + [ + -117.812995, + 33.979381 + ], + [ + -117.8131, + 33.978805 + ], + [ + -117.813821, + 33.978848 + ], + [ + -117.814154, + 33.978447 + ], + [ + -117.813744, + 33.977862 + ], + [ + -117.813671, + 33.976659 + ], + [ + -117.813864, + 33.976054 + ], + [ + -117.814044, + 33.975451 + ], + [ + -117.813604, + 33.975157 + ], + [ + -117.812598, + 33.975289 + ], + [ + -117.812223, + 33.976161 + ], + [ + -117.811319, + 33.978404 + ], + [ + -117.810806, + 33.979266 + ], + [ + -117.810463, + 33.979461 + ], + [ + -117.81012, + 33.979604 + ], + [ + -117.810332, + 33.978867 + ], + [ + -117.81, + 33.978618 + ], + [ + -117.809648, + 33.978483 + ], + [ + -117.809731, + 33.978191 + ], + [ + -117.809916, + 33.977869 + ], + [ + -117.81042, + 33.977353 + ], + [ + -117.810967, + 33.976659 + ], + [ + -117.811289, + 33.975938 + ], + [ + -117.811096, + 33.975511 + ], + [ + -117.810772, + 33.975264 + ], + [ + -117.810334, + 33.975413 + ], + [ + -117.809884, + 33.97592 + ], + [ + -117.809594, + 33.976445 + ], + [ + -117.809345, + 33.976874 + ], + [ + -117.808862, + 33.977257 + ], + [ + -117.808864, + 33.976801 + ], + [ + -117.808961, + 33.975315 + ], + [ + -117.808543, + 33.974879 + ], + [ + -117.807298, + 33.975146 + ], + [ + -117.807255, + 33.976525 + ], + [ + -117.807212, + 33.977201 + ], + [ + -117.806717, + 33.977052 + ], + [ + -117.806405, + 33.976233 + ], + [ + -117.806332, + 33.975422 + ], + [ + -117.805796, + 33.975013 + ], + [ + -117.804798, + 33.975155 + ], + [ + -117.80467, + 33.975564 + ], + [ + -117.804863, + 33.976748 + ], + [ + -117.805665, + 33.977826 + ], + [ + -117.806867, + 33.978476 + ], + [ + -117.807993, + 33.978467 + ], + [ + -117.808433, + 33.978707 + ], + [ + -117.808317, + 33.978919 + ], + [ + -117.80732, + 33.978705 + ], + [ + -117.806547, + 33.978803 + ], + [ + -117.805582, + 33.978492 + ], + [ + -117.805043, + 33.977968 + ], + [ + -117.804476, + 33.97802 + ], + [ + -117.80424, + 33.976561 + ], + [ + -117.804208, + 33.975636 + ], + [ + -117.804217, + 33.97537 + ], + [ + -117.803436, + 33.975369 + ], + [ + -117.802715, + 33.975193 + ], + [ + -117.801794, + 33.977104 + ], + [ + -117.801086, + 33.978839 + ], + [ + -117.802972, + 33.978787 + ], + [ + -117.802771, + 33.979363 + ], + [ + -117.801073, + 33.980015 + ], + [ + -117.800324, + 33.980075 + ], + [ + -117.799378, + 33.980326 + ], + [ + -117.799091, + 33.980983 + ], + [ + -117.795518, + 33.987014 + ], + [ + -117.799528, + 33.989044 + ], + [ + -117.800915, + 33.989265 + ], + [ + -117.801676, + 33.990608 + ], + [ + -117.801504, + 33.991943 + ], + [ + -117.800925, + 33.992636 + ], + [ + -117.799678, + 33.993412 + ], + [ + -117.799101, + 33.994451 + ], + [ + -117.798479, + 33.994647 + ], + [ + -117.798543, + 33.993811 + ], + [ + -117.797835, + 33.993117 + ], + [ + -117.798157, + 33.991978 + ], + [ + -117.796612, + 33.990822 + ], + [ + -117.795089, + 33.990537 + ], + [ + -117.79363, + 33.991605 + ], + [ + -117.792149, + 33.991765 + ], + [ + -117.791117, + 33.99391 + ], + [ + -117.785068, + 34.004591 + ], + [ + -117.784808, + 34.006078 + ], + [ + -117.784916, + 34.00759 + ], + [ + -117.785023, + 34.00896 + ], + [ + -117.785559, + 34.009268 + ], + [ + -117.78779, + 34.010011 + ], + [ + -117.788022, + 34.009929 + ], + [ + -117.788213, + 34.009805 + ], + [ + -117.788357, + 34.009707 + ], + [ + -117.788447, + 34.009748 + ], + [ + -117.7884, + 34.009807 + ], + [ + -117.788344, + 34.009875 + ], + [ + -117.788223, + 34.009949 + ], + [ + -117.788192, + 34.01006 + ], + [ + -117.788274, + 34.010104 + ], + [ + -117.78835, + 34.010029 + ], + [ + -117.788577, + 34.009814 + ], + [ + -117.788845, + 34.009478 + ], + [ + -117.788543, + 34.009314 + ], + [ + -117.788457, + 34.009282 + ], + [ + -117.788354, + 34.009309 + ], + [ + -117.788288, + 34.009456 + ], + [ + -117.788193, + 34.009685 + ], + [ + -117.787968, + 34.009824 + ], + [ + -117.787823, + 34.009865 + ], + [ + -117.787633, + 34.009877 + ], + [ + -117.787388, + 34.00983 + ], + [ + -117.787093, + 34.009694 + ], + [ + -117.786569, + 34.009459 + ], + [ + -117.785912, + 34.009233 + ], + [ + -117.785522, + 34.009027 + ], + [ + -117.785747, + 34.009043 + ], + [ + -117.78588, + 34.009017 + ], + [ + -117.786602, + 34.0089 + ], + [ + -117.786821, + 34.008842 + ], + [ + -117.786913, + 34.008941 + ], + [ + -117.786953, + 34.009056 + ], + [ + -117.787049, + 34.009126 + ], + [ + -117.78717, + 34.009135 + ], + [ + -117.787291, + 34.009106 + ], + [ + -117.787393, + 34.009088 + ], + [ + -117.787439, + 34.008876 + ], + [ + -117.787482, + 34.008574 + ], + [ + -117.787487, + 34.008406 + ], + [ + -117.787319, + 34.008458 + ], + [ + -117.787117, + 34.008447 + ], + [ + -117.786922, + 34.008423 + ], + [ + -117.786756, + 34.008384 + ], + [ + -117.786451, + 34.008523 + ], + [ + -117.786444, + 34.008472 + ], + [ + -117.78652, + 34.008388 + ], + [ + -117.786739, + 34.008208 + ], + [ + -117.786928, + 34.008268 + ], + [ + -117.787193, + 34.008274 + ], + [ + -117.787395, + 34.008221 + ], + [ + -117.787538, + 34.008151 + ], + [ + -117.787681, + 34.008016 + ], + [ + -117.787916, + 34.007783 + ], + [ + -117.788032, + 34.007673 + ], + [ + -117.788139, + 34.007614 + ], + [ + -117.78825, + 34.007182 + ], + [ + -117.788448, + 34.007263 + ], + [ + -117.788694, + 34.007342 + ], + [ + -117.788895, + 34.007391 + ], + [ + -117.788941, + 34.007648 + ], + [ + -117.789018, + 34.007782 + ], + [ + -117.789124, + 34.007867 + ], + [ + -117.789247, + 34.007995 + ], + [ + -117.789328, + 34.008181 + ], + [ + -117.789348, + 34.008443 + ], + [ + -117.789396, + 34.008718 + ], + [ + -117.789467, + 34.008914 + ], + [ + -117.789555, + 34.009031 + ], + [ + -117.789548, + 34.009163 + ], + [ + -117.789638, + 34.00924 + ], + [ + -117.789786, + 34.009225 + ], + [ + -117.790041, + 34.009029 + ], + [ + -117.790231, + 34.008885 + ], + [ + -117.790374, + 34.008779 + ], + [ + -117.790485, + 34.00866 + ], + [ + -117.790561, + 34.008553 + ], + [ + -117.790677, + 34.00851 + ], + [ + -117.790874, + 34.008418 + ], + [ + -117.791, + 34.008297 + ], + [ + -117.791043, + 34.008211 + ], + [ + -117.791052, + 34.008126 + ], + [ + -117.791049, + 34.00797 + ], + [ + -117.79103, + 34.007819 + ], + [ + -117.790933, + 34.007819 + ], + [ + -117.790788, + 34.008032 + ], + [ + -117.790731, + 34.008017 + ], + [ + -117.790709, + 34.00799 + ], + [ + -117.790746, + 34.007911 + ], + [ + -117.790812, + 34.007798 + ], + [ + -117.790864, + 34.007661 + ], + [ + -117.790882, + 34.007512 + ], + [ + -117.790854, + 34.007378 + ], + [ + -117.790833, + 34.007219 + ], + [ + -117.790953, + 34.007157 + ], + [ + -117.791218, + 34.007004 + ], + [ + -117.791455, + 34.006843 + ], + [ + -117.791778, + 34.006568 + ], + [ + -117.791847, + 34.006533 + ], + [ + -117.791903, + 34.006549 + ], + [ + -117.791692, + 34.006813 + ], + [ + -117.791569, + 34.006988 + ], + [ + -117.791383, + 34.007163 + ], + [ + -117.791252, + 34.007398 + ], + [ + -117.791221, + 34.007745 + ], + [ + -117.79123, + 34.007958 + ], + [ + -117.791265, + 34.008129 + ], + [ + -117.791233, + 34.008288 + ], + [ + -117.791142, + 34.008414 + ], + [ + -117.79098, + 34.008565 + ], + [ + -117.790787, + 34.008671 + ], + [ + -117.790628, + 34.008787 + ], + [ + -117.79038, + 34.009021 + ], + [ + -117.789785, + 34.009446 + ], + [ + -117.790086, + 34.009694 + ], + [ + -117.790058, + 34.00972 + ], + [ + -117.789755, + 34.009612 + ], + [ + -117.789353, + 34.009794 + ], + [ + -117.789307, + 34.009987 + ], + [ + -117.789677, + 34.010395 + ], + [ + -117.78976, + 34.010404 + ], + [ + -117.789736, + 34.010569 + ], + [ + -117.789749, + 34.010753 + ], + [ + -117.789885, + 34.011058 + ], + [ + -117.790078, + 34.011333 + ], + [ + -117.789926, + 34.011444 + ], + [ + -117.789695, + 34.011334 + ], + [ + -117.789519, + 34.011368 + ], + [ + -117.78915, + 34.01128 + ], + [ + -117.78905, + 34.0114 + ], + [ + -117.789252, + 34.011584 + ], + [ + -117.789548, + 34.01175 + ], + [ + -117.789652, + 34.011943 + ], + [ + -117.789949, + 34.012045 + ], + [ + -117.790436, + 34.012092 + ], + [ + -117.790541, + 34.012236 + ], + [ + -117.79053, + 34.012467 + ], + [ + -117.790557, + 34.01263 + ], + [ + -117.79045, + 34.012962 + ], + [ + -117.790102, + 34.013408 + ], + [ + -117.789059, + 34.013823 + ], + [ + -117.789124, + 34.015654 + ], + [ + -117.788394, + 34.016437 + ], + [ + -117.786592, + 34.017504 + ], + [ + -117.785002, + 34.018084 + ], + [ + -117.784811, + 34.019905 + ], + [ + -117.785819, + 34.021097 + ], + [ + -117.786782, + 34.022121 + ], + [ + -117.78657, + 34.022947 + ], + [ + -117.786117, + 34.023811 + ], + [ + -117.791975, + 34.025892 + ], + [ + -117.794188, + 34.026397 + ], + [ + -117.795861, + 34.026414 + ], + [ + -117.796183, + 34.026663 + ], + [ + -117.795795, + 34.027403 + ], + [ + -117.791398, + 34.026219 + ], + [ + -117.788372, + 34.025347 + ], + [ + -117.785411, + 34.024885 + ], + [ + -117.782836, + 34.025223 + ], + [ + -117.779017, + 34.025703 + ], + [ + -117.776421, + 34.025098 + ], + [ + -117.773996, + 34.024245 + ], + [ + -117.772172, + 34.022929 + ], + [ + -117.77155, + 34.02252 + ], + [ + -117.771655, + 34.022068 + ], + [ + -117.772429, + 34.022662 + ], + [ + -117.773588, + 34.023018 + ], + [ + -117.774468, + 34.022893 + ], + [ + -117.774682, + 34.023587 + ], + [ + -117.77509, + 34.023925 + ], + [ + -117.782407, + 34.0238 + ], + [ + -117.782279, + 34.020972 + ], + [ + -117.781851, + 34.020905 + ], + [ + -117.779639, + 34.02051 + ], + [ + -117.778373, + 34.020883 + ], + [ + -117.778203, + 34.021231 + ], + [ + -117.775691, + 34.020386 + ], + [ + -117.774682, + 34.020777 + ], + [ + -117.774079, + 34.021748 + ], + [ + -117.773052, + 34.021275 + ], + [ + -117.772086, + 34.02099 + ], + [ + -117.767945, + 34.019176 + ], + [ + -117.766936, + 34.019372 + ], + [ + -117.766505, + 34.020023 + ], + [ + -117.766185, + 34.020439 + ], + [ + -117.765756, + 34.020261 + ], + [ + -117.765348, + 34.019621 + ], + [ + -117.764855, + 34.019194 + ], + [ + -117.764681, + 34.018813 + ], + [ + -117.7664, + 34.016437 + ], + [ + -117.765692, + 34.016117 + ], + [ + -117.765153, + 34.01659 + ], + [ + -117.764145, + 34.017266 + ], + [ + -117.762623, + 34.016562 + ], + [ + -117.762085, + 34.016679 + ], + [ + -117.761999, + 34.017035 + ], + [ + -117.763911, + 34.0177 + ], + [ + -117.763718, + 34.018251 + ], + [ + -117.763179, + 34.018618 + ], + [ + -117.762323, + 34.019052 + ], + [ + -117.761849, + 34.019489 + ], + [ + -117.760692, + 34.019781 + ], + [ + -117.760392, + 34.018838 + ], + [ + -117.759662, + 34.017646 + ], + [ + -117.757774, + 34.016988 + ], + [ + -117.756207, + 34.017077 + ], + [ + -117.755435, + 34.017042 + ], + [ + -117.75477, + 34.016579 + ], + [ + -117.753804, + 34.016402 + ], + [ + -117.752796, + 34.016188 + ], + [ + -117.751165, + 34.016615 + ], + [ + -117.750585, + 34.016295 + ], + [ + -117.750285, + 34.015708 + ], + [ + -117.750693, + 34.015174 + ], + [ + -117.750929, + 34.014445 + ], + [ + -117.750199, + 34.013965 + ], + [ + -117.749019, + 34.01352 + ], + [ + -117.749641, + 34.013093 + ], + [ + -117.750264, + 34.012862 + ], + [ + -117.751701, + 34.013075 + ], + [ + -117.752731, + 34.012613 + ], + [ + -117.753933, + 34.012471 + ], + [ + -117.754984, + 34.013307 + ], + [ + -117.755669, + 34.014402 + ], + [ + -117.757001, + 34.014943 + ], + [ + -117.757495, + 34.014605 + ], + [ + -117.759834, + 34.015352 + ], + [ + -117.76052, + 34.014605 + ], + [ + -117.760821, + 34.012791 + ], + [ + -117.760134, + 34.012151 + ], + [ + -117.758804, + 34.011955 + ], + [ + -117.757707, + 34.012197 + ], + [ + -117.756851, + 34.011831 + ], + [ + -117.756722, + 34.011297 + ], + [ + -117.757946, + 34.010941 + ], + [ + -117.758589, + 34.010319 + ], + [ + -117.758482, + 34.009767 + ], + [ + -117.758696, + 34.00918 + ], + [ + -117.759104, + 34.009411 + ], + [ + -117.758909, + 34.009974 + ], + [ + -117.759447, + 34.010479 + ], + [ + -117.760392, + 34.009803 + ], + [ + -117.760413, + 34.009091 + ], + [ + -117.760821, + 34.009038 + ], + [ + -117.761786, + 34.009109 + ], + [ + -117.761593, + 34.008184 + ], + [ + -117.760713, + 34.007811 + ], + [ + -117.76007, + 34.007455 + ], + [ + -117.759447, + 34.00653 + ], + [ + -117.760232, + 34.006496 + ], + [ + -117.760263, + 34.006494 + ], + [ + -117.760261, + 34.006373 + ], + [ + -117.76022, + 34.004217 + ], + [ + -117.760302, + 34.003761 + ], + [ + -117.760349, + 34.003506 + ], + [ + -117.759934, + 34.003001 + ], + [ + -117.759756, + 34.002784 + ], + [ + -117.759662, + 34.00267 + ], + [ + -117.759382, + 34.002578 + ], + [ + -117.757752, + 34.002047 + ], + [ + -117.757044, + 34.001549 + ], + [ + -117.756701, + 34.00082 + ], + [ + -117.756607, + 34.000706 + ], + [ + -117.756186, + 34.000197 + ], + [ + -117.755547, + 33.999985 + ], + [ + -117.755435, + 33.999948 + ], + [ + -117.755671, + 33.999432 + ], + [ + -117.756744, + 33.998365 + ], + [ + -117.757388, + 33.998418 + ], + [ + -117.757688, + 33.997689 + ], + [ + -117.757559, + 33.99696 + ], + [ + -117.757709, + 33.996746 + ], + [ + -117.758847, + 33.997813 + ], + [ + -117.760048, + 33.997458 + ], + [ + -117.761465, + 33.998027 + ], + [ + -117.763148, + 33.998881 + ], + [ + -117.763675, + 33.999148 + ], + [ + -117.764788, + 33.99971 + ], + [ + -117.766335, + 34.000873 + ], + [ + -117.76758, + 34.002261 + ], + [ + -117.770026, + 34.001834 + ], + [ + -117.771142, + 34.002083 + ], + [ + -117.772, + 34.001834 + ], + [ + -117.771528, + 34.001371 + ], + [ + -117.771271, + 34.000998 + ], + [ + -117.772065, + 34.000731 + ], + [ + -117.772794, + 34.000286 + ], + [ + -117.77318, + 33.999717 + ], + [ + -117.77258, + 33.999539 + ], + [ + -117.771614, + 33.999592 + ], + [ + -117.771399, + 33.999824 + ], + [ + -117.770863, + 33.999735 + ], + [ + -117.770498, + 33.999592 + ], + [ + -117.769747, + 33.99945 + ], + [ + -117.768846, + 33.999254 + ], + [ + -117.768374, + 33.999379 + ], + [ + -117.767537, + 33.998756 + ], + [ + -117.766765, + 33.998062 + ], + [ + -117.766078, + 33.996835 + ], + [ + -117.766014, + 33.996141 + ], + [ + -117.766593, + 33.996017 + ], + [ + -117.768867, + 33.995963 + ], + [ + -117.772193, + 33.995519 + ], + [ + -117.774725, + 33.995287 + ], + [ + -117.776549, + 33.992903 + ], + [ + -117.774897, + 33.992103 + ], + [ + -117.774168, + 33.992334 + ], + [ + -117.773824, + 33.991249 + ], + [ + -117.773502, + 33.990537 + ], + [ + -117.772515, + 33.990715 + ], + [ + -117.771893, + 33.990359 + ], + [ + -117.771507, + 33.989932 + ], + [ + -117.770133, + 33.989612 + ], + [ + -117.768803, + 33.98947 + ], + [ + -117.767857, + 33.989836 + ], + [ + -117.767709, + 33.990324 + ], + [ + -117.766891, + 33.990619 + ], + [ + -117.766593, + 33.990733 + ], + [ + -117.766398, + 33.991437 + ], + [ + -117.765584, + 33.991284 + ], + [ + -117.765134, + 33.990626 + ], + [ + -117.764125, + 33.990537 + ], + [ + -117.763844, + 33.990939 + ], + [ + -117.763761, + 33.991427 + ], + [ + -117.763095, + 33.991871 + ], + [ + -117.762495, + 33.991551 + ], + [ + -117.761851, + 33.990857 + ], + [ + -117.760542, + 33.99043 + ], + [ + -117.759576, + 33.989968 + ], + [ + -117.759169, + 33.989647 + ], + [ + -117.764039, + 33.989398 + ], + [ + -117.764123, + 33.989569 + ], + [ + -117.765992, + 33.989843 + ], + [ + -117.766786, + 33.989114 + ], + [ + -117.767559, + 33.988651 + ], + [ + -117.767709, + 33.989114 + ], + [ + -117.768503, + 33.988491 + ], + [ + -117.76934, + 33.9881 + ], + [ + -117.769447, + 33.986997 + ], + [ + -117.769211, + 33.986427 + ], + [ + -117.77215, + 33.98552 + ], + [ + -117.77273, + 33.984915 + ], + [ + -117.772601, + 33.983812 + ], + [ + -117.772408, + 33.982673 + ], + [ + -117.77391, + 33.981979 + ], + [ + -117.774532, + 33.98189 + ], + [ + -117.77464, + 33.98157 + ], + [ + -117.774425, + 33.981214 + ], + [ + -117.774404, + 33.980858 + ], + [ + -117.774704, + 33.980805 + ], + [ + -117.774575, + 33.980324 + ], + [ + -117.77406, + 33.97963 + ], + [ + -117.774401, + 33.978573 + ], + [ + -117.773888, + 33.978403 + ], + [ + -117.773245, + 33.978314 + ], + [ + -117.773159, + 33.977904 + ], + [ + -117.773309, + 33.977495 + ], + [ + -117.774232, + 33.977548 + ], + [ + -117.77479, + 33.977602 + ], + [ + -117.776013, + 33.977424 + ], + [ + -117.775455, + 33.976552 + ], + [ + -117.776206, + 33.976321 + ], + [ + -117.776227, + 33.975876 + ], + [ + -117.776142, + 33.97536 + ], + [ + -117.775627, + 33.975128 + ], + [ + -117.776077, + 33.974363 + ], + [ + -117.776442, + 33.973936 + ], + [ + -117.77612, + 33.973331 + ], + [ + -117.776034, + 33.972904 + ], + [ + -117.776249, + 33.972459 + ], + [ + -117.775541, + 33.971872 + ], + [ + -117.77361, + 33.971819 + ], + [ + -117.772601, + 33.971765 + ], + [ + -117.770024, + 33.972666 + ], + [ + -117.76949, + 33.971356 + ], + [ + -117.769125, + 33.970182 + ], + [ + -117.769511, + 33.968954 + ], + [ + -117.769189, + 33.967281 + ], + [ + -117.769168, + 33.966089 + ], + [ + -117.76891, + 33.964488 + ], + [ + -117.76906, + 33.963366 + ], + [ + -117.76979, + 33.96253 + ], + [ + -117.771228, + 33.961925 + ], + [ + -117.772708, + 33.962245 + ], + [ + -117.77391, + 33.962299 + ], + [ + -117.774489, + 33.962993 + ], + [ + -117.774811, + 33.96358 + ], + [ + -117.774489, + 33.964078 + ], + [ + -117.77376, + 33.964328 + ], + [ + -117.773588, + 33.965395 + ], + [ + -117.773159, + 33.965431 + ], + [ + -117.772813, + 33.966117 + ], + [ + -117.77303, + 33.967316 + ], + [ + -117.773996, + 33.967067 + ], + [ + -117.775584, + 33.966054 + ], + [ + -117.775841, + 33.965075 + ], + [ + -117.777043, + 33.965235 + ], + [ + -117.778051, + 33.96495 + ], + [ + -117.777727, + 33.966526 + ], + [ + -117.777663, + 33.966971 + ], + [ + -117.778459, + 33.967922 + ], + [ + -117.779789, + 33.967708 + ], + [ + -117.780004, + 33.967085 + ], + [ + -117.780819, + 33.966818 + ], + [ + -117.781332, + 33.967808 + ], + [ + -117.781568, + 33.968217 + ], + [ + -117.783802, + 33.968331 + ], + [ + -117.786334, + 33.968224 + ], + [ + -117.787042, + 33.967138 + ], + [ + -117.787021, + 33.96616 + ], + [ + -117.785948, + 33.965466 + ], + [ + -117.784381, + 33.965805 + ], + [ + -117.783265, + 33.964666 + ], + [ + -117.783695, + 33.96358 + ], + [ + -117.784531, + 33.962672 + ], + [ + -117.783931, + 33.961711 + ], + [ + -117.782257, + 33.960893 + ], + [ + -117.780068, + 33.961213 + ], + [ + -117.778137, + 33.960839 + ], + [ + -117.776978, + 33.958134 + ], + [ + -117.776635, + 33.95639 + ], + [ + -117.777665, + 33.954521 + ], + [ + -117.775863, + 33.95356 + ], + [ + -117.774296, + 33.953364 + ], + [ + -117.776635, + 33.950392 + ], + [ + -117.777169, + 33.949636 + ], + [ + -117.77833, + 33.950231 + ], + [ + -117.779897, + 33.950712 + ], + [ + -117.781442, + 33.950854 + ], + [ + -117.783823, + 33.949893 + ], + [ + -117.783416, + 33.949217 + ], + [ + -117.782815, + 33.948416 + ], + [ + -117.782901, + 33.946921 + ], + [ + -117.782965, + 33.94628 + ], + [ + -117.78333, + 33.946653 + ], + [ + -117.783317, + 33.946623 + ], + [ + -117.790271, + 33.946741 + ], + [ + -117.800224, + 33.946878 + ], + [ + -117.817451, + 33.947068 + ], + [ + -117.826079, + 33.947088 + ], + [ + -117.843275, + 33.947126 + ], + [ + -117.851842, + 33.947129 + ], + [ + -117.855855, + 33.946913 + ], + [ + -117.863876, + 33.946469 + ], + [ + -117.86396, + 33.946464 + ], + [ + -117.867887, + 33.946258 + ], + [ + -117.866648, + 33.947429 + ], + [ + -117.865427, + 33.949128 + ], + [ + -117.864459, + 33.950419 + ], + [ + -117.864129, + 33.951094 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220546725, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.232156, + 34.05014 + ], + [ + -117.232139, + 34.050131 + ], + [ + -117.232111, + 34.05014 + ], + [ + -117.232094, + 34.050142 + ], + [ + -117.232068, + 34.050139 + ], + [ + -117.232047, + 34.050136 + ], + [ + -117.232032, + 34.050129 + ], + [ + -117.232011, + 34.050115 + ], + [ + -117.231993, + 34.050093 + ], + [ + -117.231989, + 34.050083 + ], + [ + -117.231988, + 34.050071 + ], + [ + -117.231988, + 34.050065 + ], + [ + -117.231961, + 34.05005 + ], + [ + -117.23192, + 34.050097 + ], + [ + -117.231955, + 34.050117 + ], + [ + -117.231962, + 34.05012 + ], + [ + -117.231931, + 34.050152 + ], + [ + -117.231893, + 34.05013 + ], + [ + -117.231828, + 34.050207 + ], + [ + -117.231864, + 34.050229 + ], + [ + -117.231836, + 34.050261 + ], + [ + -117.2318, + 34.050241 + ], + [ + -117.231674, + 34.050385 + ], + [ + -117.231696, + 34.050398 + ], + [ + -117.231714, + 34.050387 + ], + [ + -117.231732, + 34.050381 + ], + [ + -117.231747, + 34.050377 + ], + [ + -117.231762, + 34.050377 + ], + [ + -117.231784, + 34.050377 + ], + [ + -117.231799, + 34.050382 + ], + [ + -117.231814, + 34.050391 + ], + [ + -117.231825, + 34.0504 + ], + [ + -117.231833, + 34.050412 + ], + [ + -117.23184, + 34.050428 + ], + [ + -117.231841, + 34.050444 + ], + [ + -117.23184, + 34.050459 + ], + [ + -117.231836, + 34.050472 + ], + [ + -117.231827, + 34.050484 + ], + [ + -117.231815, + 34.050495 + ], + [ + -117.231798, + 34.050505 + ], + [ + -117.23179, + 34.05051 + ], + [ + -117.231785, + 34.050515 + ], + [ + -117.231776, + 34.050525 + ], + [ + -117.231771, + 34.050545 + ], + [ + -117.231764, + 34.050559 + ], + [ + -117.231758, + 34.050567 + ], + [ + -117.231732, + 34.050584 + ], + [ + -117.23171, + 34.050592 + ], + [ + -117.23169, + 34.050594 + ], + [ + -117.231668, + 34.050588 + ], + [ + -117.231651, + 34.050581 + ], + [ + -117.231625, + 34.050563 + ], + [ + -117.231613, + 34.05054 + ], + [ + -117.23161, + 34.050521 + ], + [ + -117.231613, + 34.0505 + ], + [ + -117.231621, + 34.050484 + ], + [ + -117.231635, + 34.050472 + ], + [ + -117.231657, + 34.05046 + ], + [ + -117.231672, + 34.05045 + ], + [ + -117.231674, + 34.050438 + ], + [ + -117.231678, + 34.050425 + ], + [ + -117.231684, + 34.050409 + ], + [ + -117.231662, + 34.050395 + ], + [ + -117.231632, + 34.05043 + ], + [ + -117.231607, + 34.05046 + ], + [ + -117.231577, + 34.050495 + ], + [ + -117.231511, + 34.050571 + ], + [ + -117.231497, + 34.050591 + ], + [ + -117.231497, + 34.050597 + ], + [ + -117.23152, + 34.050607 + ], + [ + -117.231544, + 34.050616 + ], + [ + -117.231577, + 34.050624 + ], + [ + -117.231598, + 34.050629 + ], + [ + -117.231631, + 34.050631 + ], + [ + -117.231655, + 34.050631 + ], + [ + -117.231677, + 34.050627 + ], + [ + -117.231718, + 34.050619 + ], + [ + -117.231771, + 34.05059 + ], + [ + -117.231977, + 34.050347 + ], + [ + -117.231936, + 34.050323 + ], + [ + -117.231962, + 34.050292 + ], + [ + -117.232001, + 34.050317 + ], + [ + -117.232071, + 34.050237 + ], + [ + -117.232034, + 34.050211 + ], + [ + -117.232061, + 34.050178 + ], + [ + -117.232098, + 34.050203 + ], + [ + -117.232156, + 34.05014 + ] + ] + ] + }, + "properties": { + "name": "Central Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220667020, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.780383, + 33.944543 + ], + [ + -117.777435, + 33.942427 + ], + [ + -117.776798, + 33.941935 + ], + [ + -117.77505, + 33.940672 + ], + [ + -117.772996, + 33.939209 + ], + [ + -117.771606, + 33.938044 + ], + [ + -117.770261, + 33.937212 + ], + [ + -117.76408, + 33.932823 + ], + [ + -117.759773, + 33.92934 + ], + [ + -117.755595, + 33.92642 + ], + [ + -117.751066, + 33.922997 + ], + [ + -117.750943, + 33.922908 + ], + [ + -117.743434, + 33.91749 + ], + [ + -117.7427, + 33.917042 + ], + [ + -117.736955, + 33.913409 + ], + [ + -117.736188, + 33.912847 + ], + [ + -117.736194, + 33.912709 + ], + [ + -117.736141, + 33.912457 + ], + [ + -117.736104, + 33.912346 + ], + [ + -117.736053, + 33.912253 + ], + [ + -117.735964, + 33.911989 + ], + [ + -117.735909, + 33.911842 + ], + [ + -117.735868, + 33.91171 + ], + [ + -117.735838, + 33.91153 + ], + [ + -117.735723, + 33.911251 + ], + [ + -117.735693, + 33.911113 + ], + [ + -117.735602, + 33.910954 + ], + [ + -117.735539, + 33.910816 + ], + [ + -117.735488, + 33.910681 + ], + [ + -117.735422, + 33.910552 + ], + [ + -117.735345, + 33.910387 + ], + [ + -117.735234, + 33.910102 + ], + [ + -117.735179, + 33.909946 + ], + [ + -117.735141, + 33.909778 + ], + [ + -117.735129, + 33.909637 + ], + [ + -117.735106, + 33.909484 + ], + [ + -117.735072, + 33.909322 + ], + [ + -117.735021, + 33.909178 + ], + [ + -117.734951, + 33.90904 + ], + [ + -117.73487, + 33.908908 + ], + [ + -117.734758, + 33.90881 + ], + [ + -117.734573, + 33.908724 + ], + [ + -117.734197, + 33.908575 + ], + [ + -117.733987, + 33.908474 + ], + [ + -117.733831, + 33.908385 + ], + [ + -117.733765, + 33.908274 + ], + [ + -117.733583, + 33.908038 + ], + [ + -117.733455, + 33.907885 + ], + [ + -117.733335, + 33.907769 + ], + [ + -117.733219, + 33.90764 + ], + [ + -117.733044, + 33.90747 + ], + [ + -117.732903, + 33.907381 + ], + [ + -117.732516, + 33.907066 + ], + [ + -117.732489, + 33.910334 + ], + [ + -117.724699, + 33.905504 + ], + [ + -117.719823, + 33.90252 + ], + [ + -117.715783, + 33.900048 + ], + [ + -117.71111, + 33.897188 + ], + [ + -117.709492, + 33.896227 + ], + [ + -117.707644, + 33.895066 + ], + [ + -117.691122, + 33.884849 + ], + [ + -117.689599, + 33.883953 + ], + [ + -117.679411, + 33.877545 + ], + [ + -117.677526, + 33.875678 + ], + [ + -117.676897, + 33.875055 + ], + [ + -117.675955, + 33.874073 + ], + [ + -117.675527, + 33.874095 + ], + [ + -117.674379, + 33.874237 + ], + [ + -117.673039, + 33.874585 + ], + [ + -117.673499, + 33.875199 + ], + [ + -117.673391, + 33.875734 + ], + [ + -117.672962, + 33.875965 + ], + [ + -117.671932, + 33.87666 + ], + [ + -117.670881, + 33.876874 + ], + [ + -117.670259, + 33.877666 + ], + [ + -117.66969, + 33.879359 + ], + [ + -117.669102, + 33.881408 + ], + [ + -117.668772, + 33.882231 + ], + [ + -117.668596, + 33.882744 + ], + [ + -117.668875, + 33.883572 + ], + [ + -117.66996, + 33.884374 + ], + [ + -117.669799, + 33.884677 + ], + [ + -117.668887, + 33.886146 + ], + [ + -117.667728, + 33.886814 + ], + [ + -117.666537, + 33.887438 + ], + [ + -117.664756, + 33.888008 + ], + [ + -117.663017, + 33.885416 + ], + [ + -117.663875, + 33.884899 + ], + [ + -117.666289, + 33.883314 + ], + [ + -117.667453, + 33.880609 + ], + [ + -117.667675, + 33.878469 + ], + [ + -117.668061, + 33.876883 + ], + [ + -117.666826, + 33.877497 + ], + [ + -117.666622, + 33.877996 + ], + [ + -117.666418, + 33.879109 + ], + [ + -117.666021, + 33.880107 + ], + [ + -117.665602, + 33.881114 + ], + [ + -117.665581, + 33.882539 + ], + [ + -117.665506, + 33.882824 + ], + [ + -117.665282, + 33.883074 + ], + [ + -117.664422, + 33.883786 + ], + [ + -117.662555, + 33.884525 + ], + [ + -117.661987, + 33.884748 + ], + [ + -117.6613, + 33.884614 + ], + [ + -117.660785, + 33.884178 + ], + [ + -117.66042, + 33.88383 + ], + [ + -117.659991, + 33.883563 + ], + [ + -117.65968, + 33.883501 + ], + [ + -117.659338, + 33.883297 + ], + [ + -117.658543, + 33.882761 + ], + [ + -117.657835, + 33.882147 + ], + [ + -117.656966, + 33.881773 + ], + [ + -117.655893, + 33.881755 + ], + [ + -117.655785, + 33.881844 + ], + [ + -117.655367, + 33.881906 + ], + [ + -117.654873, + 33.88204 + ], + [ + -117.654455, + 33.881782 + ], + [ + -117.654305, + 33.881603 + ], + [ + -117.654339, + 33.881408 + ], + [ + -117.655465, + 33.880562 + ], + [ + -117.656688, + 33.879974 + ], + [ + -117.657386, + 33.880072 + ], + [ + -117.658501, + 33.88009 + ], + [ + -117.659971, + 33.88001 + ], + [ + -117.661613, + 33.87992 + ], + [ + -117.661527, + 33.879555 + ], + [ + -117.66098, + 33.879662 + ], + [ + -117.658609, + 33.879849 + ], + [ + -117.657995, + 33.879805 + ], + [ + -117.656408, + 33.879787 + ], + [ + -117.655507, + 33.88008 + ], + [ + -117.654895, + 33.880232 + ], + [ + -117.6479, + 33.881986 + ], + [ + -117.642975, + 33.883305 + ], + [ + -117.642848, + 33.883501 + ], + [ + -117.6429, + 33.883723 + ], + [ + -117.643352, + 33.884151 + ], + [ + -117.643749, + 33.884552 + ], + [ + -117.644005, + 33.884088 + ], + [ + -117.64437, + 33.883706 + ], + [ + -117.645389, + 33.883198 + ], + [ + -117.645969, + 33.882895 + ], + [ + -117.646674, + 33.883865 + ], + [ + -117.646578, + 33.883928 + ], + [ + -117.64643, + 33.883935 + ], + [ + -117.645995, + 33.884025 + ], + [ + -117.645046, + 33.884436 + ], + [ + -117.644574, + 33.884899 + ], + [ + -117.644533, + 33.885095 + ], + [ + -117.644563, + 33.885211 + ], + [ + -117.644896, + 33.885558 + ], + [ + -117.645198, + 33.886057 + ], + [ + -117.645818, + 33.887357 + ], + [ + -117.646355, + 33.889032 + ], + [ + -117.646687, + 33.890252 + ], + [ + -117.64702, + 33.893191 + ], + [ + -117.646784, + 33.897109 + ], + [ + -117.646709, + 33.898881 + ], + [ + -117.646923, + 33.900787 + ], + [ + -117.647288, + 33.902283 + ], + [ + -117.647717, + 33.903592 + ], + [ + -117.653813, + 33.920875 + ], + [ + -117.654455, + 33.920954 + ], + [ + -117.655261, + 33.921204 + ], + [ + -117.656141, + 33.921204 + ], + [ + -117.657096, + 33.92124 + ], + [ + -117.657921, + 33.921586 + ], + [ + -117.658382, + 33.922174 + ], + [ + -117.658468, + 33.922699 + ], + [ + -117.657888, + 33.922913 + ], + [ + -117.656697, + 33.922334 + ], + [ + -117.65615, + 33.922619 + ], + [ + -117.655228, + 33.922575 + ], + [ + -117.655185, + 33.921951 + ], + [ + -117.654916, + 33.921729 + ], + [ + -117.654863, + 33.921426 + ], + [ + -117.654156, + 33.921525 + ], + [ + -117.655605, + 33.924436 + ], + [ + -117.656624, + 33.926101 + ], + [ + -117.657223, + 33.926937 + ], + [ + -117.659251, + 33.929438 + ], + [ + -117.659498, + 33.929759 + ], + [ + -117.659768, + 33.929946 + ], + [ + -117.660163, + 33.930044 + ], + [ + -117.660088, + 33.92991 + ], + [ + -117.659167, + 33.929261 + ], + [ + -117.657976, + 33.92781 + ], + [ + -117.656139, + 33.924703 + ], + [ + -117.658791, + 33.924712 + ], + [ + -117.661643, + 33.924676 + ], + [ + -117.662877, + 33.924765 + ], + [ + -117.663147, + 33.924676 + ], + [ + -117.663457, + 33.924079 + ], + [ + -117.664132, + 33.923857 + ], + [ + -117.664776, + 33.924035 + ], + [ + -117.665109, + 33.924364 + ], + [ + -117.665645, + 33.925281 + ], + [ + -117.666482, + 33.925352 + ], + [ + -117.667941, + 33.925993 + ], + [ + -117.668896, + 33.926349 + ], + [ + -117.669445, + 33.926439 + ], + [ + -117.67013, + 33.926527 + ], + [ + -117.66969, + 33.926875 + ], + [ + -117.669895, + 33.927383 + ], + [ + -117.670538, + 33.92837 + ], + [ + -117.670709, + 33.928664 + ], + [ + -117.670849, + 33.928833 + ], + [ + -117.671117, + 33.929074 + ], + [ + -117.671718, + 33.929323 + ], + [ + -117.672136, + 33.929287 + ], + [ + -117.672748, + 33.929456 + ], + [ + -117.672855, + 33.929821 + ], + [ + -117.672748, + 33.929955 + ], + [ + -117.672372, + 33.930008 + ], + [ + -117.672018, + 33.929714 + ], + [ + -117.671675, + 33.929625 + ], + [ + -117.671181, + 33.929438 + ], + [ + -117.670924, + 33.929154 + ], + [ + -117.670666, + 33.929011 + ], + [ + -117.670795, + 33.929162 + ], + [ + -117.671031, + 33.92951 + ], + [ + -117.671353, + 33.929999 + ], + [ + -117.671793, + 33.930836 + ], + [ + -117.67188, + 33.930641 + ], + [ + -117.672201, + 33.930293 + ], + [ + -117.672567, + 33.930472 + ], + [ + -117.672791, + 33.930791 + ], + [ + -117.672565, + 33.931067 + ], + [ + -117.672726, + 33.931219 + ], + [ + -117.673157, + 33.931549 + ], + [ + -117.673522, + 33.931673 + ], + [ + -117.674143, + 33.931869 + ], + [ + -117.67455, + 33.932127 + ], + [ + -117.674872, + 33.932421 + ], + [ + -117.674593, + 33.932839 + ], + [ + -117.674293, + 33.932946 + ], + [ + -117.673724, + 33.933097 + ], + [ + -117.67305, + 33.933195 + ], + [ + -117.672855, + 33.933302 + ], + [ + -117.672705, + 33.933542 + ], + [ + -117.672631, + 33.933783 + ], + [ + -117.672361, + 33.933916 + ], + [ + -117.67219, + 33.933872 + ], + [ + -117.672104, + 33.934032 + ], + [ + -117.67204, + 33.934228 + ], + [ + -117.672426, + 33.934441 + ], + [ + -117.672664, + 33.93429 + ], + [ + -117.672932, + 33.933721 + ], + [ + -117.67349, + 33.933525 + ], + [ + -117.674037, + 33.933427 + ], + [ + -117.674786, + 33.933426 + ], + [ + -117.676878, + 33.934601 + ], + [ + -117.677608, + 33.934993 + ], + [ + -117.677823, + 33.935331 + ], + [ + -117.677706, + 33.935554 + ], + [ + -117.677458, + 33.935661 + ], + [ + -117.676964, + 33.935581 + ], + [ + -117.674445, + 33.935581 + ], + [ + -117.675174, + 33.935991 + ], + [ + -117.676921, + 33.937058 + ], + [ + -117.677331, + 33.93753 + ], + [ + -117.67778, + 33.93802 + ], + [ + -117.678005, + 33.938598 + ], + [ + -117.678081, + 33.939159 + ], + [ + -117.677597, + 33.939194 + ], + [ + -117.677404, + 33.939194 + ], + [ + -117.677211, + 33.939159 + ], + [ + -117.677104, + 33.939016 + ], + [ + -117.674915, + 33.93899 + ], + [ + -117.674818, + 33.93915 + ], + [ + -117.671847, + 33.939141 + ], + [ + -117.671836, + 33.939301 + ], + [ + -117.671664, + 33.939524 + ], + [ + -117.671696, + 33.939773 + ], + [ + -117.671653, + 33.94036 + ], + [ + -117.671417, + 33.940948 + ], + [ + -117.670958, + 33.941322 + ], + [ + -117.670688, + 33.941455 + ], + [ + -117.67026, + 33.941384 + ], + [ + -117.668039, + 33.938919 + ], + [ + -117.668102, + 33.937886 + ], + [ + -117.668413, + 33.936934 + ], + [ + -117.668855, + 33.936373 + ], + [ + -117.669272, + 33.936035 + ], + [ + -117.669819, + 33.93607 + ], + [ + -117.670829, + 33.936151 + ], + [ + -117.671782, + 33.936141 + ], + [ + -117.672233, + 33.936186 + ], + [ + -117.672469, + 33.936248 + ], + [ + -117.672973, + 33.935794 + ], + [ + -117.673039, + 33.935599 + ], + [ + -117.673735, + 33.935572 + ], + [ + -117.672737, + 33.93502 + ], + [ + -117.672533, + 33.935136 + ], + [ + -117.67248, + 33.93534 + ], + [ + -117.671997, + 33.93526 + ], + [ + -117.671419, + 33.934869 + ], + [ + -117.670527, + 33.934575 + ], + [ + -117.669486, + 33.934459 + ], + [ + -117.668778, + 33.934308 + ], + [ + -117.66748, + 33.933605 + ], + [ + -117.667072, + 33.933551 + ], + [ + -117.666707, + 33.933533 + ], + [ + -117.666536, + 33.933649 + ], + [ + -117.666353, + 33.9338 + ], + [ + -117.66586, + 33.933827 + ], + [ + -117.665602, + 33.933729 + ], + [ + -117.665141, + 33.933587 + ], + [ + -117.664776, + 33.933391 + ], + [ + -117.664347, + 33.933239 + ], + [ + -117.663918, + 33.933186 + ], + [ + -117.662952, + 33.933035 + ], + [ + -117.663092, + 33.931664 + ], + [ + -117.661827, + 33.931718 + ], + [ + -117.661751, + 33.932082 + ], + [ + -117.662064, + 33.933008 + ], + [ + -117.662663, + 33.933889 + ], + [ + -117.66365, + 33.935029 + ], + [ + -117.66643, + 33.938145 + ], + [ + -117.671085, + 33.943013 + ], + [ + -117.672696, + 33.944731 + ], + [ + -117.674262, + 33.946173 + ], + [ + -117.679548, + 33.946205 + ], + [ + -117.67891, + 33.945117 + ], + [ + -117.678507, + 33.944248 + ], + [ + -117.678277, + 33.943258 + ], + [ + -117.683112, + 33.942048 + ], + [ + -117.683429, + 33.943554 + ], + [ + -117.683994, + 33.946242 + ], + [ + -117.688231, + 33.946173 + ], + [ + -117.688938, + 33.945746 + ], + [ + -117.689839, + 33.945568 + ], + [ + -117.690506, + 33.945853 + ], + [ + -117.690891, + 33.946262 + ], + [ + -117.690676, + 33.946636 + ], + [ + -117.689626, + 33.946743 + ], + [ + -117.689818, + 33.946921 + ], + [ + -117.690354, + 33.947241 + ], + [ + -117.690806, + 33.947757 + ], + [ + -117.69117, + 33.947811 + ], + [ + -117.69117, + 33.948612 + ], + [ + -117.691707, + 33.948273 + ], + [ + -117.692244, + 33.947775 + ], + [ + -117.692437, + 33.947348 + ], + [ + -117.692779, + 33.94701 + ], + [ + -117.693273, + 33.947134 + ], + [ + -117.693315, + 33.947472 + ], + [ + -117.694067, + 33.947152 + ], + [ + -117.694646, + 33.947259 + ], + [ + -117.695097, + 33.947401 + ], + [ + -117.695419, + 33.947188 + ], + [ + -117.695849, + 33.947312 + ], + [ + -117.696341, + 33.947472 + ], + [ + -117.696664, + 33.947472 + ], + [ + -117.697007, + 33.947704 + ], + [ + -117.697372, + 33.947633 + ], + [ + -117.697993, + 33.947757 + ], + [ + -117.698037, + 33.947971 + ], + [ + -117.698594, + 33.94822 + ], + [ + -117.698787, + 33.948594 + ], + [ + -117.69883, + 33.94895 + ], + [ + -117.698788, + 33.94943 + ], + [ + -117.698617, + 33.949786 + ], + [ + -117.697736, + 33.95016 + ], + [ + -117.697028, + 33.950748 + ], + [ + -117.696405, + 33.951228 + ], + [ + -117.696127, + 33.951655 + ], + [ + -117.695612, + 33.951904 + ], + [ + -117.693831, + 33.95283 + ], + [ + -117.692865, + 33.953257 + ], + [ + -117.692651, + 33.953257 + ], + [ + -117.69162, + 33.952688 + ], + [ + -117.690998, + 33.952492 + ], + [ + -117.69057, + 33.952706 + ], + [ + -117.690763, + 33.952866 + ], + [ + -117.691772, + 33.953293 + ], + [ + -117.692394, + 33.953916 + ], + [ + -117.692716, + 33.953756 + ], + [ + -117.693294, + 33.953382 + ], + [ + -117.69338, + 33.953524 + ], + [ + -117.693939, + 33.953364 + ], + [ + -117.69441, + 33.952723 + ], + [ + -117.694797, + 33.95283 + ], + [ + -117.695418, + 33.952528 + ], + [ + -117.696042, + 33.952349 + ], + [ + -117.696085, + 33.952029 + ], + [ + -117.696491, + 33.951744 + ], + [ + -117.697092, + 33.951353 + ], + [ + -117.697908, + 33.951157 + ], + [ + -117.698551, + 33.951104 + ], + [ + -117.699324, + 33.950463 + ], + [ + -117.699367, + 33.950676 + ], + [ + -117.69941, + 33.951068 + ], + [ + -117.700053, + 33.951495 + ], + [ + -117.70016, + 33.952083 + ], + [ + -117.700419, + 33.952438 + ], + [ + -117.699839, + 33.952795 + ], + [ + -117.699367, + 33.95299 + ], + [ + -117.699924, + 33.953595 + ], + [ + -117.700204, + 33.953951 + ], + [ + -117.700827, + 33.95388 + ], + [ + -117.7031, + 33.954948 + ], + [ + -117.702887, + 33.955891 + ], + [ + -117.703015, + 33.956425 + ], + [ + -117.70323, + 33.95655 + ], + [ + -117.703787, + 33.956799 + ], + [ + -117.703809, + 33.957529 + ], + [ + -117.704345, + 33.957386 + ], + [ + -117.704817, + 33.956817 + ], + [ + -117.705226, + 33.956764 + ], + [ + -117.70559, + 33.956514 + ], + [ + -117.705547, + 33.955571 + ], + [ + -117.705675, + 33.955215 + ], + [ + -117.706105, + 33.954895 + ], + [ + -117.706083, + 33.954592 + ], + [ + -117.706384, + 33.954521 + ], + [ + -117.706556, + 33.954343 + ], + [ + -117.707221, + 33.954183 + ], + [ + -117.707435, + 33.953631 + ], + [ + -117.707671, + 33.95356 + ], + [ + -117.707393, + 33.953044 + ], + [ + -117.707543, + 33.952706 + ], + [ + -117.707928, + 33.952741 + ], + [ + -117.708337, + 33.952296 + ], + [ + -117.708872, + 33.952332 + ], + [ + -117.709646, + 33.953061 + ], + [ + -117.710503, + 33.954005 + ], + [ + -117.711405, + 33.954112 + ], + [ + -117.712221, + 33.953418 + ], + [ + -117.713443, + 33.953186 + ], + [ + -117.714194, + 33.953328 + ], + [ + -117.714301, + 33.954076 + ], + [ + -117.714538, + 33.955518 + ], + [ + -117.714345, + 33.956675 + ], + [ + -117.71413, + 33.95776 + ], + [ + -117.713443, + 33.958241 + ], + [ + -117.714301, + 33.958472 + ], + [ + -117.715159, + 33.958508 + ], + [ + -117.715202, + 33.957885 + ], + [ + -117.715331, + 33.956497 + ], + [ + -117.715375, + 33.954503 + ], + [ + -117.715225, + 33.953631 + ], + [ + -117.715354, + 33.953435 + ], + [ + -117.715696, + 33.952777 + ], + [ + -117.715954, + 33.952332 + ], + [ + -117.716855, + 33.952332 + ], + [ + -117.717714, + 33.952296 + ], + [ + -117.7181, + 33.952118 + ], + [ + -117.7184, + 33.952332 + ], + [ + -117.718636, + 33.952866 + ], + [ + -117.718571, + 33.953328 + ], + [ + -117.71885, + 33.953489 + ], + [ + -117.71915, + 33.953827 + ], + [ + -117.718893, + 33.954272 + ], + [ + -117.719108, + 33.954557 + ], + [ + -117.719344, + 33.955144 + ], + [ + -117.719494, + 33.955838 + ], + [ + -117.719365, + 33.956159 + ], + [ + -117.719667, + 33.956425 + ], + [ + -117.720073, + 33.95671 + ], + [ + -117.720481, + 33.957636 + ], + [ + -117.720202, + 33.958383 + ], + [ + -117.719601, + 33.958401 + ], + [ + -117.7181, + 33.958686 + ], + [ + -117.717241, + 33.959113 + ], + [ + -117.717262, + 33.960412 + ], + [ + -117.717048, + 33.961818 + ], + [ + -117.716382, + 33.962672 + ], + [ + -117.716018, + 33.963135 + ], + [ + -117.716425, + 33.963918 + ], + [ + -117.716019, + 33.964861 + ], + [ + -117.715438, + 33.965609 + ], + [ + -117.71559, + 33.965627 + ], + [ + -117.71694, + 33.964416 + ], + [ + -117.717521, + 33.964541 + ], + [ + -117.718271, + 33.96479 + ], + [ + -117.71928, + 33.964737 + ], + [ + -117.720868, + 33.965146 + ], + [ + -117.722585, + 33.965022 + ], + [ + -117.724365, + 33.964416 + ], + [ + -117.724859, + 33.963456 + ], + [ + -117.726918, + 33.962281 + ], + [ + -117.728077, + 33.961854 + ], + [ + -117.729772, + 33.960661 + ], + [ + -117.729643, + 33.959487 + ], + [ + -117.73018, + 33.958223 + ], + [ + -117.73018, + 33.95744 + ], + [ + -117.729622, + 33.956977 + ], + [ + -117.728957, + 33.956408 + ], + [ + -117.72827, + 33.956105 + ], + [ + -117.726704, + 33.955891 + ], + [ + -117.725782, + 33.955251 + ], + [ + -117.725759, + 33.95445 + ], + [ + -117.724966, + 33.953275 + ], + [ + -117.724495, + 33.952207 + ], + [ + -117.725439, + 33.952349 + ], + [ + -117.726855, + 33.954094 + ], + [ + -117.72767, + 33.9534 + ], + [ + -117.728592, + 33.953791 + ], + [ + -117.728613, + 33.954521 + ], + [ + -117.729001, + 33.955607 + ], + [ + -117.730158, + 33.956853 + ], + [ + -117.730823, + 33.957671 + ], + [ + -117.730545, + 33.95865 + ], + [ + -117.730201, + 33.959469 + ], + [ + -117.730374, + 33.959896 + ], + [ + -117.731725, + 33.958988 + ], + [ + -117.733528, + 33.958579 + ], + [ + -117.735567, + 33.957511 + ], + [ + -117.734986, + 33.956621 + ], + [ + -117.734537, + 33.955998 + ], + [ + -117.734258, + 33.955518 + ], + [ + -117.734923, + 33.955251 + ], + [ + -117.736059, + 33.955375 + ], + [ + -117.735995, + 33.954913 + ], + [ + -117.736467, + 33.954432 + ], + [ + -117.737219, + 33.954468 + ], + [ + -117.73827, + 33.954521 + ], + [ + -117.739708, + 33.95404 + ], + [ + -117.741488, + 33.954325 + ], + [ + -117.742927, + 33.954129 + ], + [ + -117.743957, + 33.953951 + ], + [ + -117.744364, + 33.953364 + ], + [ + -117.744579, + 33.952083 + ], + [ + -117.745157, + 33.950641 + ], + [ + -117.744021, + 33.949555 + ], + [ + -117.743527, + 33.948398 + ], + [ + -117.745008, + 33.947864 + ], + [ + -117.745781, + 33.947757 + ], + [ + -117.746809, + 33.948345 + ], + [ + -117.746509, + 33.949466 + ], + [ + -117.746961, + 33.950214 + ], + [ + -117.747453, + 33.949858 + ], + [ + -117.748356, + 33.94733 + ], + [ + -117.74812, + 33.945265 + ], + [ + -117.747862, + 33.943325 + ], + [ + -117.74696, + 33.940868 + ], + [ + -117.746446, + 33.93891 + ], + [ + -117.746854, + 33.93875 + ], + [ + -117.74726, + 33.939141 + ], + [ + -117.748011, + 33.942079 + ], + [ + -117.748763, + 33.946333 + ], + [ + -117.749105, + 33.946066 + ], + [ + -117.750437, + 33.945443 + ], + [ + -117.751574, + 33.945087 + ], + [ + -117.752517, + 33.94498 + ], + [ + -117.754321, + 33.945354 + ], + [ + -117.755328, + 33.94555 + ], + [ + -117.755908, + 33.946778 + ], + [ + -117.756144, + 33.947045 + ], + [ + -117.756272, + 33.947455 + ], + [ + -117.755993, + 33.94806 + ], + [ + -117.756467, + 33.948345 + ], + [ + -117.757753, + 33.950071 + ], + [ + -117.758075, + 33.95105 + ], + [ + -117.758354, + 33.951798 + ], + [ + -117.759063, + 33.952848 + ], + [ + -117.759943, + 33.953168 + ], + [ + -117.7608, + 33.953346 + ], + [ + -117.761963, + 33.953435 + ], + [ + -117.762215, + 33.954908 + ], + [ + -117.762398, + 33.956429 + ], + [ + -117.762478, + 33.957043 + ], + [ + -117.762754, + 33.957409 + ], + [ + -117.762993, + 33.957439 + ], + [ + -117.763669, + 33.957613 + ], + [ + -117.764222, + 33.958174 + ], + [ + -117.764792, + 33.958984 + ], + [ + -117.765139, + 33.959286 + ], + [ + -117.765176, + 33.959482 + ], + [ + -117.765117, + 33.959642 + ], + [ + -117.765768, + 33.960136 + ], + [ + -117.76751, + 33.95889 + ], + [ + -117.766721, + 33.958352 + ], + [ + -117.766069, + 33.957978 + ], + [ + -117.765831, + 33.957457 + ], + [ + -117.765783, + 33.956879 + ], + [ + -117.765801, + 33.956381 + ], + [ + -117.76619, + 33.955642 + ], + [ + -117.766673, + 33.954859 + ], + [ + -117.767027, + 33.954552 + ], + [ + -117.767354, + 33.95469 + ], + [ + -117.767408, + 33.954636 + ], + [ + -117.767408, + 33.954476 + ], + [ + -117.767097, + 33.954325 + ], + [ + -117.767038, + 33.954116 + ], + [ + -117.767231, + 33.954107 + ], + [ + -117.76751, + 33.954254 + ], + [ + -117.767834, + 33.954481 + ], + [ + -117.768188, + 33.954388 + ], + [ + -117.768461, + 33.954187 + ], + [ + -117.768851, + 33.954138 + ], + [ + -117.768958, + 33.954325 + ], + [ + -117.769357, + 33.95457 + ], + [ + -117.769867, + 33.95441 + ], + [ + -117.769996, + 33.954081 + ], + [ + -117.770494, + 33.953533 + ], + [ + -117.770981, + 33.953857 + ], + [ + -117.771549, + 33.954062 + ], + [ + -117.771657, + 33.954325 + ], + [ + -117.772147, + 33.953747 + ], + [ + -117.772746, + 33.953648 + ], + [ + -117.773595, + 33.953618 + ], + [ + -117.774103, + 33.95303 + ], + [ + -117.774816, + 33.952082 + ], + [ + -117.775326, + 33.951415 + ], + [ + -117.775768, + 33.950926 + ], + [ + -117.776184, + 33.950311 + ], + [ + -117.776363, + 33.950004 + ], + [ + -117.775884, + 33.949826 + ], + [ + -117.775805, + 33.949617 + ], + [ + -117.775578, + 33.949319 + ], + [ + -117.775846, + 33.949025 + ], + [ + -117.775891, + 33.948207 + ], + [ + -117.776036, + 33.94818 + ], + [ + -117.775913, + 33.94794 + ], + [ + -117.775787, + 33.947512 + ], + [ + -117.775723, + 33.947356 + ], + [ + -117.775556, + 33.947396 + ], + [ + -117.775583, + 33.947285 + ], + [ + -117.775733, + 33.947129 + ], + [ + -117.775934, + 33.947018 + ], + [ + -117.775939, + 33.94688 + ], + [ + -117.775792, + 33.946747 + ], + [ + -117.775696, + 33.946444 + ], + [ + -117.775728, + 33.946244 + ], + [ + -117.776147, + 33.946181 + ], + [ + -117.776892, + 33.946159 + ], + [ + -117.777375, + 33.946141 + ], + [ + -117.777568, + 33.946164 + ], + [ + -117.777708, + 33.946342 + ], + [ + -117.777676, + 33.946582 + ], + [ + -117.777901, + 33.946613 + ], + [ + -117.778046, + 33.946551 + ], + [ + -117.778127, + 33.946755 + ], + [ + -117.778277, + 33.946792 + ], + [ + -117.778459, + 33.946889 + ], + [ + -117.778614, + 33.946751 + ], + [ + -117.778732, + 33.946475 + ], + [ + -117.779081, + 33.946253 + ], + [ + -117.779553, + 33.946039 + ], + [ + -117.779736, + 33.94607 + ], + [ + -117.779907, + 33.945692 + ], + [ + -117.780025, + 33.94559 + ], + [ + -117.780202, + 33.945572 + ], + [ + -117.780914, + 33.94495 + ], + [ + -117.780383, + 33.944543 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220685581, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.234656, + 34.050354 + ], + [ + -117.234636, + 34.050305 + ], + [ + -117.234628, + 34.050264 + ], + [ + -117.234621, + 34.050218 + ], + [ + -117.234599, + 34.050173 + ], + [ + -117.234547, + 34.050097 + ], + [ + -117.234526, + 34.050053 + ], + [ + -117.234514, + 34.050004 + ], + [ + -117.234526, + 34.049927 + ], + [ + -117.234567, + 34.049833 + ], + [ + -117.234593, + 34.04977 + ], + [ + -117.234605, + 34.049696 + ], + [ + -117.23463, + 34.049621 + ], + [ + -117.234648, + 34.049581 + ], + [ + -117.234668, + 34.049529 + ], + [ + -117.23467, + 34.049476 + ], + [ + -117.234672, + 34.049409 + ], + [ + -117.234664, + 34.049383 + ], + [ + -117.234615, + 34.049421 + ], + [ + -117.234557, + 34.04945 + ], + [ + -117.234409, + 34.049483 + ], + [ + -117.23417, + 34.049526 + ], + [ + -117.234051, + 34.049549 + ], + [ + -117.234024, + 34.04956 + ], + [ + -117.234002, + 34.049576 + ], + [ + -117.233982, + 34.049616 + ], + [ + -117.23396, + 34.04966 + ], + [ + -117.233921, + 34.049701 + ], + [ + -117.233881, + 34.049737 + ], + [ + -117.233828, + 34.04976 + ], + [ + -117.233798, + 34.049769 + ], + [ + -117.233694, + 34.049804 + ], + [ + -117.233628, + 34.049825 + ], + [ + -117.233561, + 34.049847 + ], + [ + -117.234328, + 34.050208 + ], + [ + -117.234656, + 34.050354 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220685809, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.229501, + 34.043491 + ], + [ + -117.229499, + 34.043515 + ], + [ + -117.229489, + 34.043539 + ], + [ + -117.229458, + 34.043554 + ], + [ + -117.229441, + 34.043559 + ], + [ + -117.229434, + 34.04357 + ], + [ + -117.229432, + 34.043579 + ], + [ + -117.229435, + 34.0436 + ], + [ + -117.229427, + 34.043625 + ], + [ + -117.229409, + 34.043645 + ], + [ + -117.229378, + 34.043657 + ], + [ + -117.229348, + 34.04366 + ], + [ + -117.22932, + 34.043649 + ], + [ + -117.229301, + 34.043635 + ], + [ + -117.229292, + 34.043628 + ], + [ + -117.229282, + 34.043632 + ], + [ + -117.229256, + 34.043638 + ], + [ + -117.22923, + 34.043647 + ], + [ + -117.2292, + 34.043642 + ], + [ + -117.229172, + 34.043628 + ], + [ + -117.229157, + 34.043613 + ], + [ + -117.229149, + 34.043596 + ], + [ + -117.229148, + 34.043574 + ], + [ + -117.229159, + 34.043553 + ], + [ + -117.229178, + 34.043537 + ], + [ + -117.229184, + 34.043534 + ], + [ + -117.229187, + 34.04353 + ], + [ + -117.229188, + 34.043522 + ], + [ + -117.229187, + 34.043509 + ], + [ + -117.229189, + 34.043487 + ], + [ + -117.229193, + 34.043466 + ], + [ + -117.229197, + 34.043444 + ], + [ + -117.229197, + 34.04343 + ], + [ + -117.229198, + 34.043412 + ], + [ + -117.229202, + 34.043389 + ], + [ + -117.229207, + 34.043375 + ], + [ + -117.22923, + 34.043359 + ], + [ + -117.229252, + 34.043353 + ], + [ + -117.229268, + 34.043352 + ], + [ + -117.229294, + 34.043345 + ], + [ + -117.229324, + 34.043339 + ], + [ + -117.229353, + 34.043337 + ], + [ + -117.229378, + 34.043343 + ], + [ + -117.229405, + 34.043349 + ], + [ + -117.229418, + 34.043363 + ], + [ + -117.229428, + 34.043381 + ], + [ + -117.229428, + 34.043398 + ], + [ + -117.229428, + 34.043411 + ], + [ + -117.229426, + 34.043424 + ], + [ + -117.229429, + 34.043437 + ], + [ + -117.229455, + 34.043442 + ], + [ + -117.229473, + 34.043452 + ], + [ + -117.229495, + 34.043469 + ], + [ + -117.229501, + 34.043491 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220686928, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.229506, + 34.04958 + ], + [ + -117.230351, + 34.049777 + ], + [ + -117.230276, + 34.049847 + ], + [ + -117.230248, + 34.049907 + ], + [ + -117.23023, + 34.049945 + ], + [ + -117.230195, + 34.049977 + ], + [ + -117.230127, + 34.05004 + ], + [ + -117.230097, + 34.050088 + ], + [ + -117.230079, + 34.050125 + ], + [ + -117.230046, + 34.050154 + ], + [ + -117.230003, + 34.05019 + ], + [ + -117.229971, + 34.050236 + ], + [ + -117.229956, + 34.050262 + ], + [ + -117.229933, + 34.050285 + ], + [ + -117.22966, + 34.050125 + ], + [ + -117.229621, + 34.050103 + ], + [ + -117.2296, + 34.050081 + ], + [ + -117.22957, + 34.050036 + ], + [ + -117.229525, + 34.049994 + ], + [ + -117.229462, + 34.049971 + ], + [ + -117.22939, + 34.049962 + ], + [ + -117.229379, + 34.049965 + ], + [ + -117.229297, + 34.049988 + ], + [ + -117.229267, + 34.050006 + ], + [ + -117.229228, + 34.049982 + ], + [ + -117.228596, + 34.04961 + ], + [ + -117.228435, + 34.049801 + ], + [ + -117.228404, + 34.049767 + ], + [ + -117.228383, + 34.04972 + ], + [ + -117.22838, + 34.049659 + ], + [ + -117.22838, + 34.049465 + ], + [ + -117.22838, + 34.049387 + ], + [ + -117.22838, + 34.049358 + ], + [ + -117.22838, + 34.049347 + ], + [ + -117.228476, + 34.049357 + ], + [ + -117.229073, + 34.049479 + ], + [ + -117.229438, + 34.049564 + ], + [ + -117.229506, + 34.04958 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220687843, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.234477, + 34.051767 + ], + [ + -117.23447, + 34.051741 + ], + [ + -117.23445, + 34.051721 + ], + [ + -117.234416, + 34.051706 + ], + [ + -117.234372, + 34.051719 + ], + [ + -117.234278, + 34.051828 + ], + [ + -117.234157, + 34.051968 + ], + [ + -117.233768, + 34.052437 + ], + [ + -117.233746, + 34.052464 + ], + [ + -117.233742, + 34.052492 + ], + [ + -117.23374, + 34.052503 + ], + [ + -117.23375, + 34.052523 + ], + [ + -117.233872, + 34.052596 + ], + [ + -117.234103, + 34.052732 + ], + [ + -117.234211, + 34.052793 + ], + [ + -117.23432, + 34.052822 + ], + [ + -117.234405, + 34.052836 + ], + [ + -117.234466, + 34.052831 + ], + [ + -117.23447, + 34.052826 + ], + [ + -117.234474, + 34.052821 + ], + [ + -117.234479, + 34.052606 + ], + [ + -117.234479, + 34.052297 + ], + [ + -117.23448, + 34.052134 + ], + [ + -117.23448, + 34.052048 + ], + [ + -117.234477, + 34.051767 + ] + ] + ] + }, + "properties": { + "name": "Long Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220687884, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.234371, + 34.052279 + ], + [ + -117.234105, + 34.052273 + ], + [ + -117.234106, + 34.052257 + ], + [ + -117.234112, + 34.052254 + ], + [ + -117.234127, + 34.052244 + ], + [ + -117.234198, + 34.052245 + ], + [ + -117.234199, + 34.052269 + ], + [ + -117.234259, + 34.052268 + ], + [ + -117.234259, + 34.052224 + ], + [ + -117.234272, + 34.052226 + ], + [ + -117.234317, + 34.052268 + ], + [ + -117.234386, + 34.052267 + ], + [ + -117.234435, + 34.052297 + ], + [ + -117.23444, + 34.05263 + ], + [ + -117.234386, + 34.052631 + ], + [ + -117.234354, + 34.052667 + ], + [ + -117.234318, + 34.05263 + ], + [ + -117.234268, + 34.05263 + ], + [ + -117.234268, + 34.052608 + ], + [ + -117.234368, + 34.05261 + ], + [ + -117.234413, + 34.052585 + ], + [ + -117.234409, + 34.052304 + ], + [ + -117.234382, + 34.052281 + ], + [ + -117.234371, + 34.052279 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 225037249, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.209452, + 34.045237 + ], + [ + -117.209385, + 34.045252 + ], + [ + -117.209329, + 34.04524 + ], + [ + -117.209318, + 34.045237 + ], + [ + -117.20927, + 34.045197 + ], + [ + -117.209252, + 34.045141 + ], + [ + -117.20927, + 34.045086 + ], + [ + -117.209318, + 34.045045 + ], + [ + -117.209385, + 34.045031 + ], + [ + -117.209434, + 34.045041 + ], + [ + -117.209452, + 34.045045 + ], + [ + -117.209501, + 34.045086 + ], + [ + -117.209519, + 34.045141 + ], + [ + -117.209501, + 34.045197 + ], + [ + -117.209452, + 34.045237 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 225053465, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.210577, + 34.046385 + ], + [ + -117.210541, + 34.04638 + ], + [ + -117.210436, + 34.046381 + ], + [ + -117.210369, + 34.046413 + ], + [ + -117.210308, + 34.046463 + ], + [ + -117.210251, + 34.046477 + ], + [ + -117.210177, + 34.046478 + ], + [ + -117.21008, + 34.046452 + ], + [ + -117.20995, + 34.04639 + ], + [ + -117.209878, + 34.046381 + ], + [ + -117.209805, + 34.046381 + ], + [ + -117.209698, + 34.046381 + ], + [ + -117.209608, + 34.0464 + ], + [ + -117.209516, + 34.046425 + ], + [ + -117.209438, + 34.046432 + ], + [ + -117.209181, + 34.046396 + ], + [ + -117.208993, + 34.04639 + ], + [ + -117.208939, + 34.046309 + ], + [ + -117.208912, + 34.046228 + ], + [ + -117.208881, + 34.046157 + ], + [ + -117.208822, + 34.046075 + ], + [ + -117.208824, + 34.046055 + ], + [ + -117.208828, + 34.045999 + ], + [ + -117.208813, + 34.045946 + ], + [ + -117.208744, + 34.045869 + ], + [ + -117.208718, + 34.045793 + ], + [ + -117.208724, + 34.04573 + ], + [ + -117.208801, + 34.045578 + ], + [ + -117.208843, + 34.045547 + ], + [ + -117.208941, + 34.045537 + ], + [ + -117.209026, + 34.045572 + ], + [ + -117.209092, + 34.045574 + ], + [ + -117.209136, + 34.045567 + ], + [ + -117.20921, + 34.045551 + ], + [ + -117.209249, + 34.045551 + ], + [ + -117.209339, + 34.045513 + ], + [ + -117.20942, + 34.045516 + ], + [ + -117.209457, + 34.045526 + ], + [ + -117.209518, + 34.045507 + ], + [ + -117.209541, + 34.045487 + ], + [ + -117.209658, + 34.045488 + ], + [ + -117.20968, + 34.045482 + ], + [ + -117.209681, + 34.045565 + ], + [ + -117.209711, + 34.045592 + ], + [ + -117.209775, + 34.045592 + ], + [ + -117.209778, + 34.045623 + ], + [ + -117.209839, + 34.045623 + ], + [ + -117.209907, + 34.045658 + ], + [ + -117.210022, + 34.045658 + ], + [ + -117.210024, + 34.045601 + ], + [ + -117.21007, + 34.045601 + ], + [ + -117.21007, + 34.045624 + ], + [ + -117.210151, + 34.045625 + ], + [ + -117.210152, + 34.045589 + ], + [ + -117.210187, + 34.045589 + ], + [ + -117.210186, + 34.045548 + ], + [ + -117.210021, + 34.045548 + ], + [ + -117.21002, + 34.045501 + ], + [ + -117.210054, + 34.045482 + ], + [ + -117.210113, + 34.045477 + ], + [ + -117.210142, + 34.045496 + ], + [ + -117.210229, + 34.045535 + ], + [ + -117.210256, + 34.045537 + ], + [ + -117.210422, + 34.045644 + ], + [ + -117.210434, + 34.045677 + ], + [ + -117.210452, + 34.045768 + ], + [ + -117.210496, + 34.045813 + ], + [ + -117.210568, + 34.045823 + ], + [ + -117.210656, + 34.045786 + ], + [ + -117.210747, + 34.045757 + ], + [ + -117.210752, + 34.045818 + ], + [ + -117.210697, + 34.045896 + ], + [ + -117.210564, + 34.045982 + ], + [ + -117.21051, + 34.046055 + ], + [ + -117.2105, + 34.046087 + ], + [ + -117.210518, + 34.04613 + ], + [ + -117.210547, + 34.046168 + ], + [ + -117.210656, + 34.046248 + ], + [ + -117.210678, + 34.046286 + ], + [ + -117.210665, + 34.046322 + ], + [ + -117.210628, + 34.046356 + ], + [ + -117.210577, + 34.046385 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 225766177, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.21731, + 34.051965 + ], + [ + -117.213208, + 34.05196 + ], + [ + -117.213177, + 34.051952 + ], + [ + -117.213153, + 34.05194 + ], + [ + -117.213141, + 34.051928 + ], + [ + -117.213135, + 34.05188 + ], + [ + -117.213132, + 34.05154 + ], + [ + -117.213122, + 34.051051 + ], + [ + -117.213122, + 34.050774 + ], + [ + -117.213153, + 34.050584 + ], + [ + -117.213681, + 34.050318 + ], + [ + -117.214975, + 34.049914 + ], + [ + -117.216377, + 34.049851 + ], + [ + -117.216375, + 34.050096 + ], + [ + -117.216371, + 34.05054 + ], + [ + -117.21735, + 34.050527 + ], + [ + -117.217374, + 34.051836 + ], + [ + -117.217375, + 34.051875 + ], + [ + -117.217372, + 34.051907 + ], + [ + -117.217357, + 34.051935 + ], + [ + -117.217339, + 34.051953 + ], + [ + -117.21731, + 34.051965 + ] + ] + ] + }, + "properties": { + "name": "Heritage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 225869670, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.187973, + 34.087387 + ], + [ + -117.187566, + 34.087266 + ], + [ + -117.187095, + 34.087165 + ], + [ + -117.186546, + 34.087027 + ], + [ + -117.186067, + 34.086821 + ], + [ + -117.185253, + 34.086425 + ], + [ + -117.184624, + 34.086179 + ], + [ + -117.184342, + 34.086072 + ], + [ + -117.183915, + 34.085952 + ], + [ + -117.183622, + 34.085913 + ], + [ + -117.18339, + 34.085891 + ], + [ + -117.183157, + 34.085856 + ], + [ + -117.182921, + 34.085811 + ], + [ + -117.182821, + 34.085788 + ], + [ + -117.18273, + 34.08577 + ], + [ + -117.182673, + 34.085746 + ], + [ + -117.182628, + 34.085718 + ], + [ + -117.18261, + 34.085697 + ], + [ + -117.182603, + 34.085667 + ], + [ + -117.182569, + 34.084994 + ], + [ + -117.182562, + 34.084731 + ], + [ + -117.182558, + 34.084587 + ], + [ + -117.182558, + 34.084583 + ], + [ + -117.18288, + 34.084589 + ], + [ + -117.182869, + 34.085048 + ], + [ + -117.183127, + 34.085172 + ], + [ + -117.183106, + 34.085235 + ], + [ + -117.183127, + 34.085298 + ], + [ + -117.183144, + 34.085332 + ], + [ + -117.183233, + 34.085409 + ], + [ + -117.183349, + 34.085509 + ], + [ + -117.183379, + 34.085546 + ], + [ + -117.183469, + 34.085619 + ], + [ + -117.183544, + 34.085671 + ], + [ + -117.183626, + 34.085717 + ], + [ + -117.183744, + 34.085765 + ], + [ + -117.183847, + 34.085799 + ], + [ + -117.18392, + 34.085815 + ], + [ + -117.184062, + 34.08584 + ], + [ + -117.184225, + 34.085875 + ], + [ + -117.184384, + 34.085914 + ], + [ + -117.184571, + 34.085975 + ], + [ + -117.184672, + 34.086009 + ], + [ + -117.184737, + 34.08603 + ], + [ + -117.184823, + 34.086046 + ], + [ + -117.184904, + 34.086059 + ], + [ + -117.185059, + 34.086067 + ], + [ + -117.185251, + 34.086069 + ], + [ + -117.185298, + 34.086069 + ], + [ + -117.185431, + 34.086066 + ], + [ + -117.185514, + 34.086067 + ], + [ + -117.185663, + 34.086078 + ], + [ + -117.185768, + 34.086105 + ], + [ + -117.18594, + 34.086167 + ], + [ + -117.186054, + 34.086219 + ], + [ + -117.1861, + 34.086235 + ], + [ + -117.186148, + 34.086253 + ], + [ + -117.186243, + 34.086284 + ], + [ + -117.186314, + 34.086299 + ], + [ + -117.186387, + 34.086317 + ], + [ + -117.186557, + 34.086333 + ], + [ + -117.186679, + 34.08634 + ], + [ + -117.186836, + 34.086343 + ], + [ + -117.187008, + 34.086349 + ], + [ + -117.18719, + 34.086333 + ], + [ + -117.187343, + 34.086313 + ], + [ + -117.187466, + 34.08629 + ], + [ + -117.187517, + 34.086277 + ], + [ + -117.187551, + 34.086269 + ], + [ + -117.187646, + 34.086244 + ], + [ + -117.187751, + 34.086231 + ], + [ + -117.18785, + 34.086219 + ], + [ + -117.187968, + 34.086224 + ], + [ + -117.187973, + 34.087387 + ] + ] + ] + }, + "properties": { + "name": "Israel Beal Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 225881087, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.186626, + 34.086755 + ], + [ + -117.186593, + 34.086777 + ], + [ + -117.186569, + 34.086783 + ], + [ + -117.18654, + 34.086783 + ], + [ + -117.186514, + 34.086777 + ], + [ + -117.186486, + 34.086767 + ], + [ + -117.186468, + 34.08676 + ], + [ + -117.186456, + 34.086747 + ], + [ + -117.186446, + 34.086728 + ], + [ + -117.186436, + 34.086705 + ], + [ + -117.186438, + 34.086667 + ], + [ + -117.18645, + 34.086635 + ], + [ + -117.186464, + 34.086613 + ], + [ + -117.186486, + 34.086598 + ], + [ + -117.186519, + 34.086587 + ], + [ + -117.186555, + 34.086584 + ], + [ + -117.18659, + 34.086592 + ], + [ + -117.186618, + 34.086606 + ], + [ + -117.186645, + 34.086628 + ], + [ + -117.186654, + 34.086652 + ], + [ + -117.186656, + 34.086682 + ], + [ + -117.186648, + 34.086716 + ], + [ + -117.186626, + 34.086755 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 231279489, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.696174, + 34.106906 + ], + [ + -117.69619, + 34.114198 + ], + [ + -117.698245, + 34.114194 + ], + [ + -117.698202, + 34.114438 + ], + [ + -117.698239, + 34.114602 + ], + [ + -117.698277, + 34.115153 + ], + [ + -117.698261, + 34.117822 + ], + [ + -117.698272, + 34.118449 + ], + [ + -117.698266, + 34.120243 + ], + [ + -117.69792, + 34.120249 + ], + [ + -117.69766, + 34.120309 + ], + [ + -117.697408, + 34.12042 + ], + [ + -117.696662, + 34.120483 + ], + [ + -117.696094, + 34.120483 + ], + [ + -117.695734, + 34.120398 + ], + [ + -117.695284, + 34.120394 + ], + [ + -117.695082, + 34.120418 + ], + [ + -117.694683, + 34.120696 + ], + [ + -117.694543, + 34.121033 + ], + [ + -117.6945, + 34.121442 + ], + [ + -117.693657, + 34.121472 + ], + [ + -117.694381, + 34.120371 + ], + [ + -117.69472, + 34.119763 + ], + [ + -117.694731, + 34.119204 + ], + [ + -117.694645, + 34.119017 + ], + [ + -117.694779, + 34.114083 + ], + [ + -117.694919, + 34.112186 + ], + [ + -117.695069, + 34.110476 + ], + [ + -117.695369, + 34.106888 + ], + [ + -117.696174, + 34.106906 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 236298745, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.771705, + 33.956923 + ], + [ + -117.77047, + 33.957449 + ], + [ + -117.769283, + 33.958474 + ], + [ + -117.768573, + 33.959161 + ], + [ + -117.768069, + 33.959601 + ], + [ + -117.766516, + 33.960191 + ], + [ + -117.76506, + 33.960757 + ], + [ + -117.763997, + 33.96137 + ], + [ + -117.763514, + 33.961845 + ], + [ + -117.764184, + 33.962303 + ], + [ + -117.763452, + 33.962967 + ], + [ + -117.763287, + 33.963602 + ], + [ + -117.763618, + 33.964134 + ], + [ + -117.763666, + 33.965577 + ], + [ + -117.764439, + 33.967122 + ], + [ + -117.764543, + 33.967694 + ], + [ + -117.764294, + 33.967872 + ], + [ + -117.764674, + 33.969199 + ], + [ + -117.764984, + 33.970189 + ], + [ + -117.765509, + 33.970807 + ], + [ + -117.766026, + 33.971918 + ], + [ + -117.766047, + 33.973022 + ], + [ + -117.766081, + 33.974081 + ], + [ + -117.766468, + 33.975042 + ], + [ + -117.76662, + 33.975128 + ], + [ + -117.766785, + 33.975157 + ], + [ + -117.767103, + 33.975088 + ], + [ + -117.76722, + 33.974905 + ], + [ + -117.767337, + 33.974727 + ], + [ + -117.767324, + 33.973377 + ], + [ + -117.767358, + 33.971443 + ], + [ + -117.767268, + 33.970928 + ], + [ + -117.767144, + 33.970722 + ], + [ + -117.767213, + 33.969915 + ], + [ + -117.767268, + 33.96798 + ], + [ + -117.766413, + 33.966687 + ], + [ + -117.766033, + 33.966641 + ], + [ + -117.765688, + 33.966292 + ], + [ + -117.765709, + 33.966029 + ], + [ + -117.765764, + 33.965079 + ], + [ + -117.765826, + 33.964861 + ], + [ + -117.765605, + 33.964054 + ], + [ + -117.765591, + 33.963808 + ], + [ + -117.765619, + 33.963556 + ], + [ + -117.765854, + 33.963379 + ], + [ + -117.766309, + 33.963081 + ], + [ + -117.766792, + 33.962646 + ], + [ + -117.76771, + 33.961856 + ], + [ + -117.768421, + 33.962063 + ], + [ + -117.768814, + 33.9622 + ], + [ + -117.769104, + 33.962034 + ], + [ + -117.769339, + 33.961816 + ], + [ + -117.76949, + 33.961559 + ], + [ + -117.769263, + 33.961467 + ], + [ + -117.76909, + 33.961427 + ], + [ + -117.769194, + 33.961072 + ], + [ + -117.769697, + 33.959836 + ], + [ + -117.770015, + 33.959441 + ], + [ + -117.770236, + 33.959401 + ], + [ + -117.770436, + 33.959899 + ], + [ + -117.770643, + 33.960231 + ], + [ + -117.771174, + 33.960649 + ], + [ + -117.771581, + 33.96054 + ], + [ + -117.771664, + 33.960271 + ], + [ + -117.771636, + 33.959584 + ], + [ + -117.771733, + 33.959098 + ], + [ + -117.771974, + 33.958474 + ], + [ + -117.772182, + 33.95801 + ], + [ + -117.772285, + 33.957821 + ], + [ + -117.771705, + 33.956923 + ] + ] + ] + }, + "properties": { + "name": "Western Hills Golf Course (Chino Hills)", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 239839941, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.237653, + 34.059673 + ], + [ + -117.237644, + 34.056975 + ], + [ + -117.23764, + 34.055985 + ], + [ + -117.237641, + 34.055908 + ], + [ + -117.238422, + 34.056358 + ], + [ + -117.238415, + 34.056438 + ], + [ + -117.238393, + 34.056986 + ], + [ + -117.238484, + 34.059668 + ], + [ + -117.237653, + 34.059673 + ] + ] + ] + }, + "properties": { + "name": "Heritage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 239957993, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.143914, + 34.080806 + ], + [ + -117.143914, + 34.080666 + ], + [ + -117.143913, + 34.080095 + ], + [ + -117.143908, + 34.077467 + ], + [ + -117.148503, + 34.077439 + ], + [ + -117.148503, + 34.077604 + ], + [ + -117.148448, + 34.07786 + ], + [ + -117.148359, + 34.078061 + ], + [ + -117.148227, + 34.07828 + ], + [ + -117.148139, + 34.078435 + ], + [ + -117.148094, + 34.078577 + ], + [ + -117.148072, + 34.078682 + ], + [ + -117.148061, + 34.078773 + ], + [ + -117.148061, + 34.079404 + ], + [ + -117.148039, + 34.080272 + ], + [ + -117.14805, + 34.080486 + ], + [ + -117.148065, + 34.080574 + ], + [ + -117.148078, + 34.080655 + ], + [ + -117.148166, + 34.080792 + ], + [ + -117.143914, + 34.080806 + ] + ] + ] + }, + "properties": { + "name": "Redlands Sports Complex", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 239958317, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.147599, + 34.08028 + ], + [ + -117.147601, + 34.080045 + ], + [ + -117.147432, + 34.080044 + ], + [ + -117.147431, + 34.080161 + ], + [ + -117.14743, + 34.080279 + ], + [ + -117.147599, + 34.08028 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 248634170, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.786784, + 34.088413 + ], + [ + -117.784188, + 34.088644 + ], + [ + -117.784129, + 34.089026 + ], + [ + -117.78091, + 34.088226 + ], + [ + -117.78041, + 34.08805 + ], + [ + -117.779097, + 34.087311 + ], + [ + -117.776914, + 34.086125 + ], + [ + -117.775937, + 34.085489 + ], + [ + -117.775416, + 34.085037 + ], + [ + -117.775158, + 34.084624 + ], + [ + -117.774509, + 34.083696 + ], + [ + -117.773699, + 34.083136 + ], + [ + -117.773292, + 34.082767 + ], + [ + -117.77318, + 34.082482 + ], + [ + -117.773227, + 34.082256 + ], + [ + -117.77333, + 34.082073 + ], + [ + -117.773614, + 34.081842 + ], + [ + -117.77407, + 34.081651 + ], + [ + -117.77473, + 34.081508 + ], + [ + -117.776667, + 34.081135 + ], + [ + -117.777369, + 34.080901 + ], + [ + -117.778067, + 34.080598 + ], + [ + -117.778844, + 34.080106 + ], + [ + -117.779515, + 34.079442 + ], + [ + -117.779697, + 34.079191 + ], + [ + -117.779826, + 34.079231 + ], + [ + -117.78041, + 34.079541 + ], + [ + -117.783715, + 34.081052 + ], + [ + -117.783296, + 34.081603 + ], + [ + -117.781919, + 34.082943 + ], + [ + -117.780936, + 34.08378 + ], + [ + -117.781141, + 34.084223 + ], + [ + -117.781828, + 34.084992 + ], + [ + -117.782465, + 34.085424 + ], + [ + -117.784042, + 34.084895 + ], + [ + -117.785116, + 34.085125 + ], + [ + -117.785464, + 34.085228 + ], + [ + -117.78689, + 34.088059 + ], + [ + -117.786784, + 34.088413 + ] + ] + ] + }, + "properties": { + "name": "Mountain Meadows Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 257374361, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.593236, + 34.072062 + ], + [ + -117.585695, + 34.072003 + ], + [ + -117.585727, + 34.073825 + ], + [ + -117.584708, + 34.073807 + ], + [ + -117.584703, + 34.07538 + ], + [ + -117.591369, + 34.07539 + ], + [ + -117.591804, + 34.075346 + ], + [ + -117.592179, + 34.075333 + ], + [ + -117.592871, + 34.075333 + ], + [ + -117.593263, + 34.075044 + ], + [ + -117.593236, + 34.072062 + ] + ] + ] + }, + "properties": { + "name": "Cucamonga-Guasti Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 261313971, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.162945, + 34.06698 + ], + [ + -117.161829, + 34.066976 + ], + [ + -117.161823, + 34.066513 + ], + [ + -117.162939, + 34.066518 + ], + [ + -117.162945, + 34.06698 + ] + ] + ] + }, + "properties": { + "name": "Farquhar Fields", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 261315275, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.165437, + 34.061352 + ], + [ + -117.165764, + 34.061352 + ], + [ + -117.165799, + 34.061329 + ], + [ + -117.165811, + 34.061296 + ], + [ + -117.165827, + 34.061201 + ], + [ + -117.165736, + 34.061178 + ], + [ + -117.165577, + 34.061151 + ], + [ + -117.165491, + 34.061157 + ], + [ + -117.165433, + 34.06118 + ], + [ + -117.165393, + 34.061186 + ], + [ + -117.165353, + 34.061205 + ], + [ + -117.165337, + 34.061252 + ], + [ + -117.165302, + 34.061294 + ], + [ + -117.165276, + 34.061335 + ], + [ + -117.165262, + 34.061362 + ], + [ + -117.165437, + 34.061352 + ] + ] + ] + }, + "properties": { + "name": "LaFourcade Community Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 262587631, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.754, + 34.047246 + ], + [ + -117.754016, + 34.047619 + ], + [ + -117.752144, + 34.047663 + ], + [ + -117.752047, + 34.046797 + ], + [ + -117.752948, + 34.046792 + ], + [ + -117.752964, + 34.045979 + ], + [ + -117.752986, + 34.045703 + ], + [ + -117.753517, + 34.045677 + ], + [ + -117.753538, + 34.046094 + ], + [ + -117.75356, + 34.046659 + ], + [ + -117.753753, + 34.046997 + ], + [ + -117.753817, + 34.047201 + ], + [ + -117.754, + 34.047246 + ] + ] + ] + }, + "properties": { + "name": "Madison Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 272238026, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.156178, + 34.073612 + ], + [ + -117.148708, + 34.073687 + ], + [ + -117.148725, + 34.071973 + ], + [ + -117.148742, + 34.070276 + ], + [ + -117.156217, + 34.070201 + ], + [ + -117.156178, + 34.073612 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 283744383, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.720046, + 33.969826 + ], + [ + -117.720056, + 33.971072 + ], + [ + -117.719713, + 33.971196 + ], + [ + -117.719659, + 33.971147 + ], + [ + -117.71952, + 33.97113 + ], + [ + -117.719439, + 33.971179 + ], + [ + -117.719386, + 33.971276 + ], + [ + -117.71915, + 33.971254 + ], + [ + -117.719034, + 33.97175 + ], + [ + -117.718458, + 33.971859 + ], + [ + -117.718592, + 33.972157 + ], + [ + -117.718447, + 33.972206 + ], + [ + -117.718372, + 33.972202 + ], + [ + -117.718297, + 33.972117 + ], + [ + -117.71801, + 33.97167 + ], + [ + -117.717911, + 33.971441 + ], + [ + -117.717852, + 33.971317 + ], + [ + -117.718286, + 33.971183 + ], + [ + -117.718501, + 33.971094 + ], + [ + -117.718866, + 33.970854 + ], + [ + -117.719155, + 33.970556 + ], + [ + -117.718876, + 33.970387 + ], + [ + -117.718957, + 33.970284 + ], + [ + -117.719219, + 33.970493 + ], + [ + -117.719423, + 33.97028 + ], + [ + -117.719606, + 33.970075 + ], + [ + -117.719718, + 33.969986 + ], + [ + -117.719826, + 33.969902 + ], + [ + -117.720046, + 33.969826 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 283886287, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.687384, + 33.994566 + ], + [ + -117.687405, + 33.995077 + ], + [ + -117.687407, + 33.995136 + ], + [ + -117.687401, + 33.995166 + ], + [ + -117.687379, + 33.995179 + ], + [ + -117.687335, + 33.995189 + ], + [ + -117.687295, + 33.995196 + ], + [ + -117.68652, + 33.99518 + ], + [ + -117.686375, + 33.995091 + ], + [ + -117.686317, + 33.995004 + ], + [ + -117.686267, + 33.994889 + ], + [ + -117.686279, + 33.994705 + ], + [ + -117.686336, + 33.994621 + ], + [ + -117.686425, + 33.994481 + ], + [ + -117.686503, + 33.994428 + ], + [ + -117.686698, + 33.994364 + ], + [ + -117.686813, + 33.99434 + ], + [ + -117.686993, + 33.99436 + ], + [ + -117.687211, + 33.994434 + ], + [ + -117.687317, + 33.994498 + ], + [ + -117.687384, + 33.994566 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 283886290, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.688382, + 33.995183 + ], + [ + -117.687765, + 33.995187 + ], + [ + -117.687695, + 33.995187 + ], + [ + -117.687659, + 33.995181 + ], + [ + -117.687643, + 33.995163 + ], + [ + -117.687632, + 33.995126 + ], + [ + -117.687626, + 33.995093 + ], + [ + -117.687666, + 33.994451 + ], + [ + -117.687777, + 33.994334 + ], + [ + -117.687883, + 33.994287 + ], + [ + -117.688023, + 33.994249 + ], + [ + -117.688245, + 33.994264 + ], + [ + -117.688344, + 33.994313 + ], + [ + -117.688511, + 33.994391 + ], + [ + -117.688573, + 33.994457 + ], + [ + -117.688644, + 33.99462 + ], + [ + -117.688671, + 33.994716 + ], + [ + -117.688642, + 33.994865 + ], + [ + -117.688546, + 33.995043 + ], + [ + -117.688467, + 33.99513 + ], + [ + -117.688382, + 33.995183 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 283886293, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.679463, + 33.994577 + ], + [ + -117.678747, + 33.994608 + ], + [ + -117.6788, + 33.995447 + ], + [ + -117.679517, + 33.995415 + ], + [ + -117.679463, + 33.994577 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 291397117, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.827683, + 34.132002 + ], + [ + -117.825387, + 34.132051 + ], + [ + -117.824432, + 34.131993 + ], + [ + -117.823708, + 34.132073 + ], + [ + -117.820376, + 34.13207 + ], + [ + -117.820379, + 34.132505 + ], + [ + -117.819995, + 34.132515 + ], + [ + -117.819583, + 34.13244 + ], + [ + -117.819209, + 34.132204 + ], + [ + -117.817331, + 34.130022 + ], + [ + -117.816746, + 34.129408 + ], + [ + -117.816151, + 34.128964 + ], + [ + -117.815408, + 34.128703 + ], + [ + -117.814781, + 34.128677 + ], + [ + -117.814499, + 34.128597 + ], + [ + -117.814154, + 34.128347 + ], + [ + -117.813743, + 34.12821 + ], + [ + -117.813177, + 34.128143 + ], + [ + -117.813172, + 34.127764 + ], + [ + -117.812475, + 34.127752 + ], + [ + -117.812436, + 34.126804 + ], + [ + -117.812557, + 34.126736 + ], + [ + -117.813121, + 34.126865 + ], + [ + -117.813186, + 34.126708 + ], + [ + -117.81354, + 34.126494 + ], + [ + -117.813631, + 34.125921 + ], + [ + -117.816885, + 34.126518 + ], + [ + -117.816926, + 34.126833 + ], + [ + -117.817477, + 34.127622 + ], + [ + -117.819196, + 34.127868 + ], + [ + -117.819872, + 34.128202 + ], + [ + -117.820369, + 34.128615 + ], + [ + -117.820385, + 34.129783 + ], + [ + -117.82054, + 34.129786 + ], + [ + -117.824858, + 34.129774 + ], + [ + -117.827203, + 34.129792 + ], + [ + -117.828271, + 34.129277 + ], + [ + -117.828367, + 34.129104 + ], + [ + -117.828927, + 34.129213 + ], + [ + -117.829029, + 34.129906 + ], + [ + -117.829018, + 34.131576 + ], + [ + -117.828321, + 34.13158 + ], + [ + -117.827688, + 34.131789 + ], + [ + -117.827683, + 34.132002 + ] + ] + ] + }, + "properties": { + "name": "Glendora Country Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 293378833, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.599669, + 33.955501 + ], + [ + -117.599672, + 33.956033 + ], + [ + -117.599589, + 33.956026 + ], + [ + -117.59949, + 33.956009 + ], + [ + -117.599381, + 33.955978 + ], + [ + -117.599285, + 33.95594 + ], + [ + -117.599182, + 33.955884 + ], + [ + -117.599094, + 33.955822 + ], + [ + -117.599011, + 33.955745 + ], + [ + -117.598947, + 33.955666 + ], + [ + -117.598871, + 33.95553 + ], + [ + -117.598843, + 33.955446 + ], + [ + -117.598829, + 33.955373 + ], + [ + -117.598826, + 33.955345 + ], + [ + -117.599513, + 33.955357 + ], + [ + -117.599501, + 33.955404 + ], + [ + -117.599514, + 33.955449 + ], + [ + -117.599539, + 33.955477 + ], + [ + -117.59958, + 33.955499 + ], + [ + -117.599635, + 33.955507 + ], + [ + -117.599669, + 33.955501 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 295319693, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.21666, + 34.050053 + ], + [ + -117.216556, + 34.050139 + ], + [ + -117.21639, + 34.050135 + ], + [ + -117.216393, + 34.050007 + ], + [ + -117.216467, + 34.04993 + ], + [ + -117.216528, + 34.049958 + ], + [ + -117.216448, + 34.05004 + ], + [ + -117.21654, + 34.050103 + ], + [ + -117.216639, + 34.050031 + ], + [ + -117.21666, + 34.050053 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 299053228, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.164173, + 34.074114 + ], + [ + -117.164173, + 34.07428 + ], + [ + -117.164164, + 34.074385 + ], + [ + -117.164136, + 34.074559 + ], + [ + -117.164112, + 34.074682 + ], + [ + -117.164065, + 34.07486 + ], + [ + -117.163986, + 34.075069 + ], + [ + -117.163888, + 34.075011 + ], + [ + -117.163823, + 34.07493 + ], + [ + -117.163771, + 34.074949 + ], + [ + -117.163743, + 34.074899 + ], + [ + -117.16379, + 34.074876 + ], + [ + -117.163757, + 34.074779 + ], + [ + -117.163762, + 34.07464 + ], + [ + -117.163757, + 34.074582 + ], + [ + -117.163715, + 34.074562 + ], + [ + -117.163734, + 34.074512 + ], + [ + -117.163776, + 34.074516 + ], + [ + -117.163781, + 34.074427 + ], + [ + -117.163823, + 34.074315 + ], + [ + -117.163855, + 34.074276 + ], + [ + -117.163818, + 34.074257 + ], + [ + -117.163865, + 34.074207 + ], + [ + -117.163902, + 34.074238 + ], + [ + -117.163939, + 34.074203 + ], + [ + -117.164037, + 34.074137 + ], + [ + -117.164098, + 34.074114 + ], + [ + -117.164136, + 34.074098 + ], + [ + -117.164173, + 34.074114 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 302041063, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.45488, + 34.140566 + ], + [ + -117.454931, + 34.140617 + ], + [ + -117.455481, + 34.140612 + ], + [ + -117.455543, + 34.140557 + ], + [ + -117.45554, + 34.140335 + ], + [ + -117.455539, + 34.140182 + ], + [ + -117.455536, + 34.140001 + ], + [ + -117.455537, + 34.139849 + ], + [ + -117.455532, + 34.13962 + ], + [ + -117.455481, + 34.139567 + ], + [ + -117.454923, + 34.139569 + ], + [ + -117.454872, + 34.139611 + ], + [ + -117.45488, + 34.140566 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305803592, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.754726, + 34.14715 + ], + [ + -117.75405, + 34.148033 + ], + [ + -117.753431, + 34.148807 + ], + [ + -117.753077, + 34.149179 + ], + [ + -117.752676, + 34.149433 + ], + [ + -117.750831, + 34.150386 + ], + [ + -117.750329, + 34.150871 + ], + [ + -117.749616, + 34.151619 + ], + [ + -117.749293, + 34.151707 + ], + [ + -117.748427, + 34.151466 + ], + [ + -117.747079, + 34.150771 + ], + [ + -117.74709, + 34.150364 + ], + [ + -117.746789, + 34.149682 + ], + [ + -117.746746, + 34.148973 + ], + [ + -117.746408, + 34.148037 + ], + [ + -117.746308, + 34.147416 + ], + [ + -117.74625, + 34.146647 + ], + [ + -117.746445, + 34.14624 + ], + [ + -117.746857, + 34.145886 + ], + [ + -117.747312, + 34.145763 + ], + [ + -117.748374, + 34.145746 + ], + [ + -117.748781, + 34.145654 + ], + [ + -117.74914, + 34.145334 + ], + [ + -117.749457, + 34.144692 + ], + [ + -117.749674, + 34.144556 + ], + [ + -117.750509, + 34.144171 + ], + [ + -117.752047, + 34.143804 + ], + [ + -117.753902, + 34.143703 + ], + [ + -117.754134, + 34.14376 + ], + [ + -117.754171, + 34.143843 + ], + [ + -117.753775, + 34.145501 + ], + [ + -117.753955, + 34.145632 + ], + [ + -117.754779, + 34.146218 + ], + [ + -117.755001, + 34.146502 + ], + [ + -117.755032, + 34.146747 + ], + [ + -117.754726, + 34.14715 + ] + ] + ] + }, + "properties": { + "name": "Marshall Canyon Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305803593, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.782965, + 34.13802 + ], + [ + -117.782399, + 34.138247 + ], + [ + -117.781337, + 34.138868 + ], + [ + -117.780523, + 34.139669 + ], + [ + -117.780201, + 34.139984 + ], + [ + -117.779953, + 34.140268 + ], + [ + -117.778795, + 34.141335 + ], + [ + -117.778299, + 34.142 + ], + [ + -117.778129, + 34.142446 + ], + [ + -117.778008, + 34.143045 + ], + [ + -117.777966, + 34.143413 + ], + [ + -117.777749, + 34.143461 + ], + [ + -117.777231, + 34.143268 + ], + [ + -117.777099, + 34.142787 + ], + [ + -117.777088, + 34.141532 + ], + [ + -117.777088, + 34.139935 + ], + [ + -117.777099, + 34.139398 + ], + [ + -117.776993, + 34.138982 + ], + [ + -117.776835, + 34.138378 + ], + [ + -117.77665, + 34.137805 + ], + [ + -117.776734, + 34.136834 + ], + [ + -117.776851, + 34.136537 + ], + [ + -117.777083, + 34.136301 + ], + [ + -117.777696, + 34.136065 + ], + [ + -117.778071, + 34.135758 + ], + [ + -117.77832, + 34.135378 + ], + [ + -117.780085, + 34.134652 + ], + [ + -117.780365, + 34.1347 + ], + [ + -117.780703, + 34.134918 + ], + [ + -117.780888, + 34.134687 + ], + [ + -117.781263, + 34.134407 + ], + [ + -117.781961, + 34.134022 + ], + [ + -117.782584, + 34.133689 + ], + [ + -117.783028, + 34.133388 + ], + [ + -117.783224, + 34.13323 + ], + [ + -117.783773, + 34.133528 + ], + [ + -117.783927, + 34.133624 + ], + [ + -117.783668, + 34.133947 + ], + [ + -117.783213, + 34.134271 + ], + [ + -117.782949, + 34.13491 + ], + [ + -117.783255, + 34.135339 + ], + [ + -117.783858, + 34.135666 + ], + [ + -117.78445, + 34.135977 + ], + [ + -117.784392, + 34.136183 + ], + [ + -117.784434, + 34.136428 + ], + [ + -117.78455, + 34.136681 + ], + [ + -117.784783, + 34.136904 + ], + [ + -117.785507, + 34.137442 + ], + [ + -117.785422, + 34.138107 + ], + [ + -117.784857, + 34.13861 + ], + [ + -117.784503, + 34.138536 + ], + [ + -117.783255, + 34.138033 + ], + [ + -117.782965, + 34.13802 + ] + ] + ] + }, + "properties": { + "name": "San Dimas Canyon Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305804485, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.72042, + 34.114313 + ], + [ + -117.720404, + 34.115915 + ], + [ + -117.720489, + 34.116 + ], + [ + -117.723107, + 34.116011 + ], + [ + -117.723337, + 34.116035 + ], + [ + -117.723613, + 34.116114 + ], + [ + -117.723908, + 34.116233 + ], + [ + -117.724272, + 34.116372 + ], + [ + -117.72442, + 34.116434 + ], + [ + -117.724505, + 34.116426 + ], + [ + -117.724531, + 34.116361 + ], + [ + -117.724515, + 34.114356 + ], + [ + -117.72042, + 34.114313 + ] + ] + ] + }, + "properties": { + "name": "Cahuilla Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 324042457, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.742947, + 34.101126 + ], + [ + -117.742945, + 34.101233 + ], + [ + -117.742935, + 34.102274 + ], + [ + -117.742749, + 34.102283 + ], + [ + -117.74255, + 34.102325 + ], + [ + -117.742351, + 34.102408 + ], + [ + -117.742172, + 34.102491 + ], + [ + -117.742017, + 34.102536 + ], + [ + -117.741845, + 34.102548 + ], + [ + -117.741557, + 34.102536 + ], + [ + -117.741488, + 34.102493 + ], + [ + -117.741505, + 34.102178 + ], + [ + -117.741546, + 34.102015 + ], + [ + -117.741625, + 34.101847 + ], + [ + -117.741673, + 34.101697 + ], + [ + -117.741687, + 34.101574 + ], + [ + -117.741687, + 34.101122 + ], + [ + -117.742947, + 34.101126 + ] + ] + ] + }, + "properties": { + "name": "Harrison Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 324042458, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.728947, + 34.100661 + ], + [ + -117.728887, + 34.100711 + ], + [ + -117.727883, + 34.100666 + ], + [ + -117.727679, + 34.100585 + ], + [ + -117.727416, + 34.100588 + ], + [ + -117.727353, + 34.098628 + ], + [ + -117.728982, + 34.098629 + ], + [ + -117.728947, + 34.100661 + ] + ] + ] + }, + "properties": { + "name": "Larkin Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 328672840, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.758326, + 33.99561 + ], + [ + -117.758221, + 33.99571 + ], + [ + -117.757393, + 33.996426 + ], + [ + -117.756948, + 33.996095 + ], + [ + -117.756325, + 33.995722 + ], + [ + -117.754807, + 33.99535 + ], + [ + -117.754099, + 33.995354 + ], + [ + -117.754104, + 33.995255 + ], + [ + -117.753978, + 33.995284 + ], + [ + -117.753755, + 33.994783 + ], + [ + -117.753946, + 33.994772 + ], + [ + -117.754313, + 33.994892 + ], + [ + -117.755944, + 33.994534 + ], + [ + -117.756266, + 33.994381 + ], + [ + -117.756625, + 33.993907 + ], + [ + -117.758321, + 33.995525 + ], + [ + -117.758334, + 33.995573 + ], + [ + -117.758326, + 33.99561 + ] + ] + ] + }, + "properties": { + "name": "English Springs Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 339074270, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.724315, + 34.082965 + ], + [ + -117.724277, + 34.082887 + ], + [ + -117.724229, + 34.082828 + ], + [ + -117.724212, + 34.082441 + ], + [ + -117.724218, + 34.081956 + ], + [ + -117.723842, + 34.081959 + ], + [ + -117.723827, + 34.08297 + ], + [ + -117.724315, + 34.082965 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 354195333, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.719845, + 34.098633 + ], + [ + -117.719721, + 34.098682 + ], + [ + -117.719571, + 34.098718 + ], + [ + -117.719485, + 34.098749 + ], + [ + -117.719424, + 34.098831 + ], + [ + -117.719415, + 34.099304 + ], + [ + -117.720204, + 34.099302 + ], + [ + -117.720199, + 34.099144 + ], + [ + -117.720172, + 34.098947 + ], + [ + -117.720089, + 34.09879 + ], + [ + -117.719863, + 34.098642 + ], + [ + -117.719845, + 34.098633 + ] + ] + ] + }, + "properties": { + "name": "Mallows Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 354195430, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.7185, + 34.101729 + ], + [ + -117.718528, + 34.103397 + ], + [ + -117.718633, + 34.103396 + ], + [ + -117.720163, + 34.103398 + ], + [ + -117.720179, + 34.101697 + ], + [ + -117.718506, + 34.101703 + ], + [ + -117.7185, + 34.101729 + ] + ] + ] + }, + "properties": { + "name": "Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380192480, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.711434, + 34.100696 + ], + [ + -117.711037, + 34.100695 + ], + [ + -117.711034, + 34.101531 + ], + [ + -117.711287, + 34.101531 + ], + [ + -117.711575, + 34.101474 + ], + [ + -117.711863, + 34.101395 + ], + [ + -117.712067, + 34.101275 + ], + [ + -117.712215, + 34.101187 + ], + [ + -117.712349, + 34.101051 + ], + [ + -117.712426, + 34.100987 + ], + [ + -117.712462, + 34.100907 + ], + [ + -117.712503, + 34.100865 + ], + [ + -117.711908, + 34.100865 + ], + [ + -117.711908, + 34.100965 + ], + [ + -117.711433, + 34.100964 + ], + [ + -117.711434, + 34.100696 + ] + ] + ] + }, + "properties": { + "name": "Walker Beach", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380192619, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.71033, + 34.101316 + ], + [ + -117.71033, + 34.100912 + ], + [ + -117.709754, + 34.100907 + ], + [ + -117.709747, + 34.10151 + ], + [ + -117.710153, + 34.101505 + ], + [ + -117.710153, + 34.101322 + ], + [ + -117.71033, + 34.101316 + ] + ] + ] + }, + "properties": { + "name": "Athearn Field/Parking Structure", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380198628, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.706623, + 34.103763 + ], + [ + -117.706618, + 34.103412 + ], + [ + -117.705826, + 34.103401 + ], + [ + -117.705824, + 34.103484 + ], + [ + -117.705849, + 34.103534 + ], + [ + -117.70587, + 34.103579 + ], + [ + -117.705862, + 34.103634 + ], + [ + -117.705839, + 34.103692 + ], + [ + -117.705849, + 34.103724 + ], + [ + -117.705894, + 34.103752 + ], + [ + -117.706623, + 34.103763 + ] + ] + ] + }, + "properties": { + "name": "Stephen L. Glass Commencement Plaza and Recreation Area", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380200043, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.705298, + 34.103782 + ], + [ + -117.704487, + 34.103771 + ], + [ + -117.704477, + 34.10301 + ], + [ + -117.705204, + 34.103018 + ], + [ + -117.70522, + 34.103167 + ], + [ + -117.705291, + 34.10329 + ], + [ + -117.705298, + 34.103782 + ] + ] + ] + }, + "properties": { + "name": "Holden Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380200109, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.706517, + 34.104778 + ], + [ + -117.706499, + 34.104636 + ], + [ + -117.706468, + 34.104604 + ], + [ + -117.705599, + 34.104616 + ], + [ + -117.705523, + 34.104664 + ], + [ + -117.705489, + 34.104717 + ], + [ + -117.70548, + 34.104765 + ], + [ + -117.705498, + 34.104834 + ], + [ + -117.705544, + 34.104882 + ], + [ + -117.705584, + 34.104932 + ], + [ + -117.705639, + 34.104902 + ], + [ + -117.70573, + 34.104894 + ], + [ + -117.70573, + 34.104839 + ], + [ + -117.705752, + 34.104786 + ], + [ + -117.705797, + 34.104768 + ], + [ + -117.705886, + 34.104758 + ], + [ + -117.705999, + 34.104763 + ], + [ + -117.706151, + 34.104773 + ], + [ + -117.706322, + 34.104783 + ], + [ + -117.706432, + 34.104791 + ], + [ + -117.706517, + 34.104778 + ] + ] + ] + }, + "properties": { + "name": "Brant Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380200586, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.704339, + 34.106766 + ], + [ + -117.703115, + 34.106751 + ], + [ + -117.703102, + 34.105438 + ], + [ + -117.703245, + 34.105539 + ], + [ + -117.703278, + 34.105674 + ], + [ + -117.703343, + 34.105747 + ], + [ + -117.703497, + 34.105863 + ], + [ + -117.703492, + 34.105933 + ], + [ + -117.703618, + 34.105967 + ], + [ + -117.70366, + 34.105894 + ], + [ + -117.703753, + 34.105879 + ], + [ + -117.703884, + 34.105871 + ], + [ + -117.704, + 34.105825 + ], + [ + -117.704112, + 34.105744 + ], + [ + -117.704201, + 34.105666 + ], + [ + -117.704252, + 34.105547 + ], + [ + -117.704271, + 34.105458 + ], + [ + -117.704276, + 34.105323 + ], + [ + -117.704345, + 34.105216 + ], + [ + -117.704339, + 34.106766 + ] + ] + ] + }, + "properties": { + "name": "Outback Preserve", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380209166, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.709783, + 34.104031 + ], + [ + -117.709436, + 34.104029 + ], + [ + -117.709438, + 34.103797 + ], + [ + -117.709785, + 34.103799 + ], + [ + -117.709783, + 34.104031 + ] + ] + ] + }, + "properties": { + "name": "Margaret Fowler Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 381378303, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.700072, + 33.958105 + ], + [ + -117.699967, + 33.957804 + ], + [ + -117.699877, + 33.957543 + ], + [ + -117.699688, + 33.957 + ], + [ + -117.698867, + 33.957816 + ], + [ + -117.698164, + 33.957329 + ], + [ + -117.69659, + 33.959 + ], + [ + -117.700038, + 33.958113 + ], + [ + -117.700072, + 33.958105 + ] + ] + ] + }, + "properties": { + "name": "Altera Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 398659984, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.778473, + 34.104773 + ], + [ + -117.778516, + 34.10466 + ], + [ + -117.778788, + 34.103944 + ], + [ + -117.777729, + 34.103669 + ], + [ + -117.777645, + 34.103647 + ], + [ + -117.777331, + 34.104476 + ], + [ + -117.777661, + 34.104562 + ], + [ + -117.778363, + 34.104744 + ], + [ + -117.778473, + 34.104773 + ] + ] + ] + }, + "properties": { + "name": "Kuns Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 426419472, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.623458, + 34.118525 + ], + [ + -117.62237, + 34.11853 + ], + [ + -117.622082, + 34.116604 + ], + [ + -117.622185, + 34.116324 + ], + [ + -117.622263, + 34.11601 + ], + [ + -117.62216, + 34.115561 + ], + [ + -117.622593, + 34.115009 + ], + [ + -117.622991, + 34.1145 + ], + [ + -117.623058, + 34.114339 + ], + [ + -117.623057, + 34.114002 + ], + [ + -117.623439, + 34.113242 + ], + [ + -117.623621, + 34.112737 + ], + [ + -117.623701, + 34.112643 + ], + [ + -117.6236, + 34.111921 + ], + [ + -117.62356, + 34.111779 + ], + [ + -117.623452, + 34.111587 + ], + [ + -117.623102, + 34.111262 + ], + [ + -117.622714, + 34.110788 + ], + [ + -117.622355, + 34.110475 + ], + [ + -117.622214, + 34.110465 + ], + [ + -117.622002, + 34.11038 + ], + [ + -117.621613, + 34.109959 + ], + [ + -117.621517, + 34.109635 + ], + [ + -117.621446, + 34.109383 + ], + [ + -117.62142, + 34.109306 + ], + [ + -117.621586, + 34.108745 + ], + [ + -117.621776, + 34.108505 + ], + [ + -117.622681, + 34.107372 + ], + [ + -117.623093, + 34.107169 + ], + [ + -117.623537, + 34.107115 + ], + [ + -117.624789, + 34.107084 + ], + [ + -117.624952, + 34.107046 + ], + [ + -117.625056, + 34.107021 + ], + [ + -117.62626, + 34.107639 + ], + [ + -117.626281, + 34.108327 + ], + [ + -117.62751, + 34.108332 + ], + [ + -117.627524, + 34.111662 + ], + [ + -117.628836, + 34.112214 + ], + [ + -117.628808, + 34.116459 + ], + [ + -117.628484, + 34.11646 + ], + [ + -117.627684, + 34.117362 + ], + [ + -117.62722, + 34.118009 + ], + [ + -117.626622, + 34.118017 + ], + [ + -117.626281, + 34.11787 + ], + [ + -117.625978, + 34.116549 + ], + [ + -117.625941, + 34.116342 + ], + [ + -117.625901, + 34.116108 + ], + [ + -117.62516, + 34.116336 + ], + [ + -117.624787, + 34.11645 + ], + [ + -117.624678, + 34.116564 + ], + [ + -117.623467, + 34.117828 + ], + [ + -117.623458, + 34.118525 + ] + ] + ] + }, + "properties": { + "name": "Red Hill Country Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 438365441, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.763971, + 34.060462 + ], + [ + -117.763983, + 34.060764 + ], + [ + -117.764312, + 34.060755 + ], + [ + -117.764323, + 34.061104 + ], + [ + -117.763522, + 34.061122 + ], + [ + -117.763499, + 34.060531 + ], + [ + -117.763528, + 34.060495 + ], + [ + -117.76357, + 34.060477 + ], + [ + -117.763971, + 34.060462 + ] + ] + ] + }, + "properties": { + "name": "Hamilton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 438371330, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.756668, + 34.056775 + ], + [ + -117.756699, + 34.057652 + ], + [ + -117.755621, + 34.057696 + ], + [ + -117.755584, + 34.0568 + ], + [ + -117.756668, + 34.056775 + ] + ] + ] + }, + "properties": { + "name": "Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 438739863, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.711453, + 34.066924 + ], + [ + -117.712443, + 34.066922 + ], + [ + -117.711623, + 34.067941 + ], + [ + -117.711082, + 34.068674 + ], + [ + -117.710617, + 34.069411 + ], + [ + -117.710137, + 34.07042 + ], + [ + -117.709239, + 34.070418 + ], + [ + -117.709246, + 34.069963 + ], + [ + -117.709232, + 34.069529 + ], + [ + -117.709605, + 34.069514 + ], + [ + -117.709615, + 34.069658 + ], + [ + -117.710093, + 34.069656 + ], + [ + -117.710112, + 34.069016 + ], + [ + -117.710234, + 34.069014 + ], + [ + -117.710255, + 34.068947 + ], + [ + -117.710734, + 34.06894 + ], + [ + -117.710741, + 34.067597 + ], + [ + -117.711448, + 34.067586 + ], + [ + -117.711453, + 34.066924 + ] + ] + ] + }, + "properties": { + "name": "Sunset Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 438739864, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.691325, + 34.072224 + ], + [ + -117.692235, + 34.072221 + ], + [ + -117.69224, + 34.072657 + ], + [ + -117.692476, + 34.072657 + ], + [ + -117.692465, + 34.073007 + ], + [ + -117.692596, + 34.073106 + ], + [ + -117.692591, + 34.073419 + ], + [ + -117.692159, + 34.073424 + ], + [ + -117.692164, + 34.073684 + ], + [ + -117.692013, + 34.073682 + ], + [ + -117.692012, + 34.073955 + ], + [ + -117.691317, + 34.073952 + ], + [ + -117.691325, + 34.072224 + ] + ] + ] + }, + "properties": { + "name": "Hoffman Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 439833169, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.733496, + 34.062902 + ], + [ + -117.733556, + 34.062883 + ], + [ + -117.734347, + 34.062866 + ], + [ + -117.734411, + 34.062891 + ], + [ + -117.734453, + 34.062941 + ], + [ + -117.734468, + 34.063906 + ], + [ + -117.734446, + 34.063941 + ], + [ + -117.734397, + 34.06397 + ], + [ + -117.733563, + 34.063986 + ], + [ + -117.733503, + 34.063971 + ], + [ + -117.733484, + 34.06393 + ], + [ + -117.733449, + 34.062961 + ], + [ + -117.733496, + 34.062902 + ] + ] + ] + }, + "properties": { + "name": "Garfield Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440274395, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.776386, + 34.132952 + ], + [ + -117.776187, + 34.133252 + ], + [ + -117.775922, + 34.133535 + ], + [ + -117.775654, + 34.133773 + ], + [ + -117.775256, + 34.134043 + ], + [ + -117.775242, + 34.134052 + ], + [ + -117.774922, + 34.134265 + ], + [ + -117.774532, + 34.134544 + ], + [ + -117.7745, + 34.134581 + ], + [ + -117.774516, + 34.134635 + ], + [ + -117.774556, + 34.134652 + ], + [ + -117.774825, + 34.134655 + ], + [ + -117.775597, + 34.134645 + ], + [ + -117.77613, + 34.134625 + ], + [ + -117.776195, + 34.134602 + ], + [ + -117.776313, + 34.134561 + ], + [ + -117.776431, + 34.13447 + ], + [ + -117.77654, + 34.134312 + ], + [ + -117.776634, + 34.13409 + ], + [ + -117.77667, + 34.133932 + ], + [ + -117.77667, + 34.133551 + ], + [ + -117.776666, + 34.133296 + ], + [ + -117.776646, + 34.133127 + ], + [ + -117.776585, + 34.133023 + ], + [ + -117.776532, + 34.132976 + ], + [ + -117.776516, + 34.132942 + ], + [ + -117.776439, + 34.132922 + ], + [ + -117.776386, + 34.132952 + ] + ] + ] + }, + "properties": { + "name": "Mills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440813635, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.740899, + 34.048196 + ], + [ + -117.740963, + 34.049851 + ], + [ + -117.740905, + 34.049876 + ], + [ + -117.740026, + 34.049895 + ], + [ + -117.740032, + 34.05029 + ], + [ + -117.738967, + 34.050297 + ], + [ + -117.738398, + 34.050451 + ], + [ + -117.737865, + 34.050458 + ], + [ + -117.737841, + 34.050464 + ], + [ + -117.737842, + 34.050674 + ], + [ + -117.737616, + 34.050679 + ], + [ + -117.737623, + 34.050879 + ], + [ + -117.736957, + 34.050888 + ], + [ + -117.736909, + 34.049594 + ], + [ + -117.736891, + 34.049106 + ], + [ + -117.736862, + 34.048291 + ], + [ + -117.738911, + 34.048242 + ], + [ + -117.739299, + 34.048233 + ], + [ + -117.740899, + 34.048196 + ] + ] + ] + }, + "properties": { + "name": "Washington Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440813641, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.737845, + 34.04951 + ], + [ + -117.737795, + 34.049556 + ], + [ + -117.737835, + 34.050433 + ], + [ + -117.738222, + 34.050426 + ], + [ + -117.738394, + 34.050396 + ], + [ + -117.738528, + 34.050343 + ], + [ + -117.738663, + 34.050258 + ], + [ + -117.738794, + 34.050136 + ], + [ + -117.738861, + 34.050014 + ], + [ + -117.738912, + 34.049871 + ], + [ + -117.738917, + 34.049743 + ], + [ + -117.738896, + 34.04949 + ], + [ + -117.737845, + 34.04951 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440813644, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.737497, + 34.048913 + ], + [ + -117.73756, + 34.048913 + ], + [ + -117.737626, + 34.048877 + ], + [ + -117.737653, + 34.048828 + ], + [ + -117.737635, + 34.048597 + ], + [ + -117.737578, + 34.048289 + ], + [ + -117.737418, + 34.048298 + ], + [ + -117.737231, + 34.048346 + ], + [ + -117.73707, + 34.048456 + ], + [ + -117.736977, + 34.048584 + ], + [ + -117.736967, + 34.048704 + ], + [ + -117.736979, + 34.048886 + ], + [ + -117.737268, + 34.048918 + ], + [ + -117.737497, + 34.048913 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440813646, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.740812, + 34.048915 + ], + [ + -117.740739, + 34.048894 + ], + [ + -117.740739, + 34.048909 + ], + [ + -117.739909, + 34.048913 + ], + [ + -117.739902, + 34.048822 + ], + [ + -117.739917, + 34.048733 + ], + [ + -117.739955, + 34.04861 + ], + [ + -117.740021, + 34.048494 + ], + [ + -117.740101, + 34.048385 + ], + [ + -117.740211, + 34.048306 + ], + [ + -117.740336, + 34.048242 + ], + [ + -117.740843, + 34.048216 + ], + [ + -117.740838, + 34.048256 + ], + [ + -117.740855, + 34.048848 + ], + [ + -117.740833, + 34.048864 + ], + [ + -117.740854, + 34.04888 + ], + [ + -117.740812, + 34.048915 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440819869, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.777592, + 34.109403 + ], + [ + -117.776732, + 34.109179 + ], + [ + -117.776096, + 34.110857 + ], + [ + -117.776956, + 34.11108 + ], + [ + -117.777592, + 34.109403 + ] + ] + ] + }, + "properties": { + "name": "Pelota Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442519484, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.70176, + 34.063369 + ], + [ + -117.70176, + 34.063339 + ], + [ + -117.701806, + 34.063339 + ], + [ + -117.70183, + 34.06338 + ], + [ + -117.701827, + 34.063959 + ], + [ + -117.700736, + 34.063943 + ], + [ + -117.700738, + 34.063606 + ], + [ + -117.700756, + 34.063594 + ], + [ + -117.700756, + 34.063551 + ], + [ + -117.700748, + 34.063551 + ], + [ + -117.700747, + 34.063496 + ], + [ + -117.700738, + 34.063491 + ], + [ + -117.700739, + 34.063363 + ], + [ + -117.70176, + 34.063369 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442683678, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.68809, + 34.064441 + ], + [ + -117.688081, + 34.066692 + ], + [ + -117.686294, + 34.066688 + ], + [ + -117.686302, + 34.065043 + ], + [ + -117.685289, + 34.065043 + ], + [ + -117.685294, + 34.06446 + ], + [ + -117.68809, + 34.064441 + ] + ] + ] + }, + "properties": { + "name": "Saratoga Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442873490, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.673198, + 34.07796 + ], + [ + -117.674849, + 34.077943 + ], + [ + -117.674874, + 34.081388 + ], + [ + -117.672618, + 34.081414 + ], + [ + -117.672562, + 34.079762 + ], + [ + -117.673034, + 34.079742 + ], + [ + -117.673172, + 34.079698 + ], + [ + -117.673218, + 34.079594 + ], + [ + -117.673198, + 34.07796 + ] + ] + ] + }, + "properties": { + "name": "Colony Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 443668558, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.713125, + 34.093842 + ], + [ + -117.711771, + 34.093861 + ], + [ + -117.710998, + 34.093817 + ], + [ + -117.710105, + 34.093814 + ], + [ + -117.710061, + 34.093063 + ], + [ + -117.710147, + 34.092909 + ], + [ + -117.710199, + 34.092755 + ], + [ + -117.714418, + 34.092701 + ], + [ + -117.714418, + 34.092794 + ], + [ + -117.714412, + 34.093129 + ], + [ + -117.713134, + 34.093122 + ], + [ + -117.713134, + 34.093194 + ], + [ + -117.713125, + 34.093842 + ] + ] + ] + }, + "properties": { + "name": "College Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 443668567, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.724949, + 34.126424 + ], + [ + -117.724831, + 34.126486 + ], + [ + -117.724704, + 34.126536 + ], + [ + -117.724571, + 34.126574 + ], + [ + -117.724434, + 34.126598 + ], + [ + -117.724294, + 34.126609 + ], + [ + -117.724154, + 34.126607 + ], + [ + -117.724771, + 34.12841 + ], + [ + -117.726151, + 34.128125 + ], + [ + -117.726123, + 34.127955 + ], + [ + -117.725527, + 34.127695 + ], + [ + -117.725192, + 34.126678 + ], + [ + -117.724949, + 34.126424 + ] + ] + ] + }, + "properties": { + "name": "Higginbotham Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 443668568, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.712559, + 34.130954 + ], + [ + -117.712537, + 34.13112 + ], + [ + -117.712531, + 34.131288 + ], + [ + -117.712542, + 34.131455 + ], + [ + -117.71257, + 34.131621 + ], + [ + -117.712614, + 34.131785 + ], + [ + -117.712674, + 34.131945 + ], + [ + -117.71275, + 34.1321 + ], + [ + -117.712842, + 34.13225 + ], + [ + -117.713666, + 34.132157 + ], + [ + -117.713779, + 34.132097 + ], + [ + -117.713854, + 34.132073 + ], + [ + -117.713961, + 34.132084 + ], + [ + -117.714049, + 34.132084 + ], + [ + -117.71413, + 34.132084 + ], + [ + -117.7142, + 34.13205 + ], + [ + -117.714242, + 34.132028 + ], + [ + -117.714138, + 34.131891 + ], + [ + -117.714076, + 34.131706 + ], + [ + -117.713709, + 34.131198 + ], + [ + -117.713372, + 34.130763 + ], + [ + -117.713006, + 34.130974 + ], + [ + -117.712559, + 34.130954 + ] + ] + ] + }, + "properties": { + "name": "Jaeger Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 443668576, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.700732, + 34.127017 + ], + [ + -117.700717, + 34.128106 + ], + [ + -117.702773, + 34.128126 + ], + [ + -117.702788, + 34.127037 + ], + [ + -117.700732, + 34.127017 + ] + ] + ] + }, + "properties": { + "name": "Vail Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 459252514, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.202178, + 34.0418 + ], + [ + -117.202144, + 34.041763 + ], + [ + -117.202072, + 34.041683 + ], + [ + -117.202019, + 34.04163 + ], + [ + -117.202058, + 34.041598 + ], + [ + -117.202241, + 34.041544 + ], + [ + -117.202196, + 34.04148 + ], + [ + -117.202381, + 34.041378 + ], + [ + -117.2023, + 34.041291 + ], + [ + -117.202129, + 34.041373 + ], + [ + -117.202003, + 34.041229 + ], + [ + -117.201879, + 34.041291 + ], + [ + -117.201925, + 34.041364 + ], + [ + -117.201802, + 34.041424 + ], + [ + -117.201607, + 34.041144 + ], + [ + -117.20144, + 34.040914 + ], + [ + -117.202139, + 34.040504 + ], + [ + -117.202879, + 34.041407 + ], + [ + -117.202178, + 34.0418 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461804761, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.814233, + 34.0094 + ], + [ + -117.814286, + 34.009381 + ], + [ + -117.814294, + 34.009374 + ], + [ + -117.814289, + 34.009304 + ], + [ + -117.814285, + 34.009295 + ], + [ + -117.814277, + 34.00929 + ], + [ + -117.814262, + 34.00929 + ], + [ + -117.814248, + 34.009296 + ], + [ + -117.814205, + 34.009326 + ], + [ + -117.814187, + 34.009364 + ], + [ + -117.81418, + 34.009377 + ], + [ + -117.814179, + 34.009387 + ], + [ + -117.814185, + 34.009397 + ], + [ + -117.814195, + 34.009405 + ], + [ + -117.814211, + 34.009406 + ], + [ + -117.814233, + 34.0094 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461957942, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.762466, + 34.101626 + ], + [ + -117.76248, + 34.101624 + ], + [ + -117.762493, + 34.101614 + ], + [ + -117.762608, + 34.101324 + ], + [ + -117.762609, + 34.101289 + ], + [ + -117.762594, + 34.101255 + ], + [ + -117.76257, + 34.101228 + ], + [ + -117.762533, + 34.101214 + ], + [ + -117.762245, + 34.101149 + ], + [ + -117.762219, + 34.101224 + ], + [ + -117.762072, + 34.101184 + ], + [ + -117.762016, + 34.101168 + ], + [ + -117.761912, + 34.101455 + ], + [ + -117.761917, + 34.101468 + ], + [ + -117.761936, + 34.101485 + ], + [ + -117.761958, + 34.101495 + ], + [ + -117.762466, + 34.101626 + ] + ] + ] + }, + "properties": { + "name": "Lincoln Mini Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 463189167, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.814618, + 34.010772 + ], + [ + -117.815313, + 34.010205 + ], + [ + -117.816022, + 34.009729 + ], + [ + -117.815873, + 34.009734 + ], + [ + -117.815622, + 34.009754 + ], + [ + -117.81544, + 34.009671 + ], + [ + -117.815248, + 34.009516 + ], + [ + -117.815018, + 34.009106 + ], + [ + -117.814824, + 34.008828 + ], + [ + -117.81461, + 34.008559 + ], + [ + -117.814437, + 34.008467 + ], + [ + -117.814267, + 34.008337 + ], + [ + -117.813888, + 34.007953 + ], + [ + -117.813929, + 34.007775 + ], + [ + -117.814419, + 34.007198 + ], + [ + -117.814589, + 34.006957 + ], + [ + -117.814595, + 34.006756 + ], + [ + -117.814425, + 34.006159 + ], + [ + -117.814365, + 34.005873 + ], + [ + -117.81388, + 34.005723 + ], + [ + -117.812955, + 34.005547 + ], + [ + -117.812014, + 34.00555 + ], + [ + -117.809684, + 34.005566 + ], + [ + -117.808802, + 34.00555 + ], + [ + -117.80849, + 34.006371 + ], + [ + -117.808336, + 34.007321 + ], + [ + -117.809222, + 34.007328 + ], + [ + -117.809501, + 34.00759 + ], + [ + -117.81101, + 34.008112 + ], + [ + -117.811789, + 34.008573 + ], + [ + -117.812247, + 34.00889 + ], + [ + -117.812532, + 34.009291 + ], + [ + -117.812615, + 34.009268 + ], + [ + -117.812857, + 34.009389 + ], + [ + -117.813053, + 34.009393 + ], + [ + -117.813137, + 34.009276 + ], + [ + -117.813789, + 34.009641 + ], + [ + -117.813854, + 34.009817 + ], + [ + -117.813892, + 34.009989 + ], + [ + -117.813786, + 34.010169 + ], + [ + -117.814618, + 34.010772 + ] + ] + ] + }, + "properties": { + "name": "Sycamore Canyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 463192732, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.812088, + 33.994816 + ], + [ + -117.812289, + 33.994042 + ], + [ + -117.812302, + 33.993632 + ], + [ + -117.812111, + 33.993636 + ], + [ + -117.811821, + 33.993709 + ], + [ + -117.810993, + 33.993946 + ], + [ + -117.810721, + 33.993983 + ], + [ + -117.810356, + 33.993983 + ], + [ + -117.81037, + 33.994095 + ], + [ + -117.810433, + 33.994554 + ], + [ + -117.812088, + 33.994816 + ] + ] + ] + }, + "properties": { + "name": "Paul C. Grow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465052086, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.784041, + 34.034678 + ], + [ + -117.784283, + 34.0347 + ], + [ + -117.784449, + 34.034473 + ], + [ + -117.784621, + 34.034433 + ], + [ + -117.784621, + 34.034229 + ], + [ + -117.784577, + 34.034189 + ], + [ + -117.784524, + 34.034056 + ], + [ + -117.784293, + 34.034131 + ], + [ + -117.783912, + 34.03442 + ], + [ + -117.783766, + 34.034574 + ], + [ + -117.783719, + 34.03466 + ], + [ + -117.783639, + 34.034838 + ], + [ + -117.783676, + 34.034976 + ], + [ + -117.783623, + 34.035118 + ], + [ + -117.783633, + 34.035296 + ], + [ + -117.78351, + 34.035403 + ], + [ + -117.783355, + 34.035305 + ], + [ + -117.783129, + 34.03514 + ], + [ + -117.7827, + 34.035149 + ], + [ + -117.782346, + 34.035305 + ], + [ + -117.78204, + 34.035371 + ], + [ + -117.782051, + 34.035612 + ], + [ + -117.782105, + 34.035687 + ], + [ + -117.781799, + 34.035798 + ], + [ + -117.781745, + 34.036016 + ], + [ + -117.781198, + 34.035941 + ], + [ + -117.780586, + 34.035878 + ], + [ + -117.78035, + 34.035847 + ], + [ + -117.779943, + 34.035763 + ], + [ + -117.779605, + 34.03566 + ], + [ + -117.779304, + 34.03554 + ], + [ + -117.778966, + 34.035358 + ], + [ + -117.778623, + 34.035145 + ], + [ + -117.778494, + 34.035016 + ], + [ + -117.778172, + 34.034727 + ], + [ + -117.778068, + 34.034568 + ], + [ + -117.777926, + 34.034389 + ], + [ + -117.777716, + 34.033958 + ], + [ + -117.77762, + 34.033678 + ], + [ + -117.777566, + 34.033393 + ], + [ + -117.777507, + 34.032922 + ], + [ + -117.777423, + 34.032409 + ], + [ + -117.777402, + 34.032273 + ], + [ + -117.77737, + 34.032241 + ], + [ + -117.777312, + 34.032221 + ], + [ + -117.777053, + 34.032247 + ], + [ + -117.77701, + 34.032293 + ], + [ + -117.777123, + 34.033484 + ], + [ + -117.777162, + 34.033673 + ], + [ + -117.777207, + 34.033851 + ], + [ + -117.777341, + 34.034189 + ], + [ + -117.777539, + 34.034531 + ], + [ + -117.77769, + 34.034762 + ], + [ + -117.778001, + 34.0351 + ], + [ + -117.778387, + 34.035438 + ], + [ + -117.778564, + 34.035554 + ], + [ + -117.778773, + 34.035692 + ], + [ + -117.77932, + 34.035941 + ], + [ + -117.779637, + 34.036047 + ], + [ + -117.779873, + 34.036109 + ], + [ + -117.780195, + 34.036172 + ], + [ + -117.780584, + 34.036229 + ], + [ + -117.780854, + 34.036264 + ], + [ + -117.781563, + 34.036336 + ], + [ + -117.781863, + 34.036336 + ], + [ + -117.782153, + 34.036323 + ], + [ + -117.782968, + 34.036163 + ], + [ + -117.783145, + 34.036118 + ], + [ + -117.783576, + 34.036032 + ], + [ + -117.783746, + 34.036025 + ], + [ + -117.78377, + 34.035885 + ], + [ + -117.783811, + 34.035648 + ], + [ + -117.783816, + 34.03562 + ], + [ + -117.783885, + 34.035207 + ], + [ + -117.783877, + 34.035128 + ], + [ + -117.784041, + 34.034678 + ] + ] + ] + }, + "properties": { + "name": "Country Crossing Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465055675, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.777054, + 34.034335 + ], + [ + -117.776786, + 34.034264 + ], + [ + -117.776475, + 34.034246 + ], + [ + -117.776024, + 34.034344 + ], + [ + -117.775606, + 34.034566 + ], + [ + -117.775252, + 34.034877 + ], + [ + -117.774984, + 34.03526 + ], + [ + -117.774726, + 34.0355 + ], + [ + -117.774522, + 34.035606 + ], + [ + -117.774333, + 34.035652 + ], + [ + -117.773975, + 34.03566 + ], + [ + -117.773524, + 34.035704 + ], + [ + -117.773095, + 34.035695 + ], + [ + -117.772859, + 34.035669 + ], + [ + -117.772355, + 34.035517 + ], + [ + -117.772012, + 34.035384 + ], + [ + -117.771874, + 34.035309 + ], + [ + -117.771811, + 34.035277 + ], + [ + -117.77179, + 34.035275 + ], + [ + -117.771869, + 34.035083 + ], + [ + -117.771335, + 34.034936 + ], + [ + -117.771257, + 34.035149 + ], + [ + -117.770733, + 34.035344 + ], + [ + -117.770685, + 34.035332 + ], + [ + -117.770377, + 34.035454 + ], + [ + -117.770347, + 34.035473 + ], + [ + -117.770344, + 34.035542 + ], + [ + -117.770304, + 34.035547 + ], + [ + -117.77022, + 34.035507 + ], + [ + -117.770154, + 34.035446 + ], + [ + -117.770123, + 34.035418 + ], + [ + -117.770085, + 34.035422 + ], + [ + -117.770049, + 34.035395 + ], + [ + -117.769821, + 34.034405 + ], + [ + -117.769778, + 34.034346 + ], + [ + -117.769765, + 34.034056 + ], + [ + -117.769813, + 34.033727 + ], + [ + -117.769856, + 34.033521 + ], + [ + -117.770154, + 34.03359 + ], + [ + -117.770601, + 34.033716 + ], + [ + -117.770774, + 34.033752 + ], + [ + -117.771921, + 34.033529 + ], + [ + -117.772093, + 34.033344 + ], + [ + -117.772543, + 34.033371 + ], + [ + -117.772471, + 34.033463 + ], + [ + -117.772487, + 34.033642 + ], + [ + -117.772276, + 34.033965 + ], + [ + -117.772097, + 34.033985 + ], + [ + -117.771993, + 34.0341 + ], + [ + -117.772064, + 34.034202 + ], + [ + -117.772096, + 34.034306 + ], + [ + -117.772173, + 34.034497 + ], + [ + -117.772197, + 34.034564 + ], + [ + -117.7722, + 34.034626 + ], + [ + -117.77218, + 34.034924 + ], + [ + -117.77218, + 34.034972 + ], + [ + -117.772224, + 34.035098 + ], + [ + -117.772261, + 34.035276 + ], + [ + -117.772483, + 34.035427 + ], + [ + -117.772961, + 34.035483 + ], + [ + -117.773367, + 34.035543 + ], + [ + -117.773722, + 34.035516 + ], + [ + -117.774168, + 34.035447 + ], + [ + -117.774451, + 34.035404 + ], + [ + -117.774618, + 34.035295 + ], + [ + -117.774833, + 34.035147 + ], + [ + -117.774976, + 34.034952 + ], + [ + -117.775116, + 34.034767 + ], + [ + -117.775255, + 34.034586 + ], + [ + -117.775403, + 34.034437 + ], + [ + -117.775685, + 34.034275 + ], + [ + -117.775901, + 34.03417 + ], + [ + -117.776382, + 34.034061 + ], + [ + -117.77661, + 34.034034 + ], + [ + -117.776837, + 34.034005 + ], + [ + -117.776948, + 34.033991 + ], + [ + -117.77699, + 34.034114 + ], + [ + -117.777076, + 34.034252 + ], + [ + -117.777127, + 34.034312 + ], + [ + -117.777054, + 34.034335 + ] + ] + ] + }, + "properties": { + "name": "Phillips Ranch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465546320, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.789951, + 34.128912 + ], + [ + -117.790102, + 34.128808 + ], + [ + -117.790862, + 34.128286 + ], + [ + -117.792268, + 34.127593 + ], + [ + -117.794006, + 34.126683 + ], + [ + -117.794076, + 34.126714 + ], + [ + -117.794151, + 34.126794 + ], + [ + -117.794242, + 34.12694 + ], + [ + -117.794269, + 34.127109 + ], + [ + -117.794253, + 34.127393 + ], + [ + -117.794253, + 34.127651 + ], + [ + -117.794317, + 34.127811 + ], + [ + -117.794419, + 34.127935 + ], + [ + -117.794644, + 34.128108 + ], + [ + -117.795047, + 34.12841 + ], + [ + -117.795074, + 34.128512 + ], + [ + -117.795277, + 34.128707 + ], + [ + -117.797026, + 34.131128 + ], + [ + -117.797182, + 34.131425 + ], + [ + -117.797504, + 34.132211 + ], + [ + -117.797589, + 34.132429 + ], + [ + -117.795261, + 34.132531 + ], + [ + -117.793947, + 34.1325 + ], + [ + -117.793861, + 34.132371 + ], + [ + -117.793593, + 34.13226 + ], + [ + -117.793212, + 34.132233 + ], + [ + -117.792847, + 34.132162 + ], + [ + -117.791657, + 34.131877 + ], + [ + -117.792626, + 34.131152 + ], + [ + -117.792617, + 34.130124 + ], + [ + -117.792676, + 34.129351 + ], + [ + -117.792606, + 34.129218 + ], + [ + -117.792343, + 34.128992 + ], + [ + -117.791361, + 34.128938 + ], + [ + -117.789951, + 34.128912 + ] + ] + ] + }, + "properties": { + "name": "San Dimas Canyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465546323, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.792725, + 34.127837 + ], + [ + -117.792893, + 34.127754 + ], + [ + -117.792837, + 34.127676 + ], + [ + -117.792669, + 34.127758 + ], + [ + -117.792725, + 34.127837 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 467669452, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.808287, + 34.097486 + ], + [ + -117.809783, + 34.096825 + ], + [ + -117.810453, + 34.096678 + ], + [ + -117.811095, + 34.096541 + ], + [ + -117.815218, + 34.095603 + ], + [ + -117.815733, + 34.095434 + ], + [ + -117.819198, + 34.093222 + ], + [ + -117.819359, + 34.086336 + ], + [ + -117.81923, + 34.085483 + ], + [ + -117.818833, + 34.084168 + ], + [ + -117.818351, + 34.083181 + ], + [ + -117.815164, + 34.079698 + ], + [ + -117.814595, + 34.079227 + ], + [ + -117.814274, + 34.079129 + ], + [ + -117.813598, + 34.079111 + ], + [ + -117.813179, + 34.079058 + ], + [ + -117.812954, + 34.078916 + ], + [ + -117.812836, + 34.078703 + ], + [ + -117.812772, + 34.078472 + ], + [ + -117.812965, + 34.077423 + ], + [ + -117.809746, + 34.074019 + ], + [ + -117.808856, + 34.07282 + ], + [ + -117.808362, + 34.07194 + ], + [ + -117.8076, + 34.070322 + ], + [ + -117.806892, + 34.068989 + ], + [ + -117.806366, + 34.068527 + ], + [ + -117.805712, + 34.068109 + ], + [ + -117.804843, + 34.067816 + ], + [ + -117.804221, + 34.067718 + ], + [ + -117.80347, + 34.067745 + ], + [ + -117.80186, + 34.068127 + ], + [ + -117.800369, + 34.068634 + ], + [ + -117.798631, + 34.069336 + ], + [ + -117.796764, + 34.070109 + ], + [ + -117.790123, + 34.072775 + ], + [ + -117.788044, + 34.073559 + ], + [ + -117.787572, + 34.07379 + ], + [ + -117.786864, + 34.074448 + ], + [ + -117.785212, + 34.075728 + ], + [ + -117.784117, + 34.076243 + ], + [ + -117.782165, + 34.076865 + ], + [ + -117.781285, + 34.077167 + ], + [ + -117.780663, + 34.077718 + ], + [ + -117.779912, + 34.078998 + ], + [ + -117.784096, + 34.080882 + ], + [ + -117.783715, + 34.081052 + ], + [ + -117.783296, + 34.081603 + ], + [ + -117.781919, + 34.082943 + ], + [ + -117.780936, + 34.08378 + ], + [ + -117.781141, + 34.084223 + ], + [ + -117.781828, + 34.084992 + ], + [ + -117.782465, + 34.085424 + ], + [ + -117.784042, + 34.084895 + ], + [ + -117.785464, + 34.085228 + ], + [ + -117.786894, + 34.088069 + ], + [ + -117.786784, + 34.088413 + ], + [ + -117.784188, + 34.088644 + ], + [ + -117.784131, + 34.089099 + ], + [ + -117.784948, + 34.090329 + ], + [ + -117.792425, + 34.09134 + ], + [ + -117.793186, + 34.093111 + ], + [ + -117.792911, + 34.093062 + ], + [ + -117.792593, + 34.093636 + ], + [ + -117.791684, + 34.093951 + ], + [ + -117.791293, + 34.094117 + ], + [ + -117.791196, + 34.094237 + ], + [ + -117.790371, + 34.094581 + ], + [ + -117.789633, + 34.094684 + ], + [ + -117.789165, + 34.094685 + ], + [ + -117.787726, + 34.094421 + ], + [ + -117.787255, + 34.094871 + ], + [ + -117.787036, + 34.095276 + ], + [ + -117.789332, + 34.095845 + ], + [ + -117.789939, + 34.095799 + ], + [ + -117.790641, + 34.095791 + ], + [ + -117.791145, + 34.095698 + ], + [ + -117.791864, + 34.09552 + ], + [ + -117.793216, + 34.095192 + ], + [ + -117.794878, + 34.095337 + ], + [ + -117.795341, + 34.095298 + ], + [ + -117.795657, + 34.095213 + ], + [ + -117.797472, + 34.094116 + ], + [ + -117.799598, + 34.092974 + ], + [ + -117.800123, + 34.092766 + ], + [ + -117.801033, + 34.092549 + ], + [ + -117.801336, + 34.092495 + ], + [ + -117.802315, + 34.092517 + ], + [ + -117.803124, + 34.092622 + ], + [ + -117.803414, + 34.092684 + ], + [ + -117.80367, + 34.092797 + ], + [ + -117.803854, + 34.092946 + ], + [ + -117.803977, + 34.093101 + ], + [ + -117.804063, + 34.093284 + ], + [ + -117.804184, + 34.09351 + ], + [ + -117.804326, + 34.093668 + ], + [ + -117.804473, + 34.09375 + ], + [ + -117.804656, + 34.093822 + ], + [ + -117.804804, + 34.09386 + ], + [ + -117.804985, + 34.093865 + ], + [ + -117.805242, + 34.093815 + ], + [ + -117.805468, + 34.093706 + ], + [ + -117.805637, + 34.093563 + ], + [ + -117.805891, + 34.093215 + ], + [ + -117.806125, + 34.093025 + ], + [ + -117.806361, + 34.092906 + ], + [ + -117.806619, + 34.092841 + ], + [ + -117.806915, + 34.092836 + ], + [ + -117.807155, + 34.092887 + ], + [ + -117.807411, + 34.093033 + ], + [ + -117.807689, + 34.093447 + ], + [ + -117.807704, + 34.093629 + ], + [ + -117.807649, + 34.093848 + ], + [ + -117.807548, + 34.094185 + ], + [ + -117.807554, + 34.094344 + ], + [ + -117.807587, + 34.09447 + ], + [ + -117.807701, + 34.094661 + ], + [ + -117.807918, + 34.094919 + ], + [ + -117.808336, + 34.095453 + ], + [ + -117.808404, + 34.095626 + ], + [ + -117.808526, + 34.095965 + ], + [ + -117.8083, + 34.09632 + ], + [ + -117.808054, + 34.096666 + ], + [ + -117.807968, + 34.096906 + ], + [ + -117.808, + 34.097111 + ], + [ + -117.808139, + 34.097368 + ], + [ + -117.808287, + 34.097486 + ] + ] + ] + }, + "properties": { + "name": "Frank G. Bonelli Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468030038, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.230404, + 34.044705 + ], + [ + -117.228322, + 34.044672 + ], + [ + -117.228314, + 34.041782 + ], + [ + -117.228805, + 34.041782 + ], + [ + -117.228901, + 34.042162 + ], + [ + -117.229193, + 34.042429 + ], + [ + -117.229326, + 34.042459 + ], + [ + -117.229331, + 34.042649 + ], + [ + -117.229349, + 34.043216 + ], + [ + -117.229344, + 34.043221 + ], + [ + -117.23039, + 34.0432 + ], + [ + -117.230404, + 34.044705 + ] + ] + ] + }, + "properties": { + "name": "Leonard Baily Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468150027, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.229191, + 34.047265 + ], + [ + -117.228713, + 34.047046 + ], + [ + -117.228725, + 34.047006 + ], + [ + -117.229292, + 34.047104 + ], + [ + -117.229191, + 34.047265 + ] + ] + ] + }, + "properties": { + "name": "Park Lane Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468503451, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.475627, + 34.145443 + ], + [ + -117.47565, + 34.145464 + ], + [ + -117.475664, + 34.145489 + ], + [ + -117.475667, + 34.145517 + ], + [ + -117.475658, + 34.145544 + ], + [ + -117.47564, + 34.145567 + ], + [ + -117.475614, + 34.145584 + ], + [ + -117.475583, + 34.145593 + ], + [ + -117.47555, + 34.145593 + ], + [ + -117.475519, + 34.145584 + ], + [ + -117.475493, + 34.145568 + ], + [ + -117.475475, + 34.145546 + ], + [ + -117.475466, + 34.145519 + ], + [ + -117.475467, + 34.145492 + ], + [ + -117.47548, + 34.145467 + ], + [ + -117.475502, + 34.145446 + ], + [ + -117.475531, + 34.145432 + ], + [ + -117.475564, + 34.145427 + ], + [ + -117.475597, + 34.145431 + ], + [ + -117.475627, + 34.145443 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468564640, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.736362, + 33.993199 + ], + [ + -117.735283, + 33.992825 + ], + [ + -117.734578, + 33.992519 + ], + [ + -117.733936, + 33.991743 + ], + [ + -117.733866, + 33.989793 + ], + [ + -117.734426, + 33.989658 + ], + [ + -117.734865, + 33.989466 + ], + [ + -117.735137, + 33.989293 + ], + [ + -117.735332, + 33.989148 + ], + [ + -117.735506, + 33.989036 + ], + [ + -117.736122, + 33.989211 + ], + [ + -117.736376, + 33.989433 + ], + [ + -117.737204, + 33.989735 + ], + [ + -117.737507, + 33.989732 + ], + [ + -117.737498, + 33.993204 + ], + [ + -117.736362, + 33.993199 + ] + ] + ] + }, + "properties": { + "name": "Chino Hills Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468691351, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.436272, + 34.046094 + ], + [ + -117.441594, + 34.046124 + ], + [ + -117.441355, + 34.045633 + ], + [ + -117.441762, + 34.04457 + ], + [ + -117.443832, + 34.043551 + ], + [ + -117.445875, + 34.043355 + ], + [ + -117.446588, + 34.043232 + ], + [ + -117.447158, + 34.042313 + ], + [ + -117.448034, + 34.040096 + ], + [ + -117.449098, + 34.037955 + ], + [ + -117.44898, + 34.034265 + ], + [ + -117.434045, + 34.035832 + ], + [ + -117.434503, + 34.039214 + ], + [ + -117.435844, + 34.046052 + ], + [ + -117.436272, + 34.046094 + ] + ] + ] + }, + "properties": { + "name": "Martin Tudor-Jurupa Hills Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468693138, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.448391, + 34.044303 + ], + [ + -117.447849, + 34.044272 + ], + [ + -117.44779, + 34.043534 + ], + [ + -117.447935, + 34.043294 + ], + [ + -117.448531, + 34.043161 + ], + [ + -117.448853, + 34.043245 + ], + [ + -117.449048, + 34.043458 + ], + [ + -117.449118, + 34.043636 + ], + [ + -117.449504, + 34.043569 + ], + [ + -117.449612, + 34.043782 + ], + [ + -117.449461, + 34.044085 + ], + [ + -117.449287, + 34.044188 + ], + [ + -117.448976, + 34.044179 + ], + [ + -117.448767, + 34.044299 + ], + [ + -117.448391, + 34.044303 + ] + ] + ] + }, + "properties": { + "name": "Mary Vagle Nature Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468839308, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.550654, + 34.115909 + ], + [ + -117.550465, + 34.11602 + ], + [ + -117.550248, + 34.115767 + ], + [ + -117.550438, + 34.115656 + ], + [ + -117.550654, + 34.115909 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468914544, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.484956, + 34.040545 + ], + [ + -117.48494, + 34.039887 + ], + [ + -117.484761, + 34.03988 + ], + [ + -117.484734, + 34.040542 + ], + [ + -117.484956, + 34.040545 + ] + ] + ] + }, + "properties": { + "name": "Don Day Basketball Courts", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469230476, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.441904, + 34.111291 + ], + [ + -117.441818, + 34.11129 + ], + [ + -117.441655, + 34.111289 + ], + [ + -117.441657, + 34.111153 + ], + [ + -117.441907, + 34.111155 + ], + [ + -117.442267, + 34.111158 + ], + [ + -117.442265, + 34.111294 + ], + [ + -117.441904, + 34.111291 + ] + ] + ] + }, + "properties": { + "name": "Bill Martin Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469320446, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.7031, + 34.088771 + ], + [ + -117.702523, + 34.088757 + ], + [ + -117.70301, + 34.086945 + ], + [ + -117.703743, + 34.086954 + ], + [ + -117.70371, + 34.088429 + ], + [ + -117.703113, + 34.088426 + ], + [ + -117.703101, + 34.088635 + ], + [ + -117.7031, + 34.088771 + ] + ] + ] + }, + "properties": { + "name": "Moreno Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469532910, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.720158, + 34.047323 + ], + [ + -117.720158, + 34.046767 + ], + [ + -117.720992, + 34.046707 + ], + [ + -117.721031, + 34.046749 + ], + [ + -117.721216, + 34.046764 + ], + [ + -117.721223, + 34.047033 + ], + [ + -117.721436, + 34.047036 + ], + [ + -117.721443, + 34.04721 + ], + [ + -117.720613, + 34.047228 + ], + [ + -117.720537, + 34.047267 + ], + [ + -117.720519, + 34.047317 + ], + [ + -117.720158, + 34.047323 + ] + ] + ] + }, + "properties": { + "name": "Peachwood Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469642481, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.614859, + 34.135934 + ], + [ + -117.614854, + 34.135956 + ], + [ + -117.614835, + 34.135981 + ], + [ + -117.614798, + 34.135989 + ], + [ + -117.614784, + 34.135999 + ], + [ + -117.614776, + 34.136019 + ], + [ + -117.614751, + 34.136041 + ], + [ + -117.61472, + 34.136052 + ], + [ + -117.614686, + 34.13606 + ], + [ + -117.614648, + 34.136057 + ], + [ + -117.614615, + 34.136042 + ], + [ + -117.614587, + 34.136017 + ], + [ + -117.614586, + 34.135998 + ], + [ + -117.614553, + 34.135998 + ], + [ + -117.614526, + 34.135989 + ], + [ + -117.6145, + 34.13597 + ], + [ + -117.614489, + 34.135946 + ], + [ + -117.614484, + 34.135915 + ], + [ + -117.614492, + 34.135875 + ], + [ + -117.61451, + 34.135854 + ], + [ + -117.614534, + 34.135835 + ], + [ + -117.614576, + 34.135835 + ], + [ + -117.614609, + 34.135847 + ], + [ + -117.614623, + 34.135866 + ], + [ + -117.61463, + 34.135885 + ], + [ + -117.614625, + 34.135907 + ], + [ + -117.614652, + 34.135895 + ], + [ + -117.61469, + 34.135894 + ], + [ + -117.614712, + 34.135903 + ], + [ + -117.614736, + 34.135902 + ], + [ + -117.614769, + 34.135889 + ], + [ + -117.614806, + 34.135884 + ], + [ + -117.614839, + 34.135892 + ], + [ + -117.614853, + 34.13591 + ], + [ + -117.614859, + 34.135934 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469776658, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.556779, + 34.113116 + ], + [ + -117.556712, + 34.113233 + ], + [ + -117.556476, + 34.11314 + ], + [ + -117.556544, + 34.113023 + ], + [ + -117.556779, + 34.113116 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469779828, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.562357, + 34.109578 + ], + [ + -117.562401, + 34.109589 + ], + [ + -117.562438, + 34.109611 + ], + [ + -117.562465, + 34.109642 + ], + [ + -117.562478, + 34.10968 + ], + [ + -117.562476, + 34.109718 + ], + [ + -117.562459, + 34.109755 + ], + [ + -117.562428, + 34.109784 + ], + [ + -117.562387, + 34.109803 + ], + [ + -117.562341, + 34.109811 + ], + [ + -117.562295, + 34.109805 + ], + [ + -117.562253, + 34.109787 + ], + [ + -117.562226, + 34.109816 + ], + [ + -117.562141, + 34.109769 + ], + [ + -117.562096, + 34.109819 + ], + [ + -117.562073, + 34.109811 + ], + [ + -117.562055, + 34.109801 + ], + [ + -117.56204, + 34.109788 + ], + [ + -117.56203, + 34.109772 + ], + [ + -117.562026, + 34.109757 + ], + [ + -117.562028, + 34.109737 + ], + [ + -117.562036, + 34.109723 + ], + [ + -117.562051, + 34.109708 + ], + [ + -117.562083, + 34.109698 + ], + [ + -117.562121, + 34.109691 + ], + [ + -117.562167, + 34.109671 + ], + [ + -117.562207, + 34.109646 + ], + [ + -117.562232, + 34.109617 + ], + [ + -117.562268, + 34.109593 + ], + [ + -117.562311, + 34.10958 + ], + [ + -117.562357, + 34.109578 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469798393, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.549447, + 34.124679 + ], + [ + -117.549481, + 34.124656 + ], + [ + -117.549522, + 34.124642 + ], + [ + -117.549566, + 34.12464 + ], + [ + -117.549609, + 34.124649 + ], + [ + -117.549646, + 34.12467 + ], + [ + -117.549673, + 34.124699 + ], + [ + -117.549688, + 34.124733 + ], + [ + -117.549689, + 34.12477 + ], + [ + -117.549675, + 34.124807 + ], + [ + -117.549646, + 34.124838 + ], + [ + -117.549607, + 34.124859 + ], + [ + -117.549561, + 34.124868 + ], + [ + -117.549515, + 34.124864 + ], + [ + -117.549472, + 34.124848 + ], + [ + -117.549439, + 34.12482 + ], + [ + -117.549419, + 34.124785 + ], + [ + -117.549414, + 34.124746 + ], + [ + -117.549424, + 34.12471 + ], + [ + -117.549447, + 34.124679 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469801548, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.548398, + 34.127952 + ], + [ + -117.548418, + 34.12794 + ], + [ + -117.548442, + 34.127935 + ], + [ + -117.548468, + 34.127935 + ], + [ + -117.548491, + 34.127942 + ], + [ + -117.548511, + 34.127955 + ], + [ + -117.548525, + 34.127972 + ], + [ + -117.548531, + 34.127992 + ], + [ + -117.54853, + 34.128013 + ], + [ + -117.54852, + 34.128034 + ], + [ + -117.548502, + 34.128051 + ], + [ + -117.548478, + 34.128062 + ], + [ + -117.548451, + 34.128065 + ], + [ + -117.548425, + 34.128061 + ], + [ + -117.548401, + 34.12805 + ], + [ + -117.548384, + 34.128032 + ], + [ + -117.548375, + 34.128011 + ], + [ + -117.548375, + 34.127988 + ], + [ + -117.548383, + 34.127969 + ], + [ + -117.548398, + 34.127952 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469801549, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.548635, + 34.12794 + ], + [ + -117.548676, + 34.127919 + ], + [ + -117.548706, + 34.127899 + ], + [ + -117.548733, + 34.127879 + ], + [ + -117.548752, + 34.127855 + ], + [ + -117.548764, + 34.127829 + ], + [ + -117.54876, + 34.127806 + ], + [ + -117.548746, + 34.127781 + ], + [ + -117.548717, + 34.127753 + ], + [ + -117.548679, + 34.127729 + ], + [ + -117.54864, + 34.127717 + ], + [ + -117.548594, + 34.127714 + ], + [ + -117.548538, + 34.127721 + ], + [ + -117.54848, + 34.127733 + ], + [ + -117.548423, + 34.127733 + ], + [ + -117.548372, + 34.127725 + ], + [ + -117.548324, + 34.127712 + ], + [ + -117.548327, + 34.127738 + ], + [ + -117.548331, + 34.127759 + ], + [ + -117.548339, + 34.127779 + ], + [ + -117.548355, + 34.127797 + ], + [ + -117.548377, + 34.127815 + ], + [ + -117.548405, + 34.127832 + ], + [ + -117.548432, + 34.12784 + ], + [ + -117.548472, + 34.127842 + ], + [ + -117.548512, + 34.127845 + ], + [ + -117.548543, + 34.127858 + ], + [ + -117.548589, + 34.127894 + ], + [ + -117.548635, + 34.12794 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469804941, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.598616, + 34.020578 + ], + [ + -117.598594, + 34.02055 + ], + [ + -117.598272, + 34.020548 + ], + [ + -117.598271, + 34.020696 + ], + [ + -117.598493, + 34.020698 + ], + [ + -117.598616, + 34.020578 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469804954, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.599333, + 34.021473 + ], + [ + -117.599288, + 34.021438 + ], + [ + -117.598308, + 34.021411 + ], + [ + -117.598379, + 34.021853 + ], + [ + -117.598821, + 34.022225 + ], + [ + -117.599322, + 34.022293 + ], + [ + -117.599333, + 34.021473 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469841564, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.530857, + 34.117871 + ], + [ + -117.530877, + 34.117848 + ], + [ + -117.530905, + 34.117832 + ], + [ + -117.530938, + 34.117825 + ], + [ + -117.530972, + 34.117828 + ], + [ + -117.531003, + 34.11784 + ], + [ + -117.531027, + 34.117859 + ], + [ + -117.531042, + 34.117885 + ], + [ + -117.531046, + 34.117911 + ], + [ + -117.53104, + 34.117936 + ], + [ + -117.531024, + 34.117959 + ], + [ + -117.531001, + 34.117976 + ], + [ + -117.530972, + 34.117987 + ], + [ + -117.53094, + 34.11799 + ], + [ + -117.53091, + 34.117984 + ], + [ + -117.530883, + 34.11797 + ], + [ + -117.530862, + 34.11795 + ], + [ + -117.53085, + 34.117926 + ], + [ + -117.530848, + 34.117898 + ], + [ + -117.530857, + 34.117871 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 470025621, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.79896, + 33.996248 + ], + [ + -117.798343, + 33.996133 + ], + [ + -117.798073, + 33.996083 + ], + [ + -117.798024, + 33.996083 + ], + [ + -117.797979, + 33.996101 + ], + [ + -117.797949, + 33.996139 + ], + [ + -117.797922, + 33.996203 + ], + [ + -117.797879, + 33.996397 + ], + [ + -117.797861, + 33.996475 + ], + [ + -117.797847, + 33.996801 + ], + [ + -117.797834, + 33.996919 + ], + [ + -117.797786, + 33.997166 + ], + [ + -117.797732, + 33.9973 + ], + [ + -117.79763, + 33.997491 + ], + [ + -117.797558, + 33.997622 + ], + [ + -117.797399, + 33.997796 + ], + [ + -117.796844, + 33.998131 + ], + [ + -117.796463, + 33.998334 + ], + [ + -117.796265, + 33.998445 + ], + [ + -117.796139, + 33.998549 + ], + [ + -117.795999, + 33.998698 + ], + [ + -117.795868, + 33.998914 + ], + [ + -117.795656, + 33.999432 + ], + [ + -117.795562, + 33.999621 + ], + [ + -117.795278, + 33.999964 + ], + [ + -117.795219, + 34.000015 + ], + [ + -117.795388, + 34.000135 + ], + [ + -117.795466, + 34.000195 + ], + [ + -117.795519, + 34.000257 + ], + [ + -117.79557, + 34.000302 + ], + [ + -117.795624, + 34.000337 + ], + [ + -117.795685, + 34.000359 + ], + [ + -117.795795, + 34.000386 + ], + [ + -117.795836, + 34.000419 + ], + [ + -117.795913, + 34.000342 + ], + [ + -117.796002, + 34.000246 + ], + [ + -117.796158, + 34.000095 + ], + [ + -117.796761, + 33.999908 + ], + [ + -117.796945, + 33.999766 + ], + [ + -117.79704, + 33.999671 + ], + [ + -117.797088, + 33.999621 + ], + [ + -117.797078, + 33.999577 + ], + [ + -117.797158, + 33.999521 + ], + [ + -117.797244, + 33.999505 + ], + [ + -117.797386, + 33.999472 + ], + [ + -117.797493, + 33.999425 + ], + [ + -117.797568, + 33.999392 + ], + [ + -117.797608, + 33.999359 + ], + [ + -117.797625, + 33.999263 + ], + [ + -117.797705, + 33.999083 + ], + [ + -117.797764, + 33.999018 + ], + [ + -117.79777, + 33.998981 + ], + [ + -117.797888, + 33.998927 + ], + [ + -117.798046, + 33.998896 + ], + [ + -117.798832, + 33.998959 + ], + [ + -117.799262, + 33.999094 + ], + [ + -117.799481, + 33.999316 + ], + [ + -117.799786, + 33.99949 + ], + [ + -117.799972, + 33.999599 + ], + [ + -117.80006, + 33.999566 + ], + [ + -117.800127, + 33.999539 + ], + [ + -117.800178, + 33.99951 + ], + [ + -117.800098, + 33.999405 + ], + [ + -117.799986, + 33.999219 + ], + [ + -117.799722, + 33.998736 + ], + [ + -117.799599, + 33.998589 + ], + [ + -117.799573, + 33.99858 + ], + [ + -117.799459, + 33.998538 + ], + [ + -117.799223, + 33.998412 + ], + [ + -117.799245, + 33.998423 + ], + [ + -117.799103, + 33.998196 + ], + [ + -117.799094, + 33.998156 + ], + [ + -117.799089, + 33.998116 + ], + [ + -117.799062, + 33.998082 + ], + [ + -117.799017, + 33.99804 + ], + [ + -117.799012, + 33.998016 + ], + [ + -117.798998, + 33.997938 + ], + [ + -117.798963, + 33.99786 + ], + [ + -117.798968, + 33.997773 + ], + [ + -117.798952, + 33.99766 + ], + [ + -117.798956, + 33.997654 + ], + [ + -117.79899, + 33.997595 + ], + [ + -117.798998, + 33.997462 + ], + [ + -117.798964, + 33.997403 + ], + [ + -117.798928, + 33.99734 + ], + [ + -117.798866, + 33.996957 + ], + [ + -117.798837, + 33.996915 + ], + [ + -117.798982, + 33.996277 + ], + [ + -117.79896, + 33.996248 + ] + ] + ] + }, + "properties": { + "name": "Summitridge Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 470834380, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.760792, + 33.988804 + ], + [ + -117.760503, + 33.989222 + ], + [ + -117.761222, + 33.989284 + ], + [ + -117.761629, + 33.988697 + ], + [ + -117.763518, + 33.988991 + ], + [ + -117.763646, + 33.988866 + ], + [ + -117.763013, + 33.988697 + ], + [ + -117.762112, + 33.988608 + ], + [ + -117.761264, + 33.988519 + ], + [ + -117.760934, + 33.988444 + ], + [ + -117.760792, + 33.988804 + ] + ] + ] + }, + "properties": { + "name": "Hidden Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 470941664, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.555889, + 34.132906 + ], + [ + -117.555903, + 34.132891 + ], + [ + -117.555921, + 34.13288 + ], + [ + -117.555943, + 34.132875 + ], + [ + -117.555966, + 34.132876 + ], + [ + -117.555987, + 34.132883 + ], + [ + -117.556004, + 34.132896 + ], + [ + -117.556016, + 34.132912 + ], + [ + -117.55602, + 34.132931 + ], + [ + -117.556017, + 34.132949 + ], + [ + -117.556021, + 34.132971 + ], + [ + -117.556038, + 34.132996 + ], + [ + -117.556046, + 34.133012 + ], + [ + -117.556047, + 34.13303 + ], + [ + -117.556045, + 34.133046 + ], + [ + -117.556038, + 34.133067 + ], + [ + -117.556017, + 34.13309 + ], + [ + -117.556003, + 34.133109 + ], + [ + -117.556007, + 34.133149 + ], + [ + -117.556006, + 34.133167 + ], + [ + -117.555994, + 34.133187 + ], + [ + -117.555979, + 34.1332 + ], + [ + -117.555962, + 34.133209 + ], + [ + -117.555934, + 34.133217 + ], + [ + -117.555889, + 34.133221 + ], + [ + -117.555858, + 34.13323 + ], + [ + -117.555819, + 34.133251 + ], + [ + -117.555789, + 34.133258 + ], + [ + -117.555762, + 34.133255 + ], + [ + -117.55573, + 34.133244 + ], + [ + -117.55571, + 34.133228 + ], + [ + -117.555691, + 34.133203 + ], + [ + -117.555687, + 34.133179 + ], + [ + -117.55569, + 34.133161 + ], + [ + -117.555697, + 34.13314 + ], + [ + -117.555708, + 34.133127 + ], + [ + -117.555724, + 34.133115 + ], + [ + -117.555747, + 34.133106 + ], + [ + -117.555785, + 34.133094 + ], + [ + -117.555828, + 34.133067 + ], + [ + -117.555852, + 34.133041 + ], + [ + -117.555871, + 34.13301 + ], + [ + -117.555882, + 34.13298 + ], + [ + -117.555885, + 34.132962 + ], + [ + -117.555883, + 34.132943 + ], + [ + -117.555883, + 34.132924 + ], + [ + -117.555889, + 34.132906 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 472262058, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.141458, + 34.051148 + ], + [ + -117.141447, + 34.051428 + ], + [ + -117.141155, + 34.051428 + ], + [ + -117.140884, + 34.051428 + ], + [ + -117.140879, + 34.051148 + ], + [ + -117.139714, + 34.051139 + ], + [ + -117.139717, + 34.051043 + ], + [ + -117.13972, + 34.050894 + ], + [ + -117.14104, + 34.050899 + ], + [ + -117.141037, + 34.050646 + ], + [ + -117.141163, + 34.050647 + ], + [ + -117.141469, + 34.05065 + ], + [ + -117.141474, + 34.05091 + ], + [ + -117.14262, + 34.050908 + ], + [ + -117.142621, + 34.051149 + ], + [ + -117.141458, + 34.051148 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 473206800, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.784032, + 34.034513 + ], + [ + -117.784056, + 34.034529 + ], + [ + -117.784104, + 34.03454 + ], + [ + -117.784151, + 34.034536 + ], + [ + -117.784182, + 34.034507 + ], + [ + -117.784203, + 34.034475 + ], + [ + -117.784227, + 34.034464 + ], + [ + -117.784276, + 34.034461 + ], + [ + -117.784306, + 34.034456 + ], + [ + -117.784325, + 34.034437 + ], + [ + -117.784333, + 34.034407 + ], + [ + -117.784321, + 34.034382 + ], + [ + -117.7843, + 34.034368 + ], + [ + -117.784265, + 34.034364 + ], + [ + -117.784241, + 34.034368 + ], + [ + -117.784207, + 34.034389 + ], + [ + -117.784194, + 34.034398 + ], + [ + -117.784175, + 34.034398 + ], + [ + -117.784142, + 34.034387 + ], + [ + -117.784104, + 34.034375 + ], + [ + -117.78406, + 34.03438 + ], + [ + -117.784061, + 34.034399 + ], + [ + -117.78404, + 34.034404 + ], + [ + -117.784024, + 34.034419 + ], + [ + -117.784005, + 34.034448 + ], + [ + -117.784006, + 34.034479 + ], + [ + -117.784032, + 34.034513 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474045923, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.800647, + 34.110378 + ], + [ + -117.800647, + 34.111033 + ], + [ + -117.801079, + 34.111038 + ], + [ + -117.801297, + 34.11148 + ], + [ + -117.801332, + 34.111471 + ], + [ + -117.801484, + 34.111424 + ], + [ + -117.801865, + 34.111482 + ], + [ + -117.801876, + 34.111504 + ], + [ + -117.80201, + 34.111533 + ], + [ + -117.801927, + 34.111655 + ], + [ + -117.802665, + 34.111664 + ], + [ + -117.802673, + 34.112102 + ], + [ + -117.798531, + 34.112102 + ], + [ + -117.798488, + 34.112063 + ], + [ + -117.798488, + 34.111335 + ], + [ + -117.798488, + 34.110867 + ], + [ + -117.798488, + 34.110554 + ], + [ + -117.798488, + 34.110397 + ], + [ + -117.798553, + 34.110362 + ], + [ + -117.799335, + 34.110368 + ], + [ + -117.799412, + 34.110368 + ], + [ + -117.799482, + 34.110369 + ], + [ + -117.800478, + 34.110377 + ], + [ + -117.800505, + 34.110377 + ], + [ + -117.800647, + 34.110378 + ] + ] + ] + }, + "properties": { + "name": "Marchant Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474045928, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.79892, + 34.112004 + ], + [ + -117.798719, + 34.112004 + ], + [ + -117.798718, + 34.11167 + ], + [ + -117.798919, + 34.11167 + ], + [ + -117.79892, + 34.112004 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474046982, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.773182, + 34.067327 + ], + [ + -117.771799, + 34.067613 + ], + [ + -117.771565, + 34.067634 + ], + [ + -117.77136, + 34.067676 + ], + [ + -117.771208, + 34.067706 + ], + [ + -117.770494, + 34.067865 + ], + [ + -117.770486, + 34.067842 + ], + [ + -117.770481, + 34.067817 + ], + [ + -117.770479, + 34.067793 + ], + [ + -117.770481, + 34.067768 + ], + [ + -117.770486, + 34.067744 + ], + [ + -117.770494, + 34.067721 + ], + [ + -117.770506, + 34.067698 + ], + [ + -117.770522, + 34.067677 + ], + [ + -117.770539, + 34.067657 + ], + [ + -117.77056, + 34.067639 + ], + [ + -117.770574, + 34.067631 + ], + [ + -117.770587, + 34.067621 + ], + [ + -117.770599, + 34.06761 + ], + [ + -117.770608, + 34.067597 + ], + [ + -117.770616, + 34.067584 + ], + [ + -117.770622, + 34.06757 + ], + [ + -117.770626, + 34.067556 + ], + [ + -117.770628, + 34.067541 + ], + [ + -117.770628, + 34.067527 + ], + [ + -117.770625, + 34.067512 + ], + [ + -117.770621, + 34.067498 + ], + [ + -117.770615, + 34.067484 + ], + [ + -117.770607, + 34.067472 + ], + [ + -117.770597, + 34.067459 + ], + [ + -117.770585, + 34.067448 + ], + [ + -117.770572, + 34.067439 + ], + [ + -117.770494, + 34.067091 + ], + [ + -117.772945, + 34.06658 + ], + [ + -117.773182, + 34.067327 + ] + ] + ] + }, + "properties": { + "name": "Weber Street Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474053845, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.803576, + 34.056814 + ], + [ + -117.80308, + 34.056998 + ], + [ + -117.802511, + 34.057203 + ], + [ + -117.802063, + 34.057341 + ], + [ + -117.80209, + 34.057407 + ], + [ + -117.802551, + 34.057505 + ], + [ + -117.802561, + 34.057496 + ], + [ + -117.802572, + 34.057488 + ], + [ + -117.802584, + 34.057481 + ], + [ + -117.802597, + 34.057475 + ], + [ + -117.80261, + 34.05747 + ], + [ + -117.802624, + 34.057467 + ], + [ + -117.802639, + 34.057465 + ], + [ + -117.802653, + 34.057465 + ], + [ + -117.802668, + 34.057466 + ], + [ + -117.802682, + 34.057468 + ], + [ + -117.802696, + 34.057471 + ], + [ + -117.80271, + 34.057476 + ], + [ + -117.802722, + 34.057483 + ], + [ + -117.802734, + 34.05749 + ], + [ + -117.802744, + 34.057498 + ], + [ + -117.802766, + 34.057545 + ], + [ + -117.802777, + 34.057569 + ], + [ + -117.802801, + 34.057592 + ], + [ + -117.802849, + 34.057625 + ], + [ + -117.803163, + 34.057378 + ], + [ + -117.803173, + 34.057363 + ], + [ + -117.803185, + 34.057348 + ], + [ + -117.8032, + 34.057335 + ], + [ + -117.803216, + 34.057323 + ], + [ + -117.803234, + 34.057313 + ], + [ + -117.803253, + 34.057305 + ], + [ + -117.803273, + 34.057298 + ], + [ + -117.803294, + 34.057294 + ], + [ + -117.803316, + 34.057292 + ], + [ + -117.803337, + 34.057292 + ], + [ + -117.803359, + 34.057295 + ], + [ + -117.80338, + 34.057299 + ], + [ + -117.8034, + 34.057305 + ], + [ + -117.803419, + 34.057314 + ], + [ + -117.803437, + 34.057324 + ], + [ + -117.803453, + 34.057336 + ], + [ + -117.803689, + 34.057503 + ], + [ + -117.803777, + 34.057458 + ], + [ + -117.803576, + 34.056814 + ] + ] + ] + }, + "properties": { + "name": "Happy Town Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474061042, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.809412, + 34.10619 + ], + [ + -117.809417, + 34.106543 + ], + [ + -117.809457, + 34.106581 + ], + [ + -117.810466, + 34.10657 + ], + [ + -117.810606, + 34.10656 + ], + [ + -117.810696, + 34.106554 + ], + [ + -117.810871, + 34.106536 + ], + [ + -117.809412, + 34.10619 + ] + ] + ] + }, + "properties": { + "name": "Rhoads Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474061715, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.812136, + 34.105148 + ], + [ + -117.812083, + 34.105186 + ], + [ + -117.811998, + 34.105179 + ], + [ + -117.811922, + 34.105077 + ], + [ + -117.81196, + 34.105015 + ], + [ + -117.812024, + 34.104991 + ], + [ + -117.812077, + 34.105011 + ], + [ + -117.812122, + 34.10504 + ], + [ + -117.812136, + 34.105148 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474061718, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.813572, + 34.105126 + ], + [ + -117.813255, + 34.105128 + ], + [ + -117.813257, + 34.105371 + ], + [ + -117.813574, + 34.105369 + ], + [ + -117.813572, + 34.105126 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474675661, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.67179, + 33.931246 + ], + [ + -117.672167, + 33.931109 + ], + [ + -117.672597, + 33.931154 + ], + [ + -117.67326, + 33.931659 + ], + [ + -117.673784, + 33.931826 + ], + [ + -117.67446, + 33.93212 + ], + [ + -117.674801, + 33.932447 + ], + [ + -117.674545, + 33.932819 + ], + [ + -117.674156, + 33.933049 + ], + [ + -117.673116, + 33.933257 + ], + [ + -117.672283, + 33.934224 + ], + [ + -117.671992, + 33.934094 + ], + [ + -117.67227, + 33.933547 + ], + [ + -117.672399, + 33.93299 + ], + [ + -117.672373, + 33.932473 + ], + [ + -117.672171, + 33.931897 + ], + [ + -117.67179, + 33.931246 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474676707, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.712183, + 33.960331 + ], + [ + -117.710882, + 33.959496 + ], + [ + -117.710505, + 33.958985 + ], + [ + -117.710013, + 33.959255 + ], + [ + -117.709816, + 33.959434 + ], + [ + -117.70972, + 33.95992 + ], + [ + -117.710187, + 33.960091 + ], + [ + -117.710196, + 33.960722 + ], + [ + -117.711204, + 33.960907 + ], + [ + -117.71184, + 33.960911 + ], + [ + -117.712183, + 33.960331 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 476494199, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.736406, + 33.991248 + ], + [ + -117.736304, + 33.991328 + ], + [ + -117.736304, + 33.992115 + ], + [ + -117.736433, + 33.992159 + ], + [ + -117.736599, + 33.992168 + ], + [ + -117.736814, + 33.992155 + ], + [ + -117.737028, + 33.99208 + ], + [ + -117.737125, + 33.992004 + ], + [ + -117.737264, + 33.991866 + ], + [ + -117.737318, + 33.991706 + ], + [ + -117.737366, + 33.991466 + ], + [ + -117.737313, + 33.991341 + ], + [ + -117.737291, + 33.991248 + ], + [ + -117.737232, + 33.991248 + ], + [ + -117.736406, + 33.991248 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 477880173, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.795849, + 34.029277 + ], + [ + -117.795809, + 34.028706 + ], + [ + -117.795862, + 34.028102 + ], + [ + -117.795071, + 34.028053 + ], + [ + -117.794856, + 34.028033 + ], + [ + -117.794757, + 34.028027 + ], + [ + -117.794658, + 34.028002 + ], + [ + -117.794354, + 34.027958 + ], + [ + -117.794224, + 34.027945 + ], + [ + -117.794127, + 34.027945 + ], + [ + -117.79405, + 34.027997 + ], + [ + -117.793845, + 34.028385 + ], + [ + -117.793578, + 34.028704 + ], + [ + -117.793374, + 34.028835 + ], + [ + -117.793299, + 34.028899 + ], + [ + -117.793274, + 34.029053 + ], + [ + -117.793315, + 34.029167 + ], + [ + -117.793315, + 34.02921 + ], + [ + -117.79328, + 34.029272 + ], + [ + -117.793082, + 34.029539 + ], + [ + -117.7932, + 34.029609 + ], + [ + -117.793234, + 34.029632 + ], + [ + -117.793246, + 34.029696 + ], + [ + -117.793243, + 34.029727 + ], + [ + -117.793234, + 34.02975 + ], + [ + -117.793234, + 34.029781 + ], + [ + -117.793252, + 34.029807 + ], + [ + -117.79324, + 34.029837 + ], + [ + -117.793237, + 34.029861 + ], + [ + -117.793284, + 34.029817 + ], + [ + -117.793429, + 34.02973 + ], + [ + -117.793566, + 34.029663 + ], + [ + -117.793712, + 34.029612 + ], + [ + -117.793956, + 34.029551 + ], + [ + -117.794101, + 34.029525 + ], + [ + -117.795723, + 34.029345 + ], + [ + -117.795807, + 34.029319 + ], + [ + -117.795849, + 34.029277 + ] + ] + ] + }, + "properties": { + "name": "Carlton J. Peterson Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 477880187, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.793434, + 34.029557 + ], + [ + -117.793447, + 34.029573 + ], + [ + -117.793571, + 34.029528 + ], + [ + -117.793657, + 34.029496 + ], + [ + -117.793705, + 34.029477 + ], + [ + -117.793722, + 34.029459 + ], + [ + -117.793584, + 34.029176 + ], + [ + -117.793561, + 34.029167 + ], + [ + -117.793531, + 34.029161 + ], + [ + -117.79346, + 34.029188 + ], + [ + -117.793332, + 34.029234 + ], + [ + -117.793312, + 34.029253 + ], + [ + -117.793309, + 34.02927 + ], + [ + -117.793303, + 34.029286 + ], + [ + -117.793309, + 34.029305 + ], + [ + -117.793434, + 34.029557 + ] + ] + ] + }, + "properties": { + "name": "Diamond Bar Skate Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 478538310, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.790952, + 34.012926 + ], + [ + -117.790951, + 34.012776 + ], + [ + -117.790666, + 34.012778 + ], + [ + -117.790667, + 34.012927 + ], + [ + -117.790952, + 34.012926 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 478549177, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.775049, + 33.994883 + ], + [ + -117.773606, + 33.99416 + ], + [ + -117.773392, + 33.99405 + ], + [ + -117.773293, + 33.993994 + ], + [ + -117.773188, + 33.993934 + ], + [ + -117.773083, + 33.993867 + ], + [ + -117.772947, + 33.993783 + ], + [ + -117.772819, + 33.993704 + ], + [ + -117.772741, + 33.993654 + ], + [ + -117.772674, + 33.993611 + ], + [ + -117.772601, + 33.993567 + ], + [ + -117.772471, + 33.993493 + ], + [ + -117.772338, + 33.993424 + ], + [ + -117.772036, + 33.993275 + ], + [ + -117.771947, + 33.993235 + ], + [ + -117.771887, + 33.993208 + ], + [ + -117.771869, + 33.993196 + ], + [ + -117.771852, + 33.993178 + ], + [ + -117.771838, + 33.99315 + ], + [ + -117.771834, + 33.993126 + ], + [ + -117.771844, + 33.993094 + ], + [ + -117.771869, + 33.993072 + ], + [ + -117.771915, + 33.993055 + ], + [ + -117.771968, + 33.993052 + ], + [ + -117.772047, + 33.993055 + ], + [ + -117.772087, + 33.993058 + ], + [ + -117.772109, + 33.993063 + ], + [ + -117.772138, + 33.993075 + ], + [ + -117.772154, + 33.993088 + ], + [ + -117.772162, + 33.993111 + ], + [ + -117.77217, + 33.99314 + ], + [ + -117.772164, + 33.993158 + ], + [ + -117.772158, + 33.993173 + ], + [ + -117.77216, + 33.993191 + ], + [ + -117.772174, + 33.993224 + ], + [ + -117.772186, + 33.993259 + ], + [ + -117.77221, + 33.99328 + ], + [ + -117.772233, + 33.993286 + ], + [ + -117.772251, + 33.99328 + ], + [ + -117.772277, + 33.993265 + ], + [ + -117.772305, + 33.993249 + ], + [ + -117.772322, + 33.993232 + ], + [ + -117.772338, + 33.993209 + ], + [ + -117.77236, + 33.993157 + ], + [ + -117.772376, + 33.993121 + ], + [ + -117.772405, + 33.993072 + ], + [ + -117.772451, + 33.993013 + ], + [ + -117.772492, + 33.99296 + ], + [ + -117.772542, + 33.992917 + ], + [ + -117.772585, + 33.992886 + ], + [ + -117.77265, + 33.992867 + ], + [ + -117.772702, + 33.992863 + ], + [ + -117.772753, + 33.992885 + ], + [ + -117.772823, + 33.992917 + ], + [ + -117.772917, + 33.992957 + ], + [ + -117.773008, + 33.99298 + ], + [ + -117.773083, + 33.992995 + ], + [ + -117.773174, + 33.993001 + ], + [ + -117.773283, + 33.992993 + ], + [ + -117.773344, + 33.992978 + ], + [ + -117.773416, + 33.992955 + ], + [ + -117.773499, + 33.992919 + ], + [ + -117.773578, + 33.99288 + ], + [ + -117.773689, + 33.992827 + ], + [ + -117.773815, + 33.992768 + ], + [ + -117.77388, + 33.992732 + ], + [ + -117.773942, + 33.992695 + ], + [ + -117.774003, + 33.992631 + ], + [ + -117.774052, + 33.992573 + ], + [ + -117.774158, + 33.99247 + ], + [ + -117.774205, + 33.992433 + ], + [ + -117.774247, + 33.99241 + ], + [ + -117.774287, + 33.992393 + ], + [ + -117.774377, + 33.992366 + ], + [ + -117.774517, + 33.992327 + ], + [ + -117.774685, + 33.9923 + ], + [ + -117.774874, + 33.992284 + ], + [ + -117.775034, + 33.992273 + ], + [ + -117.775103, + 33.992272 + ], + [ + -117.775164, + 33.992274 + ], + [ + -117.775221, + 33.992282 + ], + [ + -117.775273, + 33.9923 + ], + [ + -117.775331, + 33.992329 + ], + [ + -117.775399, + 33.992367 + ], + [ + -117.775457, + 33.992409 + ], + [ + -117.775496, + 33.992445 + ], + [ + -117.775515, + 33.992461 + ], + [ + -117.775533, + 33.992474 + ], + [ + -117.77554, + 33.992467 + ], + [ + -117.775553, + 33.992463 + ], + [ + -117.775569, + 33.992466 + ], + [ + -117.775586, + 33.99248 + ], + [ + -117.775585, + 33.992489 + ], + [ + -117.775579, + 33.992495 + ], + [ + -117.775562, + 33.992508 + ], + [ + -117.775548, + 33.992512 + ], + [ + -117.775537, + 33.992511 + ], + [ + -117.775523, + 33.992502 + ], + [ + -117.775508, + 33.992523 + ], + [ + -117.775494, + 33.992558 + ], + [ + -117.775507, + 33.99259 + ], + [ + -117.775534, + 33.992611 + ], + [ + -117.775587, + 33.99263 + ], + [ + -117.775639, + 33.992654 + ], + [ + -117.775728, + 33.992694 + ], + [ + -117.775845, + 33.992748 + ], + [ + -117.775953, + 33.992787 + ], + [ + -117.776033, + 33.992819 + ], + [ + -117.776089, + 33.992842 + ], + [ + -117.776144, + 33.992881 + ], + [ + -117.776229, + 33.992927 + ], + [ + -117.776253, + 33.99296 + ], + [ + -117.776277, + 33.993026 + ], + [ + -117.776285, + 33.993099 + ], + [ + -117.776277, + 33.993175 + ], + [ + -117.776257, + 33.993224 + ], + [ + -117.7762, + 33.99329 + ], + [ + -117.776146, + 33.993352 + ], + [ + -117.776089, + 33.993409 + ], + [ + -117.776047, + 33.993468 + ], + [ + -117.776035, + 33.993509 + ], + [ + -117.776004, + 33.993572 + ], + [ + -117.775976, + 33.993606 + ], + [ + -117.775938, + 33.993639 + ], + [ + -117.775899, + 33.993676 + ], + [ + -117.775856, + 33.993711 + ], + [ + -117.77585, + 33.993731 + ], + [ + -117.775824, + 33.993765 + ], + [ + -117.77579, + 33.993783 + ], + [ + -117.775749, + 33.993831 + ], + [ + -117.775727, + 33.993868 + ], + [ + -117.775715, + 33.99389 + ], + [ + -117.775741, + 33.993909 + ], + [ + -117.775741, + 33.99394 + ], + [ + -117.775745, + 33.99398 + ], + [ + -117.775737, + 33.994016 + ], + [ + -117.775683, + 33.994095 + ], + [ + -117.775472, + 33.994393 + ], + [ + -117.775343, + 33.994571 + ], + [ + -117.775211, + 33.99475 + ], + [ + -117.775144, + 33.99484 + ], + [ + -117.775122, + 33.994875 + ], + [ + -117.775094, + 33.994904 + ], + [ + -117.775049, + 33.994883 + ] + ] + ] + }, + "properties": { + "name": "Grand Avenue Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 478549203, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.774443, + 33.992886 + ], + [ + -117.774411, + 33.992862 + ], + [ + -117.77441, + 33.992584 + ], + [ + -117.774439, + 33.992558 + ], + [ + -117.774619, + 33.992561 + ], + [ + -117.774619, + 33.992869 + ], + [ + -117.774591, + 33.992889 + ], + [ + -117.774443, + 33.992886 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 479350447, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.635094, + 34.102443 + ], + [ + -117.634925, + 34.102372 + ], + [ + -117.633986, + 34.102763 + ], + [ + -117.634011, + 34.102855 + ], + [ + -117.634059, + 34.102933 + ], + [ + -117.634133, + 34.10303 + ], + [ + -117.634196, + 34.103088 + ], + [ + -117.634279, + 34.103148 + ], + [ + -117.634352, + 34.103199 + ], + [ + -117.634458, + 34.103254 + ], + [ + -117.634582, + 34.103303 + ], + [ + -117.63473, + 34.10333 + ], + [ + -117.634854, + 34.103342 + ], + [ + -117.635019, + 34.103342 + ], + [ + -117.635141, + 34.10333 + ], + [ + -117.63524, + 34.103313 + ], + [ + -117.635336, + 34.103288 + ], + [ + -117.635171, + 34.102835 + ], + [ + -117.635094, + 34.102443 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 479619252, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.743978, + 33.980798 + ], + [ + -117.743833, + 33.98094 + ], + [ + -117.743651, + 33.981113 + ], + [ + -117.743259, + 33.981447 + ], + [ + -117.743179, + 33.981518 + ], + [ + -117.743066, + 33.981616 + ], + [ + -117.742953, + 33.981727 + ], + [ + -117.742771, + 33.98191 + ], + [ + -117.742637, + 33.981914 + ], + [ + -117.742521, + 33.981831 + ], + [ + -117.742072, + 33.981508 + ], + [ + -117.74195, + 33.98142 + ], + [ + -117.741811, + 33.981331 + ], + [ + -117.741623, + 33.981211 + ], + [ + -117.741374, + 33.981089 + ], + [ + -117.741341, + 33.981 + ], + [ + -117.741459, + 33.980815 + ], + [ + -117.741725, + 33.980375 + ], + [ + -117.741915, + 33.980088 + ], + [ + -117.742015, + 33.979959 + ], + [ + -117.74213, + 33.979819 + ], + [ + -117.742355, + 33.979761 + ], + [ + -117.742549, + 33.979772 + ], + [ + -117.742833, + 33.979936 + ], + [ + -117.742961, + 33.979779 + ], + [ + -117.743405, + 33.980631 + ], + [ + -117.743978, + 33.980798 + ] + ] + ] + }, + "properties": { + "name": "Crossroads Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 480537023, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.750049, + 33.981645 + ], + [ + -117.749716, + 33.981659 + ], + [ + -117.74933, + 33.981743 + ], + [ + -117.748997, + 33.981783 + ], + [ + -117.748734, + 33.981716 + ], + [ + -117.748338, + 33.981707 + ], + [ + -117.748278, + 33.981681 + ], + [ + -117.747898, + 33.981636 + ], + [ + -117.747672, + 33.981618 + ], + [ + -117.747603, + 33.981543 + ], + [ + -117.747602, + 33.981405 + ], + [ + -117.747539, + 33.981335 + ], + [ + -117.747491, + 33.981194 + ], + [ + -117.747344, + 33.9812 + ], + [ + -117.746861, + 33.98122 + ], + [ + -117.746679, + 33.981152 + ], + [ + -117.745916, + 33.981505 + ], + [ + -117.745866, + 33.981583 + ], + [ + -117.745784, + 33.98171 + ], + [ + -117.745617, + 33.981752 + ], + [ + -117.744105, + 33.981761 + ], + [ + -117.743776, + 33.98124 + ], + [ + -117.742927, + 33.982 + ], + [ + -117.742937, + 33.982117 + ], + [ + -117.742932, + 33.982138 + ], + [ + -117.743058, + 33.982219 + ], + [ + -117.743363, + 33.982428 + ], + [ + -117.743791, + 33.982727 + ], + [ + -117.744262, + 33.983031 + ], + [ + -117.745294, + 33.983727 + ], + [ + -117.745306, + 33.983727 + ], + [ + -117.745344, + 33.983727 + ], + [ + -117.745584, + 33.983907 + ], + [ + -117.745759, + 33.984038 + ], + [ + -117.745881, + 33.984021 + ], + [ + -117.745916, + 33.984017 + ], + [ + -117.745951, + 33.983975 + ], + [ + -117.746103, + 33.983794 + ], + [ + -117.746416, + 33.98348 + ], + [ + -117.746583, + 33.983354 + ], + [ + -117.747463, + 33.982855 + ], + [ + -117.747484, + 33.98278 + ], + [ + -117.747508, + 33.982767 + ], + [ + -117.7476, + 33.982721 + ], + [ + -117.747696, + 33.982746 + ], + [ + -117.748561, + 33.98249 + ], + [ + -117.74894, + 33.982335 + ], + [ + -117.749547, + 33.982008 + ], + [ + -117.750128, + 33.981656 + ], + [ + -117.750049, + 33.981645 + ] + ] + ] + }, + "properties": { + "name": "Veterans Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 482720388, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.782386, + 34.049536 + ], + [ + -117.783219, + 34.049553 + ], + [ + -117.783612, + 34.04957 + ], + [ + -117.783979, + 34.049581 + ], + [ + -117.784026, + 34.049563 + ], + [ + -117.784037, + 34.049541 + ], + [ + -117.784054, + 34.049402 + ], + [ + -117.78411, + 34.048984 + ], + [ + -117.784111, + 34.048948 + ], + [ + -117.784177, + 34.048221 + ], + [ + -117.784105, + 34.048168 + ], + [ + -117.783164, + 34.048109 + ], + [ + -117.782368, + 34.048059 + ], + [ + -117.782103, + 34.04804 + ], + [ + -117.782104, + 34.048055 + ], + [ + -117.782126, + 34.048622 + ], + [ + -117.782219, + 34.04862 + ], + [ + -117.782221, + 34.048774 + ], + [ + -117.782391, + 34.048776 + ], + [ + -117.782386, + 34.049536 + ] + ] + ] + }, + "properties": { + "name": "Westmont Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 482736927, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.598621, + 33.938792 + ], + [ + -117.598623, + 33.938815 + ], + [ + -117.598635, + 33.938837 + ], + [ + -117.598655, + 33.938854 + ], + [ + -117.598681, + 33.938863 + ], + [ + -117.59871, + 33.938866 + ], + [ + -117.598734, + 33.938861 + ], + [ + -117.598756, + 33.93885 + ], + [ + -117.598773, + 33.938834 + ], + [ + -117.598782, + 33.938814 + ], + [ + -117.598785, + 33.938793 + ], + [ + -117.598779, + 33.938773 + ], + [ + -117.598766, + 33.938755 + ], + [ + -117.598748, + 33.938741 + ], + [ + -117.598724, + 33.938732 + ], + [ + -117.598696, + 33.93873 + ], + [ + -117.598668, + 33.938736 + ], + [ + -117.598645, + 33.938749 + ], + [ + -117.598628, + 33.938769 + ], + [ + -117.598621, + 33.938792 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 483530689, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.599482, + 33.955572 + ], + [ + -117.599459, + 33.955584 + ], + [ + -117.599442, + 33.955601 + ], + [ + -117.599433, + 33.955623 + ], + [ + -117.599433, + 33.955645 + ], + [ + -117.599441, + 33.955666 + ], + [ + -117.599456, + 33.955685 + ], + [ + -117.599478, + 33.955698 + ], + [ + -117.599504, + 33.955705 + ], + [ + -117.599533, + 33.955704 + ], + [ + -117.59956, + 33.955695 + ], + [ + -117.599581, + 33.95568 + ], + [ + -117.599596, + 33.955659 + ], + [ + -117.5996, + 33.955635 + ], + [ + -117.599595, + 33.955612 + ], + [ + -117.599581, + 33.955591 + ], + [ + -117.59956, + 33.955576 + ], + [ + -117.599535, + 33.955567 + ], + [ + -117.599508, + 33.955566 + ], + [ + -117.599482, + 33.955572 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 483570241, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.776973, + 34.032056 + ], + [ + -117.777034, + 34.032094 + ], + [ + -117.777298, + 34.032066 + ], + [ + -117.777335, + 34.032042 + ], + [ + -117.777343, + 34.032029 + ], + [ + -117.777346, + 34.03201 + ], + [ + -117.777357, + 34.032 + ], + [ + -117.777349, + 34.03193 + ], + [ + -117.777363, + 34.031925 + ], + [ + -117.777358, + 34.031878 + ], + [ + -117.777328, + 34.031657 + ], + [ + -117.777287, + 34.031458 + ], + [ + -117.777219, + 34.031214 + ], + [ + -117.777138, + 34.030982 + ], + [ + -117.777044, + 34.030754 + ], + [ + -117.776943, + 34.030544 + ], + [ + -117.776824, + 34.030334 + ], + [ + -117.776745, + 34.030211 + ], + [ + -117.776674, + 34.030107 + ], + [ + -117.77648, + 34.029854 + ], + [ + -117.776337, + 34.029683 + ], + [ + -117.776269, + 34.029611 + ], + [ + -117.77625, + 34.0296 + ], + [ + -117.776242, + 34.029582 + ], + [ + -117.776067, + 34.029409 + ], + [ + -117.775837, + 34.029213 + ], + [ + -117.775613, + 34.029037 + ], + [ + -117.775363, + 34.028868 + ], + [ + -117.775349, + 34.028882 + ], + [ + -117.77534, + 34.028888 + ], + [ + -117.775324, + 34.028879 + ], + [ + -117.775304, + 34.028878 + ], + [ + -117.775283, + 34.028882 + ], + [ + -117.775267, + 34.028891 + ], + [ + -117.775122, + 34.029057 + ], + [ + -117.775103, + 34.029086 + ], + [ + -117.7751, + 34.029115 + ], + [ + -117.775107, + 34.029135 + ], + [ + -117.775123, + 34.029153 + ], + [ + -117.775218, + 34.029219 + ], + [ + -117.775233, + 34.029241 + ], + [ + -117.77522, + 34.029256 + ], + [ + -117.775354, + 34.029354 + ], + [ + -117.775483, + 34.029452 + ], + [ + -117.7757, + 34.02964 + ], + [ + -117.775819, + 34.029753 + ], + [ + -117.775947, + 34.029886 + ], + [ + -117.776076, + 34.030034 + ], + [ + -117.776169, + 34.030157 + ], + [ + -117.776257, + 34.030269 + ], + [ + -117.776397, + 34.030479 + ], + [ + -117.776469, + 34.030598 + ], + [ + -117.776563, + 34.030774 + ], + [ + -117.776631, + 34.030917 + ], + [ + -117.776691, + 34.03106 + ], + [ + -117.77682, + 34.031449 + ], + [ + -117.776873, + 34.031657 + ], + [ + -117.776915, + 34.031857 + ], + [ + -117.776954, + 34.032041 + ], + [ + -117.776973, + 34.032056 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 483570242, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.774687, + 34.028496 + ], + [ + -117.775099, + 34.028709 + ], + [ + -117.775083, + 34.028724 + ], + [ + -117.775096, + 34.028743 + ], + [ + -117.775107, + 34.028766 + ], + [ + -117.775104, + 34.02879 + ], + [ + -117.774941, + 34.028972 + ], + [ + -117.774917, + 34.028993 + ], + [ + -117.77489, + 34.028997 + ], + [ + -117.77485, + 34.029002 + ], + [ + -117.774821, + 34.029007 + ], + [ + -117.774734, + 34.028963 + ], + [ + -117.774436, + 34.028819 + ], + [ + -117.774142, + 34.028696 + ], + [ + -117.773821, + 34.028591 + ], + [ + -117.773518, + 34.028534 + ], + [ + -117.773341, + 34.028519 + ], + [ + -117.773193, + 34.028515 + ], + [ + -117.772998, + 34.028527 + ], + [ + -117.772799, + 34.028557 + ], + [ + -117.772582, + 34.02861 + ], + [ + -117.772498, + 34.028637 + ], + [ + -117.772447, + 34.028638 + ], + [ + -117.772413, + 34.028653 + ], + [ + -117.772316, + 34.028681 + ], + [ + -117.772259, + 34.028667 + ], + [ + -117.772227, + 34.02863 + ], + [ + -117.772216, + 34.028632 + ], + [ + -117.77215, + 34.02855 + ], + [ + -117.772106, + 34.028452 + ], + [ + -117.772089, + 34.0284 + ], + [ + -117.772041, + 34.028203 + ], + [ + -117.772041, + 34.027931 + ], + [ + -117.772045, + 34.027839 + ], + [ + -117.772053, + 34.027683 + ], + [ + -117.772072, + 34.027684 + ], + [ + -117.772106, + 34.027686 + ], + [ + -117.77251, + 34.027792 + ], + [ + -117.7726, + 34.027838 + ], + [ + -117.772624, + 34.027849 + ], + [ + -117.772681, + 34.027858 + ], + [ + -117.772684, + 34.027845 + ], + [ + -117.77297, + 34.027906 + ], + [ + -117.77321, + 34.027979 + ], + [ + -117.773959, + 34.028219 + ], + [ + -117.774687, + 34.028496 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 483715616, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.590907, + 33.971829 + ], + [ + -117.590937, + 33.971793 + ], + [ + -117.590952, + 33.971769 + ], + [ + -117.590981, + 33.971756 + ], + [ + -117.59103, + 33.971755 + ], + [ + -117.591069, + 33.971761 + ], + [ + -117.591098, + 33.971753 + ], + [ + -117.591119, + 33.971732 + ], + [ + -117.591127, + 33.971706 + ], + [ + -117.591125, + 33.971675 + ], + [ + -117.591101, + 33.971654 + ], + [ + -117.591069, + 33.971646 + ], + [ + -117.591035, + 33.971637 + ], + [ + -117.591008, + 33.971617 + ], + [ + -117.590997, + 33.97159 + ], + [ + -117.591006, + 33.971562 + ], + [ + -117.591009, + 33.971534 + ], + [ + -117.590986, + 33.971501 + ], + [ + -117.590939, + 33.971482 + ], + [ + -117.590913, + 33.971474 + ], + [ + -117.590865, + 33.971442 + ], + [ + -117.590843, + 33.97141 + ], + [ + -117.590831, + 33.971364 + ], + [ + -117.590829, + 33.971337 + ], + [ + -117.590735, + 33.97135 + ], + [ + -117.590663, + 33.971359 + ], + [ + -117.590613, + 33.971377 + ], + [ + -117.590583, + 33.971415 + ], + [ + -117.59056, + 33.971463 + ], + [ + -117.590555, + 33.971521 + ], + [ + -117.59054, + 33.971566 + ], + [ + -117.590523, + 33.971596 + ], + [ + -117.590529, + 33.971646 + ], + [ + -117.59054, + 33.97168 + ], + [ + -117.59056, + 33.971695 + ], + [ + -117.5906, + 33.971705 + ], + [ + -117.590642, + 33.971706 + ], + [ + -117.590661, + 33.971698 + ], + [ + -117.590694, + 33.971689 + ], + [ + -117.590723, + 33.971703 + ], + [ + -117.590745, + 33.971733 + ], + [ + -117.590752, + 33.971787 + ], + [ + -117.590771, + 33.971821 + ], + [ + -117.590811, + 33.971843 + ], + [ + -117.590841, + 33.971852 + ], + [ + -117.590884, + 33.971847 + ], + [ + -117.590907, + 33.971829 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 483716396, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.576126, + 33.981355 + ], + [ + -117.57609, + 33.981361 + ], + [ + -117.576059, + 33.981375 + ], + [ + -117.576035, + 33.981398 + ], + [ + -117.576022, + 33.981426 + ], + [ + -117.576021, + 33.981456 + ], + [ + -117.576032, + 33.981484 + ], + [ + -117.576052, + 33.981506 + ], + [ + -117.576079, + 33.981522 + ], + [ + -117.57611, + 33.98153 + ], + [ + -117.576143, + 33.98153 + ], + [ + -117.576174, + 33.981521 + ], + [ + -117.576201, + 33.981505 + ], + [ + -117.57622, + 33.981482 + ], + [ + -117.57623, + 33.981456 + ], + [ + -117.576229, + 33.981426 + ], + [ + -117.576216, + 33.981398 + ], + [ + -117.576193, + 33.981376 + ], + [ + -117.576161, + 33.981361 + ], + [ + -117.576126, + 33.981355 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 483718961, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.589201, + 33.982627 + ], + [ + -117.589196, + 33.982534 + ], + [ + -117.589179, + 33.982185 + ], + [ + -117.58917, + 33.982058 + ], + [ + -117.589138, + 33.981937 + ], + [ + -117.589085, + 33.98182 + ], + [ + -117.589046, + 33.981758 + ], + [ + -117.588982, + 33.981682 + ], + [ + -117.588911, + 33.981616 + ], + [ + -117.588827, + 33.981557 + ], + [ + -117.588766, + 33.981516 + ], + [ + -117.588684, + 33.981474 + ], + [ + -117.588584, + 33.981437 + ], + [ + -117.588487, + 33.981411 + ], + [ + -117.588385, + 33.981395 + ], + [ + -117.588181, + 33.981386 + ], + [ + -117.58798, + 33.981391 + ], + [ + -117.587838, + 33.981415 + ], + [ + -117.587687, + 33.981463 + ], + [ + -117.587581, + 33.981516 + ], + [ + -117.587497, + 33.981571 + ], + [ + -117.587381, + 33.981671 + ], + [ + -117.587303, + 33.981761 + ], + [ + -117.587238, + 33.981869 + ], + [ + -117.587195, + 33.981991 + ], + [ + -117.587176, + 33.982095 + ], + [ + -117.587175, + 33.982212 + ], + [ + -117.587192, + 33.98261 + ], + [ + -117.587196, + 33.982691 + ], + [ + -117.589201, + 33.982627 + ] + ] + ] + }, + "properties": { + "name": "Celebration Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 483724269, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.554997, + 33.973122 + ], + [ + -117.552204, + 33.973128 + ], + [ + -117.552185, + 33.975029 + ], + [ + -117.550261, + 33.975029 + ], + [ + -117.549989, + 33.974283 + ], + [ + -117.549756, + 33.973724 + ], + [ + -117.5496, + 33.973251 + ], + [ + -117.549464, + 33.972542 + ], + [ + -117.549481, + 33.97178 + ], + [ + -117.554994, + 33.971724 + ], + [ + -117.554997, + 33.973122 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 484157004, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.599764, + 33.951934 + ], + [ + -117.599919, + 33.951876 + ], + [ + -117.599788, + 33.951638 + ], + [ + -117.599633, + 33.951696 + ], + [ + -117.599764, + 33.951934 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 484235718, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.598962, + 33.960166 + ], + [ + -117.598963, + 33.959783 + ], + [ + -117.598407, + 33.959782 + ], + [ + -117.598406, + 33.960165 + ], + [ + -117.598962, + 33.960166 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 484459377, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.550987, + 33.985542 + ], + [ + -117.551034, + 33.985542 + ], + [ + -117.551078, + 33.985535 + ], + [ + -117.551115, + 33.985508 + ], + [ + -117.551139, + 33.985472 + ], + [ + -117.551141, + 33.985437 + ], + [ + -117.551123, + 33.985402 + ], + [ + -117.551092, + 33.985353 + ], + [ + -117.551073, + 33.985309 + ], + [ + -117.551048, + 33.985286 + ], + [ + -117.550997, + 33.985264 + ], + [ + -117.550947, + 33.98527 + ], + [ + -117.550906, + 33.985296 + ], + [ + -117.550876, + 33.985338 + ], + [ + -117.550872, + 33.985373 + ], + [ + -117.550882, + 33.985432 + ], + [ + -117.550913, + 33.985488 + ], + [ + -117.550939, + 33.985521 + ], + [ + -117.550987, + 33.985542 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 484464003, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.581298, + 33.956576 + ], + [ + -117.581306, + 33.956602 + ], + [ + -117.581323, + 33.956624 + ], + [ + -117.581347, + 33.956641 + ], + [ + -117.581379, + 33.956651 + ], + [ + -117.581413, + 33.956652 + ], + [ + -117.581445, + 33.956643 + ], + [ + -117.581472, + 33.956626 + ], + [ + -117.581491, + 33.956602 + ], + [ + -117.581499, + 33.956575 + ], + [ + -117.581495, + 33.956547 + ], + [ + -117.58148, + 33.956521 + ], + [ + -117.581456, + 33.956501 + ], + [ + -117.581425, + 33.956489 + ], + [ + -117.581391, + 33.956486 + ], + [ + -117.581361, + 33.956493 + ], + [ + -117.581333, + 33.956506 + ], + [ + -117.581313, + 33.956526 + ], + [ + -117.581301, + 33.95655 + ], + [ + -117.581298, + 33.956576 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 484464004, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.580272, + 33.955875 + ], + [ + -117.580289, + 33.955895 + ], + [ + -117.580315, + 33.955895 + ], + [ + -117.580335, + 33.955885 + ], + [ + -117.580346, + 33.955864 + ], + [ + -117.58036, + 33.955854 + ], + [ + -117.580383, + 33.955849 + ], + [ + -117.580407, + 33.955848 + ], + [ + -117.580422, + 33.955835 + ], + [ + -117.580424, + 33.955822 + ], + [ + -117.580414, + 33.955801 + ], + [ + -117.580404, + 33.955787 + ], + [ + -117.580402, + 33.955777 + ], + [ + -117.5804, + 33.955762 + ], + [ + -117.580402, + 33.955716 + ], + [ + -117.580299, + 33.955553 + ], + [ + -117.580268, + 33.955533 + ], + [ + -117.580228, + 33.955527 + ], + [ + -117.580199, + 33.955535 + ], + [ + -117.580177, + 33.955546 + ], + [ + -117.580166, + 33.955564 + ], + [ + -117.580165, + 33.955593 + ], + [ + -117.58017, + 33.955612 + ], + [ + -117.58016, + 33.955628 + ], + [ + -117.580145, + 33.95564 + ], + [ + -117.580134, + 33.95566 + ], + [ + -117.580152, + 33.955686 + ], + [ + -117.580161, + 33.955794 + ], + [ + -117.58017, + 33.955823 + ], + [ + -117.580187, + 33.955843 + ], + [ + -117.580247, + 33.955857 + ], + [ + -117.580272, + 33.955875 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 484596436, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.58934, + 33.953027 + ], + [ + -117.589334, + 33.953053 + ], + [ + -117.589338, + 33.953079 + ], + [ + -117.589351, + 33.953102 + ], + [ + -117.589373, + 33.953121 + ], + [ + -117.589401, + 33.953134 + ], + [ + -117.589435, + 33.953138 + ], + [ + -117.589468, + 33.953133 + ], + [ + -117.589498, + 33.953119 + ], + [ + -117.58952, + 33.953097 + ], + [ + -117.589532, + 33.95307 + ], + [ + -117.589532, + 33.953042 + ], + [ + -117.58952, + 33.953015 + ], + [ + -117.589498, + 33.952993 + ], + [ + -117.589469, + 33.952978 + ], + [ + -117.589438, + 33.952973 + ], + [ + -117.589407, + 33.952976 + ], + [ + -117.589378, + 33.952987 + ], + [ + -117.589355, + 33.953004 + ], + [ + -117.58934, + 33.953027 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 484596439, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.588913, + 33.95388 + ], + [ + -117.589234, + 33.953749 + ], + [ + -117.589467, + 33.953604 + ], + [ + -117.589493, + 33.953574 + ], + [ + -117.589505, + 33.953548 + ], + [ + -117.589506, + 33.953521 + ], + [ + -117.589496, + 33.953497 + ], + [ + -117.589474, + 33.95346 + ], + [ + -117.589103, + 33.953064 + ], + [ + -117.588981, + 33.953142 + ], + [ + -117.588892, + 33.953235 + ], + [ + -117.588824, + 33.953352 + ], + [ + -117.588793, + 33.953437 + ], + [ + -117.588788, + 33.953547 + ], + [ + -117.588796, + 33.953651 + ], + [ + -117.588852, + 33.953799 + ], + [ + -117.588913, + 33.95388 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 484612404, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.615137, + 33.966553 + ], + [ + -117.615185, + 33.966463 + ], + [ + -117.615187, + 33.966433 + ], + [ + -117.61518, + 33.966394 + ], + [ + -117.615159, + 33.966363 + ], + [ + -117.615119, + 33.966338 + ], + [ + -117.615075, + 33.966324 + ], + [ + -117.615033, + 33.966322 + ], + [ + -117.614986, + 33.966338 + ], + [ + -117.614949, + 33.966355 + ], + [ + -117.614927, + 33.966388 + ], + [ + -117.614887, + 33.966455 + ], + [ + -117.615137, + 33.966553 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 484616843, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.569684, + 33.96724 + ], + [ + -117.569873, + 33.966917 + ], + [ + -117.569968, + 33.96673 + ], + [ + -117.569913, + 33.966616 + ], + [ + -117.569627, + 33.966532 + ], + [ + -117.56926, + 33.966451 + ], + [ + -117.569207, + 33.966646 + ], + [ + -117.569207, + 33.966791 + ], + [ + -117.56926, + 33.966933 + ], + [ + -117.569344, + 33.967033 + ], + [ + -117.569501, + 33.967149 + ], + [ + -117.569684, + 33.96724 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486256349, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.783763, + 34.124411 + ], + [ + -117.785453, + 34.124428 + ], + [ + -117.785485, + 34.124452 + ], + [ + -117.785526, + 34.124468 + ], + [ + -117.78552, + 34.124669 + ], + [ + -117.784943, + 34.125505 + ], + [ + -117.784771, + 34.125762 + ], + [ + -117.784471, + 34.126242 + ], + [ + -117.784154, + 34.126973 + ], + [ + -117.78403, + 34.127105 + ], + [ + -117.783532, + 34.127106 + ], + [ + -117.783227, + 34.126449 + ], + [ + -117.783333, + 34.126429 + ], + [ + -117.78338, + 34.126411 + ], + [ + -117.783419, + 34.126387 + ], + [ + -117.783695, + 34.12661 + ], + [ + -117.783725, + 34.126596 + ], + [ + -117.783763, + 34.124411 + ] + ] + ] + }, + "properties": { + "name": "Los Encinos Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486288227, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.733618, + 34.113273 + ], + [ + -117.733513, + 34.1133 + ], + [ + -117.733315, + 34.113374 + ], + [ + -117.733148, + 34.113444 + ], + [ + -117.732859, + 34.113549 + ], + [ + -117.732651, + 34.11362 + ], + [ + -117.732469, + 34.113658 + ], + [ + -117.732159, + 34.113727 + ], + [ + -117.731955, + 34.113768 + ], + [ + -117.731922, + 34.113798 + ], + [ + -117.731903, + 34.113893 + ], + [ + -117.731877, + 34.114077 + ], + [ + -117.731744, + 34.114398 + ], + [ + -117.731735, + 34.114455 + ], + [ + -117.731837, + 34.114424 + ], + [ + -117.732172, + 34.11442 + ], + [ + -117.732172, + 34.114582 + ], + [ + -117.73369, + 34.114604 + ], + [ + -117.7338, + 34.114602 + ], + [ + -117.733814, + 34.11404 + ], + [ + -117.733755, + 34.113527 + ], + [ + -117.73375, + 34.113311 + ], + [ + -117.733728, + 34.113272 + ], + [ + -117.733674, + 34.113263 + ], + [ + -117.733618, + 34.113273 + ] + ] + ] + }, + "properties": { + "name": "Lewis Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486483889, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.707229, + 34.105939 + ], + [ + -117.707228, + 34.106059 + ], + [ + -117.70728, + 34.106059 + ], + [ + -117.70728, + 34.106089 + ], + [ + -117.707337, + 34.10609 + ], + [ + -117.707336, + 34.106133 + ], + [ + -117.707531, + 34.106134 + ], + [ + -117.707726, + 34.106135 + ], + [ + -117.707726, + 34.106152 + ], + [ + -117.708106, + 34.106154 + ], + [ + -117.708108, + 34.105944 + ], + [ + -117.707229, + 34.105939 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486695264, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.758048, + 34.03562 + ], + [ + -117.757963, + 34.035572 + ], + [ + -117.757925, + 34.035562 + ], + [ + -117.756664, + 34.035596 + ], + [ + -117.75647, + 34.035586 + ], + [ + -117.756254, + 34.035568 + ], + [ + -117.756079, + 34.035549 + ], + [ + -117.756131, + 34.036671 + ], + [ + -117.757833, + 34.036641 + ], + [ + -117.757916, + 34.036638 + ], + [ + -117.75796, + 34.036623 + ], + [ + -117.757989, + 34.036595 + ], + [ + -117.758001, + 34.036545 + ], + [ + -117.757991, + 34.036377 + ], + [ + -117.757987, + 34.036203 + ], + [ + -117.757987, + 34.036023 + ], + [ + -117.758008, + 34.035801 + ], + [ + -117.758048, + 34.03562 + ] + ] + ] + }, + "properties": { + "name": "Doctor Martin Luther King Junior Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487190806, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.714812, + 34.088661 + ], + [ + -117.712712, + 34.088658 + ], + [ + -117.712673, + 34.0869 + ], + [ + -117.713791, + 34.086893 + ], + [ + -117.713788, + 34.087264 + ], + [ + -117.714245, + 34.087271 + ], + [ + -117.714239, + 34.087744 + ], + [ + -117.714812, + 34.087739 + ], + [ + -117.714812, + 34.088661 + ] + ] + ] + }, + "properties": { + "name": "Blaisdell Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 488561952, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.709234, + 34.106023 + ], + [ + -117.709223, + 34.106035 + ], + [ + -117.709216, + 34.106049 + ], + [ + -117.709216, + 34.106065 + ], + [ + -117.709222, + 34.106079 + ], + [ + -117.709233, + 34.106091 + ], + [ + -117.709249, + 34.1061 + ], + [ + -117.709266, + 34.106104 + ], + [ + -117.709285, + 34.106103 + ], + [ + -117.709302, + 34.106097 + ], + [ + -117.709316, + 34.106087 + ], + [ + -117.709325, + 34.106073 + ], + [ + -117.709328, + 34.106058 + ], + [ + -117.709325, + 34.106043 + ], + [ + -117.709317, + 34.106029 + ], + [ + -117.709303, + 34.106018 + ], + [ + -117.709286, + 34.106012 + ], + [ + -117.709267, + 34.106011 + ], + [ + -117.709249, + 34.106015 + ], + [ + -117.709234, + 34.106023 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 488569281, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.708135, + 34.105953 + ], + [ + -117.708132, + 34.10616 + ], + [ + -117.708355, + 34.106162 + ], + [ + -117.708358, + 34.105955 + ], + [ + -117.708135, + 34.105953 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 489357805, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.580961, + 34.074923 + ], + [ + -117.58096, + 34.074948 + ], + [ + -117.58095, + 34.074971 + ], + [ + -117.580931, + 34.07499 + ], + [ + -117.580905, + 34.075002 + ], + [ + -117.580878, + 34.075006 + ], + [ + -117.580851, + 34.075003 + ], + [ + -117.580827, + 34.074993 + ], + [ + -117.580807, + 34.074978 + ], + [ + -117.580794, + 34.074958 + ], + [ + -117.580789, + 34.074936 + ], + [ + -117.58079, + 34.074931 + ], + [ + -117.580793, + 34.074914 + ], + [ + -117.580804, + 34.074893 + ], + [ + -117.580823, + 34.074877 + ], + [ + -117.58085, + 34.074866 + ], + [ + -117.580879, + 34.074863 + ], + [ + -117.580908, + 34.074868 + ], + [ + -117.580933, + 34.074881 + ], + [ + -117.580951, + 34.0749 + ], + [ + -117.580961, + 34.074923 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 489961758, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.566069, + 34.071095 + ], + [ + -117.565996, + 34.07102 + ], + [ + -117.566094, + 34.071019 + ], + [ + -117.566029, + 34.070048 + ], + [ + -117.566237, + 34.070042 + ], + [ + -117.566225, + 34.070109 + ], + [ + -117.566227, + 34.07016 + ], + [ + -117.566238, + 34.070196 + ], + [ + -117.566262, + 34.07025 + ], + [ + -117.566273, + 34.070284 + ], + [ + -117.566273, + 34.070327 + ], + [ + -117.566269, + 34.070355 + ], + [ + -117.566254, + 34.070405 + ], + [ + -117.566249, + 34.070443 + ], + [ + -117.566251, + 34.070487 + ], + [ + -117.56626, + 34.07052 + ], + [ + -117.566239, + 34.070522 + ], + [ + -117.566249, + 34.070693 + ], + [ + -117.566284, + 34.070692 + ], + [ + -117.566298, + 34.071003 + ], + [ + -117.567144, + 34.070981 + ], + [ + -117.567144, + 34.07097 + ], + [ + -117.567193, + 34.070969 + ], + [ + -117.567193, + 34.071005 + ], + [ + -117.56727, + 34.071 + ], + [ + -117.567271, + 34.070964 + ], + [ + -117.567326, + 34.070963 + ], + [ + -117.56733, + 34.071009 + ], + [ + -117.567531, + 34.071018 + ], + [ + -117.567422, + 34.071021 + ], + [ + -117.567357, + 34.07103 + ], + [ + -117.567298, + 34.07104 + ], + [ + -117.567239, + 34.071045 + ], + [ + -117.567146, + 34.071044 + ], + [ + -117.567015, + 34.071043 + ], + [ + -117.566839, + 34.07105 + ], + [ + -117.566737, + 34.071051 + ], + [ + -117.566622, + 34.071047 + ], + [ + -117.566536, + 34.071044 + ], + [ + -117.566467, + 34.07105 + ], + [ + -117.566339, + 34.071069 + ], + [ + -117.566305, + 34.071085 + ], + [ + -117.566274, + 34.071089 + ], + [ + -117.566246, + 34.071082 + ], + [ + -117.566189, + 34.071092 + ], + [ + -117.566069, + 34.071095 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 489961768, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.56657, + 34.068393 + ], + [ + -117.566857, + 34.067937 + ], + [ + -117.564373, + 34.067908 + ], + [ + -117.564812, + 34.068461 + ], + [ + -117.565026, + 34.068394 + ], + [ + -117.565233, + 34.06835 + ], + [ + -117.565456, + 34.068316 + ], + [ + -117.565682, + 34.068305 + ], + [ + -117.565919, + 34.068302 + ], + [ + -117.566164, + 34.068319 + ], + [ + -117.566372, + 34.068349 + ], + [ + -117.56657, + 34.068393 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491945943, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.763356, + 34.07134 + ], + [ + -117.763299, + 34.072067 + ], + [ + -117.763305, + 34.072302 + ], + [ + -117.763328, + 34.072541 + ], + [ + -117.763408, + 34.072736 + ], + [ + -117.763257, + 34.072857 + ], + [ + -117.762463, + 34.072456 + ], + [ + -117.762153, + 34.072319 + ], + [ + -117.762403, + 34.073064 + ], + [ + -117.762616, + 34.073854 + ], + [ + -117.762636, + 34.074047 + ], + [ + -117.762538, + 34.074201 + ], + [ + -117.763086, + 34.07435 + ], + [ + -117.763661, + 34.074554 + ], + [ + -117.764103, + 34.074812 + ], + [ + -117.763992, + 34.075067 + ], + [ + -117.763799, + 34.075274 + ], + [ + -117.76335, + 34.075599 + ], + [ + -117.763167, + 34.075725 + ], + [ + -117.76247, + 34.076411 + ], + [ + -117.762295, + 34.076761 + ], + [ + -117.762224, + 34.076949 + ], + [ + -117.762687, + 34.077727 + ], + [ + -117.763065, + 34.078452 + ], + [ + -117.763184, + 34.078536 + ], + [ + -117.763312, + 34.078573 + ], + [ + -117.763529, + 34.078536 + ], + [ + -117.763677, + 34.078503 + ], + [ + -117.76384, + 34.078525 + ], + [ + -117.763931, + 34.078606 + ], + [ + -117.763975, + 34.078788 + ], + [ + -117.764076, + 34.078856 + ], + [ + -117.764174, + 34.078926 + ], + [ + -117.764235, + 34.07901 + ], + [ + -117.764235, + 34.079105 + ], + [ + -117.764377, + 34.079122 + ], + [ + -117.764364, + 34.07899 + ], + [ + -117.764512, + 34.07894 + ], + [ + -117.764671, + 34.07908 + ], + [ + -117.765209, + 34.079029 + ], + [ + -117.765321, + 34.079152 + ], + [ + -117.765665, + 34.079206 + ], + [ + -117.76578, + 34.079088 + ], + [ + -117.765865, + 34.079155 + ], + [ + -117.766176, + 34.079248 + ], + [ + -117.766379, + 34.079878 + ], + [ + -117.766803, + 34.080111 + ], + [ + -117.766769, + 34.080294 + ], + [ + -117.76677, + 34.080512 + ], + [ + -117.766778, + 34.080858 + ], + [ + -117.766775, + 34.080898 + ], + [ + -117.76675, + 34.08093 + ], + [ + -117.766701, + 34.080933 + ], + [ + -117.766639, + 34.080911 + ], + [ + -117.766395, + 34.080733 + ], + [ + -117.766274, + 34.080617 + ], + [ + -117.766155, + 34.080499 + ], + [ + -117.766009, + 34.080304 + ], + [ + -117.765723, + 34.079957 + ], + [ + -117.765594, + 34.079851 + ], + [ + -117.7654, + 34.079725 + ], + [ + -117.765128, + 34.079588 + ], + [ + -117.764727, + 34.07942 + ], + [ + -117.76433, + 34.079263 + ], + [ + -117.764041, + 34.079122 + ], + [ + -117.763745, + 34.078962 + ], + [ + -117.762234, + 34.078172 + ], + [ + -117.76176, + 34.07792 + ], + [ + -117.761376, + 34.077774 + ], + [ + -117.761119, + 34.077725 + ], + [ + -117.760678, + 34.077718 + ], + [ + -117.760251, + 34.077751 + ], + [ + -117.760004, + 34.077773 + ], + [ + -117.759925, + 34.077738 + ], + [ + -117.759874, + 34.077679 + ], + [ + -117.75981, + 34.077329 + ], + [ + -117.759708, + 34.07666 + ], + [ + -117.759634, + 34.07591 + ], + [ + -117.759597, + 34.075302 + ], + [ + -117.759576, + 34.074787 + ], + [ + -117.759576, + 34.074255 + ], + [ + -117.759522, + 34.073924 + ], + [ + -117.759397, + 34.073647 + ], + [ + -117.75936, + 34.073501 + ], + [ + -117.759323, + 34.073171 + ], + [ + -117.75933, + 34.073048 + ], + [ + -117.759335, + 34.072809 + ], + [ + -117.759367, + 34.072628 + ], + [ + -117.759496, + 34.0721 + ], + [ + -117.759536, + 34.071816 + ], + [ + -117.759561, + 34.071632 + ], + [ + -117.759572, + 34.071607 + ], + [ + -117.759604, + 34.07157 + ], + [ + -117.759664, + 34.071546 + ], + [ + -117.760512, + 34.071474 + ], + [ + -117.760936, + 34.071345 + ], + [ + -117.761328, + 34.071258 + ], + [ + -117.762159, + 34.071194 + ], + [ + -117.762383, + 34.071194 + ], + [ + -117.76247, + 34.071328 + ], + [ + -117.763356, + 34.07134 + ] + ] + ] + }, + "properties": { + "name": "Ganesha Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 493521348, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.784601, + 34.067321 + ], + [ + -117.784918, + 34.068362 + ], + [ + -117.785131, + 34.068322 + ], + [ + -117.787511, + 34.067821 + ], + [ + -117.787539, + 34.067857 + ], + [ + -117.787522, + 34.068228 + ], + [ + -117.787697, + 34.068195 + ], + [ + -117.787747, + 34.068163 + ], + [ + -117.787758, + 34.068112 + ], + [ + -117.78771, + 34.067934 + ], + [ + -117.787663, + 34.067692 + ], + [ + -117.787648, + 34.067573 + ], + [ + -117.787632, + 34.067441 + ], + [ + -117.787595, + 34.066978 + ], + [ + -117.787575, + 34.066674 + ], + [ + -117.787322, + 34.06672 + ], + [ + -117.786574, + 34.066923 + ], + [ + -117.786206, + 34.066998 + ], + [ + -117.785629, + 34.067114 + ], + [ + -117.784601, + 34.067321 + ] + ] + ] + }, + "properties": { + "name": "Kellogg Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496235115, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.5064, + 34.111469 + ], + [ + -117.506335, + 34.111429 + ], + [ + -117.506244, + 34.111405 + ], + [ + -117.506156, + 34.111387 + ], + [ + -117.506073, + 34.111379 + ], + [ + -117.506013, + 34.111379 + ], + [ + -117.505945, + 34.111396 + ], + [ + -117.505957, + 34.111452 + ], + [ + -117.505967, + 34.111481 + ], + [ + -117.505982, + 34.111509 + ], + [ + -117.506011, + 34.111536 + ], + [ + -117.506046, + 34.111558 + ], + [ + -117.506084, + 34.111576 + ], + [ + -117.506125, + 34.111591 + ], + [ + -117.50618, + 34.111598 + ], + [ + -117.506235, + 34.111592 + ], + [ + -117.506277, + 34.11158 + ], + [ + -117.506315, + 34.111565 + ], + [ + -117.506368, + 34.111522 + ], + [ + -117.5064, + 34.111469 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496235116, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.506093, + 34.111407 + ], + [ + -117.506119, + 34.111403 + ], + [ + -117.50615, + 34.111402 + ], + [ + -117.506178, + 34.111407 + ], + [ + -117.506212, + 34.111415 + ], + [ + -117.506238, + 34.111427 + ], + [ + -117.506254, + 34.111437 + ], + [ + -117.506269, + 34.111451 + ], + [ + -117.506273, + 34.111466 + ], + [ + -117.50627, + 34.111483 + ], + [ + -117.506258, + 34.111498 + ], + [ + -117.506235, + 34.111511 + ], + [ + -117.50621, + 34.111516 + ], + [ + -117.506182, + 34.111519 + ], + [ + -117.506159, + 34.111519 + ], + [ + -117.506134, + 34.111514 + ], + [ + -117.506108, + 34.111504 + ], + [ + -117.506086, + 34.111494 + ], + [ + -117.506071, + 34.111484 + ], + [ + -117.506059, + 34.111471 + ], + [ + -117.506053, + 34.111456 + ], + [ + -117.506058, + 34.111434 + ], + [ + -117.506073, + 34.111417 + ], + [ + -117.506093, + 34.111407 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496235126, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.500746, + 34.118444 + ], + [ + -117.499695, + 34.118442 + ], + [ + -117.499757, + 34.117858 + ], + [ + -117.499857, + 34.117333 + ], + [ + -117.500041, + 34.11671 + ], + [ + -117.500055, + 34.116677 + ], + [ + -117.500074, + 34.116645 + ], + [ + -117.500122, + 34.116619 + ], + [ + -117.500179, + 34.116607 + ], + [ + -117.500229, + 34.116616 + ], + [ + -117.500271, + 34.116638 + ], + [ + -117.5003, + 34.116679 + ], + [ + -117.500333, + 34.116755 + ], + [ + -117.500534, + 34.117266 + ], + [ + -117.500628, + 34.117658 + ], + [ + -117.500698, + 34.11805 + ], + [ + -117.500746, + 34.118444 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496235127, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.500173, + 34.115228 + ], + [ + -117.500134, + 34.115223 + ], + [ + -117.50009, + 34.115202 + ], + [ + -117.50006, + 34.115178 + ], + [ + -117.499975, + 34.114965 + ], + [ + -117.499849, + 34.114796 + ], + [ + -117.499741, + 34.114386 + ], + [ + -117.499695, + 34.114165 + ], + [ + -117.499665, + 34.113945 + ], + [ + -117.499653, + 34.113797 + ], + [ + -117.499651, + 34.113497 + ], + [ + -117.499684, + 34.113229 + ], + [ + -117.499743, + 34.112931 + ], + [ + -117.499867, + 34.11258 + ], + [ + -117.499965, + 34.112316 + ], + [ + -117.499985, + 34.112285 + ], + [ + -117.500013, + 34.112263 + ], + [ + -117.500053, + 34.112248 + ], + [ + -117.500095, + 34.112238 + ], + [ + -117.500145, + 34.11225 + ], + [ + -117.500188, + 34.112269 + ], + [ + -117.500217, + 34.112301 + ], + [ + -117.500233, + 34.112336 + ], + [ + -117.500293, + 34.112494 + ], + [ + -117.500424, + 34.112684 + ], + [ + -117.500522, + 34.113029 + ], + [ + -117.500583, + 34.113401 + ], + [ + -117.500613, + 34.113689 + ], + [ + -117.500611, + 34.113958 + ], + [ + -117.500561, + 34.114271 + ], + [ + -117.500535, + 34.114442 + ], + [ + -117.500484, + 34.114611 + ], + [ + -117.50041, + 34.114828 + ], + [ + -117.500327, + 34.115046 + ], + [ + -117.500279, + 34.115174 + ], + [ + -117.500252, + 34.1152 + ], + [ + -117.500212, + 34.11522 + ], + [ + -117.500173, + 34.115228 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496235817, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.512827, + 34.107656 + ], + [ + -117.512948, + 34.107779 + ], + [ + -117.513014, + 34.107726 + ], + [ + -117.51303, + 34.107707 + ], + [ + -117.513036, + 34.107684 + ], + [ + -117.513034, + 34.10766 + ], + [ + -117.513021, + 34.107639 + ], + [ + -117.513002, + 34.107621 + ], + [ + -117.512975, + 34.107609 + ], + [ + -117.512944, + 34.107604 + ], + [ + -117.512914, + 34.107609 + ], + [ + -117.512888, + 34.10762 + ], + [ + -117.512827, + 34.107656 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496237026, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.51819, + 34.108937 + ], + [ + -117.518112, + 34.108993 + ], + [ + -117.518112, + 34.109326 + ], + [ + -117.518189, + 34.109733 + ], + [ + -117.518364, + 34.10972 + ], + [ + -117.518525, + 34.109681 + ], + [ + -117.518676, + 34.109616 + ], + [ + -117.518806, + 34.109529 + ], + [ + -117.518923, + 34.109411 + ], + [ + -117.519008, + 34.109282 + ], + [ + -117.519053, + 34.109144 + ], + [ + -117.519072, + 34.109003 + ], + [ + -117.518579, + 34.108937 + ], + [ + -117.51819, + 34.108937 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496398636, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.720093, + 34.113457 + ], + [ + -117.718532, + 34.11345 + ], + [ + -117.717344, + 34.114298 + ], + [ + -117.715992, + 34.114287 + ], + [ + -117.715954, + 34.113039 + ], + [ + -117.715919, + 34.110929 + ], + [ + -117.715782, + 34.110934 + ], + [ + -117.715789, + 34.110697 + ], + [ + -117.715798, + 34.110369 + ], + [ + -117.7158, + 34.110309 + ], + [ + -117.715018, + 34.110378 + ], + [ + -117.714902, + 34.110029 + ], + [ + -117.714643, + 34.110032 + ], + [ + -117.714571, + 34.110304 + ], + [ + -117.713679, + 34.110292 + ], + [ + -117.713674, + 34.110577 + ], + [ + -117.713669, + 34.110954 + ], + [ + -117.713599, + 34.11105 + ], + [ + -117.713547, + 34.111337 + ], + [ + -117.713519, + 34.11136 + ], + [ + -117.713557, + 34.112974 + ], + [ + -117.713524, + 34.113357 + ], + [ + -117.713951, + 34.114843 + ], + [ + -117.713805, + 34.114914 + ], + [ + -117.713958, + 34.115628 + ], + [ + -117.71384, + 34.115665 + ], + [ + -117.713809, + 34.117751 + ], + [ + -117.720073, + 34.117771 + ], + [ + -117.720093, + 34.113457 + ] + ] + ] + }, + "properties": { + "name": "Rancho Santa Ana Botanic Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496984247, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.803, + 34.125958 + ], + [ + -117.803027, + 34.125824 + ], + [ + -117.803011, + 34.125518 + ], + [ + -117.802576, + 34.125509 + ], + [ + -117.802351, + 34.125507 + ], + [ + -117.800929, + 34.125513 + ], + [ + -117.800441, + 34.125505 + ], + [ + -117.800279, + 34.125462 + ], + [ + -117.800152, + 34.125402 + ], + [ + -117.799433, + 34.12538 + ], + [ + -117.797695, + 34.125869 + ], + [ + -117.797764, + 34.126433 + ], + [ + -117.797769, + 34.126503 + ], + [ + -117.79777, + 34.126555 + ], + [ + -117.797681, + 34.126574 + ], + [ + -117.797554, + 34.126609 + ], + [ + -117.797433, + 34.126676 + ], + [ + -117.797338, + 34.126752 + ], + [ + -117.797244, + 34.126846 + ], + [ + -117.797139, + 34.127007 + ], + [ + -117.797104, + 34.127096 + ], + [ + -117.797088, + 34.127152 + ], + [ + -117.79709, + 34.127301 + ], + [ + -117.797074, + 34.12762 + ], + [ + -117.797077, + 34.127756 + ], + [ + -117.797053, + 34.127853 + ], + [ + -117.796996, + 34.127975 + ], + [ + -117.796899, + 34.128109 + ], + [ + -117.796821, + 34.128178 + ], + [ + -117.796678, + 34.128276 + ], + [ + -117.796448, + 34.128359 + ], + [ + -117.796311, + 34.12839 + ], + [ + -117.796111, + 34.128393 + ], + [ + -117.795691, + 34.128348 + ], + [ + -117.795553, + 34.128341 + ], + [ + -117.795394, + 34.128341 + ], + [ + -117.795324, + 34.128357 + ], + [ + -117.795227, + 34.128395 + ], + [ + -117.795192, + 34.128419 + ], + [ + -117.795176, + 34.128457 + ], + [ + -117.79536, + 34.128644 + ], + [ + -117.795981, + 34.12949 + ], + [ + -117.79652, + 34.130242 + ], + [ + -117.796709, + 34.130476 + ], + [ + -117.797209, + 34.131347 + ], + [ + -117.797713, + 34.132295 + ], + [ + -117.797903, + 34.132993 + ], + [ + -117.798017, + 34.133206 + ], + [ + -117.800563, + 34.133193 + ], + [ + -117.801888, + 34.133181 + ], + [ + -117.801869, + 34.132661 + ], + [ + -117.801856, + 34.132264 + ], + [ + -117.802611, + 34.131899 + ], + [ + -117.803073, + 34.131606 + ], + [ + -117.802987, + 34.131322 + ], + [ + -117.803075, + 34.130553 + ], + [ + -117.803007, + 34.128488 + ], + [ + -117.802987, + 34.128409 + ], + [ + -117.802995, + 34.127799 + ], + [ + -117.802996, + 34.12622 + ], + [ + -117.803, + 34.125958 + ] + ] + ] + }, + "properties": { + "name": "Horsethief Canyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 497030049, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.595445, + 34.126541 + ], + [ + -117.595189, + 34.126543 + ], + [ + -117.595188, + 34.126444 + ], + [ + -117.595444, + 34.126442 + ], + [ + -117.595445, + 34.126541 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 497805443, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.771492, + 33.992503 + ], + [ + -117.770596, + 33.99229 + ], + [ + -117.770607, + 33.990915 + ], + [ + -117.77067, + 33.990918 + ], + [ + -117.770719, + 33.99092 + ], + [ + -117.770714, + 33.991174 + ], + [ + -117.770928, + 33.991209 + ], + [ + -117.771138, + 33.991307 + ], + [ + -117.771336, + 33.991472 + ], + [ + -117.771454, + 33.991627 + ], + [ + -117.771551, + 33.991787 + ], + [ + -117.77161, + 33.991983 + ], + [ + -117.771637, + 33.99213 + ], + [ + -117.771588, + 33.992361 + ], + [ + -117.771551, + 33.992517 + ], + [ + -117.771492, + 33.992503 + ] + ] + ] + }, + "properties": { + "name": "Terrace Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 497807591, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.484208, + 34.15495 + ], + [ + -117.48423, + 34.15495 + ], + [ + -117.484251, + 34.154955 + ], + [ + -117.484269, + 34.154966 + ], + [ + -117.484283, + 34.15498 + ], + [ + -117.48429, + 34.154998 + ], + [ + -117.48429, + 34.155016 + ], + [ + -117.484283, + 34.155033 + ], + [ + -117.484268, + 34.155049 + ], + [ + -117.484248, + 34.15506 + ], + [ + -117.484225, + 34.155064 + ], + [ + -117.484201, + 34.155062 + ], + [ + -117.484179, + 34.155053 + ], + [ + -117.484163, + 34.155038 + ], + [ + -117.484154, + 34.15502 + ], + [ + -117.484152, + 34.155 + ], + [ + -117.484158, + 34.154983 + ], + [ + -117.484171, + 34.154967 + ], + [ + -117.484188, + 34.154956 + ], + [ + -117.484208, + 34.15495 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 497845365, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.771816, + 33.9824 + ], + [ + -117.771989, + 33.982246 + ], + [ + -117.772059, + 33.982176 + ], + [ + -117.772157, + 33.982137 + ], + [ + -117.772265, + 33.982056 + ], + [ + -117.772386, + 33.982044 + ], + [ + -117.772335, + 33.981936 + ], + [ + -117.772279, + 33.981796 + ], + [ + -117.772307, + 33.981642 + ], + [ + -117.772367, + 33.981514 + ], + [ + -117.772442, + 33.981413 + ], + [ + -117.772507, + 33.981409 + ], + [ + -117.772587, + 33.981374 + ], + [ + -117.77268, + 33.981351 + ], + [ + -117.772802, + 33.981336 + ], + [ + -117.77282, + 33.981239 + ], + [ + -117.772792, + 33.981181 + ], + [ + -117.77276, + 33.981138 + ], + [ + -117.772699, + 33.981119 + ], + [ + -117.772638, + 33.981084 + ], + [ + -117.77254, + 33.981088 + ], + [ + -117.772465, + 33.981115 + ], + [ + -117.772335, + 33.981146 + ], + [ + -117.772064, + 33.981223 + ], + [ + -117.771882, + 33.981281 + ], + [ + -117.77177, + 33.98132 + ], + [ + -117.771658, + 33.981394 + ], + [ + -117.771545, + 33.981483 + ], + [ + -117.771462, + 33.981595 + ], + [ + -117.77109, + 33.981475 + ], + [ + -117.771062, + 33.981608 + ], + [ + -117.771056, + 33.981718 + ], + [ + -117.77106, + 33.981848 + ], + [ + -117.771261, + 33.981826 + ], + [ + -117.771432, + 33.981833 + ], + [ + -117.771471, + 33.981846 + ], + [ + -117.771816, + 33.9824 + ] + ] + ] + }, + "properties": { + "name": "Sunset Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 502468194, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.615597, + 34.106531 + ], + [ + -117.615636, + 34.106629 + ], + [ + -117.615689, + 34.106713 + ], + [ + -117.615946, + 34.106648 + ], + [ + -117.616336, + 34.106642 + ], + [ + -117.616455, + 34.106647 + ], + [ + -117.616679, + 34.106815 + ], + [ + -117.617254, + 34.106481 + ], + [ + -117.618718, + 34.105839 + ], + [ + -117.619327, + 34.105656 + ], + [ + -117.619866, + 34.105646 + ], + [ + -117.619775, + 34.104979 + ], + [ + -117.619604, + 34.104997 + ], + [ + -117.61942, + 34.10502 + ], + [ + -117.619197, + 34.105058 + ], + [ + -117.618976, + 34.105101 + ], + [ + -117.618526, + 34.105222 + ], + [ + -117.618109, + 34.105357 + ], + [ + -117.61769, + 34.105543 + ], + [ + -117.617477, + 34.105653 + ], + [ + -117.61727, + 34.10577 + ], + [ + -117.616955, + 34.10594 + ], + [ + -117.616522, + 34.106176 + ], + [ + -117.616162, + 34.106337 + ], + [ + -117.615885, + 34.106437 + ], + [ + -117.615742, + 34.106485 + ], + [ + -117.615597, + 34.106531 + ] + ] + ] + }, + "properties": { + "name": "Route 66 Trailhead Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 502786213, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.252016, + 34.049687 + ], + [ + -117.252011, + 34.049959 + ], + [ + -117.251976, + 34.050054 + ], + [ + -117.25203, + 34.050096 + ], + [ + -117.252172, + 34.050125 + ], + [ + -117.252285, + 34.050101 + ], + [ + -117.252268, + 34.049541 + ], + [ + -117.252239, + 34.048581 + ], + [ + -117.251787, + 34.048578 + ], + [ + -117.250063, + 34.048567 + ], + [ + -117.249986, + 34.048567 + ], + [ + -117.250037, + 34.048585 + ], + [ + -117.250657, + 34.048625 + ], + [ + -117.250883, + 34.048693 + ], + [ + -117.251582, + 34.048761 + ], + [ + -117.251872, + 34.048983 + ], + [ + -117.252022, + 34.049372 + ], + [ + -117.252016, + 34.049687 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 502786237, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.247807, + 34.048217 + ], + [ + -117.247863, + 34.048172 + ], + [ + -117.247866, + 34.047901 + ], + [ + -117.247713, + 34.047901 + ], + [ + -117.247713, + 34.047936 + ], + [ + -117.247713, + 34.047981 + ], + [ + -117.246903, + 34.047985 + ], + [ + -117.246903, + 34.048077 + ], + [ + -117.246586, + 34.048079 + ], + [ + -117.246586, + 34.047976 + ], + [ + -117.246388, + 34.047976 + ], + [ + -117.246388, + 34.048179 + ], + [ + -117.246463, + 34.048176 + ], + [ + -117.246466, + 34.048223 + ], + [ + -117.247807, + 34.048217 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 503473395, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.58258, + 34.114627 + ], + [ + -117.582543, + 34.114631 + ], + [ + -117.582506, + 34.11463 + ], + [ + -117.582474, + 34.114626 + ], + [ + -117.582448, + 34.114615 + ], + [ + -117.582434, + 34.114594 + ], + [ + -117.58243, + 34.114577 + ], + [ + -117.582433, + 34.114544 + ], + [ + -117.582449, + 34.114503 + ], + [ + -117.582466, + 34.114477 + ], + [ + -117.582488, + 34.114464 + ], + [ + -117.582505, + 34.114461 + ], + [ + -117.582542, + 34.114463 + ], + [ + -117.582565, + 34.114467 + ], + [ + -117.582578, + 34.114477 + ], + [ + -117.582581, + 34.114495 + ], + [ + -117.582583, + 34.114519 + ], + [ + -117.582592, + 34.114536 + ], + [ + -117.582604, + 34.114551 + ], + [ + -117.582622, + 34.114561 + ], + [ + -117.582633, + 34.114569 + ], + [ + -117.582639, + 34.11458 + ], + [ + -117.582642, + 34.114595 + ], + [ + -117.582636, + 34.114609 + ], + [ + -117.582621, + 34.114619 + ], + [ + -117.582602, + 34.114624 + ], + [ + -117.58258, + 34.114627 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 510475133, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.767274, + 34.050931 + ], + [ + -117.765219, + 34.050985 + ], + [ + -117.765157, + 34.049356 + ], + [ + -117.767211, + 34.049302 + ], + [ + -117.767274, + 34.050931 + ] + ] + ] + }, + "properties": { + "name": "Welch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 524244507, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.470413, + 34.129827 + ], + [ + -117.470071, + 34.129826 + ], + [ + -117.470072, + 34.12966 + ], + [ + -117.470413, + 34.129661 + ], + [ + -117.470413, + 34.129827 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 524509970, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.529352, + 34.129312 + ], + [ + -117.529352, + 34.129237 + ], + [ + -117.529343, + 34.129216 + ], + [ + -117.529324, + 34.129197 + ], + [ + -117.529299, + 34.129188 + ], + [ + -117.529271, + 34.129185 + ], + [ + -117.529244, + 34.129188 + ], + [ + -117.529222, + 34.129197 + ], + [ + -117.529206, + 34.129211 + ], + [ + -117.529193, + 34.129233 + ], + [ + -117.529192, + 34.12931 + ], + [ + -117.529199, + 34.129331 + ], + [ + -117.529216, + 34.129347 + ], + [ + -117.529243, + 34.129361 + ], + [ + -117.529275, + 34.129363 + ], + [ + -117.529309, + 34.129358 + ], + [ + -117.529332, + 34.129345 + ], + [ + -117.529345, + 34.129329 + ], + [ + -117.529352, + 34.129312 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 524510009, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.529645, + 34.129221 + ], + [ + -117.529623, + 34.129221 + ], + [ + -117.5296, + 34.129213 + ], + [ + -117.529582, + 34.129202 + ], + [ + -117.529568, + 34.129186 + ], + [ + -117.529558, + 34.129171 + ], + [ + -117.529547, + 34.129155 + ], + [ + -117.529533, + 34.12914 + ], + [ + -117.529516, + 34.129131 + ], + [ + -117.529499, + 34.129124 + ], + [ + -117.529495, + 34.129116 + ], + [ + -117.529493, + 34.129104 + ], + [ + -117.529494, + 34.129092 + ], + [ + -117.529499, + 34.129084 + ], + [ + -117.529525, + 34.12908 + ], + [ + -117.529561, + 34.129077 + ], + [ + -117.529587, + 34.129072 + ], + [ + -117.52976, + 34.128974 + ], + [ + -117.529773, + 34.12896 + ], + [ + -117.529775, + 34.128946 + ], + [ + -117.529776, + 34.12893 + ], + [ + -117.529782, + 34.128914 + ], + [ + -117.529793, + 34.128905 + ], + [ + -117.52982, + 34.128901 + ], + [ + -117.529845, + 34.128903 + ], + [ + -117.529868, + 34.128912 + ], + [ + -117.529882, + 34.128924 + ], + [ + -117.529889, + 34.128944 + ], + [ + -117.529885, + 34.128967 + ], + [ + -117.529872, + 34.129001 + ], + [ + -117.529866, + 34.129024 + ], + [ + -117.529866, + 34.129043 + ], + [ + -117.529861, + 34.129063 + ], + [ + -117.529841, + 34.129083 + ], + [ + -117.529812, + 34.129098 + ], + [ + -117.529784, + 34.1291 + ], + [ + -117.529759, + 34.129109 + ], + [ + -117.529743, + 34.129124 + ], + [ + -117.529737, + 34.129153 + ], + [ + -117.529733, + 34.129178 + ], + [ + -117.529717, + 34.129199 + ], + [ + -117.529694, + 34.129213 + ], + [ + -117.529672, + 34.129219 + ], + [ + -117.529645, + 34.129221 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 544212348, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.558619, + 33.951662 + ], + [ + -117.562267, + 33.95169 + ], + [ + -117.562501, + 33.951749 + ], + [ + -117.566807, + 33.951738 + ], + [ + -117.567038, + 33.951289 + ], + [ + -117.567093, + 33.94771 + ], + [ + -117.56665, + 33.947723 + ], + [ + -117.565634, + 33.947953 + ], + [ + -117.564285, + 33.947881 + ], + [ + -117.562605, + 33.947556 + ], + [ + -117.561794, + 33.947431 + ], + [ + -117.560074, + 33.947179 + ], + [ + -117.559018, + 33.947172 + ], + [ + -117.558702, + 33.947346 + ], + [ + -117.558405, + 33.947339 + ], + [ + -117.558619, + 33.951662 + ] + ] + ] + }, + "properties": { + "name": "Eastvale Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 545284789, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.545981, + 33.962988 + ], + [ + -117.545986, + 33.96281 + ], + [ + -117.546627, + 33.962761 + ], + [ + -117.546695, + 33.962915 + ], + [ + -117.546431, + 33.962975 + ], + [ + -117.546289, + 33.962988 + ], + [ + -117.545981, + 33.962988 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546478928, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.581147, + 34.001051 + ], + [ + -117.581156, + 34.001658 + ], + [ + -117.580708, + 34.001665 + ], + [ + -117.579924, + 34.002258 + ], + [ + -117.579907, + 34.00168 + ], + [ + -117.580053, + 34.00143 + ], + [ + -117.580596, + 34.001072 + ], + [ + -117.581147, + 34.001051 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546478929, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.581147, + 34.001722 + ], + [ + -117.581147, + 34.002115 + ], + [ + -117.580742, + 34.002115 + ], + [ + -117.580742, + 34.001722 + ], + [ + -117.581147, + 34.001722 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546508044, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.605137, + 34.120448 + ], + [ + -117.605119, + 34.120459 + ], + [ + -117.605098, + 34.120467 + ], + [ + -117.605082, + 34.120468 + ], + [ + -117.605064, + 34.120467 + ], + [ + -117.605048, + 34.120462 + ], + [ + -117.605031, + 34.120452 + ], + [ + -117.605019, + 34.120443 + ], + [ + -117.60501, + 34.12043 + ], + [ + -117.605003, + 34.120415 + ], + [ + -117.605001, + 34.120363 + ], + [ + -117.605003, + 34.120351 + ], + [ + -117.605016, + 34.120336 + ], + [ + -117.60503, + 34.120328 + ], + [ + -117.605045, + 34.12032 + ], + [ + -117.605064, + 34.120314 + ], + [ + -117.60508, + 34.120311 + ], + [ + -117.6051, + 34.120314 + ], + [ + -117.60512, + 34.12032 + ], + [ + -117.605137, + 34.120332 + ], + [ + -117.605149, + 34.120345 + ], + [ + -117.605158, + 34.120365 + ], + [ + -117.605158, + 34.12042 + ], + [ + -117.605149, + 34.120435 + ], + [ + -117.605137, + 34.120448 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 549831711, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.737986, + 34.11796 + ], + [ + -117.740534, + 34.117992 + ], + [ + -117.740893, + 34.117631 + ], + [ + -117.740639, + 34.117398 + ], + [ + -117.740694, + 34.116786 + ], + [ + -117.74033, + 34.116782 + ], + [ + -117.740286, + 34.116727 + ], + [ + -117.740093, + 34.116732 + ], + [ + -117.740104, + 34.11659 + ], + [ + -117.740016, + 34.11659 + ], + [ + -117.740038, + 34.11612 + ], + [ + -117.738113, + 34.116079 + ], + [ + -117.737986, + 34.11796 + ] + ] + ] + }, + "properties": { + "name": "Griffith Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 550675733, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.77091, + 34.120095 + ], + [ + -117.771006, + 34.120362 + ], + [ + -117.771001, + 34.120757 + ], + [ + -117.769472, + 34.120757 + ], + [ + -117.769472, + 34.120455 + ], + [ + -117.768812, + 34.12046 + ], + [ + -117.768817, + 34.12026 + ], + [ + -117.768378, + 34.120246 + ], + [ + -117.768764, + 34.120104 + ], + [ + -117.770969, + 34.120007 + ], + [ + -117.77092, + 34.120047 + ], + [ + -117.77091, + 34.120095 + ] + ] + ] + }, + "properties": { + "name": "Emerald Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 551554667, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.7486, + 34.007687 + ], + [ + -117.748641, + 34.006976 + ], + [ + -117.748459, + 34.006967 + ], + [ + -117.748261, + 34.006962 + ], + [ + -117.748081, + 34.006964 + ], + [ + -117.747792, + 34.006974 + ], + [ + -117.747502, + 34.006985 + ], + [ + -117.747315, + 34.006994 + ], + [ + -117.746841, + 34.007012 + ], + [ + -117.746799, + 34.007015 + ], + [ + -117.746772, + 34.007035 + ], + [ + -117.746774, + 34.007081 + ], + [ + -117.746802, + 34.007661 + ], + [ + -117.74681, + 34.007714 + ], + [ + -117.746832, + 34.007751 + ], + [ + -117.746956, + 34.007737 + ], + [ + -117.747127, + 34.007716 + ], + [ + -117.747367, + 34.007691 + ], + [ + -117.747695, + 34.007675 + ], + [ + -117.748051, + 34.007666 + ], + [ + -117.748446, + 34.00768 + ], + [ + -117.7486, + 34.007687 + ] + ] + ] + }, + "properties": { + "name": "Calle San Marcos Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 555015114, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.791693, + 34.014784 + ], + [ + -117.791677, + 34.01481 + ], + [ + -117.791634, + 34.014831 + ], + [ + -117.791579, + 34.014846 + ], + [ + -117.791516, + 34.014854 + ], + [ + -117.791324, + 34.014874 + ], + [ + -117.791085, + 34.014901 + ], + [ + -117.790859, + 34.014945 + ], + [ + -117.790653, + 34.015015 + ], + [ + -117.79041, + 34.015119 + ], + [ + -117.79028, + 34.015203 + ], + [ + -117.789185, + 34.014326 + ], + [ + -117.789124, + 34.01426 + ], + [ + -117.789101, + 34.014208 + ], + [ + -117.789089, + 34.014163 + ], + [ + -117.789089, + 34.014123 + ], + [ + -117.789091, + 34.014065 + ], + [ + -117.789105, + 34.01401 + ], + [ + -117.78914, + 34.013933 + ], + [ + -117.789152, + 34.013892 + ], + [ + -117.789157, + 34.013854 + ], + [ + -117.78918, + 34.013821 + ], + [ + -117.789215, + 34.013784 + ], + [ + -117.789259, + 34.013761 + ], + [ + -117.789334, + 34.01373 + ], + [ + -117.78939, + 34.01371 + ], + [ + -117.789451, + 34.013708 + ], + [ + -117.789523, + 34.013708 + ], + [ + -117.789572, + 34.013687 + ], + [ + -117.789614, + 34.013668 + ], + [ + -117.789649, + 34.013664 + ], + [ + -117.789703, + 34.01365 + ], + [ + -117.78975, + 34.013623 + ], + [ + -117.789789, + 34.013602 + ], + [ + -117.789808, + 34.013579 + ], + [ + -117.789845, + 34.013556 + ], + [ + -117.789892, + 34.013532 + ], + [ + -117.789924, + 34.013508 + ], + [ + -117.78995, + 34.013489 + ], + [ + -117.789969, + 34.013474 + ], + [ + -117.790001, + 34.01346 + ], + [ + -117.790104, + 34.013418 + ], + [ + -117.790459, + 34.012967 + ], + [ + -117.790492, + 34.01295 + ], + [ + -117.790525, + 34.01292 + ], + [ + -117.790546, + 34.012884 + ], + [ + -117.790556, + 34.012845 + ], + [ + -117.790579, + 34.012756 + ], + [ + -117.790586, + 34.012714 + ], + [ + -117.790598, + 34.01267 + ], + [ + -117.790607, + 34.012634 + ], + [ + -117.790601, + 34.012599 + ], + [ + -117.790579, + 34.012498 + ], + [ + -117.790567, + 34.012438 + ], + [ + -117.790567, + 34.0124 + ], + [ + -117.790572, + 34.012374 + ], + [ + -117.790553, + 34.012235 + ], + [ + -117.79044, + 34.012085 + ], + [ + -117.79014, + 34.012056 + ], + [ + -117.790089, + 34.012046 + ], + [ + -117.790019, + 34.012018 + ], + [ + -117.78986, + 34.01194 + ], + [ + -117.789767, + 34.011892 + ], + [ + -117.789722, + 34.011856 + ], + [ + -117.78969, + 34.011817 + ], + [ + -117.789668, + 34.011771 + ], + [ + -117.789619, + 34.011759 + ], + [ + -117.789566, + 34.011743 + ], + [ + -117.789263, + 34.011576 + ], + [ + -117.789067, + 34.011401 + ], + [ + -117.789153, + 34.011291 + ], + [ + -117.78952, + 34.011377 + ], + [ + -117.789691, + 34.011344 + ], + [ + -117.789921, + 34.011455 + ], + [ + -117.790104, + 34.011322 + ], + [ + -117.790219, + 34.011446 + ], + [ + -117.790352, + 34.011563 + ], + [ + -117.790467, + 34.011645 + ], + [ + -117.790679, + 34.011773 + ], + [ + -117.791549, + 34.012301 + ], + [ + -117.791685, + 34.012387 + ], + [ + -117.791791, + 34.012465 + ], + [ + -117.791883, + 34.012553 + ], + [ + -117.791961, + 34.012654 + ], + [ + -117.792035, + 34.012784 + ], + [ + -117.792081, + 34.01291 + ], + [ + -117.792097, + 34.013009 + ], + [ + -117.7921, + 34.013118 + ], + [ + -117.792084, + 34.01324 + ], + [ + -117.792054, + 34.01334 + ], + [ + -117.792007, + 34.013464 + ], + [ + -117.79195, + 34.013628 + ], + [ + -117.791821, + 34.014011 + ], + [ + -117.791757, + 34.014202 + ], + [ + -117.791708, + 34.014382 + ], + [ + -117.79169, + 34.014529 + ], + [ + -117.791692, + 34.014672 + ], + [ + -117.791693, + 34.014784 + ] + ] + ] + }, + "properties": { + "name": "Pantera Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 555173395, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.79904, + 33.996304 + ], + [ + -117.799339, + 33.99639 + ], + [ + -117.799443, + 33.996504 + ], + [ + -117.799554, + 33.996768 + ], + [ + -117.79971, + 33.99699 + ], + [ + -117.799828, + 33.997119 + ], + [ + -117.799997, + 33.997281 + ], + [ + -117.80014, + 33.997368 + ], + [ + -117.800342, + 33.997443 + ], + [ + -117.800531, + 33.99747 + ], + [ + -117.800785, + 33.997514 + ], + [ + -117.801124, + 33.997584 + ], + [ + -117.801345, + 33.997676 + ], + [ + -117.801209, + 33.997908 + ], + [ + -117.801104, + 33.998108 + ], + [ + -117.801104, + 33.998297 + ], + [ + -117.80113, + 33.998442 + ], + [ + -117.801241, + 33.998518 + ], + [ + -117.801404, + 33.998518 + ], + [ + -117.801541, + 33.998486 + ], + [ + -117.801769, + 33.998626 + ], + [ + -117.801905, + 33.998696 + ], + [ + -117.802081, + 33.998788 + ], + [ + -117.802068, + 33.998912 + ], + [ + -117.802199, + 33.998966 + ], + [ + -117.802355, + 33.99895 + ], + [ + -117.802511, + 33.999258 + ], + [ + -117.802615, + 33.999452 + ], + [ + -117.80272, + 33.999582 + ], + [ + -117.80283, + 33.999765 + ], + [ + -117.802974, + 33.9999 + ], + [ + -117.803117, + 34.000014 + ], + [ + -117.803397, + 34.0001 + ], + [ + -117.80356, + 33.99996 + ], + [ + -117.803645, + 34.000095 + ], + [ + -117.803736, + 34.000214 + ], + [ + -117.803879, + 34.000246 + ], + [ + -117.803957, + 34.000235 + ], + [ + -117.804074, + 34.000273 + ], + [ + -117.804205, + 34.000327 + ], + [ + -117.804315, + 34.000435 + ], + [ + -117.804348, + 34.000581 + ], + [ + -117.804335, + 34.000759 + ], + [ + -117.804283, + 34.000889 + ], + [ + -117.804276, + 34.001029 + ], + [ + -117.804296, + 34.00118 + ], + [ + -117.804296, + 34.001304 + ], + [ + -117.804172, + 34.001391 + ], + [ + -117.803957, + 34.001418 + ], + [ + -117.80382, + 34.001504 + ], + [ + -117.803703, + 34.001688 + ], + [ + -117.803586, + 34.001855 + ], + [ + -117.803573, + 34.00199 + ], + [ + -117.803606, + 34.002184 + ], + [ + -117.803573, + 34.002352 + ], + [ + -117.803606, + 34.002519 + ], + [ + -117.80371, + 34.00266 + ], + [ + -117.803977, + 34.002822 + ], + [ + -117.804192, + 34.002973 + ], + [ + -117.804263, + 34.002908 + ], + [ + -117.804439, + 34.003005 + ], + [ + -117.804498, + 34.003119 + ], + [ + -117.804511, + 34.003243 + ], + [ + -117.804465, + 34.003329 + ], + [ + -117.804283, + 34.003329 + ], + [ + -117.804003, + 34.003351 + ], + [ + -117.803788, + 34.0034 + ], + [ + -117.803527, + 34.003529 + ], + [ + -117.803397, + 34.003686 + ], + [ + -117.80328, + 34.003858 + ], + [ + -117.803234, + 34.004101 + ], + [ + -117.803169, + 34.004517 + ], + [ + -117.803208, + 34.004895 + ], + [ + -117.803273, + 34.005014 + ], + [ + -117.803228, + 34.005106 + ], + [ + -117.803143, + 34.005262 + ], + [ + -117.803404, + 34.005316 + ], + [ + -117.803586, + 34.005316 + ], + [ + -117.80384, + 34.005354 + ], + [ + -117.803996, + 34.00523 + ], + [ + -117.804133, + 34.005224 + ], + [ + -117.804276, + 34.005279 + ], + [ + -117.804426, + 34.005424 + ], + [ + -117.80453, + 34.005516 + ], + [ + -117.804608, + 34.005582 + ], + [ + -117.80468, + 34.005652 + ], + [ + -117.804879, + 34.005796 + ], + [ + -117.804938, + 34.006053 + ], + [ + -117.804993, + 34.006249 + ], + [ + -117.804942, + 34.006284 + ], + [ + -117.804938, + 34.006348 + ], + [ + -117.805006, + 34.006372 + ], + [ + -117.805099, + 34.006365 + ], + [ + -117.805222, + 34.006309 + ], + [ + -117.805286, + 34.006309 + ], + [ + -117.805345, + 34.006372 + ], + [ + -117.805481, + 34.006604 + ], + [ + -117.80562, + 34.006762 + ], + [ + -117.805832, + 34.006917 + ], + [ + -117.806167, + 34.00705 + ], + [ + -117.806455, + 34.007107 + ], + [ + -117.806667, + 34.0071 + ], + [ + -117.806854, + 34.007071 + ], + [ + -117.80704, + 34.007026 + ], + [ + -117.807256, + 34.00692 + ], + [ + -117.807358, + 34.006871 + ], + [ + -117.807532, + 34.006815 + ], + [ + -117.807689, + 34.006787 + ], + [ + -117.807871, + 34.00678 + ], + [ + -117.808002, + 34.006797 + ], + [ + -117.80804, + 34.006847 + ], + [ + -117.808023, + 34.006941 + ], + [ + -117.807968, + 34.0073 + ], + [ + -117.807943, + 34.007609 + ], + [ + -117.807926, + 34.008002 + ], + [ + -117.807909, + 34.008505 + ], + [ + -117.807884, + 34.008909 + ], + [ + -117.807871, + 34.008993 + ], + [ + -117.807837, + 34.00913 + ], + [ + -117.807807, + 34.009225 + ], + [ + -117.807786, + 34.009323 + ], + [ + -117.807769, + 34.009376 + ], + [ + -117.807693, + 34.009432 + ], + [ + -117.807621, + 34.009418 + ], + [ + -117.807549, + 34.009397 + ], + [ + -117.80746, + 34.009387 + ], + [ + -117.807358, + 34.009383 + ], + [ + -117.807294, + 34.00939 + ], + [ + -117.807176, + 34.009327 + ], + [ + -117.80693, + 34.009204 + ], + [ + -117.806697, + 34.009134 + ], + [ + -117.806417, + 34.009109 + ], + [ + -117.806121, + 34.009109 + ], + [ + -117.805951, + 34.009165 + ], + [ + -117.805735, + 34.009246 + ], + [ + -117.805587, + 34.009344 + ], + [ + -117.805481, + 34.009422 + ], + [ + -117.805404, + 34.009513 + ], + [ + -117.805328, + 34.009538 + ], + [ + -117.805273, + 34.009503 + ], + [ + -117.805336, + 34.009418 + ], + [ + -117.805387, + 34.009327 + ], + [ + -117.805442, + 34.009236 + ], + [ + -117.805506, + 34.009183 + ], + [ + -117.805536, + 34.009144 + ], + [ + -117.805519, + 34.009074 + ], + [ + -117.805451, + 34.009007 + ], + [ + -117.805425, + 34.008933 + ], + [ + -117.805425, + 34.008839 + ], + [ + -117.80543, + 34.008768 + ], + [ + -117.805408, + 34.008684 + ], + [ + -117.805294, + 34.00854 + ], + [ + -117.805095, + 34.008357 + ], + [ + -117.804959, + 34.008371 + ], + [ + -117.804853, + 34.008399 + ], + [ + -117.804807, + 34.008466 + ], + [ + -117.804743, + 34.00861 + ], + [ + -117.804675, + 34.008726 + ], + [ + -117.804586, + 34.008811 + ], + [ + -117.804489, + 34.008853 + ], + [ + -117.804442, + 34.008891 + ], + [ + -117.804374, + 34.008933 + ], + [ + -117.804184, + 34.008993 + ], + [ + -117.803921, + 34.008965 + ], + [ + -117.803849, + 34.008983 + ], + [ + -117.80373, + 34.008983 + ], + [ + -117.80365, + 34.009021 + ], + [ + -117.803629, + 34.00907 + ], + [ + -117.803484, + 34.009208 + ], + [ + -117.803285, + 34.009281 + ], + [ + -117.802938, + 34.009373 + ], + [ + -117.802645, + 34.009432 + ], + [ + -117.802378, + 34.009467 + ], + [ + -117.802145, + 34.009513 + ], + [ + -117.801827, + 34.009608 + ], + [ + -117.801662, + 34.009724 + ], + [ + -117.801518, + 34.009773 + ], + [ + -117.801285, + 34.010037 + ], + [ + -117.801785, + 34.010398 + ], + [ + -117.801933, + 34.010398 + ], + [ + -117.802035, + 34.010402 + ], + [ + -117.802213, + 34.010377 + ], + [ + -117.802633, + 34.010265 + ], + [ + -117.803294, + 34.010072 + ], + [ + -117.803586, + 34.009998 + ], + [ + -117.803789, + 34.009928 + ], + [ + -117.804078, + 34.009836 + ], + [ + -117.804264, + 34.009791 + ], + [ + -117.804552, + 34.009749 + ], + [ + -117.804773, + 34.009784 + ], + [ + -117.804688, + 34.009882 + ], + [ + -117.804485, + 34.009829 + ], + [ + -117.804412, + 34.009864 + ], + [ + -117.804213, + 34.009864 + ], + [ + -117.804188, + 34.009907 + ], + [ + -117.803929, + 34.009949 + ], + [ + -117.803891, + 34.010012 + ], + [ + -117.803709, + 34.010051 + ], + [ + -117.803671, + 34.010093 + ], + [ + -117.803518, + 34.010142 + ], + [ + -117.803472, + 34.01017 + ], + [ + -117.803476, + 34.010216 + ], + [ + -117.803306, + 34.010265 + ], + [ + -117.803273, + 34.010314 + ], + [ + -117.803116, + 34.010346 + ], + [ + -117.803082, + 34.010395 + ], + [ + -117.802916, + 34.010441 + ], + [ + -117.802904, + 34.010479 + ], + [ + -117.802713, + 34.010521 + ], + [ + -117.802692, + 34.010553 + ], + [ + -117.802522, + 34.010606 + ], + [ + -117.802497, + 34.010634 + ], + [ + -117.802323, + 34.010672 + ], + [ + -117.802315, + 34.010704 + ], + [ + -117.802137, + 34.01075 + ], + [ + -117.802128, + 34.010792 + ], + [ + -117.80198, + 34.010816 + ], + [ + -117.801933, + 34.010852 + ], + [ + -117.801768, + 34.010852 + ], + [ + -117.801734, + 34.010873 + ], + [ + -117.801526, + 34.010855 + ], + [ + -117.800916, + 34.01049 + ], + [ + -117.800679, + 34.010339 + ], + [ + -117.800433, + 34.010131 + ], + [ + -117.800361, + 34.010117 + ], + [ + -117.800285, + 34.010146 + ], + [ + -117.800217, + 34.010209 + ], + [ + -117.800111, + 34.010328 + ], + [ + -117.800026, + 34.010377 + ], + [ + -117.79984, + 34.010346 + ], + [ + -117.799785, + 34.010353 + ], + [ + -117.799729, + 34.010381 + ], + [ + -117.799717, + 34.010465 + ], + [ + -117.7997, + 34.010634 + ], + [ + -117.799729, + 34.010757 + ], + [ + -117.799835, + 34.010873 + ], + [ + -117.79992, + 34.010925 + ], + [ + -117.80009, + 34.010989 + ], + [ + -117.800166, + 34.011027 + ], + [ + -117.800242, + 34.011147 + ], + [ + -117.80006, + 34.011603 + ], + [ + -117.800157, + 34.012011 + ], + [ + -117.800772, + 34.011941 + ], + [ + -117.800861, + 34.011913 + ], + [ + -117.800924, + 34.011888 + ], + [ + -117.801018, + 34.011916 + ], + [ + -117.800954, + 34.011955 + ], + [ + -117.800785, + 34.012064 + ], + [ + -117.80056, + 34.012095 + ], + [ + -117.800518, + 34.012158 + ], + [ + -117.800344, + 34.012176 + ], + [ + -117.80031, + 34.012208 + ], + [ + -117.800221, + 34.012211 + ], + [ + -117.800098, + 34.012236 + ], + [ + -117.800073, + 34.01232 + ], + [ + -117.800119, + 34.012404 + ], + [ + -117.800246, + 34.012566 + ], + [ + -117.800039, + 34.012629 + ], + [ + -117.799907, + 34.012552 + ], + [ + -117.799403, + 34.012334 + ], + [ + -117.799229, + 34.012302 + ], + [ + -117.799034, + 34.012433 + ], + [ + -117.798933, + 34.012471 + ], + [ + -117.798594, + 34.011951 + ], + [ + -117.798492, + 34.012078 + ], + [ + -117.798348, + 34.012158 + ], + [ + -117.798178, + 34.012239 + ], + [ + -117.79806, + 34.012267 + ], + [ + -117.798619, + 34.012766 + ], + [ + -117.798564, + 34.012791 + ], + [ + -117.798238, + 34.012531 + ], + [ + -117.798182, + 34.012496 + ], + [ + -117.798136, + 34.012531 + ], + [ + -117.798182, + 34.012608 + ], + [ + -117.79853, + 34.012858 + ], + [ + -117.79856, + 34.012924 + ], + [ + -117.798513, + 34.013002 + ], + [ + -117.798348, + 34.013279 + ], + [ + -117.798267, + 34.013458 + ], + [ + -117.798297, + 34.013578 + ], + [ + -117.797945, + 34.01467 + ], + [ + -117.797801, + 34.014698 + ], + [ + -117.797911, + 34.014927 + ], + [ + -117.797725, + 34.014972 + ], + [ + -117.797615, + 34.015215 + ], + [ + -117.797483, + 34.015208 + ], + [ + -117.797424, + 34.015138 + ], + [ + -117.797348, + 34.015022 + ], + [ + -117.797267, + 34.014934 + ], + [ + -117.797165, + 34.014857 + ], + [ + -117.79711, + 34.014846 + ], + [ + -117.796775, + 34.015159 + ], + [ + -117.796487, + 34.015116 + ], + [ + -117.796165, + 34.014474 + ], + [ + -117.79608, + 34.014389 + ], + [ + -117.796008, + 34.014277 + ], + [ + -117.795962, + 34.014196 + ], + [ + -117.795873, + 34.014027 + ], + [ + -117.795746, + 34.013838 + ], + [ + -117.795657, + 34.013655 + ], + [ + -117.795606, + 34.013508 + ], + [ + -117.795546, + 34.013332 + ], + [ + -117.79547, + 34.013149 + ], + [ + -117.795373, + 34.012643 + ], + [ + -117.795267, + 34.01206 + ], + [ + -117.79683, + 34.011937 + ], + [ + -117.797365, + 34.011839 + ], + [ + -117.797576, + 34.011716 + ], + [ + -117.797788, + 34.011582 + ], + [ + -117.798013, + 34.011442 + ], + [ + -117.798284, + 34.011185 + ], + [ + -117.798386, + 34.011069 + ], + [ + -117.79828, + 34.010985 + ], + [ + -117.798369, + 34.010824 + ], + [ + -117.798352, + 34.010753 + ], + [ + -117.798322, + 34.010697 + ], + [ + -117.798284, + 34.010528 + ], + [ + -117.798356, + 34.010511 + ], + [ + -117.798187, + 34.010075 + ], + [ + -117.797598, + 34.010391 + ], + [ + -117.79756, + 34.010377 + ], + [ + -117.797288, + 34.010585 + ], + [ + -117.797157, + 34.010518 + ], + [ + -117.797055, + 34.010613 + ], + [ + -117.797034, + 34.010757 + ], + [ + -117.797051, + 34.010781 + ], + [ + -117.796945, + 34.010992 + ], + [ + -117.796814, + 34.011059 + ], + [ + -117.796754, + 34.011119 + ], + [ + -117.796669, + 34.011087 + ], + [ + -117.796521, + 34.011136 + ], + [ + -117.796097, + 34.011189 + ], + [ + -117.795652, + 34.011235 + ], + [ + -117.795313, + 34.011263 + ], + [ + -117.794737, + 34.011298 + ], + [ + -117.794635, + 34.010767 + ], + [ + -117.795076, + 34.010708 + ], + [ + -117.795072, + 34.010504 + ], + [ + -117.79583, + 34.010493 + ], + [ + -117.795809, + 34.01017 + ], + [ + -117.795716, + 34.010177 + ], + [ + -117.795474, + 34.010012 + ], + [ + -117.795368, + 34.009963 + ], + [ + -117.795173, + 34.009984 + ], + [ + -117.794974, + 34.010033 + ], + [ + -117.794898, + 34.009808 + ], + [ + -117.794724, + 34.009605 + ], + [ + -117.794453, + 34.009334 + ], + [ + -117.79408, + 34.009046 + ], + [ + -117.793915, + 34.008825 + ], + [ + -117.793677, + 34.008508 + ], + [ + -117.793499, + 34.008361 + ], + [ + -117.793512, + 34.008273 + ], + [ + -117.793677, + 34.008164 + ], + [ + -117.793792, + 34.008094 + ], + [ + -117.794016, + 34.008087 + ], + [ + -117.79436, + 34.008136 + ], + [ + -117.794728, + 34.008291 + ], + [ + -117.795373, + 34.008378 + ], + [ + -117.795474, + 34.008269 + ], + [ + -117.795406, + 34.008066 + ], + [ + -117.795385, + 34.007862 + ], + [ + -117.795343, + 34.007613 + ], + [ + -117.795271, + 34.007507 + ], + [ + -117.795127, + 34.007423 + ], + [ + -117.795055, + 34.007328 + ], + [ + -117.795038, + 34.007216 + ], + [ + -117.794978, + 34.007149 + ], + [ + -117.795106, + 34.006952 + ], + [ + -117.795216, + 34.006671 + ], + [ + -117.795288, + 34.006422 + ], + [ + -117.795504, + 34.006204 + ], + [ + -117.795682, + 34.00601 + ], + [ + -117.79575, + 34.005786 + ], + [ + -117.795665, + 34.005613 + ], + [ + -117.795572, + 34.005515 + ], + [ + -117.795051, + 34.005381 + ], + [ + -117.794991, + 34.005487 + ], + [ + -117.794911, + 34.005719 + ], + [ + -117.794716, + 34.005954 + ], + [ + -117.793982, + 34.005814 + ], + [ + -117.794029, + 34.005631 + ], + [ + -117.794635, + 34.005684 + ], + [ + -117.794758, + 34.005519 + ], + [ + -117.794877, + 34.005361 + ], + [ + -117.794894, + 34.005178 + ], + [ + -117.7948, + 34.005016 + ], + [ + -117.794563, + 34.004862 + ], + [ + -117.794097, + 34.004647 + ], + [ + -117.793783, + 34.004595 + ], + [ + -117.793673, + 34.00444 + ], + [ + -117.793576, + 34.004317 + ], + [ + -117.793321, + 34.004278 + ], + [ + -117.7932, + 34.004225 + ], + [ + -117.793101, + 34.004168 + ], + [ + -117.792935, + 34.004208 + ], + [ + -117.792728, + 34.004331 + ], + [ + -117.792427, + 34.004485 + ], + [ + -117.792478, + 34.004558 + ], + [ + -117.79259, + 34.00465 + ], + [ + -117.792732, + 34.004756 + ], + [ + -117.792823, + 34.004852 + ], + [ + -117.792892, + 34.004954 + ], + [ + -117.792952, + 34.005089 + ], + [ + -117.792997, + 34.005216 + ], + [ + -117.793005, + 34.005383 + ], + [ + -117.792994, + 34.00553 + ], + [ + -117.792976, + 34.005694 + ], + [ + -117.792892, + 34.005731 + ], + [ + -117.792861, + 34.00571 + ], + [ + -117.792872, + 34.00562 + ], + [ + -117.792874, + 34.005494 + ], + [ + -117.792841, + 34.005301 + ], + [ + -117.79279, + 34.005175 + ], + [ + -117.79273, + 34.005046 + ], + [ + -117.792593, + 34.004828 + ], + [ + -117.792502, + 34.004782 + ], + [ + -117.792202, + 34.004935 + ], + [ + -117.79223, + 34.004976 + ], + [ + -117.79229, + 34.005052 + ], + [ + -117.792231, + 34.005092 + ], + [ + -117.792106, + 34.004947 + ], + [ + -117.791806, + 34.004711 + ], + [ + -117.79149, + 34.004464 + ], + [ + -117.791187, + 34.004244 + ], + [ + -117.79099, + 34.004022 + ], + [ + -117.790911, + 34.003859 + ], + [ + -117.790873, + 34.003682 + ], + [ + -117.790885, + 34.003518 + ], + [ + -117.791192, + 34.00354 + ], + [ + -117.791347, + 34.003521 + ], + [ + -117.791531, + 34.003607 + ], + [ + -117.791557, + 34.003607 + ], + [ + -117.791763, + 34.003606 + ], + [ + -117.791888, + 34.003606 + ], + [ + -117.792852, + 34.003471 + ], + [ + -117.792845, + 34.003483 + ], + [ + -117.793016, + 34.00359 + ], + [ + -117.793171, + 34.003679 + ], + [ + -117.793395, + 34.003683 + ], + [ + -117.793412, + 34.003683 + ], + [ + -117.793554, + 34.003556 + ], + [ + -117.793562, + 34.003542 + ], + [ + -117.793654, + 34.003394 + ], + [ + -117.793681, + 34.003382 + ], + [ + -117.793824, + 34.003319 + ], + [ + -117.793997, + 34.003274 + ], + [ + -117.794109, + 34.003264 + ], + [ + -117.794133, + 34.003261 + ], + [ + -117.79409, + 34.003167 + ], + [ + -117.794389, + 34.003019 + ], + [ + -117.794386, + 34.003016 + ], + [ + -117.794092, + 34.002673 + ], + [ + -117.794101, + 34.002664 + ], + [ + -117.794216, + 34.002552 + ], + [ + -117.794253, + 34.002511 + ], + [ + -117.794308, + 34.002449 + ], + [ + -117.794332, + 34.002329 + ], + [ + -117.794435, + 34.002348 + ], + [ + -117.794791, + 34.002027 + ], + [ + -117.794993, + 34.001619 + ], + [ + -117.795064, + 34.001359 + ], + [ + -117.795299, + 34.001498 + ], + [ + -117.795304, + 34.001487 + ], + [ + -117.795464, + 34.001091 + ], + [ + -117.79576, + 34.000907 + ], + [ + -117.795773, + 34.000675 + ], + [ + -117.795791, + 34.00065 + ], + [ + -117.795875, + 34.000533 + ], + [ + -117.795856, + 34.000442 + ], + [ + -117.796165, + 34.000106 + ], + [ + -117.796784, + 33.999924 + ], + [ + -117.797116, + 33.999627 + ], + [ + -117.797104, + 33.999579 + ], + [ + -117.797162, + 33.999538 + ], + [ + -117.797248, + 33.999517 + ], + [ + -117.797414, + 33.999476 + ], + [ + -117.79757, + 33.999408 + ], + [ + -117.797622, + 33.999364 + ], + [ + -117.797637, + 33.999256 + ], + [ + -117.797699, + 33.999134 + ], + [ + -117.797737, + 33.999065 + ], + [ + -117.797783, + 33.998998 + ], + [ + -117.797883, + 33.998946 + ], + [ + -117.798049, + 33.998911 + ], + [ + -117.798822, + 33.998978 + ], + [ + -117.799247, + 33.999109 + ], + [ + -117.79947, + 33.999322 + ], + [ + -117.799959, + 33.999619 + ], + [ + -117.8002, + 33.999528 + ], + [ + -117.799745, + 33.998721 + ], + [ + -117.799621, + 33.998576 + ], + [ + -117.799459, + 33.99851 + ], + [ + -117.799259, + 33.998408 + ], + [ + -117.799035, + 33.998017 + ], + [ + -117.798999, + 33.997758 + ], + [ + -117.798985, + 33.997657 + ], + [ + -117.799022, + 33.997595 + ], + [ + -117.799011, + 33.997423 + ], + [ + -117.798968, + 33.997347 + ], + [ + -117.798874, + 33.996942 + ], + [ + -117.79904, + 33.996304 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 556273095, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.789486, + 34.001826 + ], + [ + -117.789748, + 34.002044 + ], + [ + -117.790042, + 34.001877 + ], + [ + -117.789999, + 34.001771 + ], + [ + -117.789987, + 34.001672 + ], + [ + -117.789734, + 34.001535 + ], + [ + -117.789486, + 34.001826 + ] + ] + ] + }, + "properties": { + "name": "Longview Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 556273099, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.788927, + 34.007422 + ], + [ + -117.789618, + 34.007469 + ], + [ + -117.790208, + 34.007397 + ], + [ + -117.78973, + 34.008115 + ], + [ + -117.789572, + 34.008207 + ], + [ + -117.789403, + 34.008184 + ], + [ + -117.789338, + 34.008099 + ], + [ + -117.789317, + 34.007957 + ], + [ + -117.789237, + 34.007855 + ], + [ + -117.789168, + 34.007831 + ], + [ + -117.78913, + 34.007765 + ], + [ + -117.789152, + 34.007687 + ], + [ + -117.788927, + 34.007422 + ] + ] + ] + }, + "properties": { + "name": "Summitridge Longview drive Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 556617257, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.79556, + 34.015722 + ], + [ + -117.795216, + 34.016288 + ], + [ + -117.795117, + 34.016288 + ], + [ + -117.795035, + 34.01623 + ], + [ + -117.795012, + 34.016118 + ], + [ + -117.794989, + 34.015993 + ], + [ + -117.794919, + 34.015848 + ], + [ + -117.79482, + 34.015727 + ], + [ + -117.794662, + 34.015602 + ], + [ + -117.794505, + 34.015548 + ], + [ + -117.79433, + 34.015437 + ], + [ + -117.794213, + 34.015345 + ], + [ + -117.79405, + 34.015205 + ], + [ + -117.793939, + 34.015085 + ], + [ + -117.793852, + 34.015026 + ], + [ + -117.793759, + 34.015002 + ], + [ + -117.793607, + 34.014925 + ], + [ + -117.793467, + 34.014833 + ], + [ + -117.793351, + 34.014727 + ], + [ + -117.793263, + 34.014611 + ], + [ + -117.793199, + 34.01448 + ], + [ + -117.793164, + 34.014379 + ], + [ + -117.793112, + 34.014268 + ], + [ + -117.79303, + 34.014166 + ], + [ + -117.792919, + 34.013997 + ], + [ + -117.792826, + 34.013809 + ], + [ + -117.792744, + 34.013654 + ], + [ + -117.792733, + 34.013538 + ], + [ + -117.79275, + 34.013432 + ], + [ + -117.792779, + 34.013326 + ], + [ + -117.792803, + 34.013243 + ], + [ + -117.792733, + 34.01321 + ], + [ + -117.792727, + 34.013118 + ], + [ + -117.792698, + 34.013036 + ], + [ + -117.792604, + 34.012968 + ], + [ + -117.792529, + 34.01291 + ], + [ + -117.79229, + 34.012867 + ], + [ + -117.792231, + 34.012775 + ], + [ + -117.792173, + 34.012668 + ], + [ + -117.792103, + 34.012572 + ], + [ + -117.79201, + 34.012451 + ], + [ + -117.791905, + 34.012359 + ], + [ + -117.792033, + 34.012238 + ], + [ + -117.792068, + 34.012146 + ], + [ + -117.792115, + 34.011919 + ], + [ + -117.792051, + 34.011881 + ], + [ + -117.792156, + 34.011745 + ], + [ + -117.792179, + 34.011697 + ], + [ + -117.792161, + 34.011644 + ], + [ + -117.792033, + 34.011223 + ], + [ + -117.792022, + 34.011146 + ], + [ + -117.792022, + 34.011083 + ], + [ + -117.791969, + 34.010977 + ], + [ + -117.791975, + 34.010267 + ], + [ + -117.792016, + 34.010122 + ], + [ + -117.792389, + 34.009735 + ], + [ + -117.792395, + 34.009629 + ], + [ + -117.792196, + 34.009349 + ], + [ + -117.791887, + 34.009034 + ], + [ + -117.791852, + 34.008933 + ], + [ + -117.791812, + 34.008822 + ], + [ + -117.792179, + 34.008687 + ], + [ + -117.792191, + 34.008623 + ], + [ + -117.792195, + 34.008555 + ], + [ + -117.792179, + 34.008503 + ], + [ + -117.792152, + 34.008442 + ], + [ + -117.792199, + 34.008264 + ], + [ + -117.792238, + 34.008193 + ], + [ + -117.79223, + 34.008125 + ], + [ + -117.792187, + 34.008073 + ], + [ + -117.792183, + 34.007999 + ], + [ + -117.792195, + 34.007785 + ], + [ + -117.792187, + 34.007478 + ], + [ + -117.792226, + 34.007439 + ], + [ + -117.792265, + 34.007459 + ], + [ + -117.792269, + 34.007533 + ], + [ + -117.792339, + 34.007753 + ], + [ + -117.792378, + 34.00795 + ], + [ + -117.79246, + 34.008193 + ], + [ + -117.792487, + 34.008477 + ], + [ + -117.79244, + 34.00859 + ], + [ + -117.792421, + 34.008687 + ], + [ + -117.792437, + 34.008755 + ], + [ + -117.792577, + 34.008833 + ], + [ + -117.792682, + 34.008868 + ], + [ + -117.792725, + 34.008913 + ], + [ + -117.792838, + 34.008997 + ], + [ + -117.792889, + 34.009292 + ], + [ + -117.793053, + 34.009356 + ], + [ + -117.793439, + 34.009676 + ], + [ + -117.793536, + 34.009806 + ], + [ + -117.79361, + 34.009916 + ], + [ + -117.793661, + 34.009941 + ], + [ + -117.793712, + 34.009929 + ], + [ + -117.793802, + 34.010039 + ], + [ + -117.793852, + 34.010113 + ], + [ + -117.793868, + 34.010216 + ], + [ + -117.793864, + 34.010352 + ], + [ + -117.793806, + 34.010485 + ], + [ + -117.793735, + 34.010624 + ], + [ + -117.793739, + 34.010695 + ], + [ + -117.793806, + 34.01073 + ], + [ + -117.793891, + 34.010747 + ], + [ + -117.794028, + 34.010834 + ], + [ + -117.794465, + 34.010798 + ], + [ + -117.794504, + 34.010992 + ], + [ + -117.79455, + 34.011293 + ], + [ + -117.794632, + 34.011781 + ], + [ + -117.794468, + 34.011794 + ], + [ + -117.794488, + 34.011888 + ], + [ + -117.794199, + 34.011926 + ], + [ + -117.794188, + 34.011875 + ], + [ + -117.79416, + 34.011813 + ], + [ + -117.794117, + 34.011775 + ], + [ + -117.794047, + 34.011736 + ], + [ + -117.793977, + 34.011726 + ], + [ + -117.793903, + 34.011719 + ], + [ + -117.793821, + 34.011707 + ], + [ + -117.793728, + 34.0117 + ], + [ + -117.793716, + 34.011917 + ], + [ + -117.79365, + 34.011923 + ], + [ + -117.793591, + 34.011962 + ], + [ + -117.793556, + 34.012023 + ], + [ + -117.793521, + 34.012069 + ], + [ + -117.793462, + 34.012136 + ], + [ + -117.793349, + 34.012224 + ], + [ + -117.793295, + 34.012285 + ], + [ + -117.793283, + 34.012356 + ], + [ + -117.793322, + 34.012466 + ], + [ + -117.793369, + 34.012557 + ], + [ + -117.793392, + 34.012631 + ], + [ + -117.793396, + 34.012709 + ], + [ + -117.7934, + 34.012864 + ], + [ + -117.793415, + 34.013181 + ], + [ + -117.793412, + 34.013426 + ], + [ + -117.79338, + 34.013533 + ], + [ + -117.793369, + 34.013601 + ], + [ + -117.793384, + 34.013662 + ], + [ + -117.793404, + 34.01375 + ], + [ + -117.793451, + 34.013847 + ], + [ + -117.793497, + 34.013931 + ], + [ + -117.793607, + 34.014076 + ], + [ + -117.793735, + 34.014193 + ], + [ + -117.793856, + 34.014247 + ], + [ + -117.79411, + 34.014254 + ], + [ + -117.794125, + 34.014186 + ], + [ + -117.794644, + 34.014225 + ], + [ + -117.794839, + 34.014454 + ], + [ + -117.794773, + 34.014561 + ], + [ + -117.794663, + 34.014548 + ], + [ + -117.794574, + 34.01458 + ], + [ + -117.794496, + 34.014603 + ], + [ + -117.794391, + 34.014629 + ], + [ + -117.794344, + 34.01481 + ], + [ + -117.79441, + 34.014849 + ], + [ + -117.794504, + 34.014865 + ], + [ + -117.794636, + 34.014865 + ], + [ + -117.794687, + 34.014849 + ], + [ + -117.794714, + 34.01493 + ], + [ + -117.794769, + 34.014997 + ], + [ + -117.794878, + 34.015049 + ], + [ + -117.79494, + 34.015085 + ], + [ + -117.794995, + 34.015127 + ], + [ + -117.795026, + 34.015191 + ], + [ + -117.795038, + 34.015272 + ], + [ + -117.795042, + 34.015346 + ], + [ + -117.795085, + 34.015418 + ], + [ + -117.795135, + 34.015502 + ], + [ + -117.795159, + 34.015573 + ], + [ + -117.795182, + 34.015618 + ], + [ + -117.795244, + 34.01566 + ], + [ + -117.795326, + 34.015676 + ], + [ + -117.7954, + 34.015705 + ], + [ + -117.795475, + 34.015712 + ], + [ + -117.795521, + 34.015705 + ], + [ + -117.79556, + 34.015722 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 556992357, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.800852, + 34.017906 + ], + [ + -117.800901, + 34.017952 + ], + [ + -117.800751, + 34.018073 + ], + [ + -117.800657, + 34.018101 + ], + [ + -117.800553, + 34.018104 + ], + [ + -117.800414, + 34.01807 + ], + [ + -117.800384, + 34.018101 + ], + [ + -117.800224, + 34.018188 + ], + [ + -117.799999, + 34.018364 + ], + [ + -117.800269, + 34.018513 + ], + [ + -117.800212, + 34.018734 + ], + [ + -117.80016, + 34.01901 + ], + [ + -117.800235, + 34.019155 + ], + [ + -117.80031, + 34.019223 + ], + [ + -117.800433, + 34.019251 + ], + [ + -117.800515, + 34.019344 + ], + [ + -117.80059, + 34.019369 + ], + [ + -117.800572, + 34.019447 + ], + [ + -117.800575, + 34.019537 + ], + [ + -117.800601, + 34.019648 + ], + [ + -117.80062, + 34.019772 + ], + [ + -117.800628, + 34.019884 + ], + [ + -117.800695, + 34.020119 + ], + [ + -117.800665, + 34.020188 + ], + [ + -117.800657, + 34.020293 + ], + [ + -117.800654, + 34.020467 + ], + [ + -117.800658, + 34.020586 + ], + [ + -117.80067, + 34.020704 + ], + [ + -117.800674, + 34.020778 + ], + [ + -117.800816, + 34.020723 + ], + [ + -117.800924, + 34.020665 + ], + [ + -117.801019, + 34.02061 + ], + [ + -117.801117, + 34.02055 + ], + [ + -117.801253, + 34.020471 + ], + [ + -117.801364, + 34.020426 + ], + [ + -117.801418, + 34.020481 + ], + [ + -117.80118, + 34.020618 + ], + [ + -117.801009, + 34.020725 + ], + [ + -117.800876, + 34.020825 + ], + [ + -117.800794, + 34.021001 + ], + [ + -117.800734, + 34.021006 + ], + [ + -117.800604, + 34.021101 + ], + [ + -117.800502, + 34.021182 + ], + [ + -117.800417, + 34.021245 + ], + [ + -117.800192, + 34.021303 + ], + [ + -117.800192, + 34.021235 + ], + [ + -117.800183, + 34.021088 + ], + [ + -117.800563, + 34.02092 + ], + [ + -117.800579, + 34.020825 + ], + [ + -117.800582, + 34.020723 + ], + [ + -117.800544, + 34.02061 + ], + [ + -117.800509, + 34.020439 + ], + [ + -117.800465, + 34.020216 + ], + [ + -117.800455, + 34.020058 + ], + [ + -117.800465, + 34.019956 + ], + [ + -117.800461, + 34.019906 + ], + [ + -117.800417, + 34.019749 + ], + [ + -117.800293, + 34.019694 + ], + [ + -117.80023, + 34.019363 + ], + [ + -117.800195, + 34.019337 + ], + [ + -117.800148, + 34.019334 + ], + [ + -117.799726, + 34.019363 + ], + [ + -117.799676, + 34.019231 + ], + [ + -117.799403, + 34.019318 + ], + [ + -117.799312, + 34.019355 + ], + [ + -117.799248, + 34.019365 + ], + [ + -117.799201, + 34.019368 + ], + [ + -117.799128, + 34.019502 + ], + [ + -117.799112, + 34.01962 + ], + [ + -117.79914, + 34.019638 + ], + [ + -117.799191, + 34.019638 + ], + [ + -117.799245, + 34.019638 + ], + [ + -117.799429, + 34.020014 + ], + [ + -117.799451, + 34.020051 + ], + [ + -117.799457, + 34.020098 + ], + [ + -117.799473, + 34.02014 + ], + [ + -117.799524, + 34.020206 + ], + [ + -117.799552, + 34.020342 + ], + [ + -117.799565, + 34.020381 + ], + [ + -117.799603, + 34.020418 + ], + [ + -117.799635, + 34.020445 + ], + [ + -117.799704, + 34.020649 + ], + [ + -117.799666, + 34.020678 + ], + [ + -117.799654, + 34.020739 + ], + [ + -117.799644, + 34.020836 + ], + [ + -117.799638, + 34.020912 + ], + [ + -117.799698, + 34.021069 + ], + [ + -117.79966, + 34.021109 + ], + [ + -117.799657, + 34.021287 + ], + [ + -117.799625, + 34.021319 + ], + [ + -117.799616, + 34.021379 + ], + [ + -117.799635, + 34.021442 + ], + [ + -117.799682, + 34.021524 + ], + [ + -117.799701, + 34.021594 + ], + [ + -117.79972, + 34.02165 + ], + [ + -117.79972, + 34.021778 + ], + [ + -117.799841, + 34.021967 + ], + [ + -117.799841, + 34.022012 + ], + [ + -117.799932, + 34.02219 + ], + [ + -117.799837, + 34.022232 + ], + [ + -117.799758, + 34.022036 + ], + [ + -117.799685, + 34.022046 + ], + [ + -117.799612, + 34.021862 + ], + [ + -117.799514, + 34.021883 + ], + [ + -117.799403, + 34.02171 + ], + [ + -117.799182, + 34.021161 + ], + [ + -117.799248, + 34.021119 + ], + [ + -117.79927, + 34.021067 + ], + [ + -117.799258, + 34.020975 + ], + [ + -117.799223, + 34.02088 + ], + [ + -117.79922, + 34.020791 + ], + [ + -117.799216, + 34.020681 + ], + [ + -117.799201, + 34.02061 + ], + [ + -117.799147, + 34.0205 + ], + [ + -117.799106, + 34.020442 + ], + [ + -117.799068, + 34.020408 + ], + [ + -117.799004, + 34.020392 + ], + [ + -117.79895, + 34.020379 + ], + [ + -117.798988, + 34.020358 + ], + [ + -117.798792, + 34.020145 + ], + [ + -117.79871, + 34.020166 + ], + [ + -117.798615, + 34.020129 + ], + [ + -117.798507, + 34.020066 + ], + [ + -117.798402, + 34.019998 + ], + [ + -117.798333, + 34.019935 + ], + [ + -117.798276, + 34.019867 + ], + [ + -117.798171, + 34.019791 + ], + [ + -117.798076, + 34.019701 + ], + [ + -117.798003, + 34.019644 + ], + [ + -117.797921, + 34.019573 + ], + [ + -117.798029, + 34.019499 + ], + [ + -117.798016, + 34.019441 + ], + [ + -117.797987, + 34.019376 + ], + [ + -117.797933, + 34.019305 + ], + [ + -117.797842, + 34.019352 + ], + [ + -117.797816, + 34.019315 + ], + [ + -117.797785, + 34.019258 + ], + [ + -117.797753, + 34.019224 + ], + [ + -117.797677, + 34.019176 + ], + [ + -117.79762, + 34.019126 + ], + [ + -117.797604, + 34.019077 + ], + [ + -117.797595, + 34.019011 + ], + [ + -117.797579, + 34.018958 + ], + [ + -117.797534, + 34.018911 + ], + [ + -117.797465, + 34.018898 + ], + [ + -117.797411, + 34.018903 + ], + [ + -117.797313, + 34.01894 + ], + [ + -117.797259, + 34.01898 + ], + [ + -117.797192, + 34.019045 + ], + [ + -117.797132, + 34.01909 + ], + [ + -117.797002, + 34.019163 + ], + [ + -117.796929, + 34.019305 + ], + [ + -117.796847, + 34.019465 + ], + [ + -117.796755, + 34.019599 + ], + [ + -117.796863, + 34.01966 + ], + [ + -117.796894, + 34.019704 + ], + [ + -117.796923, + 34.019767 + ], + [ + -117.796945, + 34.01982 + ], + [ + -117.796961, + 34.019896 + ], + [ + -117.79699, + 34.019959 + ], + [ + -117.797053, + 34.020077 + ], + [ + -117.797097, + 34.020158 + ], + [ + -117.797129, + 34.020208 + ], + [ + -117.797151, + 34.020227 + ], + [ + -117.796977, + 34.020389 + ], + [ + -117.796819, + 34.020528 + ], + [ + -117.796733, + 34.020542 + ], + [ + -117.796682, + 34.020502 + ], + [ + -117.796562, + 34.020555 + ], + [ + -117.796492, + 34.020628 + ], + [ + -117.796391, + 34.02072 + ], + [ + -117.796274, + 34.020828 + ], + [ + -117.79616, + 34.020941 + ], + [ + -117.796036, + 34.02102 + ], + [ + -117.79589, + 34.021098 + ], + [ + -117.795738, + 34.021132 + ], + [ + -117.795691, + 34.020998 + ], + [ + -117.795659, + 34.020914 + ], + [ + -117.795659, + 34.020857 + ], + [ + -117.795678, + 34.020589 + ], + [ + -117.795605, + 34.020576 + ], + [ + -117.795615, + 34.020374 + ], + [ + -117.795618, + 34.020316 + ], + [ + -117.795133, + 34.020321 + ], + [ + -117.795168, + 34.020578 + ], + [ + -117.794706, + 34.020528 + ], + [ + -117.794674, + 34.020636 + ], + [ + -117.794674, + 34.020741 + ], + [ + -117.79468, + 34.020844 + ], + [ + -117.794702, + 34.020962 + ], + [ + -117.794668, + 34.021098 + ], + [ + -117.794801, + 34.021489 + ], + [ + -117.79475, + 34.021474 + ], + [ + -117.794693, + 34.021332 + ], + [ + -117.794611, + 34.021138 + ], + [ + -117.794506, + 34.020978 + ], + [ + -117.794417, + 34.020794 + ], + [ + -117.794364, + 34.020581 + ], + [ + -117.794345, + 34.020442 + ], + [ + -117.794395, + 34.020405 + ], + [ + -117.794436, + 34.020339 + ], + [ + -117.794446, + 34.020258 + ], + [ + -117.794433, + 34.020179 + ], + [ + -117.794354, + 34.020103 + ], + [ + -117.79424, + 34.020077 + ], + [ + -117.794161, + 34.020032 + ], + [ + -117.794158, + 34.019967 + ], + [ + -117.794132, + 34.019914 + ], + [ + -117.79411, + 34.019877 + ], + [ + -117.794272, + 34.019523 + ], + [ + -117.794199, + 34.019447 + ], + [ + -117.794088, + 34.019413 + ], + [ + -117.793942, + 34.019402 + ], + [ + -117.793768, + 34.019426 + ], + [ + -117.793654, + 34.019434 + ], + [ + -117.793556, + 34.019444 + ], + [ + -117.793496, + 34.019465 + ], + [ + -117.793467, + 34.019518 + ], + [ + -117.793508, + 34.019691 + ], + [ + -117.793515, + 34.019778 + ], + [ + -117.793518, + 34.019864 + ], + [ + -117.793496, + 34.019953 + ], + [ + -117.793423, + 34.020038 + ], + [ + -117.793299, + 34.020108 + ], + [ + -117.793157, + 34.020174 + ], + [ + -117.793055, + 34.020227 + ], + [ + -117.793062, + 34.020337 + ], + [ + -117.793103, + 34.020437 + ], + [ + -117.793103, + 34.0205 + ], + [ + -117.793017, + 34.020586 + ], + [ + -117.792919, + 34.020626 + ], + [ + -117.792739, + 34.020662 + ], + [ + -117.792764, + 34.020773 + ], + [ + -117.792808, + 34.02088 + ], + [ + -117.79291, + 34.021017 + ], + [ + -117.792954, + 34.021082 + ], + [ + -117.793024, + 34.02114 + ], + [ + -117.793097, + 34.021177 + ], + [ + -117.793144, + 34.021232 + ], + [ + -117.793154, + 34.021285 + ], + [ + -117.793134, + 34.021345 + ], + [ + -117.793128, + 34.021405 + ], + [ + -117.793154, + 34.021474 + ], + [ + -117.793195, + 34.021573 + ], + [ + -117.793283, + 34.021644 + ], + [ + -117.79335, + 34.021763 + ], + [ + -117.793509, + 34.021877 + ], + [ + -117.793656, + 34.022007 + ], + [ + -117.793755, + 34.022112 + ], + [ + -117.793415, + 34.022269 + ], + [ + -117.793082, + 34.022517 + ], + [ + -117.792843, + 34.022621 + ], + [ + -117.792813, + 34.022799 + ], + [ + -117.79281, + 34.022998 + ], + [ + -117.792681, + 34.023284 + ], + [ + -117.792569, + 34.023485 + ], + [ + -117.792331, + 34.02366 + ], + [ + -117.792096, + 34.023863 + ], + [ + -117.791947, + 34.023993 + ], + [ + -117.791799, + 34.024125 + ], + [ + -117.791734, + 34.02407 + ], + [ + -117.791839, + 34.023998 + ], + [ + -117.792039, + 34.023822 + ], + [ + -117.792172, + 34.023717 + ], + [ + -117.792382, + 34.023538 + ], + [ + -117.792507, + 34.023349 + ], + [ + -117.792606, + 34.023187 + ], + [ + -117.792687, + 34.022958 + ], + [ + -117.792736, + 34.02262 + ], + [ + -117.792306, + 34.022295 + ], + [ + -117.792171, + 34.022146 + ], + [ + -117.792216, + 34.022057 + ], + [ + -117.79252, + 34.021849 + ], + [ + -117.791972, + 34.021371 + ], + [ + -117.791652, + 34.021601 + ], + [ + -117.791424, + 34.021775 + ], + [ + -117.791075, + 34.022081 + ], + [ + -117.791507, + 34.022403 + ], + [ + -117.791409, + 34.022442 + ], + [ + -117.791276, + 34.022511 + ], + [ + -117.791107, + 34.02256 + ], + [ + -117.791143, + 34.022735 + ], + [ + -117.790887, + 34.022849 + ], + [ + -117.790807, + 34.022698 + ], + [ + -117.790745, + 34.022592 + ], + [ + -117.790688, + 34.022503 + ], + [ + -117.790637, + 34.022435 + ], + [ + -117.790593, + 34.022389 + ], + [ + -117.790508, + 34.022325 + ], + [ + -117.790407, + 34.022266 + ], + [ + -117.790337, + 34.022217 + ], + [ + -117.790305, + 34.022177 + ], + [ + -117.79027, + 34.022125 + ], + [ + -117.790149, + 34.022062 + ], + [ + -117.789896, + 34.021971 + ], + [ + -117.789873, + 34.022002 + ], + [ + -117.789729, + 34.021966 + ], + [ + -117.789606, + 34.021963 + ], + [ + -117.789583, + 34.02191 + ], + [ + -117.789497, + 34.021942 + ], + [ + -117.789435, + 34.02196 + ], + [ + -117.789378, + 34.021948 + ], + [ + -117.789324, + 34.021919 + ], + [ + -117.789186, + 34.021815 + ], + [ + -117.788897, + 34.021675 + ], + [ + -117.788869, + 34.021597 + ], + [ + -117.788899, + 34.02153 + ], + [ + -117.788945, + 34.021475 + ], + [ + -117.789025, + 34.021501 + ], + [ + -117.789071, + 34.021555 + ], + [ + -117.789146, + 34.021601 + ], + [ + -117.789238, + 34.021613 + ], + [ + -117.789283, + 34.021559 + ], + [ + -117.789296, + 34.021485 + ], + [ + -117.789296, + 34.021422 + ], + [ + -117.789359, + 34.021393 + ], + [ + -117.789404, + 34.021364 + ], + [ + -117.789438, + 34.02132 + ], + [ + -117.78946, + 34.021249 + ], + [ + -117.78943, + 34.021192 + ], + [ + -117.789422, + 34.021151 + ], + [ + -117.789678, + 34.020977 + ], + [ + -117.789826, + 34.020996 + ], + [ + -117.78999, + 34.021054 + ], + [ + -117.790164, + 34.021152 + ], + [ + -117.790281, + 34.021242 + ], + [ + -117.790346, + 34.021291 + ], + [ + -117.790412, + 34.021318 + ], + [ + -117.79049, + 34.02132 + ], + [ + -117.790594, + 34.021318 + ], + [ + -117.790639, + 34.021307 + ], + [ + -117.790681, + 34.021283 + ], + [ + -117.790894, + 34.021358 + ], + [ + -117.790943, + 34.021357 + ], + [ + -117.791044, + 34.021343 + ], + [ + -117.791134, + 34.0213 + ], + [ + -117.79119, + 34.021266 + ], + [ + -117.791448, + 34.021178 + ], + [ + -117.791489, + 34.021276 + ], + [ + -117.791609, + 34.021234 + ], + [ + -117.791692, + 34.021181 + ], + [ + -117.791762, + 34.021115 + ], + [ + -117.791842, + 34.021006 + ], + [ + -117.79178, + 34.020978 + ], + [ + -117.791824, + 34.020902 + ], + [ + -117.791856, + 34.020811 + ], + [ + -117.79186, + 34.020727 + ], + [ + -117.791828, + 34.020645 + ], + [ + -117.791734, + 34.020489 + ], + [ + -117.791745, + 34.020401 + ], + [ + -117.791811, + 34.020265 + ], + [ + -117.791826, + 34.020388 + ], + [ + -117.791845, + 34.02043 + ], + [ + -117.791875, + 34.02046 + ], + [ + -117.792083, + 34.020268 + ], + [ + -117.792141, + 34.020158 + ], + [ + -117.792426, + 34.020106 + ], + [ + -117.792485, + 34.020093 + ], + [ + -117.79255, + 34.020067 + ], + [ + -117.792587, + 34.020026 + ], + [ + -117.792607, + 34.019945 + ], + [ + -117.792639, + 34.019762 + ], + [ + -117.792816, + 34.019791 + ], + [ + -117.792875, + 34.019582 + ], + [ + -117.792825, + 34.019575 + ], + [ + -117.792927, + 34.019334 + ], + [ + -117.792659, + 34.019319 + ], + [ + -117.79277, + 34.019147 + ], + [ + -117.792902, + 34.018975 + ], + [ + -117.793083, + 34.01885 + ], + [ + -117.793146, + 34.018842 + ], + [ + -117.793221, + 34.018818 + ], + [ + -117.793247, + 34.018779 + ], + [ + -117.793267, + 34.018718 + ], + [ + -117.793272, + 34.01865 + ], + [ + -117.793279, + 34.018559 + ], + [ + -117.793297, + 34.018423 + ], + [ + -117.793331, + 34.018147 + ], + [ + -117.793268, + 34.018141 + ], + [ + -117.793291, + 34.018049 + ], + [ + -117.793324, + 34.017972 + ], + [ + -117.79337, + 34.017912 + ], + [ + -117.793443, + 34.017877 + ], + [ + -117.793584, + 34.017834 + ], + [ + -117.79382, + 34.017811 + ], + [ + -117.794022, + 34.01783 + ], + [ + -117.794173, + 34.017859 + ], + [ + -117.794307, + 34.017906 + ], + [ + -117.794466, + 34.017991 + ], + [ + -117.794606, + 34.018053 + ], + [ + -117.794749, + 34.018106 + ], + [ + -117.794907, + 34.018153 + ], + [ + -117.794847, + 34.018235 + ], + [ + -117.794805, + 34.018422 + ], + [ + -117.794832, + 34.018507 + ], + [ + -117.795216, + 34.018562 + ], + [ + -117.795243, + 34.018953 + ], + [ + -117.795819, + 34.018595 + ], + [ + -117.795939, + 34.018478 + ], + [ + -117.79599, + 34.01845 + ], + [ + -117.796022, + 34.018415 + ], + [ + -117.796062, + 34.01835 + ], + [ + -117.796078, + 34.018314 + ], + [ + -117.796126, + 34.018296 + ], + [ + -117.796256, + 34.01829 + ], + [ + -117.796447, + 34.018267 + ], + [ + -117.79652, + 34.01829 + ], + [ + -117.796603, + 34.018194 + ], + [ + -117.796666, + 34.018161 + ], + [ + -117.79683, + 34.018101 + ], + [ + -117.797129, + 34.017937 + ], + [ + -117.797176, + 34.017795 + ], + [ + -117.797226, + 34.017576 + ], + [ + -117.797339, + 34.017344 + ], + [ + -117.797423, + 34.017161 + ], + [ + -117.797489, + 34.017007 + ], + [ + -117.797509, + 34.016869 + ], + [ + -117.797523, + 34.016715 + ], + [ + -117.797546, + 34.016676 + ], + [ + -117.797568, + 34.016736 + ], + [ + -117.797553, + 34.016959 + ], + [ + -117.797481, + 34.017379 + ], + [ + -117.797422, + 34.017724 + ], + [ + -117.797294, + 34.018195 + ], + [ + -117.797534, + 34.018156 + ], + [ + -117.797653, + 34.018137 + ], + [ + -117.797825, + 34.018155 + ], + [ + -117.797979, + 34.018179 + ], + [ + -117.798109, + 34.01824 + ], + [ + -117.798185, + 34.01827 + ], + [ + -117.798426, + 34.017926 + ], + [ + -117.798485, + 34.017968 + ], + [ + -117.798569, + 34.018038 + ], + [ + -117.798634, + 34.018123 + ], + [ + -117.798664, + 34.018231 + ], + [ + -117.798693, + 34.018359 + ], + [ + -117.798701, + 34.018484 + ], + [ + -117.798656, + 34.01856 + ], + [ + -117.798576, + 34.018628 + ], + [ + -117.798479, + 34.018681 + ], + [ + -117.798352, + 34.018673 + ], + [ + -117.798346, + 34.01881 + ], + [ + -117.798391, + 34.018872 + ], + [ + -117.798719, + 34.019062 + ], + [ + -117.798822, + 34.019093 + ], + [ + -117.798912, + 34.019099 + ], + [ + -117.799014, + 34.019062 + ], + [ + -117.79916, + 34.01897 + ], + [ + -117.799249, + 34.018892 + ], + [ + -117.799289, + 34.018758 + ], + [ + -117.799304, + 34.018609 + ], + [ + -117.799286, + 34.018467 + ], + [ + -117.799263, + 34.018338 + ], + [ + -117.799228, + 34.018184 + ], + [ + -117.799146, + 34.018193 + ], + [ + -117.799146, + 34.01816 + ], + [ + -117.799215, + 34.01804 + ], + [ + -117.799237, + 34.018002 + ], + [ + -117.799243, + 34.017963 + ], + [ + -117.799224, + 34.017922 + ], + [ + -117.798965, + 34.017702 + ], + [ + -117.798774, + 34.017566 + ], + [ + -117.798486, + 34.017476 + ], + [ + -117.798302, + 34.017445 + ], + [ + -117.798136, + 34.017426 + ], + [ + -117.798136, + 34.01739 + ], + [ + -117.798199, + 34.017389 + ], + [ + -117.798329, + 34.017395 + ], + [ + -117.798445, + 34.017399 + ], + [ + -117.798605, + 34.017406 + ], + [ + -117.798771, + 34.017415 + ], + [ + -117.798894, + 34.017428 + ], + [ + -117.799, + 34.017459 + ], + [ + -117.799131, + 34.017504 + ], + [ + -117.79926, + 34.017568 + ], + [ + -117.799415, + 34.017662 + ], + [ + -117.79952, + 34.017739 + ], + [ + -117.799582, + 34.017781 + ], + [ + -117.799656, + 34.017827 + ], + [ + -117.799709, + 34.017854 + ], + [ + -117.799779, + 34.017852 + ], + [ + -117.799837, + 34.017839 + ], + [ + -117.800059, + 34.017868 + ], + [ + -117.800429, + 34.017905 + ], + [ + -117.800684, + 34.017923 + ], + [ + -117.800852, + 34.017906 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 562566160, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.721517, + 34.075392 + ], + [ + -117.720536, + 34.075406 + ], + [ + -117.72048, + 34.07509 + ], + [ + -117.720471, + 34.074166 + ], + [ + -117.721535, + 34.074155 + ], + [ + -117.721517, + 34.075392 + ] + ] + ] + }, + "properties": { + "name": "Montvue Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 563158390, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.728741, + 34.009027 + ], + [ + -117.728744, + 34.009611 + ], + [ + -117.728932, + 34.009832 + ], + [ + -117.728924, + 34.01099 + ], + [ + -117.729058, + 34.011488 + ], + [ + -117.729766, + 34.011457 + ], + [ + -117.729068, + 34.008998 + ], + [ + -117.728741, + 34.009027 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 563158405, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.709459, + 34.010586 + ], + [ + -117.709019, + 34.010588 + ], + [ + -117.709016, + 34.010326 + ], + [ + -117.708348, + 34.010317 + ], + [ + -117.708345, + 34.009665 + ], + [ + -117.708343, + 34.009243 + ], + [ + -117.708394, + 34.009074 + ], + [ + -117.708437, + 34.008945 + ], + [ + -117.708432, + 34.0087 + ], + [ + -117.708214, + 34.008605 + ], + [ + -117.708383, + 34.008409 + ], + [ + -117.708458, + 34.008167 + ], + [ + -117.708372, + 34.007704 + ], + [ + -117.708276, + 34.007188 + ], + [ + -117.708269, + 34.006617 + ], + [ + -117.708548, + 34.006613 + ], + [ + -117.708611, + 34.006931 + ], + [ + -117.708984, + 34.006928 + ], + [ + -117.709001, + 34.007317 + ], + [ + -117.708964, + 34.007455 + ], + [ + -117.708834, + 34.007617 + ], + [ + -117.708777, + 34.007688 + ], + [ + -117.708819, + 34.00823 + ], + [ + -117.708757, + 34.008505 + ], + [ + -117.708716, + 34.009074 + ], + [ + -117.708719, + 34.00933 + ], + [ + -117.709376, + 34.009327 + ], + [ + -117.709609, + 34.009385 + ], + [ + -117.709647, + 34.009413 + ], + [ + -117.709735, + 34.009479 + ], + [ + -117.709765, + 34.010259 + ], + [ + -117.709459, + 34.010326 + ], + [ + -117.709459, + 34.010586 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 563158406, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.681373, + 33.945636 + ], + [ + -117.680893, + 33.945561 + ], + [ + -117.680472, + 33.945558 + ], + [ + -117.680156, + 33.945643 + ], + [ + -117.67973, + 33.945792 + ], + [ + -117.67971, + 33.945799 + ], + [ + -117.678957, + 33.944415 + ], + [ + -117.679042, + 33.94435 + ], + [ + -117.680014, + 33.944165 + ], + [ + -117.680081, + 33.944141 + ], + [ + -117.680199, + 33.944186 + ], + [ + -117.680791, + 33.944731 + ], + [ + -117.681129, + 33.945004 + ], + [ + -117.681296, + 33.945207 + ], + [ + -117.68136, + 33.945369 + ], + [ + -117.681381, + 33.945501 + ], + [ + -117.681373, + 33.945636 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 571440222, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.615986, + 34.096756 + ], + [ + -117.61601, + 34.097595 + ], + [ + -117.616326, + 34.097597 + ], + [ + -117.617547, + 34.097602 + ], + [ + -117.617557, + 34.096751 + ], + [ + -117.616348, + 34.096755 + ], + [ + -117.615986, + 34.096756 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 579043889, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.466362, + 34.153635 + ], + [ + -117.466358, + 34.153251 + ], + [ + -117.466302, + 34.153211 + ], + [ + -117.465949, + 34.153216 + ], + [ + -117.465908, + 34.153241 + ], + [ + -117.465661, + 34.153471 + ], + [ + -117.465655, + 34.153507 + ], + [ + -117.465671, + 34.153546 + ], + [ + -117.465702, + 34.153565 + ], + [ + -117.46574, + 34.153574 + ], + [ + -117.465781, + 34.153562 + ], + [ + -117.465811, + 34.153545 + ], + [ + -117.465893, + 34.153546 + ], + [ + -117.465893, + 34.153578 + ], + [ + -117.465902, + 34.15361 + ], + [ + -117.465877, + 34.153635 + ], + [ + -117.46576, + 34.153635 + ], + [ + -117.46574, + 34.153639 + ], + [ + -117.465725, + 34.153648 + ], + [ + -117.465645, + 34.153721 + ], + [ + -117.465637, + 34.153744 + ], + [ + -117.465635, + 34.153769 + ], + [ + -117.465667, + 34.153812 + ], + [ + -117.465709, + 34.153836 + ], + [ + -117.465767, + 34.15385 + ], + [ + -117.465936, + 34.153845 + ], + [ + -117.465972, + 34.153833 + ], + [ + -117.46598, + 34.153812 + ], + [ + -117.465983, + 34.153761 + ], + [ + -117.46598, + 34.153728 + ], + [ + -117.465962, + 34.153702 + ], + [ + -117.465914, + 34.153666 + ], + [ + -117.465954, + 34.153639 + ], + [ + -117.465986, + 34.153645 + ], + [ + -117.466049, + 34.153645 + ], + [ + -117.466052, + 34.153683 + ], + [ + -117.466315, + 34.153679 + ], + [ + -117.466362, + 34.153635 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 584203424, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.723097, + 34.086678 + ], + [ + -117.724676, + 34.086682 + ], + [ + -117.724682, + 34.085005 + ], + [ + -117.721699, + 34.084998 + ], + [ + -117.721697, + 34.085634 + ], + [ + -117.723101, + 34.085638 + ], + [ + -117.723097, + 34.086678 + ] + ] + ] + }, + "properties": { + "name": "Stuart Wheeler Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 590573565, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.662374, + 33.991202 + ], + [ + -117.66238, + 33.991347 + ], + [ + -117.662346, + 33.991387 + ], + [ + -117.662271, + 33.991402 + ], + [ + -117.661677, + 33.99141 + ], + [ + -117.661607, + 33.991372 + ], + [ + -117.661583, + 33.991327 + ], + [ + -117.661583, + 33.991202 + ], + [ + -117.661604, + 33.991157 + ], + [ + -117.661653, + 33.991127 + ], + [ + -117.662286, + 33.991122 + ], + [ + -117.66235, + 33.991144 + ], + [ + -117.662374, + 33.991202 + ] + ] + ] + }, + "properties": { + "name": "Inspiration Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 599077502, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.6403, + 34.131443 + ], + [ + -117.640752, + 34.131247 + ], + [ + -117.64105, + 34.13109 + ], + [ + -117.641213, + 34.130974 + ], + [ + -117.641399, + 34.130812 + ], + [ + -117.641555, + 34.130634 + ], + [ + -117.641702, + 34.130424 + ], + [ + -117.641823, + 34.130212 + ], + [ + -117.641923, + 34.130022 + ], + [ + -117.64201, + 34.129841 + ], + [ + -117.642082, + 34.129609 + ], + [ + -117.64212, + 34.12927 + ], + [ + -117.642109, + 34.129081 + ], + [ + -117.642089, + 34.128897 + ], + [ + -117.641857, + 34.128865 + ], + [ + -117.641171, + 34.12904 + ], + [ + -117.641051, + 34.12905 + ], + [ + -117.640921, + 34.129057 + ], + [ + -117.640472, + 34.129113 + ], + [ + -117.640104, + 34.129142 + ], + [ + -117.639564, + 34.129143 + ], + [ + -117.639393, + 34.129133 + ], + [ + -117.639075, + 34.1291 + ], + [ + -117.638798, + 34.129059 + ], + [ + -117.638548, + 34.129015 + ], + [ + -117.638284, + 34.128948 + ], + [ + -117.63808, + 34.128881 + ], + [ + -117.637899, + 34.128821 + ], + [ + -117.637678, + 34.128743 + ], + [ + -117.637518, + 34.128678 + ], + [ + -117.637338, + 34.128602 + ], + [ + -117.637187, + 34.128525 + ], + [ + -117.636968, + 34.128403 + ], + [ + -117.636746, + 34.128271 + ], + [ + -117.636507, + 34.128117 + ], + [ + -117.636351, + 34.128006 + ], + [ + -117.635937, + 34.128415 + ], + [ + -117.635677, + 34.128677 + ], + [ + -117.635345, + 34.128822 + ], + [ + -117.635056, + 34.128785 + ], + [ + -117.634834, + 34.128654 + ], + [ + -117.634488, + 34.128495 + ], + [ + -117.634111, + 34.12836 + ], + [ + -117.633743, + 34.128246 + ], + [ + -117.633185, + 34.128087 + ], + [ + -117.633024, + 34.12808 + ], + [ + -117.632797, + 34.128024 + ], + [ + -117.632535, + 34.127962 + ], + [ + -117.63239, + 34.128127 + ], + [ + -117.63219, + 34.128214 + ], + [ + -117.631829, + 34.128254 + ], + [ + -117.631084, + 34.128328 + ], + [ + -117.630931, + 34.128293 + ], + [ + -117.6309, + 34.128087 + ], + [ + -117.630947, + 34.128041 + ], + [ + -117.630888, + 34.127969 + ], + [ + -117.630705, + 34.12798 + ], + [ + -117.630419, + 34.127967 + ], + [ + -117.630363, + 34.127752 + ], + [ + -117.63027, + 34.127754 + ], + [ + -117.630187, + 34.127738 + ], + [ + -117.630105, + 34.12767 + ], + [ + -117.630005, + 34.127538 + ], + [ + -117.629943, + 34.127164 + ], + [ + -117.629913, + 34.127078 + ], + [ + -117.629651, + 34.12708 + ], + [ + -117.629449, + 34.127103 + ], + [ + -117.629309, + 34.127126 + ], + [ + -117.629173, + 34.127167 + ], + [ + -117.629044, + 34.127205 + ], + [ + -117.629212, + 34.127401 + ], + [ + -117.629975, + 34.12825 + ], + [ + -117.630095, + 34.128537 + ], + [ + -117.630113, + 34.128655 + ], + [ + -117.630106, + 34.128804 + ], + [ + -117.629941, + 34.128966 + ], + [ + -117.629663, + 34.129131 + ], + [ + -117.629354, + 34.129321 + ], + [ + -117.629195, + 34.129478 + ], + [ + -117.629069, + 34.129634 + ], + [ + -117.628699, + 34.129942 + ], + [ + -117.629075, + 34.130122 + ], + [ + -117.629358, + 34.129663 + ], + [ + -117.629565, + 34.129446 + ], + [ + -117.62976, + 34.129385 + ], + [ + -117.629897, + 34.129394 + ], + [ + -117.630325, + 34.12949 + ], + [ + -117.630952, + 34.129735 + ], + [ + -117.63134, + 34.129902 + ], + [ + -117.631517, + 34.129951 + ], + [ + -117.631905, + 34.129946 + ], + [ + -117.632163, + 34.130031 + ], + [ + -117.632289, + 34.130175 + ], + [ + -117.632621, + 34.130207 + ], + [ + -117.632732, + 34.130171 + ], + [ + -117.632992, + 34.130253 + ], + [ + -117.633202, + 34.130418 + ], + [ + -117.633442, + 34.131032 + ], + [ + -117.633545, + 34.131162 + ], + [ + -117.633745, + 34.131579 + ], + [ + -117.634028, + 34.131487 + ], + [ + -117.634201, + 34.131446 + ], + [ + -117.634635, + 34.131374 + ], + [ + -117.634945, + 34.13136 + ], + [ + -117.635295, + 34.131375 + ], + [ + -117.635481, + 34.1314 + ], + [ + -117.635545, + 34.131382 + ], + [ + -117.635581, + 34.13135 + ], + [ + -117.635602, + 34.131296 + ], + [ + -117.635652, + 34.131116 + ], + [ + -117.635701, + 34.131026 + ], + [ + -117.635781, + 34.13093 + ], + [ + -117.635896, + 34.130857 + ], + [ + -117.636017, + 34.130824 + ], + [ + -117.636186, + 34.130815 + ], + [ + -117.636381, + 34.130848 + ], + [ + -117.636595, + 34.130911 + ], + [ + -117.636699, + 34.130957 + ], + [ + -117.636806, + 34.130948 + ], + [ + -117.636922, + 34.130868 + ], + [ + -117.637783, + 34.130675 + ], + [ + -117.638122, + 34.130679 + ], + [ + -117.638268, + 34.130712 + ], + [ + -117.638613, + 34.130727 + ], + [ + -117.639314, + 34.131055 + ], + [ + -117.640072, + 34.131077 + ], + [ + -117.6403, + 34.131443 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 621049251, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.175207, + 34.074752 + ], + [ + -117.175172, + 34.074765 + ], + [ + -117.175137, + 34.074788 + ], + [ + -117.175121, + 34.074804 + ], + [ + -117.175064, + 34.074902 + ], + [ + -117.175089, + 34.074916 + ], + [ + -117.175128, + 34.074957 + ], + [ + -117.175163, + 34.074968 + ], + [ + -117.175249, + 34.074996 + ], + [ + -117.175293, + 34.075004 + ], + [ + -117.175342, + 34.074991 + ], + [ + -117.175394, + 34.074966 + ], + [ + -117.17542, + 34.074932 + ], + [ + -117.175437, + 34.07489 + ], + [ + -117.175439, + 34.074849 + ], + [ + -117.175414, + 34.074815 + ], + [ + -117.175375, + 34.074778 + ], + [ + -117.175335, + 34.07476 + ], + [ + -117.17529, + 34.074757 + ], + [ + -117.175243, + 34.074764 + ], + [ + -117.175207, + 34.074752 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 623163698, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.794563, + 34.113809 + ], + [ + -117.794564, + 34.113671 + ], + [ + -117.794211, + 34.113671 + ], + [ + -117.79421, + 34.11374 + ], + [ + -117.794214, + 34.113761 + ], + [ + -117.794224, + 34.113778 + ], + [ + -117.794241, + 34.113793 + ], + [ + -117.794261, + 34.113806 + ], + [ + -117.794281, + 34.11381 + ], + [ + -117.794563, + 34.113809 + ] + ] + ] + }, + "properties": { + "name": "Kiwanis Korner", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 625901974, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.712792, + 34.028918 + ], + [ + -117.712783, + 34.028575 + ], + [ + -117.71283, + 34.028552 + ], + [ + -117.713331, + 34.02854 + ], + [ + -117.713338, + 34.028908 + ], + [ + -117.712792, + 34.028918 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 631705332, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.140428, + 34.060945 + ], + [ + -117.140427, + 34.060815 + ], + [ + -117.140397, + 34.060806 + ], + [ + -117.140378, + 34.060776 + ], + [ + -117.140295, + 34.060776 + ], + [ + -117.140295, + 34.060794 + ], + [ + -117.14028, + 34.060809 + ], + [ + -117.14028, + 34.060852 + ], + [ + -117.140297, + 34.060877 + ], + [ + -117.140297, + 34.060945 + ], + [ + -117.140428, + 34.060945 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 636073758, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.682247, + 33.955328 + ], + [ + -117.680487, + 33.95281 + ], + [ + -117.679543, + 33.95306 + ], + [ + -117.679455, + 33.953092 + ], + [ + -117.679176, + 33.953274 + ], + [ + -117.679099, + 33.953352 + ], + [ + -117.679071, + 33.953414 + ], + [ + -117.679067, + 33.953508 + ], + [ + -117.679097, + 33.953615 + ], + [ + -117.679534, + 33.954245 + ], + [ + -117.679609, + 33.954342 + ], + [ + -117.679695, + 33.954412 + ], + [ + -117.6798, + 33.954498 + ], + [ + -117.680012, + 33.954762 + ], + [ + -117.681113, + 33.956309 + ], + [ + -117.682247, + 33.955328 + ] + ] + ] + }, + "properties": { + "name": "Pinehurst Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 651807280, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.163637, + 34.04452 + ], + [ + -117.16344, + 34.044629 + ], + [ + -117.163403, + 34.044572 + ], + [ + -117.163395, + 34.044561 + ], + [ + -117.163152, + 34.044705 + ], + [ + -117.163182, + 34.044758 + ], + [ + -117.163134, + 34.044781 + ], + [ + -117.162905, + 34.044821 + ], + [ + -117.162833, + 34.044844 + ], + [ + -117.162701, + 34.044699 + ], + [ + -117.163062, + 34.044321 + ], + [ + -117.163148, + 34.044226 + ], + [ + -117.163234, + 34.044189 + ], + [ + -117.163307, + 34.044191 + ], + [ + -117.163397, + 34.044224 + ], + [ + -117.163463, + 34.044272 + ], + [ + -117.163637, + 34.04452 + ] + ] + ] + }, + "properties": { + "name": "Fire Prevention Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 653511055, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.192162, + 34.071486 + ], + [ + -117.192025, + 34.071485 + ], + [ + -117.192026, + 34.071315 + ], + [ + -117.192163, + 34.071315 + ], + [ + -117.192162, + 34.071486 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 653511060, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.19205, + 34.070949 + ], + [ + -117.191947, + 34.070914 + ], + [ + -117.191931, + 34.070894 + ], + [ + -117.191923, + 34.070871 + ], + [ + -117.191927, + 34.07085 + ], + [ + -117.191968, + 34.070769 + ], + [ + -117.191986, + 34.070755 + ], + [ + -117.192023, + 34.070745 + ], + [ + -117.192125, + 34.070768 + ], + [ + -117.192154, + 34.070796 + ], + [ + -117.192167, + 34.070819 + ], + [ + -117.192175, + 34.070857 + ], + [ + -117.192163, + 34.070893 + ], + [ + -117.192144, + 34.070921 + ], + [ + -117.192093, + 34.070947 + ], + [ + -117.19205, + 34.070949 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 669060052, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.168319, + 34.06165 + ], + [ + -117.167129, + 34.061646 + ], + [ + -117.167129, + 34.061594 + ], + [ + -117.168319, + 34.061598 + ], + [ + -117.168319, + 34.06165 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 4354434, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.168549, + 34.118512 + ], + [ + -118.169504, + 34.117792 + ], + [ + -118.169576, + 34.117867 + ], + [ + -118.169634, + 34.119119 + ], + [ + -118.17015, + 34.119714 + ], + [ + -118.168847, + 34.120764 + ], + [ + -118.168515, + 34.121057 + ], + [ + -118.16807, + 34.120338 + ], + [ + -118.167848, + 34.120407 + ], + [ + -118.167444, + 34.119728 + ], + [ + -118.167381, + 34.119589 + ], + [ + -118.167305, + 34.119284 + ], + [ + -118.167299, + 34.119138 + ], + [ + -118.16735, + 34.118844 + ], + [ + -118.167416, + 34.118686 + ], + [ + -118.167499, + 34.118547 + ], + [ + -118.167642, + 34.118332 + ], + [ + -118.167752, + 34.118191 + ], + [ + -118.167862, + 34.118309 + ], + [ + -118.167901, + 34.118406 + ], + [ + -118.167958, + 34.118474 + ], + [ + -118.168035, + 34.118533 + ], + [ + -118.168124, + 34.118574 + ], + [ + -118.16834, + 34.118592 + ], + [ + -118.168549, + 34.118512 + ] + ] + ] + }, + "properties": { + "name": "San Pascual Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 24684508, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.112637, + 34.08457 + ], + [ + -118.112641, + 34.084623 + ], + [ + -118.112641, + 34.084886 + ], + [ + -118.112641, + 34.085336 + ], + [ + -118.112636, + 34.085611 + ], + [ + -118.11264, + 34.086169 + ], + [ + -118.112636, + 34.086561 + ], + [ + -118.112631, + 34.086973 + ], + [ + -118.112641, + 34.08728 + ], + [ + -118.11305, + 34.08748 + ], + [ + -118.113552, + 34.087728 + ], + [ + -118.113926, + 34.087956 + ], + [ + -118.114084, + 34.087842 + ], + [ + -118.114205, + 34.087802 + ], + [ + -118.11427, + 34.087656 + ], + [ + -118.114506, + 34.087663 + ], + [ + -118.114513, + 34.08797 + ], + [ + -118.114576, + 34.088147 + ], + [ + -118.114746, + 34.088279 + ], + [ + -118.114876, + 34.088388 + ], + [ + -118.114905, + 34.088518 + ], + [ + -118.11494, + 34.088629 + ], + [ + -118.115066, + 34.088746 + ], + [ + -118.115576, + 34.089164 + ], + [ + -118.115884, + 34.089281 + ], + [ + -118.116861, + 34.089269 + ], + [ + -118.116882, + 34.089904 + ], + [ + -118.116882, + 34.090355 + ], + [ + -118.116914, + 34.090426 + ], + [ + -118.116943, + 34.090461 + ], + [ + -118.117001, + 34.090475 + ], + [ + -118.118147, + 34.090504 + ], + [ + -118.118117, + 34.09133 + ], + [ + -118.11622, + 34.092133 + ], + [ + -118.11248, + 34.09372 + ], + [ + -118.112147, + 34.093014 + ], + [ + -118.110123, + 34.088601 + ], + [ + -118.109627, + 34.087427 + ], + [ + -118.109245, + 34.086668 + ], + [ + -118.10876, + 34.085595 + ], + [ + -118.108323, + 34.085037 + ], + [ + -118.107966, + 34.084689 + ], + [ + -118.108316, + 34.084122 + ], + [ + -118.108378, + 34.084094 + ], + [ + -118.108456, + 34.084094 + ], + [ + -118.108526, + 34.084105 + ], + [ + -118.108578, + 34.084154 + ], + [ + -118.108721, + 34.084623 + ], + [ + -118.108803, + 34.084756 + ], + [ + -118.109444, + 34.084724 + ], + [ + -118.110389, + 34.084679 + ], + [ + -118.111173, + 34.084641 + ], + [ + -118.11203, + 34.084598 + ], + [ + -118.112637, + 34.08457 + ] + ] + ] + }, + "properties": { + "name": "Alhambra Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 24687500, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.104452, + 34.084754 + ], + [ + -118.105356, + 34.084745 + ], + [ + -118.105509, + 34.084743 + ], + [ + -118.105606, + 34.084642 + ], + [ + -118.106506, + 34.084634 + ], + [ + -118.107481, + 34.084626 + ], + [ + -118.107534, + 34.084716 + ], + [ + -118.107757, + 34.084781 + ], + [ + -118.107821, + 34.084674 + ], + [ + -118.107395, + 34.084332 + ], + [ + -118.107202, + 34.084196 + ], + [ + -118.106933, + 34.084043 + ], + [ + -118.106663, + 34.083925 + ], + [ + -118.106403, + 34.08383 + ], + [ + -118.106048, + 34.08373 + ], + [ + -118.105171, + 34.083534 + ], + [ + -118.104487, + 34.083392 + ], + [ + -118.103932, + 34.083259 + ], + [ + -118.103841, + 34.08315 + ], + [ + -118.103696, + 34.083079 + ], + [ + -118.103425, + 34.082928 + ], + [ + -118.1032, + 34.082775 + ], + [ + -118.10302, + 34.082637 + ], + [ + -118.102859, + 34.082486 + ], + [ + -118.102693, + 34.082315 + ], + [ + -118.102521, + 34.082099 + ], + [ + -118.102486, + 34.082119 + ], + [ + -118.102578, + 34.08233 + ], + [ + -118.102891, + 34.08259 + ], + [ + -118.103821, + 34.083853 + ], + [ + -118.104023, + 34.084307 + ], + [ + -118.104452, + 34.084754 + ] + ] + ] + }, + "properties": { + "name": "Vincent Lugo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 25205448, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.087702, + 34.090252 + ], + [ + -118.087694, + 34.090124 + ], + [ + -118.087676, + 34.090053 + ], + [ + -118.087642, + 34.09001 + ], + [ + -118.087565, + 34.089974 + ], + [ + -118.087488, + 34.089946 + ], + [ + -118.087676, + 34.08979 + ], + [ + -118.086586, + 34.089392 + ], + [ + -118.086569, + 34.08947 + ], + [ + -118.086535, + 34.089527 + ], + [ + -118.086518, + 34.089576 + ], + [ + -118.086528, + 34.090266 + ], + [ + -118.087702, + 34.090252 + ] + ] + ] + }, + "properties": { + "name": "Sally Tanner Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 25668124, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.113825, + 34.123769 + ], + [ + -118.112503, + 34.123982 + ], + [ + -118.111186, + 34.124209 + ], + [ + -118.110481, + 34.124326 + ], + [ + -118.109855, + 34.12443 + ], + [ + -118.108838, + 34.124606 + ], + [ + -118.10893, + 34.124909 + ], + [ + -118.109549, + 34.12769 + ], + [ + -118.11061, + 34.132713 + ], + [ + -118.113156, + 34.132826 + ], + [ + -118.113467, + 34.132866 + ], + [ + -118.113808, + 34.132871 + ], + [ + -118.114325, + 34.132851 + ], + [ + -118.117065, + 34.132661 + ], + [ + -118.117166, + 34.132654 + ], + [ + -118.119002, + 34.132599 + ], + [ + -118.119275, + 34.132555 + ], + [ + -118.119495, + 34.132452 + ], + [ + -118.119651, + 34.132311 + ], + [ + -118.119728, + 34.132204 + ], + [ + -118.11981, + 34.13204 + ], + [ + -118.11985, + 34.131932 + ], + [ + -118.119842, + 34.13175 + ], + [ + -118.119821, + 34.131541 + ], + [ + -118.119746, + 34.130556 + ], + [ + -118.119713, + 34.13039 + ], + [ + -118.119638, + 34.130143 + ], + [ + -118.119602, + 34.130038 + ], + [ + -118.11956, + 34.129936 + ], + [ + -118.119477, + 34.129687 + ], + [ + -118.119099, + 34.128636 + ], + [ + -118.119168, + 34.128451 + ], + [ + -118.120026, + 34.127996 + ], + [ + -118.119906, + 34.127769 + ], + [ + -118.120061, + 34.127698 + ], + [ + -118.119537, + 34.126895 + ], + [ + -118.119374, + 34.126973 + ], + [ + -118.119185, + 34.126703 + ], + [ + -118.119331, + 34.126618 + ], + [ + -118.117821, + 34.124927 + ], + [ + -118.11758, + 34.124955 + ], + [ + -118.11728, + 34.124493 + ], + [ + -118.1171, + 34.124266 + ], + [ + -118.116808, + 34.124074 + ], + [ + -118.116928, + 34.12396 + ], + [ + -118.116679, + 34.123776 + ], + [ + -118.116482, + 34.123925 + ], + [ + -118.115932, + 34.123705 + ], + [ + -118.115649, + 34.12357 + ], + [ + -118.1153, + 34.123429 + ], + [ + -118.115155, + 34.123499 + ], + [ + -118.11488, + 34.123605 + ], + [ + -118.113825, + 34.123769 + ] + ] + ] + }, + "properties": { + "name": "The Huntington Library, Art Collections, and Botanical Gardens", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 27336784, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.146617, + 34.06956 + ], + [ + -118.145377, + 34.069572 + ], + [ + -118.145355, + 34.068861 + ], + [ + -118.144342, + 34.068868 + ], + [ + -118.144334, + 34.067972 + ], + [ + -118.144308, + 34.067908 + ], + [ + -118.144239, + 34.067858 + ], + [ + -118.144076, + 34.067766 + ], + [ + -118.144205, + 34.067673 + ], + [ + -118.144325, + 34.067602 + ], + [ + -118.144437, + 34.067517 + ], + [ + -118.144522, + 34.067431 + ], + [ + -118.144591, + 34.067325 + ], + [ + -118.144643, + 34.067218 + ], + [ + -118.144668, + 34.067104 + ], + [ + -118.144677, + 34.066984 + ], + [ + -118.144952, + 34.066977 + ], + [ + -118.144952, + 34.066578 + ], + [ + -118.144986, + 34.066273 + ], + [ + -118.145012, + 34.06623 + ], + [ + -118.145072, + 34.066216 + ], + [ + -118.145269, + 34.066209 + ], + [ + -118.14611, + 34.066209 + ], + [ + -118.146138, + 34.066279 + ], + [ + -118.146151, + 34.06661 + ], + [ + -118.146598, + 34.066609 + ], + [ + -118.146617, + 34.06956 + ] + ] + ] + }, + "properties": { + "name": "Granada Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 28969269, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.054744, + 33.991761 + ], + [ + -118.054748, + 33.990032 + ], + [ + -118.054819, + 33.990031 + ], + [ + -118.055429, + 33.990034 + ], + [ + -118.055478, + 33.990034 + ], + [ + -118.055749, + 33.989994 + ], + [ + -118.057465, + 33.990029 + ], + [ + -118.058385, + 33.992703 + ], + [ + -118.057464, + 33.991781 + ], + [ + -118.054744, + 33.991761 + ] + ] + ] + }, + "properties": { + "name": "Palm Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 28969277, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.055626, + 33.990722 + ], + [ + -118.055621, + 33.990381 + ], + [ + -118.055432, + 33.990382 + ], + [ + -118.055429, + 33.990034 + ], + [ + -118.054819, + 33.990031 + ], + [ + -118.054832, + 33.990724 + ], + [ + -118.055626, + 33.990722 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 29145582, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.057582, + 34.107292 + ], + [ + -118.057708, + 34.107891 + ], + [ + -118.057749, + 34.108088 + ], + [ + -118.057761, + 34.108143 + ], + [ + -118.056856, + 34.108273 + ], + [ + -118.056749, + 34.107734 + ], + [ + -118.056677, + 34.107423 + ], + [ + -118.056707, + 34.107419 + ], + [ + -118.056839, + 34.1074 + ], + [ + -118.057486, + 34.107306 + ], + [ + -118.057582, + 34.107292 + ] + ] + ] + }, + "properties": { + "name": "Temple City Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 29186972, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.167107, + 34.118341 + ], + [ + -118.166755, + 34.118448 + ], + [ + -118.166106, + 34.118603 + ], + [ + -118.16583, + 34.118676 + ], + [ + -118.165795, + 34.119076 + ], + [ + -118.165953, + 34.119544 + ], + [ + -118.165951, + 34.120168 + ], + [ + -118.165685, + 34.120286 + ], + [ + -118.165905, + 34.120626 + ], + [ + -118.165873, + 34.120986 + ], + [ + -118.165859, + 34.121703 + ], + [ + -118.166149, + 34.122271 + ], + [ + -118.166358, + 34.122524 + ], + [ + -118.16664, + 34.122391 + ], + [ + -118.167356, + 34.121945 + ], + [ + -118.167324, + 34.121661 + ], + [ + -118.16756, + 34.121461 + ], + [ + -118.167555, + 34.121405 + ], + [ + -118.167152, + 34.12109 + ], + [ + -118.167125, + 34.120934 + ], + [ + -118.166892, + 34.120697 + ], + [ + -118.166712, + 34.120477 + ], + [ + -118.166678, + 34.120335 + ], + [ + -118.166611, + 34.120337 + ], + [ + -118.166602, + 34.120231 + ], + [ + -118.166739, + 34.119214 + ], + [ + -118.166809, + 34.119216 + ], + [ + -118.166863, + 34.118721 + ], + [ + -118.167018, + 34.118425 + ], + [ + -118.167107, + 34.118341 + ] + ] + ] + }, + "properties": { + "name": "Arroyo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30062419, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.087023, + 34.142138 + ], + [ + -118.087041, + 34.141279 + ], + [ + -118.085959, + 34.141264 + ], + [ + -118.085908, + 34.140334 + ], + [ + -118.084534, + 34.140312 + ], + [ + -118.086345, + 34.142138 + ], + [ + -118.087023, + 34.142138 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30176738, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.048262, + 34.101288 + ], + [ + -118.048374, + 34.101793 + ], + [ + -118.048168, + 34.101821 + ], + [ + -118.048065, + 34.101317 + ], + [ + -118.048262, + 34.101288 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30687627, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.071152, + 34.130882 + ], + [ + -118.071131, + 34.130651 + ], + [ + -118.069457, + 34.130756 + ], + [ + -118.069492, + 34.130989 + ], + [ + -118.069546, + 34.13114 + ], + [ + -118.06964, + 34.131255 + ], + [ + -118.069795, + 34.131355 + ], + [ + -118.069951, + 34.131433 + ], + [ + -118.070141, + 34.131471 + ], + [ + -118.070345, + 34.131479 + ], + [ + -118.070533, + 34.131457 + ], + [ + -118.070699, + 34.131406 + ], + [ + -118.070836, + 34.131333 + ], + [ + -118.070946, + 34.131246 + ], + [ + -118.071056, + 34.131111 + ], + [ + -118.07112, + 34.131018 + ], + [ + -118.071152, + 34.130882 + ] + ] + ] + }, + "properties": { + "name": "Michillinda Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30794529, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.125658, + 34.135731 + ], + [ + -118.125258, + 34.135734 + ], + [ + -118.125264, + 34.134406 + ], + [ + -118.125661, + 34.134413 + ], + [ + -118.125658, + 34.135731 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30794534, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.127517, + 34.134148 + ], + [ + -118.127511, + 34.135296 + ], + [ + -118.125945, + 34.135296 + ], + [ + -118.125946, + 34.134784 + ], + [ + -118.125946, + 34.134141 + ], + [ + -118.127517, + 34.134148 + ] + ] + ] + }, + "properties": { + "name": "Caltech Athletic Center North Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30794570, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.121207, + 34.143463 + ], + [ + -118.120768, + 34.143463 + ], + [ + -118.120767, + 34.144527 + ], + [ + -118.121206, + 34.144527 + ], + [ + -118.121207, + 34.143463 + ] + ] + ] + }, + "properties": { + "name": "Tennis Courts", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30794584, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.148786, + 34.147728 + ], + [ + -118.148803, + 34.149454 + ], + [ + -118.147053, + 34.149454 + ], + [ + -118.147978, + 34.14771 + ], + [ + -118.148786, + 34.147728 + ] + ] + ] + }, + "properties": { + "name": "Pasadena Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30929924, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.1655, + 34.150414 + ], + [ + -118.165649, + 34.15096 + ], + [ + -118.165087, + 34.151131 + ], + [ + -118.165108, + 34.152077 + ], + [ + -118.165448, + 34.152716 + ], + [ + -118.165736, + 34.153377 + ], + [ + -118.165979, + 34.154883 + ], + [ + -118.166178, + 34.156162 + ], + [ + -118.166191, + 34.156247 + ], + [ + -118.164661, + 34.157156 + ], + [ + -118.164327, + 34.156614 + ], + [ + -118.164138, + 34.156089 + ], + [ + -118.164154, + 34.156061 + ], + [ + -118.164533, + 34.155407 + ], + [ + -118.164653, + 34.155187 + ], + [ + -118.164198, + 34.154995 + ], + [ + -118.163726, + 34.154654 + ], + [ + -118.163366, + 34.15437 + ], + [ + -118.163134, + 34.153937 + ], + [ + -118.163108, + 34.153751 + ], + [ + -118.163091, + 34.153631 + ], + [ + -118.163114, + 34.15353 + ], + [ + -118.163125, + 34.153482 + ], + [ + -118.16322, + 34.153198 + ], + [ + -118.16328, + 34.152921 + ], + [ + -118.163443, + 34.152821 + ], + [ + -118.16352, + 34.152623 + ], + [ + -118.163468, + 34.152331 + ], + [ + -118.163529, + 34.152111 + ], + [ + -118.163623, + 34.151799 + ], + [ + -118.16316, + 34.151948 + ], + [ + -118.1631, + 34.151713 + ], + [ + -118.163331, + 34.151138 + ], + [ + -118.163657, + 34.150925 + ], + [ + -118.163941, + 34.150762 + ], + [ + -118.164533, + 34.150776 + ], + [ + -118.164861, + 34.150739 + ], + [ + -118.165203, + 34.150465 + ], + [ + -118.165259, + 34.15042 + ], + [ + -118.1655, + 34.150414 + ] + ] + ] + }, + "properties": { + "name": "Brookside Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30967906, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.031528, + 34.135556 + ], + [ + -118.031521, + 34.135236 + ], + [ + -118.031432, + 34.130928 + ], + [ + -118.040903, + 34.130805 + ], + [ + -118.042377, + 34.130801 + ], + [ + -118.043956, + 34.131074 + ], + [ + -118.043926, + 34.131318 + ], + [ + -118.043119, + 34.131615 + ], + [ + -118.042217, + 34.132371 + ], + [ + -118.04231, + 34.132576 + ], + [ + -118.041592, + 34.133111 + ], + [ + -118.040932, + 34.133757 + ], + [ + -118.039711, + 34.135078 + ], + [ + -118.038461, + 34.136429 + ], + [ + -118.03721, + 34.136442 + ], + [ + -118.037315, + 34.136072 + ], + [ + -118.036833, + 34.135885 + ], + [ + -118.035851, + 34.136018 + ], + [ + -118.033036, + 34.136311 + ], + [ + -118.032548, + 34.136142 + ], + [ + -118.031999, + 34.135705 + ], + [ + -118.031528, + 34.135556 + ] + ] + ] + }, + "properties": { + "name": "Santa Anita Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30967907, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.037681, + 34.137252 + ], + [ + -118.037038, + 34.136918 + ], + [ + -118.0373, + 34.136074 + ], + [ + -118.036825, + 34.135887 + ], + [ + -118.036031, + 34.136015 + ], + [ + -118.03315, + 34.136309 + ], + [ + -118.033132, + 34.136505 + ], + [ + -118.032174, + 34.136516 + ], + [ + -118.032025, + 34.136427 + ], + [ + -118.032013, + 34.138511 + ], + [ + -118.032015, + 34.138753 + ], + [ + -118.031572, + 34.138977 + ], + [ + -118.031623, + 34.139844 + ], + [ + -118.031624, + 34.139865 + ], + [ + -118.031683, + 34.139912 + ], + [ + -118.031711, + 34.139912 + ], + [ + -118.032055, + 34.139912 + ], + [ + -118.035206, + 34.139877 + ], + [ + -118.035333, + 34.139804 + ], + [ + -118.035854, + 34.139239 + ], + [ + -118.036077, + 34.139048 + ], + [ + -118.037368, + 34.137636 + ], + [ + -118.037681, + 34.137252 + ] + ] + ] + }, + "properties": { + "name": "Arcadia County Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 31191660, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.091259, + 34.11056 + ], + [ + -118.091278, + 34.11341 + ], + [ + -118.093897, + 34.113427 + ], + [ + -118.095002, + 34.113435 + ], + [ + -118.099688, + 34.113408 + ], + [ + -118.099655, + 34.111578 + ], + [ + -118.099144, + 34.111578 + ], + [ + -118.099146, + 34.110931 + ], + [ + -118.098579, + 34.110938 + ], + [ + -118.098577, + 34.110728 + ], + [ + -118.098496, + 34.110729 + ], + [ + -118.098493, + 34.110511 + ], + [ + -118.097073, + 34.110521 + ], + [ + -118.096638, + 34.110498 + ], + [ + -118.096569, + 34.106322 + ], + [ + -118.096675, + 34.105768 + ], + [ + -118.09669, + 34.105357 + ], + [ + -118.096324, + 34.103289 + ], + [ + -118.094295, + 34.103513 + ], + [ + -118.093514, + 34.103529 + ], + [ + -118.093508, + 34.105201 + ], + [ + -118.095122, + 34.105218 + ], + [ + -118.095216, + 34.10573 + ], + [ + -118.095227, + 34.106258 + ], + [ + -118.093543, + 34.106276 + ], + [ + -118.093639, + 34.108319 + ], + [ + -118.093925, + 34.11056 + ], + [ + -118.091259, + 34.11056 + ] + ] + ] + }, + "properties": { + "name": "San Gabriel Country Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 32025291, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.025025, + 34.138474 + ], + [ + -118.025025, + 34.138979 + ], + [ + -118.024759, + 34.139902 + ], + [ + -118.023625, + 34.139156 + ], + [ + -118.023651, + 34.138474 + ], + [ + -118.025025, + 34.138474 + ] + ] + ] + }, + "properties": { + "name": "Bonita Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38510053, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.146784, + 34.115547 + ], + [ + -118.146433, + 34.115563 + ], + [ + -118.145988, + 34.117388 + ], + [ + -118.146025, + 34.117393 + ], + [ + -118.146012, + 34.117446 + ], + [ + -118.146006, + 34.11748 + ], + [ + -118.146004, + 34.117516 + ], + [ + -118.146009, + 34.117554 + ], + [ + -118.145941, + 34.117561 + ], + [ + -118.145678, + 34.117577 + ], + [ + -118.14572, + 34.118214 + ], + [ + -118.145763, + 34.118828 + ], + [ + -118.145794, + 34.118854 + ], + [ + -118.146005, + 34.118857 + ], + [ + -118.146105, + 34.118782 + ], + [ + -118.146294, + 34.11859 + ], + [ + -118.146369, + 34.118498 + ], + [ + -118.146451, + 34.118381 + ], + [ + -118.146517, + 34.118263 + ], + [ + -118.146672, + 34.117958 + ], + [ + -118.146817, + 34.117596 + ], + [ + -118.147015, + 34.117084 + ], + [ + -118.147055, + 34.116986 + ], + [ + -118.147093, + 34.116895 + ], + [ + -118.147142, + 34.116735 + ], + [ + -118.147627, + 34.115609 + ], + [ + -118.146937, + 34.115545 + ], + [ + -118.146784, + 34.115547 + ] + ] + ] + }, + "properties": { + "name": "Garfield Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 39453415, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.939076, + 34.07661 + ], + [ + -117.938278, + 34.076595 + ], + [ + -117.937377, + 34.076574 + ], + [ + -117.936544, + 34.076553 + ], + [ + -117.936416, + 34.076553 + ], + [ + -117.935264, + 34.076537 + ], + [ + -117.935051, + 34.078735 + ], + [ + -117.935025, + 34.079073 + ], + [ + -117.934857, + 34.079526 + ], + [ + -117.935926, + 34.079574 + ], + [ + -117.935943, + 34.079425 + ], + [ + -117.935995, + 34.079368 + ], + [ + -117.936064, + 34.079339 + ], + [ + -117.936687, + 34.079345 + ], + [ + -117.936853, + 34.079346 + ], + [ + -117.937815, + 34.079396 + ], + [ + -117.938733, + 34.079396 + ], + [ + -117.938964, + 34.077352 + ], + [ + -117.938973, + 34.077157 + ], + [ + -117.938999, + 34.076944 + ], + [ + -117.939051, + 34.076773 + ], + [ + -117.939076, + 34.07661 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 39498126, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.063185, + 34.06581 + ], + [ + -118.063322, + 34.066037 + ], + [ + -118.066137, + 34.063926 + ], + [ + -118.065991, + 34.063798 + ], + [ + -118.065665, + 34.064047 + ], + [ + -118.064481, + 34.064907 + ], + [ + -118.063682, + 34.065469 + ], + [ + -118.063181, + 34.065469 + ], + [ + -118.063185, + 34.06581 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40542437, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.162523, + 34.114352 + ], + [ + -118.162514, + 34.115208 + ], + [ + -118.163006, + 34.115194 + ], + [ + -118.163001, + 34.115067 + ], + [ + -118.163528, + 34.115055 + ], + [ + -118.16351, + 34.114187 + ], + [ + -118.163036, + 34.114203 + ], + [ + -118.162523, + 34.114352 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 41158164, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.112648, + 34.084567 + ], + [ + -118.112651, + 34.084632 + ], + [ + -118.112646, + 34.08498 + ], + [ + -118.112653, + 34.085368 + ], + [ + -118.112643, + 34.085803 + ], + [ + -118.112646, + 34.086157 + ], + [ + -118.112646, + 34.086597 + ], + [ + -118.112642, + 34.087008 + ], + [ + -118.112651, + 34.087273 + ], + [ + -118.113009, + 34.087452 + ], + [ + -118.113278, + 34.087586 + ], + [ + -118.113562, + 34.087725 + ], + [ + -118.113925, + 34.087948 + ], + [ + -118.114075, + 34.087838 + ], + [ + -118.114199, + 34.087796 + ], + [ + -118.114258, + 34.087651 + ], + [ + -118.114527, + 34.087649 + ], + [ + -118.114534, + 34.087972 + ], + [ + -118.114596, + 34.088126 + ], + [ + -118.114769, + 34.088263 + ], + [ + -118.114897, + 34.088362 + ], + [ + -118.114927, + 34.088529 + ], + [ + -118.114982, + 34.088639 + ], + [ + -118.115105, + 34.088749 + ], + [ + -118.115632, + 34.089154 + ], + [ + -118.115897, + 34.089269 + ], + [ + -118.116849, + 34.089241 + ], + [ + -118.11684, + 34.086794 + ], + [ + -118.11448, + 34.086799 + ], + [ + -118.114482, + 34.085852 + ], + [ + -118.11448, + 34.084476 + ], + [ + -118.11315, + 34.084547 + ], + [ + -118.112648, + 34.084567 + ] + ] + ] + }, + "properties": { + "name": "Almansor Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 41742628, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.159804, + 34.114794 + ], + [ + -118.159817, + 34.115601 + ], + [ + -118.160913, + 34.115584 + ], + [ + -118.160904, + 34.114787 + ], + [ + -118.159804, + 34.114794 + ] + ] + ] + }, + "properties": { + "name": "Orange Grove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 42591096, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.124192, + 34.118797 + ], + [ + -118.123527, + 34.119079 + ], + [ + -118.123221, + 34.118625 + ], + [ + -118.121873, + 34.118931 + ], + [ + -118.121332, + 34.119137 + ], + [ + -118.120792, + 34.119414 + ], + [ + -118.120225, + 34.120025 + ], + [ + -118.119577, + 34.12029 + ], + [ + -118.119996, + 34.120858 + ], + [ + -118.120122, + 34.121035 + ], + [ + -118.120271, + 34.121254 + ], + [ + -118.120384, + 34.121353 + ], + [ + -118.120504, + 34.121416 + ], + [ + -118.1207, + 34.121504 + ], + [ + -118.120906, + 34.121537 + ], + [ + -118.12119, + 34.121531 + ], + [ + -118.121565, + 34.121456 + ], + [ + -118.121947, + 34.121436 + ], + [ + -118.122335, + 34.121503 + ], + [ + -118.122447, + 34.121522 + ], + [ + -118.123035, + 34.121525 + ], + [ + -118.123153, + 34.121478 + ], + [ + -118.123195, + 34.121461 + ], + [ + -118.123662, + 34.121384 + ], + [ + -118.124166, + 34.121385 + ], + [ + -118.124972, + 34.121367 + ], + [ + -118.125072, + 34.121152 + ], + [ + -118.125182, + 34.120981 + ], + [ + -118.124517, + 34.120559 + ], + [ + -118.125203, + 34.119866 + ], + [ + -118.125021, + 34.119748 + ], + [ + -118.124336, + 34.120359 + ], + [ + -118.123701, + 34.119329 + ], + [ + -118.124372, + 34.119074 + ], + [ + -118.124192, + 34.118797 + ] + ] + ] + }, + "properties": { + "name": "Lacy Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 43070193, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.156799, + 34.134637 + ], + [ + -118.156807, + 34.135683 + ], + [ + -118.155638, + 34.135689 + ], + [ + -118.15563, + 34.134643 + ], + [ + -118.156799, + 34.134637 + ] + ] + ] + }, + "properties": { + "name": "Singer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 43793678, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.115495, + 34.011459 + ], + [ + -118.114107, + 34.011166 + ], + [ + -118.115109, + 34.007849 + ], + [ + -118.115139, + 34.007818 + ], + [ + -118.115201, + 34.007793 + ], + [ + -118.116526, + 34.008075 + ], + [ + -118.115495, + 34.011459 + ] + ] + ] + }, + "properties": { + "name": "Montebello City Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 43838514, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.069549, + 33.999921 + ], + [ + -118.069911, + 33.998727 + ], + [ + -118.069606, + 33.998623 + ], + [ + -118.069472, + 33.998571 + ], + [ + -118.068906, + 33.998371 + ], + [ + -118.068566, + 33.998279 + ], + [ + -118.068489, + 33.998745 + ], + [ + -118.069143, + 33.999849 + ], + [ + -118.069549, + 33.999921 + ] + ] + ] + }, + "properties": { + "name": "Amigo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44710337, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.148985, + 34.140688 + ], + [ + -118.150053, + 34.140675 + ], + [ + -118.150238, + 34.140712 + ], + [ + -118.150308, + 34.140784 + ], + [ + -118.15034, + 34.143456 + ], + [ + -118.149015, + 34.143479 + ], + [ + -118.148985, + 34.140688 + ] + ] + ] + }, + "properties": { + "name": "Central Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 45769436, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.177811, + 34.038594 + ], + [ + -118.175827, + 34.038598 + ], + [ + -118.17582, + 34.037057 + ], + [ + -118.176375, + 34.037032 + ], + [ + -118.176697, + 34.036995 + ], + [ + -118.177075, + 34.036905 + ], + [ + -118.178497, + 34.036497 + ], + [ + -118.178543, + 34.036531 + ], + [ + -118.17855, + 34.037462 + ], + [ + -118.178529, + 34.037639 + ], + [ + -118.178454, + 34.037757 + ], + [ + -118.17825, + 34.037967 + ], + [ + -118.177861, + 34.038365 + ], + [ + -118.177811, + 34.038456 + ], + [ + -118.177811, + 34.038594 + ] + ] + ] + }, + "properties": { + "name": "Obregon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46257162, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.178866, + 34.050963 + ], + [ + -118.177422, + 34.050689 + ], + [ + -118.177442, + 34.050528 + ], + [ + -118.177102, + 34.050438 + ], + [ + -118.177178, + 34.050245 + ], + [ + -118.177219, + 34.050083 + ], + [ + -118.177563, + 34.047821 + ], + [ + -118.177983, + 34.047809 + ], + [ + -118.178104, + 34.047917 + ], + [ + -118.178461, + 34.047877 + ], + [ + -118.178614, + 34.047834 + ], + [ + -118.179247, + 34.047833 + ], + [ + -118.179836, + 34.047885 + ], + [ + -118.179926, + 34.048193 + ], + [ + -118.179928, + 34.048399 + ], + [ + -118.17992, + 34.048571 + ], + [ + -118.179163, + 34.049639 + ], + [ + -118.178963, + 34.049999 + ], + [ + -118.178886, + 34.050224 + ], + [ + -118.178854, + 34.050385 + ], + [ + -118.178854, + 34.050575 + ], + [ + -118.178888, + 34.050755 + ], + [ + -118.178921, + 34.050905 + ], + [ + -118.178913, + 34.050958 + ], + [ + -118.178866, + 34.050963 + ] + ] + ] + }, + "properties": { + "name": "City Terrace Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46257164, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.142937, + 34.054041 + ], + [ + -118.142658, + 34.053815 + ], + [ + -118.142564, + 34.053666 + ], + [ + -118.141929, + 34.053358 + ], + [ + -118.141423, + 34.054024 + ], + [ + -118.141357, + 34.05411 + ], + [ + -118.140745, + 34.054944 + ], + [ + -118.140665, + 34.055053 + ], + [ + -118.140983, + 34.055236 + ], + [ + -118.141123, + 34.055307 + ], + [ + -118.141222, + 34.055336 + ], + [ + -118.141336, + 34.055345 + ], + [ + -118.141421, + 34.05534 + ], + [ + -118.141516, + 34.055317 + ], + [ + -118.141638, + 34.055267 + ], + [ + -118.142438, + 34.054876 + ], + [ + -118.142555, + 34.054792 + ], + [ + -118.142616, + 34.054724 + ], + [ + -118.142659, + 34.05463 + ], + [ + -118.142745, + 34.054375 + ], + [ + -118.142799, + 34.054225 + ], + [ + -118.142858, + 34.054121 + ], + [ + -118.142937, + 34.054041 + ] + ] + ] + }, + "properties": { + "name": "Sequoia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46257168, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.151284, + 34.047353 + ], + [ + -118.150669, + 34.047361 + ], + [ + -118.150623, + 34.047329 + ], + [ + -118.150368, + 34.04692 + ], + [ + -118.15061, + 34.046758 + ], + [ + -118.15074, + 34.046644 + ], + [ + -118.150848, + 34.046507 + ], + [ + -118.150912, + 34.046401 + ], + [ + -118.151468, + 34.045231 + ], + [ + -118.15152, + 34.045211 + ], + [ + -118.152163, + 34.045425 + ], + [ + -118.151759, + 34.04627 + ], + [ + -118.151226, + 34.047165 + ], + [ + -118.151284, + 34.047353 + ] + ] + ] + }, + "properties": { + "name": "Sunnyslopes Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 47250214, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.893617, + 33.925667 + ], + [ + -117.893626, + 33.926605 + ], + [ + -117.893908, + 33.926639 + ], + [ + -117.894014, + 33.926883 + ], + [ + -117.894233, + 33.926909 + ], + [ + -117.89466, + 33.926879 + ], + [ + -117.895023, + 33.927287 + ], + [ + -117.895228, + 33.927443 + ], + [ + -117.895483, + 33.927522 + ], + [ + -117.894795, + 33.927526 + ], + [ + -117.891929, + 33.927544 + ], + [ + -117.891858, + 33.927555 + ], + [ + -117.891802, + 33.927356 + ], + [ + -117.891927, + 33.927356 + ], + [ + -117.891884, + 33.926595 + ], + [ + -117.891855, + 33.926587 + ], + [ + -117.891835, + 33.925894 + ], + [ + -117.891952, + 33.925827 + ], + [ + -117.891958, + 33.925805 + ], + [ + -117.89197, + 33.925755 + ], + [ + -117.891943, + 33.925162 + ], + [ + -117.89197, + 33.925115 + ], + [ + -117.892021, + 33.925094 + ], + [ + -117.893531, + 33.925066 + ], + [ + -117.893546, + 33.925498 + ], + [ + -117.893548, + 33.925548 + ], + [ + -117.893617, + 33.925667 + ] + ] + ] + }, + "properties": { + "name": "Brea Junior High Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 47791506, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.15978, + 34.03608 + ], + [ + -118.159793, + 34.03541 + ], + [ + -118.159541, + 34.035411 + ], + [ + -118.159545, + 34.035161 + ], + [ + -118.159546, + 34.035092 + ], + [ + -118.159543, + 34.034847 + ], + [ + -118.159545, + 34.034706 + ], + [ + -118.159601, + 34.03463 + ], + [ + -118.160142, + 34.034521 + ], + [ + -118.16014, + 34.033517 + ], + [ + -118.159145, + 34.033523 + ], + [ + -118.158492, + 34.033529 + ], + [ + -118.158437, + 34.033711 + ], + [ + -118.158405, + 34.033816 + ], + [ + -118.158356, + 34.033865 + ], + [ + -118.158166, + 34.033811 + ], + [ + -118.158077, + 34.034052 + ], + [ + -118.158104, + 34.034058 + ], + [ + -118.157817, + 34.034774 + ], + [ + -118.157641, + 34.034725 + ], + [ + -118.157584, + 34.034894 + ], + [ + -118.15751, + 34.035001 + ], + [ + -118.157489, + 34.035195 + ], + [ + -118.157496, + 34.035273 + ], + [ + -118.157518, + 34.035534 + ], + [ + -118.157566, + 34.035589 + ], + [ + -118.158212, + 34.03584 + ], + [ + -118.158277, + 34.035866 + ], + [ + -118.158667, + 34.035877 + ], + [ + -118.158655, + 34.036067 + ], + [ + -118.159323, + 34.036095 + ], + [ + -118.15978, + 34.03608 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 50439407, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818275, + 34.059636 + ], + [ + -117.818354, + 34.06028 + ], + [ + -117.818367, + 34.060308 + ], + [ + -117.818396, + 34.060326 + ], + [ + -117.818482, + 34.060363 + ], + [ + -117.818533, + 34.060363 + ], + [ + -117.818577, + 34.060353 + ], + [ + -117.81861, + 34.060325 + ], + [ + -117.819106, + 34.05977 + ], + [ + -117.819124, + 34.059734 + ], + [ + -117.819127, + 34.059702 + ], + [ + -117.819115, + 34.059668 + ], + [ + -117.819093, + 34.059643 + ], + [ + -117.819058, + 34.059625 + ], + [ + -117.81899, + 34.059602 + ], + [ + -117.818824, + 34.059564 + ], + [ + -117.818734, + 34.059553 + ], + [ + -117.81866, + 34.059549 + ], + [ + -117.818342, + 34.059574 + ], + [ + -117.818307, + 34.059592 + ], + [ + -117.818286, + 34.059609 + ], + [ + -117.818275, + 34.059636 + ] + ] + ] + }, + "properties": { + "name": "Voorhis Alumni Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 51322983, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.124161, + 34.040554 + ], + [ + -118.124166, + 34.040234 + ], + [ + -118.123367, + 34.04023 + ], + [ + -118.123367, + 34.040559 + ], + [ + -118.124161, + 34.040554 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 51323527, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.125086, + 34.041148 + ], + [ + -118.125089, + 34.040957 + ], + [ + -118.125027, + 34.040954 + ], + [ + -118.124939, + 34.040972 + ], + [ + -118.124899, + 34.041005 + ], + [ + -118.124853, + 34.041003 + ], + [ + -118.124751, + 34.040961 + ], + [ + -118.124665, + 34.04097 + ], + [ + -118.124593, + 34.041003 + ], + [ + -118.124566, + 34.041054 + ], + [ + -118.124577, + 34.041168 + ], + [ + -118.1247, + 34.04115 + ], + [ + -118.124891, + 34.041172 + ], + [ + -118.124995, + 34.041163 + ], + [ + -118.125086, + 34.041148 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 51323698, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.122352, + 34.040189 + ], + [ + -118.122725, + 34.040183 + ], + [ + -118.12443, + 34.040175 + ], + [ + -118.12443, + 34.040314 + ], + [ + -118.124413, + 34.040374 + ], + [ + -118.124363, + 34.040478 + ], + [ + -118.124304, + 34.040567 + ], + [ + -118.124267, + 34.04059 + ], + [ + -118.124257, + 34.040633 + ], + [ + -118.124257, + 34.040836 + ], + [ + -118.124294, + 34.040835 + ], + [ + -118.12496, + 34.04084 + ], + [ + -118.124958, + 34.040485 + ], + [ + -118.127881, + 34.040434 + ], + [ + -118.127956, + 34.040621 + ], + [ + -118.127989, + 34.040788 + ], + [ + -118.127989, + 34.040901 + ], + [ + -118.127988, + 34.040948 + ], + [ + -118.127965, + 34.041065 + ], + [ + -118.12791, + 34.041271 + ], + [ + -118.12455, + 34.041286 + ], + [ + -118.124022, + 34.041674 + ], + [ + -118.122352, + 34.040189 + ] + ] + ] + }, + "properties": { + "name": "George E Elder Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 52981335, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.86633, + 34.092592 + ], + [ + -117.866823, + 34.092343 + ], + [ + -117.867885, + 34.092119 + ], + [ + -117.868159, + 34.092192 + ], + [ + -117.868602, + 34.092043 + ], + [ + -117.869559, + 34.092023 + ], + [ + -117.869693, + 34.091972 + ], + [ + -117.870184, + 34.091908 + ], + [ + -117.870182, + 34.09174 + ], + [ + -117.87032, + 34.09174 + ], + [ + -117.872388, + 34.091727 + ], + [ + -117.872388, + 34.09184 + ], + [ + -117.872395, + 34.091923 + ], + [ + -117.872408, + 34.092054 + ], + [ + -117.871743, + 34.092053 + ], + [ + -117.871656, + 34.092053 + ], + [ + -117.871508, + 34.09206 + ], + [ + -117.871319, + 34.092069 + ], + [ + -117.870628, + 34.092134 + ], + [ + -117.869827, + 34.092319 + ], + [ + -117.86458, + 34.094013 + ], + [ + -117.864013, + 34.09423 + ], + [ + -117.863913, + 34.094268 + ], + [ + -117.863935, + 34.092513 + ], + [ + -117.864541, + 34.092504 + ], + [ + -117.864885, + 34.092593 + ], + [ + -117.86518, + 34.092666 + ], + [ + -117.865517, + 34.092624 + ], + [ + -117.865732, + 34.09254 + ], + [ + -117.865893, + 34.092575 + ], + [ + -117.866097, + 34.092602 + ], + [ + -117.86633, + 34.092592 + ] + ] + ] + }, + "properties": { + "name": "Kahler Russell Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 58744666, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.089583, + 34.01971 + ], + [ + -118.088904, + 34.019224 + ], + [ + -118.088811, + 34.019093 + ], + [ + -118.088755, + 34.018659 + ], + [ + -118.088684, + 34.017845 + ], + [ + -118.087799, + 34.017626 + ], + [ + -118.092204, + 34.014638 + ], + [ + -118.092523, + 34.014311 + ], + [ + -118.092799, + 34.014402 + ], + [ + -118.09283, + 34.014484 + ], + [ + -118.092816, + 34.014566 + ], + [ + -118.091937, + 34.015729 + ], + [ + -118.091782, + 34.016082 + ], + [ + -118.091621, + 34.016528 + ], + [ + -118.089583, + 34.01971 + ] + ] + ] + }, + "properties": { + "name": "Grant Rea Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 59133237, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.018686, + 34.124243 + ], + [ + -118.017877, + 34.124252 + ], + [ + -118.017871, + 34.124004 + ], + [ + -118.01645, + 34.124017 + ], + [ + -118.016423, + 34.123253 + ], + [ + -118.018666, + 34.123231 + ], + [ + -118.018686, + 34.124243 + ] + ] + ] + }, + "properties": { + "name": "Camino Grove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 59147510, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.048584, + 34.117192 + ], + [ + -118.048379, + 34.117262 + ], + [ + -118.048417, + 34.118243 + ], + [ + -118.047687, + 34.118256 + ], + [ + -118.047674, + 34.117402 + ], + [ + -118.047878, + 34.117395 + ], + [ + -118.047878, + 34.117122 + ], + [ + -118.048573, + 34.117103 + ], + [ + -118.048584, + 34.117192 + ] + ] + ] + }, + "properties": { + "name": "Baldwin Stocker Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 59149672, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.067661, + 34.086356 + ], + [ + -118.067651, + 34.085751 + ], + [ + -118.067629, + 34.084303 + ], + [ + -118.067608, + 34.082886 + ], + [ + -118.067618, + 34.082646 + ], + [ + -118.067638, + 34.082526 + ], + [ + -118.068891, + 34.082919 + ], + [ + -118.069418, + 34.08308 + ], + [ + -118.069774, + 34.083188 + ], + [ + -118.06993, + 34.083234 + ], + [ + -118.070103, + 34.083285 + ], + [ + -118.070122, + 34.086377 + ], + [ + -118.067661, + 34.086356 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 59518624, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.125212, + 34.100578 + ], + [ + -118.126076, + 34.100172 + ], + [ + -118.125478, + 34.099351 + ], + [ + -118.125429, + 34.099332 + ], + [ + -118.125303, + 34.099391 + ], + [ + -118.125012, + 34.099541 + ], + [ + -118.124569, + 34.099768 + ], + [ + -118.125212, + 34.100578 + ] + ] + ] + }, + "properties": { + "name": "Story Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 60516488, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.191244, + 34.08547 + ], + [ + -118.19101, + 34.085313 + ], + [ + -118.191107, + 34.085209 + ], + [ + -118.190554, + 34.084868 + ], + [ + -118.190309, + 34.085119 + ], + [ + -118.189647, + 34.085853 + ], + [ + -118.18966, + 34.085859 + ], + [ + -118.190692, + 34.085859 + ], + [ + -118.190863, + 34.085853 + ], + [ + -118.191244, + 34.08547 + ] + ] + ] + }, + "properties": { + "name": "Rose Hill Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 61423753, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.154768, + 34.058661 + ], + [ + -118.154838, + 34.058646 + ], + [ + -118.154154, + 34.057019 + ], + [ + -118.153907, + 34.057059 + ], + [ + -118.153577, + 34.057041 + ], + [ + -118.153309, + 34.056986 + ], + [ + -118.152947, + 34.057419 + ], + [ + -118.152668, + 34.057646 + ], + [ + -118.152448, + 34.057932 + ], + [ + -118.152418, + 34.058875 + ], + [ + -118.153607, + 34.058881 + ], + [ + -118.153883, + 34.058908 + ], + [ + -118.154189, + 34.059079 + ], + [ + -118.154248, + 34.058986 + ], + [ + -118.154393, + 34.058855 + ], + [ + -118.154561, + 34.058744 + ], + [ + -118.154768, + 34.058661 + ] + ] + ] + }, + "properties": { + "name": "Highlands Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 61426904, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.12915, + 34.065527 + ], + [ + -118.127599, + 34.065532 + ], + [ + -118.12761, + 34.066127 + ], + [ + -118.127613, + 34.06619 + ], + [ + -118.12916, + 34.066194 + ], + [ + -118.12915, + 34.065527 + ] + ] + ] + }, + "properties": { + "name": "Langley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 61978896, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.094295, + 34.044125 + ], + [ + -118.093818, + 34.044911 + ], + [ + -118.092877, + 34.044513 + ], + [ + -118.093912, + 34.042782 + ], + [ + -118.094518, + 34.043033 + ], + [ + -118.094757, + 34.043147 + ], + [ + -118.094832, + 34.043194 + ], + [ + -118.094295, + 34.044125 + ] + ] + ] + }, + "properties": { + "name": "Potrero Heights Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 72370044, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.131744, + 34.082681 + ], + [ + -118.131736, + 34.079442 + ], + [ + -118.130537, + 34.079451 + ], + [ + -118.12934, + 34.079464 + ], + [ + -118.12945, + 34.0827 + ], + [ + -118.131744, + 34.082681 + ] + ] + ] + }, + "properties": { + "name": "Moor Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 72370200, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.136687, + 34.05427 + ], + [ + -118.136381, + 34.054154 + ], + [ + -118.136295, + 34.054125 + ], + [ + -118.136228, + 34.054121 + ], + [ + -118.136143, + 34.05415 + ], + [ + -118.136169, + 34.054217 + ], + [ + -118.136215, + 34.054257 + ], + [ + -118.136298, + 34.054301 + ], + [ + -118.136596, + 34.054426 + ], + [ + -118.136687, + 34.05427 + ] + ] + ] + }, + "properties": { + "name": "Cascades Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 74117568, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.092265, + 34.012932 + ], + [ + -118.091243, + 34.012028 + ], + [ + -118.091203, + 34.012059 + ], + [ + -118.091187, + 34.012048 + ], + [ + -118.091189, + 34.011979 + ], + [ + -118.091245, + 34.011932 + ], + [ + -118.091285, + 34.011888 + ], + [ + -118.091343, + 34.011805 + ], + [ + -118.091366, + 34.011751 + ], + [ + -118.091374, + 34.011714 + ], + [ + -118.09138, + 34.011682 + ], + [ + -118.091553, + 34.010312 + ], + [ + -118.092761, + 34.010428 + ], + [ + -118.093231, + 34.010391 + ], + [ + -118.093345, + 34.010399 + ], + [ + -118.094504, + 34.010498 + ], + [ + -118.094024, + 34.011062 + ], + [ + -118.093236, + 34.011915 + ], + [ + -118.092265, + 34.012932 + ] + ] + ] + }, + "properties": { + "name": "Rio Hondo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 78334003, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.146504, + 34.095392 + ], + [ + -118.146525, + 34.098344 + ], + [ + -118.146526, + 34.098563 + ], + [ + -118.1452, + 34.098573 + ], + [ + -118.145198, + 34.098427 + ], + [ + -118.145186, + 34.097564 + ], + [ + -118.145178, + 34.09689 + ], + [ + -118.145168, + 34.096156 + ], + [ + -118.145165, + 34.095932 + ], + [ + -118.14516, + 34.095548 + ], + [ + -118.145155, + 34.095169 + ], + [ + -118.14515, + 34.094792 + ], + [ + -118.14651, + 34.094777 + ], + [ + -118.146504, + 34.095392 + ] + ] + ] + }, + "properties": { + "name": "Alhambra Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 79650238, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.124812, + 34.00686 + ], + [ + -118.125427, + 34.006909 + ], + [ + -118.125462, + 34.006653 + ], + [ + -118.125558, + 34.006653 + ], + [ + -118.125536, + 34.006371 + ], + [ + -118.125488, + 34.006373 + ], + [ + -118.125488, + 34.006349 + ], + [ + -118.125381, + 34.006351 + ], + [ + -118.125376, + 34.006278 + ], + [ + -118.125483, + 34.006273 + ], + [ + -118.125488, + 34.006244 + ], + [ + -118.125521, + 34.006246 + ], + [ + -118.12551, + 34.006149 + ], + [ + -118.125496, + 34.006097 + ], + [ + -118.125451, + 34.006031 + ], + [ + -118.125403, + 34.005973 + ], + [ + -118.125325, + 34.005922 + ], + [ + -118.125266, + 34.005891 + ], + [ + -118.125236, + 34.005879 + ], + [ + -118.125183, + 34.005895 + ], + [ + -118.125094, + 34.006042 + ], + [ + -118.125167, + 34.006084 + ], + [ + -118.125201, + 34.006131 + ], + [ + -118.125209, + 34.006182 + ], + [ + -118.125199, + 34.006237 + ], + [ + -118.125161, + 34.006304 + ], + [ + -118.124869, + 34.006802 + ], + [ + -118.124812, + 34.00686 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 80563347, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.03481, + 34.137214 + ], + [ + -118.034027, + 34.137213 + ], + [ + -118.034027, + 34.136911 + ], + [ + -118.034811, + 34.136912 + ], + [ + -118.03481, + 34.137214 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 84969841, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.101466, + 34.09886 + ], + [ + -118.102423, + 34.098846 + ], + [ + -118.102627, + 34.098846 + ], + [ + -118.103303, + 34.098844 + ], + [ + -118.104208, + 34.09884 + ], + [ + -118.104187, + 34.098388 + ], + [ + -118.104404, + 34.098376 + ], + [ + -118.104479, + 34.09785 + ], + [ + -118.103358, + 34.098067 + ], + [ + -118.103176, + 34.098098 + ], + [ + -118.10303, + 34.098109 + ], + [ + -118.102861, + 34.098107 + ], + [ + -118.102566, + 34.098078 + ], + [ + -118.10178, + 34.098022 + ], + [ + -118.101137, + 34.09798 + ], + [ + -118.101466, + 34.09886 + ] + ] + ] + }, + "properties": { + "name": "Smith Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 85355909, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.938129, + 34.142461 + ], + [ + -117.938306, + 34.14259 + ], + [ + -117.938644, + 34.142686 + ], + [ + -117.938784, + 34.143314 + ], + [ + -117.938803, + 34.143496 + ], + [ + -117.938882, + 34.143529 + ], + [ + -117.93878, + 34.143721 + ], + [ + -117.938688, + 34.143871 + ], + [ + -117.938596, + 34.144034 + ], + [ + -117.938403, + 34.14437 + ], + [ + -117.938299, + 34.144557 + ], + [ + -117.938231, + 34.14474 + ], + [ + -117.938178, + 34.144915 + ], + [ + -117.938162, + 34.14496 + ], + [ + -117.937888, + 34.144959 + ], + [ + -117.936677, + 34.144983 + ], + [ + -117.935911, + 34.145005 + ], + [ + -117.935766, + 34.145007 + ], + [ + -117.935688, + 34.14526 + ], + [ + -117.935574, + 34.145204 + ], + [ + -117.935483, + 34.145136 + ], + [ + -117.935477, + 34.145082 + ], + [ + -117.935606, + 34.144955 + ], + [ + -117.93637, + 34.144219 + ], + [ + -117.937099, + 34.1435 + ], + [ + -117.937528, + 34.14311 + ], + [ + -117.937861, + 34.142745 + ], + [ + -117.938129, + 34.142461 + ] + ] + ] + }, + "properties": { + "name": "Encanto Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 85408534, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.035977, + 34.066434 + ], + [ + -118.036427, + 34.066436 + ], + [ + -118.036757, + 34.06645 + ], + [ + -118.036966, + 34.06647 + ], + [ + -118.036993, + 34.064661 + ], + [ + -118.036422, + 34.064708 + ], + [ + -118.036086, + 34.064739 + ], + [ + -118.035896, + 34.064772 + ], + [ + -118.035939, + 34.065048 + ], + [ + -118.035968, + 34.065376 + ], + [ + -118.03599, + 34.065601 + ], + [ + -118.035993, + 34.065912 + ], + [ + -118.035977, + 34.066434 + ] + ] + ] + }, + "properties": { + "name": "Arceo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 95910051, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.137491, + 34.032625 + ], + [ + -118.131192, + 34.032681 + ], + [ + -118.131192, + 34.032381 + ], + [ + -118.13037, + 34.03239 + ], + [ + -118.130178, + 34.031995 + ], + [ + -118.130107, + 34.031875 + ], + [ + -118.129815, + 34.031442 + ], + [ + -118.12972, + 34.031516 + ], + [ + -118.129555, + 34.031615 + ], + [ + -118.129325, + 34.031344 + ], + [ + -118.12901, + 34.030911 + ], + [ + -118.128822, + 34.030589 + ], + [ + -118.128722, + 34.030373 + ], + [ + -118.128612, + 34.030099 + ], + [ + -118.128545, + 34.029916 + ], + [ + -118.128484, + 34.029654 + ], + [ + -118.128448, + 34.029446 + ], + [ + -118.128429, + 34.029272 + ], + [ + -118.12842, + 34.029105 + ], + [ + -118.12843, + 34.028898 + ], + [ + -118.12845, + 34.028655 + ], + [ + -118.128484, + 34.028439 + ], + [ + -118.128564, + 34.028133 + ], + [ + -118.128687, + 34.027821 + ], + [ + -118.128812, + 34.027573 + ], + [ + -118.128976, + 34.027304 + ], + [ + -118.129211, + 34.02699 + ], + [ + -118.129432, + 34.026751 + ], + [ + -118.12958, + 34.026619 + ], + [ + -118.129759, + 34.026465 + ], + [ + -118.130262, + 34.026077 + ], + [ + -118.130486, + 34.026271 + ], + [ + -118.130715, + 34.026338 + ], + [ + -118.130957, + 34.026376 + ], + [ + -118.131191, + 34.026393 + ], + [ + -118.131686, + 34.026353 + ], + [ + -118.131693, + 34.026373 + ], + [ + -118.131914, + 34.026281 + ], + [ + -118.132706, + 34.025669 + ], + [ + -118.132755, + 34.02565 + ], + [ + -118.133569, + 34.025638 + ], + [ + -118.133569, + 34.025657 + ], + [ + -118.133969, + 34.02565 + ], + [ + -118.133969, + 34.025637 + ], + [ + -118.134368, + 34.025635 + ], + [ + -118.134368, + 34.025663 + ], + [ + -118.134717, + 34.025641 + ], + [ + -118.134721, + 34.026079 + ], + [ + -118.135017, + 34.026168 + ], + [ + -118.134915, + 34.026347 + ], + [ + -118.13642, + 34.026345 + ], + [ + -118.136755, + 34.026362 + ], + [ + -118.137088, + 34.026402 + ], + [ + -118.137789, + 34.026539 + ], + [ + -118.137797, + 34.027307 + ], + [ + -118.137448, + 34.027307 + ], + [ + -118.137491, + 34.032625 + ] + ] + ] + }, + "properties": { + "name": "Montebello Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 96956279, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.082197, + 34.088378 + ], + [ + -118.082518, + 34.088302 + ], + [ + -118.082703, + 34.087998 + ], + [ + -118.082138, + 34.087793 + ], + [ + -118.082151, + 34.088138 + ], + [ + -118.082197, + 34.088378 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 100010941, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.814296, + 34.019341 + ], + [ + -117.813877, + 34.018777 + ], + [ + -117.81377, + 34.018827 + ], + [ + -117.813669, + 34.01862 + ], + [ + -117.813586, + 34.018479 + ], + [ + -117.813447, + 34.018303 + ], + [ + -117.813308, + 34.018149 + ], + [ + -117.813197, + 34.018026 + ], + [ + -117.813026, + 34.017897 + ], + [ + -117.812829, + 34.01776 + ], + [ + -117.813124, + 34.017377 + ], + [ + -117.814387, + 34.015715 + ], + [ + -117.814796, + 34.015169 + ], + [ + -117.815428, + 34.01474 + ], + [ + -117.815935, + 34.014361 + ], + [ + -117.816478, + 34.014019 + ], + [ + -117.816363, + 34.013901 + ], + [ + -117.816488, + 34.013763 + ], + [ + -117.816418, + 34.013483 + ], + [ + -117.816367, + 34.013467 + ], + [ + -117.816338, + 34.012597 + ], + [ + -117.816306, + 34.012601 + ], + [ + -117.816251, + 34.012357 + ], + [ + -117.81621, + 34.012237 + ], + [ + -117.81614, + 34.012256 + ], + [ + -117.816074, + 34.012106 + ], + [ + -117.815881, + 34.011831 + ], + [ + -117.815855, + 34.011828 + ], + [ + -117.815764, + 34.011879 + ], + [ + -117.815486, + 34.011198 + ], + [ + -117.815454, + 34.011052 + ], + [ + -117.815153, + 34.010635 + ], + [ + -117.815429, + 34.01041 + ], + [ + -117.815837, + 34.010124 + ], + [ + -117.816251, + 34.009871 + ], + [ + -117.816642, + 34.009653 + ], + [ + -117.817459, + 34.0092 + ], + [ + -117.820147, + 34.007682 + ], + [ + -117.821577, + 34.006868 + ], + [ + -117.822083, + 34.006589 + ], + [ + -117.822589, + 34.006264 + ], + [ + -117.822954, + 34.005938 + ], + [ + -117.823172, + 34.0057 + ], + [ + -117.823403, + 34.005361 + ], + [ + -117.824073, + 34.004229 + ], + [ + -117.824468, + 34.003769 + ], + [ + -117.82479, + 34.003501 + ], + [ + -117.825182, + 34.003256 + ], + [ + -117.825598, + 34.00306 + ], + [ + -117.825861, + 34.002971 + ], + [ + -117.826027, + 34.002915 + ], + [ + -117.826515, + 34.002818 + ], + [ + -117.826921, + 34.002772 + ], + [ + -117.827472, + 34.002778 + ], + [ + -117.828005, + 34.002836 + ], + [ + -117.828993, + 34.003311 + ], + [ + -117.8302, + 34.003722 + ], + [ + -117.82945, + 34.004265 + ], + [ + -117.828375, + 34.005066 + ], + [ + -117.827607, + 34.005648 + ], + [ + -117.826575, + 34.006494 + ], + [ + -117.825344, + 34.007478 + ], + [ + -117.824683, + 34.008055 + ], + [ + -117.824191, + 34.008592 + ], + [ + -117.823514, + 34.009179 + ], + [ + -117.823423, + 34.009221 + ], + [ + -117.823338, + 34.009218 + ], + [ + -117.822954, + 34.009474 + ], + [ + -117.821769, + 34.011153 + ], + [ + -117.821362, + 34.011576 + ], + [ + -117.820326, + 34.012644 + ], + [ + -117.819732, + 34.013332 + ], + [ + -117.816611, + 34.017224 + ], + [ + -117.816541, + 34.017145 + ], + [ + -117.816236, + 34.017445 + ], + [ + -117.814296, + 34.019341 + ] + ] + ] + }, + "properties": { + "name": "Diamond Bar Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 103256475, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.899956, + 33.927479 + ], + [ + -117.898858, + 33.927453 + ], + [ + -117.898448, + 33.927256 + ], + [ + -117.898463, + 33.927234 + ], + [ + -117.899992, + 33.924927 + ], + [ + -117.900116, + 33.924936 + ], + [ + -117.900036, + 33.927363 + ], + [ + -117.899956, + 33.927479 + ] + ] + ] + }, + "properties": { + "name": "Tamarack Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 104840808, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.852854, + 34.025911 + ], + [ + -117.852855, + 34.026606 + ], + [ + -117.852387, + 34.026605 + ], + [ + -117.85236, + 34.027755 + ], + [ + -117.849465, + 34.027732 + ], + [ + -117.84937, + 34.027692 + ], + [ + -117.849328, + 34.027653 + ], + [ + -117.84931, + 34.027608 + ], + [ + -117.849306, + 34.027546 + ], + [ + -117.849327, + 34.027497 + ], + [ + -117.849442, + 34.0272 + ], + [ + -117.849504, + 34.02696 + ], + [ + -117.849533, + 34.026777 + ], + [ + -117.849524, + 34.026629 + ], + [ + -117.849434, + 34.026259 + ], + [ + -117.849429, + 34.026159 + ], + [ + -117.849429, + 34.02598 + ], + [ + -117.852422, + 34.02598 + ], + [ + -117.852448, + 34.025913 + ], + [ + -117.852854, + 34.025911 + ] + ] + ] + }, + "properties": { + "name": "Suzanne Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 106733546, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.173694, + 33.925213 + ], + [ + -118.174896, + 33.925391 + ], + [ + -118.174826, + 33.926304 + ], + [ + -118.175588, + 33.926366 + ], + [ + -118.175947, + 33.923464 + ], + [ + -118.175931, + 33.922992 + ], + [ + -118.176221, + 33.920975 + ], + [ + -118.176248, + 33.920377 + ], + [ + -118.176298, + 33.919205 + ], + [ + -118.176527, + 33.918006 + ], + [ + -118.176194, + 33.917984 + ], + [ + -118.175958, + 33.917935 + ], + [ + -118.175749, + 33.917859 + ], + [ + -118.175631, + 33.917792 + ], + [ + -118.175545, + 33.917721 + ], + [ + -118.175465, + 33.917646 + ], + [ + -118.175368, + 33.917588 + ], + [ + -118.175218, + 33.917521 + ], + [ + -118.174912, + 33.917432 + ], + [ + -118.17452, + 33.917298 + ], + [ + -118.17363, + 33.916864 + ], + [ + -118.173652, + 33.92013 + ], + [ + -118.173662, + 33.922168 + ], + [ + -118.173694, + 33.925213 + ] + ] + ] + }, + "properties": { + "name": "Hollydale Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 107437123, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.12448, + 34.099669 + ], + [ + -118.125165, + 34.099337 + ], + [ + -118.125252, + 34.099288 + ], + [ + -118.125337, + 34.099238 + ], + [ + -118.125351, + 34.099189 + ], + [ + -118.124841, + 34.098452 + ], + [ + -118.124677, + 34.098204 + ], + [ + -118.12438, + 34.098341 + ], + [ + -118.124294, + 34.098221 + ], + [ + -118.123613, + 34.098552 + ], + [ + -118.12448, + 34.099669 + ] + ] + ] + }, + "properties": { + "name": "Joslyn Adult Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 109500432, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.902181, + 33.913436 + ], + [ + -117.902519, + 33.913542 + ], + [ + -117.902465, + 33.913671 + ], + [ + -117.902605, + 33.913723 + ], + [ + -117.902661, + 33.913625 + ], + [ + -117.902715, + 33.913574 + ], + [ + -117.902774, + 33.913587 + ], + [ + -117.90287, + 33.913458 + ], + [ + -117.903178, + 33.91358 + ], + [ + -117.902918, + 33.914061 + ], + [ + -117.902904, + 33.914087 + ], + [ + -117.902827, + 33.914228 + ], + [ + -117.902796, + 33.914284 + ], + [ + -117.902717, + 33.914426 + ], + [ + -117.902712, + 33.914435 + ], + [ + -117.902288, + 33.915183 + ], + [ + -117.901956, + 33.915065 + ], + [ + -117.901975, + 33.915023 + ], + [ + -117.902057, + 33.914847 + ], + [ + -117.902087, + 33.914764 + ], + [ + -117.902082, + 33.914715 + ], + [ + -117.902079, + 33.914647 + ], + [ + -117.90202, + 33.9146 + ], + [ + -117.901934, + 33.91456 + ], + [ + -117.901953, + 33.914504 + ], + [ + -117.901679, + 33.914397 + ], + [ + -117.902181, + 33.913436 + ] + ] + ] + }, + "properties": { + "name": "City Hall Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 112440736, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.906274, + 33.914204 + ], + [ + -117.90637, + 33.914039 + ], + [ + -117.906285, + 33.91401 + ], + [ + -117.906164, + 33.914012 + ], + [ + -117.906046, + 33.914068 + ], + [ + -117.905982, + 33.914112 + ], + [ + -117.905949, + 33.914172 + ], + [ + -117.906161, + 33.91425 + ], + [ + -117.906274, + 33.914204 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 117447299, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.907923, + 33.916067 + ], + [ + -117.908224, + 33.915693 + ], + [ + -117.908267, + 33.915622 + ], + [ + -117.908481, + 33.915577 + ], + [ + -117.908476, + 33.915052 + ], + [ + -117.908353, + 33.9149 + ], + [ + -117.908154, + 33.914704 + ], + [ + -117.907816, + 33.91462 + ], + [ + -117.907709, + 33.91454 + ], + [ + -117.908283, + 33.913534 + ], + [ + -117.908674, + 33.913035 + ], + [ + -117.90876, + 33.912901 + ], + [ + -117.908208, + 33.913093 + ], + [ + -117.907682, + 33.913164 + ], + [ + -117.907596, + 33.913017 + ], + [ + -117.907451, + 33.912937 + ], + [ + -117.907264, + 33.912964 + ], + [ + -117.907011, + 33.913124 + ], + [ + -117.906067, + 33.913676 + ], + [ + -117.905649, + 33.913908 + ], + [ + -117.905531, + 33.914041 + ], + [ + -117.905407, + 33.914246 + ], + [ + -117.905708, + 33.914384 + ], + [ + -117.906067, + 33.914491 + ], + [ + -117.906164, + 33.914589 + ], + [ + -117.906298, + 33.914856 + ], + [ + -117.906405, + 33.91531 + ], + [ + -117.906453, + 33.915586 + ], + [ + -117.90622, + 33.916055 + ], + [ + -117.90611, + 33.916276 + ], + [ + -117.905594, + 33.917264 + ], + [ + -117.905878, + 33.917261 + ], + [ + -117.906584, + 33.917252 + ], + [ + -117.90673, + 33.917248 + ], + [ + -117.906785, + 33.917239 + ], + [ + -117.906842, + 33.917119 + ], + [ + -117.906873, + 33.91708 + ], + [ + -117.906893, + 33.917055 + ], + [ + -117.906915, + 33.916418 + ], + [ + -117.907237, + 33.916356 + ], + [ + -117.907382, + 33.916352 + ], + [ + -117.90751, + 33.91632 + ], + [ + -117.9078, + 33.916191 + ], + [ + -117.907923, + 33.916067 + ] + ] + ] + }, + "properties": { + "name": "Arovista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 118674161, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.19169, + 34.076816 + ], + [ + -118.191068, + 34.076799 + ], + [ + -118.191132, + 34.07631 + ], + [ + -118.189116, + 34.07535 + ], + [ + -118.187968, + 34.075342 + ], + [ + -118.187077, + 34.07615 + ], + [ + -118.187075, + 34.076808 + ], + [ + -118.18593, + 34.07679 + ], + [ + -118.18594, + 34.073164 + ], + [ + -118.186015, + 34.071814 + ], + [ + -118.186123, + 34.071689 + ], + [ + -118.186431, + 34.071751 + ], + [ + -118.186841, + 34.070569 + ], + [ + -118.188322, + 34.070018 + ], + [ + -118.188738, + 34.069894 + ], + [ + -118.189092, + 34.069903 + ], + [ + -118.189406, + 34.069823 + ], + [ + -118.189749, + 34.069618 + ], + [ + -118.191637, + 34.069618 + ], + [ + -118.19169, + 34.075732 + ], + [ + -118.19169, + 34.076816 + ] + ] + ] + }, + "properties": { + "name": "Ascot Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 120578855, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.879039, + 33.914328 + ], + [ + -117.878948, + 33.914288 + ], + [ + -117.878907, + 33.914259 + ], + [ + -117.878851, + 33.914208 + ], + [ + -117.878776, + 33.914123 + ], + [ + -117.878698, + 33.914103 + ], + [ + -117.878601, + 33.914057 + ], + [ + -117.878553, + 33.914019 + ], + [ + -117.878378, + 33.91381 + ], + [ + -117.878339, + 33.913778 + ], + [ + -117.878306, + 33.913772 + ], + [ + -117.878269, + 33.913781 + ], + [ + -117.877781, + 33.914052 + ], + [ + -117.87734, + 33.914329 + ], + [ + -117.877091, + 33.914554 + ], + [ + -117.876837, + 33.914891 + ], + [ + -117.876742, + 33.915046 + ], + [ + -117.876633, + 33.915314 + ], + [ + -117.87655, + 33.915666 + ], + [ + -117.876525, + 33.915833 + ], + [ + -117.87656, + 33.915833 + ], + [ + -117.876609, + 33.915822 + ], + [ + -117.876608, + 33.915802 + ], + [ + -117.876731, + 33.915769 + ], + [ + -117.87692, + 33.915668 + ], + [ + -117.877019, + 33.91559 + ], + [ + -117.877065, + 33.915512 + ], + [ + -117.877529, + 33.915417 + ], + [ + -117.877631, + 33.915252 + ], + [ + -117.877713, + 33.915148 + ], + [ + -117.877845, + 33.915034 + ], + [ + -117.878024, + 33.914914 + ], + [ + -117.878145, + 33.914852 + ], + [ + -117.878264, + 33.914818 + ], + [ + -117.878516, + 33.914778 + ], + [ + -117.878593, + 33.914798 + ], + [ + -117.878566, + 33.91493 + ], + [ + -117.878551, + 33.915025 + ], + [ + -117.878612, + 33.915052 + ], + [ + -117.878619, + 33.91504 + ], + [ + -117.878992, + 33.914407 + ], + [ + -117.879039, + 33.914328 + ] + ] + ] + }, + "properties": { + "name": "Greenbriar Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 120578858, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.877955, + 33.914549 + ], + [ + -117.877987, + 33.914555 + ], + [ + -117.878038, + 33.914531 + ], + [ + -117.878084, + 33.914482 + ], + [ + -117.8781, + 33.914451 + ], + [ + -117.878097, + 33.914411 + ], + [ + -117.878062, + 33.914387 + ], + [ + -117.878033, + 33.914379 + ], + [ + -117.877987, + 33.914382 + ], + [ + -117.877946, + 33.914416 + ], + [ + -117.877901, + 33.914451 + ], + [ + -117.877869, + 33.914475 + ], + [ + -117.877885, + 33.914506 + ], + [ + -117.87792, + 33.914533 + ], + [ + -117.877955, + 33.914549 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 122095550, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.892391, + 33.925483 + ], + [ + -117.892378, + 33.925521 + ], + [ + -117.892372, + 33.92557 + ], + [ + -117.892332, + 33.925584 + ], + [ + -117.892297, + 33.925539 + ], + [ + -117.892265, + 33.925494 + ], + [ + -117.892246, + 33.925421 + ], + [ + -117.892262, + 33.925374 + ], + [ + -117.892321, + 33.925372 + ], + [ + -117.892356, + 33.925403 + ], + [ + -117.89238, + 33.925441 + ], + [ + -117.892391, + 33.925483 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 122095551, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.899976, + 33.926018 + ], + [ + -117.900019, + 33.925946 + ], + [ + -117.899947, + 33.925902 + ], + [ + -117.899955, + 33.925873 + ], + [ + -117.899939, + 33.925828 + ], + [ + -117.899901, + 33.925811 + ], + [ + -117.899853, + 33.925804 + ], + [ + -117.899791, + 33.92584 + ], + [ + -117.899732, + 33.925924 + ], + [ + -117.899933, + 33.926026 + ], + [ + -117.899957, + 33.926024 + ], + [ + -117.899976, + 33.926018 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 124283210, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.908601, + 33.933954 + ], + [ + -117.908526, + 33.93395 + ], + [ + -117.908479, + 33.933945 + ], + [ + -117.908497, + 33.933905 + ], + [ + -117.908414, + 33.933898 + ], + [ + -117.908413, + 33.933879 + ], + [ + -117.908441, + 33.933838 + ], + [ + -117.908393, + 33.933827 + ], + [ + -117.908356, + 33.933892 + ], + [ + -117.908318, + 33.93388 + ], + [ + -117.908364, + 33.933788 + ], + [ + -117.908404, + 33.933734 + ], + [ + -117.908479, + 33.933725 + ], + [ + -117.908513, + 33.933751 + ], + [ + -117.90854, + 33.933796 + ], + [ + -117.908642, + 33.933829 + ], + [ + -117.908618, + 33.933883 + ], + [ + -117.908619, + 33.933919 + ], + [ + -117.908601, + 33.933954 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 124431824, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.897291, + 33.917135 + ], + [ + -117.897137, + 33.917082 + ], + [ + -117.89689, + 33.917077 + ], + [ + -117.896877, + 33.917085 + ], + [ + -117.896799, + 33.917083 + ], + [ + -117.896796, + 33.91695 + ], + [ + -117.896731, + 33.91695 + ], + [ + -117.896444, + 33.916965 + ], + [ + -117.896308, + 33.916969 + ], + [ + -117.8961, + 33.916961 + ], + [ + -117.89609, + 33.917365 + ], + [ + -117.89609, + 33.917462 + ], + [ + -117.896117, + 33.917519 + ], + [ + -117.896598, + 33.917507 + ], + [ + -117.897006, + 33.917493 + ], + [ + -117.897066, + 33.917456 + ], + [ + -117.897129, + 33.917417 + ], + [ + -117.897291, + 33.917135 + ] + ] + ] + }, + "properties": { + "name": "Lagos De Moreno Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 125081416, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.871639, + 33.922303 + ], + [ + -117.871819, + 33.922169 + ], + [ + -117.871376, + 33.921911 + ], + [ + -117.871333, + 33.921805 + ], + [ + -117.871362, + 33.92176 + ], + [ + -117.871724, + 33.921213 + ], + [ + -117.872127, + 33.920799 + ], + [ + -117.872507, + 33.920567 + ], + [ + -117.872795, + 33.920482 + ], + [ + -117.8721, + 33.920474 + ], + [ + -117.872057, + 33.920629 + ], + [ + -117.87192, + 33.920775 + ], + [ + -117.871606, + 33.920937 + ], + [ + -117.871461, + 33.921048 + ], + [ + -117.871354, + 33.921199 + ], + [ + -117.871231, + 33.921177 + ], + [ + -117.871145, + 33.921141 + ], + [ + -117.870979, + 33.921061 + ], + [ + -117.870705, + 33.920883 + ], + [ + -117.869917, + 33.920394 + ], + [ + -117.869713, + 33.920318 + ], + [ + -117.869691, + 33.920527 + ], + [ + -117.869584, + 33.920679 + ], + [ + -117.869482, + 33.920986 + ], + [ + -117.869447, + 33.921243 + ], + [ + -117.869512, + 33.92151 + ], + [ + -117.86971, + 33.921772 + ], + [ + -117.869959, + 33.921938 + ], + [ + -117.870306, + 33.922035 + ], + [ + -117.870576, + 33.922063 + ], + [ + -117.870939, + 33.922057 + ], + [ + -117.871209, + 33.922049 + ], + [ + -117.871421, + 33.922133 + ], + [ + -117.871639, + 33.922303 + ] + ] + ] + }, + "properties": { + "name": "Country Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 125403917, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.909235, + 33.934067 + ], + [ + -117.909238, + 33.933542 + ], + [ + -117.90728, + 33.933542 + ], + [ + -117.907183, + 33.933565 + ], + [ + -117.907092, + 33.933609 + ], + [ + -117.907044, + 33.933658 + ], + [ + -117.906996, + 33.933729 + ], + [ + -117.907023, + 33.933787 + ], + [ + -117.907028, + 33.933836 + ], + [ + -117.907002, + 33.933889 + ], + [ + -117.907038, + 33.933974 + ], + [ + -117.907103, + 33.934019 + ], + [ + -117.90721, + 33.934067 + ], + [ + -117.907328, + 33.934076 + ], + [ + -117.907499, + 33.934078 + ], + [ + -117.909235, + 33.934067 + ] + ] + ] + }, + "properties": { + "name": "Founders Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 125406708, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.90899, + 33.93394 + ], + [ + -117.908993, + 33.933964 + ], + [ + -117.908959, + 33.933987 + ], + [ + -117.908835, + 33.933991 + ], + [ + -117.908793, + 33.933958 + ], + [ + -117.908794, + 33.933827 + ], + [ + -117.908733, + 33.933828 + ], + [ + -117.908734, + 33.933746 + ], + [ + -117.908793, + 33.933748 + ], + [ + -117.908792, + 33.93368 + ], + [ + -117.908817, + 33.933652 + ], + [ + -117.908988, + 33.933651 + ], + [ + -117.908988, + 33.933611 + ], + [ + -117.909154, + 33.933611 + ], + [ + -117.90919, + 33.933642 + ], + [ + -117.909194, + 33.933909 + ], + [ + -117.909154, + 33.933943 + ], + [ + -117.90899, + 33.93394 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 126175617, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.899025, + 33.927269 + ], + [ + -117.898784, + 33.927157 + ], + [ + -117.898735, + 33.927135 + ], + [ + -117.898706, + 33.927111 + ], + [ + -117.898698, + 33.927089 + ], + [ + -117.89869, + 33.927062 + ], + [ + -117.898703, + 33.927037 + ], + [ + -117.898993, + 33.926552 + ], + [ + -117.899317, + 33.92671 + ], + [ + -117.899368, + 33.926617 + ], + [ + -117.899033, + 33.926468 + ], + [ + -117.899312, + 33.926094 + ], + [ + -117.899342, + 33.926069 + ], + [ + -117.899371, + 33.92606 + ], + [ + -117.899417, + 33.926058 + ], + [ + -117.899462, + 33.926067 + ], + [ + -117.899934, + 33.926307 + ], + [ + -117.899961, + 33.926445 + ], + [ + -117.899291, + 33.927349 + ], + [ + -117.899025, + 33.927269 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 128836269, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.893312, + 33.931398 + ], + [ + -117.893269, + 33.931326 + ], + [ + -117.893179, + 33.931349 + ], + [ + -117.893123, + 33.93137 + ], + [ + -117.893151, + 33.931395 + ], + [ + -117.893193, + 33.931365 + ], + [ + -117.893269, + 33.931402 + ], + [ + -117.893238, + 33.93144 + ], + [ + -117.893264, + 33.931448 + ], + [ + -117.893291, + 33.931449 + ], + [ + -117.893323, + 33.931442 + ], + [ + -117.893342, + 33.931433 + ], + [ + -117.893358, + 33.931418 + ], + [ + -117.893375, + 33.931372 + ], + [ + -117.893312, + 33.931398 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 129613799, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.893925, + 33.931704 + ], + [ + -117.893902, + 33.931708 + ], + [ + -117.893877, + 33.931764 + ], + [ + -117.893839, + 33.931797 + ], + [ + -117.893804, + 33.931817 + ], + [ + -117.89376, + 33.931829 + ], + [ + -117.893694, + 33.931826 + ], + [ + -117.893661, + 33.931813 + ], + [ + -117.893623, + 33.931815 + ], + [ + -117.893646, + 33.93184 + ], + [ + -117.893751, + 33.931886 + ], + [ + -117.893871, + 33.93184 + ], + [ + -117.893925, + 33.931704 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 129899897, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.90818, + 33.915465 + ], + [ + -117.908063, + 33.915712 + ], + [ + -117.907926, + 33.915948 + ], + [ + -117.907816, + 33.916036 + ], + [ + -117.907693, + 33.916102 + ], + [ + -117.907582, + 33.91614 + ], + [ + -117.907476, + 33.916168 + ], + [ + -117.907248, + 33.91618 + ], + [ + -117.906761, + 33.916073 + ], + [ + -117.906726, + 33.916038 + ], + [ + -117.906898, + 33.915459 + ], + [ + -117.90723, + 33.914822 + ], + [ + -117.907343, + 33.914785 + ], + [ + -117.907411, + 33.914752 + ], + [ + -117.907474, + 33.914743 + ], + [ + -117.907543, + 33.914738 + ], + [ + -117.907576, + 33.914744 + ], + [ + -117.907672, + 33.914783 + ], + [ + -117.907749, + 33.914826 + ], + [ + -117.907851, + 33.914849 + ], + [ + -117.90804, + 33.914896 + ], + [ + -117.908138, + 33.914959 + ], + [ + -117.908214, + 33.915027 + ], + [ + -117.908263, + 33.915118 + ], + [ + -117.908276, + 33.915202 + ], + [ + -117.908274, + 33.915261 + ], + [ + -117.908253, + 33.915319 + ], + [ + -117.90818, + 33.915465 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 131513197, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.159694, + 34.145871 + ], + [ + -118.158593, + 34.145871 + ], + [ + -118.158594, + 34.146132 + ], + [ + -118.15854, + 34.146132 + ], + [ + -118.158536, + 34.146109 + ], + [ + -118.158519, + 34.146084 + ], + [ + -118.15849, + 34.146068 + ], + [ + -118.158476, + 34.14605 + ], + [ + -118.158474, + 34.145848 + ], + [ + -118.159691, + 34.145844 + ], + [ + -118.159697, + 34.145854 + ], + [ + -118.159694, + 34.145871 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 131513204, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.15969, + 34.145919 + ], + [ + -118.159538, + 34.145921 + ], + [ + -118.159522, + 34.145933 + ], + [ + -118.159506, + 34.145992 + ], + [ + -118.159017, + 34.145992 + ], + [ + -118.159006, + 34.145953 + ], + [ + -118.158994, + 34.145933 + ], + [ + -118.15897, + 34.145931 + ], + [ + -118.15885, + 34.145933 + ], + [ + -118.158818, + 34.145949 + ], + [ + -118.158805, + 34.145967 + ], + [ + -118.15873, + 34.145967 + ], + [ + -118.158703, + 34.146015 + ], + [ + -118.158615, + 34.146013 + ], + [ + -118.158615, + 34.145893 + ], + [ + -118.159692, + 34.145891 + ], + [ + -118.15969, + 34.145919 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 131519774, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.158751, + 34.146565 + ], + [ + -118.159019, + 34.146568 + ], + [ + -118.159002, + 34.146517 + ], + [ + -118.158799, + 34.146516 + ], + [ + -118.158793, + 34.14651 + ], + [ + -118.158783, + 34.146474 + ], + [ + -118.158757, + 34.146473 + ], + [ + -118.158748, + 34.14646 + ], + [ + -118.1587, + 34.146453 + ], + [ + -118.158697, + 34.146391 + ], + [ + -118.158748, + 34.146377 + ], + [ + -118.158757, + 34.146358 + ], + [ + -118.158783, + 34.146361 + ], + [ + -118.158793, + 34.146335 + ], + [ + -118.158923, + 34.146333 + ], + [ + -118.158938, + 34.146371 + ], + [ + -118.15897, + 34.146373 + ], + [ + -118.158978, + 34.146389 + ], + [ + -118.159114, + 34.146391 + ], + [ + -118.159137, + 34.146343 + ], + [ + -118.159144, + 34.146294 + ], + [ + -118.159112, + 34.146276 + ], + [ + -118.159042, + 34.146277 + ], + [ + -118.159042, + 34.146244 + ], + [ + -118.158693, + 34.146242 + ], + [ + -118.158693, + 34.146327 + ], + [ + -118.15867, + 34.146345 + ], + [ + -118.158671, + 34.14645 + ], + [ + -118.158687, + 34.146467 + ], + [ + -118.158687, + 34.146498 + ], + [ + -118.158723, + 34.146531 + ], + [ + -118.158751, + 34.146565 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 131519788, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.157782, + 34.145856 + ], + [ + -118.157784, + 34.145952 + ], + [ + -118.157749, + 34.145953 + ], + [ + -118.15773, + 34.146065 + ], + [ + -118.157738, + 34.14615 + ], + [ + -118.157826, + 34.146312 + ], + [ + -118.157855, + 34.146343 + ], + [ + -118.157862, + 34.146666 + ], + [ + -118.157806, + 34.146666 + ], + [ + -118.157807, + 34.147298 + ], + [ + -118.157925, + 34.147111 + ], + [ + -118.158052, + 34.147109 + ], + [ + -118.158055, + 34.147045 + ], + [ + -118.1584, + 34.147042 + ], + [ + -118.158402, + 34.146988 + ], + [ + -118.158782, + 34.146987 + ], + [ + -118.158936, + 34.14683 + ], + [ + -118.158937, + 34.146621 + ], + [ + -118.158507, + 34.146619 + ], + [ + -118.158503, + 34.146496 + ], + [ + -118.158605, + 34.146496 + ], + [ + -118.158606, + 34.146594 + ], + [ + -118.159022, + 34.14659 + ], + [ + -118.159067, + 34.14673 + ], + [ + -118.159109, + 34.146731 + ], + [ + -118.159114, + 34.146789 + ], + [ + -118.159261, + 34.146808 + ], + [ + -118.159369, + 34.146795 + ], + [ + -118.159399, + 34.146779 + ], + [ + -118.159398, + 34.146727 + ], + [ + -118.159436, + 34.146729 + ], + [ + -118.159471, + 34.146587 + ], + [ + -118.159976, + 34.146581 + ], + [ + -118.159978, + 34.146528 + ], + [ + -118.160026, + 34.146524 + ], + [ + -118.160035, + 34.146483 + ], + [ + -118.160039, + 34.146448 + ], + [ + -118.160061, + 34.146448 + ], + [ + -118.160059, + 34.146399 + ], + [ + -118.16004, + 34.146399 + ], + [ + -118.160023, + 34.146327 + ], + [ + -118.160006, + 34.146316 + ], + [ + -118.159898, + 34.146317 + ], + [ + -118.159883, + 34.14634 + ], + [ + -118.159875, + 34.146365 + ], + [ + -118.159873, + 34.146387 + ], + [ + -118.15938, + 34.14639 + ], + [ + -118.159362, + 34.146347 + ], + [ + -118.159351, + 34.146292 + ], + [ + -118.159359, + 34.146285 + ], + [ + -118.159385, + 34.146276 + ], + [ + -118.159387, + 34.146293 + ], + [ + -118.159416, + 34.146293 + ], + [ + -118.159421, + 34.146337 + ], + [ + -118.159705, + 34.146351 + ], + [ + -118.159798, + 34.146331 + ], + [ + -118.159858, + 34.146294 + ], + [ + -118.159943, + 34.146283 + ], + [ + -118.160025, + 34.146305 + ], + [ + -118.160095, + 34.146367 + ], + [ + -118.160111, + 34.146445 + ], + [ + -118.1601, + 34.146462 + ], + [ + -118.160266, + 34.146476 + ], + [ + -118.160393, + 34.146426 + ], + [ + -118.160448, + 34.146361 + ], + [ + -118.160515, + 34.146276 + ], + [ + -118.160509, + 34.146178 + ], + [ + -118.160102, + 34.145969 + ], + [ + -118.160025, + 34.145994 + ], + [ + -118.159902, + 34.146086 + ], + [ + -118.159862, + 34.14608 + ], + [ + -118.159883, + 34.146063 + ], + [ + -118.15988, + 34.146003 + ], + [ + -118.159789, + 34.145929 + ], + [ + -118.159733, + 34.145925 + ], + [ + -118.159733, + 34.145843 + ], + [ + -118.160279, + 34.145842 + ], + [ + -118.160328, + 34.145859 + ], + [ + -118.160522, + 34.14586 + ], + [ + -118.16056, + 34.145873 + ], + [ + -118.160593, + 34.145909 + ], + [ + -118.16085, + 34.146558 + ], + [ + -118.159694, + 34.146975 + ], + [ + -118.158967, + 34.147194 + ], + [ + -118.157876, + 34.147499 + ], + [ + -118.15778, + 34.147518 + ], + [ + -118.157715, + 34.147528 + ], + [ + -118.157698, + 34.145857 + ], + [ + -118.157782, + 34.145856 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 131549837, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.11392, + 34.132329 + ], + [ + -118.113794, + 34.13221 + ], + [ + -118.113659, + 34.131989 + ], + [ + -118.113506, + 34.13159 + ], + [ + -118.113436, + 34.131439 + ], + [ + -118.113169, + 34.131075 + ], + [ + -118.113066, + 34.130898 + ], + [ + -118.11301, + 34.130703 + ], + [ + -118.11301, + 34.130402 + ], + [ + -118.113063, + 34.130169 + ], + [ + -118.113157, + 34.129692 + ], + [ + -118.113198, + 34.129481 + ], + [ + -118.113709, + 34.129503 + ], + [ + -118.113779, + 34.129724 + ], + [ + -118.114227, + 34.129627 + ], + [ + -118.114324, + 34.129511 + ], + [ + -118.114473, + 34.129541 + ], + [ + -118.114554, + 34.129547 + ], + [ + -118.114507, + 34.130541 + ], + [ + -118.114803, + 34.130736 + ], + [ + -118.114927, + 34.131037 + ], + [ + -118.115126, + 34.131951 + ], + [ + -118.114947, + 34.132653 + ], + [ + -118.114853, + 34.132648 + ], + [ + -118.114704, + 34.13256 + ], + [ + -118.114525, + 34.132466 + ], + [ + -118.114313, + 34.132388 + ], + [ + -118.114131, + 34.132342 + ], + [ + -118.113958, + 34.132344 + ], + [ + -118.11392, + 34.132329 + ] + ] + ] + }, + "properties": { + "name": "Botanical Gardens", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 135721978, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921184, + 33.945069 + ], + [ + -117.920411, + 33.94506 + ], + [ + -117.919993, + 33.944561 + ], + [ + -117.919652, + 33.944238 + ], + [ + -117.919682, + 33.943547 + ], + [ + -117.919446, + 33.942959 + ], + [ + -117.919451, + 33.942788 + ], + [ + -117.919984, + 33.942781 + ], + [ + -117.921119, + 33.942781 + ], + [ + -117.921125, + 33.942988 + ], + [ + -117.921195, + 33.945037 + ], + [ + -117.921184, + 33.945069 + ] + ] + ] + }, + "properties": { + "name": "Estell Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 149981494, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.902978, + 33.913548 + ], + [ + -117.902854, + 33.913773 + ], + [ + -117.903004, + 33.91383 + ], + [ + -117.903128, + 33.913606 + ], + [ + -117.902978, + 33.913548 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 156466447, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.054273, + 34.148173 + ], + [ + -118.050727, + 34.148241 + ], + [ + -118.050723, + 34.147379 + ], + [ + -118.050645, + 34.147284 + ], + [ + -118.050431, + 34.147234 + ], + [ + -118.050285, + 34.146189 + ], + [ + -118.050272, + 34.145178 + ], + [ + -118.050368, + 34.14457 + ], + [ + -118.050511, + 34.144051 + ], + [ + -118.051713, + 34.142205 + ], + [ + -118.051883, + 34.141852 + ], + [ + -118.052003, + 34.141035 + ], + [ + -118.052175, + 34.14041 + ], + [ + -118.052986, + 34.139377 + ], + [ + -118.053354, + 34.138922 + ], + [ + -118.053922, + 34.138201 + ], + [ + -118.054517, + 34.138374 + ], + [ + -118.05406, + 34.139141 + ], + [ + -118.054036, + 34.13975 + ], + [ + -118.055136, + 34.139704 + ], + [ + -118.055732, + 34.138872 + ], + [ + -118.056232, + 34.138743 + ], + [ + -118.056957, + 34.138525 + ], + [ + -118.057579, + 34.138359 + ], + [ + -118.057972, + 34.138304 + ], + [ + -118.058552, + 34.138336 + ], + [ + -118.059067, + 34.138492 + ], + [ + -118.059324, + 34.13862 + ], + [ + -118.059607, + 34.138847 + ], + [ + -118.05971, + 34.139153 + ], + [ + -118.059753, + 34.139508 + ], + [ + -118.05971, + 34.139828 + ], + [ + -118.059496, + 34.140169 + ], + [ + -118.059213, + 34.140396 + ], + [ + -118.058926, + 34.140509 + ], + [ + -118.058102, + 34.140603 + ], + [ + -118.058192, + 34.141071 + ], + [ + -118.057954, + 34.141161 + ], + [ + -118.05774, + 34.141312 + ], + [ + -118.057645, + 34.141463 + ], + [ + -118.057629, + 34.141616 + ], + [ + -118.057629, + 34.141622 + ], + [ + -118.057628, + 34.141781 + ], + [ + -118.057685, + 34.141934 + ], + [ + -118.057838, + 34.142255 + ], + [ + -118.057876, + 34.142512 + ], + [ + -118.057846, + 34.142758 + ], + [ + -118.057636, + 34.143353 + ], + [ + -118.055646, + 34.142784 + ], + [ + -118.055375, + 34.142746 + ], + [ + -118.055184, + 34.142718 + ], + [ + -118.055148, + 34.142886 + ], + [ + -118.054372, + 34.142885 + ], + [ + -118.054309, + 34.143934 + ], + [ + -118.054286, + 34.144672 + ], + [ + -118.054303, + 34.145795 + ], + [ + -118.054273, + 34.148173 + ] + ] + ] + }, + "properties": { + "name": "The Arboretum", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 161244789, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.915212, + 33.90795 + ], + [ + -117.915341, + 33.907819 + ], + [ + -117.915341, + 33.90794 + ], + [ + -117.915322, + 33.908184 + ], + [ + -117.915352, + 33.908306 + ], + [ + -117.915483, + 33.908741 + ], + [ + -117.915204, + 33.908702 + ], + [ + -117.915043, + 33.908775 + ], + [ + -117.914863, + 33.908884 + ], + [ + -117.914806, + 33.909015 + ], + [ + -117.914811, + 33.909238 + ], + [ + -117.914672, + 33.909376 + ], + [ + -117.914353, + 33.909568 + ], + [ + -117.914189, + 33.909638 + ], + [ + -117.913749, + 33.909598 + ], + [ + -117.913223, + 33.909643 + ], + [ + -117.913143, + 33.909896 + ], + [ + -117.913218, + 33.910297 + ], + [ + -117.913116, + 33.910528 + ], + [ + -117.912902, + 33.910769 + ], + [ + -117.912349, + 33.91092 + ], + [ + -117.912204, + 33.910956 + ], + [ + -117.912121, + 33.910806 + ], + [ + -117.911802, + 33.910907 + ], + [ + -117.911169, + 33.911263 + ], + [ + -117.910646, + 33.911644 + ], + [ + -117.910353, + 33.911842 + ], + [ + -117.909849, + 33.912211 + ], + [ + -117.909541, + 33.91249 + ], + [ + -117.909235, + 33.912775 + ], + [ + -117.909098, + 33.912906 + ], + [ + -117.90876, + 33.912901 + ], + [ + -117.908208, + 33.913093 + ], + [ + -117.907682, + 33.913164 + ], + [ + -117.907596, + 33.913017 + ], + [ + -117.907451, + 33.912937 + ], + [ + -117.907264, + 33.912964 + ], + [ + -117.907011, + 33.913124 + ], + [ + -117.906067, + 33.913676 + ], + [ + -117.904863, + 33.913237 + ], + [ + -117.905379, + 33.912296 + ], + [ + -117.905805, + 33.912487 + ], + [ + -117.906931, + 33.911699 + ], + [ + -117.906958, + 33.910965 + ], + [ + -117.907741, + 33.911241 + ], + [ + -117.90787, + 33.911223 + ], + [ + -117.907924, + 33.911161 + ], + [ + -117.90824, + 33.911361 + ], + [ + -117.908492, + 33.911147 + ], + [ + -117.908986, + 33.911254 + ], + [ + -117.909849, + 33.911063 + ], + [ + -117.910643, + 33.910488 + ], + [ + -117.911421, + 33.909803 + ], + [ + -117.911687, + 33.90927 + ], + [ + -117.911987, + 33.908874 + ], + [ + -117.912862, + 33.908491 + ], + [ + -117.913223, + 33.908375 + ], + [ + -117.914963, + 33.908347 + ], + [ + -117.91513, + 33.908113 + ], + [ + -117.915212, + 33.90795 + ] + ] + ] + }, + "properties": { + "name": "Brea Creek Municipal Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 161410781, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.911164, + 33.945674 + ], + [ + -117.911237, + 33.945354 + ], + [ + -117.911432, + 33.945384 + ], + [ + -117.911359, + 33.945704 + ], + [ + -117.911164, + 33.945674 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163355312, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.137183, + 34.014119 + ], + [ + -118.137155, + 34.014173 + ], + [ + -118.137119, + 34.014189 + ], + [ + -118.136603, + 34.014091 + ], + [ + -118.136689, + 34.013459 + ], + [ + -118.136123, + 34.01341 + ], + [ + -118.136105, + 34.013387 + ], + [ + -118.136206, + 34.012424 + ], + [ + -118.137265, + 34.012569 + ], + [ + -118.13731, + 34.01258 + ], + [ + -118.137341, + 34.012608 + ], + [ + -118.137355, + 34.012637 + ], + [ + -118.137364, + 34.012691 + ], + [ + -118.137183, + 34.014119 + ] + ] + ] + }, + "properties": { + "name": "Saybrook Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166979335, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.156191, + 34.11465 + ], + [ + -118.155297, + 34.114658 + ], + [ + -118.155306, + 34.113763 + ], + [ + -118.156197, + 34.113759 + ], + [ + -118.156191, + 34.11465 + ] + ] + ] + }, + "properties": { + "name": "South Pasadena Library Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166983008, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.92436, + 33.945315 + ], + [ + -117.92338, + 33.945309 + ], + [ + -117.923376, + 33.942959 + ], + [ + -117.924199, + 33.942966 + ], + [ + -117.924254, + 33.942966 + ], + [ + -117.924251, + 33.943088 + ], + [ + -117.923982, + 33.943207 + ], + [ + -117.924342, + 33.944125 + ], + [ + -117.92436, + 33.945315 + ] + ] + ] + }, + "properties": { + "name": "Loma Norte Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166983152, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.911975, + 33.945332 + ], + [ + -117.912023, + 33.945429 + ], + [ + -117.911701, + 33.945597 + ], + [ + -117.911656, + 33.945811 + ], + [ + -117.911125, + 33.945692 + ], + [ + -117.911167, + 33.94546 + ], + [ + -117.91096, + 33.945332 + ], + [ + -117.911062, + 33.945253 + ], + [ + -117.911531, + 33.945346 + ], + [ + -117.911662, + 33.945448 + ], + [ + -117.911975, + 33.945332 + ] + ] + ] + }, + "properties": { + "name": "Woodcrest Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166984744, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.953326, + 33.909287 + ], + [ + -117.953785, + 33.909373 + ], + [ + -117.954479, + 33.909281 + ], + [ + -117.955071, + 33.908912 + ], + [ + -117.955665, + 33.908648 + ], + [ + -117.956017, + 33.908362 + ], + [ + -117.956087, + 33.9081 + ], + [ + -117.956332, + 33.908115 + ], + [ + -117.956165, + 33.908784 + ], + [ + -117.956151, + 33.909062 + ], + [ + -117.956229, + 33.909337 + ], + [ + -117.956391, + 33.909589 + ], + [ + -117.956763, + 33.909841 + ], + [ + -117.957263, + 33.910011 + ], + [ + -117.958198, + 33.91008 + ], + [ + -117.958209, + 33.909768 + ], + [ + -117.958192, + 33.909527 + ], + [ + -117.957978, + 33.909072 + ], + [ + -117.957937, + 33.908756 + ], + [ + -117.957599, + 33.907857 + ], + [ + -117.958155, + 33.907673 + ], + [ + -117.958417, + 33.90837 + ], + [ + -117.958507, + 33.908889 + ], + [ + -117.958989, + 33.911942 + ], + [ + -117.959026, + 33.912258 + ], + [ + -117.95904, + 33.912575 + ], + [ + -117.959042, + 33.913115 + ], + [ + -117.958934, + 33.913111 + ], + [ + -117.958983, + 33.912687 + ], + [ + -117.958758, + 33.912337 + ], + [ + -117.958118, + 33.911961 + ], + [ + -117.957876, + 33.910917 + ], + [ + -117.953278, + 33.909409 + ], + [ + -117.953326, + 33.909287 + ] + ] + ] + }, + "properties": { + "name": "Vista Del Valle Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513717, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.929074, + 33.932947 + ], + [ + -117.929091, + 33.933011 + ], + [ + -117.929126, + 33.933046 + ], + [ + -117.929181, + 33.933074 + ], + [ + -117.929171, + 33.933668 + ], + [ + -117.929171, + 33.933693 + ], + [ + -117.928716, + 33.933697 + ], + [ + -117.92871, + 33.932888 + ], + [ + -117.92907, + 33.932886 + ], + [ + -117.929074, + 33.932947 + ] + ] + ] + }, + "properties": { + "name": "Descanso Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513718, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.941793, + 33.933648 + ], + [ + -117.941818, + 33.93287 + ], + [ + -117.941893, + 33.932867 + ], + [ + -117.943509, + 33.932797 + ], + [ + -117.94394, + 33.932779 + ], + [ + -117.943927, + 33.933489 + ], + [ + -117.943082, + 33.933636 + ], + [ + -117.941793, + 33.933648 + ] + ] + ] + }, + "properties": { + "name": "El Centro Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513724, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.960706, + 33.939227 + ], + [ + -117.960926, + 33.938139 + ], + [ + -117.960728, + 33.937873 + ], + [ + -117.96062, + 33.937844 + ], + [ + -117.960533, + 33.937774 + ], + [ + -117.960487, + 33.937253 + ], + [ + -117.960297, + 33.937222 + ], + [ + -117.959238, + 33.937211 + ], + [ + -117.959235, + 33.936202 + ], + [ + -117.960234, + 33.936205 + ], + [ + -117.960207, + 33.93548 + ], + [ + -117.96238, + 33.935483 + ], + [ + -117.962908, + 33.936064 + ], + [ + -117.963052, + 33.937029 + ], + [ + -117.962747, + 33.937775 + ], + [ + -117.962879, + 33.938439 + ], + [ + -117.961981, + 33.938315 + ], + [ + -117.962016, + 33.939238 + ], + [ + -117.962019, + 33.939329 + ], + [ + -117.960706, + 33.939227 + ] + ] + ] + }, + "properties": { + "name": "La Bonita Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513725, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.94625, + 33.922074 + ], + [ + -117.946763, + 33.922072 + ], + [ + -117.946889, + 33.922092 + ], + [ + -117.947778, + 33.922537 + ], + [ + -117.94793, + 33.922592 + ], + [ + -117.948073, + 33.922633 + ], + [ + -117.948281, + 33.92266 + ], + [ + -117.948487, + 33.922675 + ], + [ + -117.948498, + 33.923167 + ], + [ + -117.947119, + 33.922715 + ], + [ + -117.94656, + 33.92254 + ], + [ + -117.946247, + 33.922423 + ], + [ + -117.94625, + 33.922074 + ] + ] + ] + }, + "properties": { + "name": "Las Lomas Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513726, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.950484, + 33.927234 + ], + [ + -117.950482, + 33.927113 + ], + [ + -117.951365, + 33.926812 + ], + [ + -117.951707, + 33.926676 + ], + [ + -117.952084, + 33.926484 + ], + [ + -117.952084, + 33.927239 + ], + [ + -117.951284, + 33.927237 + ], + [ + -117.950484, + 33.927234 + ] + ] + ] + }, + "properties": { + "name": "Loma Verde Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513728, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.972447, + 33.924475 + ], + [ + -117.971066, + 33.924475 + ], + [ + -117.971044, + 33.923284 + ], + [ + -117.971781, + 33.923287 + ], + [ + -117.971868, + 33.923132 + ], + [ + -117.972258, + 33.923116 + ], + [ + -117.972447, + 33.923116 + ], + [ + -117.972447, + 33.924475 + ] + ] + ] + }, + "properties": { + "name": "Oeste Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513729, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.938604, + 33.942724 + ], + [ + -117.938366, + 33.942911 + ], + [ + -117.938136, + 33.942834 + ], + [ + -117.937496, + 33.942825 + ], + [ + -117.937485, + 33.942408 + ], + [ + -117.938002, + 33.942419 + ], + [ + -117.938022, + 33.942316 + ], + [ + -117.9386, + 33.942311 + ], + [ + -117.938604, + 33.942724 + ] + ] + ] + }, + "properties": { + "name": "Old Reservoir Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513730, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.964886, + 33.946043 + ], + [ + -117.964893, + 33.945002 + ], + [ + -117.966317, + 33.94502 + ], + [ + -117.966496, + 33.945055 + ], + [ + -117.966642, + 33.94512 + ], + [ + -117.966717, + 33.945243 + ], + [ + -117.966475, + 33.946055 + ], + [ + -117.964886, + 33.946043 + ] + ] + ] + }, + "properties": { + "name": "Osornio Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513736, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.948294, + 33.930371 + ], + [ + -117.94622, + 33.930363 + ], + [ + -117.946232, + 33.928985 + ], + [ + -117.94622, + 33.9284 + ], + [ + -117.948286, + 33.928399 + ], + [ + -117.948294, + 33.930371 + ] + ] + ] + }, + "properties": { + "name": "Portola Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513738, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.948284, + 33.941845 + ], + [ + -117.947058, + 33.941847 + ], + [ + -117.947056, + 33.941358 + ], + [ + -117.947151, + 33.941358 + ], + [ + -117.947151, + 33.941099 + ], + [ + -117.947127, + 33.941099 + ], + [ + -117.947126, + 33.940922 + ], + [ + -117.947718, + 33.940921 + ], + [ + -117.947719, + 33.941377 + ], + [ + -117.948283, + 33.941376 + ], + [ + -117.948284, + 33.941845 + ] + ] + ] + }, + "properties": { + "name": "San Miguel Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513741, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.974097, + 33.928425 + ], + [ + -117.972065, + 33.928813 + ], + [ + -117.971129, + 33.928841 + ], + [ + -117.97112, + 33.928494 + ], + [ + -117.97132, + 33.928362 + ], + [ + -117.974095, + 33.928354 + ], + [ + -117.974097, + 33.928425 + ] + ] + ] + }, + "properties": { + "name": "Terraza Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513744, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.958961, + 33.924444 + ], + [ + -117.956432, + 33.924457 + ], + [ + -117.956426, + 33.922774 + ], + [ + -117.957074, + 33.922773 + ], + [ + -117.957074, + 33.921611 + ], + [ + -117.958967, + 33.921596 + ], + [ + -117.959013, + 33.921609 + ], + [ + -117.959039, + 33.921634 + ], + [ + -117.95905, + 33.921667 + ], + [ + -117.959065, + 33.92364 + ], + [ + -117.959031, + 33.923816 + ], + [ + -117.959027, + 33.92435 + ], + [ + -117.959022, + 33.924387 + ], + [ + -117.959003, + 33.924422 + ], + [ + -117.958961, + 33.924444 + ] + ] + ] + }, + "properties": { + "name": "Vista Grande Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 173518533, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.167988, + 34.143967 + ], + [ + -118.167716, + 34.144192 + ], + [ + -118.167562, + 34.144466 + ], + [ + -118.16704, + 34.144505 + ], + [ + -118.165883, + 34.144439 + ], + [ + -118.165942, + 34.143879 + ], + [ + -118.166011, + 34.14335 + ], + [ + -118.166539, + 34.142825 + ], + [ + -118.166714, + 34.142591 + ], + [ + -118.166704, + 34.14215 + ], + [ + -118.16624, + 34.141894 + ], + [ + -118.166048, + 34.140712 + ], + [ + -118.166038, + 34.139856 + ], + [ + -118.16624, + 34.138532 + ], + [ + -118.166794, + 34.13795 + ], + [ + -118.166976, + 34.137694 + ], + [ + -118.166821, + 34.137111 + ], + [ + -118.166237, + 34.136818 + ], + [ + -118.166026, + 34.136515 + ], + [ + -118.166444, + 34.135102 + ], + [ + -118.166535, + 34.134609 + ], + [ + -118.166233, + 34.134091 + ], + [ + -118.165868, + 34.133801 + ], + [ + -118.165849, + 34.132494 + ], + [ + -118.165517, + 34.131611 + ], + [ + -118.16542, + 34.130473 + ], + [ + -118.165308, + 34.130098 + ], + [ + -118.164285, + 34.129709 + ], + [ + -118.164306, + 34.129101 + ], + [ + -118.165762, + 34.127927 + ], + [ + -118.166151, + 34.127883 + ], + [ + -118.166668, + 34.13034 + ], + [ + -118.166561, + 34.131426 + ], + [ + -118.167174, + 34.133759 + ], + [ + -118.167675, + 34.134748 + ], + [ + -118.167952, + 34.135317 + ], + [ + -118.168858, + 34.135793 + ], + [ + -118.169226, + 34.136676 + ], + [ + -118.16945, + 34.138317 + ], + [ + -118.169077, + 34.140879 + ], + [ + -118.16954, + 34.142397 + ], + [ + -118.169274, + 34.142992 + ], + [ + -118.167988, + 34.143967 + ] + ] + ] + }, + "properties": { + "name": "Lower Arroyo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 174668877, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.173603, + 34.113147 + ], + [ + -118.173008, + 34.11329 + ], + [ + -118.172387, + 34.11368 + ], + [ + -118.172218, + 34.113569 + ], + [ + -118.171258, + 34.114428 + ], + [ + -118.171296, + 34.114602 + ], + [ + -118.170214, + 34.115576 + ], + [ + -118.170043, + 34.115732 + ], + [ + -118.169922, + 34.115831 + ], + [ + -118.169802, + 34.115916 + ], + [ + -118.169674, + 34.115987 + ], + [ + -118.169553, + 34.116037 + ], + [ + -118.169382, + 34.116087 + ], + [ + -118.168824, + 34.11625 + ], + [ + -118.168678, + 34.116314 + ], + [ + -118.168541, + 34.116392 + ], + [ + -118.168412, + 34.116492 + ], + [ + -118.168292, + 34.11662 + ], + [ + -118.167805, + 34.117151 + ], + [ + -118.167593, + 34.117103 + ], + [ + -118.167419, + 34.117056 + ], + [ + -118.167235, + 34.117066 + ], + [ + -118.166986, + 34.117092 + ], + [ + -118.166781, + 34.117129 + ], + [ + -118.166759, + 34.117072 + ], + [ + -118.167285, + 34.116245 + ], + [ + -118.167574, + 34.116019 + ], + [ + -118.167799, + 34.115702 + ], + [ + -118.169477, + 34.114265 + ], + [ + -118.171199, + 34.11316 + ], + [ + -118.171445, + 34.11302 + ], + [ + -118.171785, + 34.112945 + ], + [ + -118.17195, + 34.112868 + ], + [ + -118.172356, + 34.112769 + ], + [ + -118.172837, + 34.112523 + ], + [ + -118.173224, + 34.112416 + ], + [ + -118.173642, + 34.112367 + ], + [ + -118.173908, + 34.11239 + ], + [ + -118.174023, + 34.112489 + ], + [ + -118.174204, + 34.112905 + ], + [ + -118.174264, + 34.113065 + ], + [ + -118.173603, + 34.113147 + ] + ] + ] + }, + "properties": { + "name": "Arroyo Seco Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 174669219, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.173908, + 34.11239 + ], + [ + -118.173917, + 34.112178 + ], + [ + -118.174703, + 34.112252 + ], + [ + -118.175666, + 34.112491 + ], + [ + -118.176287, + 34.112693 + ], + [ + -118.176261, + 34.112851 + ], + [ + -118.175802, + 34.113002 + ], + [ + -118.17554, + 34.113064 + ], + [ + -118.174326, + 34.113064 + ], + [ + -118.174264, + 34.113065 + ], + [ + -118.174204, + 34.112905 + ], + [ + -118.174023, + 34.112489 + ], + [ + -118.173908, + 34.11239 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 174696995, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.17994, + 34.110848 + ], + [ + -118.177977, + 34.111653 + ], + [ + -118.177842, + 34.111441 + ], + [ + -118.177247, + 34.111699 + ], + [ + -118.177134, + 34.111663 + ], + [ + -118.177065, + 34.111415 + ], + [ + -118.177131, + 34.111009 + ], + [ + -118.178125, + 34.110744 + ], + [ + -118.178876, + 34.110559 + ], + [ + -118.179268, + 34.110537 + ], + [ + -118.179591, + 34.110643 + ], + [ + -118.179821, + 34.110758 + ], + [ + -118.17994, + 34.110848 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 180047055, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.047844, + 34.049317 + ], + [ + -118.04783, + 34.05003 + ], + [ + -118.047026, + 34.050024 + ], + [ + -118.047004, + 34.049317 + ], + [ + -118.047844, + 34.049317 + ] + ] + ] + }, + "properties": { + "name": "Mary Van Dyke Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 181471277, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.086789, + 33.913564 + ], + [ + -118.088214, + 33.914346 + ], + [ + -118.089799, + 33.915172 + ], + [ + -118.089799, + 33.913564 + ], + [ + -118.086789, + 33.913564 + ] + ] + ] + }, + "properties": { + "name": "Vista Verde Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 181475447, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.082752, + 33.920484 + ], + [ + -118.083529, + 33.921631 + ], + [ + -118.084601, + 33.92164 + ], + [ + -118.084626, + 33.920475 + ], + [ + -118.082752, + 33.920484 + ] + ] + ] + }, + "properties": { + "name": "Orr Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 181582593, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.156367, + 34.12904 + ], + [ + -118.1549, + 34.12905 + ], + [ + -118.154847, + 34.128374 + ], + [ + -118.1563, + 34.128383 + ], + [ + -118.156367, + 34.12904 + ] + ] + ] + }, + "properties": { + "name": "Arlington Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 184708662, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.885503, + 34.131961 + ], + [ + -117.885557, + 34.131967 + ], + [ + -117.885606, + 34.131961 + ], + [ + -117.885645, + 34.131948 + ], + [ + -117.885685, + 34.131924 + ], + [ + -117.885711, + 34.131892 + ], + [ + -117.885728, + 34.131855 + ], + [ + -117.885805, + 34.131619 + ], + [ + -117.885814, + 34.131532 + ], + [ + -117.885811, + 34.130982 + ], + [ + -117.885754, + 34.130952 + ], + [ + -117.885162, + 34.130835 + ], + [ + -117.884697, + 34.131137 + ], + [ + -117.88455, + 34.131612 + ], + [ + -117.88469, + 34.131713 + ], + [ + -117.885224, + 34.131903 + ], + [ + -117.885503, + 34.131961 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 184708676, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.884818, + 34.134301 + ], + [ + -117.884818, + 34.133645 + ], + [ + -117.884041, + 34.133645 + ], + [ + -117.884041, + 34.1343 + ], + [ + -117.884818, + 34.134301 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 184708679, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.887166, + 34.129783 + ], + [ + -117.887149, + 34.128839 + ], + [ + -117.885926, + 34.128854 + ], + [ + -117.885943, + 34.129798 + ], + [ + -117.887166, + 34.129783 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 184708683, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.90073, + 34.134163 + ], + [ + -117.899218, + 34.13416 + ], + [ + -117.899215, + 34.134972 + ], + [ + -117.899214, + 34.135267 + ], + [ + -117.900726, + 34.135271 + ], + [ + -117.90073, + 34.134163 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 184713187, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.907415, + 34.131916 + ], + [ + -117.907415, + 34.131741 + ], + [ + -117.906933, + 34.13174 + ], + [ + -117.906933, + 34.131916 + ], + [ + -117.907415, + 34.131916 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192131067, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.11411, + 34.066174 + ], + [ + -118.115348, + 34.066176 + ], + [ + -118.115357, + 34.065005 + ], + [ + -118.114649, + 34.065008 + ], + [ + -118.114649, + 34.064943 + ], + [ + -118.114112, + 34.064942 + ], + [ + -118.11411, + 34.066174 + ] + ] + ] + }, + "properties": { + "name": "Sierra Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192161723, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.113155, + 34.054126 + ], + [ + -118.114738, + 34.054162 + ], + [ + -118.115199, + 34.053193 + ], + [ + -118.116159, + 34.053493 + ], + [ + -118.116259, + 34.053519 + ], + [ + -118.116363, + 34.053528 + ], + [ + -118.116508, + 34.053525 + ], + [ + -118.116505, + 34.052767 + ], + [ + -118.116508, + 34.052659 + ], + [ + -118.115634, + 34.052157 + ], + [ + -118.114416, + 34.051726 + ], + [ + -118.114249, + 34.051522 + ], + [ + -118.114013, + 34.051035 + ], + [ + -118.113884, + 34.050933 + ], + [ + -118.113546, + 34.050768 + ], + [ + -118.112742, + 34.050397 + ], + [ + -118.112807, + 34.050562 + ], + [ + -118.112828, + 34.050695 + ], + [ + -118.112844, + 34.050908 + ], + [ + -118.112839, + 34.052984 + ], + [ + -118.112844, + 34.053135 + ], + [ + -118.11286, + 34.05323 + ], + [ + -118.11293, + 34.053344 + ], + [ + -118.11309, + 34.053622 + ], + [ + -118.113177, + 34.053784 + ], + [ + -118.113193, + 34.053904 + ], + [ + -118.113182, + 34.054015 + ], + [ + -118.113155, + 34.054126 + ] + ] + ] + }, + "properties": { + "name": "Garvey Ranch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192716805, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.127418, + 34.056636 + ], + [ + -118.125575, + 34.056654 + ], + [ + -118.125602, + 34.05888 + ], + [ + -118.12744, + 34.058884 + ], + [ + -118.12744, + 34.058862 + ], + [ + -118.127386, + 34.0588 + ], + [ + -118.127381, + 34.058239 + ], + [ + -118.127382, + 34.057369 + ], + [ + -118.127381, + 34.05701 + ], + [ + -118.127418, + 34.056988 + ], + [ + -118.127418, + 34.056636 + ] + ] + ] + }, + "properties": { + "name": "Barnes Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192856966, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.12466, + 34.142519 + ], + [ + -118.12466, + 34.142362 + ], + [ + -118.124661, + 34.142187 + ], + [ + -118.125066, + 34.142184 + ], + [ + -118.125068, + 34.142375 + ], + [ + -118.125069, + 34.142519 + ], + [ + -118.12466, + 34.142519 + ] + ] + ] + }, + "properties": { + "name": "iTennis Pasadena", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192856969, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.125085, + 34.142528 + ], + [ + -118.12464, + 34.142531 + ], + [ + -118.124619, + 34.142528 + ], + [ + -118.124602, + 34.142515 + ], + [ + -118.124596, + 34.142401 + ], + [ + -118.124596, + 34.142395 + ], + [ + -118.1246, + 34.142171 + ], + [ + -118.124584, + 34.141735 + ], + [ + -118.12521, + 34.141739 + ], + [ + -118.125307, + 34.141739 + ], + [ + -118.12586, + 34.141741 + ], + [ + -118.125886, + 34.141741 + ], + [ + -118.125888, + 34.141949 + ], + [ + -118.125889, + 34.142015 + ], + [ + -118.125893, + 34.142508 + ], + [ + -118.125876, + 34.142518 + ], + [ + -118.125842, + 34.142521 + ], + [ + -118.125743, + 34.142528 + ], + [ + -118.125527, + 34.142528 + ], + [ + -118.125116, + 34.142528 + ], + [ + -118.125085, + 34.142528 + ] + ] + ] + }, + "properties": { + "name": "Grant Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192856971, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.12531, + 34.141958 + ], + [ + -118.125861, + 34.141951 + ], + [ + -118.12586, + 34.141741 + ], + [ + -118.125307, + 34.141739 + ], + [ + -118.125306, + 34.141766 + ], + [ + -118.12531, + 34.141958 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 193124653, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.12473, + 34.142168 + ], + [ + -118.124726, + 34.142065 + ], + [ + -118.124751, + 34.142044 + ], + [ + -118.124751, + 34.142031 + ], + [ + -118.124753, + 34.141997 + ], + [ + -118.124795, + 34.141963 + ], + [ + -118.12531, + 34.141958 + ], + [ + -118.125306, + 34.141766 + ], + [ + -118.124682, + 34.141762 + ], + [ + -118.124657, + 34.141782 + ], + [ + -118.124657, + 34.142165 + ], + [ + -118.12473, + 34.142168 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 193124658, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.125081, + 34.142167 + ], + [ + -118.125057, + 34.142167 + ], + [ + -118.125053, + 34.142045 + ], + [ + -118.124751, + 34.142044 + ], + [ + -118.124751, + 34.142031 + ], + [ + -118.124799, + 34.141987 + ], + [ + -118.125083, + 34.141984 + ], + [ + -118.125081, + 34.142167 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 202892957, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.191094, + 34.023764 + ], + [ + -118.191085, + 34.022551 + ], + [ + -118.191199, + 34.022112 + ], + [ + -118.191203, + 34.021973 + ], + [ + -118.189353, + 34.022004 + ], + [ + -118.189373, + 34.02379 + ], + [ + -118.189408, + 34.023812 + ], + [ + -118.190973, + 34.02381 + ], + [ + -118.19103, + 34.02381 + ], + [ + -118.191064, + 34.023803 + ], + [ + -118.191087, + 34.023785 + ], + [ + -118.191094, + 34.023764 + ] + ] + ] + }, + "properties": { + "name": "Salazar Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 202907162, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.16776, + 34.011995 + ], + [ + -118.166783, + 34.013534 + ], + [ + -118.168025, + 34.014074 + ], + [ + -118.168629, + 34.014334 + ], + [ + -118.169042, + 34.014454 + ], + [ + -118.169916, + 34.01276 + ], + [ + -118.16776, + 34.011995 + ] + ] + ] + }, + "properties": { + "name": "Bristow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 203052383, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.121393, + 34.120731 + ], + [ + -118.121804, + 34.120843 + ], + [ + -118.122255, + 34.12093 + ], + [ + -118.122546, + 34.120966 + ], + [ + -118.122596, + 34.120818 + ], + [ + -118.122822, + 34.120739 + ], + [ + -118.122962, + 34.120665 + ], + [ + -118.123053, + 34.120482 + ], + [ + -118.123083, + 34.120279 + ], + [ + -118.122952, + 34.12003 + ], + [ + -118.123022, + 34.119793 + ], + [ + -118.122842, + 34.119619 + ], + [ + -118.122526, + 34.119536 + ], + [ + -118.12214, + 34.119598 + ], + [ + -118.121759, + 34.119735 + ], + [ + -118.121363, + 34.119922 + ], + [ + -118.121118, + 34.120075 + ], + [ + -118.121133, + 34.120196 + ], + [ + -118.121153, + 34.120337 + ], + [ + -118.121078, + 34.120374 + ], + [ + -118.120927, + 34.120341 + ], + [ + -118.120887, + 34.120416 + ], + [ + -118.120937, + 34.120503 + ], + [ + -118.121108, + 34.120615 + ], + [ + -118.121393, + 34.120731 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 203052385, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.123523, + 34.121122 + ], + [ + -118.123501, + 34.120809 + ], + [ + -118.124807, + 34.120762 + ], + [ + -118.124832, + 34.121082 + ], + [ + -118.123523, + 34.121122 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 205690234, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.181934, + 34.120067 + ], + [ + -118.181659, + 34.120039 + ], + [ + -118.178875, + 34.120048 + ], + [ + -118.178897, + 34.119992 + ], + [ + -118.180255, + 34.118933 + ], + [ + -118.180436, + 34.119048 + ], + [ + -118.180838, + 34.119164 + ], + [ + -118.181726, + 34.119135 + ], + [ + -118.181934, + 34.120067 + ] + ] + ] + }, + "properties": { + "name": "Garvanza Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 205728923, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.161741, + 34.037151 + ], + [ + -118.160604, + 34.037098 + ], + [ + -118.160454, + 34.037093 + ], + [ + -118.160459, + 34.038422 + ], + [ + -118.160341, + 34.038427 + ], + [ + -118.159381, + 34.038058 + ], + [ + -118.159365, + 34.037107 + ], + [ + -118.157289, + 34.037151 + ], + [ + -118.157342, + 34.04056 + ], + [ + -118.16018, + 34.040529 + ], + [ + -118.160175, + 34.03968 + ], + [ + -118.161784, + 34.039667 + ], + [ + -118.161741, + 34.037151 + ] + ] + ] + }, + "properties": { + "name": "Belvedere Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 206770505, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.868549, + 33.966534 + ], + [ + -117.868598, + 33.96676 + ], + [ + -117.868356, + 33.967005 + ], + [ + -117.867997, + 33.966955 + ], + [ + -117.867755, + 33.967005 + ], + [ + -117.867186, + 33.96745 + ], + [ + -117.867176, + 33.967699 + ], + [ + -117.867712, + 33.968055 + ], + [ + -117.867729, + 33.968246 + ], + [ + -117.867133, + 33.96842 + ], + [ + -117.86606, + 33.968625 + ], + [ + -117.865963, + 33.96907 + ], + [ + -117.865706, + 33.969319 + ], + [ + -117.865083, + 33.969221 + ], + [ + -117.864553, + 33.969402 + ], + [ + -117.864435, + 33.969011 + ], + [ + -117.863817, + 33.968705 + ], + [ + -117.863453, + 33.968856 + ], + [ + -117.863287, + 33.969207 + ], + [ + -117.863227, + 33.969701 + ], + [ + -117.863131, + 33.970707 + ], + [ + -117.862884, + 33.971196 + ], + [ + -117.862155, + 33.971516 + ], + [ + -117.861736, + 33.971419 + ], + [ + -117.861625, + 33.971031 + ], + [ + -117.861479, + 33.970662 + ], + [ + -117.860981, + 33.970105 + ], + [ + -117.860717, + 33.970262 + ], + [ + -117.860521, + 33.970944 + ], + [ + -117.860461, + 33.971153 + ], + [ + -117.860384, + 33.971419 + ], + [ + -117.860213, + 33.971908 + ], + [ + -117.859998, + 33.971632 + ], + [ + -117.859554, + 33.971271 + ], + [ + -117.859065, + 33.971187 + ], + [ + -117.859107, + 33.971472 + ], + [ + -117.859386, + 33.971979 + ], + [ + -117.859311, + 33.972335 + ], + [ + -117.858721, + 33.9727 + ], + [ + -117.858314, + 33.972592 + ], + [ + -117.858185, + 33.972558 + ], + [ + -117.857702, + 33.972177 + ], + [ + -117.857509, + 33.972024 + ], + [ + -117.856897, + 33.971623 + ], + [ + -117.856347, + 33.971513 + ], + [ + -117.856189, + 33.971481 + ], + [ + -117.855567, + 33.971276 + ], + [ + -117.855041, + 33.970814 + ], + [ + -117.854483, + 33.969977 + ], + [ + -117.853636, + 33.969079 + ], + [ + -117.853041, + 33.968459 + ], + [ + -117.852434, + 33.968038 + ], + [ + -117.85193, + 33.968038 + ], + [ + -117.851748, + 33.967877 + ], + [ + -117.852376, + 33.967739 + ], + [ + -117.852966, + 33.967854 + ], + [ + -117.853496, + 33.968491 + ], + [ + -117.853921, + 33.968699 + ], + [ + -117.854301, + 33.96899 + ], + [ + -117.854762, + 33.969461 + ], + [ + -117.855595, + 33.969758 + ], + [ + -117.856153, + 33.970052 + ], + [ + -117.85634, + 33.969968 + ], + [ + -117.855889, + 33.969568 + ], + [ + -117.855685, + 33.969105 + ], + [ + -117.855423, + 33.968691 + ], + [ + -117.85517, + 33.968358 + ], + [ + -117.855245, + 33.967913 + ], + [ + -117.855342, + 33.967495 + ], + [ + -117.854715, + 33.966795 + ], + [ + -117.853932, + 33.96611 + ], + [ + -117.853396, + 33.965372 + ], + [ + -117.85296, + 33.965101 + ], + [ + -117.853009, + 33.964669 + ], + [ + -117.852816, + 33.964295 + ], + [ + -117.853056, + 33.96358 + ], + [ + -117.853818, + 33.962877 + ], + [ + -117.854945, + 33.961916 + ], + [ + -117.855874, + 33.960878 + ], + [ + -117.857022, + 33.960237 + ], + [ + -117.858636, + 33.959433 + ], + [ + -117.860359, + 33.958484 + ], + [ + -117.863496, + 33.956959 + ], + [ + -117.864135, + 33.956028 + ], + [ + -117.863899, + 33.955298 + ], + [ + -117.86415, + 33.954557 + ], + [ + -117.864611, + 33.953845 + ], + [ + -117.865384, + 33.952269 + ], + [ + -117.866474, + 33.951196 + ], + [ + -117.867515, + 33.950386 + ], + [ + -117.86812, + 33.949653 + ], + [ + -117.868899, + 33.948134 + ], + [ + -117.869439, + 33.947374 + ], + [ + -117.869703, + 33.94687 + ], + [ + -117.869901, + 33.946289 + ], + [ + -117.87009, + 33.945998 + ], + [ + -117.870071, + 33.946098 + ], + [ + -117.872002, + 33.94579 + ], + [ + -117.882863, + 33.946238 + ], + [ + -117.88698, + 33.946306 + ], + [ + -117.888057, + 33.946324 + ], + [ + -117.888423, + 33.946323 + ], + [ + -117.902767, + 33.946026 + ], + [ + -117.910451, + 33.946366 + ], + [ + -117.911812, + 33.946426 + ], + [ + -117.914189, + 33.947232 + ], + [ + -117.916045, + 33.948291 + ], + [ + -117.917811, + 33.948623 + ], + [ + -117.919564, + 33.948701 + ], + [ + -117.920948, + 33.948442 + ], + [ + -117.922596, + 33.948445 + ], + [ + -117.92368, + 33.94841 + ], + [ + -117.923938, + 33.949362 + ], + [ + -117.923816, + 33.950788 + ], + [ + -117.922836, + 33.952919 + ], + [ + -117.922547, + 33.953595 + ], + [ + -117.9226, + 33.954023 + ], + [ + -117.923423, + 33.954364 + ], + [ + -117.925422, + 33.954174 + ], + [ + -117.925325, + 33.955357 + ], + [ + -117.924925, + 33.956046 + ], + [ + -117.924124, + 33.957084 + ], + [ + -117.923094, + 33.957645 + ], + [ + -117.922815, + 33.958161 + ], + [ + -117.92201, + 33.958793 + ], + [ + -117.921416, + 33.958555 + ], + [ + -117.920826, + 33.958689 + ], + [ + -117.920397, + 33.959312 + ], + [ + -117.920519, + 33.959691 + ], + [ + -117.921084, + 33.960148 + ], + [ + -117.921763, + 33.959967 + ], + [ + -117.922714, + 33.959721 + ], + [ + -117.92265, + 33.959588 + ], + [ + -117.923144, + 33.959418 + ], + [ + -117.923466, + 33.959775 + ], + [ + -117.92398, + 33.960086 + ], + [ + -117.924746, + 33.960003 + ], + [ + -117.926119, + 33.960225 + ], + [ + -117.926513, + 33.960415 + ], + [ + -117.926109, + 33.960608 + ], + [ + -117.925808, + 33.960946 + ], + [ + -117.92525, + 33.961115 + ], + [ + -117.92495, + 33.96124 + ], + [ + -117.92437, + 33.961249 + ], + [ + -117.923637, + 33.961145 + ], + [ + -117.923251, + 33.96159 + ], + [ + -117.923201, + 33.961942 + ], + [ + -117.923502, + 33.962298 + ], + [ + -117.923905, + 33.962319 + ], + [ + -117.924431, + 33.962248 + ], + [ + -117.925143, + 33.9622 + ], + [ + -117.923594, + 33.962773 + ], + [ + -117.92304, + 33.963259 + ], + [ + -117.920665, + 33.963245 + ], + [ + -117.919682, + 33.963464 + ], + [ + -117.918362, + 33.964852 + ], + [ + -117.917129, + 33.965252 + ], + [ + -117.916524, + 33.965487 + ], + [ + -117.916063, + 33.965621 + ], + [ + -117.915927, + 33.966169 + ], + [ + -117.915773, + 33.966066 + ], + [ + -117.915905, + 33.965653 + ], + [ + -117.915376, + 33.965469 + ], + [ + -117.91514, + 33.964882 + ], + [ + -117.914736, + 33.963615 + ], + [ + -117.914603, + 33.963272 + ], + [ + -117.915247, + 33.963076 + ], + [ + -117.915369, + 33.96293 + ], + [ + -117.916352, + 33.963076 + ], + [ + -117.917318, + 33.962675 + ], + [ + -117.917811, + 33.961883 + ], + [ + -117.918663, + 33.961391 + ], + [ + -117.919421, + 33.961038 + ], + [ + -117.919628, + 33.959246 + ], + [ + -117.920519, + 33.958009 + ], + [ + -117.918716, + 33.957502 + ], + [ + -117.918416, + 33.957689 + ], + [ + -117.915837, + 33.95755 + ], + [ + -117.910934, + 33.955387 + ], + [ + -117.908939, + 33.955378 + ], + [ + -117.906174, + 33.956177 + ], + [ + -117.905248, + 33.956731 + ], + [ + -117.90336, + 33.957479 + ], + [ + -117.902287, + 33.957158 + ], + [ + -117.902183, + 33.956764 + ], + [ + -117.901517, + 33.956835 + ], + [ + -117.901625, + 33.958686 + ], + [ + -117.900423, + 33.959184 + ], + [ + -117.900527, + 33.959561 + ], + [ + -117.901303, + 33.959968 + ], + [ + -117.901281, + 33.960146 + ], + [ + -117.901085, + 33.960308 + ], + [ + -117.900785, + 33.961572 + ], + [ + -117.904822, + 33.962779 + ], + [ + -117.905098, + 33.961714 + ], + [ + -117.907161, + 33.961267 + ], + [ + -117.90763, + 33.960913 + ], + [ + -117.908982, + 33.960718 + ], + [ + -117.909028, + 33.961 + ], + [ + -117.910122, + 33.960875 + ], + [ + -117.910401, + 33.960217 + ], + [ + -117.910799, + 33.959844 + ], + [ + -117.911513, + 33.95986 + ], + [ + -117.91248, + 33.960833 + ], + [ + -117.913644, + 33.96151 + ], + [ + -117.913748, + 33.96196 + ], + [ + -117.913791, + 33.962708 + ], + [ + -117.913641, + 33.963277 + ], + [ + -117.913252, + 33.963459 + ], + [ + -117.913019, + 33.964327 + ], + [ + -117.912801, + 33.964829 + ], + [ + -117.912204, + 33.965306 + ], + [ + -117.912139, + 33.965857 + ], + [ + -117.911316, + 33.966527 + ], + [ + -117.911127, + 33.96668 + ], + [ + -117.910441, + 33.967053 + ], + [ + -117.908642, + 33.966445 + ], + [ + -117.908019, + 33.967014 + ], + [ + -117.907762, + 33.967512 + ], + [ + -117.907029, + 33.967765 + ], + [ + -117.90671, + 33.967851 + ], + [ + -117.906303, + 33.967406 + ], + [ + -117.906174, + 33.966854 + ], + [ + -117.905956, + 33.966608 + ], + [ + -117.905466, + 33.966623 + ], + [ + -117.904865, + 33.966854 + ], + [ + -117.905122, + 33.967352 + ], + [ + -117.90465, + 33.967655 + ], + [ + -117.904221, + 33.967548 + ], + [ + -117.903767, + 33.96732 + ], + [ + -117.903016, + 33.96668 + ], + [ + -117.902547, + 33.966107 + ], + [ + -117.90145, + 33.966413 + ], + [ + -117.901217, + 33.967352 + ], + [ + -117.900681, + 33.967868 + ], + [ + -117.900423, + 33.968278 + ], + [ + -117.89993, + 33.968402 + ], + [ + -117.899047, + 33.967908 + ], + [ + -117.899029, + 33.967352 + ], + [ + -117.898768, + 33.966519 + ], + [ + -117.898385, + 33.966996 + ], + [ + -117.898041, + 33.967495 + ], + [ + -117.897376, + 33.967619 + ], + [ + -117.897437, + 33.967249 + ], + [ + -117.897459, + 33.966537 + ], + [ + -117.897505, + 33.965786 + ], + [ + -117.897158, + 33.965167 + ], + [ + -117.895957, + 33.964686 + ], + [ + -117.895595, + 33.964149 + ], + [ + -117.895488, + 33.963615 + ], + [ + -117.894866, + 33.96406 + ], + [ + -117.894866, + 33.964807 + ], + [ + -117.894455, + 33.965203 + ], + [ + -117.893213, + 33.965074 + ], + [ + -117.890853, + 33.964256 + ], + [ + -117.889648, + 33.96401 + ], + [ + -117.888536, + 33.964007 + ], + [ + -117.887935, + 33.964718 + ], + [ + -117.887317, + 33.964887 + ], + [ + -117.886476, + 33.96495 + ], + [ + -117.886236, + 33.965274 + ], + [ + -117.886279, + 33.965719 + ], + [ + -117.885915, + 33.965808 + ], + [ + -117.885185, + 33.965541 + ], + [ + -117.88463, + 33.965003 + ], + [ + -117.883429, + 33.965341 + ], + [ + -117.882957, + 33.966338 + ], + [ + -117.88227, + 33.968135 + ], + [ + -117.880854, + 33.969061 + ], + [ + -117.882013, + 33.971054 + ], + [ + -117.882632, + 33.972107 + ], + [ + -117.882957, + 33.973545 + ], + [ + -117.882892, + 33.974079 + ], + [ + -117.882227, + 33.974043 + ], + [ + -117.88158, + 33.973673 + ], + [ + -117.880722, + 33.973335 + ], + [ + -117.88021, + 33.972958 + ], + [ + -117.879545, + 33.972406 + ], + [ + -117.87873, + 33.972566 + ], + [ + -117.876455, + 33.972442 + ], + [ + -117.87594, + 33.972211 + ], + [ + -117.87506, + 33.972175 + ], + [ + -117.874842, + 33.972445 + ], + [ + -117.874156, + 33.972232 + ], + [ + -117.873898, + 33.97168 + ], + [ + -117.873108, + 33.971054 + ], + [ + -117.872268, + 33.970648 + ], + [ + -117.871538, + 33.970221 + ], + [ + -117.871027, + 33.970289 + ], + [ + -117.870448, + 33.969506 + ], + [ + -117.870358, + 33.968495 + ], + [ + -117.870469, + 33.966872 + ], + [ + -117.870105, + 33.966498 + ], + [ + -117.868549, + 33.966534 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 207822382, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.054672, + 33.982664 + ], + [ + -118.054667, + 33.982566 + ], + [ + -118.054651, + 33.982495 + ], + [ + -118.054165, + 33.98216 + ], + [ + -118.054072, + 33.982166 + ], + [ + -118.054013, + 33.98218 + ], + [ + -118.053852, + 33.982531 + ], + [ + -118.053862, + 33.982607 + ], + [ + -118.053954, + 33.982664 + ], + [ + -118.054672, + 33.982664 + ] + ] + ] + }, + "properties": { + "name": "McNees Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211849860, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.046347, + 34.141983 + ], + [ + -118.046561, + 34.141961 + ], + [ + -118.046787, + 34.141881 + ], + [ + -118.046959, + 34.141775 + ], + [ + -118.047109, + 34.141624 + ], + [ + -118.047221, + 34.141424 + ], + [ + -118.047237, + 34.141251 + ], + [ + -118.047216, + 34.14106 + ], + [ + -118.047135, + 34.140896 + ], + [ + -118.047044, + 34.140802 + ], + [ + -118.046937, + 34.140718 + ], + [ + -118.046781, + 34.140629 + ], + [ + -118.042817, + 34.139413 + ], + [ + -118.042624, + 34.139386 + ], + [ + -118.042415, + 34.139404 + ], + [ + -118.042232, + 34.139448 + ], + [ + -118.042063, + 34.139531 + ], + [ + -118.041943, + 34.13963 + ], + [ + -118.041816, + 34.13978 + ], + [ + -118.041755, + 34.139892 + ], + [ + -118.041731, + 34.140042 + ], + [ + -118.041734, + 34.140181 + ], + [ + -118.041776, + 34.140318 + ], + [ + -118.041836, + 34.140447 + ], + [ + -118.041911, + 34.140558 + ], + [ + -118.042007, + 34.140629 + ], + [ + -118.042136, + 34.140709 + ], + [ + -118.04227, + 34.140758 + ], + [ + -118.046165, + 34.141948 + ], + [ + -118.046347, + 34.141983 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211890705, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.890011, + 34.090101 + ], + [ + -117.890015, + 34.089592 + ], + [ + -117.890017, + 34.089408 + ], + [ + -117.889282, + 34.089397 + ], + [ + -117.889284, + 34.089562 + ], + [ + -117.889287, + 34.090141 + ], + [ + -117.889503, + 34.090129 + ], + [ + -117.890011, + 34.090101 + ] + ] + ] + }, + "properties": { + "name": "Civic Center Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211890891, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.893474, + 34.092635 + ], + [ + -117.893474, + 34.092619 + ], + [ + -117.893472, + 34.092124 + ], + [ + -117.892388, + 34.092124 + ], + [ + -117.89238, + 34.092788 + ], + [ + -117.89238, + 34.092798 + ], + [ + -117.89241, + 34.092796 + ], + [ + -117.892503, + 34.092793 + ], + [ + -117.892662, + 34.092753 + ], + [ + -117.892817, + 34.092693 + ], + [ + -117.892965, + 34.092642 + ], + [ + -117.893064, + 34.092629 + ], + [ + -117.893281, + 34.092633 + ], + [ + -117.893366, + 34.092634 + ], + [ + -117.893474, + 34.092635 + ] + ] + ] + }, + "properties": { + "name": "Edna Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 214485274, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.118657, + 34.145068 + ], + [ + -118.117761, + 34.145073 + ], + [ + -118.117763, + 34.145224 + ], + [ + -118.11778, + 34.145225 + ], + [ + -118.117795, + 34.145231 + ], + [ + -118.117806, + 34.145241 + ], + [ + -118.117812, + 34.145251 + ], + [ + -118.118659, + 34.145246 + ], + [ + -118.118657, + 34.145068 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220399924, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.864129, + 33.951094 + ], + [ + -117.86076, + 33.956647 + ], + [ + -117.859912, + 33.957546 + ], + [ + -117.857767, + 33.958329 + ], + [ + -117.855243, + 33.959772 + ], + [ + -117.853848, + 33.960636 + ], + [ + -117.853132, + 33.960608 + ], + [ + -117.852359, + 33.960821 + ], + [ + -117.851595, + 33.961312 + ], + [ + -117.851027, + 33.962166 + ], + [ + -117.850074, + 33.961764 + ], + [ + -117.849205, + 33.963161 + ], + [ + -117.848892, + 33.963029 + ], + [ + -117.848604, + 33.963055 + ], + [ + -117.848602, + 33.962896 + ], + [ + -117.848291, + 33.962771 + ], + [ + -117.848057, + 33.963095 + ], + [ + -117.847314, + 33.963394 + ], + [ + -117.847089, + 33.963341 + ], + [ + -117.847156, + 33.963286 + ], + [ + -117.847445, + 33.963046 + ], + [ + -117.847327, + 33.962957 + ], + [ + -117.84766, + 33.962681 + ], + [ + -117.848035, + 33.962218 + ], + [ + -117.848119, + 33.962041 + ], + [ + -117.848377, + 33.962041 + ], + [ + -117.848411, + 33.961907 + ], + [ + -117.848626, + 33.961675 + ], + [ + -117.848626, + 33.961257 + ], + [ + -117.84857, + 33.961178 + ], + [ + -117.848484, + 33.960822 + ], + [ + -117.848259, + 33.960653 + ], + [ + -117.846845, + 33.960874 + ], + [ + -117.846727, + 33.961364 + ], + [ + -117.846362, + 33.961444 + ], + [ + -117.846038, + 33.961187 + ], + [ + -117.845675, + 33.961658 + ], + [ + -117.845641, + 33.961614 + ], + [ + -117.846008, + 33.960865 + ], + [ + -117.845439, + 33.960821 + ], + [ + -117.845214, + 33.96107 + ], + [ + -117.844903, + 33.960999 + ], + [ + -117.844634, + 33.961177 + ], + [ + -117.843969, + 33.96156 + ], + [ + -117.843637, + 33.961791 + ], + [ + -117.843218, + 33.962022 + ], + [ + -117.842701, + 33.962166 + ], + [ + -117.842038, + 33.962325 + ], + [ + -117.841266, + 33.962618 + ], + [ + -117.840491, + 33.963163 + ], + [ + -117.839976, + 33.963421 + ], + [ + -117.839826, + 33.963447 + ], + [ + -117.840094, + 33.963163 + ], + [ + -117.841459, + 33.962361 + ], + [ + -117.842574, + 33.961996 + ], + [ + -117.843366, + 33.96141 + ], + [ + -117.843624, + 33.960947 + ], + [ + -117.843227, + 33.961098 + ], + [ + -117.842883, + 33.96092 + ], + [ + -117.842476, + 33.960938 + ], + [ + -117.841972, + 33.961125 + ], + [ + -117.841424, + 33.961152 + ], + [ + -117.841145, + 33.961196 + ], + [ + -117.840781, + 33.961 + ], + [ + -117.840246, + 33.960972 + ], + [ + -117.839452, + 33.961311 + ], + [ + -117.839023, + 33.961702 + ], + [ + -117.838753, + 33.961748 + ], + [ + -117.83827, + 33.961508 + ], + [ + -117.83795, + 33.961391 + ], + [ + -117.837465, + 33.961561 + ], + [ + -117.83735, + 33.961818 + ], + [ + -117.837403, + 33.962102 + ], + [ + -117.837639, + 33.962369 + ], + [ + -117.838004, + 33.962547 + ], + [ + -117.837873, + 33.962825 + ], + [ + -117.837519, + 33.963163 + ], + [ + -117.836996, + 33.963517 + ], + [ + -117.835459, + 33.96286 + ], + [ + -117.835172, + 33.962894 + ], + [ + -117.83515, + 33.963126 + ], + [ + -117.835405, + 33.96343 + ], + [ + -117.835708, + 33.963757 + ], + [ + -117.835772, + 33.964452 + ], + [ + -117.836157, + 33.964515 + ], + [ + -117.836298, + 33.964763 + ], + [ + -117.836287, + 33.965377 + ], + [ + -117.836405, + 33.965795 + ], + [ + -117.836245, + 33.966285 + ], + [ + -117.835837, + 33.966552 + ], + [ + -117.835472, + 33.966578 + ], + [ + -117.835322, + 33.96697 + ], + [ + -117.835663, + 33.967443 + ], + [ + -117.83621, + 33.967683 + ], + [ + -117.836607, + 33.967719 + ], + [ + -117.836049, + 33.967772 + ], + [ + -117.835631, + 33.967781 + ], + [ + -117.835373, + 33.967407 + ], + [ + -117.835129, + 33.967086 + ], + [ + -117.834515, + 33.967274 + ], + [ + -117.834279, + 33.96666 + ], + [ + -117.834667, + 33.966534 + ], + [ + -117.834764, + 33.966124 + ], + [ + -117.834483, + 33.965716 + ], + [ + -117.834045, + 33.965377 + ], + [ + -117.833968, + 33.965013 + ], + [ + -117.832992, + 33.964008 + ], + [ + -117.832543, + 33.964425 + ], + [ + -117.8322, + 33.964398 + ], + [ + -117.831985, + 33.964416 + ], + [ + -117.831135, + 33.963501 + ], + [ + -117.830247, + 33.963633 + ], + [ + -117.83014, + 33.964185 + ], + [ + -117.830043, + 33.964638 + ], + [ + -117.830556, + 33.964987 + ], + [ + -117.830902, + 33.966089 + ], + [ + -117.83135, + 33.966998 + ], + [ + -117.831693, + 33.967149 + ], + [ + -117.831921, + 33.96745 + ], + [ + -117.831695, + 33.967602 + ], + [ + -117.831803, + 33.968046 + ], + [ + -117.832401, + 33.968288 + ], + [ + -117.83297, + 33.968297 + ], + [ + -117.833155, + 33.968455 + ], + [ + -117.833187, + 33.968847 + ], + [ + -117.833144, + 33.969078 + ], + [ + -117.832382, + 33.96931 + ], + [ + -117.832275, + 33.969621 + ], + [ + -117.832307, + 33.969941 + ], + [ + -117.831951, + 33.969792 + ], + [ + -117.831779, + 33.969578 + ], + [ + -117.831352, + 33.969354 + ], + [ + -117.831084, + 33.969141 + ], + [ + -117.831135, + 33.968777 + ], + [ + -117.830985, + 33.968368 + ], + [ + -117.83062, + 33.967905 + ], + [ + -117.830342, + 33.967621 + ], + [ + -117.830022, + 33.967335 + ], + [ + -117.830009, + 33.967042 + ], + [ + -117.830041, + 33.966473 + ], + [ + -117.829902, + 33.965877 + ], + [ + -117.829644, + 33.965423 + ], + [ + -117.828981, + 33.964985 + ], + [ + -117.828176, + 33.965083 + ], + [ + -117.827573, + 33.965458 + ], + [ + -117.82749, + 33.966035 + ], + [ + -117.827436, + 33.966471 + ], + [ + -117.827039, + 33.96673 + ], + [ + -117.826449, + 33.966836 + ], + [ + -117.826149, + 33.966943 + ], + [ + -117.826739, + 33.967842 + ], + [ + -117.826889, + 33.968687 + ], + [ + -117.827479, + 33.969461 + ], + [ + -117.827294, + 33.969516 + ], + [ + -117.82708, + 33.969249 + ], + [ + -117.82679, + 33.969062 + ], + [ + -117.826554, + 33.968333 + ], + [ + -117.826565, + 33.967968 + ], + [ + -117.826179, + 33.967238 + ], + [ + -117.825889, + 33.966873 + ], + [ + -117.825827, + 33.966489 + ], + [ + -117.825666, + 33.966294 + ], + [ + -117.825473, + 33.966294 + ], + [ + -117.825127, + 33.966473 + ], + [ + -117.824763, + 33.966971 + ], + [ + -117.824893, + 33.967851 + ], + [ + -117.825162, + 33.969176 + ], + [ + -117.825589, + 33.969774 + ], + [ + -117.826728, + 33.97157 + ], + [ + -117.82853, + 33.973465 + ], + [ + -117.828928, + 33.973883 + ], + [ + -117.82896, + 33.974132 + ], + [ + -117.828046, + 33.974801 + ], + [ + -117.827402, + 33.975246 + ], + [ + -117.826964, + 33.975369 + ], + [ + -117.826565, + 33.974943 + ], + [ + -117.826717, + 33.974461 + ], + [ + -117.826524, + 33.974105 + ], + [ + -117.825956, + 33.974212 + ], + [ + -117.825632, + 33.973742 + ], + [ + -117.826222, + 33.973431 + ], + [ + -117.825805, + 33.973038 + ], + [ + -117.82426, + 33.973803 + ], + [ + -117.824904, + 33.974719 + ], + [ + -117.825353, + 33.974846 + ], + [ + -117.825503, + 33.975344 + ], + [ + -117.825494, + 33.97568 + ], + [ + -117.825462, + 33.975965 + ], + [ + -117.824968, + 33.976027 + ], + [ + -117.824355, + 33.975557 + ], + [ + -117.823477, + 33.975662 + ], + [ + -117.822887, + 33.97584 + ], + [ + -117.822769, + 33.976677 + ], + [ + -117.822587, + 33.977584 + ], + [ + -117.822426, + 33.978056 + ], + [ + -117.821739, + 33.978216 + ], + [ + -117.820879, + 33.978582 + ], + [ + -117.820484, + 33.978705 + ], + [ + -117.82028, + 33.979168 + ], + [ + -117.820645, + 33.979355 + ], + [ + -117.821329, + 33.979445 + ], + [ + -117.82163, + 33.979855 + ], + [ + -117.821503, + 33.980049 + ], + [ + -117.821201, + 33.980273 + ], + [ + -117.821469, + 33.980691 + ], + [ + -117.821278, + 33.980911 + ], + [ + -117.820924, + 33.981018 + ], + [ + -117.820688, + 33.980778 + ], + [ + -117.820591, + 33.980556 + ], + [ + -117.820698, + 33.980244 + ], + [ + -117.820922, + 33.98021 + ], + [ + -117.821074, + 33.979995 + ], + [ + -117.821106, + 33.979835 + ], + [ + -117.820975, + 33.97965 + ], + [ + -117.820484, + 33.979524 + ], + [ + -117.819581, + 33.979098 + ], + [ + -117.819379, + 33.97867 + ], + [ + -117.819731, + 33.976216 + ], + [ + -117.819291, + 33.975522 + ], + [ + -117.819183, + 33.975433 + ], + [ + -117.819368, + 33.975226 + ], + [ + -117.82002, + 33.975246 + ], + [ + -117.820291, + 33.975182 + ], + [ + -117.820409, + 33.974871 + ], + [ + -117.820462, + 33.970965 + ], + [ + -117.819679, + 33.971036 + ], + [ + -117.819207, + 33.971276 + ], + [ + -117.819505, + 33.971927 + ], + [ + -117.819465, + 33.972789 + ], + [ + -117.819014, + 33.972699 + ], + [ + -117.818368, + 33.972408 + ], + [ + -117.818005, + 33.972504 + ], + [ + -117.817673, + 33.973118 + ], + [ + -117.817812, + 33.973767 + ], + [ + -117.818113, + 33.974701 + ], + [ + -117.81733, + 33.974604 + ], + [ + -117.816847, + 33.974728 + ], + [ + -117.81733, + 33.975235 + ], + [ + -117.817898, + 33.975876 + ], + [ + -117.818177, + 33.976427 + ], + [ + -117.818596, + 33.977015 + ], + [ + -117.817694, + 33.977006 + ], + [ + -117.817662, + 33.979017 + ], + [ + -117.817896, + 33.979454 + ], + [ + -117.818218, + 33.979979 + ], + [ + -117.818521, + 33.980858 + ], + [ + -117.817832, + 33.981118 + ], + [ + -117.818035, + 33.981607 + ], + [ + -117.818563, + 33.982041 + ], + [ + -117.819409, + 33.982541 + ], + [ + -117.819357, + 33.982833 + ], + [ + -117.819744, + 33.983349 + ], + [ + -117.82075, + 33.98287 + ], + [ + -117.821492, + 33.98302 + ], + [ + -117.822188, + 33.983066 + ], + [ + -117.822263, + 33.983395 + ], + [ + -117.82161, + 33.983429 + ], + [ + -117.82046, + 33.983858 + ], + [ + -117.820656, + 33.984328 + ], + [ + -117.820226, + 33.984381 + ], + [ + -117.819711, + 33.98423 + ], + [ + -117.819226, + 33.984792 + ], + [ + -117.819497, + 33.985048 + ], + [ + -117.818628, + 33.985555 + ], + [ + -117.818057, + 33.985753 + ], + [ + -117.817617, + 33.985459 + ], + [ + -117.81748, + 33.98528 + ], + [ + -117.818499, + 33.984648 + ], + [ + -117.818907, + 33.983919 + ], + [ + -117.818982, + 33.98358 + ], + [ + -117.818681, + 33.983278 + ], + [ + -117.818113, + 33.9831 + ], + [ + -117.817553, + 33.983306 + ], + [ + -117.81719, + 33.983732 + ], + [ + -117.816791, + 33.983911 + ], + [ + -117.816171, + 33.983874 + ], + [ + -117.815141, + 33.983296 + ], + [ + -117.814626, + 33.983047 + ], + [ + -117.813746, + 33.983073 + ], + [ + -117.813628, + 33.983625 + ], + [ + -117.813261, + 33.983991 + ], + [ + -117.812748, + 33.984426 + ], + [ + -117.813175, + 33.984694 + ], + [ + -117.812587, + 33.985395 + ], + [ + -117.813229, + 33.986411 + ], + [ + -117.814014, + 33.986694 + ], + [ + -117.81457, + 33.987158 + ], + [ + -117.813864, + 33.987157 + ], + [ + -117.812877, + 33.98673 + ], + [ + -117.812802, + 33.986605 + ], + [ + -117.812124, + 33.986331 + ], + [ + -117.811118, + 33.986436 + ], + [ + -117.8103, + 33.986589 + ], + [ + -117.810055, + 33.986925 + ], + [ + -117.811362, + 33.987425 + ], + [ + -117.812941, + 33.987948 + ], + [ + -117.813446, + 33.988384 + ], + [ + -117.812759, + 33.988598 + ], + [ + -117.81218, + 33.989007 + ], + [ + -117.812049, + 33.988777 + ], + [ + -117.811931, + 33.988342 + ], + [ + -117.811343, + 33.988055 + ], + [ + -117.81086, + 33.988073 + ], + [ + -117.810646, + 33.988962 + ], + [ + -117.810772, + 33.989427 + ], + [ + -117.809862, + 33.989336 + ], + [ + -117.809571, + 33.989747 + ], + [ + -117.80895, + 33.989532 + ], + [ + -117.808843, + 33.988971 + ], + [ + -117.808937, + 33.988537 + ], + [ + -117.80853, + 33.988306 + ], + [ + -117.808081, + 33.988571 + ], + [ + -117.807586, + 33.988822 + ], + [ + -117.806472, + 33.988776 + ], + [ + -117.805678, + 33.989052 + ], + [ + -117.805131, + 33.989069 + ], + [ + -117.804573, + 33.988936 + ], + [ + -117.804528, + 33.98811 + ], + [ + -117.803682, + 33.987868 + ], + [ + -117.80291, + 33.988758 + ], + [ + -117.803359, + 33.989347 + ], + [ + -117.802803, + 33.990012 + ], + [ + -117.802395, + 33.989434 + ], + [ + -117.802157, + 33.988706 + ], + [ + -117.801878, + 33.987977 + ], + [ + -117.802253, + 33.986838 + ], + [ + -117.802663, + 33.986658 + ], + [ + -117.802964, + 33.985778 + ], + [ + -117.803661, + 33.985929 + ], + [ + -117.804841, + 33.986205 + ], + [ + -117.805773, + 33.986064 + ], + [ + -117.806762, + 33.985564 + ], + [ + -117.806279, + 33.984817 + ], + [ + -117.808262, + 33.98424 + ], + [ + -117.808746, + 33.984755 + ], + [ + -117.809508, + 33.984559 + ], + [ + -117.809862, + 33.984176 + ], + [ + -117.809195, + 33.983467 + ], + [ + -117.808918, + 33.982717 + ], + [ + -117.809304, + 33.982593 + ], + [ + -117.809937, + 33.982157 + ], + [ + -117.810055, + 33.982068 + ], + [ + -117.811427, + 33.982515 + ], + [ + -117.812231, + 33.981981 + ], + [ + -117.81103, + 33.981153 + ], + [ + -117.8113, + 33.980823 + ], + [ + -117.811793, + 33.980938 + ], + [ + -117.811987, + 33.98068 + ], + [ + -117.812317, + 33.979828 + ], + [ + -117.812995, + 33.979381 + ], + [ + -117.8131, + 33.978805 + ], + [ + -117.813821, + 33.978848 + ], + [ + -117.814154, + 33.978447 + ], + [ + -117.813744, + 33.977862 + ], + [ + -117.813671, + 33.976659 + ], + [ + -117.813864, + 33.976054 + ], + [ + -117.814044, + 33.975451 + ], + [ + -117.813604, + 33.975157 + ], + [ + -117.812598, + 33.975289 + ], + [ + -117.812223, + 33.976161 + ], + [ + -117.811319, + 33.978404 + ], + [ + -117.810806, + 33.979266 + ], + [ + -117.810463, + 33.979461 + ], + [ + -117.81012, + 33.979604 + ], + [ + -117.810332, + 33.978867 + ], + [ + -117.81, + 33.978618 + ], + [ + -117.809648, + 33.978483 + ], + [ + -117.809731, + 33.978191 + ], + [ + -117.809916, + 33.977869 + ], + [ + -117.81042, + 33.977353 + ], + [ + -117.810967, + 33.976659 + ], + [ + -117.811289, + 33.975938 + ], + [ + -117.811096, + 33.975511 + ], + [ + -117.810772, + 33.975264 + ], + [ + -117.810334, + 33.975413 + ], + [ + -117.809884, + 33.97592 + ], + [ + -117.809594, + 33.976445 + ], + [ + -117.809345, + 33.976874 + ], + [ + -117.808862, + 33.977257 + ], + [ + -117.808864, + 33.976801 + ], + [ + -117.808961, + 33.975315 + ], + [ + -117.808543, + 33.974879 + ], + [ + -117.807298, + 33.975146 + ], + [ + -117.807255, + 33.976525 + ], + [ + -117.807212, + 33.977201 + ], + [ + -117.806717, + 33.977052 + ], + [ + -117.806405, + 33.976233 + ], + [ + -117.806332, + 33.975422 + ], + [ + -117.805796, + 33.975013 + ], + [ + -117.804798, + 33.975155 + ], + [ + -117.80467, + 33.975564 + ], + [ + -117.804863, + 33.976748 + ], + [ + -117.805665, + 33.977826 + ], + [ + -117.806867, + 33.978476 + ], + [ + -117.807993, + 33.978467 + ], + [ + -117.808433, + 33.978707 + ], + [ + -117.808317, + 33.978919 + ], + [ + -117.80732, + 33.978705 + ], + [ + -117.806547, + 33.978803 + ], + [ + -117.805582, + 33.978492 + ], + [ + -117.805043, + 33.977968 + ], + [ + -117.804476, + 33.97802 + ], + [ + -117.80424, + 33.976561 + ], + [ + -117.804208, + 33.975636 + ], + [ + -117.804217, + 33.97537 + ], + [ + -117.803436, + 33.975369 + ], + [ + -117.802715, + 33.975193 + ], + [ + -117.801794, + 33.977104 + ], + [ + -117.801086, + 33.978839 + ], + [ + -117.802972, + 33.978787 + ], + [ + -117.802771, + 33.979363 + ], + [ + -117.801073, + 33.980015 + ], + [ + -117.800324, + 33.980075 + ], + [ + -117.799378, + 33.980326 + ], + [ + -117.799091, + 33.980983 + ], + [ + -117.795518, + 33.987014 + ], + [ + -117.799528, + 33.989044 + ], + [ + -117.800915, + 33.989265 + ], + [ + -117.801676, + 33.990608 + ], + [ + -117.801504, + 33.991943 + ], + [ + -117.800925, + 33.992636 + ], + [ + -117.799678, + 33.993412 + ], + [ + -117.799101, + 33.994451 + ], + [ + -117.798479, + 33.994647 + ], + [ + -117.798543, + 33.993811 + ], + [ + -117.797835, + 33.993117 + ], + [ + -117.798157, + 33.991978 + ], + [ + -117.796612, + 33.990822 + ], + [ + -117.795089, + 33.990537 + ], + [ + -117.79363, + 33.991605 + ], + [ + -117.792149, + 33.991765 + ], + [ + -117.791117, + 33.99391 + ], + [ + -117.785068, + 34.004591 + ], + [ + -117.784808, + 34.006078 + ], + [ + -117.784916, + 34.00759 + ], + [ + -117.785023, + 34.00896 + ], + [ + -117.785559, + 34.009268 + ], + [ + -117.78779, + 34.010011 + ], + [ + -117.788022, + 34.009929 + ], + [ + -117.788213, + 34.009805 + ], + [ + -117.788357, + 34.009707 + ], + [ + -117.788447, + 34.009748 + ], + [ + -117.7884, + 34.009807 + ], + [ + -117.788344, + 34.009875 + ], + [ + -117.788223, + 34.009949 + ], + [ + -117.788192, + 34.01006 + ], + [ + -117.788274, + 34.010104 + ], + [ + -117.78835, + 34.010029 + ], + [ + -117.788577, + 34.009814 + ], + [ + -117.788845, + 34.009478 + ], + [ + -117.788543, + 34.009314 + ], + [ + -117.788457, + 34.009282 + ], + [ + -117.788354, + 34.009309 + ], + [ + -117.788288, + 34.009456 + ], + [ + -117.788193, + 34.009685 + ], + [ + -117.787968, + 34.009824 + ], + [ + -117.787823, + 34.009865 + ], + [ + -117.787633, + 34.009877 + ], + [ + -117.787388, + 34.00983 + ], + [ + -117.787093, + 34.009694 + ], + [ + -117.786569, + 34.009459 + ], + [ + -117.785912, + 34.009233 + ], + [ + -117.785522, + 34.009027 + ], + [ + -117.785747, + 34.009043 + ], + [ + -117.78588, + 34.009017 + ], + [ + -117.786602, + 34.0089 + ], + [ + -117.786821, + 34.008842 + ], + [ + -117.786913, + 34.008941 + ], + [ + -117.786953, + 34.009056 + ], + [ + -117.787049, + 34.009126 + ], + [ + -117.78717, + 34.009135 + ], + [ + -117.787291, + 34.009106 + ], + [ + -117.787393, + 34.009088 + ], + [ + -117.787439, + 34.008876 + ], + [ + -117.787482, + 34.008574 + ], + [ + -117.787487, + 34.008406 + ], + [ + -117.787319, + 34.008458 + ], + [ + -117.787117, + 34.008447 + ], + [ + -117.786922, + 34.008423 + ], + [ + -117.786756, + 34.008384 + ], + [ + -117.786451, + 34.008523 + ], + [ + -117.786444, + 34.008472 + ], + [ + -117.78652, + 34.008388 + ], + [ + -117.786739, + 34.008208 + ], + [ + -117.786928, + 34.008268 + ], + [ + -117.787193, + 34.008274 + ], + [ + -117.787395, + 34.008221 + ], + [ + -117.787538, + 34.008151 + ], + [ + -117.787681, + 34.008016 + ], + [ + -117.787916, + 34.007783 + ], + [ + -117.788032, + 34.007673 + ], + [ + -117.788139, + 34.007614 + ], + [ + -117.78825, + 34.007182 + ], + [ + -117.788448, + 34.007263 + ], + [ + -117.788694, + 34.007342 + ], + [ + -117.788895, + 34.007391 + ], + [ + -117.788941, + 34.007648 + ], + [ + -117.789018, + 34.007782 + ], + [ + -117.789124, + 34.007867 + ], + [ + -117.789247, + 34.007995 + ], + [ + -117.789328, + 34.008181 + ], + [ + -117.789348, + 34.008443 + ], + [ + -117.789396, + 34.008718 + ], + [ + -117.789467, + 34.008914 + ], + [ + -117.789555, + 34.009031 + ], + [ + -117.789548, + 34.009163 + ], + [ + -117.789638, + 34.00924 + ], + [ + -117.789786, + 34.009225 + ], + [ + -117.790041, + 34.009029 + ], + [ + -117.790231, + 34.008885 + ], + [ + -117.790374, + 34.008779 + ], + [ + -117.790485, + 34.00866 + ], + [ + -117.790561, + 34.008553 + ], + [ + -117.790677, + 34.00851 + ], + [ + -117.790874, + 34.008418 + ], + [ + -117.791, + 34.008297 + ], + [ + -117.791043, + 34.008211 + ], + [ + -117.791052, + 34.008126 + ], + [ + -117.791049, + 34.00797 + ], + [ + -117.79103, + 34.007819 + ], + [ + -117.790933, + 34.007819 + ], + [ + -117.790788, + 34.008032 + ], + [ + -117.790731, + 34.008017 + ], + [ + -117.790709, + 34.00799 + ], + [ + -117.790746, + 34.007911 + ], + [ + -117.790812, + 34.007798 + ], + [ + -117.790864, + 34.007661 + ], + [ + -117.790882, + 34.007512 + ], + [ + -117.790854, + 34.007378 + ], + [ + -117.790833, + 34.007219 + ], + [ + -117.790953, + 34.007157 + ], + [ + -117.791218, + 34.007004 + ], + [ + -117.791455, + 34.006843 + ], + [ + -117.791778, + 34.006568 + ], + [ + -117.791847, + 34.006533 + ], + [ + -117.791903, + 34.006549 + ], + [ + -117.791692, + 34.006813 + ], + [ + -117.791569, + 34.006988 + ], + [ + -117.791383, + 34.007163 + ], + [ + -117.791252, + 34.007398 + ], + [ + -117.791221, + 34.007745 + ], + [ + -117.79123, + 34.007958 + ], + [ + -117.791265, + 34.008129 + ], + [ + -117.791233, + 34.008288 + ], + [ + -117.791142, + 34.008414 + ], + [ + -117.79098, + 34.008565 + ], + [ + -117.790787, + 34.008671 + ], + [ + -117.790628, + 34.008787 + ], + [ + -117.79038, + 34.009021 + ], + [ + -117.789785, + 34.009446 + ], + [ + -117.790086, + 34.009694 + ], + [ + -117.790058, + 34.00972 + ], + [ + -117.789755, + 34.009612 + ], + [ + -117.789353, + 34.009794 + ], + [ + -117.789307, + 34.009987 + ], + [ + -117.789677, + 34.010395 + ], + [ + -117.78976, + 34.010404 + ], + [ + -117.789736, + 34.010569 + ], + [ + -117.789749, + 34.010753 + ], + [ + -117.789885, + 34.011058 + ], + [ + -117.790078, + 34.011333 + ], + [ + -117.789926, + 34.011444 + ], + [ + -117.789695, + 34.011334 + ], + [ + -117.789519, + 34.011368 + ], + [ + -117.78915, + 34.01128 + ], + [ + -117.78905, + 34.0114 + ], + [ + -117.789252, + 34.011584 + ], + [ + -117.789548, + 34.01175 + ], + [ + -117.789652, + 34.011943 + ], + [ + -117.789949, + 34.012045 + ], + [ + -117.790436, + 34.012092 + ], + [ + -117.790541, + 34.012236 + ], + [ + -117.79053, + 34.012467 + ], + [ + -117.790557, + 34.01263 + ], + [ + -117.79045, + 34.012962 + ], + [ + -117.790102, + 34.013408 + ], + [ + -117.789059, + 34.013823 + ], + [ + -117.789124, + 34.015654 + ], + [ + -117.788394, + 34.016437 + ], + [ + -117.786592, + 34.017504 + ], + [ + -117.785002, + 34.018084 + ], + [ + -117.784811, + 34.019905 + ], + [ + -117.785819, + 34.021097 + ], + [ + -117.786782, + 34.022121 + ], + [ + -117.78657, + 34.022947 + ], + [ + -117.786117, + 34.023811 + ], + [ + -117.791975, + 34.025892 + ], + [ + -117.794188, + 34.026397 + ], + [ + -117.795861, + 34.026414 + ], + [ + -117.796183, + 34.026663 + ], + [ + -117.795795, + 34.027403 + ], + [ + -117.791398, + 34.026219 + ], + [ + -117.788372, + 34.025347 + ], + [ + -117.785411, + 34.024885 + ], + [ + -117.782836, + 34.025223 + ], + [ + -117.779017, + 34.025703 + ], + [ + -117.776421, + 34.025098 + ], + [ + -117.773996, + 34.024245 + ], + [ + -117.772172, + 34.022929 + ], + [ + -117.77155, + 34.02252 + ], + [ + -117.771655, + 34.022068 + ], + [ + -117.772429, + 34.022662 + ], + [ + -117.773588, + 34.023018 + ], + [ + -117.774468, + 34.022893 + ], + [ + -117.774682, + 34.023587 + ], + [ + -117.77509, + 34.023925 + ], + [ + -117.782407, + 34.0238 + ], + [ + -117.782279, + 34.020972 + ], + [ + -117.781851, + 34.020905 + ], + [ + -117.779639, + 34.02051 + ], + [ + -117.778373, + 34.020883 + ], + [ + -117.778203, + 34.021231 + ], + [ + -117.775691, + 34.020386 + ], + [ + -117.774682, + 34.020777 + ], + [ + -117.774079, + 34.021748 + ], + [ + -117.773052, + 34.021275 + ], + [ + -117.772086, + 34.02099 + ], + [ + -117.767945, + 34.019176 + ], + [ + -117.766936, + 34.019372 + ], + [ + -117.766505, + 34.020023 + ], + [ + -117.766185, + 34.020439 + ], + [ + -117.765756, + 34.020261 + ], + [ + -117.765348, + 34.019621 + ], + [ + -117.764855, + 34.019194 + ], + [ + -117.764681, + 34.018813 + ], + [ + -117.7664, + 34.016437 + ], + [ + -117.765692, + 34.016117 + ], + [ + -117.765153, + 34.01659 + ], + [ + -117.764145, + 34.017266 + ], + [ + -117.762623, + 34.016562 + ], + [ + -117.762085, + 34.016679 + ], + [ + -117.761999, + 34.017035 + ], + [ + -117.763911, + 34.0177 + ], + [ + -117.763718, + 34.018251 + ], + [ + -117.763179, + 34.018618 + ], + [ + -117.762323, + 34.019052 + ], + [ + -117.761849, + 34.019489 + ], + [ + -117.760692, + 34.019781 + ], + [ + -117.760392, + 34.018838 + ], + [ + -117.759662, + 34.017646 + ], + [ + -117.757774, + 34.016988 + ], + [ + -117.756207, + 34.017077 + ], + [ + -117.755435, + 34.017042 + ], + [ + -117.75477, + 34.016579 + ], + [ + -117.753804, + 34.016402 + ], + [ + -117.752796, + 34.016188 + ], + [ + -117.751165, + 34.016615 + ], + [ + -117.750585, + 34.016295 + ], + [ + -117.750285, + 34.015708 + ], + [ + -117.750693, + 34.015174 + ], + [ + -117.750929, + 34.014445 + ], + [ + -117.750199, + 34.013965 + ], + [ + -117.749019, + 34.01352 + ], + [ + -117.749641, + 34.013093 + ], + [ + -117.750264, + 34.012862 + ], + [ + -117.751701, + 34.013075 + ], + [ + -117.752731, + 34.012613 + ], + [ + -117.753933, + 34.012471 + ], + [ + -117.754984, + 34.013307 + ], + [ + -117.755669, + 34.014402 + ], + [ + -117.757001, + 34.014943 + ], + [ + -117.757495, + 34.014605 + ], + [ + -117.759834, + 34.015352 + ], + [ + -117.76052, + 34.014605 + ], + [ + -117.760821, + 34.012791 + ], + [ + -117.760134, + 34.012151 + ], + [ + -117.758804, + 34.011955 + ], + [ + -117.757707, + 34.012197 + ], + [ + -117.756851, + 34.011831 + ], + [ + -117.756722, + 34.011297 + ], + [ + -117.757946, + 34.010941 + ], + [ + -117.758589, + 34.010319 + ], + [ + -117.758482, + 34.009767 + ], + [ + -117.758696, + 34.00918 + ], + [ + -117.759104, + 34.009411 + ], + [ + -117.758909, + 34.009974 + ], + [ + -117.759447, + 34.010479 + ], + [ + -117.760392, + 34.009803 + ], + [ + -117.760413, + 34.009091 + ], + [ + -117.760821, + 34.009038 + ], + [ + -117.761786, + 34.009109 + ], + [ + -117.761593, + 34.008184 + ], + [ + -117.760713, + 34.007811 + ], + [ + -117.76007, + 34.007455 + ], + [ + -117.759447, + 34.00653 + ], + [ + -117.760232, + 34.006496 + ], + [ + -117.760263, + 34.006494 + ], + [ + -117.760261, + 34.006373 + ], + [ + -117.76022, + 34.004217 + ], + [ + -117.760302, + 34.003761 + ], + [ + -117.760349, + 34.003506 + ], + [ + -117.759934, + 34.003001 + ], + [ + -117.759756, + 34.002784 + ], + [ + -117.759662, + 34.00267 + ], + [ + -117.759382, + 34.002578 + ], + [ + -117.757752, + 34.002047 + ], + [ + -117.757044, + 34.001549 + ], + [ + -117.756701, + 34.00082 + ], + [ + -117.756607, + 34.000706 + ], + [ + -117.756186, + 34.000197 + ], + [ + -117.755547, + 33.999985 + ], + [ + -117.755435, + 33.999948 + ], + [ + -117.755671, + 33.999432 + ], + [ + -117.756744, + 33.998365 + ], + [ + -117.757388, + 33.998418 + ], + [ + -117.757688, + 33.997689 + ], + [ + -117.757559, + 33.99696 + ], + [ + -117.757709, + 33.996746 + ], + [ + -117.758847, + 33.997813 + ], + [ + -117.760048, + 33.997458 + ], + [ + -117.761465, + 33.998027 + ], + [ + -117.763148, + 33.998881 + ], + [ + -117.763675, + 33.999148 + ], + [ + -117.764788, + 33.99971 + ], + [ + -117.766335, + 34.000873 + ], + [ + -117.76758, + 34.002261 + ], + [ + -117.770026, + 34.001834 + ], + [ + -117.771142, + 34.002083 + ], + [ + -117.772, + 34.001834 + ], + [ + -117.771528, + 34.001371 + ], + [ + -117.771271, + 34.000998 + ], + [ + -117.772065, + 34.000731 + ], + [ + -117.772794, + 34.000286 + ], + [ + -117.77318, + 33.999717 + ], + [ + -117.77258, + 33.999539 + ], + [ + -117.771614, + 33.999592 + ], + [ + -117.771399, + 33.999824 + ], + [ + -117.770863, + 33.999735 + ], + [ + -117.770498, + 33.999592 + ], + [ + -117.769747, + 33.99945 + ], + [ + -117.768846, + 33.999254 + ], + [ + -117.768374, + 33.999379 + ], + [ + -117.767537, + 33.998756 + ], + [ + -117.766765, + 33.998062 + ], + [ + -117.766078, + 33.996835 + ], + [ + -117.766014, + 33.996141 + ], + [ + -117.766593, + 33.996017 + ], + [ + -117.768867, + 33.995963 + ], + [ + -117.772193, + 33.995519 + ], + [ + -117.774725, + 33.995287 + ], + [ + -117.776549, + 33.992903 + ], + [ + -117.774897, + 33.992103 + ], + [ + -117.774168, + 33.992334 + ], + [ + -117.773824, + 33.991249 + ], + [ + -117.773502, + 33.990537 + ], + [ + -117.772515, + 33.990715 + ], + [ + -117.771893, + 33.990359 + ], + [ + -117.771507, + 33.989932 + ], + [ + -117.770133, + 33.989612 + ], + [ + -117.768803, + 33.98947 + ], + [ + -117.767857, + 33.989836 + ], + [ + -117.767709, + 33.990324 + ], + [ + -117.766891, + 33.990619 + ], + [ + -117.766593, + 33.990733 + ], + [ + -117.766398, + 33.991437 + ], + [ + -117.765584, + 33.991284 + ], + [ + -117.765134, + 33.990626 + ], + [ + -117.764125, + 33.990537 + ], + [ + -117.763844, + 33.990939 + ], + [ + -117.763761, + 33.991427 + ], + [ + -117.763095, + 33.991871 + ], + [ + -117.762495, + 33.991551 + ], + [ + -117.761851, + 33.990857 + ], + [ + -117.760542, + 33.99043 + ], + [ + -117.759576, + 33.989968 + ], + [ + -117.759169, + 33.989647 + ], + [ + -117.764039, + 33.989398 + ], + [ + -117.764123, + 33.989569 + ], + [ + -117.765992, + 33.989843 + ], + [ + -117.766786, + 33.989114 + ], + [ + -117.767559, + 33.988651 + ], + [ + -117.767709, + 33.989114 + ], + [ + -117.768503, + 33.988491 + ], + [ + -117.76934, + 33.9881 + ], + [ + -117.769447, + 33.986997 + ], + [ + -117.769211, + 33.986427 + ], + [ + -117.77215, + 33.98552 + ], + [ + -117.77273, + 33.984915 + ], + [ + -117.772601, + 33.983812 + ], + [ + -117.772408, + 33.982673 + ], + [ + -117.77391, + 33.981979 + ], + [ + -117.774532, + 33.98189 + ], + [ + -117.77464, + 33.98157 + ], + [ + -117.774425, + 33.981214 + ], + [ + -117.774404, + 33.980858 + ], + [ + -117.774704, + 33.980805 + ], + [ + -117.774575, + 33.980324 + ], + [ + -117.77406, + 33.97963 + ], + [ + -117.774401, + 33.978573 + ], + [ + -117.773888, + 33.978403 + ], + [ + -117.773245, + 33.978314 + ], + [ + -117.773159, + 33.977904 + ], + [ + -117.773309, + 33.977495 + ], + [ + -117.774232, + 33.977548 + ], + [ + -117.77479, + 33.977602 + ], + [ + -117.776013, + 33.977424 + ], + [ + -117.775455, + 33.976552 + ], + [ + -117.776206, + 33.976321 + ], + [ + -117.776227, + 33.975876 + ], + [ + -117.776142, + 33.97536 + ], + [ + -117.775627, + 33.975128 + ], + [ + -117.776077, + 33.974363 + ], + [ + -117.776442, + 33.973936 + ], + [ + -117.77612, + 33.973331 + ], + [ + -117.776034, + 33.972904 + ], + [ + -117.776249, + 33.972459 + ], + [ + -117.775541, + 33.971872 + ], + [ + -117.77361, + 33.971819 + ], + [ + -117.772601, + 33.971765 + ], + [ + -117.770024, + 33.972666 + ], + [ + -117.76949, + 33.971356 + ], + [ + -117.769125, + 33.970182 + ], + [ + -117.769511, + 33.968954 + ], + [ + -117.769189, + 33.967281 + ], + [ + -117.769168, + 33.966089 + ], + [ + -117.76891, + 33.964488 + ], + [ + -117.76906, + 33.963366 + ], + [ + -117.76979, + 33.96253 + ], + [ + -117.771228, + 33.961925 + ], + [ + -117.772708, + 33.962245 + ], + [ + -117.77391, + 33.962299 + ], + [ + -117.774489, + 33.962993 + ], + [ + -117.774811, + 33.96358 + ], + [ + -117.774489, + 33.964078 + ], + [ + -117.77376, + 33.964328 + ], + [ + -117.773588, + 33.965395 + ], + [ + -117.773159, + 33.965431 + ], + [ + -117.772813, + 33.966117 + ], + [ + -117.77303, + 33.967316 + ], + [ + -117.773996, + 33.967067 + ], + [ + -117.775584, + 33.966054 + ], + [ + -117.775841, + 33.965075 + ], + [ + -117.777043, + 33.965235 + ], + [ + -117.778051, + 33.96495 + ], + [ + -117.777727, + 33.966526 + ], + [ + -117.777663, + 33.966971 + ], + [ + -117.778459, + 33.967922 + ], + [ + -117.779789, + 33.967708 + ], + [ + -117.780004, + 33.967085 + ], + [ + -117.780819, + 33.966818 + ], + [ + -117.781332, + 33.967808 + ], + [ + -117.781568, + 33.968217 + ], + [ + -117.783802, + 33.968331 + ], + [ + -117.786334, + 33.968224 + ], + [ + -117.787042, + 33.967138 + ], + [ + -117.787021, + 33.96616 + ], + [ + -117.785948, + 33.965466 + ], + [ + -117.784381, + 33.965805 + ], + [ + -117.783265, + 33.964666 + ], + [ + -117.783695, + 33.96358 + ], + [ + -117.784531, + 33.962672 + ], + [ + -117.783931, + 33.961711 + ], + [ + -117.782257, + 33.960893 + ], + [ + -117.780068, + 33.961213 + ], + [ + -117.778137, + 33.960839 + ], + [ + -117.776978, + 33.958134 + ], + [ + -117.776635, + 33.95639 + ], + [ + -117.777665, + 33.954521 + ], + [ + -117.775863, + 33.95356 + ], + [ + -117.774296, + 33.953364 + ], + [ + -117.776635, + 33.950392 + ], + [ + -117.777169, + 33.949636 + ], + [ + -117.77833, + 33.950231 + ], + [ + -117.779897, + 33.950712 + ], + [ + -117.781442, + 33.950854 + ], + [ + -117.783823, + 33.949893 + ], + [ + -117.783416, + 33.949217 + ], + [ + -117.782815, + 33.948416 + ], + [ + -117.782901, + 33.946921 + ], + [ + -117.782965, + 33.94628 + ], + [ + -117.78333, + 33.946653 + ], + [ + -117.783317, + 33.946623 + ], + [ + -117.790271, + 33.946741 + ], + [ + -117.800224, + 33.946878 + ], + [ + -117.817451, + 33.947068 + ], + [ + -117.826079, + 33.947088 + ], + [ + -117.843275, + 33.947126 + ], + [ + -117.851842, + 33.947129 + ], + [ + -117.855855, + 33.946913 + ], + [ + -117.863876, + 33.946469 + ], + [ + -117.86396, + 33.946464 + ], + [ + -117.867887, + 33.946258 + ], + [ + -117.866648, + 33.947429 + ], + [ + -117.865427, + 33.949128 + ], + [ + -117.864459, + 33.950419 + ], + [ + -117.864129, + 33.951094 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 221560406, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.9369, + 34.022618 + ], + [ + -117.936923, + 34.023223 + ], + [ + -117.936569, + 34.023303 + ], + [ + -117.936269, + 34.02337 + ], + [ + -117.936103, + 34.023365 + ], + [ + -117.935673, + 34.023418 + ], + [ + -117.935378, + 34.023463 + ], + [ + -117.934992, + 34.023414 + ], + [ + -117.934703, + 34.023378 + ], + [ + -117.933925, + 34.023467 + ], + [ + -117.933614, + 34.023449 + ], + [ + -117.933227, + 34.023516 + ], + [ + -117.932884, + 34.022854 + ], + [ + -117.932777, + 34.022529 + ], + [ + -117.932664, + 34.022418 + ], + [ + -117.932444, + 34.022369 + ], + [ + -117.932133, + 34.02248 + ], + [ + -117.931897, + 34.022832 + ], + [ + -117.931886, + 34.023121 + ], + [ + -117.932541, + 34.023849 + ], + [ + -117.932551, + 34.023925 + ], + [ + -117.932315, + 34.024348 + ], + [ + -117.932251, + 34.024774 + ], + [ + -117.932343, + 34.025188 + ], + [ + -117.932675, + 34.025783 + ], + [ + -117.933099, + 34.026201 + ], + [ + -117.934102, + 34.026521 + ], + [ + -117.934686, + 34.026837 + ], + [ + -117.935175, + 34.027286 + ], + [ + -117.935352, + 34.027544 + ], + [ + -117.935277, + 34.027646 + ], + [ + -117.935298, + 34.027824 + ], + [ + -117.935255, + 34.027878 + ], + [ + -117.935062, + 34.027877 + ], + [ + -117.933244, + 34.027837 + ], + [ + -117.932611, + 34.027766 + ], + [ + -117.931827, + 34.027584 + ], + [ + -117.930717, + 34.027264 + ], + [ + -117.929166, + 34.026842 + ], + [ + -117.927804, + 34.026481 + ], + [ + -117.925632, + 34.025881 + ], + [ + -117.925406, + 34.025846 + ], + [ + -117.925567, + 34.025397 + ], + [ + -117.925685, + 34.024886 + ], + [ + -117.925004, + 34.024827 + ], + [ + -117.924939, + 34.025348 + ], + [ + -117.924795, + 34.025663 + ], + [ + -117.923218, + 34.02521 + ], + [ + -117.922675, + 34.025095 + ], + [ + -117.921893, + 34.025019 + ], + [ + -117.920283, + 34.024827 + ], + [ + -117.917907, + 34.024578 + ], + [ + -117.917869, + 34.024565 + ], + [ + -117.917869, + 34.024494 + ], + [ + -117.919891, + 34.019479 + ], + [ + -117.921635, + 34.019563 + ], + [ + -117.921748, + 34.019039 + ], + [ + -117.922611, + 34.019034 + ], + [ + -117.922772, + 34.019012 + ], + [ + -117.923008, + 34.018821 + ], + [ + -117.9231, + 34.018421 + ], + [ + -117.923078, + 34.018194 + ], + [ + -117.922595, + 34.017878 + ], + [ + -117.921796, + 34.017576 + ], + [ + -117.92083, + 34.017314 + ], + [ + -117.922268, + 34.014722 + ], + [ + -117.929569, + 34.015482 + ], + [ + -117.929649, + 34.015255 + ], + [ + -117.930277, + 34.015379 + ], + [ + -117.930959, + 34.015895 + ], + [ + -117.932321, + 34.016291 + ], + [ + -117.935168, + 34.017273 + ], + [ + -117.938087, + 34.017869 + ], + [ + -117.9369, + 34.022618 + ] + ] + ] + }, + "properties": { + "name": "The Industry Hills Golf Club (Dwight D Eisenhower & Babe Zaharias)", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 223766741, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.151944, + 33.956137 + ], + [ + -118.150723, + 33.956762 + ], + [ + -118.149369, + 33.95752 + ], + [ + -118.147788, + 33.958372 + ], + [ + -118.146773, + 33.95793 + ], + [ + -118.145729, + 33.957285 + ], + [ + -118.144749, + 33.956693 + ], + [ + -118.142913, + 33.955779 + ], + [ + -118.144353, + 33.953884 + ], + [ + -118.144629, + 33.954024 + ], + [ + -118.14503, + 33.953862 + ], + [ + -118.145105, + 33.953804 + ], + [ + -118.145276, + 33.953824 + ], + [ + -118.145522, + 33.953966 + ], + [ + -118.145994, + 33.953468 + ], + [ + -118.145636, + 33.953209 + ], + [ + -118.145713, + 33.953072 + ], + [ + -118.14592, + 33.953097 + ], + [ + -118.145998, + 33.953032 + ], + [ + -118.146258, + 33.952708 + ], + [ + -118.146619, + 33.952869 + ], + [ + -118.147891, + 33.953543 + ], + [ + -118.148758, + 33.952407 + ], + [ + -118.151497, + 33.953839 + ], + [ + -118.152533, + 33.952741 + ], + [ + -118.154677, + 33.95399 + ], + [ + -118.154173, + 33.954823 + ], + [ + -118.153306, + 33.955319 + ], + [ + -118.152703, + 33.955746 + ], + [ + -118.15262, + 33.955602 + ], + [ + -118.151944, + 33.956137 + ] + ] + ] + }, + "properties": { + "name": "Rio Hondo Golf Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 223766742, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.155378, + 33.959279 + ], + [ + -118.152807, + 33.959008 + ], + [ + -118.1526, + 33.958987 + ], + [ + -118.152437, + 33.958993 + ], + [ + -118.152282, + 33.959018 + ], + [ + -118.15212, + 33.959066 + ], + [ + -118.148854, + 33.960218 + ], + [ + -118.148775, + 33.960065 + ], + [ + -118.148909, + 33.96002 + ], + [ + -118.148491, + 33.959207 + ], + [ + -118.148568, + 33.959182 + ], + [ + -118.148352, + 33.958756 + ], + [ + -118.152693, + 33.956453 + ], + [ + -118.152916, + 33.956706 + ], + [ + -118.155018, + 33.956937 + ], + [ + -118.155139, + 33.957061 + ], + [ + -118.155254, + 33.957198 + ], + [ + -118.155279, + 33.957372 + ], + [ + -118.155346, + 33.957507 + ], + [ + -118.155464, + 33.957585 + ], + [ + -118.155698, + 33.957612 + ], + [ + -118.155378, + 33.959279 + ] + ] + ] + }, + "properties": { + "name": "John Anson Ford Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 224014660, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.968661, + 33.917733 + ], + [ + -117.968548, + 33.917748 + ], + [ + -117.968481, + 33.917808 + ], + [ + -117.968475, + 33.917928 + ], + [ + -117.968227, + 33.917925 + ], + [ + -117.968357, + 33.917541 + ], + [ + -117.968396, + 33.917526 + ], + [ + -117.968486, + 33.917523 + ], + [ + -117.968617, + 33.917552 + ], + [ + -117.968665, + 33.917648 + ], + [ + -117.968661, + 33.917733 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 224018173, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.974619, + 33.908383 + ], + [ + -117.97394, + 33.908583 + ], + [ + -117.973544, + 33.90869 + ], + [ + -117.973366, + 33.908676 + ], + [ + -117.973128, + 33.908841 + ], + [ + -117.972948, + 33.908863 + ], + [ + -117.972385, + 33.908899 + ], + [ + -117.9721, + 33.909001 + ], + [ + -117.971822, + 33.909202 + ], + [ + -117.971572, + 33.909385 + ], + [ + -117.971207, + 33.909643 + ], + [ + -117.970904, + 33.909758 + ], + [ + -117.970636, + 33.909749 + ], + [ + -117.97028, + 33.909799 + ], + [ + -117.969982, + 33.909918 + ], + [ + -117.969276, + 33.910141 + ], + [ + -117.968898, + 33.910243 + ], + [ + -117.968563, + 33.910311 + ], + [ + -117.968204, + 33.910426 + ], + [ + -117.967686, + 33.910617 + ], + [ + -117.967428, + 33.910684 + ], + [ + -117.967254, + 33.91068 + ], + [ + -117.967085, + 33.910626 + ], + [ + -117.966315, + 33.910355 + ], + [ + -117.965977, + 33.910328 + ], + [ + -117.965811, + 33.910097 + ], + [ + -117.965795, + 33.909879 + ], + [ + -117.96572, + 33.909629 + ], + [ + -117.965441, + 33.908997 + ], + [ + -117.965119, + 33.908454 + ], + [ + -117.964979, + 33.90816 + ], + [ + -117.964695, + 33.908027 + ], + [ + -117.964422, + 33.908133 + ], + [ + -117.964215, + 33.908436 + ], + [ + -117.96418, + 33.908672 + ], + [ + -117.964124, + 33.909028 + ], + [ + -117.964175, + 33.909335 + ], + [ + -117.964266, + 33.90962 + ], + [ + -117.964282, + 33.909963 + ], + [ + -117.964427, + 33.910337 + ], + [ + -117.964953, + 33.911904 + ], + [ + -117.964969, + 33.912305 + ], + [ + -117.964907, + 33.912425 + ], + [ + -117.964502, + 33.912483 + ], + [ + -117.963877, + 33.91246 + ], + [ + -117.963179, + 33.912456 + ], + [ + -117.962726, + 33.91239 + ], + [ + -117.962533, + 33.912216 + ], + [ + -117.962319, + 33.912047 + ], + [ + -117.961836, + 33.911717 + ], + [ + -117.96153, + 33.911441 + ], + [ + -117.961257, + 33.911147 + ], + [ + -117.960607, + 33.910489 + ], + [ + -117.960291, + 33.910159 + ], + [ + -117.959998, + 33.910078 + ], + [ + -117.959797, + 33.910003 + ], + [ + -117.959626, + 33.909803 + ], + [ + -117.959188, + 33.909331 + ], + [ + -117.958872, + 33.909402 + ], + [ + -117.959331, + 33.912358 + ], + [ + -117.959331, + 33.913681 + ], + [ + -117.963338, + 33.913672 + ], + [ + -117.963336, + 33.915031 + ], + [ + -117.964151, + 33.915035 + ], + [ + -117.964207, + 33.915038 + ], + [ + -117.964533, + 33.914988 + ], + [ + -117.964695, + 33.914923 + ], + [ + -117.964829, + 33.914893 + ], + [ + -117.964906, + 33.914877 + ], + [ + -117.964958, + 33.914731 + ], + [ + -117.96499, + 33.91466 + ], + [ + -117.965052, + 33.914628 + ], + [ + -117.965175, + 33.914682 + ], + [ + -117.965849, + 33.913939 + ], + [ + -117.966181, + 33.913756 + ], + [ + -117.966519, + 33.9136 + ], + [ + -117.966943, + 33.913306 + ], + [ + -117.967281, + 33.913031 + ], + [ + -117.967528, + 33.912795 + ], + [ + -117.967603, + 33.912688 + ], + [ + -117.967748, + 33.912683 + ], + [ + -117.968498, + 33.912568 + ], + [ + -117.969217, + 33.912461 + ], + [ + -117.970827, + 33.912078 + ], + [ + -117.971014, + 33.912657 + ], + [ + -117.971226, + 33.91279 + ], + [ + -117.971333, + 33.912785 + ], + [ + -117.971448, + 33.912816 + ], + [ + -117.971545, + 33.912893 + ], + [ + -117.971805, + 33.913133 + ], + [ + -117.974101, + 33.911107 + ], + [ + -117.974614, + 33.910676 + ], + [ + -117.975574, + 33.910057 + ], + [ + -117.976422, + 33.909491 + ], + [ + -117.976561, + 33.909251 + ], + [ + -117.97655, + 33.906829 + ], + [ + -117.976116, + 33.906762 + ], + [ + -117.975569, + 33.906776 + ], + [ + -117.975351, + 33.906931 + ], + [ + -117.975274, + 33.907078 + ], + [ + -117.975263, + 33.907541 + ], + [ + -117.975247, + 33.907946 + ], + [ + -117.975142, + 33.908169 + ], + [ + -117.975032, + 33.908245 + ], + [ + -117.974855, + 33.90828 + ], + [ + -117.974694, + 33.908334 + ], + [ + -117.974619, + 33.908383 + ] + ] + ] + }, + "properties": { + "name": "Westridge Golf Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 226686149, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.999931, + 33.965804 + ], + [ + -117.999757, + 33.965898 + ], + [ + -117.998732, + 33.966209 + ], + [ + -117.998191, + 33.96632 + ], + [ + -117.997922, + 33.96628 + ], + [ + -117.997804, + 33.966262 + ], + [ + -117.997729, + 33.966227 + ], + [ + -117.997729, + 33.966129 + ], + [ + -117.997863, + 33.966169 + ], + [ + -117.998278, + 33.965879 + ], + [ + -117.998271, + 33.965657 + ], + [ + -117.998223, + 33.965626 + ], + [ + -117.997504, + 33.966102 + ], + [ + -117.997488, + 33.966311 + ], + [ + -117.997622, + 33.966298 + ], + [ + -117.997885, + 33.966343 + ], + [ + -117.99803, + 33.966374 + ], + [ + -117.997184, + 33.966613 + ], + [ + -117.996443, + 33.966951 + ], + [ + -117.995268, + 33.967622 + ], + [ + -117.992441, + 33.969371 + ], + [ + -117.991694, + 33.969911 + ], + [ + -117.991094, + 33.970444 + ], + [ + -117.990053, + 33.971601 + ], + [ + -117.989539, + 33.972062 + ], + [ + -117.989019, + 33.972445 + ], + [ + -117.988204, + 33.972885 + ], + [ + -117.987367, + 33.973264 + ], + [ + -117.986319, + 33.973781 + ], + [ + -117.98535, + 33.974327 + ], + [ + -117.984899, + 33.974616 + ], + [ + -117.984448, + 33.974959 + ], + [ + -117.984211, + 33.97516 + ], + [ + -117.983895, + 33.975129 + ], + [ + -117.983761, + 33.975067 + ], + [ + -117.98331, + 33.974929 + ], + [ + -117.982929, + 33.97472 + ], + [ + -117.98265, + 33.974697 + ], + [ + -117.980188, + 33.974742 + ], + [ + -117.979759, + 33.974858 + ], + [ + -117.979599, + 33.975034 + ], + [ + -117.978955, + 33.975083 + ], + [ + -117.978992, + 33.975258 + ], + [ + -117.979034, + 33.975516 + ], + [ + -117.979383, + 33.97565 + ], + [ + -117.979667, + 33.97573 + ], + [ + -117.980296, + 33.975928 + ], + [ + -117.980654, + 33.975979 + ], + [ + -117.980869, + 33.976045 + ], + [ + -117.981159, + 33.975965 + ], + [ + -117.981443, + 33.97593 + ], + [ + -117.981888, + 33.975983 + ], + [ + -117.982205, + 33.976117 + ], + [ + -117.982388, + 33.976427 + ], + [ + -117.982335, + 33.97668 + ], + [ + -117.982362, + 33.976911 + ], + [ + -117.982511, + 33.977033 + ], + [ + -117.981997, + 33.977703 + ], + [ + -117.981031, + 33.978882 + ], + [ + -117.980901, + 33.97879 + ], + [ + -117.980805, + 33.978852 + ], + [ + -117.980665, + 33.978603 + ], + [ + -117.980504, + 33.978496 + ], + [ + -117.980318, + 33.978633 + ], + [ + -117.980231, + 33.978679 + ], + [ + -117.980107, + 33.978661 + ], + [ + -117.980043, + 33.978612 + ], + [ + -117.97992, + 33.97863 + ], + [ + -117.979657, + 33.978999 + ], + [ + -117.979496, + 33.979386 + ], + [ + -117.979185, + 33.979849 + ], + [ + -117.978895, + 33.980115 + ], + [ + -117.978777, + 33.980187 + ], + [ + -117.978584, + 33.980178 + ], + [ + -117.978519, + 33.980044 + ], + [ + -117.978702, + 33.980004 + ], + [ + -117.978761, + 33.979866 + ], + [ + -117.978766, + 33.979737 + ], + [ + -117.978713, + 33.979662 + ], + [ + -117.978654, + 33.979648 + ], + [ + -117.978868, + 33.979426 + ], + [ + -117.978922, + 33.979333 + ], + [ + -117.978884, + 33.97919 + ], + [ + -117.978959, + 33.978999 + ], + [ + -117.97905, + 33.978719 + ], + [ + -117.978831, + 33.978443 + ], + [ + -117.978578, + 33.978376 + ], + [ + -117.978375, + 33.978243 + ], + [ + -117.97824, + 33.978114 + ], + [ + -117.978176, + 33.978083 + ], + [ + -117.978503, + 33.97766 + ], + [ + -117.978949, + 33.977794 + ], + [ + -117.979212, + 33.97786 + ], + [ + -117.979421, + 33.977829 + ], + [ + -117.979485, + 33.977945 + ], + [ + -117.979551, + 33.978104 + ], + [ + -117.979619, + 33.978198 + ], + [ + -117.97978, + 33.978256 + ], + [ + -117.979882, + 33.978185 + ], + [ + -117.979555, + 33.97774 + ], + [ + -117.979801, + 33.977651 + ], + [ + -117.980284, + 33.97831 + ], + [ + -117.980386, + 33.978283 + ], + [ + -117.980413, + 33.978172 + ], + [ + -117.980381, + 33.977936 + ], + [ + -117.980365, + 33.977825 + ], + [ + -117.980365, + 33.977722 + ], + [ + -117.980574, + 33.977549 + ], + [ + -117.980665, + 33.977625 + ], + [ + -117.980917, + 33.977616 + ], + [ + -117.981035, + 33.9775 + ], + [ + -117.981019, + 33.977353 + ], + [ + -117.980885, + 33.977291 + ], + [ + -117.980805, + 33.977113 + ], + [ + -117.980654, + 33.976926 + ], + [ + -117.980478, + 33.976882 + ], + [ + -117.980086, + 33.976739 + ], + [ + -117.979641, + 33.976633 + ], + [ + -117.97946, + 33.976645 + ], + [ + -117.979309, + 33.976694 + ], + [ + -117.979299, + 33.976805 + ], + [ + -117.979442, + 33.976975 + ], + [ + -117.97971, + 33.977131 + ], + [ + -117.980075, + 33.977242 + ], + [ + -117.97998, + 33.977365 + ], + [ + -117.979889, + 33.977428 + ], + [ + -117.979812, + 33.977447 + ], + [ + -117.979197, + 33.977147 + ], + [ + -117.978943, + 33.977616 + ], + [ + -117.978332, + 33.977429 + ], + [ + -117.978444, + 33.977233 + ], + [ + -117.978396, + 33.977091 + ], + [ + -117.978541, + 33.976917 + ], + [ + -117.97868, + 33.976735 + ], + [ + -117.978879, + 33.976312 + ], + [ + -117.978149, + 33.976295 + ], + [ + -117.97808, + 33.97633 + ], + [ + -117.97777, + 33.976244 + ], + [ + -117.977679, + 33.976333 + ], + [ + -117.977838, + 33.976815 + ], + [ + -117.977609, + 33.976889 + ], + [ + -117.977561, + 33.976956 + ], + [ + -117.977479, + 33.97706 + ], + [ + -117.977463, + 33.977144 + ], + [ + -117.97669, + 33.975703 + ], + [ + -117.976653, + 33.97641 + ], + [ + -117.976572, + 33.976357 + ], + [ + -117.975789, + 33.976157 + ], + [ + -117.97565, + 33.976268 + ], + [ + -117.975587, + 33.976404 + ], + [ + -117.975517, + 33.976596 + ], + [ + -117.975436, + 33.976787 + ], + [ + -117.975404, + 33.976845 + ], + [ + -117.975295, + 33.976828 + ], + [ + -117.975312, + 33.976731 + ], + [ + -117.975387, + 33.976548 + ], + [ + -117.975419, + 33.976326 + ], + [ + -117.975376, + 33.976232 + ], + [ + -117.975216, + 33.976235 + ], + [ + -117.975055, + 33.976302 + ], + [ + -117.974948, + 33.97644 + ], + [ + -117.974819, + 33.976596 + ], + [ + -117.974176, + 33.976547 + ], + [ + -117.974272, + 33.976138 + ], + [ + -117.972706, + 33.976195 + ], + [ + -117.971687, + 33.976186 + ], + [ + -117.971778, + 33.976373 + ], + [ + -117.971536, + 33.976413 + ], + [ + -117.971402, + 33.976484 + ], + [ + -117.971327, + 33.976529 + ], + [ + -117.971514, + 33.976637 + ], + [ + -117.971745, + 33.976747 + ], + [ + -117.971873, + 33.9769 + ], + [ + -117.97174, + 33.977027 + ], + [ + -117.971685, + 33.977193 + ], + [ + -117.971638, + 33.977334 + ], + [ + -117.971633, + 33.977463 + ], + [ + -117.971626, + 33.977638 + ], + [ + -117.971422, + 33.977593 + ], + [ + -117.971122, + 33.97746 + ], + [ + -117.971149, + 33.977282 + ], + [ + -117.971186, + 33.977069 + ], + [ + -117.971063, + 33.976886 + ], + [ + -117.970972, + 33.976762 + ], + [ + -117.971127, + 33.976641 + ], + [ + -117.970956, + 33.976557 + ], + [ + -117.97065, + 33.976641 + ], + [ + -117.970602, + 33.976673 + ], + [ + -117.970478, + 33.976602 + ], + [ + -117.97051, + 33.97645 + ], + [ + -117.970451, + 33.976357 + ], + [ + -117.970607, + 33.976241 + ], + [ + -117.970478, + 33.976197 + ], + [ + -117.970163, + 33.976275 + ], + [ + -117.970007, + 33.976271 + ], + [ + -117.969621, + 33.976645 + ], + [ + -117.969497, + 33.976161 + ], + [ + -117.96948, + 33.975925 + ], + [ + -117.969416, + 33.975716 + ], + [ + -117.969298, + 33.975561 + ], + [ + -117.96925, + 33.975454 + ], + [ + -117.968552, + 33.974969 + ], + [ + -117.96807, + 33.974582 + ], + [ + -117.967667, + 33.974288 + ], + [ + -117.967351, + 33.97387 + ], + [ + -117.967088, + 33.973514 + ], + [ + -117.966889, + 33.973132 + ], + [ + -117.966685, + 33.972758 + ], + [ + -117.966197, + 33.972148 + ], + [ + -117.965682, + 33.971494 + ], + [ + -117.965178, + 33.971067 + ], + [ + -117.964438, + 33.970636 + ], + [ + -117.963789, + 33.970204 + ], + [ + -117.962818, + 33.969524 + ], + [ + -117.962614, + 33.969328 + ], + [ + -117.962421, + 33.969119 + ], + [ + -117.962346, + 33.968994 + ], + [ + -117.962469, + 33.968994 + ], + [ + -117.962603, + 33.969194 + ], + [ + -117.962829, + 33.96931 + ], + [ + -117.963172, + 33.969479 + ], + [ + -117.963649, + 33.969608 + ], + [ + -117.964373, + 33.969635 + ], + [ + -117.964561, + 33.969653 + ], + [ + -117.96491, + 33.969782 + ], + [ + -117.965699, + 33.970106 + ], + [ + -117.966358, + 33.970467 + ], + [ + -117.966766, + 33.97048 + ], + [ + -117.967088, + 33.970654 + ], + [ + -117.9671, + 33.97075 + ], + [ + -117.967479, + 33.9708 + ], + [ + -117.96764, + 33.970903 + ], + [ + -117.967636, + 33.971142 + ], + [ + -117.967925, + 33.971486 + ], + [ + -117.968048, + 33.971699 + ], + [ + -117.968472, + 33.971592 + ], + [ + -117.968687, + 33.971601 + ], + [ + -117.968939, + 33.971699 + ], + [ + -117.968913, + 33.971885 + ], + [ + -117.968815, + 33.971953 + ], + [ + -117.968719, + 33.971988 + ], + [ + -117.968548, + 33.971933 + ], + [ + -117.968381, + 33.971877 + ], + [ + -117.968059, + 33.971895 + ], + [ + -117.967737, + 33.971984 + ], + [ + -117.967512, + 33.97218 + ], + [ + -117.967545, + 33.972361 + ], + [ + -117.967893, + 33.972322 + ], + [ + -117.968365, + 33.972166 + ], + [ + -117.96859, + 33.972091 + ], + [ + -117.968681, + 33.972308 + ], + [ + -117.968692, + 33.9725 + ], + [ + -117.968618, + 33.972712 + ], + [ + -117.968617, + 33.972816 + ], + [ + -117.968735, + 33.972909 + ], + [ + -117.968863, + 33.972945 + ], + [ + -117.968976, + 33.97294 + ], + [ + -117.969132, + 33.972749 + ], + [ + -117.969228, + 33.972504 + ], + [ + -117.969019, + 33.972402 + ], + [ + -117.968992, + 33.972282 + ], + [ + -117.969185, + 33.972077 + ], + [ + -117.969448, + 33.971877 + ], + [ + -117.969604, + 33.971695 + ], + [ + -117.96977, + 33.971405 + ], + [ + -117.970065, + 33.971477 + ], + [ + -117.970441, + 33.971552 + ], + [ + -117.970795, + 33.971712 + ], + [ + -117.970966, + 33.971815 + ], + [ + -117.971015, + 33.971953 + ], + [ + -117.971037, + 33.972103 + ], + [ + -117.971005, + 33.972214 + ], + [ + -117.970795, + 33.972126 + ], + [ + -117.970639, + 33.971975 + ], + [ + -117.970437, + 33.972036 + ], + [ + -117.97027, + 33.972134 + ], + [ + -117.970152, + 33.972285 + ], + [ + -117.970072, + 33.972454 + ], + [ + -117.970072, + 33.972654 + ], + [ + -117.970013, + 33.972828 + ], + [ + -117.97153, + 33.973149 + ], + [ + -117.971987, + 33.972476 + ], + [ + -117.971782, + 33.9723 + ], + [ + -117.971599, + 33.972019 + ], + [ + -117.972903, + 33.971913 + ], + [ + -117.972828, + 33.971063 + ], + [ + -117.973042, + 33.971001 + ], + [ + -117.973134, + 33.971116 + ], + [ + -117.9733, + 33.971161 + ], + [ + -117.973359, + 33.971139 + ], + [ + -117.973488, + 33.971063 + ], + [ + -117.973509, + 33.970978 + ], + [ + -117.973504, + 33.970894 + ], + [ + -117.973525, + 33.970814 + ], + [ + -117.974212, + 33.971219 + ], + [ + -117.974384, + 33.97165 + ], + [ + -117.974469, + 33.971641 + ], + [ + -117.974357, + 33.971236 + ], + [ + -117.974244, + 33.971107 + ], + [ + -117.973568, + 33.970747 + ], + [ + -117.974133, + 33.970456 + ], + [ + -117.974323, + 33.970356 + ], + [ + -117.974481, + 33.97019 + ], + [ + -117.974557, + 33.970083 + ], + [ + -117.974578, + 33.97002 + ], + [ + -117.975177, + 33.969519 + ], + [ + -117.975886, + 33.969177 + ], + [ + -117.975896, + 33.969043 + ], + [ + -117.975821, + 33.968927 + ], + [ + -117.97544, + 33.968892 + ], + [ + -117.975285, + 33.968945 + ], + [ + -117.975179, + 33.96898 + ], + [ + -117.975151, + 33.968919 + ], + [ + -117.975049, + 33.968919 + ], + [ + -117.974814, + 33.969028 + ], + [ + -117.97453, + 33.969157 + ], + [ + -117.974512, + 33.969096 + ], + [ + -117.974432, + 33.969007 + ], + [ + -117.974283, + 33.969064 + ], + [ + -117.974256, + 33.969171 + ], + [ + -117.974299, + 33.969318 + ], + [ + -117.974379, + 33.969544 + ], + [ + -117.97439, + 33.969892 + ], + [ + -117.974341, + 33.970115 + ], + [ + -117.974253, + 33.970256 + ], + [ + -117.973847, + 33.970502 + ], + [ + -117.973481, + 33.970687 + ], + [ + -117.973422, + 33.970656 + ], + [ + -117.973252, + 33.970578 + ], + [ + -117.972951, + 33.970422 + ], + [ + -117.972399, + 33.97032 + ], + [ + -117.971717, + 33.970364 + ], + [ + -117.971493, + 33.970488 + ], + [ + -117.971444, + 33.970516 + ], + [ + -117.971127, + 33.969955 + ], + [ + -117.971084, + 33.969831 + ], + [ + -117.970022, + 33.969737 + ], + [ + -117.968924, + 33.970167 + ], + [ + -117.968649, + 33.970422 + ], + [ + -117.968558, + 33.970952 + ], + [ + -117.967871, + 33.970769 + ], + [ + -117.966954, + 33.970053 + ], + [ + -117.96668, + 33.969822 + ], + [ + -117.966685, + 33.969759 + ], + [ + -117.966761, + 33.969688 + ], + [ + -117.9669, + 33.969764 + ], + [ + -117.967201, + 33.969893 + ], + [ + -117.967866, + 33.969261 + ], + [ + -117.968209, + 33.969048 + ], + [ + -117.968225, + 33.968776 + ], + [ + -117.968064, + 33.968483 + ], + [ + -117.967925, + 33.968229 + ], + [ + -117.967914, + 33.96794 + ], + [ + -117.967624, + 33.967869 + ], + [ + -117.967699, + 33.967615 + ], + [ + -117.968118, + 33.96741 + ], + [ + -117.968284, + 33.967148 + ], + [ + -117.968064, + 33.967023 + ], + [ + -117.967658, + 33.967075 + ], + [ + -117.967259, + 33.967201 + ], + [ + -117.96703, + 33.967338 + ], + [ + -117.96668, + 33.967303 + ], + [ + -117.966428, + 33.967299 + ], + [ + -117.966322, + 33.96748 + ], + [ + -117.966209, + 33.967578 + ], + [ + -117.965759, + 33.967631 + ], + [ + -117.965555, + 33.967738 + ], + [ + -117.965442, + 33.967809 + ], + [ + -117.965296, + 33.967815 + ], + [ + -117.965205, + 33.967748 + ], + [ + -117.965098, + 33.967539 + ], + [ + -117.965167, + 33.967433 + ], + [ + -117.965221, + 33.967326 + ], + [ + -117.96535, + 33.967112 + ], + [ + -117.965146, + 33.966636 + ], + [ + -117.965226, + 33.966334 + ], + [ + -117.965269, + 33.966178 + ], + [ + -117.965232, + 33.96612 + ], + [ + -117.965098, + 33.966182 + ], + [ + -117.964765, + 33.966489 + ], + [ + -117.964418, + 33.966795 + ], + [ + -117.964095, + 33.966965 + ], + [ + -117.963901, + 33.967157 + ], + [ + -117.963483, + 33.966948 + ], + [ + -117.963333, + 33.966738 + ], + [ + -117.963252, + 33.966267 + ], + [ + -117.962871, + 33.96584 + ], + [ + -117.963982, + 33.965306 + ], + [ + -117.964332, + 33.964935 + ], + [ + -117.964321, + 33.964535 + ], + [ + -117.963607, + 33.964309 + ], + [ + -117.963109, + 33.964597 + ], + [ + -117.962916, + 33.964855 + ], + [ + -117.96277, + 33.965261 + ], + [ + -117.962362, + 33.965075 + ], + [ + -117.962083, + 33.964843 + ], + [ + -117.962079, + 33.964686 + ], + [ + -117.962523, + 33.964559 + ], + [ + -117.96298, + 33.963948 + ], + [ + -117.963034, + 33.963449 + ], + [ + -117.962808, + 33.962969 + ], + [ + -117.962186, + 33.962693 + ], + [ + -117.962562, + 33.962212 + ], + [ + -117.963034, + 33.962141 + ], + [ + -117.963291, + 33.962186 + ], + [ + -117.963424, + 33.962725 + ], + [ + -117.963559, + 33.96304 + ], + [ + -117.964042, + 33.963289 + ], + [ + -117.964347, + 33.962948 + ], + [ + -117.964879, + 33.963218 + ], + [ + -117.965437, + 33.963867 + ], + [ + -117.965538, + 33.964202 + ], + [ + -117.964637, + 33.964995 + ], + [ + -117.964304, + 33.965413 + ], + [ + -117.964579, + 33.965425 + ], + [ + -117.965169, + 33.964944 + ], + [ + -117.965544, + 33.964686 + ], + [ + -117.96593, + 33.964766 + ], + [ + -117.965913, + 33.964968 + ], + [ + -117.96572, + 33.965252 + ], + [ + -117.965656, + 33.96543 + ], + [ + -117.965716, + 33.96554 + ], + [ + -117.966027, + 33.9657 + ], + [ + -117.966847, + 33.965386 + ], + [ + -117.967336, + 33.965211 + ], + [ + -117.968194, + 33.96498 + ], + [ + -117.968442, + 33.964757 + ], + [ + -117.96852, + 33.964603 + ], + [ + -117.968827, + 33.964588 + ], + [ + -117.969085, + 33.965309 + ], + [ + -117.969686, + 33.964935 + ], + [ + -117.969744, + 33.965252 + ], + [ + -117.969808, + 33.965439 + ], + [ + -117.968874, + 33.966018 + ], + [ + -117.968306, + 33.966124 + ], + [ + -117.968199, + 33.966151 + ], + [ + -117.968284, + 33.966347 + ], + [ + -117.968649, + 33.966534 + ], + [ + -117.969432, + 33.966267 + ], + [ + -117.969922, + 33.965967 + ], + [ + -117.970505, + 33.966045 + ], + [ + -117.970774, + 33.966133 + ], + [ + -117.970984, + 33.966261 + ], + [ + -117.970881, + 33.966854 + ], + [ + -117.970602, + 33.967166 + ], + [ + -117.970334, + 33.967246 + ], + [ + -117.969926, + 33.967441 + ], + [ + -117.969557, + 33.967649 + ], + [ + -117.969368, + 33.967788 + ], + [ + -117.969497, + 33.967957 + ], + [ + -117.969636, + 33.968091 + ], + [ + -117.970473, + 33.967495 + ], + [ + -117.971181, + 33.966934 + ], + [ + -117.97167, + 33.966715 + ], + [ + -117.972067, + 33.966857 + ], + [ + -117.972207, + 33.967275 + ], + [ + -117.972464, + 33.967578 + ], + [ + -117.972743, + 33.967765 + ], + [ + -117.972608, + 33.967984 + ], + [ + -117.972576, + 33.968109 + ], + [ + -117.972909, + 33.968171 + ], + [ + -117.973387, + 33.968228 + ], + [ + -117.973934, + 33.967996 + ], + [ + -117.974411, + 33.96786 + ], + [ + -117.974807, + 33.967726 + ], + [ + -117.975157, + 33.967747 + ], + [ + -117.974421, + 33.968091 + ], + [ + -117.974471, + 33.968272 + ], + [ + -117.975087, + 33.968242 + ], + [ + -117.975837, + 33.968002 + ], + [ + -117.975833, + 33.967809 + ], + [ + -117.976016, + 33.967694 + ], + [ + -117.976413, + 33.967738 + ], + [ + -117.976638, + 33.967694 + ], + [ + -117.976659, + 33.966581 + ], + [ + -117.976674, + 33.966231 + ], + [ + -117.976589, + 33.965217 + ], + [ + -117.976492, + 33.963624 + ], + [ + -117.976209, + 33.962978 + ], + [ + -117.975833, + 33.962106 + ], + [ + -117.975376, + 33.962227 + ], + [ + -117.974722, + 33.962369 + ], + [ + -117.97411, + 33.962147 + ], + [ + -117.973634, + 33.962034 + ], + [ + -117.97323, + 33.961693 + ], + [ + -117.972507, + 33.961216 + ], + [ + -117.971836, + 33.960625 + ], + [ + -117.971449, + 33.960376 + ], + [ + -117.971353, + 33.960483 + ], + [ + -117.971117, + 33.960038 + ], + [ + -117.97122, + 33.959685 + ], + [ + -117.971059, + 33.959196 + ], + [ + -117.970763, + 33.959237 + ], + [ + -117.970677, + 33.95865 + ], + [ + -117.971009, + 33.958854 + ], + [ + -117.971745, + 33.959552 + ], + [ + -117.97264, + 33.960198 + ], + [ + -117.973333, + 33.960646 + ], + [ + -117.973692, + 33.96099 + ], + [ + -117.974192, + 33.960878 + ], + [ + -117.974664, + 33.960815 + ], + [ + -117.975022, + 33.961168 + ], + [ + -117.974979, + 33.961515 + ], + [ + -117.975205, + 33.961853 + ], + [ + -117.975687, + 33.961996 + ], + [ + -117.976284, + 33.961892 + ], + [ + -117.977003, + 33.961723 + ], + [ + -117.976584, + 33.960522 + ], + [ + -117.977539, + 33.960112 + ], + [ + -117.980318, + 33.958315 + ], + [ + -117.98094, + 33.957985 + ], + [ + -117.981273, + 33.958226 + ], + [ + -117.982607, + 33.957439 + ], + [ + -117.985071, + 33.956499 + ], + [ + -117.985579, + 33.956389 + ], + [ + -117.986019, + 33.956656 + ], + [ + -117.986069, + 33.957309 + ], + [ + -117.985725, + 33.957736 + ], + [ + -117.985654, + 33.958018 + ], + [ + -117.98462, + 33.958306 + ], + [ + -117.984045, + 33.958588 + ], + [ + -117.983509, + 33.95913 + ], + [ + -117.9833, + 33.959427 + ], + [ + -117.983251, + 33.95978 + ], + [ + -117.983047, + 33.960234 + ], + [ + -117.98294, + 33.960501 + ], + [ + -117.982736, + 33.960714 + ], + [ + -117.982414, + 33.961328 + ], + [ + -117.982689, + 33.962159 + ], + [ + -117.982936, + 33.962666 + ], + [ + -117.983472, + 33.963316 + ], + [ + -117.983612, + 33.96377 + ], + [ + -117.983676, + 33.964312 + ], + [ + -117.983691, + 33.964799 + ], + [ + -117.983616, + 33.964968 + ], + [ + -117.982796, + 33.96498 + ], + [ + -117.982693, + 33.965564 + ], + [ + -117.982328, + 33.965706 + ], + [ + -117.982039, + 33.965653 + ], + [ + -117.981878, + 33.965493 + ], + [ + -117.981814, + 33.965075 + ], + [ + -117.981706, + 33.964852 + ], + [ + -117.980569, + 33.964834 + ], + [ + -117.980408, + 33.965626 + ], + [ + -117.980172, + 33.965955 + ], + [ + -117.979915, + 33.96608 + ], + [ + -117.979234, + 33.965959 + ], + [ + -117.979078, + 33.965929 + ], + [ + -117.978874, + 33.965866 + ], + [ + -117.979013, + 33.965688 + ], + [ + -117.979106, + 33.965567 + ], + [ + -117.97926, + 33.965439 + ], + [ + -117.979406, + 33.965247 + ], + [ + -117.979438, + 33.964926 + ], + [ + -117.979292, + 33.964808 + ], + [ + -117.978809, + 33.964772 + ], + [ + -117.977393, + 33.964888 + ], + [ + -117.977597, + 33.965849 + ], + [ + -117.977447, + 33.965884 + ], + [ + -117.977436, + 33.966053 + ], + [ + -117.977372, + 33.966205 + ], + [ + -117.977157, + 33.966409 + ], + [ + -117.977543, + 33.966552 + ], + [ + -117.978365, + 33.966813 + ], + [ + -117.979496, + 33.966988 + ], + [ + -117.980112, + 33.967178 + ], + [ + -117.980215, + 33.96721 + ], + [ + -117.980897, + 33.967462 + ], + [ + -117.981642, + 33.967584 + ], + [ + -117.981492, + 33.967957 + ], + [ + -117.981889, + 33.968064 + ], + [ + -117.982157, + 33.967788 + ], + [ + -117.982625, + 33.967872 + ], + [ + -117.983311, + 33.967498 + ], + [ + -117.983408, + 33.967631 + ], + [ + -117.983064, + 33.967925 + ], + [ + -117.983236, + 33.968058 + ], + [ + -117.984341, + 33.968183 + ], + [ + -117.985697, + 33.968251 + ], + [ + -117.986942, + 33.968278 + ], + [ + -117.987725, + 33.968136 + ], + [ + -117.988461, + 33.967676 + ], + [ + -117.988133, + 33.967344 + ], + [ + -117.988311, + 33.96724 + ], + [ + -117.988701, + 33.967655 + ], + [ + -117.989158, + 33.967427 + ], + [ + -117.989613, + 33.96705 + ], + [ + -117.989624, + 33.96543 + ], + [ + -117.989641, + 33.965247 + ], + [ + -117.989474, + 33.965217 + ], + [ + -117.989763, + 33.96487 + ], + [ + -117.990103, + 33.964544 + ], + [ + -117.990639, + 33.964277 + ], + [ + -117.991007, + 33.964541 + ], + [ + -117.991651, + 33.964603 + ], + [ + -117.992248, + 33.96482 + ], + [ + -117.993486, + 33.964585 + ], + [ + -117.994062, + 33.964419 + ], + [ + -117.995597, + 33.963681 + ], + [ + -117.99708, + 33.962797 + ], + [ + -117.997724, + 33.962156 + ], + [ + -117.997831, + 33.961738 + ], + [ + -117.997892, + 33.961456 + ], + [ + -117.998346, + 33.961497 + ], + [ + -117.998207, + 33.961933 + ], + [ + -117.997949, + 33.962458 + ], + [ + -117.997613, + 33.962844 + ], + [ + -117.997123, + 33.963277 + ], + [ + -117.996587, + 33.96382 + ], + [ + -117.996348, + 33.963984 + ], + [ + -117.996112, + 33.964264 + ], + [ + -117.996343, + 33.964518 + ], + [ + -117.9969, + 33.964625 + ], + [ + -117.997273, + 33.964656 + ], + [ + -117.998374, + 33.964837 + ], + [ + -117.998836, + 33.964989 + ], + [ + -117.999419, + 33.965377 + ], + [ + -117.999827, + 33.965715 + ], + [ + -117.999931, + 33.965804 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 226757060, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.02578, + 33.988594 + ], + [ + -118.025833, + 33.988162 + ], + [ + -118.026548, + 33.987605 + ], + [ + -118.027045, + 33.987495 + ], + [ + -118.028161, + 33.98713 + ], + [ + -118.028214, + 33.986654 + ], + [ + -118.028, + 33.986579 + ], + [ + -118.027668, + 33.986712 + ], + [ + -118.026756, + 33.987112 + ], + [ + -118.024771, + 33.987433 + ], + [ + -118.024631, + 33.986854 + ], + [ + -118.024256, + 33.98689 + ], + [ + -118.024031, + 33.987201 + ], + [ + -118.023569, + 33.987388 + ], + [ + -118.022861, + 33.987397 + ], + [ + -118.021627, + 33.987557 + ], + [ + -118.021294, + 33.988095 + ], + [ + -118.021327, + 33.988634 + ], + [ + -118.021016, + 33.989096 + ], + [ + -118.020222, + 33.989585 + ], + [ + -118.01946, + 33.989683 + ], + [ + -118.019664, + 33.986116 + ], + [ + -118.020726, + 33.986152 + ], + [ + -118.020748, + 33.986051 + ], + [ + -118.021295, + 33.984737 + ], + [ + -118.021595, + 33.984052 + ], + [ + -118.021465, + 33.983674 + ], + [ + -118.021337, + 33.983718 + ], + [ + -118.020823, + 33.983616 + ], + [ + -118.021004, + 33.982953 + ], + [ + -118.020866, + 33.982709 + ], + [ + -118.019975, + 33.982682 + ], + [ + -118.019449, + 33.982575 + ], + [ + -118.019535, + 33.982139 + ], + [ + -118.019491, + 33.981743 + ], + [ + -118.019728, + 33.981383 + ], + [ + -118.020189, + 33.9812 + ], + [ + -118.020951, + 33.981561 + ], + [ + -118.021186, + 33.981387 + ], + [ + -118.022153, + 33.980885 + ], + [ + -118.022452, + 33.980667 + ], + [ + -118.022774, + 33.980524 + ], + [ + -118.023021, + 33.980631 + ], + [ + -118.023408, + 33.980707 + ], + [ + -118.023741, + 33.980503 + ], + [ + -118.023934, + 33.980262 + ], + [ + -118.024286, + 33.979932 + ], + [ + -118.024162, + 33.97986 + ], + [ + -118.023758, + 33.979991 + ], + [ + -118.023669, + 33.979847 + ], + [ + -118.023476, + 33.979867 + ], + [ + -118.023452, + 33.9798 + ], + [ + -118.02358, + 33.979722 + ], + [ + -118.023545, + 33.979673 + ], + [ + -118.023444, + 33.979658 + ], + [ + -118.023185, + 33.979616 + ], + [ + -118.023077, + 33.979563 + ], + [ + -118.023019, + 33.979448 + ], + [ + -118.023043, + 33.979275 + ], + [ + -118.022979, + 33.979217 + ], + [ + -118.022928, + 33.979162 + ], + [ + -118.02287, + 33.979089 + ], + [ + -118.02283, + 33.979011 + ], + [ + -118.022807, + 33.978916 + ], + [ + -118.022803, + 33.978831 + ], + [ + -118.02281, + 33.978754 + ], + [ + -118.02282, + 33.978694 + ], + [ + -118.022825, + 33.978664 + ], + [ + -118.023234, + 33.978685 + ], + [ + -118.023318, + 33.978478 + ], + [ + -118.023752, + 33.978593 + ], + [ + -118.023933, + 33.978209 + ], + [ + -118.024433, + 33.977407 + ], + [ + -118.024503, + 33.9773 + ], + [ + -118.023644, + 33.977896 + ], + [ + -118.022969, + 33.97826 + ], + [ + -118.022098, + 33.978514 + ], + [ + -118.022164, + 33.978937 + ], + [ + -118.021724, + 33.979301 + ], + [ + -118.02137, + 33.978705 + ], + [ + -118.021263, + 33.978403 + ], + [ + -118.021821, + 33.977931 + ], + [ + -118.023476, + 33.975631 + ], + [ + -118.023171, + 33.975359 + ], + [ + -118.021952, + 33.975349 + ], + [ + -118.02057, + 33.975345 + ], + [ + -118.01936, + 33.975293 + ], + [ + -118.019317, + 33.975538 + ], + [ + -118.01926, + 33.975691 + ], + [ + -118.019158, + 33.975793 + ], + [ + -118.018975, + 33.975886 + ], + [ + -118.018799, + 33.975898 + ], + [ + -118.01872, + 33.975787 + ], + [ + -118.018452, + 33.975792 + ], + [ + -118.01821, + 33.975774 + ], + [ + -118.018262, + 33.975654 + ], + [ + -118.018343, + 33.975389 + ], + [ + -118.018194, + 33.975334 + ], + [ + -118.017889, + 33.975298 + ], + [ + -118.01762, + 33.975342 + ], + [ + -118.017363, + 33.975187 + ], + [ + -118.01718, + 33.975076 + ], + [ + -118.017159, + 33.975 + ], + [ + -118.01717, + 33.97484 + ], + [ + -118.017186, + 33.974702 + ], + [ + -118.017228, + 33.974537 + ], + [ + -118.017175, + 33.974284 + ], + [ + -118.017148, + 33.974128 + ], + [ + -118.017111, + 33.973839 + ], + [ + -118.01746, + 33.973714 + ], + [ + -118.017739, + 33.973834 + ], + [ + -118.017722, + 33.973903 + ], + [ + -118.018004, + 33.974015 + ], + [ + -118.018244, + 33.974107 + ], + [ + -118.01862, + 33.974124 + ], + [ + -118.018853, + 33.974087 + ], + [ + -118.019763, + 33.974159 + ], + [ + -118.019777, + 33.973999 + ], + [ + -118.018672, + 33.973923 + ], + [ + -118.018499, + 33.973929 + ], + [ + -118.018494, + 33.973886 + ], + [ + -118.018153, + 33.973827 + ], + [ + -118.018151, + 33.973776 + ], + [ + -118.017685, + 33.973621 + ], + [ + -118.017299, + 33.973439 + ], + [ + -118.017132, + 33.973439 + ], + [ + -118.016971, + 33.973447 + ], + [ + -118.016664, + 33.973522 + ], + [ + -118.016666, + 33.97448 + ], + [ + -118.016616, + 33.975306 + ], + [ + -118.016643, + 33.975413 + ], + [ + -118.016285, + 33.975409 + ], + [ + -118.016129, + 33.975552 + ], + [ + -118.016015, + 33.975671 + ], + [ + -118.015663, + 33.975578 + ], + [ + -118.015652, + 33.975498 + ], + [ + -118.015682, + 33.975404 + ], + [ + -118.015602, + 33.975288 + ], + [ + -118.015609, + 33.975182 + ], + [ + -118.015582, + 33.975053 + ], + [ + -118.015689, + 33.974688 + ], + [ + -118.015802, + 33.974115 + ], + [ + -118.015824, + 33.973478 + ], + [ + -118.015738, + 33.973171 + ], + [ + -118.015604, + 33.972553 + ], + [ + -118.015582, + 33.972175 + ], + [ + -118.015667, + 33.971901 + ], + [ + -118.015688, + 33.97174 + ], + [ + -118.015531, + 33.97164 + ], + [ + -118.015055, + 33.971673 + ], + [ + -118.014461, + 33.971672 + ], + [ + -118.01342, + 33.971641 + ], + [ + -118.013479, + 33.971139 + ], + [ + -118.013474, + 33.971081 + ], + [ + -118.011316, + 33.969897 + ], + [ + -118.009664, + 33.968983 + ], + [ + -118.009336, + 33.969403 + ], + [ + -118.009349, + 33.96948 + ], + [ + -118.00953, + 33.969599 + ], + [ + -118.009553, + 33.969667 + ], + [ + -118.009074, + 33.970148 + ], + [ + -118.008195, + 33.969572 + ], + [ + -118.008646, + 33.969114 + ], + [ + -118.008979, + 33.969314 + ], + [ + -118.009054, + 33.969208 + ], + [ + -118.00924, + 33.969274 + ], + [ + -118.009553, + 33.968905 + ], + [ + -118.009156, + 33.9687 + ], + [ + -118.009547, + 33.968215 + ], + [ + -118.008292, + 33.967562 + ], + [ + -118.008608, + 33.966787 + ], + [ + -118.009016, + 33.966529 + ], + [ + -118.009451, + 33.966387 + ], + [ + -118.009724, + 33.966049 + ], + [ + -118.010078, + 33.965568 + ], + [ + -118.009422, + 33.965216 + ], + [ + -118.009, + 33.964888 + ], + [ + -118.00775, + 33.9658 + ], + [ + -118.005803, + 33.964768 + ], + [ + -118.004929, + 33.964759 + ], + [ + -118.001885, + 33.964589 + ], + [ + -118.001499, + 33.965109 + ], + [ + -118.001034, + 33.965573 + ], + [ + -118.00034, + 33.965901 + ], + [ + -117.999403, + 33.966329 + ], + [ + -117.998786, + 33.96648 + ], + [ + -117.99766, + 33.966774 + ], + [ + -117.996919, + 33.967045 + ], + [ + -117.996158, + 33.967433 + ], + [ + -117.995024, + 33.968148 + ], + [ + -117.992746, + 33.969537 + ], + [ + -117.991966, + 33.970048 + ], + [ + -117.991698, + 33.970288 + ], + [ + -117.990915, + 33.971102 + ], + [ + -117.990128, + 33.971948 + ], + [ + -117.98957, + 33.972415 + ], + [ + -117.98908, + 33.972739 + ], + [ + -117.988474, + 33.973082 + ], + [ + -117.987623, + 33.973483 + ], + [ + -117.985985, + 33.974283 + ], + [ + -117.985407, + 33.97464 + ], + [ + -117.984619, + 33.975191 + ], + [ + -117.986323, + 33.975377 + ], + [ + -117.986958, + 33.975627 + ], + [ + -117.988825, + 33.976028 + ], + [ + -117.98952, + 33.976156 + ], + [ + -117.989499, + 33.977037 + ], + [ + -117.989828, + 33.977469 + ], + [ + -117.989672, + 33.977958 + ], + [ + -117.989644, + 33.978727 + ], + [ + -117.990455, + 33.978763 + ], + [ + -117.993717, + 33.978777 + ], + [ + -117.993583, + 33.979315 + ], + [ + -117.993486, + 33.979599 + ], + [ + -117.993674, + 33.979577 + ], + [ + -117.993753, + 33.980093 + ], + [ + -117.993361, + 33.980573 + ], + [ + -117.993055, + 33.980773 + ], + [ + -117.988817, + 33.979025 + ], + [ + -117.988508, + 33.979088 + ], + [ + -117.9878, + 33.979551 + ], + [ + -117.988276, + 33.979732 + ], + [ + -117.988578, + 33.979666 + ], + [ + -117.988857, + 33.979666 + ], + [ + -117.989316, + 33.979821 + ], + [ + -117.989553, + 33.980128 + ], + [ + -117.98979, + 33.980333 + ], + [ + -117.990241, + 33.980547 + ], + [ + -117.992456, + 33.981477 + ], + [ + -117.99317, + 33.981708 + ], + [ + -117.993416, + 33.981686 + ], + [ + -117.993608, + 33.98201 + ], + [ + -117.993599, + 33.983772 + ], + [ + -117.99349, + 33.988224 + ], + [ + -117.993406, + 33.989608 + ], + [ + -117.993003, + 33.989719 + ], + [ + -117.992612, + 33.989746 + ], + [ + -117.992397, + 33.990208 + ], + [ + -117.991914, + 33.990342 + ], + [ + -117.991484, + 33.990648 + ], + [ + -117.991625, + 33.991293 + ], + [ + -117.991576, + 33.991658 + ], + [ + -117.991301, + 33.991862 + ], + [ + -117.990541, + 33.991925 + ], + [ + -117.990192, + 33.99213 + ], + [ + -117.989713, + 33.992552 + ], + [ + -117.989565, + 33.992761 + ], + [ + -117.989887, + 33.992841 + ], + [ + -117.990128, + 33.993055 + ], + [ + -117.990035, + 33.993463 + ], + [ + -117.990025, + 33.993882 + ], + [ + -117.990266, + 33.994864 + ], + [ + -117.990266, + 33.995154 + ], + [ + -117.990845, + 33.995176 + ], + [ + -117.991265, + 33.995305 + ], + [ + -117.991553, + 33.995523 + ], + [ + -117.991834, + 33.995612 + ], + [ + -117.992059, + 33.995683 + ], + [ + -117.992456, + 33.995612 + ], + [ + -117.992665, + 33.995488 + ], + [ + -117.992639, + 33.995399 + ], + [ + -117.992546, + 33.99538 + ], + [ + -117.992322, + 33.995412 + ], + [ + -117.992113, + 33.995443 + ], + [ + -117.991956, + 33.995336 + ], + [ + -117.991882, + 33.995092 + ], + [ + -117.991757, + 33.994985 + ], + [ + -117.991646, + 33.994909 + ], + [ + -117.991646, + 33.99478 + ], + [ + -117.991598, + 33.994709 + ], + [ + -117.991517, + 33.994678 + ], + [ + -117.991366, + 33.99466 + ], + [ + -117.991169, + 33.994674 + ], + [ + -117.991013, + 33.994625 + ], + [ + -117.990933, + 33.994487 + ], + [ + -117.990917, + 33.994322 + ], + [ + -117.991399, + 33.992966 + ], + [ + -117.991146, + 33.992823 + ], + [ + -117.99134, + 33.992463 + ], + [ + -117.991569, + 33.992516 + ], + [ + -117.991737, + 33.992694 + ], + [ + -117.99224, + 33.992676 + ], + [ + -117.992562, + 33.992716 + ], + [ + -117.992819, + 33.992988 + ], + [ + -117.993218, + 33.993046 + ], + [ + -117.993357, + 33.993197 + ], + [ + -117.993554, + 33.993166 + ], + [ + -117.993688, + 33.992712 + ], + [ + -117.993658, + 33.992432 + ], + [ + -117.993377, + 33.9922 + ], + [ + -117.993173, + 33.991982 + ], + [ + -117.993132, + 33.991885 + ], + [ + -117.992939, + 33.991783 + ], + [ + -117.992724, + 33.991725 + ], + [ + -117.992655, + 33.991667 + ], + [ + -117.992606, + 33.991538 + ], + [ + -117.992617, + 33.991369 + ], + [ + -117.992771, + 33.991338 + ], + [ + -117.993159, + 33.991431 + ], + [ + -117.993379, + 33.991587 + ], + [ + -117.993544, + 33.991391 + ], + [ + -117.995364, + 33.992299 + ], + [ + -117.994462, + 33.992325 + ], + [ + -117.994536, + 33.992485 + ], + [ + -117.994643, + 33.992672 + ], + [ + -117.994514, + 33.992961 + ], + [ + -117.99435, + 33.993117 + ], + [ + -117.994291, + 33.993193 + ], + [ + -117.994574, + 33.993183 + ], + [ + -117.994865, + 33.993041 + ], + [ + -117.995078, + 33.992747 + ], + [ + -117.995131, + 33.992645 + ], + [ + -117.995368, + 33.992676 + ], + [ + -117.995718, + 33.992841 + ], + [ + -117.996335, + 33.99325 + ], + [ + -117.996689, + 33.993375 + ], + [ + -117.997368, + 33.993726 + ], + [ + -117.997923, + 33.993993 + ], + [ + -117.998484, + 33.994033 + ], + [ + -117.998738, + 33.993771 + ], + [ + -117.999101, + 33.993904 + ], + [ + -117.999398, + 33.994291 + ], + [ + -117.99931, + 33.994464 + ], + [ + -117.998893, + 33.994398 + ], + [ + -117.998572, + 33.994353 + ], + [ + -117.998196, + 33.994429 + ], + [ + -117.997745, + 33.994509 + ], + [ + -117.997545, + 33.994437 + ], + [ + -117.997354, + 33.994327 + ], + [ + -117.997134, + 33.99414 + ], + [ + -117.996875, + 33.994006 + ], + [ + -117.996553, + 33.993971 + ], + [ + -117.996061, + 33.993731 + ], + [ + -117.995782, + 33.993597 + ], + [ + -117.995507, + 33.993419 + ], + [ + -117.995315, + 33.993357 + ], + [ + -117.995015, + 33.993388 + ], + [ + -117.994869, + 33.993504 + ], + [ + -117.994933, + 33.993619 + ], + [ + -117.995181, + 33.993722 + ], + [ + -117.995262, + 33.993904 + ], + [ + -117.99503, + 33.994188 + ], + [ + -117.994629, + 33.994322 + ], + [ + -117.994649, + 33.994464 + ], + [ + -117.994547, + 33.994607 + ], + [ + -117.9942, + 33.994692 + ], + [ + -117.993813, + 33.994745 + ], + [ + -117.993502, + 33.994745 + ], + [ + -117.993368, + 33.994745 + ], + [ + -117.993218, + 33.994803 + ], + [ + -117.993395, + 33.994936 + ], + [ + -117.993951, + 33.994953 + ], + [ + -117.994462, + 33.994985 + ], + [ + -117.995171, + 33.994856 + ], + [ + -117.995814, + 33.994313 + ], + [ + -117.996719, + 33.994776 + ], + [ + -117.997309, + 33.994998 + ], + [ + -117.997749, + 33.995149 + ], + [ + -117.99884, + 33.994976 + ], + [ + -117.99952, + 33.994864 + ], + [ + -117.999789, + 33.994861 + ], + [ + -117.999697, + 33.995105 + ], + [ + -118.000159, + 33.995243 + ], + [ + -118.000324, + 33.995296 + ], + [ + -118.000421, + 33.995443 + ], + [ + -118.000464, + 33.995567 + ], + [ + -118.000841, + 33.995639 + ], + [ + -118.001048, + 33.995589 + ], + [ + -118.001157, + 33.995301 + ], + [ + -118.001193, + 33.995136 + ], + [ + -118.001388, + 33.995132 + ], + [ + -118.001619, + 33.995456 + ], + [ + -118.001848, + 33.995959 + ], + [ + -118.001816, + 33.996314 + ], + [ + -118.001585, + 33.996532 + ], + [ + -118.001506, + 33.996333 + ], + [ + -118.001173, + 33.996408 + ], + [ + -118.000911, + 33.996475 + ], + [ + -118.000748, + 33.996421 + ], + [ + -118.000691, + 33.996315 + ], + [ + -118.000732, + 33.996172 + ], + [ + -118.000324, + 33.995932 + ], + [ + -117.999852, + 33.996301 + ], + [ + -117.999151, + 33.996302 + ], + [ + -117.998795, + 33.995887 + ], + [ + -117.997842, + 33.995919 + ], + [ + -117.997134, + 33.995959 + ], + [ + -117.996678, + 33.995914 + ], + [ + -117.996569, + 33.99655 + ], + [ + -117.996206, + 33.996875 + ], + [ + -117.995981, + 33.996284 + ], + [ + -117.995954, + 33.995955 + ], + [ + -117.996195, + 33.995634 + ], + [ + -117.996301, + 33.995398 + ], + [ + -117.996093, + 33.995434 + ], + [ + -117.996018, + 33.995674 + ], + [ + -117.995863, + 33.995723 + ], + [ + -117.995443, + 33.995581 + ], + [ + -117.995128, + 33.995479 + ], + [ + -117.994666, + 33.995572 + ], + [ + -117.994257, + 33.995741 + ], + [ + -117.993994, + 33.99591 + ], + [ + -117.994101, + 33.99603 + ], + [ + -117.993819, + 33.996266 + ], + [ + -117.993497, + 33.996435 + ], + [ + -117.993459, + 33.996586 + ], + [ + -117.993154, + 33.996706 + ], + [ + -117.992832, + 33.996875 + ], + [ + -117.992676, + 33.996764 + ], + [ + -117.992751, + 33.996381 + ], + [ + -117.99229, + 33.996337 + ], + [ + -117.99202, + 33.996692 + ], + [ + -117.992015, + 33.997128 + ], + [ + -117.992183, + 33.997155 + ], + [ + -117.992615, + 33.997133 + ], + [ + -117.993121, + 33.99712 + ], + [ + -117.993744, + 33.99688 + ], + [ + -117.994114, + 33.996711 + ], + [ + -117.994168, + 33.996542 + ], + [ + -117.994194, + 33.996364 + ], + [ + -117.99459, + 33.996265 + ], + [ + -117.994692, + 33.996492 + ], + [ + -117.994718, + 33.996812 + ], + [ + -117.99487, + 33.996871 + ], + [ + -117.995396, + 33.996817 + ], + [ + -117.995616, + 33.996568 + ], + [ + -117.995895, + 33.996835 + ], + [ + -117.9959, + 33.997169 + ], + [ + -117.995652, + 33.997404 + ], + [ + -117.995496, + 33.997649 + ], + [ + -117.995496, + 33.997746 + ], + [ + -117.995707, + 33.997889 + ], + [ + -117.995718, + 33.997676 + ], + [ + -117.995909, + 33.997493 + ], + [ + -117.996109, + 33.997618 + ], + [ + -117.99641, + 33.997622 + ], + [ + -117.996785, + 33.997569 + ], + [ + -117.996919, + 33.997422 + ], + [ + -117.996796, + 33.99712 + ], + [ + -117.996871, + 33.996937 + ], + [ + -117.996982, + 33.996875 + ], + [ + -117.997649, + 33.99712 + ], + [ + -117.998007, + 33.996915 + ], + [ + -117.998523, + 33.997035 + ], + [ + -117.998527, + 33.997186 + ], + [ + -117.998566, + 33.997391 + ], + [ + -117.998946, + 33.997484 + ], + [ + -117.99923, + 33.997457 + ], + [ + -117.999514, + 33.99732 + ], + [ + -117.999602, + 33.997244 + ], + [ + -117.999478, + 33.997102 + ], + [ + -117.999494, + 33.996995 + ], + [ + -117.999559, + 33.996809 + ], + [ + -117.999827, + 33.996862 + ], + [ + -118.000181, + 33.996915 + ], + [ + -118.000351, + 33.996795 + ], + [ + -118.000658, + 33.996671 + ], + [ + -118.00142, + 33.996897 + ], + [ + -118.00137, + 33.997204 + ], + [ + -118.001629, + 33.99732 + ], + [ + -118.002373, + 33.997649 + ], + [ + -118.002649, + 33.997622 + ], + [ + -118.003055, + 33.997791 + ], + [ + -118.003271, + 33.998058 + ], + [ + -118.0034, + 33.998374 + ], + [ + -118.003126, + 33.998694 + ], + [ + -118.003029, + 33.99913 + ], + [ + -118.002879, + 33.99925 + ], + [ + -118.002541, + 33.999143 + ], + [ + -118.00237, + 33.998903 + ], + [ + -118.002573, + 33.998703 + ], + [ + -118.002928, + 33.998374 + ], + [ + -118.002809, + 33.998076 + ], + [ + -118.0026, + 33.99812 + ], + [ + -118.00237, + 33.998272 + ], + [ + -118.001966, + 33.998458 + ], + [ + -118.001751, + 33.998409 + ], + [ + -118.001402, + 33.99824 + ], + [ + -118.001114, + 33.998209 + ], + [ + -118.000927, + 33.998241 + ], + [ + -118.001206, + 33.998378 + ], + [ + -118.001569, + 33.998498 + ], + [ + -118.001767, + 33.998565 + ], + [ + -118.001753, + 33.998721 + ], + [ + -118.001833, + 33.998841 + ], + [ + -118.001973, + 33.998952 + ], + [ + -118.001967, + 33.999143 + ], + [ + -118.001796, + 33.999388 + ], + [ + -118.001671, + 33.999561 + ], + [ + -118.001747, + 33.999708 + ], + [ + -118.001993, + 33.999721 + ], + [ + -118.002139, + 33.999642 + ], + [ + -118.002402, + 33.999713 + ], + [ + -118.002461, + 33.999895 + ], + [ + -118.002347, + 34.000006 + ], + [ + -118.002402, + 34.000099 + ], + [ + -118.002531, + 34.000211 + ], + [ + -118.003121, + 34.000073 + ], + [ + -118.003244, + 34.000051 + ], + [ + -118.00348, + 33.999735 + ], + [ + -118.003587, + 33.999579 + ], + [ + -118.003866, + 33.999597 + ], + [ + -118.004113, + 33.999966 + ], + [ + -118.003784, + 34.000201 + ], + [ + -118.00348, + 34.000286 + ], + [ + -118.003511, + 34.000499 + ], + [ + -118.00304, + 34.000655 + ], + [ + -118.002965, + 34.000313 + ], + [ + -118.002455, + 34.000344 + ], + [ + -118.002171, + 34.000411 + ], + [ + -118.002101, + 34.000535 + ], + [ + -118.002386, + 34.000856 + ], + [ + -118.002568, + 34.001025 + ], + [ + -118.002534, + 34.001153 + ], + [ + -118.002429, + 34.001283 + ], + [ + -118.002327, + 34.0013 + ], + [ + -118.002209, + 34.00114 + ], + [ + -118.002101, + 34.000847 + ], + [ + -118.001908, + 34.000531 + ], + [ + -118.001694, + 34.00046 + ], + [ + -118.001388, + 34.000406 + ], + [ + -118.000986, + 34.000242 + ], + [ + -118.00071, + 34.000321 + ], + [ + -118.000626, + 34.000402 + ], + [ + -118.000941, + 34.000909 + ], + [ + -118.000927, + 34.001122 + ], + [ + -118.000823, + 34.001215 + ], + [ + -118.000592, + 34.001162 + ], + [ + -118.00053, + 34.000749 + ], + [ + -118.000324, + 34.000611 + ], + [ + -118.000201, + 34.000557 + ], + [ + -117.999843, + 34.000651 + ], + [ + -117.999548, + 34.000682 + ], + [ + -117.999017, + 34.000833 + ], + [ + -117.998388, + 34.000891 + ], + [ + -117.997756, + 34.000869 + ], + [ + -117.997647, + 34.001162 + ], + [ + -117.997821, + 34.001291 + ], + [ + -117.997821, + 34.001469 + ], + [ + -117.99761, + 34.001527 + ], + [ + -117.99737, + 34.001496 + ], + [ + -117.99708, + 34.001847 + ], + [ + -117.9967, + 34.002505 + ], + [ + -117.996801, + 34.002657 + ], + [ + -117.996848, + 34.002941 + ], + [ + -117.996891, + 34.003386 + ], + [ + -117.996828, + 34.003679 + ], + [ + -117.996623, + 34.003821 + ], + [ + -117.996458, + 34.003693 + ], + [ + -117.996415, + 34.003537 + ], + [ + -117.996462, + 34.003301 + ], + [ + -117.996249, + 34.003186 + ], + [ + -117.996013, + 34.003226 + ], + [ + -117.995637, + 34.003351 + ], + [ + -117.995223, + 34.003292 + ], + [ + -117.994999, + 34.003137 + ], + [ + -117.994945, + 34.002915 + ], + [ + -117.994892, + 34.002648 + ], + [ + -117.994961, + 34.002332 + ], + [ + -117.99501, + 34.00207 + ], + [ + -117.995201, + 34.001976 + ], + [ + -117.995121, + 34.001865 + ], + [ + -117.994849, + 34.001776 + ], + [ + -117.994623, + 34.001905 + ], + [ + -117.994124, + 34.002314 + ], + [ + -117.993517, + 34.002456 + ], + [ + -117.993626, + 34.002906 + ], + [ + -117.993121, + 34.002892 + ], + [ + -117.992916, + 34.002999 + ], + [ + -117.992628, + 34.002932 + ], + [ + -117.992842, + 34.003088 + ], + [ + -117.993114, + 34.003168 + ], + [ + -117.993399, + 34.003074 + ], + [ + -117.993635, + 34.003105 + ], + [ + -117.993776, + 34.00327 + ], + [ + -117.993443, + 34.003324 + ], + [ + -117.993052, + 34.00327 + ], + [ + -117.992621, + 34.003346 + ], + [ + -117.99303, + 34.003448 + ], + [ + -117.993476, + 34.003408 + ], + [ + -117.993813, + 34.003395 + ], + [ + -117.994259, + 34.003635 + ], + [ + -117.994595, + 34.003861 + ], + [ + -117.99496, + 34.003995 + ], + [ + -117.995251, + 34.004102 + ], + [ + -117.995292, + 34.00403 + ], + [ + -117.994945, + 34.003906 + ], + [ + -117.995069, + 34.003746 + ], + [ + -117.995616, + 34.003804 + ], + [ + -117.996, + 34.003924 + ], + [ + -117.996328, + 34.004079 + ], + [ + -117.996517, + 34.004195 + ], + [ + -117.99643, + 34.004359 + ], + [ + -117.996126, + 34.00444 + ], + [ + -117.99578, + 34.004551 + ], + [ + -117.995502, + 34.004622 + ], + [ + -117.995126, + 34.004475 + ], + [ + -117.994634, + 34.00444 + ], + [ + -117.994269, + 34.004347 + ], + [ + -117.994289, + 34.004515 + ], + [ + -117.994799, + 34.004671 + ], + [ + -117.99509, + 34.00504 + ], + [ + -117.99538, + 34.005223 + ], + [ + -117.99531, + 34.005365 + ], + [ + -117.995187, + 34.005512 + ], + [ + -117.994992, + 34.005756 + ], + [ + -117.994874, + 34.006125 + ], + [ + -117.994708, + 34.006739 + ], + [ + -117.994082, + 34.006873 + ], + [ + -117.994468, + 34.007291 + ], + [ + -117.994284, + 34.007712 + ], + [ + -117.994291, + 34.007909 + ], + [ + -117.993903, + 34.009193 + ], + [ + -117.993994, + 34.009207 + ], + [ + -117.994436, + 34.00774 + ], + [ + -117.9948, + 34.007233 + ], + [ + -117.995171, + 34.006806 + ], + [ + -117.995856, + 34.006338 + ], + [ + -117.996876, + 34.006076 + ], + [ + -117.99717, + 34.005952 + ], + [ + -117.997309, + 34.006196 + ], + [ + -117.997708, + 34.00621 + ], + [ + -117.998613, + 34.006356 + ], + [ + -117.998792, + 34.006561 + ], + [ + -117.998829, + 34.006788 + ], + [ + -117.998726, + 34.006859 + ], + [ + -117.998545, + 34.00689 + ], + [ + -117.998409, + 34.006788 + ], + [ + -117.998411, + 34.006646 + ], + [ + -117.998523, + 34.006477 + ], + [ + -117.9984, + 34.006441 + ], + [ + -117.998201, + 34.00673 + ], + [ + -117.998216, + 34.006983 + ], + [ + -117.998683, + 34.007219 + ], + [ + -117.998999, + 34.007348 + ], + [ + -117.999332, + 34.007432 + ], + [ + -117.99965, + 34.007522 + ], + [ + -118.000308, + 34.00793 + ], + [ + -118.000356, + 34.008339 + ], + [ + -118.000587, + 34.008882 + ], + [ + -118.000497, + 34.00906 + ], + [ + -118.000133, + 34.008963 + ], + [ + -117.999825, + 34.00906 + ], + [ + -117.99953, + 34.009371 + ], + [ + -117.999224, + 34.009807 + ], + [ + -117.998356, + 34.011186 + ], + [ + -117.997991, + 34.011612 + ], + [ + -117.996928, + 34.013329 + ], + [ + -117.996017, + 34.014845 + ], + [ + -117.996147, + 34.015001 + ], + [ + -117.996238, + 34.015415 + ], + [ + -117.995954, + 34.015726 + ], + [ + -117.995557, + 34.015815 + ], + [ + -117.995013, + 34.016606 + ], + [ + -117.992937, + 34.020074 + ], + [ + -117.991548, + 34.022644 + ], + [ + -117.993148, + 34.024125 + ], + [ + -117.994452, + 34.025125 + ], + [ + -117.99607, + 34.026081 + ], + [ + -117.997647, + 34.026845 + ], + [ + -117.999328, + 34.027566 + ], + [ + -118.000598, + 34.027975 + ], + [ + -118.002531, + 34.028486 + ], + [ + -118.004709, + 34.028762 + ], + [ + -118.009752, + 34.028602 + ], + [ + -118.010996, + 34.028602 + ], + [ + -118.009752, + 34.02837 + ], + [ + -118.008657, + 34.027161 + ], + [ + -118.007327, + 34.027019 + ], + [ + -118.006469, + 34.026823 + ], + [ + -118.004967, + 34.026716 + ], + [ + -118.0034, + 34.025774 + ], + [ + -118.002477, + 34.024707 + ], + [ + -118.001791, + 34.023355 + ], + [ + -118.001362, + 34.022519 + ], + [ + -118.002306, + 34.022502 + ], + [ + -118.002156, + 34.021381 + ], + [ + -118.001169, + 34.020456 + ], + [ + -118.000203, + 34.020101 + ], + [ + -117.999774, + 34.019941 + ], + [ + -117.999452, + 34.019852 + ], + [ + -117.999774, + 34.01914 + ], + [ + -117.999602, + 34.017806 + ], + [ + -117.999731, + 34.017326 + ], + [ + -117.999838, + 34.016063 + ], + [ + -118.00089, + 34.015459 + ], + [ + -118.001469, + 34.015565 + ], + [ + -118.002156, + 34.014676 + ], + [ + -118.003722, + 34.012684 + ], + [ + -118.006383, + 34.011599 + ], + [ + -118.008572, + 34.011208 + ], + [ + -118.009451, + 34.010941 + ], + [ + -118.009666, + 34.010567 + ], + [ + -118.009923, + 34.010247 + ], + [ + -118.01091, + 34.010301 + ], + [ + -118.010245, + 34.006779 + ], + [ + -118.011275, + 34.006583 + ], + [ + -118.013163, + 34.009322 + ], + [ + -118.012927, + 34.012808 + ], + [ + -118.012884, + 34.013733 + ], + [ + -118.011726, + 34.01464 + ], + [ + -118.011962, + 34.017202 + ], + [ + -118.012434, + 34.017629 + ], + [ + -118.014043, + 34.017753 + ], + [ + -118.014944, + 34.017771 + ], + [ + -118.016467, + 34.017166 + ], + [ + -118.018956, + 34.017006 + ], + [ + -118.019781, + 34.017251 + ], + [ + -118.019879, + 34.017931 + ], + [ + -118.021273, + 34.018358 + ], + [ + -118.02166, + 34.01898 + ], + [ + -118.022475, + 34.019478 + ], + [ + -118.02299, + 34.020385 + ], + [ + -118.023655, + 34.021008 + ], + [ + -118.023644, + 34.021373 + ], + [ + -118.023666, + 34.021684 + ], + [ + -118.024073, + 34.022239 + ], + [ + -118.024953, + 34.022404 + ], + [ + -118.02652, + 34.021675 + ], + [ + -118.026938, + 34.021773 + ], + [ + -118.027153, + 34.021817 + ], + [ + -118.027475, + 34.0218 + ], + [ + -118.027903, + 34.021617 + ], + [ + -118.028966, + 34.021577 + ], + [ + -118.029182, + 34.021599 + ], + [ + -118.029352, + 34.021737 + ], + [ + -118.029366, + 34.022159 + ], + [ + -118.029202, + 34.02252 + ], + [ + -118.028589, + 34.022871 + ], + [ + -118.028193, + 34.023276 + ], + [ + -118.027624, + 34.023493 + ], + [ + -118.027314, + 34.023605 + ], + [ + -118.027206, + 34.023827 + ], + [ + -118.027367, + 34.023854 + ], + [ + -118.028644, + 34.023658 + ], + [ + -118.030017, + 34.023373 + ], + [ + -118.031069, + 34.02252 + ], + [ + -118.031852, + 34.022244 + ], + [ + -118.031938, + 34.02244 + ], + [ + -118.032667, + 34.022235 + ], + [ + -118.032839, + 34.022742 + ], + [ + -118.03198, + 34.022897 + ], + [ + -118.031776, + 34.022711 + ], + [ + -118.031519, + 34.023 + ], + [ + -118.031487, + 34.023445 + ], + [ + -118.031358, + 34.023809 + ], + [ + -118.031164, + 34.024018 + ], + [ + -118.030972, + 34.024281 + ], + [ + -118.030735, + 34.024783 + ], + [ + -118.031155, + 34.024876 + ], + [ + -118.031519, + 34.024583 + ], + [ + -118.032742, + 34.023943 + ], + [ + -118.033451, + 34.023489 + ], + [ + -118.034522, + 34.023111 + ], + [ + -118.035146, + 34.022724 + ], + [ + -118.035532, + 34.022831 + ], + [ + -118.035907, + 34.022324 + ], + [ + -118.035735, + 34.022275 + ], + [ + -118.035735, + 34.022159 + ], + [ + -118.03595, + 34.022191 + ], + [ + -118.035964, + 34.022141 + ], + [ + -118.035971, + 34.022115 + ], + [ + -118.03532, + 34.021939 + ], + [ + -118.032957, + 34.021302 + ], + [ + -118.032741, + 34.021101 + ], + [ + -118.032774, + 34.020843 + ], + [ + -118.032934, + 34.020354 + ], + [ + -118.03301, + 34.020034 + ], + [ + -118.032839, + 34.020119 + ], + [ + -118.032324, + 34.020973 + ], + [ + -118.032044, + 34.020639 + ], + [ + -118.031487, + 34.020501 + ], + [ + -118.030962, + 34.020359 + ], + [ + -118.030382, + 34.02027 + ], + [ + -118.029803, + 34.020217 + ], + [ + -118.029363, + 34.019994 + ], + [ + -118.029116, + 34.01947 + ], + [ + -118.029395, + 34.018865 + ], + [ + -118.02991, + 34.018554 + ], + [ + -118.030951, + 34.018714 + ], + [ + -118.031487, + 34.018598 + ], + [ + -118.031691, + 34.018429 + ], + [ + -118.031863, + 34.018314 + ], + [ + -118.031981, + 34.01778 + ], + [ + -118.032287, + 34.017449 + ], + [ + -118.032474, + 34.017247 + ], + [ + -118.03316, + 34.017002 + ], + [ + -118.033365, + 34.017113 + ], + [ + -118.035735, + 34.016264 + ], + [ + -118.036304, + 34.016135 + ], + [ + -118.039148, + 34.016704 + ], + [ + -118.039469, + 34.016935 + ], + [ + -118.039549, + 34.016941 + ], + [ + -118.039234, + 34.016616 + ], + [ + -118.036316, + 34.015984 + ], + [ + -118.032891, + 34.016953 + ], + [ + -118.030662, + 34.017701 + ], + [ + -118.029264, + 34.018003 + ], + [ + -118.026724, + 34.01851 + ], + [ + -118.023731, + 34.018501 + ], + [ + -118.01491, + 34.014356 + ], + [ + -118.01636, + 34.012392 + ], + [ + -118.012197, + 34.006753 + ], + [ + -118.01415, + 34.003115 + ], + [ + -118.02269, + 34.00123 + ], + [ + -118.034835, + 34.010008 + ], + [ + -118.035305, + 34.010572 + ], + [ + -118.035477, + 34.01051 + ], + [ + -118.03492, + 34.009803 + ], + [ + -118.034684, + 34.009394 + ], + [ + -118.035307, + 34.009421 + ], + [ + -118.035434, + 34.008998 + ], + [ + -118.035661, + 34.008656 + ], + [ + -118.035811, + 34.008629 + ], + [ + -118.036272, + 34.009465 + ], + [ + -118.037152, + 34.009332 + ], + [ + -118.037817, + 34.00902 + ], + [ + -118.038118, + 34.008807 + ], + [ + -118.038149, + 34.00858 + ], + [ + -118.037935, + 34.008407 + ], + [ + -118.037442, + 34.007784 + ], + [ + -118.03728, + 34.007486 + ], + [ + -118.037849, + 34.007348 + ], + [ + -118.037989, + 34.007215 + ], + [ + -118.037603, + 34.006877 + ], + [ + -118.037088, + 34.006459 + ], + [ + -118.036454, + 34.006081 + ], + [ + -118.036389, + 34.005796 + ], + [ + -118.036723, + 34.005143 + ], + [ + -118.037226, + 34.004746 + ], + [ + -118.037291, + 34.004333 + ], + [ + -118.037333, + 34.003786 + ], + [ + -118.037902, + 34.003501 + ], + [ + -118.038321, + 34.003346 + ], + [ + -118.03845, + 34.003088 + ], + [ + -118.038386, + 34.002599 + ], + [ + -118.038482, + 34.002368 + ], + [ + -118.038793, + 34.002474 + ], + [ + -118.038804, + 34.00307 + ], + [ + -118.038708, + 34.00331 + ], + [ + -118.038869, + 34.003346 + ], + [ + -118.039115, + 34.003319 + ], + [ + -118.039222, + 34.002994 + ], + [ + -118.039405, + 34.002368 + ], + [ + -118.039437, + 34.002163 + ], + [ + -118.039705, + 34.002394 + ], + [ + -118.040221, + 34.003132 + ], + [ + -118.040639, + 34.002955 + ], + [ + -118.040981, + 34.002719 + ], + [ + -118.041347, + 34.002341 + ], + [ + -118.041551, + 34.002136 + ], + [ + -118.041797, + 34.002398 + ], + [ + -118.041991, + 34.002821 + ], + [ + -118.042108, + 34.002994 + ], + [ + -118.042526, + 34.003466 + ], + [ + -118.042753, + 34.003648 + ], + [ + -118.043396, + 34.003533 + ], + [ + -118.043567, + 34.00359 + ], + [ + -118.04404, + 34.003115 + ], + [ + -118.044405, + 34.002786 + ], + [ + -118.044576, + 34.003622 + ], + [ + -118.044684, + 34.003951 + ], + [ + -118.045016, + 34.004138 + ], + [ + -118.045638, + 34.004449 + ], + [ + -118.045885, + 34.004743 + ], + [ + -118.046667, + 34.004387 + ], + [ + -118.0492, + 34.003658 + ], + [ + -118.05169, + 34.004058 + ], + [ + -118.055037, + 34.004868 + ], + [ + -118.055938, + 34.004858 + ], + [ + -118.056003, + 34.004324 + ], + [ + -118.054853, + 34.004159 + ], + [ + -118.054339, + 34.003893 + ], + [ + -118.054522, + 34.003604 + ], + [ + -118.054994, + 34.003595 + ], + [ + -118.055348, + 34.003444 + ], + [ + -118.055411, + 34.003154 + ], + [ + -118.055175, + 34.003314 + ], + [ + -118.054575, + 34.00343 + ], + [ + -118.053835, + 34.003284 + ], + [ + -118.053201, + 34.002825 + ], + [ + -118.052881, + 34.002056 + ], + [ + -118.052676, + 34.001464 + ], + [ + -118.051475, + 34.001247 + ], + [ + -118.050359, + 34.001033 + ], + [ + -118.049576, + 34.000695 + ], + [ + -118.049092, + 34.000771 + ], + [ + -118.049082, + 34.000953 + ], + [ + -118.049694, + 34.001202 + ], + [ + -118.05007, + 34.001585 + ], + [ + -118.050306, + 34.001923 + ], + [ + -118.049919, + 34.002243 + ], + [ + -118.048128, + 34.002083 + ], + [ + -118.047087, + 34.001594 + ], + [ + -118.04656, + 34.001624 + ], + [ + -118.046131, + 34.001438 + ], + [ + -118.045971, + 34.001274 + ], + [ + -118.045916, + 34.000993 + ], + [ + -118.045809, + 34.000646 + ], + [ + -118.045896, + 34.000153 + ], + [ + -118.045638, + 33.999637 + ], + [ + -118.045907, + 33.998819 + ], + [ + -118.045938, + 33.998494 + ], + [ + -118.046624, + 33.998734 + ], + [ + -118.047194, + 33.999059 + ], + [ + -118.047408, + 33.999134 + ], + [ + -118.04758, + 33.998943 + ], + [ + -118.047334, + 33.998525 + ], + [ + -118.047086, + 33.998129 + ], + [ + -118.046925, + 33.99772 + ], + [ + -118.046486, + 33.99752 + ], + [ + -118.046207, + 33.997351 + ], + [ + -118.046078, + 33.997049 + ], + [ + -118.046356, + 33.99667 + ], + [ + -118.046647, + 33.996515 + ], + [ + -118.047022, + 33.996444 + ], + [ + -118.047654, + 33.996208 + ], + [ + -118.047236, + 33.996021 + ], + [ + -118.046926, + 33.995919 + ], + [ + -118.046732, + 33.996252 + ], + [ + -118.046356, + 33.996448 + ], + [ + -118.045939, + 33.996604 + ], + [ + -118.045488, + 33.996809 + ], + [ + -118.045638, + 33.997529 + ], + [ + -118.044909, + 33.997538 + ], + [ + -118.044587, + 33.997858 + ], + [ + -118.0439, + 33.997689 + ], + [ + -118.043825, + 33.997066 + ], + [ + -118.045048, + 33.996853 + ], + [ + -118.044995, + 33.996755 + ], + [ + -118.04419, + 33.996844 + ], + [ + -118.043492, + 33.996546 + ], + [ + -118.042956, + 33.996337 + ], + [ + -118.042226, + 33.996359 + ], + [ + -118.039586, + 33.996403 + ], + [ + -118.037516, + 33.996261 + ], + [ + -118.036991, + 33.995972 + ], + [ + -118.036883, + 33.99458 + ], + [ + -118.037205, + 33.993281 + ], + [ + -118.037441, + 33.992703 + ], + [ + -118.037796, + 33.992299 + ], + [ + -118.037623, + 33.992116 + ], + [ + -118.037377, + 33.992165 + ], + [ + -118.037131, + 33.992299 + ], + [ + -118.036572, + 33.992116 + ], + [ + -118.036004, + 33.991889 + ], + [ + -118.036154, + 33.991436 + ], + [ + -118.037226, + 33.99095 + ], + [ + -118.037249, + 33.990644 + ], + [ + -118.036766, + 33.990884 + ], + [ + -118.036411, + 33.990879 + ], + [ + -118.036046, + 33.990612 + ], + [ + -118.036078, + 33.990248 + ], + [ + -118.036594, + 33.990128 + ], + [ + -118.037023, + 33.990253 + ], + [ + -118.037194, + 33.990301 + ], + [ + -118.037226, + 33.990008 + ], + [ + -118.033676, + 33.98995 + ], + [ + -118.032902, + 33.990043 + ], + [ + -118.031981, + 33.989932 + ], + [ + -118.030864, + 33.989856 + ], + [ + -118.030381, + 33.990381 + ], + [ + -118.030532, + 33.990706 + ], + [ + -118.030446, + 33.99124 + ], + [ + -118.029835, + 33.99156 + ], + [ + -118.029244, + 33.99168 + ], + [ + -118.028997, + 33.991564 + ], + [ + -118.028515, + 33.991124 + ], + [ + -118.028613, + 33.990214 + ], + [ + -118.028011, + 33.989571 + ], + [ + -118.027704, + 33.989189 + ], + [ + -118.026841, + 33.988905 + ], + [ + -118.026787, + 33.988691 + ], + [ + -118.02623, + 33.988545 + ], + [ + -118.02578, + 33.988594 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 227074876, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.026161, + 34.145683 + ], + [ + -118.025393, + 34.145722 + ], + [ + -118.025421, + 34.148305 + ], + [ + -118.026664, + 34.148289 + ], + [ + -118.026382, + 34.146995 + ], + [ + -118.026345, + 34.146193 + ], + [ + -118.026712, + 34.146195 + ], + [ + -118.026726, + 34.145962 + ], + [ + -118.026161, + 34.145683 + ] + ] + ] + }, + "properties": { + "name": "Eisenhower Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 227186484, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.02303, + 33.964035 + ], + [ + -118.02188, + 33.965439 + ], + [ + -118.021864, + 33.965449 + ], + [ + -118.021845, + 33.965454 + ], + [ + -118.021824, + 33.965456 + ], + [ + -118.021801, + 33.965451 + ], + [ + -118.019922, + 33.964447 + ], + [ + -118.021097, + 33.962957 + ], + [ + -118.02303, + 33.964035 + ] + ] + ] + }, + "properties": { + "name": "Michigan Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 227723741, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.054201, + 34.022574 + ], + [ + -118.053718, + 34.023116 + ], + [ + -118.053063, + 34.024052 + ], + [ + -118.052044, + 34.025288 + ], + [ + -118.051207, + 34.026611 + ], + [ + -118.050081, + 34.027802 + ], + [ + -118.049684, + 34.028656 + ], + [ + -118.048192, + 34.029591 + ], + [ + -118.046143, + 34.030479 + ], + [ + -118.04404, + 34.031467 + ], + [ + -118.042838, + 34.031867 + ], + [ + -118.041251, + 34.032381 + ], + [ + -118.039663, + 34.03305 + ], + [ + -118.038998, + 34.033297 + ], + [ + -118.03845, + 34.033192 + ], + [ + -118.037378, + 34.033893 + ], + [ + -118.035736, + 34.034862 + ], + [ + -118.034384, + 34.035077 + ], + [ + -118.033827, + 34.034684 + ], + [ + -118.035071, + 34.034188 + ], + [ + -118.038289, + 34.032828 + ], + [ + -118.042474, + 34.029838 + ], + [ + -118.046594, + 34.028843 + ], + [ + -118.04887, + 34.02721 + ], + [ + -118.048109, + 34.025386 + ], + [ + -118.048011, + 34.025379 + ], + [ + -118.047785, + 34.025647 + ], + [ + -118.047556, + 34.025767 + ], + [ + -118.046595, + 34.025775 + ], + [ + -118.046435, + 34.025694 + ], + [ + -118.046514, + 34.025488 + ], + [ + -118.046403, + 34.025226 + ], + [ + -118.047399, + 34.02484 + ], + [ + -118.046946, + 34.024468 + ], + [ + -118.049748, + 34.02405 + ], + [ + -118.049919, + 34.02372 + ], + [ + -118.049727, + 34.023407 + ], + [ + -118.050051, + 34.023126 + ], + [ + -118.050486, + 34.022886 + ], + [ + -118.050735, + 34.021907 + ], + [ + -118.051368, + 34.021774 + ], + [ + -118.051755, + 34.02132 + ], + [ + -118.052119, + 34.020609 + ], + [ + -118.051969, + 34.020226 + ], + [ + -118.052602, + 34.020226 + ], + [ + -118.053471, + 34.020529 + ], + [ + -118.054104, + 34.020868 + ], + [ + -118.054748, + 34.021053 + ], + [ + -118.055166, + 34.021356 + ], + [ + -118.054951, + 34.021793 + ], + [ + -118.054555, + 34.022254 + ], + [ + -118.054201, + 34.022574 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 227723744, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.102033, + 34.024704 + ], + [ + -118.10175, + 34.025135 + ], + [ + -118.101654, + 34.026477 + ], + [ + -118.10174, + 34.028309 + ], + [ + -118.101396, + 34.029216 + ], + [ + -118.100506, + 34.030025 + ], + [ + -118.099358, + 34.03071 + ], + [ + -118.096944, + 34.031919 + ], + [ + -118.096, + 34.032188 + ], + [ + -118.094799, + 34.032159 + ], + [ + -118.093661, + 34.032266 + ], + [ + -118.092739, + 34.032541 + ], + [ + -118.09128, + 34.033511 + ], + [ + -118.089724, + 34.034497 + ], + [ + -118.089037, + 34.03479 + ], + [ + -118.088629, + 34.034802 + ], + [ + -118.087342, + 34.034633 + ], + [ + -118.083555, + 34.03408 + ], + [ + -118.082289, + 34.034026 + ], + [ + -118.081688, + 34.034144 + ], + [ + -118.081366, + 34.034204 + ], + [ + -118.081098, + 34.033848 + ], + [ + -118.081012, + 34.033726 + ], + [ + -118.078801, + 34.034446 + ], + [ + -118.078898, + 34.034766 + ], + [ + -118.079242, + 34.035048 + ], + [ + -118.078949, + 34.03521 + ], + [ + -118.07877, + 34.035546 + ], + [ + -118.078866, + 34.035868 + ], + [ + -118.079725, + 34.037129 + ], + [ + -118.079714, + 34.03744 + ], + [ + -118.079552, + 34.037495 + ], + [ + -118.078201, + 34.035788 + ], + [ + -118.077354, + 34.034986 + ], + [ + -118.077141, + 34.034785 + ], + [ + -118.076302, + 34.033992 + ], + [ + -118.07422, + 34.032143 + ], + [ + -118.073501, + 34.031458 + ], + [ + -118.073083, + 34.030952 + ], + [ + -118.071935, + 34.030114 + ], + [ + -118.070176, + 34.029225 + ], + [ + -118.068373, + 34.028524 + ], + [ + -118.068352, + 34.028398 + ], + [ + -118.070605, + 34.02471 + ], + [ + -118.070208, + 34.02455 + ], + [ + -118.067966, + 34.02822 + ], + [ + -118.066957, + 34.027909 + ], + [ + -118.066067, + 34.027793 + ], + [ + -118.065498, + 34.028 + ], + [ + -118.064071, + 34.028336 + ], + [ + -118.062226, + 34.028798 + ], + [ + -118.05625, + 34.030096 + ], + [ + -118.054576, + 34.030578 + ], + [ + -118.053363, + 34.030996 + ], + [ + -118.050016, + 34.032337 + ], + [ + -118.048407, + 34.033075 + ], + [ + -118.047763, + 34.033102 + ], + [ + -118.047399, + 34.033271 + ], + [ + -118.0461, + 34.033439 + ], + [ + -118.045339, + 34.033946 + ], + [ + -118.04478, + 34.034019 + ], + [ + -118.044566, + 34.033877 + ], + [ + -118.044308, + 34.034757 + ], + [ + -118.044662, + 34.035184 + ], + [ + -118.044362, + 34.035335 + ], + [ + -118.042946, + 34.035591 + ], + [ + -118.042442, + 34.035662 + ], + [ + -118.042324, + 34.035528 + ], + [ + -118.040875, + 34.035253 + ], + [ + -118.039481, + 34.035093 + ], + [ + -118.038933, + 34.034971 + ], + [ + -118.038472, + 34.034942 + ], + [ + -118.038364, + 34.034544 + ], + [ + -118.049641, + 34.029483 + ], + [ + -118.050607, + 34.028727 + ], + [ + -118.052033, + 34.027127 + ], + [ + -118.052891, + 34.025812 + ], + [ + -118.054468, + 34.023145 + ], + [ + -118.055284, + 34.022416 + ], + [ + -118.0564, + 34.021996 + ], + [ + -118.072176, + 34.021364 + ], + [ + -118.072292, + 34.021406 + ], + [ + -118.07259, + 34.021575 + ], + [ + -118.072614, + 34.021605 + ], + [ + -118.071775, + 34.02228 + ], + [ + -118.070873, + 34.023561 + ], + [ + -118.070637, + 34.023925 + ], + [ + -118.071067, + 34.024077 + ], + [ + -118.072422, + 34.022509 + ], + [ + -118.07374, + 34.021725 + ], + [ + -118.07806, + 34.01963 + ], + [ + -118.07904, + 34.019243 + ], + [ + -118.079988, + 34.019044 + ], + [ + -118.080882, + 34.019072 + ], + [ + -118.081482, + 34.019216 + ], + [ + -118.082114, + 34.019475 + ], + [ + -118.082668, + 34.019874 + ], + [ + -118.083544, + 34.020753 + ], + [ + -118.084156, + 34.021409 + ], + [ + -118.084509, + 34.022309 + ], + [ + -118.084628, + 34.023436 + ], + [ + -118.084424, + 34.024201 + ], + [ + -118.083501, + 34.02493 + ], + [ + -118.083877, + 34.025286 + ], + [ + -118.084274, + 34.025152 + ], + [ + -118.084683, + 34.025939 + ], + [ + -118.084845, + 34.026335 + ], + [ + -118.085016, + 34.02652 + ], + [ + -118.087502, + 34.026799 + ], + [ + -118.089745, + 34.026877 + ], + [ + -118.092803, + 34.027055 + ], + [ + -118.093995, + 34.027036 + ], + [ + -118.09521, + 34.026691 + ], + [ + -118.095353, + 34.026693 + ], + [ + -118.095566, + 34.026624 + ], + [ + -118.095655, + 34.026558 + ], + [ + -118.098323, + 34.0258 + ], + [ + -118.101257, + 34.024984 + ], + [ + -118.10189, + 34.024797 + ], + [ + -118.102033, + 34.024704 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 228047735, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.927493, + 33.962147 + ], + [ + -117.926838, + 33.962281 + ], + [ + -117.925876, + 33.96251 + ], + [ + -117.924835, + 33.962785 + ], + [ + -117.92402, + 33.962901 + ], + [ + -117.923662, + 33.963011 + ], + [ + -117.923376, + 33.963257 + ], + [ + -117.923054, + 33.963399 + ], + [ + -117.9227, + 33.963426 + ], + [ + -117.920887, + 33.963426 + ], + [ + -117.920544, + 33.963506 + ], + [ + -117.92034, + 33.963666 + ], + [ + -117.919696, + 33.964298 + ], + [ + -117.919127, + 33.964859 + ], + [ + -117.918924, + 33.96501 + ], + [ + -117.918559, + 33.965134 + ], + [ + -117.918116, + 33.965341 + ], + [ + -117.917676, + 33.965724 + ], + [ + -117.917601, + 33.965804 + ], + [ + -117.91726, + 33.966692 + ], + [ + -117.917151, + 33.967148 + ], + [ + -117.916681, + 33.967235 + ], + [ + -117.916402, + 33.967733 + ], + [ + -117.915909, + 33.96824 + ], + [ + -117.915799, + 33.968349 + ], + [ + -117.915565, + 33.968373 + ], + [ + -117.915437, + 33.968347 + ], + [ + -117.91534, + 33.968364 + ], + [ + -117.915179, + 33.968774 + ], + [ + -117.914707, + 33.969165 + ], + [ + -117.914919, + 33.96923 + ], + [ + -117.915305, + 33.968785 + ], + [ + -117.915606, + 33.968883 + ], + [ + -117.915863, + 33.969034 + ], + [ + -117.915885, + 33.969132 + ], + [ + -117.916274, + 33.969252 + ], + [ + -117.916464, + 33.96931 + ], + [ + -117.916775, + 33.969434 + ], + [ + -117.917204, + 33.969586 + ], + [ + -117.917387, + 33.969782 + ], + [ + -117.917537, + 33.969933 + ], + [ + -117.917561, + 33.970011 + ], + [ + -117.917966, + 33.969915 + ], + [ + -117.918266, + 33.969924 + ], + [ + -117.918857, + 33.970129 + ], + [ + -117.919275, + 33.970502 + ], + [ + -117.919283, + 33.970515 + ], + [ + -117.919768, + 33.971241 + ], + [ + -117.919779, + 33.971517 + ], + [ + -117.919374, + 33.971995 + ], + [ + -117.918945, + 33.972208 + ], + [ + -117.918988, + 33.972751 + ], + [ + -117.919296, + 33.973216 + ], + [ + -117.919393, + 33.973421 + ], + [ + -117.921034, + 33.974488 + ], + [ + -117.921582, + 33.973857 + ], + [ + -117.92215, + 33.974008 + ], + [ + -117.921935, + 33.974835 + ], + [ + -117.922761, + 33.97496 + ], + [ + -117.923641, + 33.975102 + ], + [ + -117.924006, + 33.975164 + ], + [ + -117.924145, + 33.975396 + ], + [ + -117.924245, + 33.975687 + ], + [ + -117.924277, + 33.976168 + ], + [ + -117.924288, + 33.976506 + ], + [ + -117.924971, + 33.976784 + ], + [ + -117.925508, + 33.977006 + ], + [ + -117.925744, + 33.976864 + ], + [ + -117.926227, + 33.976891 + ], + [ + -117.926828, + 33.977175 + ], + [ + -117.927482, + 33.9777 + ], + [ + -117.927643, + 33.978136 + ], + [ + -117.92746, + 33.978528 + ], + [ + -117.927482, + 33.979124 + ], + [ + -117.927335, + 33.979459 + ], + [ + -117.926799, + 33.979629 + ], + [ + -117.926538, + 33.979764 + ], + [ + -117.926237, + 33.979969 + ], + [ + -117.926391, + 33.980162 + ], + [ + -117.926388, + 33.981019 + ], + [ + -117.926155, + 33.982938 + ], + [ + -117.925916, + 33.983545 + ], + [ + -117.925811, + 33.98405 + ], + [ + -117.925865, + 33.984797 + ], + [ + -117.925693, + 33.985322 + ], + [ + -117.925186, + 33.985058 + ], + [ + -117.924985, + 33.985296 + ], + [ + -117.924846, + 33.985447 + ], + [ + -117.924757, + 33.985529 + ], + [ + -117.925712, + 33.98641 + ], + [ + -117.924234, + 33.987395 + ], + [ + -117.923955, + 33.988196 + ], + [ + -117.922611, + 33.988091 + ], + [ + -117.922407, + 33.988153 + ], + [ + -117.922389, + 33.988383 + ], + [ + -117.922332, + 33.988616 + ], + [ + -117.922392, + 33.988623 + ], + [ + -117.922557, + 33.988643 + ], + [ + -117.9226, + 33.988518 + ], + [ + -117.922675, + 33.988402 + ], + [ + -117.922879, + 33.988331 + ], + [ + -117.923255, + 33.98842 + ], + [ + -117.923512, + 33.988411 + ], + [ + -117.923995, + 33.988367 + ], + [ + -117.924252, + 33.988144 + ], + [ + -117.924521, + 33.987735 + ], + [ + -117.924789, + 33.987299 + ], + [ + -117.925229, + 33.986961 + ], + [ + -117.925157, + 33.987351 + ], + [ + -117.925637, + 33.987646 + ], + [ + -117.925819, + 33.987842 + ], + [ + -117.925844, + 33.988071 + ], + [ + -117.927493, + 33.988233 + ], + [ + -117.927632, + 33.988047 + ], + [ + -117.927375, + 33.987593 + ], + [ + -117.927139, + 33.987068 + ], + [ + -117.927021, + 33.986757 + ], + [ + -117.927096, + 33.986339 + ], + [ + -117.927182, + 33.986036 + ], + [ + -117.92716, + 33.985858 + ], + [ + -117.926184, + 33.985405 + ], + [ + -117.926334, + 33.98464 + ], + [ + -117.926484, + 33.984301 + ], + [ + -117.926774, + 33.983812 + ], + [ + -117.927439, + 33.983323 + ], + [ + -117.928115, + 33.982451 + ], + [ + -117.928319, + 33.981819 + ], + [ + -117.928791, + 33.981641 + ], + [ + -117.928608, + 33.980627 + ], + [ + -117.929928, + 33.980689 + ], + [ + -117.930325, + 33.98101 + ], + [ + -117.930829, + 33.98133 + ], + [ + -117.931376, + 33.981455 + ], + [ + -117.931666, + 33.981268 + ], + [ + -117.931977, + 33.981143 + ], + [ + -117.932066, + 33.981319 + ], + [ + -117.932288, + 33.98141 + ], + [ + -117.932134, + 33.98161 + ], + [ + -117.93208, + 33.98214 + ], + [ + -117.931988, + 33.982536 + ], + [ + -117.931607, + 33.982803 + ], + [ + -117.930873, + 33.983198 + ], + [ + -117.930277, + 33.983541 + ], + [ + -117.929907, + 33.983755 + ], + [ + -117.929569, + 33.983768 + ], + [ + -117.929431, + 33.98415 + ], + [ + -117.929291, + 33.984528 + ], + [ + -117.929007, + 33.984848 + ], + [ + -117.928872, + 33.985147 + ], + [ + -117.928814, + 33.985591 + ], + [ + -117.928444, + 33.985622 + ], + [ + -117.928384, + 33.986188 + ], + [ + -117.928432, + 33.986726 + ], + [ + -117.9287, + 33.987126 + ], + [ + -117.92892, + 33.987789 + ], + [ + -117.928898, + 33.988144 + ], + [ + -117.928931, + 33.988563 + ], + [ + -117.928947, + 33.988776 + ], + [ + -117.928996, + 33.988936 + ], + [ + -117.929156, + 33.988954 + ], + [ + -117.92921, + 33.988896 + ], + [ + -117.929604, + 33.988718 + ], + [ + -117.929875, + 33.988754 + ], + [ + -117.930626, + 33.989405 + ], + [ + -117.930881, + 33.989443 + ], + [ + -117.931135, + 33.989517 + ], + [ + -117.931184, + 33.989784 + ], + [ + -117.931272, + 33.989897 + ], + [ + -117.931319, + 33.98971 + ], + [ + -117.931362, + 33.989096 + ], + [ + -117.931495, + 33.988385 + ], + [ + -117.931516, + 33.988109 + ], + [ + -117.931935, + 33.9881 + ], + [ + -117.932585, + 33.988296 + ], + [ + -117.932825, + 33.988038 + ], + [ + -117.932392, + 33.987806 + ], + [ + -117.93186, + 33.987664 + ], + [ + -117.931608, + 33.987344 + ], + [ + -117.931426, + 33.986935 + ], + [ + -117.931051, + 33.986828 + ], + [ + -117.930643, + 33.986712 + ], + [ + -117.931051, + 33.986143 + ], + [ + -117.931473, + 33.986259 + ], + [ + -117.93177, + 33.986081 + ], + [ + -117.931742, + 33.98561 + ], + [ + -117.931866, + 33.985244 + ], + [ + -117.931812, + 33.984986 + ], + [ + -117.931705, + 33.984702 + ], + [ + -117.931699, + 33.984159 + ], + [ + -117.932038, + 33.984026 + ], + [ + -117.932284, + 33.983759 + ], + [ + -117.932349, + 33.983252 + ], + [ + -117.932342, + 33.982131 + ], + [ + -117.932435, + 33.981695 + ], + [ + -117.93266, + 33.981588 + ], + [ + -117.932971, + 33.981552 + ], + [ + -117.933125, + 33.981517 + ], + [ + -117.933275, + 33.981463 + ], + [ + -117.93423, + 33.981926 + ], + [ + -117.934799, + 33.982326 + ], + [ + -117.934895, + 33.982415 + ], + [ + -117.935475, + 33.982309 + ], + [ + -117.936516, + 33.982344 + ], + [ + -117.937996, + 33.982602 + ], + [ + -117.93893, + 33.982851 + ], + [ + -117.939359, + 33.983287 + ], + [ + -117.93967, + 33.983172 + ], + [ + -117.939788, + 33.982905 + ], + [ + -117.940217, + 33.982745 + ], + [ + -117.941032, + 33.982709 + ], + [ + -117.941955, + 33.982842 + ], + [ + -117.942792, + 33.982834 + ], + [ + -117.944369, + 33.982896 + ], + [ + -117.946418, + 33.982718 + ], + [ + -117.947792, + 33.982736 + ], + [ + -117.947781, + 33.98262 + ], + [ + -117.947888, + 33.982602 + ], + [ + -117.948017, + 33.982647 + ], + [ + -117.948006, + 33.982745 + ], + [ + -117.948532, + 33.98286 + ], + [ + -117.948736, + 33.983154 + ], + [ + -117.949251, + 33.983314 + ], + [ + -117.949766, + 33.983216 + ], + [ + -117.950077, + 33.983323 + ], + [ + -117.950409, + 33.983332 + ], + [ + -117.950667, + 33.982994 + ], + [ + -117.950721, + 33.982104 + ], + [ + -117.951214, + 33.978937 + ], + [ + -117.951161, + 33.978741 + ], + [ + -117.951515, + 33.978661 + ], + [ + -117.951815, + 33.978768 + ], + [ + -117.951976, + 33.978732 + ], + [ + -117.952362, + 33.977923 + ], + [ + -117.952394, + 33.977665 + ], + [ + -117.951397, + 33.977487 + ], + [ + -117.950173, + 33.975262 + ], + [ + -117.949651, + 33.975153 + ], + [ + -117.949787, + 33.974826 + ], + [ + -117.950195, + 33.974755 + ], + [ + -117.950259, + 33.974453 + ], + [ + -117.95042, + 33.974337 + ], + [ + -117.951042, + 33.974444 + ], + [ + -117.951236, + 33.974568 + ], + [ + -117.951185, + 33.974975 + ], + [ + -117.951407, + 33.975271 + ], + [ + -117.951976, + 33.975111 + ], + [ + -117.952351, + 33.974933 + ], + [ + -117.952684, + 33.974995 + ], + [ + -117.952995, + 33.975458 + ], + [ + -117.953059, + 33.975769 + ], + [ + -117.95292, + 33.976143 + ], + [ + -117.952601, + 33.976506 + ], + [ + -117.952105, + 33.976481 + ], + [ + -117.951783, + 33.976348 + ], + [ + -117.951858, + 33.976544 + ], + [ + -117.952201, + 33.976659 + ], + [ + -117.952641, + 33.976766 + ], + [ + -117.953049, + 33.976659 + ], + [ + -117.953371, + 33.976321 + ], + [ + -117.953435, + 33.97593 + ], + [ + -117.953263, + 33.975681 + ], + [ + -117.953306, + 33.975423 + ], + [ + -117.953295, + 33.975182 + ], + [ + -117.953092, + 33.975067 + ], + [ + -117.952888, + 33.974942 + ], + [ + -117.952687, + 33.974833 + ], + [ + -117.952577, + 33.974657 + ], + [ + -117.952738, + 33.974453 + ], + [ + -117.953135, + 33.974471 + ], + [ + -117.953188, + 33.974302 + ], + [ + -117.953188, + 33.974043 + ], + [ + -117.953156, + 33.973697 + ], + [ + -117.953939, + 33.97367 + ], + [ + -117.954454, + 33.973812 + ], + [ + -117.95483, + 33.974355 + ], + [ + -117.95513, + 33.974533 + ], + [ + -117.955323, + 33.974853 + ], + [ + -117.955466, + 33.975313 + ], + [ + -117.955634, + 33.975689 + ], + [ + -117.95587, + 33.976036 + ], + [ + -117.956192, + 33.976268 + ], + [ + -117.956353, + 33.976455 + ], + [ + -117.956557, + 33.97657 + ], + [ + -117.956536, + 33.976428 + ], + [ + -117.956482, + 33.97633 + ], + [ + -117.956514, + 33.976205 + ], + [ + -117.957405, + 33.97593 + ], + [ + -117.957362, + 33.975805 + ], + [ + -117.956603, + 33.976079 + ], + [ + -117.956053, + 33.975983 + ], + [ + -117.955795, + 33.975681 + ], + [ + -117.95572, + 33.975298 + ], + [ + -117.955634, + 33.975013 + ], + [ + -117.955506, + 33.974604 + ], + [ + -117.955473, + 33.97415 + ], + [ + -117.955184, + 33.97399 + ], + [ + -117.954819, + 33.973554 + ], + [ + -117.954787, + 33.973252 + ], + [ + -117.95513, + 33.973341 + ], + [ + -117.955667, + 33.973456 + ], + [ + -117.955795, + 33.973243 + ], + [ + -117.956461, + 33.97343 + ], + [ + -117.956686, + 33.973545 + ], + [ + -117.956625, + 33.974023 + ], + [ + -117.956496, + 33.974255 + ], + [ + -117.956249, + 33.974326 + ], + [ + -117.956525, + 33.974417 + ], + [ + -117.956686, + 33.974337 + ], + [ + -117.956739, + 33.973937 + ], + [ + -117.956933, + 33.973527 + ], + [ + -117.957147, + 33.973607 + ], + [ + -117.957491, + 33.973723 + ], + [ + -117.957748, + 33.973892 + ], + [ + -117.95773, + 33.974041 + ], + [ + -117.957644, + 33.97429 + ], + [ + -117.958059, + 33.974328 + ], + [ + -117.957987, + 33.975011 + ], + [ + -117.957751, + 33.975002 + ], + [ + -117.957419, + 33.975118 + ], + [ + -117.957107, + 33.975171 + ], + [ + -117.95675, + 33.975378 + ], + [ + -117.957051, + 33.975307 + ], + [ + -117.957394, + 33.97536 + ], + [ + -117.957566, + 33.97544 + ], + [ + -117.958005, + 33.975369 + ], + [ + -117.958231, + 33.975271 + ], + [ + -117.958274, + 33.975076 + ], + [ + -117.95822, + 33.974933 + ], + [ + -117.958177, + 33.974782 + ], + [ + -117.958284, + 33.974355 + ], + [ + -117.95881, + 33.97415 + ], + [ + -117.959271, + 33.974186 + ], + [ + -117.959969, + 33.974328 + ], + [ + -117.96058, + 33.974462 + ], + [ + -117.961278, + 33.974337 + ], + [ + -117.962179, + 33.974088 + ], + [ + -117.962587, + 33.97407 + ], + [ + -117.96308, + 33.974479 + ], + [ + -117.963617, + 33.974524 + ], + [ + -117.963735, + 33.974568 + ], + [ + -117.963724, + 33.974924 + ], + [ + -117.963917, + 33.974995 + ], + [ + -117.96411, + 33.975049 + ], + [ + -117.964242, + 33.9751 + ], + [ + -117.964035, + 33.975716 + ], + [ + -117.963735, + 33.975689 + ], + [ + -117.963727, + 33.975812 + ], + [ + -117.963938, + 33.975823 + ], + [ + -117.964217, + 33.975752 + ], + [ + -117.964454, + 33.9756 + ], + [ + -117.964604, + 33.975262 + ], + [ + -117.964765, + 33.974942 + ], + [ + -117.964872, + 33.9748 + ], + [ + -117.965119, + 33.974666 + ], + [ + -117.965559, + 33.974657 + ], + [ + -117.96588, + 33.974764 + ], + [ + -117.966084, + 33.975076 + ], + [ + -117.966088, + 33.975616 + ], + [ + -117.966153, + 33.97615 + ], + [ + -117.967157, + 33.97617 + ], + [ + -117.966921, + 33.975529 + ], + [ + -117.966782, + 33.975227 + ], + [ + -117.966685, + 33.974898 + ], + [ + -117.966556, + 33.974586 + ], + [ + -117.966696, + 33.974453 + ], + [ + -117.967103, + 33.974524 + ], + [ + -117.967597, + 33.974933 + ], + [ + -117.967855, + 33.975076 + ], + [ + -117.967919, + 33.974969 + ], + [ + -117.967812, + 33.974791 + ], + [ + -117.967533, + 33.974559 + ], + [ + -117.967318, + 33.974168 + ], + [ + -117.966943, + 33.97359 + ], + [ + -117.966503, + 33.972807 + ], + [ + -117.965548, + 33.971579 + ], + [ + -117.964099, + 33.970573 + ], + [ + -117.963499, + 33.970333 + ], + [ + -117.964003, + 33.970689 + ], + [ + -117.964035, + 33.971072 + ], + [ + -117.963981, + 33.971339 + ], + [ + -117.964336, + 33.971766 + ], + [ + -117.964872, + 33.972139 + ], + [ + -117.965047, + 33.972626 + ], + [ + -117.965086, + 33.97286 + ], + [ + -117.964228, + 33.972735 + ], + [ + -117.963906, + 33.972531 + ], + [ + -117.96396, + 33.972086 + ], + [ + -117.96367, + 33.971801 + ], + [ + -117.963391, + 33.971979 + ], + [ + -117.963005, + 33.971881 + ], + [ + -117.962662, + 33.971846 + ], + [ + -117.962844, + 33.971348 + ], + [ + -117.962222, + 33.971232 + ], + [ + -117.962286, + 33.970671 + ], + [ + -117.962458, + 33.970289 + ], + [ + -117.962493, + 33.970135 + ], + [ + -117.962823, + 33.970111 + ], + [ + -117.963252, + 33.970226 + ], + [ + -117.962984, + 33.969977 + ], + [ + -117.96249, + 33.969577 + ], + [ + -117.962297, + 33.969381 + ], + [ + -117.962397, + 33.969744 + ], + [ + -117.9622, + 33.969933 + ], + [ + -117.961814, + 33.970093 + ], + [ + -117.961879, + 33.970235 + ], + [ + -117.962125, + 33.970342 + ], + [ + -117.962118, + 33.970607 + ], + [ + -117.961946, + 33.970785 + ], + [ + -117.961331, + 33.970484 + ], + [ + -117.960905, + 33.970429 + ], + [ + -117.960774, + 33.970209 + ], + [ + -117.961149, + 33.969951 + ], + [ + -117.961503, + 33.96971 + ], + [ + -117.961031, + 33.969096 + ], + [ + -117.96058, + 33.969194 + ], + [ + -117.960122, + 33.969414 + ], + [ + -117.959918, + 33.96977 + ], + [ + -117.958781, + 33.969993 + ], + [ + -117.958095, + 33.970117 + ], + [ + -117.957566, + 33.970004 + ], + [ + -117.957343, + 33.970197 + ], + [ + -117.95719, + 33.970129 + ], + [ + -117.957265, + 33.969933 + ], + [ + -117.957287, + 33.969746 + ], + [ + -117.957512, + 33.969479 + ], + [ + -117.957169, + 33.969363 + ], + [ + -117.956793, + 33.969443 + ], + [ + -117.956546, + 33.969239 + ], + [ + -117.95597, + 33.969245 + ], + [ + -117.956332, + 33.96971 + ], + [ + -117.956375, + 33.969924 + ], + [ + -117.956053, + 33.969906 + ], + [ + -117.955785, + 33.969746 + ], + [ + -117.95568, + 33.969744 + ], + [ + -117.955388, + 33.970013 + ], + [ + -117.955377, + 33.970111 + ], + [ + -117.95498, + 33.969737 + ], + [ + -117.95484, + 33.969319 + ], + [ + -117.954755, + 33.968874 + ], + [ + -117.95469, + 33.968393 + ], + [ + -117.955945, + 33.968242 + ], + [ + -117.957008, + 33.968287 + ], + [ + -117.958284, + 33.968456 + ], + [ + -117.958606, + 33.967352 + ], + [ + -117.959314, + 33.967673 + ], + [ + -117.959371, + 33.968 + ], + [ + -117.959808, + 33.9681 + ], + [ + -117.960258, + 33.968162 + ], + [ + -117.959958, + 33.966961 + ], + [ + -117.95955, + 33.966738 + ], + [ + -117.95925, + 33.966409 + ], + [ + -117.958992, + 33.966089 + ], + [ + -117.958767, + 33.965902 + ], + [ + -117.958373, + 33.965944 + ], + [ + -117.957866, + 33.96592 + ], + [ + -117.957426, + 33.965813 + ], + [ + -117.957126, + 33.966071 + ], + [ + -117.956804, + 33.966133 + ], + [ + -117.95675, + 33.966231 + ], + [ + -117.956772, + 33.966365 + ], + [ + -117.957083, + 33.966409 + ], + [ + -117.957054, + 33.966674 + ], + [ + -117.956657, + 33.966754 + ], + [ + -117.9567, + 33.967083 + ], + [ + -117.956418, + 33.967183 + ], + [ + -117.955967, + 33.967086 + ], + [ + -117.955484, + 33.966925 + ], + [ + -117.955334, + 33.966721 + ], + [ + -117.95513, + 33.966899 + ], + [ + -117.954876, + 33.967323 + ], + [ + -117.954508, + 33.967797 + ], + [ + -117.954286, + 33.967866 + ], + [ + -117.9538, + 33.967619 + ], + [ + -117.953649, + 33.967682 + ], + [ + -117.953546, + 33.96808 + ], + [ + -117.953703, + 33.968313 + ], + [ + -117.954229, + 33.968669 + ], + [ + -117.953778, + 33.96939 + ], + [ + -117.953253, + 33.969639 + ], + [ + -117.952995, + 33.969577 + ], + [ + -117.952995, + 33.969168 + ], + [ + -117.953156, + 33.968874 + ], + [ + -117.953124, + 33.968607 + ], + [ + -117.953092, + 33.968349 + ], + [ + -117.952866, + 33.968126 + ], + [ + -117.952952, + 33.967851 + ], + [ + -117.952974, + 33.967682 + ], + [ + -117.952695, + 33.967566 + ], + [ + -117.952308, + 33.96729 + ], + [ + -117.951761, + 33.967228 + ], + [ + -117.951386, + 33.967513 + ], + [ + -117.951453, + 33.967902 + ], + [ + -117.951314, + 33.968623 + ], + [ + -117.950924, + 33.969595 + ], + [ + -117.950345, + 33.969346 + ], + [ + -117.950045, + 33.968874 + ], + [ + -117.950184, + 33.968233 + ], + [ + -117.950227, + 33.967815 + ], + [ + -117.949916, + 33.967397 + ], + [ + -117.950227, + 33.967112 + ], + [ + -117.951193, + 33.966827 + ], + [ + -117.952534, + 33.966614 + ], + [ + -117.9538, + 33.966525 + ], + [ + -117.954519, + 33.966498 + ], + [ + -117.954765, + 33.966347 + ], + [ + -117.955023, + 33.96624 + ], + [ + -117.955259, + 33.965849 + ], + [ + -117.955495, + 33.965813 + ], + [ + -117.956267, + 33.965155 + ], + [ + -117.956042, + 33.96503 + ], + [ + -117.955827, + 33.964888 + ], + [ + -117.956042, + 33.964638 + ], + [ + -117.956461, + 33.964407 + ], + [ + -117.956911, + 33.964158 + ], + [ + -117.957086, + 33.96404 + ], + [ + -117.956632, + 33.963971 + ], + [ + -117.956238, + 33.964013 + ], + [ + -117.955978, + 33.9643 + ], + [ + -117.955616, + 33.964503 + ], + [ + -117.955452, + 33.964603 + ], + [ + -117.95552, + 33.964894 + ], + [ + -117.955602, + 33.965092 + ], + [ + -117.955441, + 33.965368 + ], + [ + -117.954962, + 33.965384 + ], + [ + -117.954658, + 33.965208 + ], + [ + -117.954522, + 33.965321 + ], + [ + -117.954712, + 33.965519 + ], + [ + -117.954787, + 33.965662 + ], + [ + -117.955055, + 33.965724 + ], + [ + -117.955077, + 33.965911 + ], + [ + -117.954915, + 33.966116 + ], + [ + -117.954565, + 33.966291 + ], + [ + -117.954186, + 33.966276 + ], + [ + -117.954025, + 33.966151 + ], + [ + -117.95366, + 33.965849 + ], + [ + -117.952716, + 33.966071 + ], + [ + -117.952269, + 33.966229 + ], + [ + -117.95115, + 33.966249 + ], + [ + -117.950413, + 33.966638 + ], + [ + -117.949898, + 33.966603 + ], + [ + -117.949079, + 33.966623 + ], + [ + -117.948331, + 33.967243 + ], + [ + -117.947183, + 33.967742 + ], + [ + -117.946461, + 33.967788 + ], + [ + -117.945721, + 33.968269 + ], + [ + -117.945313, + 33.968518 + ], + [ + -117.945217, + 33.968714 + ], + [ + -117.945198, + 33.969477 + ], + [ + -117.944873, + 33.96955 + ], + [ + -117.944627, + 33.969159 + ], + [ + -117.944391, + 33.968821 + ], + [ + -117.944283, + 33.968411 + ], + [ + -117.944444, + 33.968233 + ], + [ + -117.94424, + 33.968038 + ], + [ + -117.944208, + 33.967851 + ], + [ + -117.94424, + 33.967646 + ], + [ + -117.944466, + 33.96753 + ], + [ + -117.944702, + 33.967708 + ], + [ + -117.945152, + 33.967628 + ], + [ + -117.945227, + 33.967299 + ], + [ + -117.945732, + 33.967263 + ], + [ + -117.945946, + 33.966925 + ], + [ + -117.946161, + 33.96681 + ], + [ + -117.946429, + 33.96697 + ], + [ + -117.947041, + 33.96681 + ], + [ + -117.947116, + 33.966365 + ], + [ + -117.94718, + 33.965697 + ], + [ + -117.946987, + 33.964923 + ], + [ + -117.946558, + 33.964443 + ], + [ + -117.946, + 33.964283 + ], + [ + -117.945592, + 33.964371 + ], + [ + -117.945528, + 33.964683 + ], + [ + -117.945231, + 33.964903 + ], + [ + -117.944165, + 33.965493 + ], + [ + -117.943589, + 33.965927 + ], + [ + -117.942903, + 33.966425 + ], + [ + -117.942416, + 33.966854 + ], + [ + -117.942216, + 33.967564 + ], + [ + -117.942087, + 33.968026 + ], + [ + -117.941483, + 33.968669 + ], + [ + -117.940961, + 33.968703 + ], + [ + -117.940678, + 33.968269 + ], + [ + -117.940743, + 33.967824 + ], + [ + -117.940711, + 33.967246 + ], + [ + -117.940818, + 33.966712 + ], + [ + -117.940614, + 33.966534 + ], + [ + -117.940306, + 33.966549 + ], + [ + -117.940013, + 33.966365 + ], + [ + -117.940185, + 33.966133 + ], + [ + -117.940378, + 33.965929 + ], + [ + -117.940356, + 33.965769 + ], + [ + -117.940228, + 33.965751 + ], + [ + -117.940003, + 33.965866 + ], + [ + -117.939702, + 33.965902 + ], + [ + -117.939466, + 33.965831 + ], + [ + -117.939298, + 33.965864 + ], + [ + -117.939541, + 33.966089 + ], + [ + -117.939681, + 33.966187 + ], + [ + -117.939695, + 33.966309 + ], + [ + -117.939605, + 33.966471 + ], + [ + -117.939469, + 33.966576 + ], + [ + -117.938822, + 33.966329 + ], + [ + -117.93864, + 33.966124 + ], + [ + -117.938758, + 33.966035 + ], + [ + -117.938651, + 33.965902 + ], + [ + -117.938468, + 33.965857 + ], + [ + -117.938128, + 33.96598 + ], + [ + -117.938093, + 33.966213 + ], + [ + -117.937924, + 33.966389 + ], + [ + -117.937717, + 33.96632 + ], + [ + -117.937599, + 33.966142 + ], + [ + -117.937406, + 33.965955 + ], + [ + -117.937352, + 33.96576 + ], + [ + -117.937363, + 33.965395 + ], + [ + -117.937234, + 33.965021 + ], + [ + -117.937267, + 33.96463 + ], + [ + -117.937127, + 33.96438 + ], + [ + -117.936966, + 33.96471 + ], + [ + -117.936712, + 33.964663 + ], + [ + -117.936605, + 33.964912 + ], + [ + -117.936419, + 33.965012 + ], + [ + -117.936358, + 33.965108 + ], + [ + -117.936122, + 33.965099 + ], + [ + -117.935961, + 33.965188 + ], + [ + -117.935958, + 33.965502 + ], + [ + -117.936441, + 33.965938 + ], + [ + -117.936537, + 33.966293 + ], + [ + -117.936537, + 33.966925 + ], + [ + -117.936666, + 33.967984 + ], + [ + -117.937055, + 33.969237 + ], + [ + -117.937159, + 33.969693 + ], + [ + -117.937023, + 33.96994 + ], + [ + -117.936698, + 33.969977 + ], + [ + -117.936355, + 33.969835 + ], + [ + -117.935883, + 33.969417 + ], + [ + -117.935464, + 33.969212 + ], + [ + -117.935014, + 33.968936 + ], + [ + -117.934981, + 33.968749 + ], + [ + -117.934702, + 33.968536 + ], + [ + -117.934595, + 33.968491 + ], + [ + -117.934649, + 33.96818 + ], + [ + -117.934606, + 33.967762 + ], + [ + -117.934745, + 33.967504 + ], + [ + -117.935035, + 33.967272 + ], + [ + -117.934885, + 33.967166 + ], + [ + -117.934735, + 33.967077 + ], + [ + -117.934681, + 33.966801 + ], + [ + -117.934713, + 33.966712 + ], + [ + -117.934885, + 33.966427 + ], + [ + -117.934713, + 33.96616 + ], + [ + -117.934512, + 33.966033 + ], + [ + -117.934105, + 33.966247 + ], + [ + -117.934008, + 33.966612 + ], + [ + -117.933372, + 33.966569 + ], + [ + -117.933672, + 33.966035 + ], + [ + -117.933587, + 33.965911 + ], + [ + -117.933093, + 33.965706 + ], + [ + -117.932921, + 33.965519 + ], + [ + -117.93275, + 33.965466 + ], + [ + -117.932846, + 33.96527 + ], + [ + -117.932367, + 33.965579 + ], + [ + -117.931977, + 33.965724 + ], + [ + -117.931323, + 33.965537 + ], + [ + -117.930507, + 33.965502 + ], + [ + -117.929596, + 33.96463 + ], + [ + -117.929553, + 33.964087 + ], + [ + -117.92863, + 33.963562 + ], + [ + -117.928247, + 33.96291 + ], + [ + -117.927857, + 33.962494 + ], + [ + -117.92833, + 33.961809 + ], + [ + -117.928448, + 33.961596 + ], + [ + -117.928372, + 33.961587 + ], + [ + -117.928212, + 33.961827 + ], + [ + -117.9279, + 33.962058 + ], + [ + -117.927493, + 33.962147 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 233449135, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.182352, + 34.075705 + ], + [ + -118.180231, + 34.075726 + ], + [ + -118.17998, + 34.076113 + ], + [ + -118.179743, + 34.076474 + ], + [ + -118.179446, + 34.076937 + ], + [ + -118.179818, + 34.077123 + ], + [ + -118.179968, + 34.077211 + ], + [ + -118.180059, + 34.077308 + ], + [ + -118.180149, + 34.077472 + ], + [ + -118.180138, + 34.077956 + ], + [ + -118.180546, + 34.07797 + ], + [ + -118.181055, + 34.07802 + ], + [ + -118.181112, + 34.077387 + ], + [ + -118.18187, + 34.077382 + ], + [ + -118.182088, + 34.077136 + ], + [ + -118.182085, + 34.076884 + ], + [ + -118.182331, + 34.07669 + ], + [ + -118.182355, + 34.07666 + ], + [ + -118.182352, + 34.075705 + ] + ] + ] + }, + "properties": { + "name": "El Sereno Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 235933048, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.838862, + 34.033317 + ], + [ + -117.83721, + 34.030069 + ], + [ + -117.837165, + 34.030063 + ], + [ + -117.837099, + 34.030055 + ], + [ + -117.836781, + 34.030178 + ], + [ + -117.836665, + 34.030268 + ], + [ + -117.836501, + 34.03051 + ], + [ + -117.836437, + 34.030657 + ], + [ + -117.836419, + 34.030903 + ], + [ + -117.836651, + 34.030919 + ], + [ + -117.836854, + 34.030863 + ], + [ + -117.83706, + 34.030772 + ], + [ + -117.837242, + 34.031088 + ], + [ + -117.837361, + 34.031309 + ], + [ + -117.837407, + 34.031465 + ], + [ + -117.837393, + 34.031765 + ], + [ + -117.837612, + 34.031843 + ], + [ + -117.837631, + 34.031959 + ], + [ + -117.837752, + 34.032142 + ], + [ + -117.837802, + 34.03221 + ], + [ + -117.837799, + 34.032275 + ], + [ + -117.837769, + 34.032321 + ], + [ + -117.837923, + 34.032371 + ], + [ + -117.83782, + 34.032644 + ], + [ + -117.838112, + 34.0327 + ], + [ + -117.83815, + 34.032732 + ], + [ + -117.838173, + 34.03276 + ], + [ + -117.838142, + 34.03307 + ], + [ + -117.838223, + 34.033214 + ], + [ + -117.838306, + 34.033263 + ], + [ + -117.838358, + 34.033517 + ], + [ + -117.837443, + 34.034082 + ], + [ + -117.837438, + 34.034286 + ], + [ + -117.837215, + 34.034549 + ], + [ + -117.836881, + 34.034727 + ], + [ + -117.836776, + 34.034734 + ], + [ + -117.836736, + 34.034834 + ], + [ + -117.836832, + 34.034924 + ], + [ + -117.836728, + 34.03506 + ], + [ + -117.836727, + 34.035253 + ], + [ + -117.838712, + 34.035535 + ], + [ + -117.838713, + 34.035719 + ], + [ + -117.83887, + 34.03576 + ], + [ + -117.838958, + 34.035824 + ], + [ + -117.838986, + 34.035917 + ], + [ + -117.839048, + 34.036198 + ], + [ + -117.839157, + 34.036687 + ], + [ + -117.839228, + 34.03722 + ], + [ + -117.839335, + 34.03752 + ], + [ + -117.839864, + 34.038377 + ], + [ + -117.840008, + 34.038578 + ], + [ + -117.840495, + 34.038987 + ], + [ + -117.840639, + 34.039555 + ], + [ + -117.841769, + 34.039123 + ], + [ + -117.841132, + 34.038571 + ], + [ + -117.840728, + 34.038127 + ], + [ + -117.840419, + 34.037717 + ], + [ + -117.840193, + 34.03723 + ], + [ + -117.840085, + 34.036935 + ], + [ + -117.840004, + 34.03664 + ], + [ + -117.839653, + 34.035368 + ], + [ + -117.839323, + 34.034372 + ], + [ + -117.838862, + 34.033317 + ] + ] + ] + }, + "properties": { + "name": "Snow Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 235933089, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.8381, + 34.034293 + ], + [ + -117.837941, + 34.035049 + ], + [ + -117.838028, + 34.035142 + ], + [ + -117.838931, + 34.03526 + ], + [ + -117.839012, + 34.035002 + ], + [ + -117.839025, + 34.034823 + ], + [ + -117.838998, + 34.034644 + ], + [ + -117.838931, + 34.03451 + ], + [ + -117.838809, + 34.034426 + ], + [ + -117.838653, + 34.034356 + ], + [ + -117.838559, + 34.034316 + ], + [ + -117.838341, + 34.034292 + ], + [ + -117.8381, + 34.034293 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 238899225, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.98594, + 34.008561 + ], + [ + -117.986919, + 34.00896 + ], + [ + -117.986037, + 34.010479 + ], + [ + -117.985942, + 34.01035 + ], + [ + -117.985661, + 34.010244 + ], + [ + -117.985276, + 34.01008 + ], + [ + -117.985113, + 34.010023 + ], + [ + -117.98594, + 34.008561 + ] + ] + ] + }, + "properties": { + "name": "Los Robles County Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 240222717, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.067707, + 33.996767 + ], + [ + -118.067221, + 33.997696 + ], + [ + -118.066073, + 33.996929 + ], + [ + -118.066795, + 33.996131 + ], + [ + -118.067674, + 33.996713 + ], + [ + -118.067707, + 33.996767 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 240240042, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.851849, + 34.083499 + ], + [ + -117.852239, + 34.084854 + ], + [ + -117.853389, + 34.084854 + ], + [ + -117.853394, + 34.084583 + ], + [ + -117.853478, + 34.084263 + ], + [ + -117.853724, + 34.083965 + ], + [ + -117.853963, + 34.083579 + ], + [ + -117.853982, + 34.083201 + ], + [ + -117.853727, + 34.082837 + ], + [ + -117.853228, + 34.082597 + ], + [ + -117.852069, + 34.082602 + ], + [ + -117.851465, + 34.082622 + ], + [ + -117.851028, + 34.082637 + ], + [ + -117.850358, + 34.082597 + ], + [ + -117.849891, + 34.082566 + ], + [ + -117.849473, + 34.082602 + ], + [ + -117.84969, + 34.082717 + ], + [ + -117.850077, + 34.082721 + ], + [ + -117.850374, + 34.082748 + ], + [ + -117.850578, + 34.082975 + ], + [ + -117.850717, + 34.083006 + ], + [ + -117.850844, + 34.083081 + ], + [ + -117.850562, + 34.083259 + ], + [ + -117.850168, + 34.083419 + ], + [ + -117.849712, + 34.083601 + ], + [ + -117.849149, + 34.083881 + ], + [ + -117.848561, + 34.083979 + ], + [ + -117.848196, + 34.083894 + ], + [ + -117.847847, + 34.084015 + ], + [ + -117.847405, + 34.084383 + ], + [ + -117.846989, + 34.084601 + ], + [ + -117.84663, + 34.084725 + ], + [ + -117.846472, + 34.084903 + ], + [ + -117.846721, + 34.085005 + ], + [ + -117.847606, + 34.08461 + ], + [ + -117.847901, + 34.084401 + ], + [ + -117.848274, + 34.084561 + ], + [ + -117.847995, + 34.085005 + ], + [ + -117.847504, + 34.085259 + ], + [ + -117.847005, + 34.085578 + ], + [ + -117.846821, + 34.085849 + ], + [ + -117.846485, + 34.085978 + ], + [ + -117.846069, + 34.086098 + ], + [ + -117.845474, + 34.086329 + ], + [ + -117.844875, + 34.086485 + ], + [ + -117.844253, + 34.086596 + ], + [ + -117.844114, + 34.086525 + ], + [ + -117.843967, + 34.086258 + ], + [ + -117.843468, + 34.086325 + ], + [ + -117.843529, + 34.086747 + ], + [ + -117.843178, + 34.086787 + ], + [ + -117.843068, + 34.086578 + ], + [ + -117.842574, + 34.086862 + ], + [ + -117.842124, + 34.086911 + ], + [ + -117.841534, + 34.086951 + ], + [ + -117.840839, + 34.087102 + ], + [ + -117.839699, + 34.087293 + ], + [ + -117.839739, + 34.087382 + ], + [ + -117.839141, + 34.087533 + ], + [ + -117.838889, + 34.087538 + ], + [ + -117.838712, + 34.087418 + ], + [ + -117.838004, + 34.085969 + ], + [ + -117.832299, + 34.087502 + ], + [ + -117.832514, + 34.088008 + ], + [ + -117.83136, + 34.088422 + ], + [ + -117.830596, + 34.088751 + ], + [ + -117.830338, + 34.088831 + ], + [ + -117.830022, + 34.088826 + ], + [ + -117.830191, + 34.088972 + ], + [ + -117.830429, + 34.089048 + ], + [ + -117.830815, + 34.08895 + ], + [ + -117.831301, + 34.08875 + ], + [ + -117.831872, + 34.088777 + ], + [ + -117.832165, + 34.088928 + ], + [ + -117.83235, + 34.088955 + ], + [ + -117.832516, + 34.088799 + ], + [ + -117.833168, + 34.088666 + ], + [ + -117.833898, + 34.088515 + ], + [ + -117.834581, + 34.088479 + ], + [ + -117.835142, + 34.088524 + ], + [ + -117.835298, + 34.088586 + ], + [ + -117.835343, + 34.088697 + ], + [ + -117.83523, + 34.088737 + ], + [ + -117.834882, + 34.088742 + ], + [ + -117.834689, + 34.088759 + ], + [ + -117.834311, + 34.08895 + ], + [ + -117.834002, + 34.08915 + ], + [ + -117.833573, + 34.089346 + ], + [ + -117.833286, + 34.089648 + ], + [ + -117.83309, + 34.089875 + ], + [ + -117.832929, + 34.089906 + ], + [ + -117.83265, + 34.089892 + ], + [ + -117.832532, + 34.089821 + ], + [ + -117.832189, + 34.089817 + ], + [ + -117.83194, + 34.089901 + ], + [ + -117.831993, + 34.090025 + ], + [ + -117.832124, + 34.090088 + ], + [ + -117.832219, + 34.090287 + ], + [ + -117.832001, + 34.090394 + ], + [ + -117.831757, + 34.090492 + ], + [ + -117.831448, + 34.090603 + ], + [ + -117.830644, + 34.090661 + ], + [ + -117.830041, + 34.090505 + ], + [ + -117.829807, + 34.090505 + ], + [ + -117.82956, + 34.090719 + ], + [ + -117.829238, + 34.090932 + ], + [ + -117.829056, + 34.091065 + ], + [ + -117.829166, + 34.091149 + ], + [ + -117.829399, + 34.091074 + ], + [ + -117.829703, + 34.090905 + ], + [ + -117.830209, + 34.090963 + ], + [ + -117.830274, + 34.091092 + ], + [ + -117.830408, + 34.091221 + ], + [ + -117.830572, + 34.091438 + ], + [ + -117.830708, + 34.091616 + ], + [ + -117.830867, + 34.091745 + ], + [ + -117.831666, + 34.092016 + ], + [ + -117.832202, + 34.0921 + ], + [ + -117.832626, + 34.092016 + ], + [ + -117.833256, + 34.091723 + ], + [ + -117.83364, + 34.091358 + ], + [ + -117.833882, + 34.091149 + ], + [ + -117.834032, + 34.091069 + ], + [ + -117.835507, + 34.090932 + ], + [ + -117.83643, + 34.090541 + ], + [ + -117.836829, + 34.090279 + ], + [ + -117.837124, + 34.090177 + ], + [ + -117.837505, + 34.090208 + ], + [ + -117.837848, + 34.09035 + ], + [ + -117.838401, + 34.090394 + ], + [ + -117.839002, + 34.090394 + ], + [ + -117.840206, + 34.09043 + ], + [ + -117.839522, + 34.089253 + ], + [ + -117.839785, + 34.088635 + ], + [ + -117.840842, + 34.088088 + ], + [ + -117.841547, + 34.087742 + ], + [ + -117.842301, + 34.087862 + ], + [ + -117.842942, + 34.08811 + ], + [ + -117.843827, + 34.088337 + ], + [ + -117.844637, + 34.088537 + ], + [ + -117.844718, + 34.088892 + ], + [ + -117.844101, + 34.089017 + ], + [ + -117.843942, + 34.089017 + ], + [ + -117.843711, + 34.089115 + ], + [ + -117.843744, + 34.089324 + ], + [ + -117.844446, + 34.089457 + ], + [ + -117.844889, + 34.08931 + ], + [ + -117.845249, + 34.088795 + ], + [ + -117.845766, + 34.088577 + ], + [ + -117.846082, + 34.088479 + ], + [ + -117.845782, + 34.08828 + ], + [ + -117.845079, + 34.088266 + ], + [ + -117.844897, + 34.088146 + ], + [ + -117.844956, + 34.087929 + ], + [ + -117.845181, + 34.087653 + ], + [ + -117.845376, + 34.087496 + ], + [ + -117.845621, + 34.087298 + ], + [ + -117.845549, + 34.087124 + ], + [ + -117.845458, + 34.086902 + ], + [ + -117.846394, + 34.086813 + ], + [ + -117.84678, + 34.087191 + ], + [ + -117.847491, + 34.08716 + ], + [ + -117.847976, + 34.086938 + ], + [ + -117.848587, + 34.086365 + ], + [ + -117.84909, + 34.085854 + ], + [ + -117.849269, + 34.085312 + ], + [ + -117.849215, + 34.084943 + ], + [ + -117.849481, + 34.084636 + ], + [ + -117.849996, + 34.084494 + ], + [ + -117.851409, + 34.083863 + ], + [ + -117.851611, + 34.083623 + ], + [ + -117.851849, + 34.083499 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 240333848, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.830451, + 34.090212 + ], + [ + -117.830572, + 34.09027 + ], + [ + -117.830569, + 34.090359 + ], + [ + -117.830572, + 34.090421 + ], + [ + -117.830655, + 34.090408 + ], + [ + -117.830781, + 34.090425 + ], + [ + -117.830931, + 34.090457 + ], + [ + -117.830894, + 34.090403 + ], + [ + -117.830787, + 34.090368 + ], + [ + -117.830697, + 34.09035 + ], + [ + -117.830749, + 34.090288 + ], + [ + -117.830889, + 34.090354 + ], + [ + -117.831001, + 34.090292 + ], + [ + -117.831221, + 34.090372 + ], + [ + -117.831135, + 34.090465 + ], + [ + -117.831062, + 34.090519 + ], + [ + -117.830939, + 34.090541 + ], + [ + -117.830687, + 34.090536 + ], + [ + -117.830381, + 34.09047 + ], + [ + -117.830032, + 34.090394 + ], + [ + -117.829769, + 34.090372 + ], + [ + -117.829601, + 34.090465 + ], + [ + -117.828825, + 34.09115 + ], + [ + -117.828807, + 34.091225 + ], + [ + -117.828895, + 34.091301 + ], + [ + -117.829156, + 34.091265 + ], + [ + -117.829531, + 34.091123 + ], + [ + -117.829678, + 34.091056 + ], + [ + -117.829848, + 34.091012 + ], + [ + -117.830065, + 34.091083 + ], + [ + -117.830357, + 34.091372 + ], + [ + -117.830655, + 34.091692 + ], + [ + -117.830875, + 34.091874 + ], + [ + -117.831312, + 34.09198 + ], + [ + -117.832028, + 34.092158 + ], + [ + -117.832382, + 34.092185 + ], + [ + -117.832632, + 34.092127 + ], + [ + -117.833313, + 34.091865 + ], + [ + -117.833878, + 34.091332 + ], + [ + -117.834021, + 34.091243 + ], + [ + -117.834071, + 34.092229 + ], + [ + -117.833557, + 34.092673 + ], + [ + -117.832741, + 34.092789 + ], + [ + -117.831507, + 34.093153 + ], + [ + -117.83118, + 34.093198 + ], + [ + -117.831153, + 34.092807 + ], + [ + -117.829904, + 34.092247 + ], + [ + -117.829528, + 34.092189 + ], + [ + -117.828992, + 34.092202 + ], + [ + -117.828943, + 34.093264 + ], + [ + -117.828448, + 34.093073 + ], + [ + -117.827913, + 34.092838 + ], + [ + -117.827559, + 34.092638 + ], + [ + -117.827586, + 34.092411 + ], + [ + -117.827409, + 34.092229 + ], + [ + -117.827012, + 34.092269 + ], + [ + -117.827103, + 34.092647 + ], + [ + -117.827549, + 34.092767 + ], + [ + -117.827863, + 34.092904 + ], + [ + -117.828139, + 34.093033 + ], + [ + -117.828614, + 34.093242 + ], + [ + -117.827237, + 34.093175 + ], + [ + -117.827259, + 34.093491 + ], + [ + -117.82708, + 34.093526 + ], + [ + -117.827048, + 34.09362 + ], + [ + -117.82679, + 34.093753 + ], + [ + -117.826728, + 34.094081 + ], + [ + -117.826256, + 34.09393 + ], + [ + -117.825864, + 34.093917 + ], + [ + -117.825706, + 34.093944 + ], + [ + -117.82573, + 34.093753 + ], + [ + -117.825489, + 34.093704 + ], + [ + -117.82455, + 34.093659 + ], + [ + -117.823772, + 34.093766 + ], + [ + -117.823099, + 34.093922 + ], + [ + -117.822528, + 34.093966 + ], + [ + -117.822308, + 34.093944 + ], + [ + -117.822088, + 34.093797 + ], + [ + -117.821889, + 34.093584 + ], + [ + -117.821774, + 34.093384 + ], + [ + -117.821771, + 34.093269 + ], + [ + -117.821787, + 34.093162 + ], + [ + -117.821991, + 34.093011 + ], + [ + -117.822241, + 34.092895 + ], + [ + -117.82249, + 34.092655 + ], + [ + -117.822622, + 34.092447 + ], + [ + -117.822737, + 34.092376 + ], + [ + -117.822874, + 34.092464 + ], + [ + -117.823019, + 34.092651 + ], + [ + -117.823266, + 34.09254 + ], + [ + -117.82308, + 34.092318 + ], + [ + -117.822871, + 34.092322 + ], + [ + -117.822748, + 34.092313 + ], + [ + -117.82249, + 34.092491 + ], + [ + -117.822295, + 34.092753 + ], + [ + -117.822072, + 34.09286 + ], + [ + -117.821812, + 34.093029 + ], + [ + -117.821694, + 34.093251 + ], + [ + -117.821705, + 34.093455 + ], + [ + -117.821849, + 34.093664 + ], + [ + -117.822069, + 34.093859 + ], + [ + -117.82222, + 34.09397 + ], + [ + -117.822318, + 34.094086 + ], + [ + -117.822289, + 34.094144 + ], + [ + -117.822139, + 34.093962 + ], + [ + -117.821868, + 34.09377 + ], + [ + -117.821524, + 34.093633 + ], + [ + -117.821202, + 34.093562 + ], + [ + -117.820564, + 34.093726 + ], + [ + -117.820258, + 34.093944 + ], + [ + -117.820213, + 34.094139 + ], + [ + -117.820226, + 34.094592 + ], + [ + -117.820071, + 34.095107 + ], + [ + -117.819931, + 34.095321 + ], + [ + -117.819951, + 34.096414 + ], + [ + -117.820031, + 34.097107 + ], + [ + -117.820052, + 34.097342 + ], + [ + -117.820256, + 34.097449 + ], + [ + -117.820543, + 34.097777 + ], + [ + -117.820752, + 34.097955 + ], + [ + -117.821206, + 34.097946 + ], + [ + -117.821235, + 34.099297 + ], + [ + -117.821031, + 34.099283 + ], + [ + -117.821063, + 34.099043 + ], + [ + -117.82109, + 34.098781 + ], + [ + -117.821095, + 34.098568 + ], + [ + -117.821009, + 34.098279 + ], + [ + -117.820884, + 34.098124 + ], + [ + -117.82057, + 34.097937 + ], + [ + -117.820299, + 34.097626 + ], + [ + -117.820044, + 34.097422 + ], + [ + -117.819904, + 34.097169 + ], + [ + -117.819802, + 34.096751 + ], + [ + -117.819754, + 34.095534 + ], + [ + -117.819797, + 34.092998 + ], + [ + -117.820026, + 34.092695 + ], + [ + -117.820278, + 34.092273 + ], + [ + -117.820291, + 34.092207 + ], + [ + -117.820248, + 34.092122 + ], + [ + -117.820323, + 34.091918 + ], + [ + -117.820366, + 34.091656 + ], + [ + -117.82036, + 34.091398 + ], + [ + -117.820403, + 34.091287 + ], + [ + -117.820452, + 34.091029 + ], + [ + -117.820435, + 34.090936 + ], + [ + -117.820366, + 34.090901 + ], + [ + -117.820301, + 34.090759 + ], + [ + -117.82028, + 34.090332 + ], + [ + -117.820242, + 34.089386 + ], + [ + -117.820385, + 34.089306 + ], + [ + -117.820607, + 34.089261 + ], + [ + -117.820993, + 34.089253 + ], + [ + -117.821235, + 34.089426 + ], + [ + -117.82131, + 34.089417 + ], + [ + -117.821363, + 34.089324 + ], + [ + -117.82132, + 34.089239 + ], + [ + -117.821262, + 34.089244 + ], + [ + -117.821111, + 34.089217 + ], + [ + -117.820822, + 34.089186 + ], + [ + -117.820334, + 34.08915 + ], + [ + -117.820253, + 34.089124 + ], + [ + -117.820237, + 34.089057 + ], + [ + -117.820258, + 34.088764 + ], + [ + -117.820344, + 34.088941 + ], + [ + -117.820519, + 34.089048 + ], + [ + -117.820991, + 34.088986 + ], + [ + -117.821154, + 34.088755 + ], + [ + -117.821192, + 34.088479 + ], + [ + -117.82117, + 34.088262 + ], + [ + -117.821265, + 34.088257 + ], + [ + -117.821283, + 34.088191 + ], + [ + -117.82154, + 34.088066 + ], + [ + -117.82178, + 34.087969 + ], + [ + -117.822139, + 34.0878 + ], + [ + -117.822311, + 34.088173 + ], + [ + -117.822461, + 34.088133 + ], + [ + -117.822472, + 34.088462 + ], + [ + -117.822574, + 34.088937 + ], + [ + -117.82267, + 34.089008 + ], + [ + -117.823083, + 34.088982 + ], + [ + -117.823507, + 34.088839 + ], + [ + -117.8236, + 34.088591 + ], + [ + -117.82374, + 34.088262 + ], + [ + -117.823906, + 34.088288 + ], + [ + -117.824011, + 34.088528 + ], + [ + -117.824271, + 34.088648 + ], + [ + -117.824564, + 34.088759 + ], + [ + -117.824982, + 34.088857 + ], + [ + -117.825285, + 34.088791 + ], + [ + -117.825735, + 34.088804 + ], + [ + -117.826018, + 34.088933 + ], + [ + -117.826395, + 34.088897 + ], + [ + -117.826948, + 34.088924 + ], + [ + -117.829279, + 34.088302 + ], + [ + -117.829242, + 34.088533 + ], + [ + -117.829174, + 34.088702 + ], + [ + -117.82912, + 34.088742 + ], + [ + -117.828986, + 34.088728 + ], + [ + -117.828777, + 34.088657 + ], + [ + -117.828691, + 34.088635 + ], + [ + -117.828493, + 34.088648 + ], + [ + -117.828241, + 34.088684 + ], + [ + -117.827976, + 34.088928 + ], + [ + -117.827613, + 34.089364 + ], + [ + -117.827563, + 34.089559 + ], + [ + -117.827573, + 34.089994 + ], + [ + -117.826819, + 34.090399 + ], + [ + -117.826975, + 34.090585 + ], + [ + -117.827493, + 34.090643 + ], + [ + -117.827913, + 34.090661 + ], + [ + -117.828439, + 34.090674 + ], + [ + -117.828898, + 34.090514 + ], + [ + -117.829126, + 34.090417 + ], + [ + -117.829201, + 34.090474 + ], + [ + -117.829249, + 34.090439 + ], + [ + -117.829217, + 34.090354 + ], + [ + -117.82941, + 34.090252 + ], + [ + -117.829539, + 34.090203 + ], + [ + -117.829751, + 34.09015 + ], + [ + -117.830134, + 34.090168 + ], + [ + -117.830451, + 34.090212 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 240899299, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.086667, + 34.08954 + ], + [ + -118.087736, + 34.089921 + ], + [ + -118.087811, + 34.090375 + ], + [ + -118.08662, + 34.090381 + ], + [ + -118.086667, + 34.08954 + ] + ] + ] + }, + "properties": { + "name": "Sally Tanner Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 241571182, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.167495, + 34.096489 + ], + [ + -118.167938, + 34.09649 + ], + [ + -118.167931, + 34.096908 + ], + [ + -118.168373, + 34.096912 + ], + [ + -118.168338, + 34.097974 + ], + [ + -118.168336, + 34.098199 + ], + [ + -118.16758, + 34.098196 + ], + [ + -118.16754, + 34.098197 + ], + [ + -118.16751, + 34.098179 + ], + [ + -118.167484, + 34.098149 + ], + [ + -118.167477, + 34.098112 + ], + [ + -118.167504, + 34.0967 + ], + [ + -118.167495, + 34.096489 + ] + ] + ] + }, + "properties": { + "name": "Guardia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 245105353, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.878377, + 33.922632 + ], + [ + -117.878334, + 33.922644 + ], + [ + -117.878214, + 33.922598 + ], + [ + -117.878199, + 33.922558 + ], + [ + -117.878224, + 33.922506 + ], + [ + -117.878085, + 33.922445 + ], + [ + -117.878067, + 33.92241 + ], + [ + -117.878215, + 33.922161 + ], + [ + -117.878267, + 33.922145 + ], + [ + -117.878377, + 33.922194 + ], + [ + -117.87839, + 33.922233 + ], + [ + -117.878364, + 33.922282 + ], + [ + -117.878514, + 33.922345 + ], + [ + -117.878527, + 33.922384 + ], + [ + -117.878377, + 33.922632 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 245143220, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.878377, + 33.921418 + ], + [ + -117.878355, + 33.921455 + ], + [ + -117.87832, + 33.921513 + ], + [ + -117.878248, + 33.92162 + ], + [ + -117.878208, + 33.921674 + ], + [ + -117.878175, + 33.921796 + ], + [ + -117.878184, + 33.921867 + ], + [ + -117.878178, + 33.922012 + ], + [ + -117.878173, + 33.922134 + ], + [ + -117.87813, + 33.922237 + ], + [ + -117.878028, + 33.922326 + ], + [ + -117.877931, + 33.922339 + ], + [ + -117.877872, + 33.922337 + ], + [ + -117.877856, + 33.922364 + ], + [ + -117.877875, + 33.922415 + ], + [ + -117.877948, + 33.92245 + ], + [ + -117.878119, + 33.922546 + ], + [ + -117.878235, + 33.922637 + ], + [ + -117.878339, + 33.922704 + ], + [ + -117.878422, + 33.922711 + ], + [ + -117.878516, + 33.922671 + ], + [ + -117.878554, + 33.922611 + ], + [ + -117.878575, + 33.92253 + ], + [ + -117.87857, + 33.922497 + ], + [ + -117.878637, + 33.921698 + ], + [ + -117.878661, + 33.921576 + ], + [ + -117.878666, + 33.921531 + ], + [ + -117.878656, + 33.921502 + ], + [ + -117.878564, + 33.921418 + ], + [ + -117.878479, + 33.921386 + ], + [ + -117.878411, + 33.921402 + ], + [ + -117.878377, + 33.921418 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 252997358, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.155556, + 33.914535 + ], + [ + -118.154, + 33.913792 + ], + [ + -118.154537, + 33.913026 + ], + [ + -118.156902, + 33.912777 + ], + [ + -118.156825, + 33.913082 + ], + [ + -118.156639, + 33.913004 + ], + [ + -118.155556, + 33.914535 + ] + ] + ] + }, + "properties": { + "name": "All-American Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 257593962, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.951445, + 34.025801 + ], + [ + -117.951166, + 34.026464 + ], + [ + -117.951048, + 34.027308 + ], + [ + -117.952003, + 34.02798 + ], + [ + -117.951568, + 34.028384 + ], + [ + -117.952898, + 34.029361 + ], + [ + -117.953843, + 34.030056 + ], + [ + -117.953902, + 34.030047 + ], + [ + -117.954036, + 34.029985 + ], + [ + -117.955443, + 34.028632 + ], + [ + -117.951474, + 34.025721 + ], + [ + -117.951445, + 34.025801 + ] + ] + ] + }, + "properties": { + "name": "La Puente Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 261463110, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.901518, + 34.04564 + ], + [ + -117.901721, + 34.045669 + ], + [ + -117.901865, + 34.045527 + ], + [ + -117.901847, + 34.045467 + ], + [ + -117.901822, + 34.045339 + ], + [ + -117.902092, + 34.045255 + ], + [ + -117.902161, + 34.045149 + ], + [ + -117.902161, + 34.04487 + ], + [ + -117.90227, + 34.0446 + ], + [ + -117.902458, + 34.044436 + ], + [ + -117.902517, + 34.044002 + ], + [ + -117.90315, + 34.043093 + ], + [ + -117.903575, + 34.042994 + ], + [ + -117.903941, + 34.042454 + ], + [ + -117.904623, + 34.042232 + ], + [ + -117.905334, + 34.041938 + ], + [ + -117.905325, + 34.041716 + ], + [ + -117.90401, + 34.041618 + ], + [ + -117.902329, + 34.041397 + ], + [ + -117.900648, + 34.041061 + ], + [ + -117.899403, + 34.040627 + ], + [ + -117.898117, + 34.040078 + ], + [ + -117.89792, + 34.040086 + ], + [ + -117.897772, + 34.040365 + ], + [ + -117.897287, + 34.040258 + ], + [ + -117.896635, + 34.040397 + ], + [ + -117.896575, + 34.04075 + ], + [ + -117.896941, + 34.041339 + ], + [ + -117.89786, + 34.042413 + ], + [ + -117.89876, + 34.043584 + ], + [ + -117.899195, + 34.043887 + ], + [ + -117.899237, + 34.044288 + ], + [ + -117.899404, + 34.045004 + ], + [ + -117.899525, + 34.045387 + ], + [ + -117.899578, + 34.04562 + ], + [ + -117.89991, + 34.04556 + ], + [ + -117.900846, + 34.045608 + ], + [ + -117.901518, + 34.04564 + ] + ] + ] + }, + "properties": { + "name": "Galster Wilderness Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 261470304, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.915844, + 34.038005 + ], + [ + -117.916007, + 34.038065 + ], + [ + -117.916279, + 34.038253 + ], + [ + -117.916587, + 34.038523 + ], + [ + -117.916614, + 34.039109 + ], + [ + -117.916189, + 34.039567 + ], + [ + -117.916361, + 34.03998 + ], + [ + -117.91632, + 34.040009 + ], + [ + -117.916053, + 34.040205 + ], + [ + -117.915835, + 34.040317 + ], + [ + -117.915763, + 34.040948 + ], + [ + -117.91531, + 34.042149 + ], + [ + -117.915065, + 34.042675 + ], + [ + -117.914739, + 34.042892 + ], + [ + -117.914096, + 34.0432 + ], + [ + -117.913724, + 34.043335 + ], + [ + -117.913788, + 34.043268 + ], + [ + -117.914721, + 34.04281 + ], + [ + -117.915056, + 34.042209 + ], + [ + -117.915346, + 34.041466 + ], + [ + -117.915482, + 34.04067 + ], + [ + -117.915092, + 34.04055 + ], + [ + -117.914667, + 34.04034 + ], + [ + -117.914304, + 34.04007 + ], + [ + -117.914377, + 34.039837 + ], + [ + -117.914359, + 34.039282 + ], + [ + -117.91454, + 34.038741 + ], + [ + -117.914812, + 34.038478 + ], + [ + -117.915047, + 34.038283 + ], + [ + -117.915482, + 34.038185 + ], + [ + -117.915482, + 34.038133 + ], + [ + -117.915669, + 34.038067 + ], + [ + -117.915844, + 34.038005 + ] + ] + ] + }, + "properties": { + "name": "Woodgrove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 271244449, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.034745, + 34.145943 + ], + [ + -118.034738, + 34.145608 + ], + [ + -118.034348, + 34.145614 + ], + [ + -118.034356, + 34.145949 + ], + [ + -118.034745, + 34.145943 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 279947448, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.819505, + 34.030638 + ], + [ + -117.819062, + 34.030629 + ], + [ + -117.818973, + 34.031367 + ], + [ + -117.818751, + 34.032139 + ], + [ + -117.818425, + 34.032693 + ], + [ + -117.818088, + 34.033146 + ], + [ + -117.817438, + 34.033826 + ], + [ + -117.818069, + 34.034249 + ], + [ + -117.818751, + 34.033595 + ], + [ + -117.819711, + 34.032619 + ], + [ + -117.820392, + 34.031899 + ], + [ + -117.821012, + 34.031165 + ], + [ + -117.821127, + 34.030936 + ], + [ + -117.82114, + 34.030766 + ], + [ + -117.820709, + 34.030281 + ], + [ + -117.820118, + 34.030359 + ], + [ + -117.81948, + 34.03044 + ], + [ + -117.819505, + 34.030638 + ] + ] + ] + }, + "properties": { + "name": "Diamond Bar Pony Baseball Fields", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 291377661, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.990666, + 34.146804 + ], + [ + -117.986452, + 34.146813 + ], + [ + -117.986442, + 34.144506 + ], + [ + -117.986546, + 34.144473 + ], + [ + -117.987298, + 34.144746 + ], + [ + -117.987861, + 34.144897 + ], + [ + -117.988181, + 34.144968 + ], + [ + -117.988552, + 34.145047 + ], + [ + -117.988935, + 34.145112 + ], + [ + -117.98925, + 34.145148 + ], + [ + -117.989546, + 34.145163 + ], + [ + -117.989879, + 34.145184 + ], + [ + -117.990321, + 34.145188 + ], + [ + -117.990661, + 34.145181 + ], + [ + -117.990666, + 34.146804 + ] + ] + ] + }, + "properties": { + "name": "Recreation Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 291397117, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.827683, + 34.132002 + ], + [ + -117.825387, + 34.132051 + ], + [ + -117.824432, + 34.131993 + ], + [ + -117.823708, + 34.132073 + ], + [ + -117.820376, + 34.13207 + ], + [ + -117.820379, + 34.132505 + ], + [ + -117.819995, + 34.132515 + ], + [ + -117.819583, + 34.13244 + ], + [ + -117.819209, + 34.132204 + ], + [ + -117.817331, + 34.130022 + ], + [ + -117.816746, + 34.129408 + ], + [ + -117.816151, + 34.128964 + ], + [ + -117.815408, + 34.128703 + ], + [ + -117.814781, + 34.128677 + ], + [ + -117.814499, + 34.128597 + ], + [ + -117.814154, + 34.128347 + ], + [ + -117.813743, + 34.12821 + ], + [ + -117.813177, + 34.128143 + ], + [ + -117.813172, + 34.127764 + ], + [ + -117.812475, + 34.127752 + ], + [ + -117.812436, + 34.126804 + ], + [ + -117.812557, + 34.126736 + ], + [ + -117.813121, + 34.126865 + ], + [ + -117.813186, + 34.126708 + ], + [ + -117.81354, + 34.126494 + ], + [ + -117.813631, + 34.125921 + ], + [ + -117.816885, + 34.126518 + ], + [ + -117.816926, + 34.126833 + ], + [ + -117.817477, + 34.127622 + ], + [ + -117.819196, + 34.127868 + ], + [ + -117.819872, + 34.128202 + ], + [ + -117.820369, + 34.128615 + ], + [ + -117.820385, + 34.129783 + ], + [ + -117.82054, + 34.129786 + ], + [ + -117.824858, + 34.129774 + ], + [ + -117.827203, + 34.129792 + ], + [ + -117.828271, + 34.129277 + ], + [ + -117.828367, + 34.129104 + ], + [ + -117.828927, + 34.129213 + ], + [ + -117.829029, + 34.129906 + ], + [ + -117.829018, + 34.131576 + ], + [ + -117.828321, + 34.13158 + ], + [ + -117.827688, + 34.131789 + ], + [ + -117.827683, + 34.132002 + ] + ] + ] + }, + "properties": { + "name": "Glendora Country Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 292765159, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.01027, + 34.070948 + ], + [ + -118.012141, + 34.071615 + ], + [ + -118.011557, + 34.072758 + ], + [ + -118.010648, + 34.072434 + ], + [ + -118.010974, + 34.071789 + ], + [ + -118.010007, + 34.071464 + ], + [ + -118.01027, + 34.070948 + ] + ] + ] + }, + "properties": { + "name": "Zamora Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 293352379, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.911785, + 34.127555 + ], + [ + -117.910758, + 34.127542 + ], + [ + -117.910766, + 34.127318 + ], + [ + -117.91079, + 34.127151 + ], + [ + -117.910831, + 34.127009 + ], + [ + -117.910906, + 34.126889 + ], + [ + -117.911005, + 34.126791 + ], + [ + -117.911144, + 34.126729 + ], + [ + -117.911319, + 34.126672 + ], + [ + -117.91149, + 34.126654 + ], + [ + -117.911788, + 34.126647 + ], + [ + -117.911855, + 34.127504 + ], + [ + -117.911785, + 34.127555 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 293353062, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.911677, + 34.12787 + ], + [ + -117.911512, + 34.12787 + ], + [ + -117.911512, + 34.127639 + ], + [ + -117.911677, + 34.12764 + ], + [ + -117.911677, + 34.12787 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 294118812, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.882835, + 34.095231 + ], + [ + -117.882842, + 34.094362 + ], + [ + -117.882844, + 34.094126 + ], + [ + -117.881539, + 34.094118 + ], + [ + -117.881529, + 34.095224 + ], + [ + -117.882835, + 34.095231 + ] + ] + ] + }, + "properties": { + "name": "Kelby Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 296128362, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.05802, + 33.911428 + ], + [ + -118.058003, + 33.913229 + ], + [ + -118.05729, + 33.91324 + ], + [ + -118.055273, + 33.912149 + ], + [ + -118.055268, + 33.909696 + ], + [ + -118.055541, + 33.9097 + ], + [ + -118.05554, + 33.911435 + ], + [ + -118.05802, + 33.911428 + ] + ] + ] + }, + "properties": { + "name": "John Zimmerman Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 296983863, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.972786, + 33.928461 + ], + [ + -117.972735, + 33.928421 + ], + [ + -117.972652, + 33.928423 + ], + [ + -117.97259, + 33.928479 + ], + [ + -117.972598, + 33.928544 + ], + [ + -117.972654, + 33.928582 + ], + [ + -117.972746, + 33.928579 + ], + [ + -117.972786, + 33.928548 + ], + [ + -117.972786, + 33.928461 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 297307528, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.899204, + 34.135782 + ], + [ + -117.898458, + 34.135812 + ], + [ + -117.898482, + 34.136537 + ], + [ + -117.899373, + 34.136576 + ], + [ + -117.899362, + 34.135788 + ], + [ + -117.899204, + 34.135782 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 297307565, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.894302, + 34.134191 + ], + [ + -117.894077, + 34.133601 + ], + [ + -117.893447, + 34.133594 + ], + [ + -117.893438, + 34.134187 + ], + [ + -117.894302, + 34.134191 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 301165194, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.145071, + 34.125694 + ], + [ + -118.145075, + 34.125779 + ], + [ + -118.145057, + 34.125805 + ], + [ + -118.145009, + 34.125819 + ], + [ + -118.144954, + 34.125819 + ], + [ + -118.144815, + 34.125795 + ], + [ + -118.144765, + 34.125771 + ], + [ + -118.144731, + 34.125735 + ], + [ + -118.144732, + 34.125697 + ], + [ + -118.145071, + 34.125694 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 301165196, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.14563, + 34.125667 + ], + [ + -118.144378, + 34.125684 + ], + [ + -118.144378, + 34.125876 + ], + [ + -118.144127, + 34.125876 + ], + [ + -118.144133, + 34.126341 + ], + [ + -118.144202, + 34.126339 + ], + [ + -118.144202, + 34.126559 + ], + [ + -118.145614, + 34.126557 + ], + [ + -118.145634, + 34.126529 + ], + [ + -118.14563, + 34.125667 + ] + ] + ] + }, + "properties": { + "name": "Allendale Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 303532320, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.142266, + 33.921598 + ], + [ + -118.142443, + 33.921432 + ], + [ + -118.142626, + 33.921221 + ], + [ + -118.142881, + 33.920882 + ], + [ + -118.142533, + 33.9207 + ], + [ + -118.142214, + 33.921126 + ], + [ + -118.141827, + 33.920915 + ], + [ + -118.141587, + 33.921233 + ], + [ + -118.142266, + 33.921598 + ] + ] + ] + }, + "properties": { + "name": "Brookshire Children's Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305744371, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.161269, + 33.937587 + ], + [ + -118.164689, + 33.939367 + ], + [ + -118.164957, + 33.939507 + ], + [ + -118.164063, + 33.940418 + ], + [ + -118.162259, + 33.942268 + ], + [ + -118.159141, + 33.940791 + ], + [ + -118.160482, + 33.93898 + ], + [ + -118.156492, + 33.936915 + ], + [ + -118.160122, + 33.932184 + ], + [ + -118.163637, + 33.933844 + ], + [ + -118.164021, + 33.933272 + ], + [ + -118.164344, + 33.933314 + ], + [ + -118.164693, + 33.933251 + ], + [ + -118.165059, + 33.933018 + ], + [ + -118.16608, + 33.935348 + ], + [ + -118.165893, + 33.937431 + ], + [ + -118.165595, + 33.937374 + ], + [ + -118.162192, + 33.935472 + ], + [ + -118.161161, + 33.936774 + ], + [ + -118.161269, + 33.937587 + ] + ] + ] + }, + "properties": { + "name": "Los Amigos Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305747566, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.166434, + 34.064763 + ], + [ + -118.166622, + 34.06376 + ], + [ + -118.166097, + 34.063693 + ], + [ + -118.165909, + 34.064696 + ], + [ + -118.166434, + 34.064763 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305747568, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.153251, + 34.058349 + ], + [ + -118.152865, + 34.05846 + ], + [ + -118.153007, + 34.058797 + ], + [ + -118.153392, + 34.058687 + ], + [ + -118.153251, + 34.058349 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305747570, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.166097, + 34.063693 + ], + [ + -118.166133, + 34.063501 + ], + [ + -118.166737, + 34.063578 + ], + [ + -118.166701, + 34.06377 + ], + [ + -118.166622, + 34.06376 + ], + [ + -118.166097, + 34.063693 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305747571, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.162243, + 34.05978 + ], + [ + -118.162026, + 34.059831 + ], + [ + -118.161354, + 34.059776 + ], + [ + -118.161379, + 34.059648 + ], + [ + -118.160812, + 34.059599 + ], + [ + -118.160799, + 34.059218 + ], + [ + -118.160611, + 34.058643 + ], + [ + -118.160702, + 34.057423 + ], + [ + -118.160644, + 34.056768 + ], + [ + -118.160532, + 34.056715 + ], + [ + -118.160536, + 34.056027 + ], + [ + -118.163106, + 34.056057 + ], + [ + -118.163542, + 34.056263 + ], + [ + -118.163636, + 34.056559 + ], + [ + -118.163748, + 34.057615 + ], + [ + -118.163651, + 34.057707 + ], + [ + -118.163633, + 34.057896 + ], + [ + -118.16368, + 34.058096 + ], + [ + -118.163589, + 34.058542 + ], + [ + -118.163398, + 34.058628 + ], + [ + -118.163048, + 34.059176 + ], + [ + -118.16308, + 34.059534 + ], + [ + -118.162243, + 34.05978 + ] + ] + ] + }, + "properties": { + "name": "Monterey Park Golf Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305753776, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.019086, + 34.099931 + ], + [ + -118.0184, + 34.100293 + ], + [ + -118.017912, + 34.100623 + ], + [ + -118.017109, + 34.101231 + ], + [ + -118.016613, + 34.101817 + ], + [ + -118.015962, + 34.102587 + ], + [ + -118.015829, + 34.102897 + ], + [ + -118.015797, + 34.103138 + ], + [ + -118.015791, + 34.103434 + ], + [ + -118.01635, + 34.10604 + ], + [ + -118.01674, + 34.105983 + ], + [ + -118.016605, + 34.10526 + ], + [ + -118.016941, + 34.104498 + ], + [ + -118.01731, + 34.103668 + ], + [ + -118.017898, + 34.102522 + ], + [ + -118.019262, + 34.102792 + ], + [ + -118.020035, + 34.100225 + ], + [ + -118.019086, + 34.099931 + ] + ] + ] + }, + "properties": { + "name": "Arcadia Par 3 Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305757078, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.946754, + 34.141227 + ], + [ + -117.945551, + 34.141692 + ], + [ + -117.94401, + 34.142089 + ], + [ + -117.943409, + 34.142148 + ], + [ + -117.941478, + 34.141782 + ], + [ + -117.940775, + 34.141708 + ], + [ + -117.940596, + 34.141624 + ], + [ + -117.940513, + 34.141491 + ], + [ + -117.94057, + 34.140798 + ], + [ + -117.941133, + 34.140576 + ], + [ + -117.941721, + 34.140316 + ], + [ + -117.942431, + 34.14011 + ], + [ + -117.943186, + 34.13993 + ], + [ + -117.943441, + 34.139771 + ], + [ + -117.944567, + 34.139412 + ], + [ + -117.946018, + 34.13983 + ], + [ + -117.946773, + 34.13983 + ], + [ + -117.946754, + 34.141227 + ] + ] + ] + }, + "properties": { + "name": "Rancho Duarte Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305764064, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.913199, + 34.143081 + ], + [ + -117.91335, + 34.143082 + ], + [ + -117.913347, + 34.143335 + ], + [ + -117.913196, + 34.143334 + ], + [ + -117.913199, + 34.143081 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305764066, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.913199, + 34.143044 + ], + [ + -117.913199, + 34.143081 + ], + [ + -117.913196, + 34.143334 + ], + [ + -117.913196, + 34.143375 + ], + [ + -117.912599, + 34.14337 + ], + [ + -117.912603, + 34.143039 + ], + [ + -117.913199, + 34.143044 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305764067, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.914311, + 34.142659 + ], + [ + -117.914366, + 34.142705 + ], + [ + -117.914344, + 34.143358 + ], + [ + -117.914001, + 34.143337 + ], + [ + -117.913838, + 34.143269 + ], + [ + -117.913649, + 34.143079 + ], + [ + -117.913534, + 34.142852 + ], + [ + -117.913534, + 34.142653 + ], + [ + -117.914311, + 34.142659 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305764068, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.91417, + 34.14253 + ], + [ + -117.914249, + 34.142461 + ], + [ + -117.914259, + 34.141569 + ], + [ + -117.913901, + 34.141581 + ], + [ + -117.913629, + 34.141633 + ], + [ + -117.913405, + 34.141744 + ], + [ + -117.913275, + 34.141917 + ], + [ + -117.913166, + 34.142204 + ], + [ + -117.91312, + 34.142506 + ], + [ + -117.91417, + 34.14253 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305764069, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.912226, + 34.143396 + ], + [ + -117.909757, + 34.143354 + ], + [ + -117.909766, + 34.142738 + ], + [ + -117.912575, + 34.142755 + ], + [ + -117.912659, + 34.142302 + ], + [ + -117.912821, + 34.142004 + ], + [ + -117.913183, + 34.141985 + ], + [ + -117.913188, + 34.140964 + ], + [ + -117.914413, + 34.140975 + ], + [ + -117.914427, + 34.142443 + ], + [ + -117.916196, + 34.142468 + ], + [ + -117.916198, + 34.143445 + ], + [ + -117.912512, + 34.1434 + ], + [ + -117.912226, + 34.143396 + ] + ] + ] + }, + "properties": { + "name": "Northside Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305767575, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.866949, + 34.11748 + ], + [ + -117.867243, + 34.11667 + ], + [ + -117.867441, + 34.116088 + ], + [ + -117.867454, + 34.114743 + ], + [ + -117.865644, + 34.114711 + ], + [ + -117.865657, + 34.116098 + ], + [ + -117.864308, + 34.116114 + ], + [ + -117.864129, + 34.116215 + ], + [ + -117.864589, + 34.117475 + ], + [ + -117.866949, + 34.11748 + ] + ] + ] + }, + "properties": { + "name": "Glen Oaks Golf & Learning Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305776088, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.945167, + 33.963392 + ], + [ + -117.945596, + 33.964224 + ], + [ + -117.946161, + 33.96489 + ], + [ + -117.946071, + 33.964991 + ], + [ + -117.945876, + 33.964996 + ], + [ + -117.945326, + 33.964627 + ], + [ + -117.945088, + 33.964632 + ], + [ + -117.94502, + 33.964746 + ], + [ + -117.944898, + 33.964939 + ], + [ + -117.943846, + 33.965508 + ], + [ + -117.94373, + 33.965614 + ], + [ + -117.943603, + 33.965578 + ], + [ + -117.943276, + 33.964785 + ], + [ + -117.943302, + 33.964426 + ], + [ + -117.943572, + 33.963716 + ], + [ + -117.943551, + 33.963347 + ], + [ + -117.943408, + 33.963141 + ], + [ + -117.942906, + 33.96276 + ], + [ + -117.94261, + 33.962585 + ], + [ + -117.942499, + 33.962427 + ], + [ + -117.942435, + 33.961998 + ], + [ + -117.942441, + 33.960586 + ], + [ + -117.942272, + 33.960455 + ], + [ + -117.942129, + 33.960389 + ], + [ + -117.94196, + 33.95967 + ], + [ + -117.941637, + 33.959065 + ], + [ + -117.941674, + 33.958894 + ], + [ + -117.942251, + 33.958416 + ], + [ + -117.942446, + 33.958421 + ], + [ + -117.9428, + 33.958561 + ], + [ + -117.944348, + 33.958039 + ], + [ + -117.945876, + 33.957505 + ], + [ + -117.946378, + 33.957255 + ], + [ + -117.946425, + 33.956974 + ], + [ + -117.947007, + 33.956711 + ], + [ + -117.948396, + 33.956286 + ], + [ + -117.949511, + 33.956111 + ], + [ + -117.950679, + 33.956142 + ], + [ + -117.951816, + 33.956203 + ], + [ + -117.952561, + 33.956291 + ], + [ + -117.953079, + 33.956409 + ], + [ + -117.954136, + 33.956225 + ], + [ + -117.954463, + 33.956207 + ], + [ + -117.954627, + 33.956365 + ], + [ + -117.954653, + 33.956676 + ], + [ + -117.954447, + 33.957176 + ], + [ + -117.9544, + 33.958075 + ], + [ + -117.954114, + 33.959065 + ], + [ + -117.954368, + 33.959701 + ], + [ + -117.954638, + 33.960643 + ], + [ + -117.954553, + 33.960928 + ], + [ + -117.954262, + 33.961081 + ], + [ + -117.953961, + 33.961108 + ], + [ + -117.953602, + 33.960889 + ], + [ + -117.953126, + 33.960897 + ], + [ + -117.952122, + 33.960753 + ], + [ + -117.952191, + 33.960516 + ], + [ + -117.952233, + 33.960174 + ], + [ + -117.952613, + 33.959872 + ], + [ + -117.953042, + 33.959683 + ], + [ + -117.953116, + 33.959302 + ], + [ + -117.953015, + 33.958982 + ], + [ + -117.953422, + 33.957763 + ], + [ + -117.95339, + 33.957531 + ], + [ + -117.9533, + 33.957334 + ], + [ + -117.952323, + 33.957882 + ], + [ + -117.951821, + 33.95832 + ], + [ + -117.950336, + 33.959157 + ], + [ + -117.94986, + 33.959511 + ], + [ + -117.949456, + 33.959655 + ], + [ + -117.94901, + 33.959593 + ], + [ + -117.948735, + 33.9596 + ], + [ + -117.947921, + 33.960205 + ], + [ + -117.947694, + 33.960323 + ], + [ + -117.947525, + 33.960297 + ], + [ + -117.947139, + 33.960104 + ], + [ + -117.94697, + 33.960108 + ], + [ + -117.946568, + 33.9602 + ], + [ + -117.945833, + 33.960415 + ], + [ + -117.945601, + 33.960415 + ], + [ + -117.945331, + 33.960222 + ], + [ + -117.944951, + 33.960087 + ], + [ + -117.944576, + 33.960135 + ], + [ + -117.943889, + 33.960599 + ], + [ + -117.943846, + 33.960862 + ], + [ + -117.94391, + 33.961463 + ], + [ + -117.944047, + 33.9617 + ], + [ + -117.944428, + 33.962497 + ], + [ + -117.94465, + 33.962725 + ], + [ + -117.944898, + 33.963194 + ], + [ + -117.945167, + 33.963392 + ] + ] + ] + }, + "properties": { + "name": "Hacienda Golf Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 307236294, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.003057, + 34.149064 + ], + [ + -118.00304, + 34.148124 + ], + [ + -118.001397, + 34.148144 + ], + [ + -118.001126, + 34.148148 + ], + [ + -118.00113, + 34.148359 + ], + [ + -118.001143, + 34.149088 + ], + [ + -118.003057, + 34.149064 + ] + ] + ] + }, + "properties": { + "name": "Library Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 309851919, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.894592, + 34.098161 + ], + [ + -117.896559, + 34.098152 + ], + [ + -117.896555, + 34.099175 + ], + [ + -117.896176, + 34.099174 + ], + [ + -117.896002, + 34.099257 + ], + [ + -117.894615, + 34.099254 + ], + [ + -117.894592, + 34.098161 + ] + ] + ] + }, + "properties": { + "name": "Cypress Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 309851922, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.895211, + 34.098943 + ], + [ + -117.895085, + 34.098943 + ], + [ + -117.894656, + 34.098561 + ], + [ + -117.894749, + 34.098477 + ], + [ + -117.894868, + 34.098421 + ], + [ + -117.894986, + 34.098397 + ], + [ + -117.895128, + 34.098375 + ], + [ + -117.895232, + 34.098381 + ], + [ + -117.895377, + 34.098412 + ], + [ + -117.895484, + 34.098461 + ], + [ + -117.895586, + 34.098552 + ], + [ + -117.895211, + 34.098943 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 309854914, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.902498, + 34.11697 + ], + [ + -117.902491, + 34.115336 + ], + [ + -117.902108, + 34.115342 + ], + [ + -117.901615, + 34.115446 + ], + [ + -117.901351, + 34.115449 + ], + [ + -117.901287, + 34.11545 + ], + [ + -117.901255, + 34.116971 + ], + [ + -117.902444, + 34.11697 + ], + [ + -117.902498, + 34.11697 + ] + ] + ] + }, + "properties": { + "name": "Gladstone Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 309855406, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.024803, + 34.121119 + ], + [ + -118.023838, + 34.121127 + ], + [ + -118.02385, + 34.121831 + ], + [ + -118.024809, + 34.121814 + ], + [ + -118.024805, + 34.121345 + ], + [ + -118.024803, + 34.121119 + ] + ] + ] + }, + "properties": { + "name": "Tierra Verde Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 309855793, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.045908, + 34.103292 + ], + [ + -118.046927, + 34.103167 + ], + [ + -118.04702, + 34.103257 + ], + [ + -118.047049, + 34.103402 + ], + [ + -118.048938, + 34.103139 + ], + [ + -118.048517, + 34.101067 + ], + [ + -118.048494, + 34.101077 + ], + [ + -118.045519, + 34.101484 + ], + [ + -118.045831, + 34.102933 + ], + [ + -118.045908, + 34.103292 + ] + ] + ] + }, + "properties": { + "name": "Live Oak Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 321421876, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.081095, + 33.956516 + ], + [ + -118.081908, + 33.95465 + ], + [ + -118.083809, + 33.955312 + ], + [ + -118.083874, + 33.955344 + ], + [ + -118.083895, + 33.955393 + ], + [ + -118.083296, + 33.956845 + ], + [ + -118.083214, + 33.957054 + ], + [ + -118.083092, + 33.957112 + ], + [ + -118.08306, + 33.957127 + ], + [ + -118.082976, + 33.957101 + ], + [ + -118.082884, + 33.957094 + ], + [ + -118.082766, + 33.957083 + ], + [ + -118.082586, + 33.957017 + ], + [ + -118.081095, + 33.956516 + ] + ] + ] + }, + "properties": { + "name": "Los Nietos Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 321422688, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.082128, + 33.950571 + ], + [ + -118.082168, + 33.950549 + ], + [ + -118.08224, + 33.950556 + ], + [ + -118.082557, + 33.950656 + ], + [ + -118.082954, + 33.950796 + ], + [ + -118.08331, + 33.950983 + ], + [ + -118.083584, + 33.951159 + ], + [ + -118.083597, + 33.951197 + ], + [ + -118.083601, + 33.95126 + ], + [ + -118.083532, + 33.951403 + ], + [ + -118.082728, + 33.952894 + ], + [ + -118.08201, + 33.952612 + ], + [ + -118.082061, + 33.952516 + ], + [ + -118.081263, + 33.952222 + ], + [ + -118.082128, + 33.950571 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 322784195, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.08632, + 34.064026 + ], + [ + -118.086497, + 34.063848 + ], + [ + -118.086626, + 34.063921 + ], + [ + -118.086443, + 34.064117 + ], + [ + -118.08632, + 34.064026 + ] + ] + ] + }, + "properties": { + "name": "Zapopan Park Basketball Court", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 323366590, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.113334, + 34.051922 + ], + [ + -118.11296, + 34.051923 + ], + [ + -118.112959, + 34.051591 + ], + [ + -118.113334, + 34.05159 + ], + [ + -118.113334, + 34.051922 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 324987551, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.130828, + 33.918851 + ], + [ + -118.130829, + 33.9201 + ], + [ + -118.130834, + 33.920129 + ], + [ + -118.130848, + 33.920156 + ], + [ + -118.130881, + 33.920184 + ], + [ + -118.130917, + 33.9202 + ], + [ + -118.130964, + 33.920205 + ], + [ + -118.134024, + 33.920204 + ], + [ + -118.134026, + 33.91884 + ], + [ + -118.130828, + 33.918851 + ] + ] + ] + }, + "properties": { + "name": "Discovery Sports Complex", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 338056953, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.103583, + 33.922652 + ], + [ + -118.103603, + 33.921036 + ], + [ + -118.101502, + 33.920998 + ], + [ + -118.101492, + 33.921489 + ], + [ + -118.103583, + 33.922652 + ] + ] + ] + }, + "properties": { + "name": "Westside Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 338060440, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.139273, + 33.952993 + ], + [ + -118.137328, + 33.951945 + ], + [ + -118.137136, + 33.951842 + ], + [ + -118.135723, + 33.953789 + ], + [ + -118.13786, + 33.954941 + ], + [ + -118.139273, + 33.952993 + ] + ] + ] + }, + "properties": { + "name": "Furman Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 346656455, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.011699, + 33.911687 + ], + [ + -118.011565, + 33.911683 + ], + [ + -118.010902, + 33.912903 + ], + [ + -118.010712, + 33.91315 + ], + [ + -118.010625, + 33.913287 + ], + [ + -118.010547, + 33.913885 + ], + [ + -118.010478, + 33.914317 + ], + [ + -118.010293, + 33.914741 + ], + [ + -118.01017, + 33.914904 + ], + [ + -118.009969, + 33.915074 + ], + [ + -118.009786, + 33.915158 + ], + [ + -118.009643, + 33.915169 + ], + [ + -118.007942, + 33.916671 + ], + [ + -118.008706, + 33.916955 + ], + [ + -118.009985, + 33.915426 + ], + [ + -118.010878, + 33.914772 + ], + [ + -118.010996, + 33.914326 + ], + [ + -118.01107, + 33.914254 + ], + [ + -118.011029, + 33.91348 + ], + [ + -118.01121, + 33.913078 + ], + [ + -118.011353, + 33.912887 + ], + [ + -118.011735, + 33.912861 + ], + [ + -118.011699, + 33.911687 + ] + ] + ] + }, + "properties": { + "name": "La Mirada Lower Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 346656471, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.002421, + 33.91971 + ], + [ + -118.001962, + 33.919844 + ], + [ + -118.00076, + 33.920383 + ], + [ + -118.000422, + 33.920428 + ], + [ + -117.998956, + 33.920465 + ], + [ + -117.994492, + 33.920922 + ], + [ + -117.994505, + 33.922269 + ], + [ + -117.995318, + 33.921711 + ], + [ + -117.995704, + 33.921604 + ], + [ + -117.999338, + 33.921208 + ], + [ + -118.00071, + 33.920987 + ], + [ + -118.001268, + 33.920961 + ], + [ + -118.001724, + 33.920461 + ], + [ + -118.001875, + 33.920407 + ], + [ + -118.002584, + 33.920417 + ], + [ + -118.002474, + 33.920198 + ], + [ + -118.002483, + 33.920117 + ], + [ + -118.002542, + 33.920054 + ], + [ + -118.002421, + 33.91971 + ] + ] + ] + }, + "properties": { + "name": "La Mirada Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 357915179, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.852394, + 33.983184 + ], + [ + -117.852945, + 33.983013 + ], + [ + -117.853463, + 33.982757 + ], + [ + -117.853922, + 33.982454 + ], + [ + -117.854384, + 33.982025 + ], + [ + -117.854501, + 33.981879 + ], + [ + -117.854293, + 33.981766 + ], + [ + -117.853025, + 33.981726 + ], + [ + -117.852264, + 33.981706 + ], + [ + -117.851762, + 33.981701 + ], + [ + -117.851788, + 33.981949 + ], + [ + -117.851915, + 33.982281 + ], + [ + -117.852163, + 33.982689 + ], + [ + -117.852394, + 33.983184 + ] + ] + ] + }, + "properties": { + "name": "Ronald Reagan Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 357915181, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.853452, + 33.982402 + ], + [ + -117.853218, + 33.98213 + ], + [ + -117.852732, + 33.982417 + ], + [ + -117.852965, + 33.982689 + ], + [ + -117.853452, + 33.982402 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 366439552, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.889169, + 33.917637 + ], + [ + -117.889157, + 33.917649 + ], + [ + -117.889035, + 33.917653 + ], + [ + -117.889015, + 33.917645 + ], + [ + -117.889015, + 33.917613 + ], + [ + -117.889023, + 33.91759 + ], + [ + -117.889038, + 33.917572 + ], + [ + -117.889068, + 33.917548 + ], + [ + -117.889099, + 33.917548 + ], + [ + -117.889139, + 33.917563 + ], + [ + -117.889162, + 33.91758 + ], + [ + -117.88917, + 33.91761 + ], + [ + -117.889169, + 33.917637 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 367552169, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.825647, + 33.920104 + ], + [ + -117.825733, + 33.918998 + ], + [ + -117.825729, + 33.918295 + ], + [ + -117.826382, + 33.918578 + ], + [ + -117.826695, + 33.918252 + ], + [ + -117.826753, + 33.918253 + ], + [ + -117.828404, + 33.918302 + ], + [ + -117.829483, + 33.918351 + ], + [ + -117.831014, + 33.918387 + ], + [ + -117.835099, + 33.91845 + ], + [ + -117.835483, + 33.918062 + ], + [ + -117.835487, + 33.91805 + ], + [ + -117.835867, + 33.91699 + ], + [ + -117.836471, + 33.916659 + ], + [ + -117.836904, + 33.916481 + ], + [ + -117.83698, + 33.916449 + ], + [ + -117.837001, + 33.916434 + ], + [ + -117.837028, + 33.916435 + ], + [ + -117.837316, + 33.916384 + ], + [ + -117.837401, + 33.916382 + ], + [ + -117.83755, + 33.916405 + ], + [ + -117.837785, + 33.916415 + ], + [ + -117.837893, + 33.916383 + ], + [ + -117.838046, + 33.916319 + ], + [ + -117.838091, + 33.916313 + ], + [ + -117.838206, + 33.916245 + ], + [ + -117.838275, + 33.916142 + ], + [ + -117.838304, + 33.916017 + ], + [ + -117.838301, + 33.915664 + ], + [ + -117.838348, + 33.915478 + ], + [ + -117.838415, + 33.915388 + ], + [ + -117.838551, + 33.915271 + ], + [ + -117.838723, + 33.915141 + ], + [ + -117.838729, + 33.915068 + ], + [ + -117.83868, + 33.915012 + ], + [ + -117.838633, + 33.915005 + ], + [ + -117.838526, + 33.915063 + ], + [ + -117.838457, + 33.91512 + ], + [ + -117.838307, + 33.915173 + ], + [ + -117.838143, + 33.915208 + ], + [ + -117.837941, + 33.9152 + ], + [ + -117.837812, + 33.915227 + ], + [ + -117.837686, + 33.915286 + ], + [ + -117.837603, + 33.915338 + ], + [ + -117.837581, + 33.915291 + ], + [ + -117.837636, + 33.915206 + ], + [ + -117.837766, + 33.915038 + ], + [ + -117.837809, + 33.914993 + ], + [ + -117.837844, + 33.91493 + ], + [ + -117.837803, + 33.914844 + ], + [ + -117.83772, + 33.914838 + ], + [ + -117.837627, + 33.914907 + ], + [ + -117.837461, + 33.914984 + ], + [ + -117.837307, + 33.915037 + ], + [ + -117.83701, + 33.915042 + ], + [ + -117.836743, + 33.915099 + ], + [ + -117.836594, + 33.915139 + ], + [ + -117.836499, + 33.915147 + ], + [ + -117.836318, + 33.915112 + ], + [ + -117.836095, + 33.915096 + ], + [ + -117.835924, + 33.91509 + ], + [ + -117.835753, + 33.915072 + ], + [ + -117.835668, + 33.915094 + ], + [ + -117.835514, + 33.915205 + ], + [ + -117.835387, + 33.915293 + ], + [ + -117.835318, + 33.915306 + ], + [ + -117.83525, + 33.915306 + ], + [ + -117.835169, + 33.915306 + ], + [ + -117.834961, + 33.915227 + ], + [ + -117.834776, + 33.915076 + ], + [ + -117.834627, + 33.914896 + ], + [ + -117.834468, + 33.914651 + ], + [ + -117.83434, + 33.914643 + ], + [ + -117.834201, + 33.914669 + ], + [ + -117.833719, + 33.914735 + ], + [ + -117.833543, + 33.914519 + ], + [ + -117.833915, + 33.914288 + ], + [ + -117.83394, + 33.91408 + ], + [ + -117.833542, + 33.913625 + ], + [ + -117.833844, + 33.913477 + ], + [ + -117.834167, + 33.91367 + ], + [ + -117.834586, + 33.913841 + ], + [ + -117.835061, + 33.914032 + ], + [ + -117.835299, + 33.914173 + ], + [ + -117.835353, + 33.914163 + ], + [ + -117.835589, + 33.91407 + ], + [ + -117.835806, + 33.914181 + ], + [ + -117.836086, + 33.914369 + ], + [ + -117.836187, + 33.914239 + ], + [ + -117.836249, + 33.914158 + ], + [ + -117.836225, + 33.914055 + ], + [ + -117.836155, + 33.913845 + ], + [ + -117.836164, + 33.913728 + ], + [ + -117.836272, + 33.913454 + ], + [ + -117.836398, + 33.913119 + ], + [ + -117.836431, + 33.913024 + ], + [ + -117.836667, + 33.911916 + ], + [ + -117.836817, + 33.911517 + ], + [ + -117.83686, + 33.911587 + ], + [ + -117.838075, + 33.912254 + ], + [ + -117.838772, + 33.912669 + ], + [ + -117.841561, + 33.914331 + ], + [ + -117.841913, + 33.91449 + ], + [ + -117.841896, + 33.914731 + ], + [ + -117.842379, + 33.914766 + ], + [ + -117.842507, + 33.915118 + ], + [ + -117.842395, + 33.915406 + ], + [ + -117.841755, + 33.915646 + ], + [ + -117.841819, + 33.916206 + ], + [ + -117.841819, + 33.91643 + ], + [ + -117.841723, + 33.916702 + ], + [ + -117.841577, + 33.916821 + ], + [ + -117.841578, + 33.917084 + ], + [ + -117.841343, + 33.917557 + ], + [ + -117.841213, + 33.918114 + ], + [ + -117.841018, + 33.918509 + ], + [ + -117.840935, + 33.918631 + ], + [ + -117.840266, + 33.9196 + ], + [ + -117.839901, + 33.920131 + ], + [ + -117.839558, + 33.920924 + ], + [ + -117.839692, + 33.921489 + ], + [ + -117.840197, + 33.922379 + ], + [ + -117.840232, + 33.922481 + ], + [ + -117.84027, + 33.922657 + ], + [ + -117.840254, + 33.922953 + ], + [ + -117.837934, + 33.922392 + ], + [ + -117.837193, + 33.922265 + ], + [ + -117.836869, + 33.922214 + ], + [ + -117.836805, + 33.922259 + ], + [ + -117.835804, + 33.922227 + ], + [ + -117.83453, + 33.922305 + ], + [ + -117.833599, + 33.922328 + ], + [ + -117.833135, + 33.922301 + ], + [ + -117.832215, + 33.922176 + ], + [ + -117.831609, + 33.922014 + ], + [ + -117.830472, + 33.921589 + ], + [ + -117.83018, + 33.921484 + ], + [ + -117.829809, + 33.921362 + ], + [ + -117.828599, + 33.921021 + ], + [ + -117.825647, + 33.920104 + ] + ] + ] + }, + "properties": { + "name": "Carbon Canyon Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 373166953, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.933301, + 33.93814 + ], + [ + -117.933238, + 33.938137 + ], + [ + -117.933238, + 33.938186 + ], + [ + -117.933219, + 33.938186 + ], + [ + -117.933219, + 33.938227 + ], + [ + -117.933234, + 33.938257 + ], + [ + -117.933259, + 33.93831 + ], + [ + -117.933251, + 33.938503 + ], + [ + -117.933238, + 33.938534 + ], + [ + -117.933212, + 33.938589 + ], + [ + -117.933215, + 33.938895 + ], + [ + -117.933234, + 33.938935 + ], + [ + -117.933274, + 33.938964 + ], + [ + -117.933308, + 33.938978 + ], + [ + -117.933333, + 33.938982 + ], + [ + -117.933537, + 33.938979 + ], + [ + -117.933567, + 33.938981 + ], + [ + -117.933597, + 33.938986 + ], + [ + -117.933644, + 33.938994 + ], + [ + -117.934318, + 33.938991 + ], + [ + -117.934356, + 33.938967 + ], + [ + -117.934276, + 33.938947 + ], + [ + -117.934086, + 33.938872 + ], + [ + -117.933885, + 33.938783 + ], + [ + -117.933714, + 33.938685 + ], + [ + -117.933502, + 33.938482 + ], + [ + -117.933392, + 33.938344 + ], + [ + -117.933327, + 33.938211 + ], + [ + -117.933301, + 33.93814 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 374530317, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.9626, + 34.018312 + ], + [ + -117.962938, + 34.017907 + ], + [ + -117.96319, + 34.017905 + ], + [ + -117.963233, + 34.018034 + ], + [ + -117.963346, + 34.018141 + ], + [ + -117.965046, + 34.019099 + ], + [ + -117.965202, + 34.019139 + ], + [ + -117.965521, + 34.019079 + ], + [ + -117.965672, + 34.019388 + ], + [ + -117.965711, + 34.019546 + ], + [ + -117.965988, + 34.01977 + ], + [ + -117.966133, + 34.019841 + ], + [ + -117.966181, + 34.019966 + ], + [ + -117.966017, + 34.020235 + ], + [ + -117.965777, + 34.020375 + ], + [ + -117.965419, + 34.020322 + ], + [ + -117.96517, + 34.020219 + ], + [ + -117.96477, + 34.02015 + ], + [ + -117.964172, + 34.019776 + ], + [ + -117.964644, + 34.01919 + ], + [ + -117.964116, + 34.018894 + ], + [ + -117.964044, + 34.018985 + ], + [ + -117.963728, + 34.019108 + ], + [ + -117.963121, + 34.018792 + ], + [ + -117.9626, + 34.018312 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 381384154, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.97413, + 34.132158 + ], + [ + -117.970945, + 34.132173 + ], + [ + -117.970882, + 34.132146 + ], + [ + -117.970848, + 34.131694 + ], + [ + -117.970866, + 34.131136 + ], + [ + -117.970917, + 34.131053 + ], + [ + -117.971504, + 34.131049 + ], + [ + -117.971898, + 34.130939 + ], + [ + -117.972561, + 34.13095 + ], + [ + -117.974123, + 34.130951 + ], + [ + -117.97413, + 34.132158 + ] + ] + ] + }, + "properties": { + "name": "Pioneer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 388758879, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.894636, + 34.086418 + ], + [ + -117.895634, + 34.086422 + ], + [ + -117.895645, + 34.08698 + ], + [ + -117.895678, + 34.087091 + ], + [ + -117.895789, + 34.087204 + ], + [ + -117.895882, + 34.087245 + ], + [ + -117.895961, + 34.08728 + ], + [ + -117.89601, + 34.087292 + ], + [ + -117.896112, + 34.087331 + ], + [ + -117.896132, + 34.088101 + ], + [ + -117.896134, + 34.088203 + ], + [ + -117.89615, + 34.088811 + ], + [ + -117.89608, + 34.088904 + ], + [ + -117.895961, + 34.088937 + ], + [ + -117.895729, + 34.089153 + ], + [ + -117.89566, + 34.089217 + ], + [ + -117.895666, + 34.089768 + ], + [ + -117.895233, + 34.08979 + ], + [ + -117.895179, + 34.089793 + ], + [ + -117.89462, + 34.089821 + ], + [ + -117.894628, + 34.088103 + ], + [ + -117.894636, + 34.086418 + ] + ] + ] + }, + "properties": { + "name": "Covina Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 395180478, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.033307, + 33.973384 + ], + [ + -118.033709, + 33.973442 + ], + [ + -118.033784, + 33.97321 + ], + [ + -118.034421, + 33.973208 + ], + [ + -118.034413, + 33.972525 + ], + [ + -118.033319, + 33.972525 + ], + [ + -118.033307, + 33.973384 + ] + ] + ] + }, + "properties": { + "name": "Friends Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 395180506, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.036804, + 33.969587 + ], + [ + -118.037267, + 33.969588 + ], + [ + -118.037263, + 33.968313 + ], + [ + -118.037234, + 33.968291 + ], + [ + -118.037203, + 33.968266 + ], + [ + -118.036826, + 33.968268 + ], + [ + -118.036816, + 33.968274 + ], + [ + -118.036804, + 33.968281 + ], + [ + -118.036804, + 33.969587 + ] + ] + ] + }, + "properties": { + "name": "Lee Owens Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 397298272, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.12644, + 34.059731 + ], + [ + -118.126438, + 34.059622 + ], + [ + -118.126394, + 34.059622 + ], + [ + -118.126396, + 34.059369 + ], + [ + -118.126389, + 34.059315 + ], + [ + -118.126103, + 34.059319 + ], + [ + -118.125917, + 34.059319 + ], + [ + -118.125697, + 34.059317 + ], + [ + -118.125692, + 34.059123 + ], + [ + -118.125617, + 34.059122 + ], + [ + -118.12562, + 34.059354 + ], + [ + -118.125626, + 34.059737 + ], + [ + -118.12644, + 34.059731 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 406399960, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.972751, + 34.003524 + ], + [ + -117.975299, + 34.004289 + ], + [ + -117.975847, + 34.002599 + ], + [ + -117.973304, + 34.001843 + ], + [ + -117.972751, + 34.003524 + ] + ] + ] + }, + "properties": { + "name": "Manzanita Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 407630741, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.897644, + 33.921218 + ], + [ + -117.897542, + 33.921222 + ], + [ + -117.896877, + 33.921233 + ], + [ + -117.896789, + 33.921237 + ], + [ + -117.896646, + 33.921242 + ], + [ + -117.896462, + 33.921244 + ], + [ + -117.896375, + 33.921244 + ], + [ + -117.895956, + 33.921251 + ], + [ + -117.892833, + 33.921326 + ], + [ + -117.892529, + 33.921336 + ], + [ + -117.891786, + 33.921348 + ], + [ + -117.891771, + 33.921357 + ], + [ + -117.891008, + 33.921374 + ], + [ + -117.889503, + 33.921402 + ], + [ + -117.88934, + 33.921406 + ], + [ + -117.88911, + 33.921412 + ], + [ + -117.888429, + 33.921428 + ], + [ + -117.885058, + 33.921509 + ], + [ + -117.883099, + 33.921556 + ], + [ + -117.883032, + 33.921558 + ], + [ + -117.883002, + 33.921906 + ], + [ + -117.884427, + 33.921867 + ], + [ + -117.884986, + 33.921858 + ], + [ + -117.885019, + 33.921858 + ], + [ + -117.885548, + 33.921844 + ], + [ + -117.885663, + 33.921844 + ], + [ + -117.88646, + 33.921825 + ], + [ + -117.886461, + 33.921834 + ], + [ + -117.887717, + 33.921788 + ], + [ + -117.888, + 33.921786 + ], + [ + -117.891521, + 33.921702 + ], + [ + -117.892163, + 33.921687 + ], + [ + -117.893083, + 33.921663 + ], + [ + -117.893193, + 33.921649 + ], + [ + -117.89353, + 33.921643 + ], + [ + -117.894263, + 33.921629 + ], + [ + -117.895443, + 33.921608 + ], + [ + -117.895713, + 33.9216 + ], + [ + -117.895861, + 33.921597 + ], + [ + -117.896714, + 33.921577 + ], + [ + -117.89682, + 33.921583 + ], + [ + -117.897463, + 33.921556 + ], + [ + -117.897644, + 33.921218 + ] + ] + ] + }, + "properties": { + "name": "Tracks at Brea", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 418594554, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.959048, + 33.958102 + ], + [ + -117.959285, + 33.957994 + ], + [ + -117.959434, + 33.957867 + ], + [ + -117.959495, + 33.957833 + ], + [ + -117.959561, + 33.957809 + ], + [ + -117.959778, + 33.957759 + ], + [ + -117.959731, + 33.9576 + ], + [ + -117.959721, + 33.957537 + ], + [ + -117.959714, + 33.957484 + ], + [ + -117.959715, + 33.957433 + ], + [ + -117.959719, + 33.957378 + ], + [ + -117.959748, + 33.95723 + ], + [ + -117.959755, + 33.957182 + ], + [ + -117.95976, + 33.957124 + ], + [ + -117.959759, + 33.957074 + ], + [ + -117.959753, + 33.95702 + ], + [ + -117.959743, + 33.956969 + ], + [ + -117.959731, + 33.956923 + ], + [ + -117.959696, + 33.956827 + ], + [ + -117.959686, + 33.95683 + ], + [ + -117.959362, + 33.956203 + ], + [ + -117.959265, + 33.95584 + ], + [ + -117.959232, + 33.955748 + ], + [ + -117.958975, + 33.955262 + ], + [ + -117.958696, + 33.955369 + ], + [ + -117.958321, + 33.95593 + ], + [ + -117.958075, + 33.956452 + ], + [ + -117.958003, + 33.956642 + ], + [ + -117.957984, + 33.956724 + ], + [ + -117.957971, + 33.956802 + ], + [ + -117.957967, + 33.95686 + ], + [ + -117.957972, + 33.956944 + ], + [ + -117.957984, + 33.957031 + ], + [ + -117.958079, + 33.957346 + ], + [ + -117.958253, + 33.957752 + ], + [ + -117.958872, + 33.958014 + ], + [ + -117.958832, + 33.958079 + ], + [ + -117.958847, + 33.958117 + ], + [ + -117.95888, + 33.958138 + ], + [ + -117.959048, + 33.958102 + ] + ] + ] + }, + "properties": { + "name": "Hacienda Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 420845365, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.026014, + 33.975871 + ], + [ + -118.026013, + 33.976197 + ], + [ + -118.027189, + 33.976219 + ], + [ + -118.027195, + 33.975885 + ], + [ + -118.026014, + 33.975871 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 429008413, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.861703, + 34.137809 + ], + [ + -117.861732, + 34.13784 + ], + [ + -117.862175, + 34.137822 + ], + [ + -117.862159, + 34.137669 + ], + [ + -117.862119, + 34.137593 + ], + [ + -117.862054, + 34.137538 + ], + [ + -117.861936, + 34.137487 + ], + [ + -117.861832, + 34.137476 + ], + [ + -117.861786, + 34.137487 + ], + [ + -117.861716, + 34.137498 + ], + [ + -117.861703, + 34.137809 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 429008434, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.862722, + 34.136758 + ], + [ + -117.862076, + 34.136861 + ], + [ + -117.86152, + 34.137007 + ], + [ + -117.861232, + 34.137009 + ], + [ + -117.861191, + 34.137009 + ], + [ + -117.861191, + 34.137063 + ], + [ + -117.860827, + 34.137066 + ], + [ + -117.860016, + 34.137076 + ], + [ + -117.859436, + 34.137078 + ], + [ + -117.859436, + 34.137609 + ], + [ + -117.859447, + 34.138461 + ], + [ + -117.859434, + 34.139038 + ], + [ + -117.860448, + 34.139038 + ], + [ + -117.860445, + 34.138441 + ], + [ + -117.861394, + 34.138438 + ], + [ + -117.861396, + 34.137917 + ], + [ + -117.861453, + 34.137869 + ], + [ + -117.862733, + 34.137873 + ], + [ + -117.862722, + 34.136758 + ] + ] + ] + }, + "properties": { + "name": "Finkbiner Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 429011231, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.889895, + 34.130565 + ], + [ + -117.889909, + 34.13037 + ], + [ + -117.889871, + 34.13031 + ], + [ + -117.889794, + 34.130266 + ], + [ + -117.88949, + 34.130268 + ], + [ + -117.889493, + 34.130561 + ], + [ + -117.889895, + 34.130565 + ] + ] + ] + }, + "properties": { + "name": "Ampitheater", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 430004128, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.820297, + 34.059655 + ], + [ + -117.82023, + 34.059517 + ], + [ + -117.820146, + 34.059356 + ], + [ + -117.820164, + 34.059342 + ], + [ + -117.820177, + 34.059324 + ], + [ + -117.820195, + 34.059322 + ], + [ + -117.820213, + 34.059328 + ], + [ + -117.820231, + 34.059291 + ], + [ + -117.820261, + 34.05926 + ], + [ + -117.820286, + 34.059311 + ], + [ + -117.820302, + 34.059376 + ], + [ + -117.82032, + 34.059435 + ], + [ + -117.820369, + 34.0595 + ], + [ + -117.820386, + 34.059538 + ], + [ + -117.820405, + 34.059601 + ], + [ + -117.820458, + 34.059664 + ], + [ + -117.820534, + 34.059717 + ], + [ + -117.820619, + 34.059759 + ], + [ + -117.820668, + 34.059826 + ], + [ + -117.820683, + 34.059888 + ], + [ + -117.820669, + 34.059975 + ], + [ + -117.820617, + 34.060058 + ], + [ + -117.82056, + 34.06011 + ], + [ + -117.820487, + 34.060142 + ], + [ + -117.820289, + 34.060128 + ], + [ + -117.820136, + 34.060133 + ], + [ + -117.820069, + 34.060008 + ], + [ + -117.820297, + 34.059655 + ] + ] + ] + }, + "properties": { + "name": "Japanese Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 432789226, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818247, + 34.051604 + ], + [ + -117.816905, + 34.051063 + ], + [ + -117.815876, + 34.052866 + ], + [ + -117.815919, + 34.052936 + ], + [ + -117.816989, + 34.053371 + ], + [ + -117.817203, + 34.053351 + ], + [ + -117.818247, + 34.051604 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 432789227, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.819984, + 34.052502 + ], + [ + -117.818238, + 34.051794 + ], + [ + -117.818154, + 34.051822 + ], + [ + -117.817171, + 34.053481 + ], + [ + -117.818363, + 34.053952 + ], + [ + -117.819377, + 34.053616 + ], + [ + -117.819984, + 34.052502 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 434304854, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.821295, + 34.057331 + ], + [ + -117.821308, + 34.057352 + ], + [ + -117.8213, + 34.057377 + ], + [ + -117.821185, + 34.057502 + ], + [ + -117.820721, + 34.057705 + ], + [ + -117.820821, + 34.058089 + ], + [ + -117.820734, + 34.05809 + ], + [ + -117.820603, + 34.058115 + ], + [ + -117.820508, + 34.058155 + ], + [ + -117.820486, + 34.058118 + ], + [ + -117.820479, + 34.058108 + ], + [ + -117.820464, + 34.058103 + ], + [ + -117.820402, + 34.058097 + ], + [ + -117.820426, + 34.058021 + ], + [ + -117.820445, + 34.057982 + ], + [ + -117.82047, + 34.057978 + ], + [ + -117.820494, + 34.057967 + ], + [ + -117.820501, + 34.05794 + ], + [ + -117.820486, + 34.057919 + ], + [ + -117.820478, + 34.057896 + ], + [ + -117.820477, + 34.057869 + ], + [ + -117.820583, + 34.057851 + ], + [ + -117.820504, + 34.057768 + ], + [ + -117.820522, + 34.057752 + ], + [ + -117.820539, + 34.057741 + ], + [ + -117.820547, + 34.057733 + ], + [ + -117.820556, + 34.057735 + ], + [ + -117.820591, + 34.057679 + ], + [ + -117.82058, + 34.057673 + ], + [ + -117.820612, + 34.057633 + ], + [ + -117.820628, + 34.057593 + ], + [ + -117.820638, + 34.057555 + ], + [ + -117.820661, + 34.057525 + ], + [ + -117.820711, + 34.057485 + ], + [ + -117.820775, + 34.057454 + ], + [ + -117.820863, + 34.057431 + ], + [ + -117.820956, + 34.057422 + ], + [ + -117.821044, + 34.05741 + ], + [ + -117.821129, + 34.057391 + ], + [ + -117.821213, + 34.057362 + ], + [ + -117.821295, + 34.057331 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 434838870, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.823796, + 34.058444 + ], + [ + -117.823857, + 34.058462 + ], + [ + -117.823889, + 34.058473 + ], + [ + -117.823889, + 34.058485 + ], + [ + -117.823869, + 34.058498 + ], + [ + -117.823837, + 34.058501 + ], + [ + -117.823805, + 34.058506 + ], + [ + -117.823786, + 34.058522 + ], + [ + -117.823764, + 34.058517 + ], + [ + -117.823754, + 34.058496 + ], + [ + -117.823753, + 34.058466 + ], + [ + -117.823755, + 34.058447 + ], + [ + -117.823775, + 34.058438 + ], + [ + -117.823796, + 34.058444 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 435173507, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.826735, + 34.054732 + ], + [ + -117.826482, + 34.05437 + ], + [ + -117.826272, + 34.05418 + ], + [ + -117.82593, + 34.054137 + ], + [ + -117.825256, + 34.054191 + ], + [ + -117.824616, + 34.054151 + ], + [ + -117.824173, + 34.053919 + ], + [ + -117.822456, + 34.053747 + ], + [ + -117.822064, + 34.05446 + ], + [ + -117.821343, + 34.055001 + ], + [ + -117.821327, + 34.055214 + ], + [ + -117.821776, + 34.055858 + ], + [ + -117.822325, + 34.055648 + ], + [ + -117.822702, + 34.055752 + ], + [ + -117.823104, + 34.056291 + ], + [ + -117.823134, + 34.056348 + ], + [ + -117.82333, + 34.056724 + ], + [ + -117.823598, + 34.057156 + ], + [ + -117.823758, + 34.057151 + ], + [ + -117.823878, + 34.05706 + ], + [ + -117.823928, + 34.056975 + ], + [ + -117.823896, + 34.056818 + ], + [ + -117.823785, + 34.05667 + ], + [ + -117.823775, + 34.056569 + ], + [ + -117.823687, + 34.05657 + ], + [ + -117.823684, + 34.056555 + ], + [ + -117.823772, + 34.056551 + ], + [ + -117.823765, + 34.056474 + ], + [ + -117.823973, + 34.056376 + ], + [ + -117.82419, + 34.056344 + ], + [ + -117.824378, + 34.056334 + ], + [ + -117.824619, + 34.056328 + ], + [ + -117.824857, + 34.056004 + ], + [ + -117.824786, + 34.05571 + ], + [ + -117.82488, + 34.055632 + ], + [ + -117.824772, + 34.055471 + ], + [ + -117.824526, + 34.055542 + ], + [ + -117.823901, + 34.055331 + ], + [ + -117.823521, + 34.055052 + ], + [ + -117.823053, + 34.054993 + ], + [ + -117.8229, + 34.054814 + ], + [ + -117.822997, + 34.054524 + ], + [ + -117.823637, + 34.05452 + ], + [ + -117.824164, + 34.054471 + ], + [ + -117.824641, + 34.054904 + ], + [ + -117.824905, + 34.054734 + ], + [ + -117.825082, + 34.054957 + ], + [ + -117.825594, + 34.054737 + ], + [ + -117.825868, + 34.054754 + ], + [ + -117.826002, + 34.054972 + ], + [ + -117.825952, + 34.055211 + ], + [ + -117.826037, + 34.055387 + ], + [ + -117.826365, + 34.055732 + ], + [ + -117.826412, + 34.055952 + ], + [ + -117.826641, + 34.055965 + ], + [ + -117.826709, + 34.05567 + ], + [ + -117.826708, + 34.055417 + ], + [ + -117.82651, + 34.055186 + ], + [ + -117.826495, + 34.054865 + ], + [ + -117.826735, + 34.054732 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 436334606, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.860955, + 34.137944 + ], + [ + -117.860952, + 34.137798 + ], + [ + -117.860697, + 34.137791 + ], + [ + -117.86055, + 34.137891 + ], + [ + -117.860611, + 34.137944 + ], + [ + -117.860955, + 34.137944 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 436492462, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818804, + 34.056919 + ], + [ + -117.818906, + 34.056849 + ], + [ + -117.818974, + 34.056811 + ], + [ + -117.819035, + 34.056788 + ], + [ + -117.819085, + 34.056733 + ], + [ + -117.819132, + 34.056674 + ], + [ + -117.819294, + 34.056829 + ], + [ + -117.81964, + 34.056732 + ], + [ + -117.819609, + 34.056571 + ], + [ + -117.819513, + 34.05647 + ], + [ + -117.819582, + 34.056463 + ], + [ + -117.819632, + 34.056448 + ], + [ + -117.819706, + 34.056444 + ], + [ + -117.819732, + 34.05645 + ], + [ + -117.819865, + 34.056503 + ], + [ + -117.819929, + 34.056515 + ], + [ + -117.819984, + 34.0565 + ], + [ + -117.820032, + 34.056479 + ], + [ + -117.820077, + 34.05643 + ], + [ + -117.820128, + 34.056359 + ], + [ + -117.820164, + 34.056324 + ], + [ + -117.820206, + 34.056305 + ], + [ + -117.820236, + 34.056306 + ], + [ + -117.820263, + 34.056327 + ], + [ + -117.820288, + 34.056336 + ], + [ + -117.820316, + 34.056337 + ], + [ + -117.820376, + 34.056315 + ], + [ + -117.820526, + 34.056223 + ], + [ + -117.820665, + 34.05628 + ], + [ + -117.820664, + 34.056307 + ], + [ + -117.820671, + 34.056342 + ], + [ + -117.820701, + 34.056377 + ], + [ + -117.820743, + 34.056399 + ], + [ + -117.820771, + 34.056403 + ], + [ + -117.820777, + 34.056506 + ], + [ + -117.820772, + 34.05652 + ], + [ + -117.820701, + 34.056458 + ], + [ + -117.820628, + 34.056459 + ], + [ + -117.820563, + 34.056467 + ], + [ + -117.820518, + 34.056485 + ], + [ + -117.820476, + 34.05649 + ], + [ + -117.82038, + 34.056472 + ], + [ + -117.820351, + 34.05648 + ], + [ + -117.820323, + 34.05648 + ], + [ + -117.820304, + 34.056488 + ], + [ + -117.820301, + 34.056507 + ], + [ + -117.820341, + 34.056582 + ], + [ + -117.820382, + 34.056596 + ], + [ + -117.820469, + 34.05661 + ], + [ + -117.820538, + 34.056624 + ], + [ + -117.820515, + 34.056629 + ], + [ + -117.8205, + 34.056643 + ], + [ + -117.820458, + 34.056633 + ], + [ + -117.820436, + 34.056656 + ], + [ + -117.820462, + 34.056696 + ], + [ + -117.820487, + 34.05679 + ], + [ + -117.820127, + 34.056855 + ], + [ + -117.820136, + 34.056829 + ], + [ + -117.820117, + 34.056796 + ], + [ + -117.820075, + 34.056784 + ], + [ + -117.820024, + 34.056801 + ], + [ + -117.819982, + 34.056824 + ], + [ + -117.81993, + 34.05684 + ], + [ + -117.819881, + 34.056863 + ], + [ + -117.819849, + 34.056904 + ], + [ + -117.819851, + 34.056952 + ], + [ + -117.819894, + 34.05699 + ], + [ + -117.819938, + 34.056998 + ], + [ + -117.819956, + 34.057061 + ], + [ + -117.819851, + 34.057081 + ], + [ + -117.819846, + 34.057066 + ], + [ + -117.819783, + 34.057074 + ], + [ + -117.819795, + 34.057127 + ], + [ + -117.819859, + 34.057117 + ], + [ + -117.819853, + 34.057103 + ], + [ + -117.819958, + 34.057084 + ], + [ + -117.819977, + 34.05715 + ], + [ + -117.819953, + 34.057163 + ], + [ + -117.819933, + 34.057198 + ], + [ + -117.819926, + 34.057232 + ], + [ + -117.819938, + 34.057264 + ], + [ + -117.819958, + 34.057283 + ], + [ + -117.819991, + 34.057298 + ], + [ + -117.820032, + 34.057297 + ], + [ + -117.820067, + 34.057285 + ], + [ + -117.820105, + 34.057278 + ], + [ + -117.820171, + 34.057286 + ], + [ + -117.820209, + 34.057279 + ], + [ + -117.820235, + 34.05726 + ], + [ + -117.820239, + 34.057234 + ], + [ + -117.820227, + 34.057216 + ], + [ + -117.820814, + 34.057113 + ], + [ + -117.820801, + 34.057072 + ], + [ + -117.820816, + 34.05707 + ], + [ + -117.820857, + 34.057048 + ], + [ + -117.820856, + 34.057016 + ], + [ + -117.82086, + 34.056973 + ], + [ + -117.820865, + 34.056932 + ], + [ + -117.820877, + 34.056934 + ], + [ + -117.820939, + 34.056971 + ], + [ + -117.820995, + 34.057023 + ], + [ + -117.821039, + 34.057094 + ], + [ + -117.821064, + 34.057163 + ], + [ + -117.821083, + 34.057253 + ], + [ + -117.821084, + 34.057327 + ], + [ + -117.821001, + 34.057344 + ], + [ + -117.8209, + 34.057351 + ], + [ + -117.820888, + 34.057288 + ], + [ + -117.820927, + 34.057283 + ], + [ + -117.820915, + 34.057229 + ], + [ + -117.820775, + 34.057249 + ], + [ + -117.820787, + 34.057302 + ], + [ + -117.820869, + 34.057291 + ], + [ + -117.820884, + 34.057354 + ], + [ + -117.820822, + 34.057364 + ], + [ + -117.820742, + 34.057386 + ], + [ + -117.820683, + 34.057412 + ], + [ + -117.820632, + 34.057445 + ], + [ + -117.820588, + 34.057482 + ], + [ + -117.820552, + 34.057525 + ], + [ + -117.820521, + 34.057571 + ], + [ + -117.820494, + 34.057621 + ], + [ + -117.820457, + 34.057657 + ], + [ + -117.820315, + 34.057516 + ], + [ + -117.820009, + 34.057646 + ], + [ + -117.819776, + 34.057732 + ], + [ + -117.819469, + 34.057702 + ], + [ + -117.819279, + 34.057621 + ], + [ + -117.819142, + 34.057479 + ], + [ + -117.819124, + 34.057447 + ], + [ + -117.819136, + 34.057443 + ], + [ + -117.819116, + 34.057402 + ], + [ + -117.819088, + 34.057359 + ], + [ + -117.819076, + 34.057363 + ], + [ + -117.81903, + 34.057311 + ], + [ + -117.818975, + 34.05727 + ], + [ + -117.818933, + 34.057242 + ], + [ + -117.818916, + 34.057227 + ], + [ + -117.818893, + 34.05722 + ], + [ + -117.81886, + 34.057192 + ], + [ + -117.818832, + 34.057142 + ], + [ + -117.818818, + 34.057065 + ], + [ + -117.818812, + 34.056992 + ], + [ + -117.818804, + 34.056919 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 436654290, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.823099, + 34.056919 + ], + [ + -117.823237, + 34.057135 + ], + [ + -117.823404, + 34.057066 + ], + [ + -117.823414, + 34.057082 + ], + [ + -117.823329, + 34.057121 + ], + [ + -117.823364, + 34.057177 + ], + [ + -117.823428, + 34.057155 + ], + [ + -117.823486, + 34.057231 + ], + [ + -117.823296, + 34.057249 + ], + [ + -117.823109, + 34.057265 + ], + [ + -117.823129, + 34.057247 + ], + [ + -117.823074, + 34.057204 + ], + [ + -117.822988, + 34.057183 + ], + [ + -117.822982, + 34.057219 + ], + [ + -117.822935, + 34.057224 + ], + [ + -117.822885, + 34.057246 + ], + [ + -117.822846, + 34.057282 + ], + [ + -117.822833, + 34.057318 + ], + [ + -117.82278, + 34.057324 + ], + [ + -117.822779, + 34.057282 + ], + [ + -117.822779, + 34.057249 + ], + [ + -117.822794, + 34.057221 + ], + [ + -117.822818, + 34.0572 + ], + [ + -117.823155, + 34.057057 + ], + [ + -117.823076, + 34.056927 + ], + [ + -117.823099, + 34.056919 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 438446176, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.827066, + 34.057922 + ], + [ + -117.827027, + 34.057859 + ], + [ + -117.827123, + 34.057819 + ], + [ + -117.827072, + 34.057735 + ], + [ + -117.826926, + 34.057496 + ], + [ + -117.826976, + 34.057475 + ], + [ + -117.827, + 34.057501 + ], + [ + -117.827039, + 34.057515 + ], + [ + -117.827248, + 34.057842 + ], + [ + -117.827066, + 34.057922 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 438457660, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.821826, + 34.057125 + ], + [ + -117.82181, + 34.057099 + ], + [ + -117.821765, + 34.057114 + ], + [ + -117.821717, + 34.057115 + ], + [ + -117.821686, + 34.057062 + ], + [ + -117.821671, + 34.057067 + ], + [ + -117.821613, + 34.056981 + ], + [ + -117.821601, + 34.056985 + ], + [ + -117.821601, + 34.056996 + ], + [ + -117.821559, + 34.057039 + ], + [ + -117.821515, + 34.05707 + ], + [ + -117.821568, + 34.057116 + ], + [ + -117.821633, + 34.057152 + ], + [ + -117.82171, + 34.057166 + ], + [ + -117.82177, + 34.057153 + ], + [ + -117.821826, + 34.057125 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 438457666, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.820808, + 34.057932 + ], + [ + -117.820858, + 34.05811 + ], + [ + -117.82097, + 34.058135 + ], + [ + -117.821074, + 34.058174 + ], + [ + -117.821226, + 34.058235 + ], + [ + -117.82118, + 34.058104 + ], + [ + -117.820808, + 34.057932 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440103909, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.03493, + 33.981652 + ], + [ + -118.03493, + 33.980968 + ], + [ + -118.033941, + 33.980967 + ], + [ + -118.033946, + 33.981651 + ], + [ + -118.03493, + 33.981652 + ] + ] + ] + }, + "properties": { + "name": "Central Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440150647, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.825581, + 34.079307 + ], + [ + -117.825645, + 34.079951 + ], + [ + -117.827557, + 34.079821 + ], + [ + -117.82746, + 34.078841 + ], + [ + -117.827406, + 34.078845 + ], + [ + -117.827278, + 34.078853 + ], + [ + -117.82627, + 34.078922 + ], + [ + -117.826304, + 34.079257 + ], + [ + -117.825581, + 34.079307 + ] + ] + ] + }, + "properties": { + "name": "Ladera Serra Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440235961, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.881472, + 34.07802 + ], + [ + -117.882172, + 34.078049 + ], + [ + -117.882777, + 34.078265 + ], + [ + -117.883516, + 34.07773 + ], + [ + -117.883472, + 34.076928 + ], + [ + -117.882546, + 34.076927 + ], + [ + -117.882213, + 34.076924 + ], + [ + -117.882126, + 34.076983 + ], + [ + -117.881927, + 34.077146 + ], + [ + -117.881702, + 34.076946 + ], + [ + -117.881698, + 34.077185 + ], + [ + -117.881692, + 34.077475 + ], + [ + -117.881626, + 34.077504 + ], + [ + -117.881595, + 34.077602 + ], + [ + -117.881469, + 34.077648 + ], + [ + -117.881469, + 34.077697 + ], + [ + -117.881472, + 34.07802 + ] + ] + ] + }, + "properties": { + "name": "Barranca Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440807529, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.029327, + 33.955948 + ], + [ + -118.029097, + 33.95579 + ], + [ + -118.029077, + 33.955783 + ], + [ + -118.029043, + 33.955785 + ], + [ + -118.029022, + 33.955801 + ], + [ + -118.028311, + 33.956503 + ], + [ + -118.028578, + 33.956684 + ], + [ + -118.029327, + 33.955948 + ] + ] + ] + }, + "properties": { + "name": "Laurel Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440814617, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.91914, + 34.08104 + ], + [ + -117.917243, + 34.081023 + ], + [ + -117.917214, + 34.08175 + ], + [ + -117.916687, + 34.081757 + ], + [ + -117.916709, + 34.082559 + ], + [ + -117.916711, + 34.082627 + ], + [ + -117.916736, + 34.082688 + ], + [ + -117.916818, + 34.082729 + ], + [ + -117.917413, + 34.08273 + ], + [ + -117.917939, + 34.082731 + ], + [ + -117.918317, + 34.082732 + ], + [ + -117.918772, + 34.082732 + ], + [ + -117.918997, + 34.082709 + ], + [ + -117.919037, + 34.082242 + ], + [ + -117.91914, + 34.08104 + ] + ] + ] + }, + "properties": { + "name": "Palm View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440814618, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.918782, + 34.081201 + ], + [ + -117.918665, + 34.081147 + ], + [ + -117.918432, + 34.081198 + ], + [ + -117.918039, + 34.081342 + ], + [ + -117.918107, + 34.081483 + ], + [ + -117.918192, + 34.081592 + ], + [ + -117.91831, + 34.081673 + ], + [ + -117.918454, + 34.081737 + ], + [ + -117.918614, + 34.08177 + ], + [ + -117.918736, + 34.081769 + ], + [ + -117.918862, + 34.081753 + ], + [ + -117.918875, + 34.081743 + ], + [ + -117.91883, + 34.08139 + ], + [ + -117.918782, + 34.081201 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440814619, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.918104, + 34.082642 + ], + [ + -117.917942, + 34.082636 + ], + [ + -117.917896, + 34.082573 + ], + [ + -117.917683, + 34.082566 + ], + [ + -117.917689, + 34.082431 + ], + [ + -117.91793, + 34.082438 + ], + [ + -117.917953, + 34.082403 + ], + [ + -117.918124, + 34.082408 + ], + [ + -117.918195, + 34.082522 + ], + [ + -117.918104, + 34.082642 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440817583, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.142128, + 34.109409 + ], + [ + -118.142127, + 34.108956 + ], + [ + -118.141331, + 34.108958 + ], + [ + -118.141333, + 34.109411 + ], + [ + -118.142128, + 34.109409 + ] + ] + ] + }, + "properties": { + "name": "Eddie Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440885220, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.900662, + 34.008276 + ], + [ + -117.901509, + 34.008415 + ], + [ + -117.902165, + 34.008523 + ], + [ + -117.901955, + 34.010308 + ], + [ + -117.900472, + 34.010213 + ], + [ + -117.900566, + 34.009261 + ], + [ + -117.900655, + 34.008347 + ], + [ + -117.900662, + 34.008276 + ] + ] + ] + }, + "properties": { + "name": "Sunshine Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 441089866, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.821875, + 34.058796 + ], + [ + -117.821842, + 34.058743 + ], + [ + -117.822179, + 34.058596 + ], + [ + -117.822223, + 34.058658 + ], + [ + -117.822237, + 34.058622 + ], + [ + -117.822264, + 34.058579 + ], + [ + -117.822296, + 34.058536 + ], + [ + -117.822316, + 34.058515 + ], + [ + -117.822301, + 34.05848 + ], + [ + -117.821756, + 34.058711 + ], + [ + -117.821735, + 34.058721 + ], + [ + -117.821726, + 34.058737 + ], + [ + -117.821728, + 34.05875 + ], + [ + -117.821753, + 34.058796 + ], + [ + -117.821775, + 34.058813 + ], + [ + -117.821805, + 34.05882 + ], + [ + -117.821839, + 34.058814 + ], + [ + -117.821875, + 34.058796 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 441098892, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.81925, + 34.061406 + ], + [ + -117.819318, + 34.061454 + ], + [ + -117.819331, + 34.061453 + ], + [ + -117.819335, + 34.061458 + ], + [ + -117.819395, + 34.061445 + ], + [ + -117.819334, + 34.061242 + ], + [ + -117.81939, + 34.061227 + ], + [ + -117.819386, + 34.06122 + ], + [ + -117.819665, + 34.06116 + ], + [ + -117.819749, + 34.061094 + ], + [ + -117.819713, + 34.06107 + ], + [ + -117.819519, + 34.061176 + ], + [ + -117.81917, + 34.061256 + ], + [ + -117.819184, + 34.061291 + ], + [ + -117.819029, + 34.061443 + ], + [ + -117.81905, + 34.061456 + ], + [ + -117.819164, + 34.061351 + ], + [ + -117.819227, + 34.061391 + ], + [ + -117.819244, + 34.061385 + ], + [ + -117.819208, + 34.061261 + ], + [ + -117.819279, + 34.061246 + ], + [ + -117.819329, + 34.061388 + ], + [ + -117.81925, + 34.061406 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 441098895, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.820525, + 34.061488 + ], + [ + -117.820529, + 34.061514 + ], + [ + -117.820462, + 34.061544 + ], + [ + -117.820399, + 34.061648 + ], + [ + -117.819779, + 34.061686 + ], + [ + -117.81918, + 34.061601 + ], + [ + -117.819208, + 34.061569 + ], + [ + -117.819189, + 34.061557 + ], + [ + -117.819167, + 34.061552 + ], + [ + -117.819144, + 34.061558 + ], + [ + -117.819126, + 34.061572 + ], + [ + -117.819114, + 34.061595 + ], + [ + -117.819098, + 34.06166 + ], + [ + -117.819971, + 34.06176 + ], + [ + -117.820195, + 34.061754 + ], + [ + -117.820387, + 34.061711 + ], + [ + -117.820551, + 34.061638 + ], + [ + -117.820551, + 34.061619 + ], + [ + -117.820566, + 34.061597 + ], + [ + -117.820658, + 34.061506 + ], + [ + -117.82069, + 34.061489 + ], + [ + -117.82072, + 34.061483 + ], + [ + -117.820738, + 34.061476 + ], + [ + -117.820783, + 34.061425 + ], + [ + -117.820762, + 34.061412 + ], + [ + -117.820741, + 34.061409 + ], + [ + -117.820716, + 34.061414 + ], + [ + -117.82063, + 34.061463 + ], + [ + -117.820601, + 34.061476 + ], + [ + -117.820568, + 34.061483 + ], + [ + -117.820525, + 34.061488 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 441102268, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.824733, + 34.057394 + ], + [ + -117.824837, + 34.057367 + ], + [ + -117.824861, + 34.057358 + ], + [ + -117.824875, + 34.05734 + ], + [ + -117.824878, + 34.057322 + ], + [ + -117.824823, + 34.057323 + ], + [ + -117.824791, + 34.05733 + ], + [ + -117.824761, + 34.05734 + ], + [ + -117.824744, + 34.057362 + ], + [ + -117.824733, + 34.057394 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442412467, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.974374, + 34.138747 + ], + [ + -117.974361, + 34.137578 + ], + [ + -117.972023, + 34.137597 + ], + [ + -117.972037, + 34.138816 + ], + [ + -117.973173, + 34.138807 + ], + [ + -117.97317, + 34.138545 + ], + [ + -117.973677, + 34.138541 + ], + [ + -117.97368, + 34.138752 + ], + [ + -117.974374, + 34.138747 + ] + ] + ] + }, + "properties": { + "name": "Duarte Sports Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442412468, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.976831, + 34.13738 + ], + [ + -117.976827, + 34.137107 + ], + [ + -117.976678, + 34.137108 + ], + [ + -117.976675, + 34.136892 + ], + [ + -117.974781, + 34.136908 + ], + [ + -117.974774, + 34.136342 + ], + [ + -117.973278, + 34.136355 + ], + [ + -117.973291, + 34.137409 + ], + [ + -117.976831, + 34.13738 + ] + ] + ] + }, + "properties": { + "name": "Duarte Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442412770, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.843938, + 33.973658 + ], + [ + -117.843175, + 33.973249 + ], + [ + -117.842307, + 33.974373 + ], + [ + -117.843037, + 33.974782 + ], + [ + -117.843938, + 33.973658 + ] + ] + ] + }, + "properties": { + "name": "Heritage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442413315, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.898506, + 34.103012 + ], + [ + -117.898557, + 34.100975 + ], + [ + -117.89718, + 34.101109 + ], + [ + -117.897037, + 34.101217 + ], + [ + -117.897053, + 34.103024 + ], + [ + -117.898506, + 34.103012 + ] + ] + ] + }, + "properties": { + "name": "Hollenbeck Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442691835, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.049581, + 34.043689 + ], + [ + -118.048277, + 34.044733 + ], + [ + -118.04751, + 34.044093 + ], + [ + -118.047875, + 34.043795 + ], + [ + -118.047333, + 34.043337 + ], + [ + -118.048261, + 34.042582 + ], + [ + -118.049581, + 34.043689 + ] + ] + ] + }, + "properties": { + "name": "Shiveley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442692087, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.878467, + 34.015014 + ], + [ + -117.877828, + 34.015547 + ], + [ + -117.878016, + 34.015796 + ], + [ + -117.878102, + 34.015992 + ], + [ + -117.878536, + 34.015832 + ], + [ + -117.87895, + 34.015912 + ], + [ + -117.879105, + 34.015574 + ], + [ + -117.879234, + 34.015392 + ], + [ + -117.878467, + 34.015014 + ] + ] + ] + }, + "properties": { + "name": "Walnut Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442692880, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.125851, + 33.973718 + ], + [ + -118.124885, + 33.972072 + ], + [ + -118.126473, + 33.971329 + ], + [ + -118.127213, + 33.97124 + ], + [ + -118.128072, + 33.972036 + ], + [ + -118.12695, + 33.972637 + ], + [ + -118.126757, + 33.97277 + ], + [ + -118.125851, + 33.973718 + ] + ] + ] + }, + "properties": { + "name": "Veterans Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442694451, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.867716, + 34.117642 + ], + [ + -117.865152, + 34.117646 + ], + [ + -117.865141, + 34.117735 + ], + [ + -117.866155, + 34.118322 + ], + [ + -117.867496, + 34.119108 + ], + [ + -117.867711, + 34.119192 + ], + [ + -117.867716, + 34.117642 + ] + ] + ] + }, + "properties": { + "name": "Dawson Avenue Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442694829, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.949338, + 34.063863 + ], + [ + -117.948378, + 34.063143 + ], + [ + -117.946538, + 34.064956 + ], + [ + -117.947536, + 34.065712 + ], + [ + -117.948206, + 34.065574 + ], + [ + -117.947944, + 34.065152 + ], + [ + -117.949338, + 34.063863 + ] + ] + ] + }, + "properties": { + "name": "Orangewood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442694950, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921588, + 34.030215 + ], + [ + -117.919834, + 34.030295 + ], + [ + -117.919814, + 34.030385 + ], + [ + -117.919668, + 34.031047 + ], + [ + -117.919667, + 34.031057 + ], + [ + -117.919666, + 34.031072 + ], + [ + -117.919596, + 34.032012 + ], + [ + -117.919582, + 34.032199 + ], + [ + -117.919571, + 34.03234 + ], + [ + -117.921615, + 34.032229 + ], + [ + -117.921529, + 34.031665 + ], + [ + -117.921588, + 34.030215 + ] + ] + ] + }, + "properties": { + "name": "Rimgrove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 443032267, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.824178, + 34.056364 + ], + [ + -117.824371, + 34.056512 + ], + [ + -117.824429, + 34.056596 + ], + [ + -117.824375, + 34.056623 + ], + [ + -117.824611, + 34.056983 + ], + [ + -117.824783, + 34.056912 + ], + [ + -117.824819, + 34.056973 + ], + [ + -117.825414, + 34.05672 + ], + [ + -117.825535, + 34.056764 + ], + [ + -117.825524, + 34.056837 + ], + [ + -117.82591, + 34.056883 + ], + [ + -117.825965, + 34.056648 + ], + [ + -117.82612, + 34.056643 + ], + [ + -117.826132, + 34.056667 + ], + [ + -117.826299, + 34.056618 + ], + [ + -117.826331, + 34.056676 + ], + [ + -117.826438, + 34.056635 + ], + [ + -117.826521, + 34.056747 + ], + [ + -117.826593, + 34.056726 + ], + [ + -117.826619, + 34.056768 + ], + [ + -117.826555, + 34.056799 + ], + [ + -117.82657, + 34.056837 + ], + [ + -117.826308, + 34.056912 + ], + [ + -117.825924, + 34.057003 + ], + [ + -117.82571, + 34.057041 + ], + [ + -117.825496, + 34.057068 + ], + [ + -117.825453, + 34.057019 + ], + [ + -117.824978, + 34.057174 + ], + [ + -117.824818, + 34.057193 + ], + [ + -117.824695, + 34.057193 + ], + [ + -117.824608, + 34.057172 + ], + [ + -117.824511, + 34.057189 + ], + [ + -117.824442, + 34.057234 + ], + [ + -117.824376, + 34.057283 + ], + [ + -117.824277, + 34.057311 + ], + [ + -117.824179, + 34.057322 + ], + [ + -117.824074, + 34.057319 + ], + [ + -117.823918, + 34.05729 + ], + [ + -117.823762, + 34.057265 + ], + [ + -117.82383, + 34.057197 + ], + [ + -117.823832, + 34.057117 + ], + [ + -117.823899, + 34.057071 + ], + [ + -117.823946, + 34.056983 + ], + [ + -117.82392, + 34.056811 + ], + [ + -117.823809, + 34.056663 + ], + [ + -117.823791, + 34.056486 + ], + [ + -117.823977, + 34.056396 + ], + [ + -117.824178, + 34.056364 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 443132897, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.001039, + 33.935327 + ], + [ + -118.000953, + 33.935407 + ], + [ + -118.000947, + 33.936816 + ], + [ + -118.001055, + 33.936929 + ], + [ + -118.002259, + 33.937508 + ], + [ + -118.003182, + 33.937935 + ], + [ + -118.003198, + 33.936448 + ], + [ + -118.003187, + 33.936248 + ], + [ + -118.00301, + 33.936099 + ], + [ + -118.00301, + 33.935325 + ], + [ + -118.001039, + 33.935327 + ] + ] + ] + }, + "properties": { + "name": "Parnell Park Community and Senior Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 443321704, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818442, + 34.048581 + ], + [ + -117.818446, + 34.048598 + ], + [ + -117.818508, + 34.048606 + ], + [ + -117.818599, + 34.048613 + ], + [ + -117.818828, + 34.048728 + ], + [ + -117.81836, + 34.049304 + ], + [ + -117.818204, + 34.049224 + ], + [ + -117.817897, + 34.049604 + ], + [ + -117.818315, + 34.049819 + ], + [ + -117.81861, + 34.049437 + ], + [ + -117.818461, + 34.049356 + ], + [ + -117.818928, + 34.048772 + ], + [ + -117.819163, + 34.048879 + ], + [ + -117.819241, + 34.048954 + ], + [ + -117.819305, + 34.049018 + ], + [ + -117.819333, + 34.049 + ], + [ + -117.819263, + 34.048927 + ], + [ + -117.819182, + 34.048858 + ], + [ + -117.819085, + 34.048785 + ], + [ + -117.818973, + 34.048725 + ], + [ + -117.81885, + 34.048669 + ], + [ + -117.818736, + 34.048628 + ], + [ + -117.818623, + 34.048592 + ], + [ + -117.818531, + 34.048578 + ], + [ + -117.818442, + 34.048581 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 446395045, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.934107, + 34.054175 + ], + [ + -117.932026, + 34.054158 + ], + [ + -117.932004, + 34.054791 + ], + [ + -117.93211, + 34.054744 + ], + [ + -117.932181, + 34.054744 + ], + [ + -117.932259, + 34.054815 + ], + [ + -117.932273, + 34.054897 + ], + [ + -117.932224, + 34.054938 + ], + [ + -117.93216, + 34.054955 + ], + [ + -117.932075, + 34.054955 + ], + [ + -117.932026, + 34.054932 + ], + [ + -117.932018, + 34.056023 + ], + [ + -117.931877, + 34.056023 + ], + [ + -117.931877, + 34.056257 + ], + [ + -117.932995, + 34.056251 + ], + [ + -117.933087, + 34.056105 + ], + [ + -117.9341, + 34.056075 + ], + [ + -117.934156, + 34.054211 + ], + [ + -117.934107, + 34.054175 + ] + ] + ] + }, + "properties": { + "name": "Walmerado Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 446396785, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.112568, + 33.955867 + ], + [ + -118.111419, + 33.955423 + ], + [ + -118.111155, + 33.955931 + ], + [ + -118.110794, + 33.955694 + ], + [ + -118.110773, + 33.955746 + ], + [ + -118.110735, + 33.955785 + ], + [ + -118.110684, + 33.95579 + ], + [ + -118.110626, + 33.955763 + ], + [ + -118.110606, + 33.955752 + ], + [ + -118.110563, + 33.955727 + ], + [ + -118.110521, + 33.955706 + ], + [ + -118.110477, + 33.955715 + ], + [ + -118.110451, + 33.955764 + ], + [ + -118.110116, + 33.956364 + ], + [ + -118.110512, + 33.956602 + ], + [ + -118.110839, + 33.956799 + ], + [ + -118.111097, + 33.956913 + ], + [ + -118.111292, + 33.956952 + ], + [ + -118.111487, + 33.956954 + ], + [ + -118.111728, + 33.956916 + ], + [ + -118.111968, + 33.95679 + ], + [ + -118.112141, + 33.956648 + ], + [ + -118.112568, + 33.955867 + ] + ] + ] + }, + "properties": { + "name": "Dennis the Menace Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 446397426, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.85728, + 34.099544 + ], + [ + -117.857267, + 34.101686 + ], + [ + -117.85943, + 34.101697 + ], + [ + -117.859461, + 34.099554 + ], + [ + -117.859337, + 34.099553 + ], + [ + -117.85728, + 34.099544 + ] + ] + ] + }, + "properties": { + "name": "Charter Oak Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 450612169, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.050395, + 33.930474 + ], + [ + -118.050405, + 33.93065 + ], + [ + -118.050545, + 33.930692 + ], + [ + -118.050585, + 33.93063 + ], + [ + -118.050607, + 33.930537 + ], + [ + -118.050602, + 33.930445 + ], + [ + -118.050572, + 33.930344 + ], + [ + -118.050544, + 33.930231 + ], + [ + -118.050515, + 33.930185 + ], + [ + -118.050222, + 33.930203 + ], + [ + -118.050222, + 33.930313 + ], + [ + -118.05021, + 33.930332 + ], + [ + -118.050155, + 33.930467 + ], + [ + -118.050395, + 33.930474 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 453219436, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.115024, + 34.041643 + ], + [ + -118.115435, + 34.041267 + ], + [ + -118.115934, + 34.040807 + ], + [ + -118.11627, + 34.04053 + ], + [ + -118.116692, + 34.040848 + ], + [ + -118.117326, + 34.041347 + ], + [ + -118.117313, + 34.041825 + ], + [ + -118.117307, + 34.042497 + ], + [ + -118.117809, + 34.042616 + ], + [ + -118.117811, + 34.04267 + ], + [ + -118.117847, + 34.042762 + ], + [ + -118.117884, + 34.043062 + ], + [ + -118.116889, + 34.042818 + ], + [ + -118.114381, + 34.042215 + ], + [ + -118.115024, + 34.041643 + ] + ] + ] + }, + "properties": { + "name": "La Loma Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 456140001, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.070035, + 33.993811 + ], + [ + -118.070851, + 33.992959 + ], + [ + -118.071266, + 33.993229 + ], + [ + -118.071692, + 33.9928 + ], + [ + -118.072317, + 33.993228 + ], + [ + -118.071594, + 33.994538 + ], + [ + -118.071384, + 33.994751 + ], + [ + -118.070035, + 33.993811 + ] + ] + ] + }, + "properties": { + "name": "Pio Pico State Historical Monument", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 460121914, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.145841, + 34.147455 + ], + [ + -118.144724, + 34.147468 + ], + [ + -118.144715, + 34.147453 + ], + [ + -118.144703, + 34.14744 + ], + [ + -118.144687, + 34.147424 + ], + [ + -118.144673, + 34.147413 + ], + [ + -118.14465, + 34.147399 + ], + [ + -118.144626, + 34.147385 + ], + [ + -118.144604, + 34.147374 + ], + [ + -118.144586, + 34.147364 + ], + [ + -118.144567, + 34.147354 + ], + [ + -118.144543, + 34.147344 + ], + [ + -118.144538, + 34.146866 + ], + [ + -118.14485, + 34.146862 + ], + [ + -118.144851, + 34.147349 + ], + [ + -118.145805, + 34.147341 + ], + [ + -118.145842, + 34.147341 + ], + [ + -118.145841, + 34.147455 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 460121915, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.144547, + 34.148294 + ], + [ + -118.144541, + 34.147954 + ], + [ + -118.14457, + 34.147943 + ], + [ + -118.144592, + 34.147935 + ], + [ + -118.144616, + 34.147922 + ], + [ + -118.144641, + 34.147905 + ], + [ + -118.144664, + 34.147887 + ], + [ + -118.144687, + 34.147868 + ], + [ + -118.144704, + 34.147852 + ], + [ + -118.144724, + 34.147826 + ], + [ + -118.145824, + 34.147813 + ], + [ + -118.145821, + 34.147923 + ], + [ + -118.144887, + 34.147928 + ], + [ + -118.144894, + 34.148081 + ], + [ + -118.144794, + 34.148079 + ], + [ + -118.144803, + 34.148292 + ], + [ + -118.144547, + 34.148294 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461255435, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.049024, + 34.082337 + ], + [ + -118.047784, + 34.081973 + ], + [ + -118.048038, + 34.080933 + ], + [ + -118.049453, + 34.081156 + ], + [ + -118.049405, + 34.081285 + ], + [ + -118.04921, + 34.081812 + ], + [ + -118.049104, + 34.082108 + ], + [ + -118.049024, + 34.082337 + ] + ] + ] + }, + "properties": { + "name": "Mariposa Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461267392, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.10016, + 33.938745 + ], + [ + -118.100055, + 33.938705 + ], + [ + -118.100029, + 33.938649 + ], + [ + -118.099291, + 33.93826 + ], + [ + -118.099205, + 33.938209 + ], + [ + -118.099169, + 33.938175 + ], + [ + -118.09916, + 33.938122 + ], + [ + -118.099127, + 33.938122 + ], + [ + -118.099129, + 33.938092 + ], + [ + -118.099374, + 33.937761 + ], + [ + -118.09949, + 33.937753 + ], + [ + -118.099666, + 33.93775 + ], + [ + -118.099806, + 33.937712 + ], + [ + -118.099889, + 33.937657 + ], + [ + -118.099964, + 33.937581 + ], + [ + -118.100003, + 33.937467 + ], + [ + -118.099999, + 33.937354 + ], + [ + -118.099857, + 33.937009 + ], + [ + -118.099814, + 33.936853 + ], + [ + -118.099811, + 33.936747 + ], + [ + -118.100042, + 33.936144 + ], + [ + -118.100373, + 33.935351 + ], + [ + -118.100428, + 33.935351 + ], + [ + -118.10128, + 33.93532 + ], + [ + -118.10294, + 33.933935 + ], + [ + -118.10306, + 33.933852 + ], + [ + -118.103373, + 33.933611 + ], + [ + -118.103478, + 33.933535 + ], + [ + -118.103553, + 33.933526 + ], + [ + -118.103982, + 33.933529 + ], + [ + -118.104098, + 33.933424 + ], + [ + -118.104711, + 33.933435 + ], + [ + -118.10452, + 33.933655 + ], + [ + -118.103686, + 33.934621 + ], + [ + -118.101938, + 33.936613 + ], + [ + -118.100499, + 33.938282 + ], + [ + -118.10016, + 33.938745 + ] + ] + ] + }, + "properties": { + "name": "Wilderness Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461269405, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.110461, + 33.93121 + ], + [ + -118.110311, + 33.931407 + ], + [ + -118.11046, + 33.931479 + ], + [ + -118.110583, + 33.931305 + ], + [ + -118.110601, + 33.931279 + ], + [ + -118.11047, + 33.931215 + ], + [ + -118.110461, + 33.93121 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461269407, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.109631, + 33.932797 + ], + [ + -118.107694, + 33.931844 + ], + [ + -118.107469, + 33.93174 + ], + [ + -118.107818, + 33.9308 + ], + [ + -118.10833, + 33.929501 + ], + [ + -118.108453, + 33.929527 + ], + [ + -118.110709, + 33.930665 + ], + [ + -118.110637, + 33.930787 + ], + [ + -118.11069, + 33.930816 + ], + [ + -118.110725, + 33.931292 + ], + [ + -118.109631, + 33.932797 + ] + ] + ] + }, + "properties": { + "name": "Rio San Gabriel Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461269418, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.109517, + 33.932311 + ], + [ + -118.109443, + 33.932325 + ], + [ + -118.109422, + 33.932289 + ], + [ + -118.109175, + 33.932166 + ], + [ + -118.109171, + 33.932126 + ], + [ + -118.109094, + 33.932039 + ], + [ + -118.109078, + 33.932009 + ], + [ + -118.109086, + 33.931945 + ], + [ + -118.109128, + 33.931857 + ], + [ + -118.109157, + 33.93181 + ], + [ + -118.109265, + 33.931751 + ], + [ + -118.109368, + 33.931731 + ], + [ + -118.109454, + 33.93174 + ], + [ + -118.109528, + 33.931757 + ], + [ + -118.109596, + 33.931809 + ], + [ + -118.10964, + 33.931866 + ], + [ + -118.109667, + 33.931899 + ], + [ + -118.10967, + 33.931965 + ], + [ + -118.10965, + 33.932014 + ], + [ + -118.109678, + 33.932054 + ], + [ + -118.109518, + 33.932266 + ], + [ + -118.109517, + 33.932311 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461296802, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.072463, + 33.917027 + ], + [ + -118.072444, + 33.916264 + ], + [ + -118.07005, + 33.916264 + ], + [ + -118.070058, + 33.917019 + ], + [ + -118.072463, + 33.917027 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461447457, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.858316, + 34.100144 + ], + [ + -117.858289, + 34.100175 + ], + [ + -117.858252, + 34.100197 + ], + [ + -117.858209, + 34.100208 + ], + [ + -117.858159, + 34.100207 + ], + [ + -117.858114, + 34.100192 + ], + [ + -117.858077, + 34.100165 + ], + [ + -117.858053, + 34.10013 + ], + [ + -117.858045, + 34.10009 + ], + [ + -117.858053, + 34.100049 + ], + [ + -117.858078, + 34.100014 + ], + [ + -117.858115, + 34.099988 + ], + [ + -117.858161, + 34.099974 + ], + [ + -117.858207, + 34.099973 + ], + [ + -117.858251, + 34.099983 + ], + [ + -117.858288, + 34.100005 + ], + [ + -117.858315, + 34.100035 + ], + [ + -117.85833, + 34.100071 + ], + [ + -117.85833, + 34.100109 + ], + [ + -117.858316, + 34.100144 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461447458, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.858799, + 34.099914 + ], + [ + -117.858796, + 34.099832 + ], + [ + -117.858641, + 34.099834 + ], + [ + -117.858643, + 34.099916 + ], + [ + -117.858799, + 34.099914 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461453295, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.025264, + 33.975302 + ], + [ + -118.024806, + 33.974355 + ], + [ + -118.024782, + 33.974285 + ], + [ + -118.024302, + 33.974038 + ], + [ + -118.024297, + 33.974046 + ], + [ + -118.024281, + 33.974072 + ], + [ + -118.024254, + 33.974105 + ], + [ + -118.024158, + 33.974195 + ], + [ + -118.024072, + 33.974262 + ], + [ + -118.023939, + 33.974331 + ], + [ + -118.023793, + 33.97438 + ], + [ + -118.02366, + 33.974405 + ], + [ + -118.023417, + 33.97445 + ], + [ + -118.023109, + 33.974508 + ], + [ + -118.022953, + 33.974532 + ], + [ + -118.022813, + 33.97456 + ], + [ + -118.022722, + 33.974603 + ], + [ + -118.022647, + 33.974679 + ], + [ + -118.022608, + 33.974749 + ], + [ + -118.022591, + 33.974824 + ], + [ + -118.022587, + 33.974897 + ], + [ + -118.022588, + 33.974909 + ], + [ + -118.022596, + 33.974964 + ], + [ + -118.022631, + 33.975033 + ], + [ + -118.022684, + 33.975094 + ], + [ + -118.022756, + 33.975148 + ], + [ + -118.022821, + 33.97518 + ], + [ + -118.022895, + 33.975205 + ], + [ + -118.022998, + 33.975224 + ], + [ + -118.023155, + 33.975222 + ], + [ + -118.023292, + 33.975214 + ], + [ + -118.023429, + 33.975195 + ], + [ + -118.023539, + 33.975176 + ], + [ + -118.023635, + 33.975155 + ], + [ + -118.023717, + 33.975142 + ], + [ + -118.023808, + 33.975131 + ], + [ + -118.023944, + 33.975123 + ], + [ + -118.024089, + 33.975119 + ], + [ + -118.024098, + 33.97512 + ], + [ + -118.024226, + 33.975125 + ], + [ + -118.02439, + 33.975146 + ], + [ + -118.024596, + 33.975192 + ], + [ + -118.024605, + 33.975194 + ], + [ + -118.024734, + 33.975233 + ], + [ + -118.024807, + 33.975259 + ], + [ + -118.024891, + 33.975284 + ], + [ + -118.024986, + 33.975307 + ], + [ + -118.025264, + 33.975302 + ] + ] + ] + }, + "properties": { + "name": "William Penn Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461453298, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.024552, + 33.974814 + ], + [ + -118.024563, + 33.9748 + ], + [ + -118.024585, + 33.974788 + ], + [ + -118.024603, + 33.974781 + ], + [ + -118.024629, + 33.974778 + ], + [ + -118.024659, + 33.974779 + ], + [ + -118.024691, + 33.974774 + ], + [ + -118.024715, + 33.974761 + ], + [ + -118.024732, + 33.974745 + ], + [ + -118.02474, + 33.974731 + ], + [ + -118.024738, + 33.974713 + ], + [ + -118.024726, + 33.974697 + ], + [ + -118.024716, + 33.974672 + ], + [ + -118.024716, + 33.974652 + ], + [ + -118.024721, + 33.974615 + ], + [ + -118.024539, + 33.974609 + ], + [ + -118.024541, + 33.974663 + ], + [ + -118.024541, + 33.974719 + ], + [ + -118.024541, + 33.974752 + ], + [ + -118.024543, + 33.974783 + ], + [ + -118.024546, + 33.9748 + ], + [ + -118.024552, + 33.974814 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461512095, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.865509, + 34.039315 + ], + [ + -117.865069, + 34.039345 + ], + [ + -117.864852, + 34.039353 + ], + [ + -117.864488, + 34.039366 + ], + [ + -117.862937, + 34.0396 + ], + [ + -117.862883, + 34.039618 + ], + [ + -117.86286, + 34.039628 + ], + [ + -117.862844, + 34.03964 + ], + [ + -117.862834, + 34.03965 + ], + [ + -117.862823, + 34.039656 + ], + [ + -117.862812, + 34.03966 + ], + [ + -117.862794, + 34.039664 + ], + [ + -117.862739, + 34.039672 + ], + [ + -117.862697, + 34.039673 + ], + [ + -117.86266, + 34.039673 + ], + [ + -117.86263, + 34.039671 + ], + [ + -117.862595, + 34.039667 + ], + [ + -117.862574, + 34.039662 + ], + [ + -117.862556, + 34.039656 + ], + [ + -117.86254, + 34.03965 + ], + [ + -117.862504, + 34.039637 + ], + [ + -117.86247, + 34.039642 + ], + [ + -117.862469, + 34.039636 + ], + [ + -117.862459, + 34.039638 + ], + [ + -117.862454, + 34.039616 + ], + [ + -117.862445, + 34.039617 + ], + [ + -117.862442, + 34.039606 + ], + [ + -117.862437, + 34.039594 + ], + [ + -117.862432, + 34.039587 + ], + [ + -117.862425, + 34.03958 + ], + [ + -117.862419, + 34.039576 + ], + [ + -117.862411, + 34.039573 + ], + [ + -117.862401, + 34.039571 + ], + [ + -117.862392, + 34.039572 + ], + [ + -117.862377, + 34.039501 + ], + [ + -117.862341, + 34.039507 + ], + [ + -117.862359, + 34.039591 + ], + [ + -117.862395, + 34.039586 + ], + [ + -117.862402, + 34.039586 + ], + [ + -117.862408, + 34.039588 + ], + [ + -117.862412, + 34.039591 + ], + [ + -117.862417, + 34.039598 + ], + [ + -117.862423, + 34.039609 + ], + [ + -117.862426, + 34.03962 + ], + [ + -117.862416, + 34.039622 + ], + [ + -117.86234, + 34.039634 + ], + [ + -117.862166, + 34.03875 + ], + [ + -117.863184, + 34.038564 + ], + [ + -117.865276, + 34.038181 + ], + [ + -117.865509, + 34.039315 + ] + ] + ] + }, + "properties": { + "name": "Walnut Ranch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461512253, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.834766, + 34.099525 + ], + [ + -117.834215, + 34.099533 + ], + [ + -117.833978, + 34.099536 + ], + [ + -117.833154, + 34.099382 + ], + [ + -117.834171, + 34.09916 + ], + [ + -117.834444, + 34.0994 + ], + [ + -117.834766, + 34.099525 + ] + ] + ] + }, + "properties": { + "name": "Briggs Point Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461759932, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.156015, + 34.002015 + ], + [ + -118.155961, + 34.002033 + ], + [ + -118.155907, + 34.002189 + ], + [ + -118.154872, + 34.001824 + ], + [ + -118.154341, + 34.002914 + ], + [ + -118.154363, + 34.003003 + ], + [ + -118.155623, + 34.003447 + ], + [ + -118.156076, + 34.002497 + ], + [ + -118.156235, + 34.002087 + ], + [ + -118.156015, + 34.002015 + ] + ] + ] + }, + "properties": { + "name": "Rosewood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461761567, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.086169, + 33.938909 + ], + [ + -118.086068, + 33.938862 + ], + [ + -118.08552, + 33.938862 + ], + [ + -118.085514, + 33.938082 + ], + [ + -118.084847, + 33.938077 + ], + [ + -118.084598, + 33.938051 + ], + [ + -118.084348, + 33.937953 + ], + [ + -118.084224, + 33.937818 + ], + [ + -118.084049, + 33.937611 + ], + [ + -118.083943, + 33.937332 + ], + [ + -118.083937, + 33.93726 + ], + [ + -118.082828, + 33.93742 + ], + [ + -118.082691, + 33.936738 + ], + [ + -118.082772, + 33.936645 + ], + [ + -118.084367, + 33.936639 + ], + [ + -118.084398, + 33.937038 + ], + [ + -118.085214, + 33.937053 + ], + [ + -118.085118, + 33.936655 + ], + [ + -118.08514, + 33.935466 + ], + [ + -118.086155, + 33.935461 + ], + [ + -118.086169, + 33.938909 + ] + ] + ] + }, + "properties": { + "name": "Lake Center Athletic Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461763076, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.999884, + 34.067708 + ], + [ + -117.998829, + 34.071256 + ], + [ + -117.99917, + 34.071328 + ], + [ + -117.999209, + 34.071245 + ], + [ + -117.99955, + 34.071292 + ], + [ + -117.999897, + 34.070393 + ], + [ + -118.000031, + 34.069698 + ], + [ + -118.000101, + 34.069365 + ], + [ + -118.000105, + 34.068596 + ], + [ + -118.000068, + 34.068035 + ], + [ + -117.999958, + 34.067756 + ], + [ + -117.999926, + 34.06771 + ], + [ + -117.999884, + 34.067708 + ] + ] + ] + }, + "properties": { + "name": "Barnes Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461774078, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.986311, + 34.052114 + ], + [ + -117.985133, + 34.051336 + ], + [ + -117.986149, + 34.050279 + ], + [ + -117.988569, + 34.051877 + ], + [ + -117.987673, + 34.052808 + ], + [ + -117.986432, + 34.051989 + ], + [ + -117.986311, + 34.052114 + ] + ] + ] + }, + "properties": { + "name": "Bassett Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461957227, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.843224, + 34.143814 + ], + [ + -117.843208, + 34.143845 + ], + [ + -117.843168, + 34.143873 + ], + [ + -117.843129, + 34.143881 + ], + [ + -117.843097, + 34.143881 + ], + [ + -117.843049, + 34.143872 + ], + [ + -117.843021, + 34.143854 + ], + [ + -117.842981, + 34.143827 + ], + [ + -117.842956, + 34.143813 + ], + [ + -117.8429, + 34.143804 + ], + [ + -117.842783, + 34.143806 + ], + [ + -117.842664, + 34.143808 + ], + [ + -117.842629, + 34.143812 + ], + [ + -117.842604, + 34.14383 + ], + [ + -117.842594, + 34.143864 + ], + [ + -117.842593, + 34.144 + ], + [ + -117.842591, + 34.144217 + ], + [ + -117.842589, + 34.144378 + ], + [ + -117.842587, + 34.144548 + ], + [ + -117.842587, + 34.144576 + ], + [ + -117.843204, + 34.14458 + ], + [ + -117.843224, + 34.143814 + ] + ] + ] + }, + "properties": { + "name": "Willow Springs Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461966426, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.892609, + 34.065275 + ], + [ + -117.892366, + 34.065415 + ], + [ + -117.892329, + 34.065437 + ], + [ + -117.892359, + 34.065494 + ], + [ + -117.891779, + 34.065488 + ], + [ + -117.890404, + 34.065485 + ], + [ + -117.890298, + 34.065483 + ], + [ + -117.890251, + 34.067144 + ], + [ + -117.89028, + 34.06714 + ], + [ + -117.890543, + 34.067096 + ], + [ + -117.89098, + 34.067014 + ], + [ + -117.891324, + 34.067062 + ], + [ + -117.891715, + 34.067164 + ], + [ + -117.891907, + 34.06728 + ], + [ + -117.891965, + 34.067357 + ], + [ + -117.892041, + 34.067545 + ], + [ + -117.892233, + 34.067666 + ], + [ + -117.89221, + 34.067719 + ], + [ + -117.892327, + 34.067946 + ], + [ + -117.892408, + 34.067816 + ], + [ + -117.892513, + 34.06797 + ], + [ + -117.892822, + 34.067975 + ], + [ + -117.89281, + 34.067555 + ], + [ + -117.893271, + 34.06755 + ], + [ + -117.893306, + 34.065696 + ], + [ + -117.893143, + 34.065691 + ], + [ + -117.892792, + 34.065417 + ], + [ + -117.892609, + 34.065275 + ] + ] + ] + }, + "properties": { + "name": "Cortez Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461984468, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.870256, + 34.056591 + ], + [ + -117.870224, + 34.055058 + ], + [ + -117.870219, + 34.05492 + ], + [ + -117.870374, + 34.054867 + ], + [ + -117.870374, + 34.054809 + ], + [ + -117.870353, + 34.054653 + ], + [ + -117.870541, + 34.054609 + ], + [ + -117.870798, + 34.054573 + ], + [ + -117.871039, + 34.054547 + ], + [ + -117.871356, + 34.054605 + ], + [ + -117.871388, + 34.054649 + ], + [ + -117.871474, + 34.054631 + ], + [ + -117.87179, + 34.054893 + ], + [ + -117.871898, + 34.055009 + ], + [ + -117.871978, + 34.055209 + ], + [ + -117.871994, + 34.055333 + ], + [ + -117.871989, + 34.055462 + ], + [ + -117.872155, + 34.05552 + ], + [ + -117.872236, + 34.055542 + ], + [ + -117.872225, + 34.055671 + ], + [ + -117.872236, + 34.056018 + ], + [ + -117.872128, + 34.056187 + ], + [ + -117.872214, + 34.056253 + ], + [ + -117.872203, + 34.056356 + ], + [ + -117.872123, + 34.056436 + ], + [ + -117.872091, + 34.056582 + ], + [ + -117.872182, + 34.056751 + ], + [ + -117.87208, + 34.056902 + ], + [ + -117.871935, + 34.056982 + ], + [ + -117.87179, + 34.05708 + ], + [ + -117.871746, + 34.057043 + ], + [ + -117.871603, + 34.056924 + ], + [ + -117.871375, + 34.056826 + ], + [ + -117.871179, + 34.056769 + ], + [ + -117.8709, + 34.056693 + ], + [ + -117.870578, + 34.056631 + ], + [ + -117.87038, + 34.056604 + ], + [ + -117.870256, + 34.056591 + ] + ] + ] + }, + "properties": { + "name": "Heritage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461989743, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.855092, + 34.125943 + ], + [ + -117.854936, + 34.125862 + ], + [ + -117.854853, + 34.125911 + ], + [ + -117.85445, + 34.126169 + ], + [ + -117.854064, + 34.126146 + ], + [ + -117.853496, + 34.126173 + ], + [ + -117.85319, + 34.12632 + ], + [ + -117.852728, + 34.126795 + ], + [ + -117.852749, + 34.126792 + ], + [ + -117.852981, + 34.126764 + ], + [ + -117.853392, + 34.126703 + ], + [ + -117.853961, + 34.126513 + ], + [ + -117.854324, + 34.126361 + ], + [ + -117.854733, + 34.126164 + ], + [ + -117.855092, + 34.125943 + ] + ] + ] + }, + "properties": { + "name": "Centennial Heritage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462150553, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.068623, + 34.086131 + ], + [ + -118.068596, + 34.086125 + ], + [ + -118.068564, + 34.086109 + ], + [ + -118.068535, + 34.086078 + ], + [ + -118.068519, + 34.086065 + ], + [ + -118.068505, + 34.086063 + ], + [ + -118.068439, + 34.086082 + ], + [ + -118.068428, + 34.086082 + ], + [ + -118.06841, + 34.086072 + ], + [ + -118.0684, + 34.086053 + ], + [ + -118.068403, + 34.086036 + ], + [ + -118.068368, + 34.085987 + ], + [ + -118.068364, + 34.085972 + ], + [ + -118.068372, + 34.085954 + ], + [ + -118.068394, + 34.085943 + ], + [ + -118.068428, + 34.085938 + ], + [ + -118.068457, + 34.085944 + ], + [ + -118.068493, + 34.085951 + ], + [ + -118.068514, + 34.085965 + ], + [ + -118.068549, + 34.08597 + ], + [ + -118.068583, + 34.08597 + ], + [ + -118.068608, + 34.085966 + ], + [ + -118.068642, + 34.085968 + ], + [ + -118.068659, + 34.085975 + ], + [ + -118.068679, + 34.085991 + ], + [ + -118.068687, + 34.086013 + ], + [ + -118.068692, + 34.086084 + ], + [ + -118.068676, + 34.086112 + ], + [ + -118.068651, + 34.086127 + ], + [ + -118.068623, + 34.086131 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462169903, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.062388, + 34.040918 + ], + [ + -118.061462, + 34.040932 + ], + [ + -118.060898, + 34.040923 + ], + [ + -118.060478, + 34.040904 + ], + [ + -118.058924, + 34.040702 + ], + [ + -118.057528, + 34.040452 + ], + [ + -118.057308, + 34.040408 + ], + [ + -118.055219, + 34.03986 + ], + [ + -118.055056, + 34.039805 + ], + [ + -118.05497, + 34.039758 + ], + [ + -118.054875, + 34.0397 + ], + [ + -118.054748, + 34.039567 + ], + [ + -118.054239, + 34.038924 + ], + [ + -118.054186, + 34.038809 + ], + [ + -118.054173, + 34.038769 + ], + [ + -118.05418, + 34.038705 + ], + [ + -118.054214, + 34.038637 + ], + [ + -118.054238, + 34.038611 + ], + [ + -118.054905, + 34.038224 + ], + [ + -118.05516, + 34.037982 + ], + [ + -118.055397, + 34.037583 + ], + [ + -118.055458, + 34.037482 + ], + [ + -118.055495, + 34.037222 + ], + [ + -118.055502, + 34.037183 + ], + [ + -118.055412, + 34.036806 + ], + [ + -118.053488, + 34.033333 + ], + [ + -118.056098, + 34.03234 + ], + [ + -118.055297, + 34.03115 + ], + [ + -118.055707, + 34.030964 + ], + [ + -118.05498, + 34.030581 + ], + [ + -118.058227, + 34.029803 + ], + [ + -118.058731, + 34.03139 + ], + [ + -118.059503, + 34.031809 + ], + [ + -118.05977, + 34.031793 + ], + [ + -118.061706, + 34.031343 + ], + [ + -118.062123, + 34.030678 + ], + [ + -118.062064, + 34.030546 + ], + [ + -118.062202, + 34.030487 + ], + [ + -118.06233, + 34.030543 + ], + [ + -118.064975, + 34.033203 + ], + [ + -118.064503, + 34.034437 + ], + [ + -118.064289, + 34.035202 + ], + [ + -118.064121, + 34.036149 + ], + [ + -118.064105, + 34.03731 + ], + [ + -118.064072, + 34.038669 + ], + [ + -118.063946, + 34.040171 + ], + [ + -118.063808, + 34.040409 + ], + [ + -118.06365, + 34.040604 + ], + [ + -118.06346, + 34.040752 + ], + [ + -118.062964, + 34.040866 + ], + [ + -118.062388, + 34.040918 + ] + ] + ] + }, + "properties": { + "name": "Legg Lake Whittier Narrows Recreation Area", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462169906, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.059998, + 34.034864 + ], + [ + -118.060077, + 34.034876 + ], + [ + -118.060148, + 34.034908 + ], + [ + -118.060203, + 34.034956 + ], + [ + -118.060236, + 34.035017 + ], + [ + -118.060245, + 34.035083 + ], + [ + -118.060226, + 34.035153 + ], + [ + -118.060179, + 34.035213 + ], + [ + -118.060111, + 34.035257 + ], + [ + -118.060029, + 34.035279 + ], + [ + -118.059943, + 34.035277 + ], + [ + -118.059863, + 34.035251 + ], + [ + -118.059798, + 34.035204 + ], + [ + -118.059756, + 34.035142 + ], + [ + -118.059742, + 34.035076 + ], + [ + -118.059753, + 34.03501 + ], + [ + -118.059789, + 34.03495 + ], + [ + -118.059846, + 34.034903 + ], + [ + -118.059918, + 34.034873 + ], + [ + -118.059998, + 34.034864 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462169928, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.054804, + 34.032999 + ], + [ + -118.054794, + 34.033028 + ], + [ + -118.054749, + 34.033046 + ], + [ + -118.054726, + 34.033047 + ], + [ + -118.054693, + 34.033044 + ], + [ + -118.054673, + 34.033029 + ], + [ + -118.054667, + 34.033008 + ], + [ + -118.054682, + 34.032984 + ], + [ + -118.054698, + 34.03297 + ], + [ + -118.054733, + 34.032958 + ], + [ + -118.054784, + 34.032962 + ], + [ + -118.054801, + 34.032978 + ], + [ + -118.054804, + 34.032999 + ] + ] + ] + }, + "properties": { + "name": "Fish", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462396357, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.055908, + 34.034832 + ], + [ + -118.055881, + 34.034868 + ], + [ + -118.055869, + 34.034877 + ], + [ + -118.055856, + 34.034881 + ], + [ + -118.055841, + 34.034878 + ], + [ + -118.055742, + 34.034845 + ], + [ + -118.055727, + 34.034836 + ], + [ + -118.055722, + 34.034826 + ], + [ + -118.05572, + 34.034813 + ], + [ + -118.055733, + 34.034788 + ], + [ + -118.055795, + 34.034702 + ], + [ + -118.055821, + 34.034678 + ], + [ + -118.055848, + 34.034655 + ], + [ + -118.055876, + 34.034637 + ], + [ + -118.055906, + 34.034618 + ], + [ + -118.055962, + 34.03459 + ], + [ + -118.056041, + 34.034562 + ], + [ + -118.056097, + 34.034549 + ], + [ + -118.056145, + 34.034538 + ], + [ + -118.056174, + 34.03454 + ], + [ + -118.056217, + 34.034552 + ], + [ + -118.056243, + 34.034576 + ], + [ + -118.056256, + 34.034603 + ], + [ + -118.056247, + 34.034626 + ], + [ + -118.056233, + 34.034654 + ], + [ + -118.056175, + 34.034662 + ], + [ + -118.056124, + 34.034684 + ], + [ + -118.056079, + 34.034706 + ], + [ + -118.056033, + 34.034724 + ], + [ + -118.056022, + 34.034734 + ], + [ + -118.055982, + 34.034714 + ], + [ + -118.055952, + 34.034705 + ], + [ + -118.055903, + 34.034715 + ], + [ + -118.055873, + 34.034735 + ], + [ + -118.055861, + 34.03477 + ], + [ + -118.05587, + 34.034802 + ], + [ + -118.055908, + 34.034832 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462399249, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.053941, + 34.041862 + ], + [ + -118.05201, + 34.040421 + ], + [ + -118.052308, + 34.040387 + ], + [ + -118.052633, + 34.040366 + ], + [ + -118.053139, + 34.040369 + ], + [ + -118.054262, + 34.040512 + ], + [ + -118.05561, + 34.04075 + ], + [ + -118.056899, + 34.040956 + ], + [ + -118.058549, + 34.041234 + ], + [ + -118.060172, + 34.041524 + ], + [ + -118.061675, + 34.041746 + ], + [ + -118.062098, + 34.041821 + ], + [ + -118.062344, + 34.041973 + ], + [ + -118.062857, + 34.042478 + ], + [ + -118.063555, + 34.043233 + ], + [ + -118.063782, + 34.043461 + ], + [ + -118.06391, + 34.043693 + ], + [ + -118.063953, + 34.043884 + ], + [ + -118.064008, + 34.044616 + ], + [ + -118.064102, + 34.045547 + ], + [ + -118.064111, + 34.046356 + ], + [ + -118.064118, + 34.046934 + ], + [ + -118.064073, + 34.046982 + ], + [ + -118.064121, + 34.047839 + ], + [ + -118.06412, + 34.048632 + ], + [ + -118.064118, + 34.049724 + ], + [ + -118.061115, + 34.049744 + ], + [ + -118.061111, + 34.047182 + ], + [ + -118.06068, + 34.047155 + ], + [ + -118.060677, + 34.046761 + ], + [ + -118.06007, + 34.046766 + ], + [ + -118.060075, + 34.045309 + ], + [ + -118.05784, + 34.045291 + ], + [ + -118.057881, + 34.044576 + ], + [ + -118.056794, + 34.044586 + ], + [ + -118.056826, + 34.043211 + ], + [ + -118.055636, + 34.043185 + ], + [ + -118.055663, + 34.041915 + ], + [ + -118.053941, + 34.041862 + ] + ] + ] + }, + "properties": { + "name": "Whittier Narrows Recreation Area - Special Events", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462399252, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.056827, + 34.04218 + ], + [ + -118.056852, + 34.04213 + ], + [ + -118.056863, + 34.042063 + ], + [ + -118.056848, + 34.04202 + ], + [ + -118.056747, + 34.041966 + ], + [ + -118.056608, + 34.041927 + ], + [ + -118.056527, + 34.041926 + ], + [ + -118.056482, + 34.04193 + ], + [ + -118.056464, + 34.041989 + ], + [ + -118.056462, + 34.042021 + ], + [ + -118.056448, + 34.042056 + ], + [ + -118.056441, + 34.042119 + ], + [ + -118.056533, + 34.042144 + ], + [ + -118.056755, + 34.042177 + ], + [ + -118.056827, + 34.04218 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462401405, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.105441, + 34.022588 + ], + [ + -118.105963, + 34.021057 + ], + [ + -118.10544, + 34.020958 + ], + [ + -118.105076, + 34.020888 + ], + [ + -118.10462, + 34.02241 + ], + [ + -118.10471, + 34.022456 + ], + [ + -118.104997, + 34.022517 + ], + [ + -118.105441, + 34.022588 + ] + ] + ] + }, + "properties": { + "name": "Taylor Ranch", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462403474, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.116595, + 34.023074 + ], + [ + -118.116736, + 34.022552 + ], + [ + -118.116864, + 34.022036 + ], + [ + -118.117012, + 34.021507 + ], + [ + -118.115807, + 34.021242 + ], + [ + -118.113983, + 34.020839 + ], + [ + -118.113862, + 34.021167 + ], + [ + -118.114811, + 34.021408 + ], + [ + -118.115101, + 34.021566 + ], + [ + -118.11525, + 34.02176 + ], + [ + -118.115614, + 34.021858 + ], + [ + -118.115707, + 34.021876 + ], + [ + -118.115805, + 34.021896 + ], + [ + -118.115886, + 34.021912 + ], + [ + -118.115705, + 34.022476 + ], + [ + -118.115579, + 34.022871 + ], + [ + -118.11604, + 34.022975 + ], + [ + -118.116528, + 34.023086 + ], + [ + -118.116595, + 34.023074 + ] + ] + ] + }, + "properties": { + "name": "Acuna Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462673105, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.039606, + 33.985901 + ], + [ + -118.039239, + 33.985901 + ], + [ + -118.039239, + 33.985574 + ], + [ + -118.039605, + 33.985575 + ], + [ + -118.039606, + 33.985901 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462900065, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.960859, + 33.937188 + ], + [ + -117.960813, + 33.937007 + ], + [ + -117.960638, + 33.937037 + ], + [ + -117.960694, + 33.937217 + ], + [ + -117.960859, + 33.937188 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 463040572, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.962229, + 34.004043 + ], + [ + -117.959548, + 34.003233 + ], + [ + -117.959593, + 34.00316 + ], + [ + -117.960268, + 34.002064 + ], + [ + -117.960572, + 34.001585 + ], + [ + -117.960989, + 34.00176 + ], + [ + -117.961031, + 34.001855 + ], + [ + -117.961134, + 34.001887 + ], + [ + -117.962039, + 34.002164 + ], + [ + -117.962731, + 34.002376 + ], + [ + -117.962669, + 34.002542 + ], + [ + -117.96263, + 34.00269 + ], + [ + -117.962844, + 34.002758 + ], + [ + -117.962812, + 34.002831 + ], + [ + -117.962774, + 34.00292 + ], + [ + -117.962615, + 34.002868 + ], + [ + -117.962472, + 34.0033 + ], + [ + -117.962229, + 34.004043 + ] + ] + ] + }, + "properties": { + "name": "Steinmetz Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 463061841, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.96125, + 34.003555 + ], + [ + -117.9612, + 34.003478 + ], + [ + -117.961305, + 34.003212 + ], + [ + -117.961395, + 34.003234 + ], + [ + -117.961499, + 34.003282 + ], + [ + -117.961575, + 34.003332 + ], + [ + -117.961611, + 34.003392 + ], + [ + -117.961608, + 34.003472 + ], + [ + -117.961582, + 34.003564 + ], + [ + -117.961535, + 34.003629 + ], + [ + -117.96125, + 34.003555 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 464211805, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.938733, + 34.079396 + ], + [ + -117.938964, + 34.077352 + ], + [ + -117.938845, + 34.077332 + ], + [ + -117.937781, + 34.077297 + ], + [ + -117.937273, + 34.077334 + ], + [ + -117.937266, + 34.077707 + ], + [ + -117.936545, + 34.077658 + ], + [ + -117.936538, + 34.077558 + ], + [ + -117.936335, + 34.077515 + ], + [ + -117.936305, + 34.077347 + ], + [ + -117.935893, + 34.077322 + ], + [ + -117.935255, + 34.077217 + ], + [ + -117.93511, + 34.079234 + ], + [ + -117.935767, + 34.079265 + ], + [ + -117.93599, + 34.079292 + ], + [ + -117.937738, + 34.079316 + ], + [ + -117.938733, + 34.079396 + ] + ] + ] + }, + "properties": { + "name": "Del Norte Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 464836734, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.037034, + 33.968784 + ], + [ + -118.036872, + 33.968784 + ], + [ + -118.036872, + 33.968607 + ], + [ + -118.037033, + 33.968608 + ], + [ + -118.037034, + 33.968784 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465059800, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.83538, + 34.11212 + ], + [ + -117.835203, + 34.112067 + ], + [ + -117.834784, + 34.112062 + ], + [ + -117.834307, + 34.112085 + ], + [ + -117.833293, + 34.112085 + ], + [ + -117.833304, + 34.110379 + ], + [ + -117.833343, + 34.110379 + ], + [ + -117.833954, + 34.110375 + ], + [ + -117.83539, + 34.110366 + ], + [ + -117.835386, + 34.111063 + ], + [ + -117.835383, + 34.111591 + ], + [ + -117.835383, + 34.111622 + ], + [ + -117.83538, + 34.11212 + ] + ] + ] + }, + "properties": { + "name": "Lone Hill Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465059803, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.834084, + 34.110769 + ], + [ + -117.834185, + 34.110776 + ], + [ + -117.834222, + 34.110768 + ], + [ + -117.83426, + 34.110705 + ], + [ + -117.834249, + 34.110662 + ], + [ + -117.834176, + 34.110562 + ], + [ + -117.83412, + 34.110494 + ], + [ + -117.834013, + 34.110466 + ], + [ + -117.833967, + 34.110496 + ], + [ + -117.833946, + 34.110484 + ], + [ + -117.833942, + 34.110535 + ], + [ + -117.833942, + 34.110572 + ], + [ + -117.834011, + 34.1106 + ], + [ + -117.83403, + 34.110619 + ], + [ + -117.834051, + 34.110678 + ], + [ + -117.834048, + 34.110695 + ], + [ + -117.834063, + 34.110754 + ], + [ + -117.834084, + 34.110769 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465059812, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.85126, + 34.113819 + ], + [ + -117.852898, + 34.113823 + ], + [ + -117.852914, + 34.112114 + ], + [ + -117.851808, + 34.11211 + ], + [ + -117.851661, + 34.112109 + ], + [ + -117.850734, + 34.112106 + ], + [ + -117.85075, + 34.113158 + ], + [ + -117.851271, + 34.113026 + ], + [ + -117.85126, + 34.113819 + ] + ] + ] + }, + "properties": { + "name": "Gladstone Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465086864, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.881562, + 34.120311 + ], + [ + -117.882498, + 34.120307 + ], + [ + -117.88247, + 34.118171 + ], + [ + -117.882432, + 34.118171 + ], + [ + -117.881511, + 34.118171 + ], + [ + -117.881516, + 34.118375 + ], + [ + -117.881562, + 34.120311 + ] + ] + ] + }, + "properties": { + "name": "Dalton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465086867, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.882398, + 34.119535 + ], + [ + -117.882376, + 34.119518 + ], + [ + -117.882043, + 34.119514 + ], + [ + -117.882021, + 34.119681 + ], + [ + -117.882048, + 34.119745 + ], + [ + -117.882114, + 34.119797 + ], + [ + -117.882211, + 34.119807 + ], + [ + -117.882292, + 34.119807 + ], + [ + -117.882395, + 34.119761 + ], + [ + -117.882398, + 34.119535 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465086880, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.881998, + 34.119212 + ], + [ + -117.882269, + 34.119085 + ], + [ + -117.882089, + 34.118822 + ], + [ + -117.881989, + 34.118866 + ], + [ + -117.881998, + 34.119212 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465094176, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.918528, + 34.062925 + ], + [ + -117.918542, + 34.062186 + ], + [ + -117.91855, + 34.061781 + ], + [ + -117.918559, + 34.061317 + ], + [ + -117.918436, + 34.061317 + ], + [ + -117.917077, + 34.061314 + ], + [ + -117.916852, + 34.061313 + ], + [ + -117.916848, + 34.061504 + ], + [ + -117.916825, + 34.062563 + ], + [ + -117.917047, + 34.062564 + ], + [ + -117.917649, + 34.062567 + ], + [ + -117.917658, + 34.062936 + ], + [ + -117.9177, + 34.062936 + ], + [ + -117.918528, + 34.062925 + ] + ] + ] + }, + "properties": { + "name": "Cameron Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465102365, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.882733, + 34.077048 + ], + [ + -117.882789, + 34.077009 + ], + [ + -117.883409, + 34.077022 + ], + [ + -117.883401, + 34.077201 + ], + [ + -117.883359, + 34.077365 + ], + [ + -117.883252, + 34.077488 + ], + [ + -117.883189, + 34.077535 + ], + [ + -117.882953, + 34.077592 + ], + [ + -117.882853, + 34.077596 + ], + [ + -117.882815, + 34.077592 + ], + [ + -117.882726, + 34.077573 + ], + [ + -117.882733, + 34.077048 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465324679, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.101801, + 34.098783 + ], + [ + -118.101539, + 34.098786 + ], + [ + -118.10146, + 34.098599 + ], + [ + -118.101624, + 34.098581 + ], + [ + -118.101659, + 34.09859 + ], + [ + -118.101694, + 34.098611 + ], + [ + -118.101695, + 34.09865 + ], + [ + -118.101695, + 34.098672 + ], + [ + -118.101711, + 34.09868 + ], + [ + -118.101767, + 34.098692 + ], + [ + -118.101798, + 34.098714 + ], + [ + -118.101801, + 34.098783 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465324700, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.103079, + 34.098423 + ], + [ + -118.103056, + 34.098232 + ], + [ + -118.103038, + 34.09823 + ], + [ + -118.103032, + 34.098208 + ], + [ + -118.103018, + 34.0982 + ], + [ + -118.102945, + 34.098196 + ], + [ + -118.102899, + 34.09821 + ], + [ + -118.102878, + 34.098237 + ], + [ + -118.102878, + 34.098263 + ], + [ + -118.102902, + 34.098297 + ], + [ + -118.102923, + 34.098349 + ], + [ + -118.102939, + 34.098432 + ], + [ + -118.103079, + 34.098423 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465500380, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.86063, + 34.071676 + ], + [ + -117.860994, + 34.071547 + ], + [ + -117.861213, + 34.071474 + ], + [ + -117.861314, + 34.071456 + ], + [ + -117.861358, + 34.07147 + ], + [ + -117.861446, + 34.071439 + ], + [ + -117.861709, + 34.071341 + ], + [ + -117.862028, + 34.071222 + ], + [ + -117.862315, + 34.071125 + ], + [ + -117.862851, + 34.070948 + ], + [ + -117.862901, + 34.070942 + ], + [ + -117.862958, + 34.070968 + ], + [ + -117.863029, + 34.071048 + ], + [ + -117.863108, + 34.071118 + ], + [ + -117.86317, + 34.071157 + ], + [ + -117.863261, + 34.0712 + ], + [ + -117.863333, + 34.071242 + ], + [ + -117.863364, + 34.071274 + ], + [ + -117.863377, + 34.071312 + ], + [ + -117.863353, + 34.071398 + ], + [ + -117.863241, + 34.071682 + ], + [ + -117.863217, + 34.071691 + ], + [ + -117.863165, + 34.07167 + ], + [ + -117.863078, + 34.071641 + ], + [ + -117.862964, + 34.071622 + ], + [ + -117.862684, + 34.071541 + ], + [ + -117.86247, + 34.071548 + ], + [ + -117.862177, + 34.071607 + ], + [ + -117.861805, + 34.071691 + ], + [ + -117.861528, + 34.071752 + ], + [ + -117.861016, + 34.071938 + ], + [ + -117.860749, + 34.072088 + ], + [ + -117.860737, + 34.071915 + ], + [ + -117.860725, + 34.071863 + ], + [ + -117.86063, + 34.071676 + ] + ] + ] + }, + "properties": { + "name": "Parque Xalapa", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465503793, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.88844, + 34.06836 + ], + [ + -117.888542, + 34.06836 + ], + [ + -117.889259, + 34.067646 + ], + [ + -117.889173, + 34.067487 + ], + [ + -117.889061, + 34.067376 + ], + [ + -117.888948, + 34.0673 + ], + [ + -117.8889, + 34.067278 + ], + [ + -117.888167, + 34.067274 + ], + [ + -117.888039, + 34.067354 + ], + [ + -117.8879, + 34.067447 + ], + [ + -117.887739, + 34.067624 + ], + [ + -117.88844, + 34.06836 + ] + ] + ] + }, + "properties": { + "name": "Maverick Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465539549, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.825891, + 34.074106 + ], + [ + -117.825877, + 34.074257 + ], + [ + -117.825852, + 34.074424 + ], + [ + -117.825711, + 34.07444 + ], + [ + -117.825573, + 34.074429 + ], + [ + -117.825292, + 34.074404 + ], + [ + -117.825569, + 34.074735 + ], + [ + -117.825681, + 34.074974 + ], + [ + -117.825715, + 34.075103 + ], + [ + -117.825727, + 34.075103 + ], + [ + -117.825886, + 34.075532 + ], + [ + -117.825957, + 34.075765 + ], + [ + -117.825989, + 34.075867 + ], + [ + -117.826447, + 34.075595 + ], + [ + -117.827421, + 34.075012 + ], + [ + -117.827783, + 34.074789 + ], + [ + -117.82814, + 34.074522 + ], + [ + -117.828327, + 34.07437 + ], + [ + -117.82834, + 34.074328 + ], + [ + -117.828327, + 34.074302 + ], + [ + -117.828296, + 34.074267 + ], + [ + -117.828224, + 34.074215 + ], + [ + -117.827966, + 34.074045 + ], + [ + -117.827768, + 34.07395 + ], + [ + -117.827598, + 34.073879 + ], + [ + -117.827434, + 34.073839 + ], + [ + -117.827285, + 34.073828 + ], + [ + -117.827029, + 34.073857 + ], + [ + -117.826803, + 34.073916 + ], + [ + -117.826628, + 34.073968 + ], + [ + -117.826457, + 34.074013 + ], + [ + -117.826343, + 34.074047 + ], + [ + -117.826314, + 34.074053 + ], + [ + -117.826285, + 34.074058 + ], + [ + -117.826149, + 34.07408 + ], + [ + -117.8261, + 34.074087 + ], + [ + -117.825969, + 34.074099 + ], + [ + -117.825891, + 34.074106 + ] + ] + ] + }, + "properties": { + "name": "Via Verde Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465539551, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.826286, + 34.074357 + ], + [ + -117.82628, + 34.074384 + ], + [ + -117.826286, + 34.074411 + ], + [ + -117.826303, + 34.074435 + ], + [ + -117.826328, + 34.074453 + ], + [ + -117.826359, + 34.074463 + ], + [ + -117.82639, + 34.074464 + ], + [ + -117.82642, + 34.074457 + ], + [ + -117.826446, + 34.074443 + ], + [ + -117.826465, + 34.074422 + ], + [ + -117.826475, + 34.074398 + ], + [ + -117.826476, + 34.074372 + ], + [ + -117.826466, + 34.074348 + ], + [ + -117.826448, + 34.074327 + ], + [ + -117.826423, + 34.074312 + ], + [ + -117.826391, + 34.074303 + ], + [ + -117.826358, + 34.074304 + ], + [ + -117.826327, + 34.074315 + ], + [ + -117.826302, + 34.074333 + ], + [ + -117.826286, + 34.074357 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465539552, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.826278, + 34.075037 + ], + [ + -117.826273, + 34.075072 + ], + [ + -117.826255, + 34.075103 + ], + [ + -117.826225, + 34.075128 + ], + [ + -117.826187, + 34.075143 + ], + [ + -117.826146, + 34.075148 + ], + [ + -117.826104, + 34.075141 + ], + [ + -117.826068, + 34.075123 + ], + [ + -117.826041, + 34.075097 + ], + [ + -117.826025, + 34.075065 + ], + [ + -117.826023, + 34.07503 + ], + [ + -117.826035, + 34.074996 + ], + [ + -117.826059, + 34.074968 + ], + [ + -117.826093, + 34.074948 + ], + [ + -117.826133, + 34.074937 + ], + [ + -117.826175, + 34.074939 + ], + [ + -117.826215, + 34.074951 + ], + [ + -117.826247, + 34.074973 + ], + [ + -117.826269, + 34.075003 + ], + [ + -117.826278, + 34.075037 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465928643, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.166884, + 33.972545 + ], + [ + -118.16625, + 33.972479 + ], + [ + -118.166342, + 33.971869 + ], + [ + -118.166441, + 33.971879 + ], + [ + -118.166513, + 33.971887 + ], + [ + -118.166976, + 33.971935 + ], + [ + -118.166884, + 33.972545 + ] + ] + ] + }, + "properties": { + "name": "Marlow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 467661775, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.855347, + 34.125709 + ], + [ + -117.855106, + 34.125877 + ], + [ + -117.855092, + 34.125943 + ], + [ + -117.854936, + 34.125862 + ], + [ + -117.854853, + 34.125911 + ], + [ + -117.85445, + 34.126169 + ], + [ + -117.854064, + 34.126146 + ], + [ + -117.853496, + 34.126173 + ], + [ + -117.85319, + 34.12632 + ], + [ + -117.852728, + 34.126795 + ], + [ + -117.85237, + 34.126866 + ], + [ + -117.850455, + 34.127155 + ], + [ + -117.850178, + 34.126905 + ], + [ + -117.850083, + 34.126847 + ], + [ + -117.850119, + 34.126765 + ], + [ + -117.850052, + 34.126577 + ], + [ + -117.849967, + 34.12656 + ], + [ + -117.84993, + 34.126421 + ], + [ + -117.850295, + 34.126106 + ], + [ + -117.850285, + 34.126046 + ], + [ + -117.850036, + 34.125886 + ], + [ + -117.85001, + 34.125843 + ], + [ + -117.849959, + 34.125693 + ], + [ + -117.849879, + 34.125639 + ], + [ + -117.849858, + 34.125579 + ], + [ + -117.849633, + 34.125376 + ], + [ + -117.849589, + 34.12535 + ], + [ + -117.849452, + 34.125329 + ], + [ + -117.849486, + 34.125166 + ], + [ + -117.848055, + 34.125151 + ], + [ + -117.848001, + 34.12511 + ], + [ + -117.847996, + 34.124991 + ], + [ + -117.846628, + 34.125008 + ], + [ + -117.846536, + 34.125019 + ], + [ + -117.846457, + 34.118077 + ], + [ + -117.848415, + 34.117968 + ], + [ + -117.849848, + 34.117881 + ], + [ + -117.851885, + 34.117859 + ], + [ + -117.854869, + 34.117826 + ], + [ + -117.855474, + 34.117794 + ], + [ + -117.858024, + 34.117446 + ], + [ + -117.859338, + 34.117315 + ], + [ + -117.860548, + 34.117315 + ], + [ + -117.861363, + 34.11738 + ], + [ + -117.862283, + 34.117533 + ], + [ + -117.863479, + 34.117837 + ], + [ + -117.864218, + 34.11812 + ], + [ + -117.864381, + 34.118191 + ], + [ + -117.864433, + 34.11898 + ], + [ + -117.864458, + 34.119421 + ], + [ + -117.864433, + 34.119827 + ], + [ + -117.864329, + 34.120189 + ], + [ + -117.864166, + 34.120573 + ], + [ + -117.863934, + 34.121121 + ], + [ + -117.8639, + 34.121213 + ], + [ + -117.863728, + 34.121107 + ], + [ + -117.863376, + 34.121093 + ], + [ + -117.863196, + 34.120993 + ], + [ + -117.862732, + 34.12073 + ], + [ + -117.862362, + 34.120609 + ], + [ + -117.861838, + 34.120673 + ], + [ + -117.861263, + 34.121029 + ], + [ + -117.861005, + 34.121491 + ], + [ + -117.861057, + 34.122031 + ], + [ + -117.861332, + 34.122493 + ], + [ + -117.861486, + 34.122764 + ], + [ + -117.859949, + 34.123226 + ], + [ + -117.858531, + 34.123788 + ], + [ + -117.856908, + 34.124641 + ], + [ + -117.856332, + 34.124959 + ], + [ + -117.855347, + 34.125709 + ] + ] + ] + }, + "properties": { + "name": "South Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 467662432, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.9135, + 34.128 + ], + [ + -117.913502, + 34.127101 + ], + [ + -117.913504, + 34.126344 + ], + [ + -117.910331, + 34.12634 + ], + [ + -117.910328, + 34.127958 + ], + [ + -117.91216, + 34.12796 + ], + [ + -117.912201, + 34.127998 + ], + [ + -117.9135, + 34.128 + ] + ] + ] + }, + "properties": { + "name": "Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 467663028, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.90096, + 34.130418 + ], + [ + -117.901175, + 34.130416 + ], + [ + -117.901172, + 34.13007 + ], + [ + -117.901983, + 34.130065 + ], + [ + -117.902098, + 34.129981 + ], + [ + -117.902098, + 34.129915 + ], + [ + -117.902342, + 34.129914 + ], + [ + -117.90235, + 34.130958 + ], + [ + -117.900964, + 34.130966 + ], + [ + -117.90096, + 34.130418 + ] + ] + ] + }, + "properties": { + "name": "Slauson Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 467663029, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.902176, + 34.130167 + ], + [ + -117.902114, + 34.130223 + ], + [ + -117.902122, + 34.130278 + ], + [ + -117.902165, + 34.130321 + ], + [ + -117.902208, + 34.130327 + ], + [ + -117.902253, + 34.130312 + ], + [ + -117.90228, + 34.130261 + ], + [ + -117.902286, + 34.130183 + ], + [ + -117.902272, + 34.130121 + ], + [ + -117.902261, + 34.130094 + ], + [ + -117.902283, + 34.130054 + ], + [ + -117.902259, + 34.130019 + ], + [ + -117.902219, + 34.13001 + ], + [ + -117.902157, + 34.130023 + ], + [ + -117.902133, + 34.130067 + ], + [ + -117.902135, + 34.130101 + ], + [ + -117.902176, + 34.130167 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 467663558, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.90206, + 34.116672 + ], + [ + -117.902144, + 34.116658 + ], + [ + -117.902198, + 34.116681 + ], + [ + -117.902247, + 34.116737 + ], + [ + -117.902256, + 34.116751 + ], + [ + -117.90225, + 34.116789 + ], + [ + -117.902185, + 34.116832 + ], + [ + -117.902141, + 34.116846 + ], + [ + -117.90211, + 34.116839 + ], + [ + -117.902077, + 34.116828 + ], + [ + -117.902048, + 34.116828 + ], + [ + -117.901988, + 34.116848 + ], + [ + -117.901937, + 34.11685 + ], + [ + -117.901899, + 34.116838 + ], + [ + -117.901848, + 34.116804 + ], + [ + -117.901833, + 34.116771 + ], + [ + -117.901832, + 34.11673 + ], + [ + -117.901866, + 34.116684 + ], + [ + -117.901908, + 34.116658 + ], + [ + -117.901956, + 34.116654 + ], + [ + -117.902019, + 34.116668 + ], + [ + -117.902038, + 34.11667 + ], + [ + -117.90206, + 34.116672 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 467663563, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.901906, + 34.115547 + ], + [ + -117.902231, + 34.115552 + ], + [ + -117.902276, + 34.115587 + ], + [ + -117.902258, + 34.115872 + ], + [ + -117.90218, + 34.115892 + ], + [ + -117.902059, + 34.115889 + ], + [ + -117.902, + 34.115867 + ], + [ + -117.901941, + 34.115829 + ], + [ + -117.901888, + 34.115783 + ], + [ + -117.901863, + 34.115723 + ], + [ + -117.901858, + 34.115667 + ], + [ + -117.901858, + 34.115616 + ], + [ + -117.901877, + 34.115583 + ], + [ + -117.901906, + 34.115547 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 467665597, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.895554, + 34.088027 + ], + [ + -117.895673, + 34.088025 + ], + [ + -117.89567, + 34.087812 + ], + [ + -117.895551, + 34.087813 + ], + [ + -117.895554, + 34.088027 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 467665630, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.895065, + 34.089241 + ], + [ + -117.895047, + 34.089269 + ], + [ + -117.895047, + 34.089318 + ], + [ + -117.895067, + 34.089356 + ], + [ + -117.895043, + 34.089407 + ], + [ + -117.895045, + 34.08944 + ], + [ + -117.895057, + 34.089467 + ], + [ + -117.895037, + 34.089534 + ], + [ + -117.894968, + 34.089561 + ], + [ + -117.894908, + 34.089562 + ], + [ + -117.894813, + 34.089548 + ], + [ + -117.894809, + 34.089432 + ], + [ + -117.894839, + 34.089396 + ], + [ + -117.894851, + 34.089346 + ], + [ + -117.894836, + 34.0893 + ], + [ + -117.894799, + 34.089276 + ], + [ + -117.894831, + 34.089236 + ], + [ + -117.894886, + 34.089207 + ], + [ + -117.894936, + 34.089218 + ], + [ + -117.89499, + 34.089221 + ], + [ + -117.89503, + 34.089215 + ], + [ + -117.895057, + 34.08921 + ], + [ + -117.895065, + 34.089241 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 467669452, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.808287, + 34.097486 + ], + [ + -117.809783, + 34.096825 + ], + [ + -117.810453, + 34.096678 + ], + [ + -117.811095, + 34.096541 + ], + [ + -117.815218, + 34.095603 + ], + [ + -117.815733, + 34.095434 + ], + [ + -117.819198, + 34.093222 + ], + [ + -117.819359, + 34.086336 + ], + [ + -117.81923, + 34.085483 + ], + [ + -117.818833, + 34.084168 + ], + [ + -117.818351, + 34.083181 + ], + [ + -117.815164, + 34.079698 + ], + [ + -117.814595, + 34.079227 + ], + [ + -117.814274, + 34.079129 + ], + [ + -117.813598, + 34.079111 + ], + [ + -117.813179, + 34.079058 + ], + [ + -117.812954, + 34.078916 + ], + [ + -117.812836, + 34.078703 + ], + [ + -117.812772, + 34.078472 + ], + [ + -117.812965, + 34.077423 + ], + [ + -117.809746, + 34.074019 + ], + [ + -117.808856, + 34.07282 + ], + [ + -117.808362, + 34.07194 + ], + [ + -117.8076, + 34.070322 + ], + [ + -117.806892, + 34.068989 + ], + [ + -117.806366, + 34.068527 + ], + [ + -117.805712, + 34.068109 + ], + [ + -117.804843, + 34.067816 + ], + [ + -117.804221, + 34.067718 + ], + [ + -117.80347, + 34.067745 + ], + [ + -117.80186, + 34.068127 + ], + [ + -117.800369, + 34.068634 + ], + [ + -117.798631, + 34.069336 + ], + [ + -117.796764, + 34.070109 + ], + [ + -117.790123, + 34.072775 + ], + [ + -117.788044, + 34.073559 + ], + [ + -117.787572, + 34.07379 + ], + [ + -117.786864, + 34.074448 + ], + [ + -117.785212, + 34.075728 + ], + [ + -117.784117, + 34.076243 + ], + [ + -117.782165, + 34.076865 + ], + [ + -117.781285, + 34.077167 + ], + [ + -117.780663, + 34.077718 + ], + [ + -117.779912, + 34.078998 + ], + [ + -117.784096, + 34.080882 + ], + [ + -117.783715, + 34.081052 + ], + [ + -117.783296, + 34.081603 + ], + [ + -117.781919, + 34.082943 + ], + [ + -117.780936, + 34.08378 + ], + [ + -117.781141, + 34.084223 + ], + [ + -117.781828, + 34.084992 + ], + [ + -117.782465, + 34.085424 + ], + [ + -117.784042, + 34.084895 + ], + [ + -117.785464, + 34.085228 + ], + [ + -117.786894, + 34.088069 + ], + [ + -117.786784, + 34.088413 + ], + [ + -117.784188, + 34.088644 + ], + [ + -117.784131, + 34.089099 + ], + [ + -117.784948, + 34.090329 + ], + [ + -117.792425, + 34.09134 + ], + [ + -117.793186, + 34.093111 + ], + [ + -117.792911, + 34.093062 + ], + [ + -117.792593, + 34.093636 + ], + [ + -117.791684, + 34.093951 + ], + [ + -117.791293, + 34.094117 + ], + [ + -117.791196, + 34.094237 + ], + [ + -117.790371, + 34.094581 + ], + [ + -117.789633, + 34.094684 + ], + [ + -117.789165, + 34.094685 + ], + [ + -117.787726, + 34.094421 + ], + [ + -117.787255, + 34.094871 + ], + [ + -117.787036, + 34.095276 + ], + [ + -117.789332, + 34.095845 + ], + [ + -117.789939, + 34.095799 + ], + [ + -117.790641, + 34.095791 + ], + [ + -117.791145, + 34.095698 + ], + [ + -117.791864, + 34.09552 + ], + [ + -117.793216, + 34.095192 + ], + [ + -117.794878, + 34.095337 + ], + [ + -117.795341, + 34.095298 + ], + [ + -117.795657, + 34.095213 + ], + [ + -117.797472, + 34.094116 + ], + [ + -117.799598, + 34.092974 + ], + [ + -117.800123, + 34.092766 + ], + [ + -117.801033, + 34.092549 + ], + [ + -117.801336, + 34.092495 + ], + [ + -117.802315, + 34.092517 + ], + [ + -117.803124, + 34.092622 + ], + [ + -117.803414, + 34.092684 + ], + [ + -117.80367, + 34.092797 + ], + [ + -117.803854, + 34.092946 + ], + [ + -117.803977, + 34.093101 + ], + [ + -117.804063, + 34.093284 + ], + [ + -117.804184, + 34.09351 + ], + [ + -117.804326, + 34.093668 + ], + [ + -117.804473, + 34.09375 + ], + [ + -117.804656, + 34.093822 + ], + [ + -117.804804, + 34.09386 + ], + [ + -117.804985, + 34.093865 + ], + [ + -117.805242, + 34.093815 + ], + [ + -117.805468, + 34.093706 + ], + [ + -117.805637, + 34.093563 + ], + [ + -117.805891, + 34.093215 + ], + [ + -117.806125, + 34.093025 + ], + [ + -117.806361, + 34.092906 + ], + [ + -117.806619, + 34.092841 + ], + [ + -117.806915, + 34.092836 + ], + [ + -117.807155, + 34.092887 + ], + [ + -117.807411, + 34.093033 + ], + [ + -117.807689, + 34.093447 + ], + [ + -117.807704, + 34.093629 + ], + [ + -117.807649, + 34.093848 + ], + [ + -117.807548, + 34.094185 + ], + [ + -117.807554, + 34.094344 + ], + [ + -117.807587, + 34.09447 + ], + [ + -117.807701, + 34.094661 + ], + [ + -117.807918, + 34.094919 + ], + [ + -117.808336, + 34.095453 + ], + [ + -117.808404, + 34.095626 + ], + [ + -117.808526, + 34.095965 + ], + [ + -117.8083, + 34.09632 + ], + [ + -117.808054, + 34.096666 + ], + [ + -117.807968, + 34.096906 + ], + [ + -117.808, + 34.097111 + ], + [ + -117.808139, + 34.097368 + ], + [ + -117.808287, + 34.097486 + ] + ] + ] + }, + "properties": { + "name": "Frank G. Bonelli Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468182647, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.831602, + 34.08714 + ], + [ + -117.831894, + 34.087101 + ], + [ + -117.832059, + 34.087078 + ], + [ + -117.8321, + 34.087072 + ], + [ + -117.832243, + 34.087043 + ], + [ + -117.832405, + 34.086988 + ], + [ + -117.83246, + 34.087089 + ], + [ + -117.832514, + 34.08719 + ], + [ + -117.832601, + 34.087391 + ], + [ + -117.831716, + 34.087656 + ], + [ + -117.831672, + 34.087479 + ], + [ + -117.831679, + 34.08746 + ], + [ + -117.831649, + 34.087324 + ], + [ + -117.831602, + 34.08714 + ] + ] + ] + }, + "properties": { + "name": "Loma Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468182654, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.831804, + 34.087362 + ], + [ + -117.831833, + 34.087356 + ], + [ + -117.831859, + 34.087351 + ], + [ + -117.831867, + 34.087305 + ], + [ + -117.831829, + 34.087237 + ], + [ + -117.831773, + 34.087217 + ], + [ + -117.831712, + 34.087256 + ], + [ + -117.831725, + 34.087264 + ], + [ + -117.831716, + 34.087273 + ], + [ + -117.831734, + 34.087336 + ], + [ + -117.831804, + 34.087362 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468517521, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.125604, + 34.133552 + ], + [ + -118.125208, + 34.133546 + ], + [ + -118.125205, + 34.133209 + ], + [ + -118.125201, + 34.132891 + ], + [ + -118.125413, + 34.132649 + ], + [ + -118.125661, + 34.132542 + ], + [ + -118.125723, + 34.132607 + ], + [ + -118.126017, + 34.132601 + ], + [ + -118.126005, + 34.132788 + ], + [ + -118.125938, + 34.132795 + ], + [ + -118.125862, + 34.132811 + ], + [ + -118.125796, + 34.132832 + ], + [ + -118.125727, + 34.132864 + ], + [ + -118.125675, + 34.132904 + ], + [ + -118.125628, + 34.132952 + ], + [ + -118.125589, + 34.133007 + ], + [ + -118.125568, + 34.133059 + ], + [ + -118.125551, + 34.133135 + ], + [ + -118.125551, + 34.133188 + ], + [ + -118.125575, + 34.133274 + ], + [ + -118.125624, + 34.133354 + ], + [ + -118.125604, + 34.133552 + ] + ] + ] + }, + "properties": { + "name": "Tournament Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468523909, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.117666, + 34.144797 + ], + [ + -118.11751, + 34.144798 + ], + [ + -118.11748, + 34.144721 + ], + [ + -118.117451, + 34.144674 + ], + [ + -118.117379, + 34.1446 + ], + [ + -118.117351, + 34.144574 + ], + [ + -118.117338, + 34.144387 + ], + [ + -118.117319, + 34.144273 + ], + [ + -118.117665, + 34.144284 + ], + [ + -118.117666, + 34.144797 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468546411, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.112737, + 34.126923 + ], + [ + -118.112642, + 34.126951 + ], + [ + -118.112516, + 34.127015 + ], + [ + -118.11232, + 34.127077 + ], + [ + -118.112183, + 34.127104 + ], + [ + -118.112036, + 34.127113 + ], + [ + -118.111827, + 34.127117 + ], + [ + -118.111365, + 34.127128 + ], + [ + -118.111507, + 34.126705 + ], + [ + -118.111474, + 34.126599 + ], + [ + -118.111563, + 34.126596 + ], + [ + -118.111973, + 34.126541 + ], + [ + -118.112423, + 34.126342 + ], + [ + -118.112461, + 34.12633 + ], + [ + -118.112499, + 34.126361 + ], + [ + -118.112537, + 34.12643 + ], + [ + -118.112588, + 34.126481 + ], + [ + -118.112603, + 34.126521 + ], + [ + -118.112622, + 34.126635 + ], + [ + -118.112488, + 34.126649 + ], + [ + -118.112506, + 34.126774 + ], + [ + -118.112714, + 34.126753 + ], + [ + -118.112737, + 34.126923 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468639524, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.073952, + 33.942124 + ], + [ + -118.07294, + 33.94179 + ], + [ + -118.072867, + 33.941717 + ], + [ + -118.072889, + 33.940905 + ], + [ + -118.074302, + 33.940908 + ], + [ + -118.074634, + 33.940909 + ], + [ + -118.07468, + 33.940908 + ], + [ + -118.074727, + 33.940905 + ], + [ + -118.074759, + 33.940874 + ], + [ + -118.074788, + 33.940835 + ], + [ + -118.074984, + 33.940562 + ], + [ + -118.074995, + 33.94057 + ], + [ + -118.07509, + 33.940638 + ], + [ + -118.075129, + 33.940666 + ], + [ + -118.075067, + 33.940718 + ], + [ + -118.075017, + 33.940714 + ], + [ + -118.074859, + 33.940973 + ], + [ + -118.074716, + 33.941207 + ], + [ + -118.074574, + 33.941155 + ], + [ + -118.07452, + 33.941149 + ], + [ + -118.074499, + 33.941182 + ], + [ + -118.074455, + 33.941258 + ], + [ + -118.074281, + 33.941558 + ], + [ + -118.073952, + 33.942124 + ] + ] + ] + }, + "properties": { + "name": "Heritage Springs Sculpture Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468839607, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.901688, + 34.145178 + ], + [ + -117.901585, + 34.14511 + ], + [ + -117.901503, + 34.145035 + ], + [ + -117.90143, + 34.144928 + ], + [ + -117.901365, + 34.14481 + ], + [ + -117.901316, + 34.144689 + ], + [ + -117.901264, + 34.144484 + ], + [ + -117.901374, + 34.144536 + ], + [ + -117.901423, + 34.144535 + ], + [ + -117.901585, + 34.144489 + ], + [ + -117.90165, + 34.144468 + ], + [ + -117.901662, + 34.144464 + ], + [ + -117.901708, + 34.144454 + ], + [ + -117.901736, + 34.144448 + ], + [ + -117.901747, + 34.144454 + ], + [ + -117.901803, + 34.144486 + ], + [ + -117.90178, + 34.144555 + ], + [ + -117.901709, + 34.144603 + ], + [ + -117.90166, + 34.144662 + ], + [ + -117.901611, + 34.14473 + ], + [ + -117.901558, + 34.144801 + ], + [ + -117.901511, + 34.144865 + ], + [ + -117.901508, + 34.144895 + ], + [ + -117.901504, + 34.144925 + ], + [ + -117.901503, + 34.144933 + ], + [ + -117.901502, + 34.144942 + ], + [ + -117.901519, + 34.144959 + ], + [ + -117.90154, + 34.144981 + ], + [ + -117.901568, + 34.14501 + ], + [ + -117.901601, + 34.145027 + ], + [ + -117.90164, + 34.145046 + ], + [ + -117.901664, + 34.145074 + ], + [ + -117.901674, + 34.145086 + ], + [ + -117.901678, + 34.145099 + ], + [ + -117.901689, + 34.145131 + ], + [ + -117.901688, + 34.145178 + ] + ] + ] + }, + "properties": { + "name": "Ridgeview Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468842321, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.899827, + 34.144617 + ], + [ + -117.899823, + 34.144624 + ], + [ + -117.899811, + 34.144646 + ], + [ + -117.899663, + 34.145267 + ], + [ + -117.899658, + 34.145303 + ], + [ + -117.899663, + 34.145335 + ], + [ + -117.899703, + 34.145345 + ], + [ + -117.899802, + 34.145331 + ], + [ + -117.900012, + 34.145267 + ], + [ + -117.900028, + 34.14526 + ], + [ + -117.900213, + 34.145183 + ], + [ + -117.900291, + 34.145154 + ], + [ + -117.900293, + 34.14512 + ], + [ + -117.900178, + 34.144906 + ], + [ + -117.90015, + 34.144857 + ], + [ + -117.90008, + 34.144738 + ], + [ + -117.900076, + 34.144731 + ], + [ + -117.900057, + 34.144696 + ], + [ + -117.900021, + 34.144665 + ], + [ + -117.899967, + 34.144637 + ], + [ + -117.899921, + 34.144627 + ], + [ + -117.899912, + 34.144625 + ], + [ + -117.899867, + 34.144616 + ], + [ + -117.899827, + 34.144617 + ] + ] + ] + }, + "properties": { + "name": "Citrus Grove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468842523, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.899914, + 34.145087 + ], + [ + -117.899944, + 34.145076 + ], + [ + -117.899988, + 34.14506 + ], + [ + -117.900018, + 34.145007 + ], + [ + -117.900012, + 34.14496 + ], + [ + -117.900012, + 34.144949 + ], + [ + -117.900012, + 34.144928 + ], + [ + -117.900027, + 34.144891 + ], + [ + -117.900021, + 34.144869 + ], + [ + -117.9, + 34.144838 + ], + [ + -117.899943, + 34.144816 + ], + [ + -117.899902, + 34.144819 + ], + [ + -117.899885, + 34.144826 + ], + [ + -117.899871, + 34.144832 + ], + [ + -117.89981, + 34.144879 + ], + [ + -117.899801, + 34.144933 + ], + [ + -117.899798, + 34.144982 + ], + [ + -117.899815, + 34.145032 + ], + [ + -117.899844, + 34.145063 + ], + [ + -117.899888, + 34.145086 + ], + [ + -117.899914, + 34.145087 + ] + ] + ] + }, + "properties": { + "name": "Citrus Grove Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468843431, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.89722, + 34.142654 + ], + [ + -117.897165, + 34.14271 + ], + [ + -117.897142, + 34.14281 + ], + [ + -117.897161, + 34.142905 + ], + [ + -117.897228, + 34.143014 + ], + [ + -117.897313, + 34.143116 + ], + [ + -117.897402, + 34.143178 + ], + [ + -117.897488, + 34.143224 + ], + [ + -117.897588, + 34.14327 + ], + [ + -117.897721, + 34.143297 + ], + [ + -117.897831, + 34.143301 + ], + [ + -117.897954, + 34.143271 + ], + [ + -117.89804, + 34.143203 + ], + [ + -117.898081, + 34.143127 + ], + [ + -117.898089, + 34.143038 + ], + [ + -117.898056, + 34.142949 + ], + [ + -117.898003, + 34.142859 + ], + [ + -117.897965, + 34.142809 + ], + [ + -117.897901, + 34.142747 + ], + [ + -117.897836, + 34.142698 + ], + [ + -117.897756, + 34.14265 + ], + [ + -117.897649, + 34.142609 + ], + [ + -117.897547, + 34.142582 + ], + [ + -117.897394, + 34.142572 + ], + [ + -117.897327, + 34.142582 + ], + [ + -117.897268, + 34.142607 + ], + [ + -117.897236, + 34.14263 + ], + [ + -117.89722, + 34.142654 + ] + ] + ] + }, + "properties": { + "name": "Alisal Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468879660, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.904602, + 34.145801 + ], + [ + -117.904588, + 34.146026 + ], + [ + -117.904617, + 34.146054 + ], + [ + -117.90466, + 34.146063 + ], + [ + -117.904692, + 34.146062 + ], + [ + -117.904742, + 34.146021 + ], + [ + -117.904766, + 34.14597 + ], + [ + -117.904773, + 34.145916 + ], + [ + -117.904769, + 34.145868 + ], + [ + -117.904751, + 34.14582 + ], + [ + -117.904735, + 34.1458 + ], + [ + -117.904708, + 34.14578 + ], + [ + -117.904684, + 34.145766 + ], + [ + -117.904649, + 34.145761 + ], + [ + -117.90462, + 34.145765 + ], + [ + -117.904608, + 34.145784 + ], + [ + -117.904602, + 34.145801 + ] + ] + ] + }, + "properties": { + "name": "Pioneer Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468887377, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.890736, + 34.145745 + ], + [ + -117.890693, + 34.145587 + ], + [ + -117.890734, + 34.145518 + ], + [ + -117.890648, + 34.145466 + ], + [ + -117.890548, + 34.145389 + ], + [ + -117.890424, + 34.145527 + ], + [ + -117.890296, + 34.145723 + ], + [ + -117.890261, + 34.145877 + ], + [ + -117.890278, + 34.146138 + ], + [ + -117.890375, + 34.146295 + ], + [ + -117.890525, + 34.1464 + ], + [ + -117.890762, + 34.146381 + ], + [ + -117.890674, + 34.146138 + ], + [ + -117.890663, + 34.146011 + ], + [ + -117.890643, + 34.145994 + ], + [ + -117.890634, + 34.145987 + ], + [ + -117.890591, + 34.145935 + ], + [ + -117.890584, + 34.145879 + ], + [ + -117.8906, + 34.145806 + ], + [ + -117.89066, + 34.145758 + ], + [ + -117.890736, + 34.145745 + ] + ] + ] + }, + "properties": { + "name": "Rancho Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468888207, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.890638, + 34.146143 + ], + [ + -117.890632, + 34.146173 + ], + [ + -117.890613, + 34.1462 + ], + [ + -117.890585, + 34.146221 + ], + [ + -117.890551, + 34.146233 + ], + [ + -117.890513, + 34.146235 + ], + [ + -117.890477, + 34.146227 + ], + [ + -117.890446, + 34.14621 + ], + [ + -117.890424, + 34.146185 + ], + [ + -117.890413, + 34.146156 + ], + [ + -117.890413, + 34.146125 + ], + [ + -117.890426, + 34.146097 + ], + [ + -117.890448, + 34.146073 + ], + [ + -117.890465, + 34.146064 + ], + [ + -117.890479, + 34.146056 + ], + [ + -117.890515, + 34.146048 + ], + [ + -117.890552, + 34.146051 + ], + [ + -117.890586, + 34.146063 + ], + [ + -117.890614, + 34.146084 + ], + [ + -117.890632, + 34.146112 + ], + [ + -117.890638, + 34.146143 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468931442, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.879482, + 34.009945 + ], + [ + -117.87943, + 34.009953 + ], + [ + -117.879289, + 34.00986 + ], + [ + -117.879288, + 34.009783 + ], + [ + -117.879353, + 34.009735 + ], + [ + -117.879491, + 34.009791 + ], + [ + -117.879514, + 34.009904 + ], + [ + -117.879482, + 34.009945 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468931603, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.872263, + 34.016452 + ], + [ + -117.872133, + 34.016344 + ], + [ + -117.871894, + 34.016539 + ], + [ + -117.87204, + 34.016657 + ], + [ + -117.872263, + 34.016452 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468933506, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.879104, + 34.010121 + ], + [ + -117.879319, + 34.010035 + ], + [ + -117.879437, + 34.010007 + ], + [ + -117.879554, + 34.009982 + ], + [ + -117.879754, + 34.009964 + ], + [ + -117.879888, + 34.009965 + ], + [ + -117.880038, + 34.009977 + ], + [ + -117.880091, + 34.00996 + ], + [ + -117.880112, + 34.009919 + ], + [ + -117.88022, + 34.008889 + ], + [ + -117.878204, + 34.008785 + ], + [ + -117.878191, + 34.008907 + ], + [ + -117.878153, + 34.008972 + ], + [ + -117.878148, + 34.009068 + ], + [ + -117.878107, + 34.009218 + ], + [ + -117.878039, + 34.009293 + ], + [ + -117.878022, + 34.009388 + ], + [ + -117.877961, + 34.009465 + ], + [ + -117.878227, + 34.009572 + ], + [ + -117.878341, + 34.009626 + ], + [ + -117.878431, + 34.009655 + ], + [ + -117.878527, + 34.009687 + ], + [ + -117.8786, + 34.009698 + ], + [ + -117.878639, + 34.009725 + ], + [ + -117.878712, + 34.009766 + ], + [ + -117.878814, + 34.00982 + ], + [ + -117.878909, + 34.009904 + ], + [ + -117.878993, + 34.00996 + ], + [ + -117.879067, + 34.01002 + ], + [ + -117.879104, + 34.010121 + ] + ] + ] + }, + "properties": { + "name": "Friendship Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468934328, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.865664, + 34.015038 + ], + [ + -117.86661, + 34.014718 + ], + [ + -117.866637, + 34.014695 + ], + [ + -117.866638, + 34.014664 + ], + [ + -117.866436, + 34.014129 + ], + [ + -117.866364, + 34.01393 + ], + [ + -117.866316, + 34.013729 + ], + [ + -117.865857, + 34.013797 + ], + [ + -117.86579, + 34.013446 + ], + [ + -117.865497, + 34.01347 + ], + [ + -117.865503, + 34.013564 + ], + [ + -117.865488, + 34.013658 + ], + [ + -117.865448, + 34.013783 + ], + [ + -117.865339, + 34.013963 + ], + [ + -117.865291, + 34.014132 + ], + [ + -117.865278, + 34.014383 + ], + [ + -117.865222, + 34.014451 + ], + [ + -117.865038, + 34.014597 + ], + [ + -117.864821, + 34.014667 + ], + [ + -117.864356, + 34.014716 + ], + [ + -117.863785, + 34.014877 + ], + [ + -117.864157, + 34.015312 + ], + [ + -117.865478, + 34.014722 + ], + [ + -117.865664, + 34.015038 + ] + ] + ] + }, + "properties": { + "name": "Lemon Creek Bicentennial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468934641, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.871844, + 34.017127 + ], + [ + -117.871624, + 34.016754 + ], + [ + -117.872946, + 34.015671 + ], + [ + -117.873185, + 34.015846 + ], + [ + -117.87329, + 34.015933 + ], + [ + -117.873321, + 34.016007 + ], + [ + -117.873365, + 34.016142 + ], + [ + -117.873375, + 34.016174 + ], + [ + -117.87312, + 34.01641 + ], + [ + -117.873043, + 34.016531 + ], + [ + -117.872974, + 34.01666 + ], + [ + -117.872902, + 34.01694 + ], + [ + -117.872858, + 34.017203 + ], + [ + -117.872604, + 34.017164 + ], + [ + -117.87234, + 34.017131 + ], + [ + -117.872095, + 34.017108 + ], + [ + -117.871844, + 34.017127 + ] + ] + ] + }, + "properties": { + "name": "Butterfield Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469158340, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.905145, + 34.145552 + ], + [ + -117.905148, + 34.146585 + ], + [ + -117.905115, + 34.146629 + ], + [ + -117.905046, + 34.146665 + ], + [ + -117.903525, + 34.146669 + ], + [ + -117.903528, + 34.146265 + ], + [ + -117.903603, + 34.146114 + ], + [ + -117.903683, + 34.146039 + ], + [ + -117.903705, + 34.145985 + ], + [ + -117.903721, + 34.145905 + ], + [ + -117.903774, + 34.145868 + ], + [ + -117.903887, + 34.14581 + ], + [ + -117.903951, + 34.145759 + ], + [ + -117.90401, + 34.145706 + ], + [ + -117.904019, + 34.145603 + ], + [ + -117.904016, + 34.145535 + ], + [ + -117.905145, + 34.145552 + ] + ] + ] + }, + "properties": { + "name": "Pioneer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469215436, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.001814, + 33.93631 + ], + [ + -118.0018, + 33.936279 + ], + [ + -118.001795, + 33.936254 + ], + [ + -118.001795, + 33.936213 + ], + [ + -118.001803, + 33.936178 + ], + [ + -118.001813, + 33.936142 + ], + [ + -118.001827, + 33.936103 + ], + [ + -118.001844, + 33.936055 + ], + [ + -118.001864, + 33.936039 + ], + [ + -118.00189, + 33.936028 + ], + [ + -118.001915, + 33.936022 + ], + [ + -118.001943, + 33.936022 + ], + [ + -118.001969, + 33.93603 + ], + [ + -118.001988, + 33.936042 + ], + [ + -118.002005, + 33.936058 + ], + [ + -118.002015, + 33.936083 + ], + [ + -118.002023, + 33.936114 + ], + [ + -118.002025, + 33.93615 + ], + [ + -118.002023, + 33.936198 + ], + [ + -118.00202, + 33.936234 + ], + [ + -118.002015, + 33.936257 + ], + [ + -118.00201, + 33.93628 + ], + [ + -118.002, + 33.936307 + ], + [ + -118.001985, + 33.936325 + ], + [ + -118.001952, + 33.936344 + ], + [ + -118.001927, + 33.936348 + ], + [ + -118.001886, + 33.936352 + ], + [ + -118.001858, + 33.936343 + ], + [ + -118.001833, + 33.936329 + ], + [ + -118.001814, + 33.93631 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469216322, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.021189, + 33.963182 + ], + [ + -118.021127, + 33.963194 + ], + [ + -118.020913, + 33.963426 + ], + [ + -118.020966, + 33.963491 + ], + [ + -118.021044, + 33.963536 + ], + [ + -118.02114, + 33.963574 + ], + [ + -118.021253, + 33.963572 + ], + [ + -118.02136, + 33.963538 + ], + [ + -118.021439, + 33.963477 + ], + [ + -118.02149, + 33.9634 + ], + [ + -118.021506, + 33.963326 + ], + [ + -118.021189, + 33.963182 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469216323, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.022451, + 33.964246 + ], + [ + -118.02245, + 33.964268 + ], + [ + -118.022444, + 33.964287 + ], + [ + -118.022435, + 33.964307 + ], + [ + -118.02242, + 33.964326 + ], + [ + -118.022404, + 33.96434 + ], + [ + -118.022386, + 33.964351 + ], + [ + -118.022366, + 33.964361 + ], + [ + -118.022344, + 33.964369 + ], + [ + -118.022204, + 33.964282 + ], + [ + -118.022056, + 33.964195 + ], + [ + -118.022059, + 33.964175 + ], + [ + -118.022064, + 33.964155 + ], + [ + -118.022074, + 33.964137 + ], + [ + -118.022088, + 33.964118 + ], + [ + -118.022103, + 33.964102 + ], + [ + -118.022122, + 33.964088 + ], + [ + -118.022147, + 33.964078 + ], + [ + -118.022169, + 33.964073 + ], + [ + -118.022451, + 33.964246 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469235822, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.933161, + 34.105323 + ], + [ + -117.933177, + 34.104306 + ], + [ + -117.932405, + 34.104297 + ], + [ + -117.9324, + 34.103843 + ], + [ + -117.931977, + 34.103843 + ], + [ + -117.93155, + 34.103957 + ], + [ + -117.931145, + 34.103954 + ], + [ + -117.929778, + 34.103958 + ], + [ + -117.929769, + 34.104446 + ], + [ + -117.930309, + 34.104533 + ], + [ + -117.930327, + 34.104991 + ], + [ + -117.930748, + 34.104993 + ], + [ + -117.930734, + 34.10521 + ], + [ + -117.930962, + 34.105465 + ], + [ + -117.932566, + 34.105487 + ], + [ + -117.932785, + 34.105443 + ], + [ + -117.933161, + 34.105323 + ] + ] + ] + }, + "properties": { + "name": "Irwindale Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469236231, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.91969, + 34.112784 + ], + [ + -117.919706, + 34.112175 + ], + [ + -117.91948, + 34.112131 + ], + [ + -117.919486, + 34.111975 + ], + [ + -117.919491, + 34.111704 + ], + [ + -117.916827, + 34.111711 + ], + [ + -117.916601, + 34.111709 + ], + [ + -117.916567, + 34.111718 + ], + [ + -117.91654, + 34.112801 + ], + [ + -117.91969, + 34.112784 + ] + ] + ] + }, + "properties": { + "name": "Valleydale Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469237329, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.850838, + 33.986278 + ], + [ + -117.850171, + 33.986158 + ], + [ + -117.850584, + 33.985388 + ], + [ + -117.850741, + 33.98528 + ], + [ + -117.850833, + 33.985263 + ], + [ + -117.850928, + 33.985266 + ], + [ + -117.851049, + 33.985291 + ], + [ + -117.851145, + 33.985356 + ], + [ + -117.85132, + 33.985533 + ], + [ + -117.851076, + 33.985799 + ], + [ + -117.850857, + 33.986217 + ], + [ + -117.850838, + 33.986278 + ] + ] + ] + }, + "properties": { + "name": "Starshine Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469255522, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.09483, + 33.948239 + ], + [ + -118.095103, + 33.948412 + ], + [ + -118.096876, + 33.946407 + ], + [ + -118.098186, + 33.944227 + ], + [ + -118.097641, + 33.943844 + ], + [ + -118.096436, + 33.946254 + ], + [ + -118.095986, + 33.946264 + ], + [ + -118.09515, + 33.947007 + ], + [ + -118.09483, + 33.948239 + ] + ] + ] + }, + "properties": { + "name": "Santa Fe Springs Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469264956, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.852301, + 34.026134 + ], + [ + -117.852255, + 34.026094 + ], + [ + -117.851959, + 34.026101 + ], + [ + -117.851933, + 34.026162 + ], + [ + -117.851914, + 34.026222 + ], + [ + -117.851911, + 34.026273 + ], + [ + -117.85192, + 34.026323 + ], + [ + -117.851974, + 34.026387 + ], + [ + -117.852051, + 34.026422 + ], + [ + -117.852101, + 34.026427 + ], + [ + -117.852149, + 34.026424 + ], + [ + -117.852227, + 34.026404 + ], + [ + -117.852301, + 34.026375 + ], + [ + -117.852301, + 34.026134 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469264961, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.849925, + 34.026152 + ], + [ + -117.849937, + 34.026143 + ], + [ + -117.849947, + 34.026132 + ], + [ + -117.849953, + 34.026116 + ], + [ + -117.849954, + 34.026099 + ], + [ + -117.849947, + 34.026077 + ], + [ + -117.849932, + 34.02606 + ], + [ + -117.84991, + 34.026049 + ], + [ + -117.849885, + 34.026044 + ], + [ + -117.849855, + 34.026048 + ], + [ + -117.849829, + 34.026057 + ], + [ + -117.849808, + 34.026062 + ], + [ + -117.84978, + 34.026059 + ], + [ + -117.849752, + 34.026057 + ], + [ + -117.849725, + 34.026058 + ], + [ + -117.849711, + 34.026065 + ], + [ + -117.849694, + 34.026081 + ], + [ + -117.849687, + 34.026103 + ], + [ + -117.849684, + 34.02613 + ], + [ + -117.849694, + 34.026156 + ], + [ + -117.84971, + 34.026173 + ], + [ + -117.849735, + 34.026184 + ], + [ + -117.84976, + 34.026187 + ], + [ + -117.849787, + 34.026184 + ], + [ + -117.849807, + 34.026176 + ], + [ + -117.849826, + 34.026167 + ], + [ + -117.84985, + 34.026164 + ], + [ + -117.849872, + 34.026167 + ], + [ + -117.849892, + 34.026165 + ], + [ + -117.84991, + 34.02616 + ], + [ + -117.849925, + 34.026152 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469310140, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.151184, + 33.958592 + ], + [ + -118.151034, + 33.958563 + ], + [ + -118.151056, + 33.958451 + ], + [ + -118.151066, + 33.958418 + ], + [ + -118.151088, + 33.958411 + ], + [ + -118.151124, + 33.958405 + ], + [ + -118.151142, + 33.958408 + ], + [ + -118.151224, + 33.958422 + ], + [ + -118.151184, + 33.958592 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469312965, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.156406, + 33.959687 + ], + [ + -118.156104, + 33.959492 + ], + [ + -118.156004, + 33.95948 + ], + [ + -118.155869, + 33.959393 + ], + [ + -118.155706, + 33.959321 + ], + [ + -118.155592, + 33.959289 + ], + [ + -118.155391, + 33.959246 + ], + [ + -118.155552, + 33.95841 + ], + [ + -118.156618, + 33.95857 + ], + [ + -118.156406, + 33.959687 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469328870, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.067788, + 33.9158 + ], + [ + -118.06779, + 33.915736 + ], + [ + -118.068898, + 33.915719 + ], + [ + -118.068701, + 33.91626 + ], + [ + -118.067792, + 33.916247 + ], + [ + -118.067796, + 33.916186 + ], + [ + -118.06817, + 33.916184 + ], + [ + -118.06816, + 33.915796 + ], + [ + -118.067788, + 33.9158 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469521221, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.142047, + 33.92116 + ], + [ + -118.14213, + 33.921219 + ], + [ + -118.142108, + 33.921238 + ], + [ + -118.142077, + 33.921266 + ], + [ + -118.142057, + 33.921288 + ], + [ + -118.142047, + 33.921308 + ], + [ + -118.142039, + 33.921329 + ], + [ + -118.142021, + 33.921351 + ], + [ + -118.142001, + 33.921369 + ], + [ + -118.141986, + 33.921382 + ], + [ + -118.141968, + 33.921383 + ], + [ + -118.14195, + 33.921376 + ], + [ + -118.141922, + 33.921364 + ], + [ + -118.141898, + 33.921354 + ], + [ + -118.141871, + 33.921342 + ], + [ + -118.14185, + 33.921326 + ], + [ + -118.141836, + 33.921315 + ], + [ + -118.141825, + 33.921295 + ], + [ + -118.141817, + 33.921273 + ], + [ + -118.141867, + 33.921211 + ], + [ + -118.141886, + 33.921225 + ], + [ + -118.141907, + 33.921233 + ], + [ + -118.14193, + 33.921238 + ], + [ + -118.141953, + 33.921235 + ], + [ + -118.141972, + 33.921224 + ], + [ + -118.142, + 33.9212 + ], + [ + -118.142047, + 33.92116 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469526426, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.157632, + 33.951826 + ], + [ + -118.157581, + 33.951915 + ], + [ + -118.157334, + 33.951826 + ], + [ + -118.157388, + 33.951728 + ], + [ + -118.156902, + 33.951535 + ], + [ + -118.156731, + 33.952426 + ], + [ + -118.15676, + 33.952482 + ], + [ + -118.156771, + 33.952527 + ], + [ + -118.156765, + 33.952562 + ], + [ + -118.156926, + 33.952593 + ], + [ + -118.157329, + 33.952638 + ], + [ + -118.157502, + 33.952487 + ], + [ + -118.158, + 33.951963 + ], + [ + -118.157632, + 33.951826 + ] + ] + ] + }, + "properties": { + "name": "Crawford Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469531433, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.900616, + 34.010196 + ], + [ + -117.90064, + 34.009954 + ], + [ + -117.900825, + 34.009968 + ], + [ + -117.900799, + 34.010209 + ], + [ + -117.900616, + 34.010196 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469531434, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.901775, + 34.010174 + ], + [ + -117.901739, + 34.010194 + ], + [ + -117.901672, + 34.010166 + ], + [ + -117.901648, + 34.01018 + ], + [ + -117.901483, + 34.010169 + ], + [ + -117.901447, + 34.010133 + ], + [ + -117.901432, + 34.0101 + ], + [ + -117.901419, + 34.01006 + ], + [ + -117.901419, + 34.010019 + ], + [ + -117.90143, + 34.009987 + ], + [ + -117.901439, + 34.009966 + ], + [ + -117.901451, + 34.009946 + ], + [ + -117.901483, + 34.009917 + ], + [ + -117.901524, + 34.009897 + ], + [ + -117.901583, + 34.009885 + ], + [ + -117.90164, + 34.009888 + ], + [ + -117.901703, + 34.009897 + ], + [ + -117.901751, + 34.009914 + ], + [ + -117.901781, + 34.009927 + ], + [ + -117.901776, + 34.010097 + ], + [ + -117.901751, + 34.010115 + ], + [ + -117.901775, + 34.010174 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469539495, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.154447, + 33.925466 + ], + [ + -118.154291, + 33.925463 + ], + [ + -118.153553, + 33.92644 + ], + [ + -118.15342, + 33.926616 + ], + [ + -118.153347, + 33.92658 + ], + [ + -118.153044, + 33.926987 + ], + [ + -118.152632, + 33.927524 + ], + [ + -118.153264, + 33.927842 + ], + [ + -118.153385, + 33.927688 + ], + [ + -118.153618, + 33.927783 + ], + [ + -118.153736, + 33.927843 + ], + [ + -118.153949, + 33.927557 + ], + [ + -118.15459, + 33.92789 + ], + [ + -118.154878, + 33.928034 + ], + [ + -118.155278, + 33.92751 + ], + [ + -118.155658, + 33.927007 + ], + [ + -118.15568, + 33.926978 + ], + [ + -118.156134, + 33.926382 + ], + [ + -118.156122, + 33.926338 + ], + [ + -118.156111, + 33.926299 + ], + [ + -118.155381, + 33.925935 + ], + [ + -118.154447, + 33.925466 + ] + ] + ] + }, + "properties": { + "name": "Apollo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469543238, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.112043, + 33.955824 + ], + [ + -118.112036, + 33.955845 + ], + [ + -118.112021, + 33.955867 + ], + [ + -118.111993, + 33.955888 + ], + [ + -118.111963, + 33.9559 + ], + [ + -118.111929, + 33.955911 + ], + [ + -118.111893, + 33.955928 + ], + [ + -118.111869, + 33.955947 + ], + [ + -118.11185, + 33.95597 + ], + [ + -118.111842, + 33.956002 + ], + [ + -118.111838, + 33.956041 + ], + [ + -118.111828, + 33.956073 + ], + [ + -118.111815, + 33.956105 + ], + [ + -118.111796, + 33.956125 + ], + [ + -118.111774, + 33.956145 + ], + [ + -118.111743, + 33.956168 + ], + [ + -118.111693, + 33.956187 + ], + [ + -118.111657, + 33.9562 + ], + [ + -118.111614, + 33.956207 + ], + [ + -118.111578, + 33.956207 + ], + [ + -118.111549, + 33.956197 + ], + [ + -118.111527, + 33.956182 + ], + [ + -118.111519, + 33.956164 + ], + [ + -118.111515, + 33.956148 + ], + [ + -118.111517, + 33.956133 + ], + [ + -118.111525, + 33.956108 + ], + [ + -118.111535, + 33.956093 + ], + [ + -118.111543, + 33.956078 + ], + [ + -118.111562, + 33.956058 + ], + [ + -118.111596, + 33.95604 + ], + [ + -118.111607, + 33.956031 + ], + [ + -118.111626, + 33.956012 + ], + [ + -118.111639, + 33.955989 + ], + [ + -118.111641, + 33.955959 + ], + [ + -118.111641, + 33.955926 + ], + [ + -118.111641, + 33.955904 + ], + [ + -118.111654, + 33.955881 + ], + [ + -118.111665, + 33.955853 + ], + [ + -118.11168, + 33.955834 + ], + [ + -118.111708, + 33.955815 + ], + [ + -118.11174, + 33.955805 + ], + [ + -118.111769, + 33.955794 + ], + [ + -118.111798, + 33.955775 + ], + [ + -118.111834, + 33.955752 + ], + [ + -118.111863, + 33.955735 + ], + [ + -118.111889, + 33.955725 + ], + [ + -118.111921, + 33.955721 + ], + [ + -118.111956, + 33.955724 + ], + [ + -118.111983, + 33.955733 + ], + [ + -118.112008, + 33.955748 + ], + [ + -118.112024, + 33.955767 + ], + [ + -118.112036, + 33.955794 + ], + [ + -118.112043, + 33.955824 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469564977, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.122443, + 33.919327 + ], + [ + -118.12246, + 33.919007 + ], + [ + -118.122457, + 33.918978 + ], + [ + -118.122443, + 33.918949 + ], + [ + -118.122417, + 33.918925 + ], + [ + -118.122384, + 33.918912 + ], + [ + -118.122342, + 33.918909 + ], + [ + -118.122024, + 33.918899 + ], + [ + -118.12203, + 33.918982 + ], + [ + -118.122093, + 33.9191 + ], + [ + -118.122142, + 33.919178 + ], + [ + -118.122224, + 33.919238 + ], + [ + -118.122337, + 33.919292 + ], + [ + -118.122443, + 33.919327 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469564992, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.125323, + 33.919919 + ], + [ + -118.125283, + 33.919919 + ], + [ + -118.124672, + 33.919921 + ], + [ + -118.123679, + 33.919923 + ], + [ + -118.123167, + 33.919927 + ], + [ + -118.122077, + 33.919938 + ], + [ + -118.121551, + 33.919939 + ], + [ + -118.121552, + 33.918863 + ], + [ + -118.123228, + 33.91886 + ], + [ + -118.123228, + 33.918877 + ], + [ + -118.125318, + 33.918869 + ], + [ + -118.125323, + 33.919919 + ] + ] + ] + }, + "properties": { + "name": "Independence Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469566096, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.160412, + 33.941882 + ], + [ + -118.160205, + 33.941776 + ], + [ + -118.160177, + 33.941772 + ], + [ + -118.160143, + 33.941778 + ], + [ + -118.160121, + 33.941795 + ], + [ + -118.159823, + 33.942186 + ], + [ + -118.159812, + 33.942212 + ], + [ + -118.159818, + 33.942237 + ], + [ + -118.159837, + 33.94227 + ], + [ + -118.16004, + 33.94237 + ], + [ + -118.160055, + 33.942349 + ], + [ + -118.160398, + 33.9419 + ], + [ + -118.160412, + 33.941882 + ] + ] + ] + }, + "properties": { + "name": "Temple Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469568995, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.13365, + 33.966684 + ], + [ + -118.133513, + 33.966497 + ], + [ + -118.12817, + 33.96909 + ], + [ + -118.128429, + 33.969217 + ], + [ + -118.128456, + 33.969191 + ], + [ + -118.128499, + 33.96916 + ], + [ + -118.128744, + 33.969044 + ], + [ + -118.129699, + 33.96859 + ], + [ + -118.13365, + 33.966684 + ] + ] + ] + }, + "properties": { + "name": "Treasure Island Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469579814, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.927772, + 33.983846 + ], + [ + -117.927813, + 33.983814 + ], + [ + -117.927813, + 33.983548 + ], + [ + -117.927774, + 33.983514 + ], + [ + -117.927652, + 33.983514 + ], + [ + -117.927613, + 33.983548 + ], + [ + -117.927613, + 33.983812 + ], + [ + -117.927656, + 33.983848 + ], + [ + -117.927772, + 33.983846 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469581400, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.941519, + 33.990322 + ], + [ + -117.941564, + 33.990325 + ], + [ + -117.941919, + 33.990141 + ], + [ + -117.942363, + 33.989974 + ], + [ + -117.94248, + 33.989921 + ], + [ + -117.942617, + 33.989857 + ], + [ + -117.942675, + 33.989815 + ], + [ + -117.942686, + 33.989788 + ], + [ + -117.942682, + 33.989772 + ], + [ + -117.942671, + 33.989757 + ], + [ + -117.942434, + 33.989513 + ], + [ + -117.942363, + 33.989444 + ], + [ + -117.942295, + 33.989367 + ], + [ + -117.942252, + 33.989312 + ], + [ + -117.942209, + 33.989255 + ], + [ + -117.942204, + 33.989248 + ], + [ + -117.942178, + 33.989203 + ], + [ + -117.942171, + 33.98919 + ], + [ + -117.942116, + 33.989092 + ], + [ + -117.94208, + 33.989013 + ], + [ + -117.942066, + 33.988972 + ], + [ + -117.942048, + 33.988915 + ], + [ + -117.942033, + 33.988841 + ], + [ + -117.942018, + 33.988766 + ], + [ + -117.942013, + 33.988699 + ], + [ + -117.942013, + 33.988621 + ], + [ + -117.942004, + 33.988599 + ], + [ + -117.941992, + 33.988582 + ], + [ + -117.941974, + 33.98857 + ], + [ + -117.941948, + 33.988565 + ], + [ + -117.941686, + 33.98856 + ], + [ + -117.941661, + 33.988559 + ], + [ + -117.941619, + 33.988558 + ], + [ + -117.941493, + 33.988557 + ], + [ + -117.941395, + 33.988563 + ], + [ + -117.941288, + 33.988583 + ], + [ + -117.941148, + 33.988627 + ], + [ + -117.940997, + 33.9887 + ], + [ + -117.940895, + 33.988784 + ], + [ + -117.940785, + 33.988907 + ], + [ + -117.940603, + 33.98911 + ], + [ + -117.940398, + 33.989334 + ], + [ + -117.940348, + 33.989381 + ], + [ + -117.940337, + 33.989412 + ], + [ + -117.940339, + 33.989434 + ], + [ + -117.940357, + 33.989469 + ], + [ + -117.940398, + 33.989507 + ], + [ + -117.940819, + 33.989815 + ], + [ + -117.941123, + 33.990049 + ], + [ + -117.941376, + 33.990237 + ], + [ + -117.941475, + 33.990307 + ], + [ + -117.941519, + 33.990322 + ] + ] + ] + }, + "properties": { + "name": "Countrywood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469583195, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.951205, + 33.991658 + ], + [ + -117.951351, + 33.991711 + ], + [ + -117.951475, + 33.991778 + ], + [ + -117.951649, + 33.991939 + ], + [ + -117.951718, + 33.991993 + ], + [ + -117.952735, + 33.991434 + ], + [ + -117.952994, + 33.990435 + ], + [ + -117.952986, + 33.990147 + ], + [ + -117.952895, + 33.990147 + ], + [ + -117.952803, + 33.99013 + ], + [ + -117.952726, + 33.990108 + ], + [ + -117.952659, + 33.990075 + ], + [ + -117.952281, + 33.989854 + ], + [ + -117.951972, + 33.989682 + ], + [ + -117.951942, + 33.989679 + ], + [ + -117.951919, + 33.989692 + ], + [ + -117.951871, + 33.989739 + ], + [ + -117.951754, + 33.98982 + ], + [ + -117.951655, + 33.989867 + ], + [ + -117.951482, + 33.989902 + ], + [ + -117.951293, + 33.989909 + ], + [ + -117.950433, + 33.989837 + ], + [ + -117.950413, + 33.989845 + ], + [ + -117.950398, + 33.989858 + ], + [ + -117.950378, + 33.989984 + ], + [ + -117.950372, + 33.990041 + ], + [ + -117.950365, + 33.990096 + ], + [ + -117.95036, + 33.990145 + ], + [ + -117.950274, + 33.990932 + ], + [ + -117.950268, + 33.990992 + ], + [ + -117.950266, + 33.991012 + ], + [ + -117.950247, + 33.991063 + ], + [ + -117.950266, + 33.991185 + ], + [ + -117.950296, + 33.991279 + ], + [ + -117.950322, + 33.991325 + ], + [ + -117.950347, + 33.991363 + ], + [ + -117.950375, + 33.991398 + ], + [ + -117.950421, + 33.991445 + ], + [ + -117.950457, + 33.991474 + ], + [ + -117.95052, + 33.991511 + ], + [ + -117.950581, + 33.99154 + ], + [ + -117.950669, + 33.991564 + ], + [ + -117.950854, + 33.991592 + ], + [ + -117.951205, + 33.991658 + ] + ] + ] + }, + "properties": { + "name": "Thomas S. Burton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469583349, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.951238, + 33.991284 + ], + [ + -117.951261, + 33.991296 + ], + [ + -117.951283, + 33.991305 + ], + [ + -117.951311, + 33.991308 + ], + [ + -117.951416, + 33.991291 + ], + [ + -117.951455, + 33.991271 + ], + [ + -117.951482, + 33.991236 + ], + [ + -117.951489, + 33.991206 + ], + [ + -117.951485, + 33.99118 + ], + [ + -117.951475, + 33.991159 + ], + [ + -117.951453, + 33.991136 + ], + [ + -117.951421, + 33.991116 + ], + [ + -117.951387, + 33.991108 + ], + [ + -117.951346, + 33.991111 + ], + [ + -117.95131, + 33.991125 + ], + [ + -117.951267, + 33.991144 + ], + [ + -117.951245, + 33.991155 + ], + [ + -117.951199, + 33.991154 + ], + [ + -117.951176, + 33.991137 + ], + [ + -117.951161, + 33.99111 + ], + [ + -117.951162, + 33.991084 + ], + [ + -117.951171, + 33.991054 + ], + [ + -117.951173, + 33.991024 + ], + [ + -117.951166, + 33.990998 + ], + [ + -117.951149, + 33.990982 + ], + [ + -117.95113, + 33.990967 + ], + [ + -117.9511, + 33.990955 + ], + [ + -117.951066, + 33.990953 + ], + [ + -117.951033, + 33.990961 + ], + [ + -117.950993, + 33.990975 + ], + [ + -117.950967, + 33.990988 + ], + [ + -117.950943, + 33.991004 + ], + [ + -117.950921, + 33.99103 + ], + [ + -117.950903, + 33.991065 + ], + [ + -117.950901, + 33.991088 + ], + [ + -117.950943, + 33.9912 + ], + [ + -117.951013, + 33.991196 + ], + [ + -117.951107, + 33.991195 + ], + [ + -117.951189, + 33.991235 + ], + [ + -117.951213, + 33.99127 + ], + [ + -117.951238, + 33.991284 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469584911, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.942101, + 33.993289 + ], + [ + -117.942428, + 33.993265 + ], + [ + -117.942951, + 33.993192 + ], + [ + -117.943163, + 33.993158 + ], + [ + -117.943428, + 33.9931 + ], + [ + -117.943691, + 33.993047 + ], + [ + -117.943954, + 33.992976 + ], + [ + -117.944056, + 33.992914 + ], + [ + -117.944112, + 33.992871 + ], + [ + -117.944088, + 33.992784 + ], + [ + -117.944037, + 33.992638 + ], + [ + -117.943978, + 33.992504 + ], + [ + -117.943943, + 33.992411 + ], + [ + -117.943895, + 33.992258 + ], + [ + -117.943879, + 33.992175 + ], + [ + -117.943855, + 33.992055 + ], + [ + -117.943485, + 33.992095 + ], + [ + -117.943152, + 33.992188 + ], + [ + -117.942903, + 33.992284 + ], + [ + -117.942803, + 33.992315 + ], + [ + -117.942699, + 33.992342 + ], + [ + -117.942565, + 33.992357 + ], + [ + -117.942374, + 33.992375 + ], + [ + -117.942181, + 33.992389 + ], + [ + -117.94205, + 33.9924 + ], + [ + -117.942023, + 33.992427 + ], + [ + -117.94202, + 33.99246 + ], + [ + -117.942024, + 33.9925 + ], + [ + -117.94203, + 33.992556 + ], + [ + -117.94209, + 33.993178 + ], + [ + -117.942095, + 33.99323 + ], + [ + -117.942096, + 33.99324 + ], + [ + -117.942101, + 33.993289 + ] + ] + ] + }, + "properties": { + "name": "Pepperbrook Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469585087, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.942387, + 33.99274 + ], + [ + -117.94241, + 33.992745 + ], + [ + -117.942441, + 33.992738 + ], + [ + -117.94248, + 33.992724 + ], + [ + -117.942507, + 33.992719 + ], + [ + -117.942531, + 33.99272 + ], + [ + -117.942589, + 33.992729 + ], + [ + -117.942628, + 33.992728 + ], + [ + -117.942655, + 33.992716 + ], + [ + -117.942667, + 33.992703 + ], + [ + -117.94268, + 33.992687 + ], + [ + -117.942688, + 33.992673 + ], + [ + -117.942694, + 33.992657 + ], + [ + -117.942694, + 33.992647 + ], + [ + -117.942693, + 33.992638 + ], + [ + -117.942691, + 33.992626 + ], + [ + -117.942687, + 33.99261 + ], + [ + -117.942678, + 33.9926 + ], + [ + -117.942663, + 33.99259 + ], + [ + -117.942643, + 33.992578 + ], + [ + -117.94262, + 33.992571 + ], + [ + -117.942591, + 33.992568 + ], + [ + -117.942562, + 33.992575 + ], + [ + -117.942538, + 33.992591 + ], + [ + -117.942508, + 33.992612 + ], + [ + -117.942486, + 33.99262 + ], + [ + -117.942466, + 33.992625 + ], + [ + -117.942448, + 33.992627 + ], + [ + -117.942421, + 33.992625 + ], + [ + -117.942398, + 33.992616 + ], + [ + -117.942383, + 33.992607 + ], + [ + -117.942366, + 33.992602 + ], + [ + -117.942343, + 33.992604 + ], + [ + -117.94233, + 33.992613 + ], + [ + -117.942316, + 33.992635 + ], + [ + -117.942321, + 33.992654 + ], + [ + -117.942331, + 33.99267 + ], + [ + -117.942346, + 33.992681 + ], + [ + -117.94235, + 33.992703 + ], + [ + -117.942364, + 33.992725 + ], + [ + -117.942387, + 33.99274 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469592987, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.892331, + 34.143075 + ], + [ + -117.892209, + 34.143079 + ], + [ + -117.892031, + 34.143083 + ], + [ + -117.891916, + 34.143095 + ], + [ + -117.891822, + 34.143122 + ], + [ + -117.891755, + 34.143154 + ], + [ + -117.891708, + 34.143185 + ], + [ + -117.891686, + 34.143259 + ], + [ + -117.891672, + 34.143308 + ], + [ + -117.891691, + 34.143351 + ], + [ + -117.891725, + 34.143402 + ], + [ + -117.89178, + 34.143451 + ], + [ + -117.891838, + 34.143492 + ], + [ + -117.89186, + 34.143498 + ], + [ + -117.891874, + 34.143483 + ], + [ + -117.891963, + 34.143383 + ], + [ + -117.89213, + 34.14323 + ], + [ + -117.892198, + 34.143167 + ], + [ + -117.892331, + 34.143075 + ] + ] + ] + }, + "properties": { + "name": "Olive Hill Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469596930, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.895747, + 34.145043 + ], + [ + -117.895736, + 34.144921 + ], + [ + -117.895696, + 34.144793 + ], + [ + -117.895637, + 34.144673 + ], + [ + -117.895604, + 34.144631 + ], + [ + -117.895532, + 34.14454 + ], + [ + -117.895428, + 34.144442 + ], + [ + -117.895288, + 34.144353 + ], + [ + -117.895277, + 34.144347 + ], + [ + -117.8952, + 34.144306 + ], + [ + -117.895215, + 34.144586 + ], + [ + -117.895232, + 34.144904 + ], + [ + -117.895235, + 34.144955 + ], + [ + -117.895747, + 34.145043 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469646514, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921808, + 33.975256 + ], + [ + -117.921921, + 33.974792 + ], + [ + -117.922109, + 33.974024 + ], + [ + -117.92172, + 33.973906 + ], + [ + -117.921648, + 33.973895 + ], + [ + -117.921625, + 33.974028 + ], + [ + -117.921363, + 33.974337 + ], + [ + -117.921357, + 33.974345 + ], + [ + -117.920902, + 33.974849 + ], + [ + -117.921249, + 33.97506 + ], + [ + -117.921497, + 33.975171 + ], + [ + -117.921808, + 33.975256 + ] + ] + ] + }, + "properties": { + "name": "Trailview Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469722348, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.097221, + 34.068009 + ], + [ + -118.095136, + 34.068015 + ], + [ + -118.095108, + 34.066306 + ], + [ + -118.098046, + 34.06628 + ], + [ + -118.098049, + 34.067095 + ], + [ + -118.097232, + 34.067103 + ], + [ + -118.097256, + 34.067854 + ], + [ + -118.097356, + 34.067921 + ], + [ + -118.097221, + 34.068009 + ] + ] + ] + }, + "properties": { + "name": "Garvey Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469794205, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.915436, + 34.039202 + ], + [ + -117.915438, + 34.039225 + ], + [ + -117.91542, + 34.039251 + ], + [ + -117.915388, + 34.039265 + ], + [ + -117.915355, + 34.03926 + ], + [ + -117.915325, + 34.03925 + ], + [ + -117.915306, + 34.039246 + ], + [ + -117.915287, + 34.039257 + ], + [ + -117.915266, + 34.03928 + ], + [ + -117.915245, + 34.039292 + ], + [ + -117.915218, + 34.039298 + ], + [ + -117.915186, + 34.039295 + ], + [ + -117.915165, + 34.039285 + ], + [ + -117.915144, + 34.039264 + ], + [ + -117.915137, + 34.039242 + ], + [ + -117.915141, + 34.039212 + ], + [ + -117.915152, + 34.039195 + ], + [ + -117.915165, + 34.039179 + ], + [ + -117.915187, + 34.039168 + ], + [ + -117.915194, + 34.039151 + ], + [ + -117.915184, + 34.039116 + ], + [ + -117.915176, + 34.03909 + ], + [ + -117.915175, + 34.039063 + ], + [ + -117.915188, + 34.039046 + ], + [ + -117.915216, + 34.039022 + ], + [ + -117.915251, + 34.039011 + ], + [ + -117.915282, + 34.039014 + ], + [ + -117.915322, + 34.039024 + ], + [ + -117.915346, + 34.039037 + ], + [ + -117.915368, + 34.039062 + ], + [ + -117.915377, + 34.039081 + ], + [ + -117.915368, + 34.03911 + ], + [ + -117.915367, + 34.039129 + ], + [ + -117.915371, + 34.039148 + ], + [ + -117.915391, + 34.039162 + ], + [ + -117.915409, + 34.03917 + ], + [ + -117.915426, + 34.03918 + ], + [ + -117.915436, + 34.039202 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469795232, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.920125, + 34.031196 + ], + [ + -117.920399, + 34.031293 + ], + [ + -117.920422, + 34.031295 + ], + [ + -117.920434, + 34.031284 + ], + [ + -117.920481, + 34.031177 + ], + [ + -117.920389, + 34.031025 + ], + [ + -117.920269, + 34.031013 + ], + [ + -117.920121, + 34.031175 + ], + [ + -117.920115, + 34.031189 + ], + [ + -117.920125, + 34.031196 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 470023826, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.977685, + 34.013655 + ], + [ + -117.978641, + 34.014018 + ], + [ + -117.978778, + 34.013778 + ], + [ + -117.978853, + 34.013631 + ], + [ + -117.979065, + 34.013239 + ], + [ + -117.978551, + 34.013046 + ], + [ + -117.97875, + 34.01257 + ], + [ + -117.978673, + 34.012533 + ], + [ + -117.978408, + 34.012675 + ], + [ + -117.978165, + 34.012584 + ], + [ + -117.978185, + 34.012533 + ], + [ + -117.977514, + 34.012277 + ], + [ + -117.976916, + 34.013325 + ], + [ + -117.977685, + 34.013655 + ] + ] + ] + }, + "properties": { + "name": "Hacienda Heights Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 470033006, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.943932, + 33.990649 + ], + [ + -117.943919, + 33.990607 + ], + [ + -117.943895, + 33.990547 + ], + [ + -117.944223, + 33.990417 + ], + [ + -117.944254, + 33.990404 + ], + [ + -117.944214, + 33.99034 + ], + [ + -117.9443, + 33.99026 + ], + [ + -117.944372, + 33.990177 + ], + [ + -117.944391, + 33.990197 + ], + [ + -117.944426, + 33.990213 + ], + [ + -117.944463, + 33.990213 + ], + [ + -117.944512, + 33.9902 + ], + [ + -117.944554, + 33.990173 + ], + [ + -117.9446, + 33.990144 + ], + [ + -117.944619, + 33.990111 + ], + [ + -117.944608, + 33.990082 + ], + [ + -117.944584, + 33.990071 + ], + [ + -117.944586, + 33.990054 + ], + [ + -117.94471, + 33.99002 + ], + [ + -117.944748, + 33.990011 + ], + [ + -117.944836, + 33.990104 + ], + [ + -117.944863, + 33.990087 + ], + [ + -117.945029, + 33.989977 + ], + [ + -117.944868, + 33.989797 + ], + [ + -117.944917, + 33.989766 + ], + [ + -117.945139, + 33.990011 + ], + [ + -117.945126, + 33.990035 + ], + [ + -117.94511, + 33.990053 + ], + [ + -117.945026, + 33.990102 + ], + [ + -117.94482, + 33.990224 + ], + [ + -117.944675, + 33.990304 + ], + [ + -117.944525, + 33.990382 + ], + [ + -117.944361, + 33.990458 + ], + [ + -117.944257, + 33.990509 + ], + [ + -117.943932, + 33.990649 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 470140363, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.051587, + 34.129122 + ], + [ + -118.051297, + 34.129135 + ], + [ + -118.051201, + 34.128034 + ], + [ + -118.051325, + 34.128027 + ], + [ + -118.051517, + 34.128016 + ], + [ + -118.051587, + 34.129122 + ] + ] + ] + }, + "properties": { + "name": "Fairview Avenue Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 470141853, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.035343, + 34.146722 + ], + [ + -118.035328, + 34.146329 + ], + [ + -118.035522, + 34.146325 + ], + [ + -118.035507, + 34.145574 + ], + [ + -118.034934, + 34.145588 + ], + [ + -118.034933, + 34.145535 + ], + [ + -118.033632, + 34.145586 + ], + [ + -118.033591, + 34.145589 + ], + [ + -118.035343, + 34.146722 + ] + ] + ] + }, + "properties": { + "name": "Newcastle Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 470478321, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.897055, + 34.018927 + ], + [ + -117.897028, + 34.018993 + ], + [ + -117.897038, + 34.019118 + ], + [ + -117.897017, + 34.019251 + ], + [ + -117.897022, + 34.019349 + ], + [ + -117.897065, + 34.019442 + ], + [ + -117.89714, + 34.019518 + ], + [ + -117.897183, + 34.019616 + ], + [ + -117.897199, + 34.019714 + ], + [ + -117.897162, + 34.019794 + ], + [ + -117.897098, + 34.019902 + ], + [ + -117.897065, + 34.019958 + ], + [ + -117.897307, + 34.020052 + ], + [ + -117.897398, + 34.020167 + ], + [ + -117.897446, + 34.020381 + ], + [ + -117.897565, + 34.020379 + ], + [ + -117.89787, + 34.020376 + ], + [ + -117.897999, + 34.020336 + ], + [ + -117.898197, + 34.020332 + ], + [ + -117.898444, + 34.020358 + ], + [ + -117.898594, + 34.020385 + ], + [ + -117.898825, + 34.020403 + ], + [ + -117.898948, + 34.020425 + ], + [ + -117.899125, + 34.020412 + ], + [ + -117.899292, + 34.020403 + ], + [ + -117.899452, + 34.020425 + ], + [ + -117.899624, + 34.020478 + ], + [ + -117.89979, + 34.020567 + ], + [ + -117.899914, + 34.020589 + ], + [ + -117.900037, + 34.020612 + ], + [ + -117.900112, + 34.020603 + ], + [ + -117.900171, + 34.020594 + ], + [ + -117.900244, + 34.020576 + ], + [ + -117.900308, + 34.02057 + ], + [ + -117.900362, + 34.020565 + ], + [ + -117.900405, + 34.020574 + ], + [ + -117.900496, + 34.020587 + ], + [ + -117.900587, + 34.020598 + ], + [ + -117.900651, + 34.020607 + ], + [ + -117.900764, + 34.020618 + ], + [ + -117.900842, + 34.020629 + ], + [ + -117.901129, + 34.020556 + ], + [ + -117.901491, + 34.020503 + ], + [ + -117.901966, + 34.020418 + ], + [ + -117.902207, + 34.020369 + ], + [ + -117.902338, + 34.020385 + ], + [ + -117.902505, + 34.020434 + ], + [ + -117.903467, + 34.020299 + ], + [ + -117.903857, + 34.020192 + ], + [ + -117.903377, + 34.019835 + ], + [ + -117.902723, + 34.019533 + ], + [ + -117.901995, + 34.019207 + ], + [ + -117.901377, + 34.018911 + ], + [ + -117.900944, + 34.018726 + ], + [ + -117.900316, + 34.018566 + ], + [ + -117.900155, + 34.018526 + ], + [ + -117.899978, + 34.018513 + ], + [ + -117.899731, + 34.018495 + ], + [ + -117.899485, + 34.018491 + ], + [ + -117.89927, + 34.018495 + ], + [ + -117.899082, + 34.018509 + ], + [ + -117.898873, + 34.01854 + ], + [ + -117.898576, + 34.018596 + ], + [ + -117.898546, + 34.018602 + ], + [ + -117.89838, + 34.01862 + ], + [ + -117.898101, + 34.018682 + ], + [ + -117.897811, + 34.018753 + ], + [ + -117.897543, + 34.018815 + ], + [ + -117.897264, + 34.018873 + ], + [ + -117.897055, + 34.018927 + ] + ] + ] + }, + "properties": { + "name": "Shadow Oak Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 471388801, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.146452, + 33.969047 + ], + [ + -118.146376, + 33.969051 + ], + [ + -118.146111, + 33.968948 + ], + [ + -118.146083, + 33.968888 + ], + [ + -118.145917, + 33.968825 + ], + [ + -118.145728, + 33.968757 + ], + [ + -118.145426, + 33.968651 + ], + [ + -118.145223, + 33.96859 + ], + [ + -118.145008, + 33.968548 + ], + [ + -118.144677, + 33.96849 + ], + [ + -118.144621, + 33.968522 + ], + [ + -118.14454, + 33.968505 + ], + [ + -118.144555, + 33.968427 + ], + [ + -118.144549, + 33.968361 + ], + [ + -118.144528, + 33.968288 + ], + [ + -118.144503, + 33.96818 + ], + [ + -118.144507, + 33.968043 + ], + [ + -118.144544, + 33.96789 + ], + [ + -118.144691, + 33.967676 + ], + [ + -118.144834, + 33.967461 + ], + [ + -118.144922, + 33.967368 + ], + [ + -118.145013, + 33.967285 + ], + [ + -118.14514, + 33.967189 + ], + [ + -118.145242, + 33.967121 + ], + [ + -118.145403, + 33.967028 + ], + [ + -118.145584, + 33.96696 + ], + [ + -118.145768, + 33.966908 + ], + [ + -118.14601, + 33.966862 + ], + [ + -118.146186, + 33.966843 + ], + [ + -118.146236, + 33.966843 + ], + [ + -118.146284, + 33.96644 + ], + [ + -118.147137, + 33.966531 + ], + [ + -118.147754, + 33.966599 + ], + [ + -118.147474, + 33.967109 + ], + [ + -118.147408, + 33.967125 + ], + [ + -118.147356, + 33.967225 + ], + [ + -118.147125, + 33.967672 + ], + [ + -118.146832, + 33.968232 + ], + [ + -118.146525, + 33.968809 + ], + [ + -118.146517, + 33.968845 + ], + [ + -118.146536, + 33.968885 + ], + [ + -118.146539, + 33.968911 + ], + [ + -118.146499, + 33.968993 + ], + [ + -118.146452, + 33.969047 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 471670356, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.065386, + 33.941221 + ], + [ + -118.065384, + 33.941174 + ], + [ + -118.065394, + 33.941082 + ], + [ + -118.065409, + 33.940966 + ], + [ + -118.065432, + 33.940891 + ], + [ + -118.065189, + 33.940888 + ], + [ + -118.065146, + 33.940886 + ], + [ + -118.065094, + 33.941219 + ], + [ + -118.065386, + 33.941221 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 471671636, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.064437, + 33.941681 + ], + [ + -118.064435, + 33.941376 + ], + [ + -118.064175, + 33.941378 + ], + [ + -118.064175, + 33.941584 + ], + [ + -118.064175, + 33.941648 + ], + [ + -118.064175, + 33.941663 + ], + [ + -118.064175, + 33.941683 + ], + [ + -118.064227, + 33.941695 + ], + [ + -118.064278, + 33.941707 + ], + [ + -118.06432, + 33.941717 + ], + [ + -118.064426, + 33.941717 + ], + [ + -118.064437, + 33.941681 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 473909515, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.946475, + 34.110117 + ], + [ + -117.946584, + 34.11014 + ], + [ + -117.946713, + 34.110071 + ], + [ + -117.946731, + 34.109949 + ], + [ + -117.946656, + 34.109908 + ], + [ + -117.946566, + 34.109889 + ], + [ + -117.946499, + 34.109911 + ], + [ + -117.946446, + 34.109953 + ], + [ + -117.946416, + 34.109994 + ], + [ + -117.946372, + 34.110046 + ], + [ + -117.946475, + 34.110117 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 473910006, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.950622, + 34.131692 + ], + [ + -117.950874, + 34.131298 + ], + [ + -117.951004, + 34.130834 + ], + [ + -117.952051, + 34.130169 + ], + [ + -117.952555, + 34.1302 + ], + [ + -117.952947, + 34.128028 + ], + [ + -117.955488, + 34.128406 + ], + [ + -117.956674, + 34.128283 + ], + [ + -117.957076, + 34.12778 + ], + [ + -117.957645, + 34.127254 + ], + [ + -117.960204, + 34.125692 + ], + [ + -117.962119, + 34.124571 + ], + [ + -117.965526, + 34.124701 + ], + [ + -117.972058, + 34.118737 + ], + [ + -117.973065, + 34.11804 + ], + [ + -117.975104, + 34.116771 + ], + [ + -117.976385, + 34.115695 + ], + [ + -117.976484, + 34.115552 + ], + [ + -117.976456, + 34.115409 + ], + [ + -117.976344, + 34.115285 + ], + [ + -117.976216, + 34.115203 + ], + [ + -117.975094, + 34.115095 + ], + [ + -117.974159, + 34.114938 + ], + [ + -117.973084, + 34.114606 + ], + [ + -117.97207, + 34.114131 + ], + [ + -117.96976, + 34.112448 + ], + [ + -117.967215, + 34.110591 + ], + [ + -117.96385, + 34.107999 + ], + [ + -117.962938, + 34.107473 + ], + [ + -117.962451, + 34.10728 + ], + [ + -117.961934, + 34.107203 + ], + [ + -117.942998, + 34.107244 + ], + [ + -117.942998, + 34.108101 + ], + [ + -117.94293, + 34.108285 + ], + [ + -117.941519, + 34.109953 + ], + [ + -117.939038, + 34.113038 + ], + [ + -117.937611, + 34.114615 + ], + [ + -117.937445, + 34.114886 + ], + [ + -117.937365, + 34.115126 + ], + [ + -117.93671, + 34.118234 + ], + [ + -117.936559, + 34.119115 + ], + [ + -117.936092, + 34.119106 + ], + [ + -117.936071, + 34.119554 + ], + [ + -117.937186, + 34.11955 + ], + [ + -117.93746, + 34.119479 + ], + [ + -117.937455, + 34.119257 + ], + [ + -117.938157, + 34.119266 + ], + [ + -117.938177, + 34.118495 + ], + [ + -117.938183, + 34.118259 + ], + [ + -117.938212, + 34.118019 + ], + [ + -117.941637, + 34.118034 + ], + [ + -117.942601, + 34.118053 + ], + [ + -117.94264, + 34.118084 + ], + [ + -117.94274, + 34.11826 + ], + [ + -117.942663, + 34.120928 + ], + [ + -117.942637, + 34.121158 + ], + [ + -117.942531, + 34.121643 + ], + [ + -117.943285, + 34.12164 + ], + [ + -117.945429, + 34.121636 + ], + [ + -117.945912, + 34.121626 + ], + [ + -117.946876, + 34.121617 + ], + [ + -117.946875, + 34.128911 + ], + [ + -117.945891, + 34.129829 + ], + [ + -117.945625, + 34.129964 + ], + [ + -117.947498, + 34.130606 + ], + [ + -117.950622, + 34.131692 + ] + ] + ] + }, + "properties": { + "name": "Santa Fe Dam Recreation Area", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474048342, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.887637, + 34.131398 + ], + [ + -117.887502, + 34.13141 + ], + [ + -117.887496, + 34.131386 + ], + [ + -117.886566, + 34.131477 + ], + [ + -117.886633, + 34.131984 + ], + [ + -117.887704, + 34.131871 + ], + [ + -117.887637, + 34.131398 + ] + ] + ] + }, + "properties": { + "name": "Adams Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474054857, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.826819, + 33.997429 + ], + [ + -117.826881, + 33.997096 + ], + [ + -117.826932, + 33.996902 + ], + [ + -117.827068, + 33.996513 + ], + [ + -117.827511, + 33.995999 + ], + [ + -117.827749, + 33.995866 + ], + [ + -117.827865, + 33.995659 + ], + [ + -117.827489, + 33.995552 + ], + [ + -117.826993, + 33.995659 + ], + [ + -117.826941, + 33.995669 + ], + [ + -117.826887, + 33.995673 + ], + [ + -117.826833, + 33.995672 + ], + [ + -117.826779, + 33.995666 + ], + [ + -117.826727, + 33.995654 + ], + [ + -117.826677, + 33.995637 + ], + [ + -117.82663, + 33.995615 + ], + [ + -117.826587, + 33.995588 + ], + [ + -117.826547, + 33.995557 + ], + [ + -117.826513, + 33.995523 + ], + [ + -117.826484, + 33.995485 + ], + [ + -117.82646, + 33.995445 + ], + [ + -117.826443, + 33.995403 + ], + [ + -117.826432, + 33.995359 + ], + [ + -117.826427, + 33.995314 + ], + [ + -117.825773, + 33.995308 + ], + [ + -117.825386, + 33.995775 + ], + [ + -117.82552, + 33.995865 + ], + [ + -117.825643, + 33.995965 + ], + [ + -117.825753, + 33.996075 + ], + [ + -117.825849, + 33.996194 + ], + [ + -117.825931, + 33.996319 + ], + [ + -117.826121, + 33.996797 + ], + [ + -117.826189, + 33.996927 + ], + [ + -117.826275, + 33.99705 + ], + [ + -117.826378, + 33.997163 + ], + [ + -117.826496, + 33.997264 + ], + [ + -117.826629, + 33.997354 + ], + [ + -117.826773, + 33.997429 + ], + [ + -117.826819, + 33.997429 + ] + ] + ] + }, + "properties": { + "name": "Maple Hill Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474450758, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.919019, + 34.112706 + ], + [ + -117.91906, + 34.112675 + ], + [ + -117.919051, + 34.112413 + ], + [ + -117.918917, + 34.112413 + ], + [ + -117.918823, + 34.112422 + ], + [ + -117.918773, + 34.112444 + ], + [ + -117.918716, + 34.112498 + ], + [ + -117.918687, + 34.112558 + ], + [ + -117.918689, + 34.112622 + ], + [ + -117.918708, + 34.112675 + ], + [ + -117.918738, + 34.112713 + ], + [ + -117.919019, + 34.112706 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474450759, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.918113, + 34.111854 + ], + [ + -117.918193, + 34.111798 + ], + [ + -117.918416, + 34.111767 + ], + [ + -117.918496, + 34.111825 + ], + [ + -117.918534, + 34.111885 + ], + [ + -117.918536, + 34.111951 + ], + [ + -117.918507, + 34.112024 + ], + [ + -117.918445, + 34.11208 + ], + [ + -117.918381, + 34.112107 + ], + [ + -117.918324, + 34.112113 + ], + [ + -117.918239, + 34.112113 + ], + [ + -117.91818, + 34.112093 + ], + [ + -117.918113, + 34.112071 + ], + [ + -117.918113, + 34.111854 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474450764, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.917544, + 34.112636 + ], + [ + -117.917672, + 34.112622 + ], + [ + -117.917689, + 34.112719 + ], + [ + -117.91756, + 34.112734 + ], + [ + -117.917544, + 34.112636 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474949666, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.132366, + 34.132751 + ], + [ + -118.132349, + 34.13275 + ], + [ + -118.132336, + 34.13276 + ], + [ + -118.132329, + 34.132772 + ], + [ + -118.132329, + 34.132869 + ], + [ + -118.132347, + 34.133878 + ], + [ + -118.13241, + 34.133881 + ], + [ + -118.132454, + 34.133867 + ], + [ + -118.132498, + 34.133827 + ], + [ + -118.132553, + 34.133736 + ], + [ + -118.132566, + 34.133627 + ], + [ + -118.132563, + 34.133526 + ], + [ + -118.132548, + 34.133322 + ], + [ + -118.132509, + 34.133113 + ], + [ + -118.132461, + 34.132948 + ], + [ + -118.132407, + 34.132813 + ], + [ + -118.132391, + 34.132771 + ], + [ + -118.132378, + 34.132756 + ], + [ + -118.132366, + 34.132751 + ] + ] + ] + }, + "properties": { + "name": "Sidney F. Tyler Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 475922535, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.82131, + 34.089417 + ], + [ + -117.821235, + 34.089426 + ], + [ + -117.820993, + 34.089253 + ], + [ + -117.820607, + 34.089261 + ], + [ + -117.820385, + 34.089306 + ], + [ + -117.820242, + 34.089386 + ], + [ + -117.82028, + 34.090332 + ], + [ + -117.820301, + 34.090759 + ], + [ + -117.820366, + 34.090901 + ], + [ + -117.820435, + 34.090936 + ], + [ + -117.820452, + 34.091029 + ], + [ + -117.820403, + 34.091287 + ], + [ + -117.82036, + 34.091398 + ], + [ + -117.820366, + 34.091656 + ], + [ + -117.820323, + 34.091918 + ], + [ + -117.820248, + 34.092122 + ], + [ + -117.820291, + 34.092207 + ], + [ + -117.820278, + 34.092273 + ], + [ + -117.820026, + 34.092695 + ], + [ + -117.820576, + 34.092828 + ], + [ + -117.820741, + 34.092839 + ], + [ + -117.820847, + 34.092834 + ], + [ + -117.821045, + 34.092806 + ], + [ + -117.82249, + 34.092491 + ], + [ + -117.822748, + 34.092313 + ], + [ + -117.822871, + 34.092322 + ], + [ + -117.82308, + 34.092318 + ], + [ + -117.823266, + 34.09254 + ], + [ + -117.82455, + 34.093659 + ], + [ + -117.825489, + 34.093704 + ], + [ + -117.82573, + 34.093753 + ], + [ + -117.827103, + 34.092647 + ], + [ + -117.827012, + 34.092269 + ], + [ + -117.827409, + 34.092229 + ], + [ + -117.828992, + 34.092202 + ], + [ + -117.829528, + 34.092189 + ], + [ + -117.829904, + 34.092247 + ], + [ + -117.831153, + 34.092807 + ], + [ + -117.83118, + 34.093198 + ], + [ + -117.831507, + 34.093153 + ], + [ + -117.832741, + 34.092789 + ], + [ + -117.833557, + 34.092673 + ], + [ + -117.834071, + 34.092229 + ], + [ + -117.834021, + 34.091243 + ], + [ + -117.834032, + 34.091069 + ], + [ + -117.834839, + 34.090218 + ], + [ + -117.835477, + 34.089707 + ], + [ + -117.836566, + 34.089729 + ], + [ + -117.837, + 34.08965 + ], + [ + -117.837821, + 34.088859 + ], + [ + -117.839522, + 34.089253 + ], + [ + -117.839785, + 34.088635 + ], + [ + -117.841547, + 34.087742 + ], + [ + -117.842301, + 34.087862 + ], + [ + -117.842942, + 34.08811 + ], + [ + -117.843827, + 34.088337 + ], + [ + -117.844637, + 34.088537 + ], + [ + -117.844967, + 34.088428 + ], + [ + -117.845079, + 34.088266 + ], + [ + -117.845181, + 34.087653 + ], + [ + -117.845376, + 34.087496 + ], + [ + -117.845396, + 34.087304 + ], + [ + -117.845468, + 34.087188 + ], + [ + -117.845549, + 34.087124 + ], + [ + -117.845458, + 34.086902 + ], + [ + -117.844875, + 34.086485 + ], + [ + -117.844253, + 34.086596 + ], + [ + -117.843529, + 34.086747 + ], + [ + -117.843178, + 34.086787 + ], + [ + -117.842574, + 34.086862 + ], + [ + -117.842124, + 34.086911 + ], + [ + -117.840839, + 34.087102 + ], + [ + -117.839739, + 34.087382 + ], + [ + -117.839141, + 34.087533 + ], + [ + -117.838889, + 34.087538 + ], + [ + -117.836786, + 34.087859 + ], + [ + -117.835298, + 34.088586 + ], + [ + -117.835343, + 34.088697 + ], + [ + -117.83523, + 34.088737 + ], + [ + -117.834882, + 34.088742 + ], + [ + -117.834689, + 34.088759 + ], + [ + -117.834311, + 34.08895 + ], + [ + -117.834002, + 34.08915 + ], + [ + -117.833573, + 34.089346 + ], + [ + -117.833286, + 34.089648 + ], + [ + -117.83309, + 34.089875 + ], + [ + -117.832929, + 34.089906 + ], + [ + -117.83265, + 34.089892 + ], + [ + -117.832124, + 34.090088 + ], + [ + -117.832219, + 34.090287 + ], + [ + -117.832001, + 34.090394 + ], + [ + -117.831757, + 34.090492 + ], + [ + -117.831448, + 34.090603 + ], + [ + -117.830644, + 34.090661 + ], + [ + -117.830041, + 34.090505 + ], + [ + -117.829807, + 34.090505 + ], + [ + -117.828898, + 34.090514 + ], + [ + -117.828439, + 34.090674 + ], + [ + -117.827913, + 34.090661 + ], + [ + -117.827493, + 34.090643 + ], + [ + -117.826975, + 34.090585 + ], + [ + -117.826819, + 34.090399 + ], + [ + -117.826018, + 34.088933 + ], + [ + -117.825735, + 34.088804 + ], + [ + -117.825285, + 34.088791 + ], + [ + -117.824982, + 34.088857 + ], + [ + -117.823507, + 34.088839 + ], + [ + -117.823083, + 34.088982 + ], + [ + -117.82131, + 34.089417 + ] + ] + ] + }, + "properties": { + "name": "Walnut Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 475964779, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.909849, + 34.025064 + ], + [ + -117.909632, + 34.024891 + ], + [ + -117.909497, + 34.024645 + ], + [ + -117.90948, + 34.024539 + ], + [ + -117.909454, + 34.024383 + ], + [ + -117.909442, + 34.023891 + ], + [ + -117.907876, + 34.024022 + ], + [ + -117.907829, + 34.02374 + ], + [ + -117.9079, + 34.023681 + ], + [ + -117.907848, + 34.023573 + ], + [ + -117.907963, + 34.023511 + ], + [ + -117.907319, + 34.023347 + ], + [ + -117.907311, + 34.023432 + ], + [ + -117.907224, + 34.023485 + ], + [ + -117.907374, + 34.023708 + ], + [ + -117.907405, + 34.02452 + ], + [ + -117.907413, + 34.024884 + ], + [ + -117.907591, + 34.025379 + ], + [ + -117.908339, + 34.025428 + ], + [ + -117.909375, + 34.025408 + ], + [ + -117.909849, + 34.025064 + ] + ] + ] + }, + "properties": { + "name": "Gingrich Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 476438873, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.837436, + 34.117653 + ], + [ + -117.837476, + 34.117667 + ], + [ + -117.837498, + 34.117713 + ], + [ + -117.837503, + 34.118335 + ], + [ + -117.837543, + 34.118422 + ], + [ + -117.837543, + 34.118482 + ], + [ + -117.837519, + 34.118488 + ], + [ + -117.837575, + 34.118579 + ], + [ + -117.837665, + 34.118723 + ], + [ + -117.83804, + 34.119328 + ], + [ + -117.838022, + 34.119334 + ], + [ + -117.837742, + 34.119439 + ], + [ + -117.837506, + 34.119503 + ], + [ + -117.837315, + 34.119547 + ], + [ + -117.837219, + 34.119563 + ], + [ + -117.836572, + 34.11963 + ], + [ + -117.835526, + 34.119716 + ], + [ + -117.834368, + 34.119805 + ], + [ + -117.833885, + 34.119825 + ], + [ + -117.833845, + 34.119814 + ], + [ + -117.833802, + 34.119794 + ], + [ + -117.833788, + 34.119769 + ], + [ + -117.833724, + 34.118928 + ], + [ + -117.833719, + 34.118846 + ], + [ + -117.833743, + 34.118786 + ], + [ + -117.833888, + 34.118719 + ], + [ + -117.834708, + 34.118566 + ], + [ + -117.834848, + 34.118517 + ], + [ + -117.834958, + 34.118457 + ], + [ + -117.835835, + 34.117742 + ], + [ + -117.835972, + 34.117693 + ], + [ + -117.837436, + 34.117653 + ] + ] + ] + }, + "properties": { + "name": "Louie Pompei Memorial Sports Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 476438878, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.835474, + 34.118886 + ], + [ + -117.835463, + 34.118908 + ], + [ + -117.835429, + 34.118919 + ], + [ + -117.835321, + 34.118948 + ], + [ + -117.835278, + 34.118948 + ], + [ + -117.835243, + 34.118932 + ], + [ + -117.835233, + 34.118904 + ], + [ + -117.835227, + 34.118875 + ], + [ + -117.835235, + 34.118846 + ], + [ + -117.83527, + 34.118823 + ], + [ + -117.835308, + 34.118817 + ], + [ + -117.83538, + 34.118828 + ], + [ + -117.835431, + 34.118846 + ], + [ + -117.835461, + 34.118861 + ], + [ + -117.835474, + 34.118886 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 476471379, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.854859, + 34.140545 + ], + [ + -117.853578, + 34.141441 + ], + [ + -117.853739, + 34.141386 + ], + [ + -117.853782, + 34.14138 + ], + [ + -117.853817, + 34.141387 + ], + [ + -117.853907, + 34.141433 + ], + [ + -117.853952, + 34.141459 + ], + [ + -117.853983, + 34.141473 + ], + [ + -117.854021, + 34.141478 + ], + [ + -117.85409, + 34.141477 + ], + [ + -117.854853, + 34.141473 + ], + [ + -117.854854, + 34.141429 + ], + [ + -117.854859, + 34.140545 + ] + ] + ] + }, + "properties": { + "name": "Ole Hammer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 476480413, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.866835, + 34.126787 + ], + [ + -117.866835, + 34.127079 + ], + [ + -117.866291, + 34.127079 + ], + [ + -117.866291, + 34.127064 + ], + [ + -117.866296, + 34.126818 + ], + [ + -117.866309, + 34.126796 + ], + [ + -117.866344, + 34.126787 + ], + [ + -117.866835, + 34.126787 + ] + ] + ] + }, + "properties": { + "name": "Big Tree Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 479604482, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.940269, + 34.150434 + ], + [ + -117.940285, + 34.150044 + ], + [ + -117.939416, + 34.150037 + ], + [ + -117.939424, + 34.150443 + ], + [ + -117.940269, + 34.150434 + ] + ] + ] + }, + "properties": { + "name": "Valley View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 479617854, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.995799, + 34.142147 + ], + [ + -117.995793, + 34.141943 + ], + [ + -117.995837, + 34.141886 + ], + [ + -117.99584, + 34.141519 + ], + [ + -117.995068, + 34.141511 + ], + [ + -117.995057, + 34.142159 + ], + [ + -117.995803, + 34.142157 + ], + [ + -117.995799, + 34.142147 + ] + ] + ] + }, + "properties": { + "name": "Julian Fisher Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 479639700, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.068975, + 33.916374 + ], + [ + -118.068904, + 33.916367 + ], + [ + -118.068824, + 33.916719 + ], + [ + -118.068818, + 33.917001 + ], + [ + -118.069893, + 33.917001 + ], + [ + -118.069896, + 33.916556 + ], + [ + -118.069736, + 33.916561 + ], + [ + -118.069733, + 33.91688 + ], + [ + -118.06903, + 33.916888 + ], + [ + -118.068969, + 33.916888 + ], + [ + -118.068975, + 33.916374 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 479645909, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.070122, + 34.086377 + ], + [ + -118.067661, + 34.086356 + ], + [ + -118.067618, + 34.082646 + ], + [ + -118.07019, + 34.083311 + ], + [ + -118.070122, + 34.086377 + ] + ] + ] + }, + "properties": { + "name": "Rosemead Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 480145999, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.955611, + 34.137159 + ], + [ + -117.955625, + 34.136226 + ], + [ + -117.953788, + 34.13623 + ], + [ + -117.953802, + 34.136578 + ], + [ + -117.953466, + 34.136618 + ], + [ + -117.953428, + 34.137331 + ], + [ + -117.953684, + 34.137331 + ], + [ + -117.953675, + 34.137504 + ], + [ + -117.954357, + 34.137496 + ], + [ + -117.954361, + 34.137386 + ], + [ + -117.954423, + 34.137382 + ], + [ + -117.954409, + 34.137155 + ], + [ + -117.954991, + 34.137166 + ], + [ + -117.955611, + 34.137159 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 480311817, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921812, + 34.121632 + ], + [ + -117.91852, + 34.121642 + ], + [ + -117.918525, + 34.12083 + ], + [ + -117.919984, + 34.120814 + ], + [ + -117.921267, + 34.120705 + ], + [ + -117.921407, + 34.120719 + ], + [ + -117.921439, + 34.11983 + ], + [ + -117.921847, + 34.119839 + ], + [ + -117.921812, + 34.121632 + ] + ] + ] + }, + "properties": { + "name": "Zacatecas Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 481694201, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.869349, + 34.083837 + ], + [ + -117.867284, + 34.083888 + ], + [ + -117.867265, + 34.085308 + ], + [ + -117.867064, + 34.08531 + ], + [ + -117.86708, + 34.086056 + ], + [ + -117.870319, + 34.086053 + ], + [ + -117.8703, + 34.084665 + ], + [ + -117.870295, + 34.084326 + ], + [ + -117.870262, + 34.084325 + ], + [ + -117.870263, + 34.08389 + ], + [ + -117.86935, + 34.08388 + ], + [ + -117.869349, + 34.083837 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 482109670, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.037022, + 33.96927 + ], + [ + -118.03701, + 33.969254 + ], + [ + -118.037002, + 33.969236 + ], + [ + -118.036998, + 33.969219 + ], + [ + -118.036999, + 33.969196 + ], + [ + -118.037005, + 33.969178 + ], + [ + -118.037009, + 33.969169 + ], + [ + -118.037001, + 33.969163 + ], + [ + -118.036994, + 33.969153 + ], + [ + -118.036992, + 33.969141 + ], + [ + -118.036994, + 33.96913 + ], + [ + -118.037001, + 33.969121 + ], + [ + -118.037009, + 33.969116 + ], + [ + -118.03702, + 33.969111 + ], + [ + -118.037022, + 33.969019 + ], + [ + -118.037008, + 33.969009 + ], + [ + -118.036993, + 33.969 + ], + [ + -118.036975, + 33.968995 + ], + [ + -118.036954, + 33.968991 + ], + [ + -118.036933, + 33.968992 + ], + [ + -118.036912, + 33.968998 + ], + [ + -118.036893, + 33.969005 + ], + [ + -118.036878, + 33.969014 + ], + [ + -118.036867, + 33.969027 + ], + [ + -118.036859, + 33.96904 + ], + [ + -118.036855, + 33.969054 + ], + [ + -118.036853, + 33.969069 + ], + [ + -118.036854, + 33.969087 + ], + [ + -118.036858, + 33.969101 + ], + [ + -118.036864, + 33.969113 + ], + [ + -118.036874, + 33.969125 + ], + [ + -118.036882, + 33.969135 + ], + [ + -118.036883, + 33.969145 + ], + [ + -118.036877, + 33.969156 + ], + [ + -118.036861, + 33.969177 + ], + [ + -118.036853, + 33.969194 + ], + [ + -118.03685, + 33.969209 + ], + [ + -118.036853, + 33.969228 + ], + [ + -118.03686, + 33.969246 + ], + [ + -118.036866, + 33.969259 + ], + [ + -118.036879, + 33.969271 + ], + [ + -118.036894, + 33.969282 + ], + [ + -118.036913, + 33.969289 + ], + [ + -118.036933, + 33.969293 + ], + [ + -118.036952, + 33.969294 + ], + [ + -118.036972, + 33.969292 + ], + [ + -118.036991, + 33.969287 + ], + [ + -118.037009, + 33.969277 + ], + [ + -118.037022, + 33.96927 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 482121408, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.013082, + 33.950858 + ], + [ + -118.014031, + 33.951404 + ], + [ + -118.014517, + 33.950122 + ], + [ + -118.01449, + 33.95011 + ], + [ + -118.01448, + 33.950105 + ], + [ + -118.014467, + 33.950106 + ], + [ + -118.014452, + 33.95011 + ], + [ + -118.014436, + 33.950114 + ], + [ + -118.014419, + 33.950116 + ], + [ + -118.014403, + 33.950118 + ], + [ + -118.014385, + 33.950118 + ], + [ + -118.014379, + 33.95012 + ], + [ + -118.014291, + 33.95016 + ], + [ + -118.014098, + 33.950243 + ], + [ + -118.013349, + 33.950564 + ], + [ + -118.01309, + 33.950676 + ], + [ + -118.013036, + 33.950699 + ], + [ + -118.012997, + 33.950715 + ], + [ + -118.012951, + 33.950726 + ], + [ + -118.012908, + 33.950732 + ], + [ + -118.012857, + 33.95073 + ], + [ + -118.012824, + 33.950726 + ], + [ + -118.01279, + 33.950717 + ], + [ + -118.012758, + 33.950746 + ], + [ + -118.013025, + 33.950891 + ], + [ + -118.013047, + 33.950903 + ], + [ + -118.013082, + 33.950858 + ] + ] + ] + }, + "properties": { + "name": "Anaconda Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486257306, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.14579, + 33.966386 + ], + [ + -118.145568, + 33.966814 + ], + [ + -118.145438, + 33.966924 + ], + [ + -118.145202, + 33.967098 + ], + [ + -118.14434, + 33.967723 + ], + [ + -118.144357, + 33.967781 + ], + [ + -118.144267, + 33.968012 + ], + [ + -118.144267, + 33.96823 + ], + [ + -118.144344, + 33.968473 + ], + [ + -118.145309, + 33.968651 + ], + [ + -118.146402, + 33.969027 + ], + [ + -118.146518, + 33.968977 + ], + [ + -118.147754, + 33.966599 + ], + [ + -118.14579, + 33.966386 + ] + ] + ] + }, + "properties": { + "name": "Bell Gardens Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486257462, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.995946, + 33.939319 + ], + [ + -117.993243, + 33.939337 + ], + [ + -117.993238, + 33.940055 + ], + [ + -117.993246, + 33.940087 + ], + [ + -117.99327, + 33.940103 + ], + [ + -117.993302, + 33.940115 + ], + [ + -117.993938, + 33.940112 + ], + [ + -117.994081, + 33.94013 + ], + [ + -117.994203, + 33.940159 + ], + [ + -117.994308, + 33.940195 + ], + [ + -117.994447, + 33.940262 + ], + [ + -117.994583, + 33.940367 + ], + [ + -117.994934, + 33.940736 + ], + [ + -117.995009, + 33.940665 + ], + [ + -117.995081, + 33.940567 + ], + [ + -117.995946, + 33.939319 + ] + ] + ] + }, + "properties": { + "name": "Leffingwell Ranch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486259411, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.078351, + 33.934103 + ], + [ + -118.078344, + 33.931756 + ], + [ + -118.081614, + 33.931759 + ], + [ + -118.081637, + 33.931771 + ], + [ + -118.081654, + 33.931786 + ], + [ + -118.081666, + 33.931806 + ], + [ + -118.081671, + 33.931827 + ], + [ + -118.081672, + 33.932297 + ], + [ + -118.081677, + 33.934098 + ], + [ + -118.078351, + 33.934103 + ] + ] + ] + }, + "properties": { + "name": "Little Lake Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486260179, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.019043, + 34.11368 + ], + [ + -118.018597, + 34.11368 + ], + [ + -118.018605, + 34.114197 + ], + [ + -118.018607, + 34.114218 + ], + [ + -118.018635, + 34.11424 + ], + [ + -118.019057, + 34.11424 + ], + [ + -118.019043, + 34.11368 + ] + ] + ] + }, + "properties": { + "name": "Bicentennial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486260182, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.01885, + 34.114007 + ], + [ + -118.018828, + 34.114034 + ], + [ + -118.018709, + 34.114039 + ], + [ + -118.018675, + 34.11401 + ], + [ + -118.018659, + 34.113738 + ], + [ + -118.018691, + 34.113702 + ], + [ + -118.018812, + 34.113702 + ], + [ + -118.01884, + 34.113731 + ], + [ + -118.01885, + 34.114007 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486275525, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.003899, + 34.049618 + ], + [ + -118.002062, + 34.051677 + ], + [ + -118.001932, + 34.051551 + ], + [ + -118.001828, + 34.051413 + ], + [ + -118.00175, + 34.051316 + ], + [ + -118.001629, + 34.051196 + ], + [ + -118.001446, + 34.051083 + ], + [ + -118.001102, + 34.05088 + ], + [ + -118.001085, + 34.050852 + ], + [ + -118.001102, + 34.050809 + ], + [ + -118.002739, + 34.048942 + ], + [ + -118.00281, + 34.048937 + ], + [ + -118.003899, + 34.049618 + ] + ] + ] + }, + "properties": { + "name": "San Angelo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486275529, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.002545, + 34.049647 + ], + [ + -118.002531, + 34.049319 + ], + [ + -118.00273, + 34.049313 + ], + [ + -118.002743, + 34.049641 + ], + [ + -118.002545, + 34.049647 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486276325, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.964559, + 34.085771 + ], + [ + -117.9646, + 34.085771 + ], + [ + -117.964625, + 34.085776 + ], + [ + -117.96466, + 34.08579 + ], + [ + -117.964675, + 34.085818 + ], + [ + -117.964696, + 34.087648 + ], + [ + -117.963226, + 34.087655 + ], + [ + -117.963229, + 34.08773 + ], + [ + -117.962799, + 34.087739 + ], + [ + -117.962653, + 34.087739 + ], + [ + -117.962586, + 34.08778 + ], + [ + -117.962476, + 34.087801 + ], + [ + -117.962417, + 34.087798 + ], + [ + -117.961962, + 34.087818 + ], + [ + -117.961747, + 34.087824 + ], + [ + -117.961837, + 34.087687 + ], + [ + -117.961619, + 34.087691 + ], + [ + -117.961585, + 34.08766 + ], + [ + -117.961576, + 34.087187 + ], + [ + -117.961578, + 34.087111 + ], + [ + -117.961605, + 34.087056 + ], + [ + -117.961638, + 34.087035 + ], + [ + -117.961981, + 34.086954 + ], + [ + -117.962283, + 34.086883 + ], + [ + -117.962414, + 34.086868 + ], + [ + -117.962482, + 34.086864 + ], + [ + -117.962543, + 34.086857 + ], + [ + -117.962591, + 34.086843 + ], + [ + -117.962638, + 34.086819 + ], + [ + -117.96268, + 34.086764 + ], + [ + -117.962688, + 34.08672 + ], + [ + -117.962675, + 34.086679 + ], + [ + -117.962656, + 34.086613 + ], + [ + -117.962597, + 34.086485 + ], + [ + -117.96252, + 34.086213 + ], + [ + -117.962556, + 34.086185 + ], + [ + -117.962593, + 34.086177 + ], + [ + -117.962631, + 34.086185 + ], + [ + -117.962678, + 34.08618 + ], + [ + -117.963575, + 34.08598 + ], + [ + -117.964559, + 34.085771 + ] + ] + ] + }, + "properties": { + "name": "Morgan Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486288996, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.906073, + 34.135561 + ], + [ + -117.90507, + 34.135809 + ], + [ + -117.905064, + 34.13509 + ], + [ + -117.905602, + 34.135101 + ], + [ + -117.905603, + 34.135247 + ], + [ + -117.906078, + 34.135252 + ], + [ + -117.906073, + 34.135561 + ] + ] + ] + }, + "properties": { + "name": "Azusa City Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486292499, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.995774, + 34.062895 + ], + [ + -117.995746, + 34.063544 + ], + [ + -117.995521, + 34.063573 + ], + [ + -117.994943, + 34.063547 + ], + [ + -117.994634, + 34.063687 + ], + [ + -117.9941, + 34.063304 + ], + [ + -117.994243, + 34.063166 + ], + [ + -117.994312, + 34.063156 + ], + [ + -117.994393, + 34.063141 + ], + [ + -117.994443, + 34.063104 + ], + [ + -117.994459, + 34.063027 + ], + [ + -117.99444, + 34.06297 + ], + [ + -117.994346, + 34.062926 + ], + [ + -117.994265, + 34.062933 + ], + [ + -117.994209, + 34.062967 + ], + [ + -117.994199, + 34.063027 + ], + [ + -117.99334, + 34.062455 + ], + [ + -117.99488, + 34.062276 + ], + [ + -117.995187, + 34.062941 + ], + [ + -117.995774, + 34.062895 + ] + ] + ] + }, + "properties": { + "name": "Walnut Creek Nature Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486699652, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.913586, + 33.979901 + ], + [ + -117.913443, + 33.979729 + ], + [ + -117.912392, + 33.979559 + ], + [ + -117.911237, + 33.979428 + ], + [ + -117.911427, + 33.97883 + ], + [ + -117.911534, + 33.978486 + ], + [ + -117.911572, + 33.978233 + ], + [ + -117.912124, + 33.978276 + ], + [ + -117.91264, + 33.978244 + ], + [ + -117.913037, + 33.97825 + ], + [ + -117.913832, + 33.978336 + ], + [ + -117.914217, + 33.978431 + ], + [ + -117.914431, + 33.9785 + ], + [ + -117.914775, + 33.978538 + ], + [ + -117.914733, + 33.97882 + ], + [ + -117.91455, + 33.979131 + ], + [ + -117.914332, + 33.979365 + ], + [ + -117.91387, + 33.979698 + ], + [ + -117.913586, + 33.979901 + ] + ] + ] + }, + "properties": { + "name": "Gloria Heer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486700965, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.035779, + 33.960077 + ], + [ + -118.034898, + 33.959471 + ], + [ + -118.03453, + 33.959839 + ], + [ + -118.035412, + 33.960445 + ], + [ + -118.035779, + 33.960077 + ] + ] + ] + }, + "properties": { + "name": "Kennedy Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486868153, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.880428, + 33.987903 + ], + [ + -117.878806, + 33.987818 + ], + [ + -117.878546, + 33.990116 + ], + [ + -117.880855, + 33.989975 + ], + [ + -117.880866, + 33.989844 + ], + [ + -117.880825, + 33.989684 + ], + [ + -117.880737, + 33.989531 + ], + [ + -117.880579, + 33.98935 + ], + [ + -117.880399, + 33.989124 + ], + [ + -117.880343, + 33.988957 + ], + [ + -117.880345, + 33.98875 + ], + [ + -117.880428, + 33.987903 + ] + ] + ] + }, + "properties": { + "name": "Rowland Heights Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487026998, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.943779, + 33.982926 + ], + [ + -117.944607, + 33.975301 + ], + [ + -117.943311, + 33.975002 + ], + [ + -117.942577, + 33.975075 + ], + [ + -117.933063, + 33.972866 + ], + [ + -117.933051, + 33.972632 + ], + [ + -117.932997, + 33.97262 + ], + [ + -117.929645, + 33.971854 + ], + [ + -117.929622, + 33.972072 + ], + [ + -117.928244, + 33.971761 + ], + [ + -117.92825, + 33.971535 + ], + [ + -117.923901, + 33.97053 + ], + [ + -117.923878, + 33.970745 + ], + [ + -117.915508, + 33.968806 + ], + [ + -117.915866, + 33.969106 + ], + [ + -117.916274, + 33.969252 + ], + [ + -117.916891, + 33.969462 + ], + [ + -117.917303, + 33.970168 + ], + [ + -117.918095, + 33.969849 + ], + [ + -117.918937, + 33.969981 + ], + [ + -117.919283, + 33.970515 + ], + [ + -117.919879, + 33.971422 + ], + [ + -117.91912, + 33.972157 + ], + [ + -117.919264, + 33.973334 + ], + [ + -117.921106, + 33.974506 + ], + [ + -117.920847, + 33.974794 + ], + [ + -117.920902, + 33.974849 + ], + [ + -117.921625, + 33.974028 + ], + [ + -117.921648, + 33.973895 + ], + [ + -117.92172, + 33.973906 + ], + [ + -117.922109, + 33.974024 + ], + [ + -117.921921, + 33.974792 + ], + [ + -117.922071, + 33.974805 + ], + [ + -117.922466, + 33.974686 + ], + [ + -117.923333, + 33.974771 + ], + [ + -117.923313, + 33.974881 + ], + [ + -117.923876, + 33.975126 + ], + [ + -117.924243, + 33.97513 + ], + [ + -117.924254, + 33.975514 + ], + [ + -117.924273, + 33.97562 + ], + [ + -117.924294, + 33.975682 + ], + [ + -117.924262, + 33.976457 + ], + [ + -117.925234, + 33.976871 + ], + [ + -117.926421, + 33.976881 + ], + [ + -117.927649, + 33.977555 + ], + [ + -117.927551, + 33.978541 + ], + [ + -117.92667, + 33.979082 + ], + [ + -117.926474, + 33.979353 + ], + [ + -117.926409, + 33.979514 + ], + [ + -117.926363, + 33.979684 + ], + [ + -117.926358, + 33.97983 + ], + [ + -117.926375, + 33.980514 + ], + [ + -117.926315, + 33.981161 + ], + [ + -117.926204, + 33.982152 + ], + [ + -117.926108, + 33.982475 + ], + [ + -117.925965, + 33.982951 + ], + [ + -117.925897, + 33.983293 + ], + [ + -117.925853, + 33.98377 + ], + [ + -117.925872, + 33.984166 + ], + [ + -117.925903, + 33.984678 + ], + [ + -117.925872, + 33.984903 + ], + [ + -117.925774, + 33.985155 + ], + [ + -117.925634, + 33.985338 + ], + [ + -117.925232, + 33.985099 + ], + [ + -117.925075, + 33.985255 + ], + [ + -117.924753, + 33.985464 + ], + [ + -117.925705, + 33.986429 + ], + [ + -117.924175, + 33.987461 + ], + [ + -117.923984, + 33.988197 + ], + [ + -117.922556, + 33.988067 + ], + [ + -117.922479, + 33.988274 + ], + [ + -117.922392, + 33.988623 + ], + [ + -117.923507, + 33.988705 + ], + [ + -117.923767, + 33.988759 + ], + [ + -117.923896, + 33.988811 + ], + [ + -117.924056, + 33.988895 + ], + [ + -117.924214, + 33.989009 + ], + [ + -117.924334, + 33.989127 + ], + [ + -117.924462, + 33.989314 + ], + [ + -117.924499, + 33.989385 + ], + [ + -117.928747, + 33.989703 + ], + [ + -117.92861, + 33.990747 + ], + [ + -117.929889, + 33.990859 + ], + [ + -117.929888, + 33.990836 + ], + [ + -117.930131, + 33.990855 + ], + [ + -117.930348, + 33.990868 + ], + [ + -117.930673, + 33.990871 + ], + [ + -117.930844, + 33.990864 + ], + [ + -117.93128, + 33.990837 + ], + [ + -117.931622, + 33.990784 + ], + [ + -117.931671, + 33.990768 + ], + [ + -117.931699, + 33.990733 + ], + [ + -117.931707, + 33.990678 + ], + [ + -117.931843, + 33.989938 + ], + [ + -117.931283, + 33.989892 + ], + [ + -117.931301, + 33.989725 + ], + [ + -117.931367, + 33.989097 + ], + [ + -117.931506, + 33.98774 + ], + [ + -117.931652, + 33.986311 + ], + [ + -117.931764, + 33.985243 + ], + [ + -117.932047, + 33.982483 + ], + [ + -117.932207, + 33.980943 + ], + [ + -117.933134, + 33.981385 + ], + [ + -117.933561, + 33.981592 + ], + [ + -117.933932, + 33.981812 + ], + [ + -117.934161, + 33.981981 + ], + [ + -117.934457, + 33.982241 + ], + [ + -117.937294, + 33.982447 + ], + [ + -117.941056, + 33.98272 + ], + [ + -117.943779, + 33.982926 + ] + ] + ] + }, + "properties": { + "name": "Peter F Schabarum Regional County Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487061892, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.91076, + 33.967035 + ], + [ + -117.911458, + 33.967176 + ], + [ + -117.912637, + 33.967395 + ], + [ + -117.913229, + 33.967268 + ], + [ + -117.914014, + 33.967218 + ], + [ + -117.914266, + 33.967186 + ], + [ + -117.914338, + 33.967152 + ], + [ + -117.914372, + 33.96709 + ], + [ + -117.914362, + 33.967035 + ], + [ + -117.914316, + 33.966985 + ], + [ + -117.914261, + 33.966961 + ], + [ + -117.914186, + 33.966919 + ], + [ + -117.914127, + 33.966893 + ], + [ + -117.913674, + 33.966652 + ], + [ + -117.913484, + 33.966338 + ], + [ + -117.91358, + 33.965776 + ], + [ + -117.913626, + 33.965207 + ], + [ + -117.913448, + 33.964751 + ], + [ + -117.913304, + 33.964714 + ], + [ + -117.913096, + 33.964737 + ], + [ + -117.912669, + 33.96504 + ], + [ + -117.912429, + 33.965418 + ], + [ + -117.912139, + 33.965857 + ], + [ + -117.911316, + 33.966527 + ], + [ + -117.910755, + 33.967017 + ], + [ + -117.91076, + 33.967035 + ] + ] + ] + }, + "properties": { + "name": "Pathfinder Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487064392, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.91202, + 33.967608 + ], + [ + -117.912076, + 33.967551 + ], + [ + -117.910715, + 33.967266 + ], + [ + -117.909689, + 33.967371 + ], + [ + -117.909372, + 33.967338 + ], + [ + -117.909181, + 33.967284 + ], + [ + -117.908812, + 33.967267 + ], + [ + -117.908147, + 33.967466 + ], + [ + -117.907894, + 33.967611 + ], + [ + -117.907693, + 33.967988 + ], + [ + -117.907689, + 33.968072 + ], + [ + -117.908185, + 33.967986 + ], + [ + -117.909163, + 33.967808 + ], + [ + -117.909919, + 33.967747 + ], + [ + -117.910984, + 33.96783 + ], + [ + -117.911538, + 33.967878 + ], + [ + -117.911978, + 33.967888 + ], + [ + -117.91202, + 33.967608 + ] + ] + ] + }, + "properties": { + "name": "Pathfinder Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487095237, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.160618, + 34.139869 + ], + [ + -118.159441, + 34.139875 + ], + [ + -118.159324, + 34.138541 + ], + [ + -118.160574, + 34.138537 + ], + [ + -118.160574, + 34.138841 + ], + [ + -118.160512, + 34.13884 + ], + [ + -118.160512, + 34.138818 + ], + [ + -118.16042, + 34.138818 + ], + [ + -118.160417, + 34.139026 + ], + [ + -118.160277, + 34.139024 + ], + [ + -118.160278, + 34.139001 + ], + [ + -118.16032, + 34.139002 + ], + [ + -118.160321, + 34.138926 + ], + [ + -118.160168, + 34.138925 + ], + [ + -118.160168, + 34.138965 + ], + [ + -118.160031, + 34.138963 + ], + [ + -118.160023, + 34.139061 + ], + [ + -118.159974, + 34.139065 + ], + [ + -118.159974, + 34.139129 + ], + [ + -118.159978, + 34.139132 + ], + [ + -118.160027, + 34.139133 + ], + [ + -118.160027, + 34.139235 + ], + [ + -118.16024, + 34.139237 + ], + [ + -118.160241, + 34.139205 + ], + [ + -118.160302, + 34.139205 + ], + [ + -118.160302, + 34.13919 + ], + [ + -118.160569, + 34.139193 + ], + [ + -118.160569, + 34.139301 + ], + [ + -118.160595, + 34.139301 + ], + [ + -118.16059, + 34.139339 + ], + [ + -118.160613, + 34.139339 + ], + [ + -118.160618, + 34.139869 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487166802, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.912241, + 33.966145 + ], + [ + -117.912094, + 33.966141 + ], + [ + -117.911291, + 33.966904 + ], + [ + -117.911622, + 33.967135 + ], + [ + -117.911984, + 33.967225 + ], + [ + -117.912154, + 33.967229 + ], + [ + -117.9124, + 33.967212 + ], + [ + -117.912659, + 33.967156 + ], + [ + -117.912794, + 33.967092 + ], + [ + -117.913028, + 33.966935 + ], + [ + -117.912241, + 33.966145 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487167287, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.913869, + 33.967034 + ], + [ + -117.913745, + 33.966991 + ], + [ + -117.913612, + 33.966927 + ], + [ + -117.913367, + 33.967116 + ], + [ + -117.913409, + 33.967147 + ], + [ + -117.913466, + 33.967161 + ], + [ + -117.913506, + 33.967162 + ], + [ + -117.91354, + 33.967158 + ], + [ + -117.91363, + 33.967115 + ], + [ + -117.913788, + 33.96711 + ], + [ + -117.913827, + 33.967092 + ], + [ + -117.913869, + 33.967034 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487188800, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.010334, + 34.099847 + ], + [ + -118.011255, + 34.100139 + ], + [ + -118.011106, + 34.100448 + ], + [ + -118.011173, + 34.100508 + ], + [ + -118.011605, + 34.100648 + ], + [ + -118.011727, + 34.100733 + ], + [ + -118.011861, + 34.100771 + ], + [ + -118.011902, + 34.100824 + ], + [ + -118.01194, + 34.101075 + ], + [ + -118.011976, + 34.101376 + ], + [ + -118.012088, + 34.101361 + ], + [ + -118.012174, + 34.101347 + ], + [ + -118.012311, + 34.101376 + ], + [ + -118.012388, + 34.101425 + ], + [ + -118.012431, + 34.101525 + ], + [ + -118.01244, + 34.101617 + ], + [ + -118.012517, + 34.101674 + ], + [ + -118.012611, + 34.101738 + ], + [ + -118.012706, + 34.101774 + ], + [ + -118.012783, + 34.101788 + ], + [ + -118.012886, + 34.101781 + ], + [ + -118.012998, + 34.101752 + ], + [ + -118.013075, + 34.101717 + ], + [ + -118.013186, + 34.101717 + ], + [ + -118.013332, + 34.101745 + ], + [ + -118.013504, + 34.101802 + ], + [ + -118.01359, + 34.101845 + ], + [ + -118.013659, + 34.101901 + ], + [ + -118.013684, + 34.10198 + ], + [ + -118.013727, + 34.102036 + ], + [ + -118.01383, + 34.102058 + ], + [ + -118.013933, + 34.102093 + ], + [ + -118.014045, + 34.102072 + ], + [ + -118.014148, + 34.102051 + ], + [ + -118.014319, + 34.102008 + ], + [ + -118.014457, + 34.10188 + ], + [ + -118.01451, + 34.101792 + ], + [ + -118.014587, + 34.10171 + ], + [ + -118.014643, + 34.101592 + ], + [ + -118.014715, + 34.101482 + ], + [ + -118.014768, + 34.101387 + ], + [ + -118.014815, + 34.101252 + ], + [ + -118.014888, + 34.10116 + ], + [ + -118.014975, + 34.101037 + ], + [ + -118.015073, + 34.100934 + ], + [ + -118.015131, + 34.100805 + ], + [ + -118.015209, + 34.10064 + ], + [ + -118.015232, + 34.100561 + ], + [ + -118.015222, + 34.100497 + ], + [ + -118.01517, + 34.10045 + ], + [ + -118.015083, + 34.100314 + ], + [ + -118.015105, + 34.10025 + ], + [ + -118.015172, + 34.100155 + ], + [ + -118.015222, + 34.100095 + ], + [ + -118.015314, + 34.100012 + ], + [ + -118.015357, + 34.099933 + ], + [ + -118.015342, + 34.099805 + ], + [ + -118.015302, + 34.099676 + ], + [ + -118.015158, + 34.099614 + ], + [ + -118.015031, + 34.099593 + ], + [ + -118.014946, + 34.099614 + ], + [ + -118.014809, + 34.099698 + ], + [ + -118.014671, + 34.09967 + ], + [ + -118.014477, + 34.099641 + ], + [ + -118.014332, + 34.099535 + ], + [ + -118.014124, + 34.099595 + ], + [ + -118.014062, + 34.099677 + ], + [ + -118.014019, + 34.099713 + ], + [ + -118.013985, + 34.099776 + ], + [ + -118.013916, + 34.099748 + ], + [ + -118.01383, + 34.09967 + ], + [ + -118.013813, + 34.099606 + ], + [ + -118.01383, + 34.099521 + ], + [ + -118.013839, + 34.099471 + ], + [ + -118.013847, + 34.099414 + ], + [ + -118.013813, + 34.099336 + ], + [ + -118.013796, + 34.09925 + ], + [ + -118.013801, + 34.099192 + ], + [ + -118.013792, + 34.099119 + ], + [ + -118.013784, + 34.099021 + ], + [ + -118.01375, + 34.098955 + ], + [ + -118.0137, + 34.09889 + ], + [ + -118.013647, + 34.098821 + ], + [ + -118.013656, + 34.09875 + ], + [ + -118.013712, + 34.098644 + ], + [ + -118.013756, + 34.098562 + ], + [ + -118.013804, + 34.09847 + ], + [ + -118.013839, + 34.098405 + ], + [ + -118.013985, + 34.098319 + ], + [ + -118.014113, + 34.098284 + ], + [ + -118.01444, + 34.098106 + ], + [ + -118.014528, + 34.09805 + ], + [ + -118.01463, + 34.097984 + ], + [ + -118.014781, + 34.097888 + ], + [ + -118.014912, + 34.097805 + ], + [ + -118.015043, + 34.097743 + ], + [ + -118.015186, + 34.097713 + ], + [ + -118.015368, + 34.097623 + ], + [ + -118.015526, + 34.097548 + ], + [ + -118.015724, + 34.097455 + ], + [ + -118.015988, + 34.097308 + ], + [ + -118.016172, + 34.097205 + ], + [ + -118.016314, + 34.09717 + ], + [ + -118.016451, + 34.097162 + ], + [ + -118.016578, + 34.097154 + ], + [ + -118.016706, + 34.097147 + ], + [ + -118.016937, + 34.097168 + ], + [ + -118.017126, + 34.097189 + ], + [ + -118.017289, + 34.097189 + ], + [ + -118.017452, + 34.097179 + ], + [ + -118.017941, + 34.097147 + ], + [ + -118.01817, + 34.097073 + ], + [ + -118.018448, + 34.096997 + ], + [ + -118.01861, + 34.096961 + ], + [ + -118.018767, + 34.096931 + ], + [ + -118.018912, + 34.096929 + ], + [ + -118.019083, + 34.096926 + ], + [ + -118.019238, + 34.096976 + ], + [ + -118.01958, + 34.096902 + ], + [ + -118.019833, + 34.096876 + ], + [ + -118.020466, + 34.096912 + ], + [ + -118.020396, + 34.096738 + ], + [ + -118.020291, + 34.096743 + ], + [ + -118.020203, + 34.096571 + ], + [ + -118.020125, + 34.096528 + ], + [ + -118.017388, + 34.096827 + ], + [ + -118.016386, + 34.096728 + ], + [ + -118.014428, + 34.097612 + ], + [ + -118.013869, + 34.098002 + ], + [ + -118.012932, + 34.098404 + ], + [ + -118.01207, + 34.099249 + ], + [ + -118.01122, + 34.099669 + ], + [ + -118.01043, + 34.099608 + ], + [ + -118.010334, + 34.099847 + ] + ] + ] + }, + "properties": { + "name": "Peck Road Water Conservation Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 490372539, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.172105, + 34.007773 + ], + [ + -118.1721, + 34.007962 + ], + [ + -118.170316, + 34.008176 + ], + [ + -118.17027, + 34.007756 + ], + [ + -118.17036, + 34.007743 + ], + [ + -118.170429, + 34.007718 + ], + [ + -118.170477, + 34.007673 + ], + [ + -118.170504, + 34.007618 + ], + [ + -118.17084, + 34.006942 + ], + [ + -118.171182, + 34.007054 + ], + [ + -118.171147, + 34.007118 + ], + [ + -118.171166, + 34.007133 + ], + [ + -118.17196, + 34.007193 + ], + [ + -118.171874, + 34.007769 + ], + [ + -118.172105, + 34.007773 + ] + ] + ] + }, + "properties": { + "name": "Bandini Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 490372988, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.953991, + 34.084018 + ], + [ + -117.953828, + 34.083903 + ], + [ + -117.952915, + 34.08479 + ], + [ + -117.950244, + 34.087208 + ], + [ + -117.950724, + 34.087213 + ], + [ + -117.953867, + 34.08428 + ], + [ + -117.953778, + 34.084217 + ], + [ + -117.953991, + 34.084018 + ] + ] + ] + }, + "properties": { + "name": "Central Park West", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491840769, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.077518, + 34.079551 + ], + [ + -118.076925, + 34.079572 + ], + [ + -118.076925, + 34.079587 + ], + [ + -118.076112, + 34.079616 + ], + [ + -118.076095, + 34.079268 + ], + [ + -118.076293, + 34.079266 + ], + [ + -118.076277, + 34.078898 + ], + [ + -118.077477, + 34.078863 + ], + [ + -118.077518, + 34.079551 + ] + ] + ] + }, + "properties": { + "name": "Rosemead Community Center Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491841020, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.062739, + 33.979475 + ], + [ + -118.061516, + 33.980725 + ], + [ + -118.059536, + 33.979354 + ], + [ + -118.060826, + 33.978059 + ], + [ + -118.062737, + 33.979376 + ], + [ + -118.062739, + 33.979475 + ] + ] + ] + }, + "properties": { + "name": "Sorensen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491944419, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.131246, + 34.029082 + ], + [ + -118.13023, + 34.028984 + ], + [ + -118.130836, + 34.027935 + ], + [ + -118.131487, + 34.027935 + ], + [ + -118.131464, + 34.028681 + ], + [ + -118.131355, + 34.0289 + ], + [ + -118.131246, + 34.029082 + ] + ] + ] + }, + "properties": { + "name": "Bicknell Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491945201, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.909954, + 34.038096 + ], + [ + -117.909903, + 34.038103 + ], + [ + -117.909854, + 34.038136 + ], + [ + -117.909796, + 34.038303 + ], + [ + -117.909707, + 34.038507 + ], + [ + -117.909632, + 34.03864 + ], + [ + -117.909525, + 34.038798 + ], + [ + -117.909415, + 34.038934 + ], + [ + -117.90928, + 34.039069 + ], + [ + -117.909066, + 34.039248 + ], + [ + -117.908677, + 34.039665 + ], + [ + -117.908647, + 34.039733 + ], + [ + -117.908629, + 34.039772 + ], + [ + -117.908489, + 34.040072 + ], + [ + -117.908328, + 34.040356 + ], + [ + -117.908248, + 34.040516 + ], + [ + -117.908261, + 34.040563 + ], + [ + -117.908334, + 34.040605 + ], + [ + -117.908361, + 34.04065 + ], + [ + -117.908417, + 34.040854 + ], + [ + -117.908521, + 34.041092 + ], + [ + -117.908637, + 34.041343 + ], + [ + -117.908747, + 34.041503 + ], + [ + -117.908824, + 34.041568 + ], + [ + -117.909053, + 34.041672 + ], + [ + -117.909787, + 34.041979 + ], + [ + -117.910069, + 34.04197 + ], + [ + -117.910251, + 34.042021 + ], + [ + -117.910396, + 34.04209 + ], + [ + -117.910632, + 34.042097 + ], + [ + -117.910871, + 34.042021 + ], + [ + -117.910984, + 34.04191 + ], + [ + -117.911193, + 34.04183 + ], + [ + -117.911432, + 34.041745 + ], + [ + -117.911641, + 34.041666 + ], + [ + -117.91178, + 34.041572 + ], + [ + -117.911861, + 34.041432 + ], + [ + -117.911984, + 34.04135 + ], + [ + -117.91203, + 34.041272 + ], + [ + -117.912274, + 34.041125 + ], + [ + -117.912451, + 34.04071 + ], + [ + -117.912523, + 34.040499 + ], + [ + -117.912633, + 34.040179 + ], + [ + -117.912724, + 34.039781 + ], + [ + -117.912789, + 34.03936 + ], + [ + -117.912824, + 34.039083 + ], + [ + -117.912842, + 34.038669 + ], + [ + -117.912831, + 34.038307 + ], + [ + -117.912839, + 34.038222 + ], + [ + -117.91281, + 34.038178 + ], + [ + -117.912729, + 34.038169 + ], + [ + -117.912037, + 34.038175 + ], + [ + -117.91154, + 34.03811 + ], + [ + -117.911193, + 34.038087 + ], + [ + -117.910749, + 34.038122 + ], + [ + -117.910355, + 34.038134 + ], + [ + -117.909954, + 34.038096 + ] + ] + ] + }, + "properties": { + "name": "Big League Dreams", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491948664, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.944066, + 34.143479 + ], + [ + -117.943392, + 34.143476 + ], + [ + -117.943389, + 34.142502 + ], + [ + -117.943592, + 34.142456 + ], + [ + -117.943729, + 34.142449 + ], + [ + -117.943805, + 34.142472 + ], + [ + -117.943951, + 34.142496 + ], + [ + -117.944061, + 34.142502 + ], + [ + -117.944066, + 34.143479 + ] + ] + ] + }, + "properties": { + "name": "Hacienda Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491948797, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.021996, + 34.054831 + ], + [ + -118.02042, + 34.056116 + ], + [ + -118.021306, + 34.056881 + ], + [ + -118.021525, + 34.056731 + ], + [ + -118.021525, + 34.056686 + ], + [ + -118.021584, + 34.05663 + ], + [ + -118.021698, + 34.05663 + ], + [ + -118.021741, + 34.056675 + ], + [ + -118.021741, + 34.056742 + ], + [ + -118.022091, + 34.057042 + ], + [ + -118.022268, + 34.057025 + ], + [ + -118.023551, + 34.056021 + ], + [ + -118.02212, + 34.054818 + ], + [ + -118.022101, + 34.054799 + ], + [ + -118.022073, + 34.054793 + ], + [ + -118.022046, + 34.054797 + ], + [ + -118.021996, + 34.054831 + ] + ] + ] + }, + "properties": { + "name": "Mountain View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491948799, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.022186, + 34.056981 + ], + [ + -118.022358, + 34.056837 + ], + [ + -118.022398, + 34.056784 + ], + [ + -118.022704, + 34.056566 + ], + [ + -118.022534, + 34.056413 + ], + [ + -118.022383, + 34.056297 + ], + [ + -118.022162, + 34.05623 + ], + [ + -118.02192, + 34.056263 + ], + [ + -118.021767, + 34.056302 + ], + [ + -118.021601, + 34.056404 + ], + [ + -118.021527, + 34.056462 + ], + [ + -118.021882, + 34.056756 + ], + [ + -118.021937, + 34.056839 + ], + [ + -118.022094, + 34.056981 + ], + [ + -118.022186, + 34.056981 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 492152769, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.155414, + 34.025817 + ], + [ + -118.155452, + 34.025817 + ], + [ + -118.155486, + 34.025805 + ], + [ + -118.155513, + 34.025786 + ], + [ + -118.155522, + 34.025773 + ], + [ + -118.155748, + 34.025012 + ], + [ + -118.155745, + 34.024983 + ], + [ + -118.155723, + 34.024958 + ], + [ + -118.155685, + 34.024943 + ], + [ + -118.154996, + 34.024792 + ], + [ + -118.154977, + 34.02479 + ], + [ + -118.154954, + 34.024794 + ], + [ + -118.154935, + 34.02481 + ], + [ + -118.15492, + 34.024838 + ], + [ + -118.154693, + 34.025576 + ], + [ + -118.154693, + 34.025607 + ], + [ + -118.1547, + 34.025633 + ], + [ + -118.15472, + 34.02566 + ], + [ + -118.154745, + 34.025675 + ], + [ + -118.155414, + 34.025817 + ] + ] + ] + }, + "properties": { + "name": "Atlantic Avenue Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 492155433, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.024933, + 33.978999 + ], + [ + -118.025295, + 33.978056 + ], + [ + -118.025053, + 33.977992 + ], + [ + -118.025008, + 33.97798 + ], + [ + -118.024789, + 33.977922 + ], + [ + -118.024427, + 33.978865 + ], + [ + -118.024933, + 33.978999 + ] + ] + ] + }, + "properties": { + "name": "Newman Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 493518379, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.020466, + 34.086702 + ], + [ + -118.018272, + 34.086507 + ], + [ + -118.01824, + 34.086465 + ], + [ + -118.0189, + 34.085096 + ], + [ + -118.01898, + 34.084934 + ], + [ + -118.019061, + 34.084663 + ], + [ + -118.019832, + 34.084782 + ], + [ + -118.02085, + 34.084938 + ], + [ + -118.020712, + 34.08557 + ], + [ + -118.020565, + 34.086246 + ], + [ + -118.020466, + 34.086702 + ] + ] + ] + }, + "properties": { + "name": "Lambert Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496979455, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.890022, + 34.067484 + ], + [ + -117.889895, + 34.067484 + ], + [ + -117.889416, + 34.067795 + ], + [ + -117.889117, + 34.067999 + ], + [ + -117.889035, + 34.068089 + ], + [ + -117.889032, + 34.068564 + ], + [ + -117.889031, + 34.069018 + ], + [ + -117.888755, + 34.069054 + ], + [ + -117.888559, + 34.069089 + ], + [ + -117.888265, + 34.069161 + ], + [ + -117.888059, + 34.069229 + ], + [ + -117.887843, + 34.069315 + ], + [ + -117.887649, + 34.069403 + ], + [ + -117.887541, + 34.06946 + ], + [ + -117.88729, + 34.069617 + ], + [ + -117.887097, + 34.069738 + ], + [ + -117.8868, + 34.069953 + ], + [ + -117.886799, + 34.069849 + ], + [ + -117.886785, + 34.069142 + ], + [ + -117.886796, + 34.068667 + ], + [ + -117.886802, + 34.068167 + ], + [ + -117.886826, + 34.068028 + ], + [ + -117.886802, + 34.068 + ], + [ + -117.887461, + 34.067619 + ], + [ + -117.888136, + 34.067198 + ], + [ + -117.89002, + 34.06721 + ], + [ + -117.890022, + 34.067484 + ] + ] + ] + }, + "properties": { + "name": "Maverick-Ridge Riders Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 514378006, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.95197, + 33.927209 + ], + [ + -117.951683, + 33.927208 + ], + [ + -117.951678, + 33.927025 + ], + [ + -117.951975, + 33.927022 + ], + [ + -117.95197, + 33.927209 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 514378628, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.946677, + 33.922415 + ], + [ + -117.946699, + 33.92239 + ], + [ + -117.946684, + 33.92238 + ], + [ + -117.94673, + 33.922335 + ], + [ + -117.94675, + 33.922308 + ], + [ + -117.946756, + 33.922285 + ], + [ + -117.946764, + 33.922267 + ], + [ + -117.946777, + 33.922253 + ], + [ + -117.946796, + 33.922245 + ], + [ + -117.946818, + 33.922243 + ], + [ + -117.946836, + 33.922246 + ], + [ + -117.946852, + 33.922257 + ], + [ + -117.946883, + 33.922285 + ], + [ + -117.946905, + 33.922299 + ], + [ + -117.946931, + 33.922308 + ], + [ + -117.946956, + 33.922318 + ], + [ + -117.946972, + 33.922332 + ], + [ + -117.946987, + 33.922355 + ], + [ + -117.946997, + 33.922379 + ], + [ + -117.946998, + 33.922401 + ], + [ + -117.94699, + 33.922418 + ], + [ + -117.94697, + 33.922435 + ], + [ + -117.946946, + 33.922445 + ], + [ + -117.946911, + 33.922452 + ], + [ + -117.946868, + 33.922454 + ], + [ + -117.946816, + 33.92245 + ], + [ + -117.946756, + 33.92244 + ], + [ + -117.946677, + 33.922415 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 514382312, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.942371, + 33.933471 + ], + [ + -117.942398, + 33.933431 + ], + [ + -117.942457, + 33.933417 + ], + [ + -117.942507, + 33.933425 + ], + [ + -117.942558, + 33.933451 + ], + [ + -117.942596, + 33.933489 + ], + [ + -117.942619, + 33.933537 + ], + [ + -117.942612, + 33.933579 + ], + [ + -117.942568, + 33.933615 + ], + [ + -117.942491, + 33.933626 + ], + [ + -117.94244, + 33.933615 + ], + [ + -117.942398, + 33.933579 + ], + [ + -117.942367, + 33.933521 + ], + [ + -117.942371, + 33.933471 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 522075784, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.945573, + 33.9294 + ], + [ + -117.945589, + 33.929395 + ], + [ + -117.945589, + 33.929375 + ], + [ + -117.945581, + 33.929297 + ], + [ + -117.945688, + 33.929288 + ], + [ + -117.945723, + 33.929306 + ], + [ + -117.945758, + 33.929308 + ], + [ + -117.945812, + 33.929302 + ], + [ + -117.945843, + 33.929295 + ], + [ + -117.94594, + 33.929275 + ], + [ + -117.945994, + 33.929291 + ], + [ + -117.946023, + 33.929326 + ], + [ + -117.946023, + 33.929395 + ], + [ + -117.946026, + 33.929755 + ], + [ + -117.946012, + 33.929798 + ], + [ + -117.94598, + 33.929819 + ], + [ + -117.94593, + 33.929829 + ], + [ + -117.944854, + 33.929823 + ], + [ + -117.944846, + 33.929815 + ], + [ + -117.944849, + 33.929493 + ], + [ + -117.944827, + 33.929493 + ], + [ + -117.944829, + 33.929413 + ], + [ + -117.945176, + 33.929415 + ], + [ + -117.945235, + 33.9294 + ], + [ + -117.945342, + 33.9294 + ], + [ + -117.945573, + 33.9294 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 528544585, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.86678, + 34.114035 + ], + [ + -117.866785, + 34.114683 + ], + [ + -117.865639, + 34.11469 + ], + [ + -117.865633, + 34.114041 + ], + [ + -117.86678, + 34.114035 + ] + ] + ] + }, + "properties": { + "name": "Glendora Arboretum", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 530901846, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.86006, + 34.042226 + ], + [ + -117.860106, + 34.042311 + ], + [ + -117.860531, + 34.042499 + ], + [ + -117.86059, + 34.042629 + ], + [ + -117.860918, + 34.042737 + ], + [ + -117.861175, + 34.042634 + ], + [ + -117.861203, + 34.042526 + ], + [ + -117.861281, + 34.042378 + ], + [ + -117.861349, + 34.042282 + ], + [ + -117.861427, + 34.04219 + ], + [ + -117.861638, + 34.041983 + ], + [ + -117.861725, + 34.041905 + ], + [ + -117.861708, + 34.041886 + ], + [ + -117.861653, + 34.041841 + ], + [ + -117.861605, + 34.041783 + ], + [ + -117.861587, + 34.041758 + ], + [ + -117.861533, + 34.041689 + ], + [ + -117.861489, + 34.041624 + ], + [ + -117.861451, + 34.041543 + ], + [ + -117.861429, + 34.041498 + ], + [ + -117.86141, + 34.041435 + ], + [ + -117.861387, + 34.041378 + ], + [ + -117.86133, + 34.041282 + ], + [ + -117.861287, + 34.041215 + ], + [ + -117.861245, + 34.041163 + ], + [ + -117.861176, + 34.041098 + ], + [ + -117.861088, + 34.041022 + ], + [ + -117.860998, + 34.040971 + ], + [ + -117.860888, + 34.040922 + ], + [ + -117.860634, + 34.04078 + ], + [ + -117.860444, + 34.040675 + ], + [ + -117.859645, + 34.041411 + ], + [ + -117.859702, + 34.041532 + ], + [ + -117.859724, + 34.04157 + ], + [ + -117.859783, + 34.041676 + ], + [ + -117.859881, + 34.041801 + ], + [ + -117.859981, + 34.041938 + ], + [ + -117.860068, + 34.042044 + ], + [ + -117.860119, + 34.042129 + ], + [ + -117.860111, + 34.042178 + ], + [ + -117.86006, + 34.042226 + ] + ] + ] + }, + "properties": { + "name": "Country Hollow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546164773, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.135724, + 33.97136 + ], + [ + -118.135784, + 33.97097 + ], + [ + -118.135464, + 33.970908 + ], + [ + -118.135207, + 33.971051 + ], + [ + -118.135177, + 33.971086 + ], + [ + -118.135164, + 33.97112 + ], + [ + -118.135172, + 33.971164 + ], + [ + -118.135201, + 33.971198 + ], + [ + -118.135327, + 33.97126 + ], + [ + -118.13552, + 33.971322 + ], + [ + -118.135621, + 33.971346 + ], + [ + -118.135724, + 33.97136 + ] + ] + ] + }, + "properties": { + "name": "Hannon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 547492810, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.863212, + 34.039516 + ], + [ + -117.862561, + 34.039619 + ], + [ + -117.862364, + 34.038771 + ], + [ + -117.863015, + 34.038668 + ], + [ + -117.863212, + 34.039516 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 548423639, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.995083, + 34.14807 + ], + [ + -117.995703, + 34.148067 + ], + [ + -117.995699, + 34.14748 + ], + [ + -117.995079, + 34.147483 + ], + [ + -117.995083, + 34.14807 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 548758950, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.837238, + 34.153841 + ], + [ + -117.837351, + 34.153668 + ], + [ + -117.837437, + 34.153495 + ], + [ + -117.837565, + 34.153193 + ], + [ + -117.83775, + 34.152802 + ], + [ + -117.837799, + 34.152669 + ], + [ + -117.837898, + 34.152037 + ], + [ + -117.837978, + 34.151682 + ], + [ + -117.837994, + 34.1516 + ], + [ + -117.837504, + 34.151608 + ], + [ + -117.837533, + 34.151238 + ], + [ + -117.837472, + 34.15118 + ], + [ + -117.837504, + 34.150303 + ], + [ + -117.837533, + 34.150303 + ], + [ + -117.837555, + 34.150181 + ], + [ + -117.837482, + 34.150077 + ], + [ + -117.837431, + 34.150066 + ], + [ + -117.837316, + 34.15035 + ], + [ + -117.837246, + 34.150523 + ], + [ + -117.837104, + 34.15094 + ], + [ + -117.836954, + 34.151329 + ], + [ + -117.836881, + 34.151533 + ], + [ + -117.836828, + 34.151841 + ], + [ + -117.836806, + 34.15227 + ], + [ + -117.836849, + 34.152556 + ], + [ + -117.83693, + 34.152927 + ], + [ + -117.837061, + 34.153344 + ], + [ + -117.837158, + 34.153704 + ], + [ + -117.83719, + 34.153777 + ], + [ + -117.837238, + 34.153841 + ] + ] + ] + }, + "properties": { + "name": "Carlyle E. Linder Equestrian Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 549445874, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.052316, + 34.031708 + ], + [ + -118.052294, + 34.031677 + ], + [ + -118.052248, + 34.031667 + ], + [ + -118.052213, + 34.031662 + ], + [ + -118.049904, + 34.032525 + ], + [ + -118.049738, + 34.032607 + ], + [ + -118.049273, + 34.032838 + ], + [ + -118.047564, + 34.033833 + ], + [ + -118.048641, + 34.034762 + ], + [ + -118.048755, + 34.035278 + ], + [ + -118.047643, + 34.03614 + ], + [ + -118.048237, + 34.036656 + ], + [ + -118.048887, + 34.036144 + ], + [ + -118.05012, + 34.037186 + ], + [ + -118.049578, + 34.037653 + ], + [ + -118.049882, + 34.037908 + ], + [ + -118.053824, + 34.034661 + ], + [ + -118.053844, + 34.034612 + ], + [ + -118.053298, + 34.033565 + ], + [ + -118.052817, + 34.032664 + ], + [ + -118.052316, + 34.031708 + ] + ] + ] + }, + "properties": { + "name": "Whittier Narrows Recreation Area", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 549833972, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.108176, + 34.000918 + ], + [ + -118.107642, + 34.00181 + ], + [ + -118.107701, + 34.001895 + ], + [ + -118.107531, + 34.002144 + ], + [ + -118.107666, + 34.002229 + ], + [ + -118.107559, + 34.002361 + ], + [ + -118.105724, + 34.001266 + ], + [ + -118.106282, + 34.000361 + ], + [ + -118.106966, + 34.000656 + ], + [ + -118.107092, + 34.000466 + ], + [ + -118.108176, + 34.000918 + ] + ] + ] + }, + "properties": { + "name": "Reggie Rodriguez Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 550674706, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.873063, + 34.021318 + ], + [ + -117.872588, + 34.021591 + ], + [ + -117.872147, + 34.021757 + ], + [ + -117.871431, + 34.021842 + ], + [ + -117.871183, + 34.02146 + ], + [ + -117.871521, + 34.02122 + ], + [ + -117.871641, + 34.021032 + ], + [ + -117.871706, + 34.020832 + ], + [ + -117.872436, + 34.021089 + ], + [ + -117.873063, + 34.021318 + ] + ] + ] + }, + "properties": { + "name": "Arroyo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 550979155, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.161943, + 34.145464 + ], + [ + -118.161899, + 34.145262 + ], + [ + -118.163013, + 34.145267 + ], + [ + -118.162928, + 34.14534 + ], + [ + -118.162767, + 34.145472 + ], + [ + -118.162496, + 34.145581 + ], + [ + -118.162364, + 34.145626 + ], + [ + -118.162211, + 34.145662 + ], + [ + -118.16204, + 34.145679 + ], + [ + -118.161865, + 34.145686 + ], + [ + -118.161704, + 34.145697 + ], + [ + -118.161459, + 34.145693 + ], + [ + -118.161025, + 34.145683 + ], + [ + -118.160781, + 34.145562 + ], + [ + -118.160684, + 34.145335 + ], + [ + -118.161273, + 34.145262 + ], + [ + -118.161238, + 34.145165 + ], + [ + -118.161823, + 34.145128 + ], + [ + -118.161943, + 34.145464 + ] + ] + ] + }, + "properties": { + "name": "Defenders Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 550979163, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.152872, + 34.147816 + ], + [ + -118.152576, + 34.147818 + ], + [ + -118.15258, + 34.147578 + ], + [ + -118.153154, + 34.147574 + ], + [ + -118.153153, + 34.147657 + ], + [ + -118.153162, + 34.147677 + ], + [ + -118.153182, + 34.147686 + ], + [ + -118.153222, + 34.147687 + ], + [ + -118.153935, + 34.147701 + ], + [ + -118.153923, + 34.147776 + ], + [ + -118.152882, + 34.147768 + ], + [ + -118.152872, + 34.147816 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 551549316, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.903255, + 33.979897 + ], + [ + -117.903266, + 33.979984 + ], + [ + -117.903255, + 33.980031 + ], + [ + -117.903204, + 33.980044 + ], + [ + -117.901578, + 33.980179 + ], + [ + -117.901678, + 33.979938 + ], + [ + -117.90145, + 33.978417 + ], + [ + -117.903024, + 33.978276 + ], + [ + -117.903137, + 33.979012 + ], + [ + -117.903236, + 33.979745 + ], + [ + -117.903255, + 33.979897 + ] + ] + ] + }, + "properties": { + "name": "Carolyn Rosas Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 552510059, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.133556, + 33.966592 + ], + [ + -118.133525, + 33.966609 + ], + [ + -118.133508, + 33.966601 + ], + [ + -118.133491, + 33.966609 + ], + [ + -118.133491, + 33.966617 + ], + [ + -118.133494, + 33.966625 + ], + [ + -118.133473, + 33.966635 + ], + [ + -118.133347, + 33.966716 + ], + [ + -118.133297, + 33.966764 + ], + [ + -118.133168, + 33.966857 + ], + [ + -118.133066, + 33.966899 + ], + [ + -118.133042, + 33.966899 + ], + [ + -118.133029, + 33.966886 + ], + [ + -118.133027, + 33.966865 + ], + [ + -118.133035, + 33.966854 + ], + [ + -118.133048, + 33.966845 + ], + [ + -118.133064, + 33.966842 + ], + [ + -118.133074, + 33.966733 + ], + [ + -118.13332, + 33.966612 + ], + [ + -118.133506, + 33.966523 + ], + [ + -118.133556, + 33.966592 + ] + ] + ] + }, + "properties": { + "name": "Botanical Gardens", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 553522430, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.847944, + 33.966416 + ], + [ + -117.847739, + 33.966674 + ], + [ + -117.847589, + 33.966604 + ], + [ + -117.847491, + 33.966563 + ], + [ + -117.847393, + 33.966518 + ], + [ + -117.847319, + 33.966477 + ], + [ + -117.847298, + 33.966504 + ], + [ + -117.847249, + 33.966481 + ], + [ + -117.847206, + 33.966466 + ], + [ + -117.847164, + 33.966456 + ], + [ + -117.84711, + 33.966449 + ], + [ + -117.847055, + 33.966453 + ], + [ + -117.847003, + 33.966469 + ], + [ + -117.846914, + 33.966504 + ], + [ + -117.846843, + 33.966549 + ], + [ + -117.846781, + 33.966625 + ], + [ + -117.846625, + 33.966849 + ], + [ + -117.846489, + 33.967064 + ], + [ + -117.846395, + 33.967218 + ], + [ + -117.846325, + 33.967324 + ], + [ + -117.846276, + 33.967405 + ], + [ + -117.846227, + 33.9675 + ], + [ + -117.846221, + 33.967534 + ], + [ + -117.846196, + 33.96756 + ], + [ + -117.846192, + 33.967606 + ], + [ + -117.846178, + 33.967649 + ], + [ + -117.846127, + 33.967669 + ], + [ + -117.846151, + 33.967762 + ], + [ + -117.846259, + 33.967744 + ], + [ + -117.846385, + 33.967729 + ], + [ + -117.846463, + 33.967725 + ], + [ + -117.846571, + 33.967718 + ], + [ + -117.846652, + 33.967717 + ], + [ + -117.846745, + 33.967718 + ], + [ + -117.846821, + 33.967718 + ], + [ + -117.847054, + 33.967712 + ], + [ + -117.847097, + 33.967695 + ], + [ + -117.84714, + 33.967673 + ], + [ + -117.847185, + 33.967633 + ], + [ + -117.847234, + 33.967584 + ], + [ + -117.847341, + 33.967466 + ], + [ + -117.847464, + 33.967337 + ], + [ + -117.847593, + 33.967216 + ], + [ + -117.847708, + 33.967122 + ], + [ + -117.84775, + 33.96709 + ], + [ + -117.847788, + 33.967075 + ], + [ + -117.847842, + 33.96705 + ], + [ + -117.847924, + 33.966998 + ], + [ + -117.848002, + 33.966932 + ], + [ + -117.848081, + 33.966883 + ], + [ + -117.848195, + 33.96683 + ], + [ + -117.848259, + 33.966804 + ], + [ + -117.848303, + 33.966772 + ], + [ + -117.84828, + 33.966732 + ], + [ + -117.848254, + 33.966741 + ], + [ + -117.848217, + 33.966744 + ], + [ + -117.848181, + 33.966737 + ], + [ + -117.848155, + 33.966718 + ], + [ + -117.848137, + 33.966697 + ], + [ + -117.848125, + 33.966672 + ], + [ + -117.848125, + 33.966643 + ], + [ + -117.848132, + 33.966622 + ], + [ + -117.848142, + 33.966603 + ], + [ + -117.847944, + 33.966416 + ] + ] + ] + }, + "properties": { + "name": "Diamond Canyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 553522431, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.847922, + 33.966933 + ], + [ + -117.847819, + 33.96681 + ], + [ + -117.847745, + 33.966799 + ], + [ + -117.847617, + 33.966968 + ], + [ + -117.847675, + 33.966994 + ], + [ + -117.847711, + 33.967031 + ], + [ + -117.84774, + 33.967031 + ], + [ + -117.847774, + 33.967021 + ], + [ + -117.847814, + 33.966998 + ], + [ + -117.847876, + 33.966966 + ], + [ + -117.847922, + 33.966933 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 556806412, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.051899, + 33.929653 + ], + [ + -118.049639, + 33.928003 + ], + [ + -118.049601, + 33.931709 + ], + [ + -118.049647, + 33.931709 + ], + [ + -118.051733, + 33.931711 + ], + [ + -118.051757, + 33.929858 + ], + [ + -118.051852, + 33.929861 + ], + [ + -118.051911, + 33.929803 + ], + [ + -118.051899, + 33.929653 + ] + ] + ] + }, + "properties": { + "name": "Amelia Mayberry Park 13201 Meyer Rd, Whittier, CA 90605", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 556962322, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.852582, + 33.982126 + ], + [ + -117.852595, + 33.982126 + ], + [ + -117.852614, + 33.982119 + ], + [ + -117.852634, + 33.982107 + ], + [ + -117.85265, + 33.982089 + ], + [ + -117.852666, + 33.982063 + ], + [ + -117.852679, + 33.982033 + ], + [ + -117.852683, + 33.982009 + ], + [ + -117.852681, + 33.981992 + ], + [ + -117.852676, + 33.981977 + ], + [ + -117.852667, + 33.981965 + ], + [ + -117.852655, + 33.981951 + ], + [ + -117.852495, + 33.981814 + ], + [ + -117.852485, + 33.981807 + ], + [ + -117.85247, + 33.9818 + ], + [ + -117.852452, + 33.981794 + ], + [ + -117.852436, + 33.981792 + ], + [ + -117.85242, + 33.981791 + ], + [ + -117.852407, + 33.981794 + ], + [ + -117.85239, + 33.981799 + ], + [ + -117.852295, + 33.981836 + ], + [ + -117.852284, + 33.981844 + ], + [ + -117.852279, + 33.981853 + ], + [ + -117.852282, + 33.981865 + ], + [ + -117.852289, + 33.981877 + ], + [ + -117.852377, + 33.981952 + ], + [ + -117.852388, + 33.98196 + ], + [ + -117.852399, + 33.981961 + ], + [ + -117.852409, + 33.981959 + ], + [ + -117.852433, + 33.981951 + ], + [ + -117.852445, + 33.981948 + ], + [ + -117.852462, + 33.981947 + ], + [ + -117.852471, + 33.981952 + ], + [ + -117.852506, + 33.981981 + ], + [ + -117.85251, + 33.981987 + ], + [ + -117.852508, + 33.981996 + ], + [ + -117.852504, + 33.982004 + ], + [ + -117.852492, + 33.982023 + ], + [ + -117.852492, + 33.982031 + ], + [ + -117.852492, + 33.982037 + ], + [ + -117.852491, + 33.982046 + ], + [ + -117.852498, + 33.982055 + ], + [ + -117.852566, + 33.982115 + ], + [ + -117.852572, + 33.982121 + ], + [ + -117.852582, + 33.982126 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 559545376, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.180716, + 34.119259 + ], + [ + -118.180587, + 34.119474 + ], + [ + -118.18019, + 34.119321 + ], + [ + -118.180268, + 34.119177 + ], + [ + -118.180257, + 34.119141 + ], + [ + -118.180338, + 34.119075 + ], + [ + -118.180716, + 34.119259 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 562286390, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.977712, + 34.127789 + ], + [ + -117.977709, + 34.127015 + ], + [ + -117.977792, + 34.126939 + ], + [ + -117.979616, + 34.126932 + ], + [ + -117.979669, + 34.126957 + ], + [ + -117.979671, + 34.127599 + ], + [ + -117.97908, + 34.1276 + ], + [ + -117.97908, + 34.127785 + ], + [ + -117.977712, + 34.127789 + ] + ] + ] + }, + "properties": { + "name": "Beardslee Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 562564186, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.050661, + 33.958638 + ], + [ + -118.04934, + 33.957727 + ], + [ + -118.050599, + 33.956481 + ], + [ + -118.052634, + 33.956816 + ], + [ + -118.05161, + 33.95785 + ], + [ + -118.051367, + 33.958086 + ], + [ + -118.050808, + 33.958638 + ], + [ + -118.050701, + 33.958648 + ], + [ + -118.050661, + 33.958638 + ] + ] + ] + }, + "properties": { + "name": "York Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 563125522, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.859566, + 33.926042 + ], + [ + -117.859426, + 33.925176 + ], + [ + -117.859263, + 33.925236 + ], + [ + -117.859161, + 33.92527 + ], + [ + -117.859054, + 33.925288 + ], + [ + -117.858957, + 33.925279 + ], + [ + -117.858764, + 33.925245 + ], + [ + -117.858598, + 33.925188 + ], + [ + -117.85859, + 33.925357 + ], + [ + -117.858544, + 33.925497 + ], + [ + -117.858539, + 33.92559 + ], + [ + -117.858359, + 33.925613 + ], + [ + -117.858367, + 33.925673 + ], + [ + -117.858531, + 33.925653 + ], + [ + -117.858579, + 33.925666 + ], + [ + -117.858654, + 33.926129 + ], + [ + -117.859566, + 33.926042 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 571844947, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.989914, + 34.146368 + ], + [ + -117.989576, + 34.146368 + ], + [ + -117.989579, + 34.146712 + ], + [ + -117.989917, + 34.146715 + ], + [ + -117.989914, + 34.146368 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 583398915, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.90186, + 33.921483 + ], + [ + -117.901822, + 33.921202 + ], + [ + -117.89811, + 33.9213 + ], + [ + -117.898059, + 33.92122 + ], + [ + -117.897884, + 33.921456 + ], + [ + -117.899483, + 33.92147 + ], + [ + -117.901543, + 33.921403 + ], + [ + -117.90186, + 33.921483 + ] + ] + ] + }, + "properties": { + "name": "Tracks at Brea", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 584203860, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.081843, + 33.945439 + ], + [ + -118.08183, + 33.943937 + ], + [ + -118.081897, + 33.943933 + ], + [ + -118.081896, + 33.943897 + ], + [ + -118.081874, + 33.943866 + ], + [ + -118.081833, + 33.943841 + ], + [ + -118.081756, + 33.943812 + ], + [ + -118.081096, + 33.945057 + ], + [ + -118.081118, + 33.945068 + ], + [ + -118.081161, + 33.945158 + ], + [ + -118.081272, + 33.945189 + ], + [ + -118.081566, + 33.94531 + ], + [ + -118.081594, + 33.945341 + ], + [ + -118.081682, + 33.945361 + ], + [ + -118.081843, + 33.945439 + ] + ] + ] + }, + "properties": { + "name": "Soaring Dreams Plaza", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 584204832, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.032795, + 33.942729 + ], + [ + -118.034969, + 33.94162 + ], + [ + -118.035776, + 33.942134 + ], + [ + -118.036895, + 33.941567 + ], + [ + -118.037788, + 33.942194 + ], + [ + -118.037767, + 33.942267 + ], + [ + -118.03469, + 33.943856 + ], + [ + -118.034604, + 33.943883 + ], + [ + -118.034513, + 33.943872 + ], + [ + -118.034457, + 33.943869 + ], + [ + -118.032795, + 33.942729 + ] + ] + ] + }, + "properties": { + "name": "Gunn Avenue Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 602283531, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.161716, + 34.079945 + ], + [ + -118.161426, + 34.07969 + ], + [ + -118.16146, + 34.079582 + ], + [ + -118.161393, + 34.079143 + ], + [ + -118.161447, + 34.079108 + ], + [ + -118.161464, + 34.078997 + ], + [ + -118.161529, + 34.079024 + ], + [ + -118.161564, + 34.079038 + ], + [ + -118.161596, + 34.079055 + ], + [ + -118.161646, + 34.079071 + ], + [ + -118.161692, + 34.079092 + ], + [ + -118.161745, + 34.079117 + ], + [ + -118.161786, + 34.079131 + ], + [ + -118.161832, + 34.079158 + ], + [ + -118.161883, + 34.079169 + ], + [ + -118.161938, + 34.079186 + ], + [ + -118.161987, + 34.079196 + ], + [ + -118.162026, + 34.079199 + ], + [ + -118.162067, + 34.079208 + ], + [ + -118.162109, + 34.079212 + ], + [ + -118.162138, + 34.079219 + ], + [ + -118.162166, + 34.079238 + ], + [ + -118.1622, + 34.079262 + ], + [ + -118.162217, + 34.079293 + ], + [ + -118.162226, + 34.079325 + ], + [ + -118.162233, + 34.07936 + ], + [ + -118.162214, + 34.079392 + ], + [ + -118.162201, + 34.079442 + ], + [ + -118.162178, + 34.079493 + ], + [ + -118.162157, + 34.079536 + ], + [ + -118.162125, + 34.07958 + ], + [ + -118.162085, + 34.079622 + ], + [ + -118.162042, + 34.079675 + ], + [ + -118.162009, + 34.079709 + ], + [ + -118.161954, + 34.079756 + ], + [ + -118.161879, + 34.079816 + ], + [ + -118.161802, + 34.079872 + ], + [ + -118.16175, + 34.079913 + ], + [ + -118.161716, + 34.079945 + ] + ] + ] + }, + "properties": { + "name": "El Sereno Arroyo Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 604083331, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.104631, + 34.076378 + ], + [ + -118.10463, + 34.076022 + ], + [ + -118.104721, + 34.075951 + ], + [ + -118.105176, + 34.075942 + ], + [ + -118.105181, + 34.076372 + ], + [ + -118.104631, + 34.076378 + ] + ] + ] + }, + "properties": { + "name": "Marshal Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 628090515, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.044365, + 33.975958 + ], + [ + -118.043278, + 33.975954 + ], + [ + -118.043254, + 33.975954 + ], + [ + -118.043246, + 33.977215 + ], + [ + -118.044214, + 33.977219 + ], + [ + -118.044213, + 33.977201 + ], + [ + -118.044213, + 33.977187 + ], + [ + -118.044214, + 33.976783 + ], + [ + -118.04436, + 33.976782 + ], + [ + -118.044365, + 33.975958 + ] + ] + ] + }, + "properties": { + "name": "John Greenleaf Whittier Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 651417931, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.120813, + 34.144115 + ], + [ + -118.120931, + 34.144115 + ], + [ + -118.120929, + 34.143901 + ], + [ + -118.120811, + 34.143902 + ], + [ + -118.120813, + 34.144115 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 28594327, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.413391, + 33.922112 + ], + [ + -118.413393, + 33.921767 + ], + [ + -118.413418, + 33.920731 + ], + [ + -118.413433, + 33.920073 + ], + [ + -118.413437, + 33.919918 + ], + [ + -118.413139, + 33.919948 + ], + [ + -118.412968, + 33.919966 + ], + [ + -118.412682, + 33.919996 + ], + [ + -118.411815, + 33.920202 + ], + [ + -118.410908, + 33.920461 + ], + [ + -118.410601, + 33.920588 + ], + [ + -118.410395, + 33.920752 + ], + [ + -118.410219, + 33.920911 + ], + [ + -118.410001, + 33.921143 + ], + [ + -118.409786, + 33.9214 + ], + [ + -118.409334, + 33.921898 + ], + [ + -118.40908, + 33.922183 + ], + [ + -118.410425, + 33.922184 + ], + [ + -118.410959, + 33.922183 + ], + [ + -118.411148, + 33.922164 + ], + [ + -118.411366, + 33.922116 + ], + [ + -118.412145, + 33.922111 + ], + [ + -118.412465, + 33.922111 + ], + [ + -118.413309, + 33.922111 + ], + [ + -118.413391, + 33.922112 + ] + ] + ] + }, + "properties": { + "name": "Recreation Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 28594434, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.417016, + 33.924996 + ], + [ + -118.417009, + 33.924366 + ], + [ + -118.417007, + 33.924276 + ], + [ + -118.416733, + 33.924248 + ], + [ + -118.416535, + 33.924141 + ], + [ + -118.41645, + 33.923999 + ], + [ + -118.41645, + 33.923714 + ], + [ + -118.416295, + 33.923714 + ], + [ + -118.416055, + 33.923714 + ], + [ + -118.41607, + 33.924479 + ], + [ + -118.416079, + 33.924921 + ], + [ + -118.416081, + 33.924988 + ], + [ + -118.417016, + 33.924996 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 29223570, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.401531, + 33.874354 + ], + [ + -118.401374, + 33.874399 + ], + [ + -118.401212, + 33.874431 + ], + [ + -118.401048, + 33.874447 + ], + [ + -118.400881, + 33.874449 + ], + [ + -118.400566, + 33.8742 + ], + [ + -118.399996, + 33.873751 + ], + [ + -118.399691, + 33.873455 + ], + [ + -118.399447, + 33.873202 + ], + [ + -118.399268, + 33.873012 + ], + [ + -118.399158, + 33.872885 + ], + [ + -118.401835, + 33.872883 + ], + [ + -118.402107, + 33.873174 + ], + [ + -118.402141, + 33.873165 + ], + [ + -118.402428, + 33.873339 + ], + [ + -118.40241, + 33.873345 + ], + [ + -118.402699, + 33.873867 + ], + [ + -118.40263, + 33.873893 + ], + [ + -118.402014, + 33.874121 + ], + [ + -118.401533, + 33.874299 + ], + [ + -118.401531, + 33.874354 + ] + ] + ] + }, + "properties": { + "name": "Valley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 29223585, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.396697, + 33.861851 + ], + [ + -118.395355, + 33.862109 + ], + [ + -118.395447, + 33.862437 + ], + [ + -118.394957, + 33.862531 + ], + [ + -118.394689, + 33.86157 + ], + [ + -118.395097, + 33.861491 + ], + [ + -118.395112, + 33.861547 + ], + [ + -118.395221, + 33.861526 + ], + [ + -118.395104, + 33.861106 + ], + [ + -118.394587, + 33.861206 + ], + [ + -118.394519, + 33.860963 + ], + [ + -118.39635, + 33.86061 + ], + [ + -118.396697, + 33.861851 + ] + ] + ] + }, + "properties": { + "name": "Clark Stadium", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 29223589, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.396276, + 33.857629 + ], + [ + -118.394485, + 33.857948 + ], + [ + -118.394669, + 33.857275 + ], + [ + -118.394746, + 33.856798 + ], + [ + -118.395976, + 33.856559 + ], + [ + -118.396276, + 33.857629 + ] + ] + ] + }, + "properties": { + "name": "South Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 29225152, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.383139, + 33.888724 + ], + [ + -118.383825, + 33.888719 + ], + [ + -118.383823, + 33.888616 + ], + [ + -118.384362, + 33.888627 + ], + [ + -118.384608, + 33.888631 + ], + [ + -118.385034, + 33.88864 + ], + [ + -118.38512, + 33.889178 + ], + [ + -118.385089, + 33.890394 + ], + [ + -118.38522, + 33.890394 + ], + [ + -118.385222, + 33.890889 + ], + [ + -118.385285, + 33.890966 + ], + [ + -118.386313, + 33.890979 + ], + [ + -118.386313, + 33.889263 + ], + [ + -118.386428, + 33.888975 + ], + [ + -118.386511, + 33.888812 + ], + [ + -118.386777, + 33.888687 + ], + [ + -118.387294, + 33.888754 + ], + [ + -118.387301, + 33.88871 + ], + [ + -118.387301, + 33.888365 + ], + [ + -118.386641, + 33.888256 + ], + [ + -118.386532, + 33.888178 + ], + [ + -118.38645, + 33.888034 + ], + [ + -118.386376, + 33.887787 + ], + [ + -118.38638, + 33.887494 + ], + [ + -118.383163, + 33.8875 + ], + [ + -118.38314, + 33.888673 + ], + [ + -118.383139, + 33.888724 + ] + ] + ] + }, + "properties": { + "name": "Polliwog Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 29225197, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.387318, + 33.89099 + ], + [ + -118.386313, + 33.890979 + ], + [ + -118.386313, + 33.889263 + ], + [ + -118.386428, + 33.888975 + ], + [ + -118.386511, + 33.888812 + ], + [ + -118.386777, + 33.888687 + ], + [ + -118.387294, + 33.888754 + ], + [ + -118.387289, + 33.88956 + ], + [ + -118.387239, + 33.889697 + ], + [ + -118.387259, + 33.890493 + ], + [ + -118.387318, + 33.890538 + ], + [ + -118.387318, + 33.89099 + ] + ] + ] + }, + "properties": { + "name": "Begg Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 29336857, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.385082, + 33.887233 + ], + [ + -118.38313, + 33.887225 + ], + [ + -118.383132, + 33.886602 + ], + [ + -118.385087, + 33.88661 + ], + [ + -118.385082, + 33.887233 + ] + ] + ] + }, + "properties": { + "name": "Manhattan Heights Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 29336863, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.385257, + 33.896259 + ], + [ + -118.384524, + 33.896267 + ], + [ + -118.383912, + 33.896274 + ], + [ + -118.383276, + 33.896281 + ], + [ + -118.383258, + 33.895655 + ], + [ + -118.383204, + 33.895358 + ], + [ + -118.383203, + 33.895128 + ], + [ + -118.383114, + 33.895111 + ], + [ + -118.383181, + 33.894912 + ], + [ + -118.383188, + 33.894829 + ], + [ + -118.383243, + 33.894761 + ], + [ + -118.3834, + 33.894734 + ], + [ + -118.384135, + 33.894737 + ], + [ + -118.384403, + 33.894741 + ], + [ + -118.384569, + 33.894741 + ], + [ + -118.38489, + 33.894744 + ], + [ + -118.385103, + 33.894745 + ], + [ + -118.385239, + 33.894745 + ], + [ + -118.385257, + 33.896259 + ] + ] + ] + }, + "properties": { + "name": "Marine Avenue Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 29337794, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.411012, + 33.891137 + ], + [ + -118.411186, + 33.891072 + ], + [ + -118.410904, + 33.890567 + ], + [ + -118.411351, + 33.890395 + ], + [ + -118.411159, + 33.890052 + ], + [ + -118.411333, + 33.889985 + ], + [ + -118.410856, + 33.889132 + ], + [ + -118.410752, + 33.889166 + ], + [ + -118.41004, + 33.889385 + ], + [ + -118.410106, + 33.889585 + ], + [ + -118.410152, + 33.889789 + ], + [ + -118.410178, + 33.889995 + ], + [ + -118.410184, + 33.890203 + ], + [ + -118.410169, + 33.89041 + ], + [ + -118.410134, + 33.890615 + ], + [ + -118.410078, + 33.890818 + ], + [ + -118.410004, + 33.891016 + ], + [ + -118.40991, + 33.891208 + ], + [ + -118.409797, + 33.891393 + ], + [ + -118.409667, + 33.891571 + ], + [ + -118.409511, + 33.891746 + ], + [ + -118.409499, + 33.891771 + ], + [ + -118.409498, + 33.891797 + ], + [ + -118.409508, + 33.891822 + ], + [ + -118.409528, + 33.891843 + ], + [ + -118.409556, + 33.891856 + ], + [ + -118.409587, + 33.891861 + ], + [ + -118.409618, + 33.891856 + ], + [ + -118.410275, + 33.891692 + ], + [ + -118.410896, + 33.891539 + ], + [ + -118.410984, + 33.891481 + ], + [ + -118.411044, + 33.891403 + ], + [ + -118.41107, + 33.891313 + ], + [ + -118.411059, + 33.891221 + ], + [ + -118.411012, + 33.891137 + ] + ] + ] + }, + "properties": { + "name": "Live Oak Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 37323204, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.358722, + 33.865343 + ], + [ + -118.358696, + 33.86446 + ], + [ + -118.358438, + 33.863633 + ], + [ + -118.357958, + 33.862856 + ], + [ + -118.356833, + 33.861851 + ], + [ + -118.356876, + 33.865358 + ], + [ + -118.358722, + 33.865343 + ] + ] + ] + }, + "properties": { + "name": "El Nido Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38554492, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.377536, + 33.830988 + ], + [ + -118.377811, + 33.831323 + ], + [ + -118.378317, + 33.831894 + ], + [ + -118.37841, + 33.831983 + ], + [ + -118.37854, + 33.832108 + ], + [ + -118.378909, + 33.832407 + ], + [ + -118.379565, + 33.832895 + ], + [ + -118.380128, + 33.830853 + ], + [ + -118.380257, + 33.830496 + ], + [ + -118.380368, + 33.830211 + ], + [ + -118.38048, + 33.82999 + ], + [ + -118.380583, + 33.829812 + ], + [ + -118.380368, + 33.829755 + ], + [ + -118.380214, + 33.829676 + ], + [ + -118.380034, + 33.829555 + ], + [ + -118.379836, + 33.829434 + ], + [ + -118.379622, + 33.829334 + ], + [ + -118.37939, + 33.829263 + ], + [ + -118.37909, + 33.829199 + ], + [ + -118.379033, + 33.829426 + ], + [ + -118.378995, + 33.829577 + ], + [ + -118.378051, + 33.82952 + ], + [ + -118.377914, + 33.829947 + ], + [ + -118.377759, + 33.829926 + ], + [ + -118.377347, + 33.829569 + ], + [ + -118.377527, + 33.828721 + ], + [ + -118.376858, + 33.828094 + ], + [ + -118.376849, + 33.828265 + ], + [ + -118.376789, + 33.8286 + ], + [ + -118.376678, + 33.829006 + ], + [ + -118.376498, + 33.829606 + ], + [ + -118.376377, + 33.830011 + ], + [ + -118.376701, + 33.830255 + ], + [ + -118.376926, + 33.830425 + ], + [ + -118.377228, + 33.830681 + ], + [ + -118.37727, + 33.830717 + ], + [ + -118.377536, + 33.830988 + ] + ] + ] + }, + "properties": { + "name": "Alta Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38585543, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.408453, + 33.892006 + ], + [ + -118.407638, + 33.892526 + ], + [ + -118.406808, + 33.893047 + ], + [ + -118.406199, + 33.893435 + ], + [ + -118.405508, + 33.893875 + ], + [ + -118.405192, + 33.894059 + ], + [ + -118.404949, + 33.894189 + ], + [ + -118.404696, + 33.894306 + ], + [ + -118.404502, + 33.894388 + ], + [ + -118.404292, + 33.89446 + ], + [ + -118.404081, + 33.894526 + ], + [ + -118.40387, + 33.894581 + ], + [ + -118.403518, + 33.894658 + ], + [ + -118.403472, + 33.89468 + ], + [ + -118.403465, + 33.89472 + ], + [ + -118.403537, + 33.894893 + ], + [ + -118.403597, + 33.894914 + ], + [ + -118.403768, + 33.894885 + ], + [ + -118.403926, + 33.894851 + ], + [ + -118.404224, + 33.894774 + ], + [ + -118.404456, + 33.894692 + ], + [ + -118.40471, + 33.894603 + ], + [ + -118.404966, + 33.894494 + ], + [ + -118.405189, + 33.894388 + ], + [ + -118.405482, + 33.894219 + ], + [ + -118.405943, + 33.893924 + ], + [ + -118.406399, + 33.893683 + ], + [ + -118.407925, + 33.892739 + ], + [ + -118.408385, + 33.892401 + ], + [ + -118.408669, + 33.892215 + ], + [ + -118.40892, + 33.892046 + ], + [ + -118.409166, + 33.891869 + ], + [ + -118.40915, + 33.891837 + ], + [ + -118.409219, + 33.891781 + ], + [ + -118.409368, + 33.891572 + ], + [ + -118.409529, + 33.891378 + ], + [ + -118.409672, + 33.891169 + ], + [ + -118.409786, + 33.89094 + ], + [ + -118.409851, + 33.890761 + ], + [ + -118.409896, + 33.890603 + ], + [ + -118.409933, + 33.890392 + ], + [ + -118.409949, + 33.890185 + ], + [ + -118.409931, + 33.890016 + ], + [ + -118.409899, + 33.889772 + ], + [ + -118.409842, + 33.889567 + ], + [ + -118.409764, + 33.889355 + ], + [ + -118.40965, + 33.889102 + ], + [ + -118.409555, + 33.88893 + ], + [ + -118.409639, + 33.888886 + ], + [ + -118.409373, + 33.888442 + ], + [ + -118.40931, + 33.888405 + ], + [ + -118.409262, + 33.88841 + ], + [ + -118.409225, + 33.888418 + ], + [ + -118.409132, + 33.888508 + ], + [ + -118.409108, + 33.888556 + ], + [ + -118.409119, + 33.888605 + ], + [ + -118.409463, + 33.88927 + ], + [ + -118.40955, + 33.889451 + ], + [ + -118.409617, + 33.889639 + ], + [ + -118.409663, + 33.88983 + ], + [ + -118.409689, + 33.890024 + ], + [ + -118.409693, + 33.89022 + ], + [ + -118.409677, + 33.890414 + ], + [ + -118.409639, + 33.890607 + ], + [ + -118.40958, + 33.890796 + ], + [ + -118.409501, + 33.89098 + ], + [ + -118.409402, + 33.891157 + ], + [ + -118.409285, + 33.891327 + ], + [ + -118.40915, + 33.891487 + ], + [ + -118.408998, + 33.891636 + ], + [ + -118.40883, + 33.891773 + ], + [ + -118.408648, + 33.891897 + ], + [ + -118.408453, + 33.892006 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38631250, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.265172, + 33.848583 + ], + [ + -118.26661, + 33.848052 + ], + [ + -118.267442, + 33.847681 + ], + [ + -118.268919, + 33.847424 + ], + [ + -118.270112, + 33.848401 + ], + [ + -118.272352, + 33.850147 + ], + [ + -118.275897, + 33.852806 + ], + [ + -118.273625, + 33.85552 + ], + [ + -118.273494, + 33.855677 + ], + [ + -118.272943, + 33.854946 + ], + [ + -118.272889, + 33.854989 + ], + [ + -118.271416, + 33.856135 + ], + [ + -118.271193, + 33.856213 + ], + [ + -118.271021, + 33.856243 + ], + [ + -118.270987, + 33.856249 + ], + [ + -118.270854, + 33.856662 + ], + [ + -118.266171, + 33.856649 + ], + [ + -118.265744, + 33.853307 + ], + [ + -118.265172, + 33.848583 + ] + ] + ] + }, + "properties": { + "name": "Victoria Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 39970024, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.412627, + 33.884156 + ], + [ + -118.412673, + 33.884209 + ], + [ + -118.412697, + 33.884238 + ], + [ + -118.412753, + 33.88433 + ], + [ + -118.412267, + 33.8845 + ], + [ + -118.412456, + 33.884857 + ], + [ + -118.412556, + 33.885052 + ], + [ + -118.412666, + 33.885222 + ], + [ + -118.41227, + 33.88536 + ], + [ + -118.411762, + 33.884438 + ], + [ + -118.411336, + 33.883666 + ], + [ + -118.411489, + 33.883612 + ], + [ + -118.411732, + 33.883527 + ], + [ + -118.411992, + 33.884 + ], + [ + -118.412512, + 33.883818 + ], + [ + -118.412558, + 33.883951 + ], + [ + -118.412582, + 33.884021 + ], + [ + -118.412627, + 33.884156 + ] + ] + ] + }, + "properties": { + "name": "Manhattan State Beach", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40229649, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.258118, + 33.78457 + ], + [ + -118.257773, + 33.784588 + ], + [ + -118.25774, + 33.784589 + ], + [ + -118.257395, + 33.784607 + ], + [ + -118.257377, + 33.784371 + ], + [ + -118.257754, + 33.784352 + ], + [ + -118.258099, + 33.784334 + ], + [ + -118.258118, + 33.78457 + ] + ] + ] + }, + "properties": { + "name": "Drum Barracks", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 45306282, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.343666, + 33.887163 + ], + [ + -118.343666, + 33.887225 + ], + [ + -118.34358, + 33.887252 + ], + [ + -118.340391, + 33.887245 + ], + [ + -118.336358, + 33.887235 + ], + [ + -118.335641, + 33.887234 + ], + [ + -118.335201, + 33.887238 + ], + [ + -118.335209, + 33.886469 + ], + [ + -118.335212, + 33.886361 + ], + [ + -118.335212, + 33.885996 + ], + [ + -118.335126, + 33.885631 + ], + [ + -118.334944, + 33.885176 + ], + [ + -118.334472, + 33.884499 + ], + [ + -118.333806, + 33.88376 + ], + [ + -118.33268, + 33.88254 + ], + [ + -118.331621, + 33.881426 + ], + [ + -118.331596, + 33.8814 + ], + [ + -118.338147, + 33.879282 + ], + [ + -118.343441, + 33.87757 + ], + [ + -118.343548, + 33.877579 + ], + [ + -118.343613, + 33.877623 + ], + [ + -118.343655, + 33.877712 + ], + [ + -118.343659, + 33.880893 + ], + [ + -118.343662, + 33.883298 + ], + [ + -118.343665, + 33.886015 + ], + [ + -118.343666, + 33.887163 + ] + ] + ] + }, + "properties": { + "name": "Alondra Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 45306416, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.333463, + 33.882344 + ], + [ + -118.333496, + 33.882478 + ], + [ + -118.333613, + 33.882602 + ], + [ + -118.333838, + 33.882691 + ], + [ + -118.333989, + 33.882754 + ], + [ + -118.334124, + 33.882762 + ], + [ + -118.334246, + 33.882727 + ], + [ + -118.334289, + 33.88262 + ], + [ + -118.334203, + 33.882451 + ], + [ + -118.33416, + 33.882326 + ], + [ + -118.334113, + 33.882103 + ], + [ + -118.334113, + 33.882041 + ], + [ + -118.334064, + 33.881979 + ], + [ + -118.333935, + 33.881943 + ], + [ + -118.333806, + 33.881988 + ], + [ + -118.333678, + 33.882086 + ], + [ + -118.333549, + 33.88221 + ], + [ + -118.333463, + 33.882344 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 45306823, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.340391, + 33.887245 + ], + [ + -118.340171, + 33.885761 + ], + [ + -118.340916, + 33.885489 + ], + [ + -118.34248, + 33.885595 + ], + [ + -118.342635, + 33.885605 + ], + [ + -118.342779, + 33.885615 + ], + [ + -118.342858, + 33.885621 + ], + [ + -118.34289, + 33.885623 + ], + [ + -118.343379, + 33.885854 + ], + [ + -118.343384, + 33.886015 + ], + [ + -118.343665, + 33.886015 + ], + [ + -118.343662, + 33.883298 + ], + [ + -118.343132, + 33.883374 + ], + [ + -118.34311, + 33.880893 + ], + [ + -118.343659, + 33.880893 + ], + [ + -118.343655, + 33.877712 + ], + [ + -118.343613, + 33.877623 + ], + [ + -118.343548, + 33.877579 + ], + [ + -118.343441, + 33.87757 + ], + [ + -118.338147, + 33.879282 + ], + [ + -118.337966, + 33.879642 + ], + [ + -118.336679, + 33.880052 + ], + [ + -118.335573, + 33.882278 + ], + [ + -118.33552, + 33.882367 + ], + [ + -118.335396, + 33.88243 + ], + [ + -118.335337, + 33.882648 + ], + [ + -118.335509, + 33.882782 + ], + [ + -118.335332, + 33.8841 + ], + [ + -118.336908, + 33.886675 + ], + [ + -118.336361, + 33.886918 + ], + [ + -118.336358, + 33.887235 + ], + [ + -118.340391, + 33.887245 + ] + ] + ] + }, + "properties": { + "name": "Alondra Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 45307562, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.341741, + 33.886931 + ], + [ + -118.341714, + 33.886775 + ], + [ + -118.341414, + 33.886806 + ], + [ + -118.34143, + 33.886895 + ], + [ + -118.341372, + 33.886902 + ], + [ + -118.341226, + 33.886918 + ], + [ + -118.341258, + 33.887104 + ], + [ + -118.341575, + 33.887064 + ], + [ + -118.341554, + 33.886944 + ], + [ + -118.341741, + 33.886931 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46096667, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.373511, + 33.828056 + ], + [ + -118.37313, + 33.828552 + ], + [ + -118.373696, + 33.831364 + ], + [ + -118.374273, + 33.831305 + ], + [ + -118.374268, + 33.830804 + ], + [ + -118.375622, + 33.829581 + ], + [ + -118.374284, + 33.828539 + ], + [ + -118.37387, + 33.828261 + ], + [ + -118.373511, + 33.828056 + ] + ] + ] + }, + "properties": { + "name": "F E Hopkins Wilderness Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46158679, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.375171, + 33.850371 + ], + [ + -118.374938, + 33.849227 + ], + [ + -118.37493, + 33.848983 + ], + [ + -118.374962, + 33.848803 + ], + [ + -118.374693, + 33.848744 + ], + [ + -118.374396, + 33.84872 + ], + [ + -118.373588, + 33.848704 + ], + [ + -118.373965, + 33.850535 + ], + [ + -118.375171, + 33.850371 + ] + ] + ] + }, + "properties": { + "name": "Sunnyglen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46162243, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.365688, + 33.835953 + ], + [ + -118.365691, + 33.835023 + ], + [ + -118.363632, + 33.835022 + ], + [ + -118.363613, + 33.835022 + ], + [ + -118.363787, + 33.835953 + ], + [ + -118.365688, + 33.835953 + ] + ] + ] + }, + "properties": { + "name": "Paradise Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46342787, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.341908, + 33.793948 + ], + [ + -118.342026, + 33.793645 + ], + [ + -118.342101, + 33.793632 + ], + [ + -118.342214, + 33.793592 + ], + [ + -118.342531, + 33.793011 + ], + [ + -118.342917, + 33.792303 + ], + [ + -118.3429, + 33.792232 + ], + [ + -118.342852, + 33.792178 + ], + [ + -118.342992, + 33.791875 + ], + [ + -118.343603, + 33.792134 + ], + [ + -118.344134, + 33.79237 + ], + [ + -118.344477, + 33.792575 + ], + [ + -118.344789, + 33.792798 + ], + [ + -118.344944, + 33.792963 + ], + [ + -118.344896, + 33.793061 + ], + [ + -118.344521, + 33.793266 + ], + [ + -118.344231, + 33.793373 + ], + [ + -118.344043, + 33.793512 + ], + [ + -118.343957, + 33.793712 + ], + [ + -118.343957, + 33.793917 + ], + [ + -118.344027, + 33.79406 + ], + [ + -118.344639, + 33.794635 + ], + [ + -118.344837, + 33.794769 + ], + [ + -118.344644, + 33.795063 + ], + [ + -118.341908, + 33.793948 + ] + ] + ] + }, + "properties": { + "name": "De Portola Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46593139, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.373541, + 33.854627 + ], + [ + -118.373091, + 33.855028 + ], + [ + -118.372973, + 33.855073 + ], + [ + -118.371492, + 33.855073 + ], + [ + -118.371382, + 33.855075 + ], + [ + -118.370966, + 33.855081 + ], + [ + -118.370784, + 33.854752 + ], + [ + -118.370604, + 33.8541 + ], + [ + -118.370323, + 33.853487 + ], + [ + -118.370108, + 33.852997 + ], + [ + -118.369936, + 33.852792 + ], + [ + -118.369979, + 33.851723 + ], + [ + -118.371792, + 33.851705 + ], + [ + -118.371996, + 33.85174 + ], + [ + -118.37264, + 33.852132 + ], + [ + -118.373069, + 33.852248 + ], + [ + -118.373541, + 33.854627 + ] + ] + ] + }, + "properties": { + "name": "Entradero Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46908449, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.39158, + 33.768623 + ], + [ + -118.391258, + 33.767927 + ], + [ + -118.391038, + 33.767169 + ], + [ + -118.390952, + 33.766495 + ], + [ + -118.391446, + 33.766435 + ], + [ + -118.392092, + 33.766221 + ], + [ + -118.392886, + 33.765963 + ], + [ + -118.393916, + 33.765784 + ], + [ + -118.394447, + 33.765733 + ], + [ + -118.39519, + 33.76574 + ], + [ + -118.395437, + 33.765766 + ], + [ + -118.395697, + 33.765822 + ], + [ + -118.39592, + 33.765931 + ], + [ + -118.396107, + 33.766052 + ], + [ + -118.3963, + 33.766235 + ], + [ + -118.396467, + 33.766442 + ], + [ + -118.396901, + 33.767048 + ], + [ + -118.396131, + 33.767488 + ], + [ + -118.395807, + 33.767668 + ], + [ + -118.395375, + 33.76784 + ], + [ + -118.394903, + 33.767945 + ], + [ + -118.393422, + 33.768121 + ], + [ + -118.392969, + 33.768217 + ], + [ + -118.392293, + 33.7684 + ], + [ + -118.39158, + 33.768623 + ] + ] + ] + }, + "properties": { + "name": "Fred Hesse Jr. Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 50847328, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.354366, + 33.805638 + ], + [ + -118.352812, + 33.805516 + ], + [ + -118.352784, + 33.805114 + ], + [ + -118.352774, + 33.804745 + ], + [ + -118.35336, + 33.804777 + ], + [ + -118.353371, + 33.804718 + ], + [ + -118.353391, + 33.804511 + ], + [ + -118.353392, + 33.804395 + ], + [ + -118.35436, + 33.804506 + ], + [ + -118.354366, + 33.805638 + ] + ] + ] + }, + "properties": { + "name": "Walteria Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 55893648, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.212664, + 33.82289 + ], + [ + -118.211626, + 33.823853 + ], + [ + -118.21222, + 33.824016 + ], + [ + -118.212658, + 33.824094 + ], + [ + -118.212664, + 33.82289 + ] + ] + ] + }, + "properties": { + "name": "United Plant Growers", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 59591244, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.335267, + 33.779568 + ], + [ + -118.334915, + 33.779432 + ], + [ + -118.334583, + 33.779614 + ], + [ + -118.334156, + 33.779727 + ], + [ + -118.333145, + 33.779814 + ], + [ + -118.332544, + 33.779841 + ], + [ + -118.332075, + 33.779747 + ], + [ + -118.331989, + 33.779667 + ], + [ + -118.331976, + 33.779395 + ], + [ + -118.332029, + 33.779012 + ], + [ + -118.331965, + 33.778816 + ], + [ + -118.331407, + 33.778738 + ], + [ + -118.331225, + 33.778878 + ], + [ + -118.330978, + 33.779449 + ], + [ + -118.330474, + 33.780144 + ], + [ + -118.329476, + 33.780519 + ], + [ + -118.328467, + 33.780563 + ], + [ + -118.32748, + 33.780537 + ], + [ + -118.325721, + 33.780537 + ], + [ + -118.325142, + 33.78059 + ], + [ + -118.324777, + 33.780474 + ], + [ + -118.324541, + 33.780144 + ], + [ + -118.324594, + 33.779886 + ], + [ + -118.324841, + 33.779582 + ], + [ + -118.324723, + 33.779261 + ], + [ + -118.32453, + 33.778976 + ], + [ + -118.323994, + 33.778726 + ], + [ + -118.323725, + 33.77911 + ], + [ + -118.323339, + 33.779743 + ], + [ + -118.323049, + 33.780135 + ], + [ + -118.322652, + 33.780572 + ], + [ + -118.322095, + 33.781045 + ], + [ + -118.322427, + 33.781482 + ], + [ + -118.323017, + 33.781562 + ], + [ + -118.324004, + 33.781544 + ], + [ + -118.325506, + 33.781705 + ], + [ + -118.326644, + 33.781803 + ], + [ + -118.326976, + 33.781919 + ], + [ + -118.326697, + 33.7824 + ], + [ + -118.326955, + 33.78265 + ], + [ + -118.327631, + 33.782543 + ], + [ + -118.328242, + 33.782383 + ], + [ + -118.3291, + 33.782543 + ], + [ + -118.329798, + 33.782784 + ], + [ + -118.330495, + 33.783025 + ], + [ + -118.331332, + 33.783319 + ], + [ + -118.331772, + 33.783542 + ], + [ + -118.332514, + 33.78377 + ], + [ + -118.332765, + 33.783918 + ], + [ + -118.33292, + 33.783859 + ], + [ + -118.333072, + 33.783744 + ], + [ + -118.333004, + 33.783451 + ], + [ + -118.333008, + 33.782266 + ], + [ + -118.333187, + 33.782114 + ], + [ + -118.332927, + 33.781475 + ], + [ + -118.333154, + 33.780764 + ], + [ + -118.333692, + 33.780626 + ], + [ + -118.33472, + 33.780462 + ], + [ + -118.335051, + 33.78029 + ], + [ + -118.335267, + 33.780066 + ], + [ + -118.335329, + 33.779758 + ], + [ + -118.335267, + 33.779568 + ] + ] + ] + }, + "properties": { + "name": "Rolling Hills Country Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 65063581, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.411835, + 33.897311 + ], + [ + -118.411848, + 33.89739 + ], + [ + -118.41181, + 33.897422 + ], + [ + -118.411755, + 33.897439 + ], + [ + -118.411686, + 33.89745 + ], + [ + -118.412107, + 33.898191 + ], + [ + -118.412254, + 33.898623 + ], + [ + -118.412157, + 33.898629 + ], + [ + -118.412282, + 33.898988 + ], + [ + -118.412283, + 33.899019 + ], + [ + -118.412314, + 33.899015 + ], + [ + -118.412375, + 33.899001 + ], + [ + -118.412435, + 33.899022 + ], + [ + -118.412492, + 33.899083 + ], + [ + -118.413599, + 33.899028 + ], + [ + -118.41351, + 33.898786 + ], + [ + -118.413426, + 33.898775 + ], + [ + -118.413391, + 33.89872 + ], + [ + -118.413394, + 33.898647 + ], + [ + -118.413457, + 33.898597 + ], + [ + -118.413389, + 33.898437 + ], + [ + -118.413455, + 33.898392 + ], + [ + -118.413342, + 33.89819 + ], + [ + -118.413274, + 33.898221 + ], + [ + -118.413198, + 33.898214 + ], + [ + -118.413152, + 33.89818 + ], + [ + -118.413135, + 33.898124 + ], + [ + -118.413174, + 33.898069 + ], + [ + -118.413287, + 33.898036 + ], + [ + -118.413062, + 33.897494 + ], + [ + -118.412991, + 33.897555 + ], + [ + -118.412903, + 33.897566 + ], + [ + -118.412847, + 33.897532 + ], + [ + -118.412827, + 33.897457 + ], + [ + -118.412892, + 33.897406 + ], + [ + -118.412984, + 33.897403 + ], + [ + -118.412823, + 33.897019 + ], + [ + -118.411835, + 33.897311 + ] + ] + ] + }, + "properties": { + "name": "Sand Dune Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70288548, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.283553, + 33.80857 + ], + [ + -118.283543, + 33.809655 + ], + [ + -118.28503, + 33.809648 + ], + [ + -118.285004, + 33.809571 + ], + [ + -118.284859, + 33.809226 + ], + [ + -118.284688, + 33.808837 + ], + [ + -118.284473, + 33.808362 + ], + [ + -118.284333, + 33.807977 + ], + [ + -118.284218, + 33.807958 + ], + [ + -118.283964, + 33.807926 + ], + [ + -118.28376, + 33.807922 + ], + [ + -118.28339, + 33.807933 + ], + [ + -118.283376, + 33.808565 + ], + [ + -118.283553, + 33.80857 + ] + ] + ] + }, + "properties": { + "name": "Carriage Crest Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70316691, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.328525, + 33.826581 + ], + [ + -118.321833, + 33.826628 + ], + [ + -118.321817, + 33.825563 + ], + [ + -118.32091, + 33.825556 + ], + [ + -118.320776, + 33.825543 + ], + [ + -118.320623, + 33.825518 + ], + [ + -118.3205, + 33.825494 + ], + [ + -118.319867, + 33.825364 + ], + [ + -118.319306, + 33.82485 + ], + [ + -118.319768, + 33.824818 + ], + [ + -118.320739, + 33.825055 + ], + [ + -118.324183, + 33.82503 + ], + [ + -118.324751, + 33.825021 + ], + [ + -118.325915, + 33.824997 + ], + [ + -118.326908, + 33.824975 + ], + [ + -118.328522, + 33.824961 + ], + [ + -118.328525, + 33.826581 + ] + ] + ] + }, + "properties": { + "name": "Charles H Wilson Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70316728, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.311737, + 33.811261 + ], + [ + -118.314481, + 33.811267 + ], + [ + -118.314478, + 33.810568 + ], + [ + -118.313941, + 33.810577 + ], + [ + -118.313934, + 33.810218 + ], + [ + -118.313368, + 33.81022 + ], + [ + -118.313365, + 33.809837 + ], + [ + -118.31175, + 33.809841 + ], + [ + -118.311737, + 33.811261 + ] + ] + ] + }, + "properties": { + "name": "Sur La Brea Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70317283, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.318834, + 33.821706 + ], + [ + -118.317675, + 33.821425 + ], + [ + -118.316562, + 33.821153 + ], + [ + -118.315436, + 33.820874 + ], + [ + -118.315315, + 33.821227 + ], + [ + -118.318102, + 33.823758 + ], + [ + -118.318314, + 33.823127 + ], + [ + -118.318735, + 33.821944 + ], + [ + -118.318834, + 33.821706 + ] + ] + ] + }, + "properties": { + "name": "Torrance Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70321354, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.334206, + 33.818127 + ], + [ + -118.336138, + 33.818529 + ], + [ + -118.336138, + 33.818583 + ], + [ + -118.336585, + 33.818585 + ], + [ + -118.336597, + 33.81706 + ], + [ + -118.336089, + 33.817058 + ], + [ + -118.335903, + 33.817071 + ], + [ + -118.33572, + 33.817088 + ], + [ + -118.335558, + 33.817094 + ], + [ + -118.335412, + 33.817092 + ], + [ + -118.335252, + 33.817076 + ], + [ + -118.335092, + 33.817043 + ], + [ + -118.334904, + 33.816986 + ], + [ + -118.334477, + 33.8178 + ], + [ + -118.334424, + 33.817877 + ], + [ + -118.334371, + 33.817936 + ], + [ + -118.334294, + 33.818009 + ], + [ + -118.334233, + 33.818069 + ], + [ + -118.334206, + 33.818127 + ] + ] + ] + }, + "properties": { + "name": "Hickory Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70321754, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.363455, + 33.843235 + ], + [ + -118.364957, + 33.84323 + ], + [ + -118.364937, + 33.841428 + ], + [ + -118.36343, + 33.841422 + ], + [ + -118.363455, + 33.843235 + ] + ] + ] + }, + "properties": { + "name": "Victor Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70321759, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.345405, + 33.84785 + ], + [ + -118.345317, + 33.847364 + ], + [ + -118.345168, + 33.846811 + ], + [ + -118.344973, + 33.846161 + ], + [ + -118.34491, + 33.845736 + ], + [ + -118.344887, + 33.845267 + ], + [ + -118.34495, + 33.845177 + ], + [ + -118.34526, + 33.84509 + ], + [ + -118.34553, + 33.845046 + ], + [ + -118.346063, + 33.845046 + ], + [ + -118.34609, + 33.846782 + ], + [ + -118.347123, + 33.846793 + ], + [ + -118.347131, + 33.847863 + ], + [ + -118.345405, + 33.84785 + ] + ] + ] + }, + "properties": { + "name": "Delthorne Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70330528, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.298789, + 33.746129 + ], + [ + -118.295403, + 33.746124 + ], + [ + -118.295403, + 33.746091 + ], + [ + -118.29529, + 33.746071 + ], + [ + -118.295285, + 33.745975 + ], + [ + -118.29462, + 33.745961 + ], + [ + -118.29462, + 33.745631 + ], + [ + -118.294384, + 33.745631 + ], + [ + -118.294373, + 33.746095 + ], + [ + -118.293434, + 33.746106 + ], + [ + -118.293437, + 33.746468 + ], + [ + -118.294258, + 33.746465 + ], + [ + -118.294263, + 33.746791 + ], + [ + -118.294432, + 33.746789 + ], + [ + -118.294427, + 33.746387 + ], + [ + -118.294617, + 33.746387 + ], + [ + -118.294623, + 33.746407 + ], + [ + -118.295132, + 33.746405 + ], + [ + -118.295132, + 33.746374 + ], + [ + -118.296149, + 33.746376 + ], + [ + -118.296151, + 33.746407 + ], + [ + -118.296602, + 33.746407 + ], + [ + -118.296599, + 33.746796 + ], + [ + -118.296833, + 33.746798 + ], + [ + -118.296833, + 33.746419 + ], + [ + -118.297849, + 33.746425 + ], + [ + -118.297857, + 33.746329 + ], + [ + -118.298244, + 33.746332 + ], + [ + -118.298244, + 33.746414 + ], + [ + -118.298791, + 33.746415 + ], + [ + -118.298789, + 33.746129 + ] + ] + ] + }, + "properties": { + "name": "Bandini Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70330530, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.300282, + 33.747692 + ], + [ + -118.300288, + 33.74804 + ], + [ + -118.299936, + 33.74804 + ], + [ + -118.299944, + 33.748373 + ], + [ + -118.300596, + 33.748383 + ], + [ + -118.300601, + 33.748042 + ], + [ + -118.300994, + 33.748041 + ], + [ + -118.301, + 33.747509 + ], + [ + -118.300691, + 33.747601 + ], + [ + -118.300457, + 33.747656 + ], + [ + -118.300282, + 33.747692 + ] + ] + ] + }, + "properties": { + "name": "Rena Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70331111, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.252024, + 33.833354 + ], + [ + -118.252194, + 33.833601 + ], + [ + -118.252745, + 33.833596 + ], + [ + -118.252739, + 33.832845 + ], + [ + -118.252694, + 33.832774 + ], + [ + -118.252129, + 33.832777 + ], + [ + -118.25214, + 33.833076 + ], + [ + -118.252166, + 33.833216 + ], + [ + -118.25215, + 33.833295 + ], + [ + -118.252103, + 33.833342 + ], + [ + -118.252024, + 33.833354 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70331135, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.240974, + 33.836355 + ], + [ + -118.24362, + 33.836344 + ], + [ + -118.243624, + 33.837705 + ], + [ + -118.244126, + 33.837703 + ], + [ + -118.244126, + 33.838154 + ], + [ + -118.24268, + 33.838161 + ], + [ + -118.242678, + 33.838445 + ], + [ + -118.242333, + 33.838442 + ], + [ + -118.24233, + 33.838162 + ], + [ + -118.240962, + 33.838168 + ], + [ + -118.240974, + 33.836355 + ] + ] + ] + }, + "properties": { + "name": "Dolphin Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 72370676, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.260876, + 33.923602 + ], + [ + -118.260893, + 33.920992 + ], + [ + -118.265083, + 33.920974 + ], + [ + -118.265095, + 33.91809 + ], + [ + -118.263441, + 33.918105 + ], + [ + -118.263422, + 33.91646 + ], + [ + -118.256171, + 33.916488 + ], + [ + -118.256135, + 33.917636 + ], + [ + -118.256361, + 33.917775 + ], + [ + -118.256359, + 33.91869 + ], + [ + -118.257827, + 33.918681 + ], + [ + -118.257849, + 33.91821 + ], + [ + -118.259548, + 33.918208 + ], + [ + -118.25955, + 33.920909 + ], + [ + -118.256151, + 33.920937 + ], + [ + -118.256127, + 33.923071 + ], + [ + -118.256109, + 33.9236 + ], + [ + -118.260876, + 33.923602 + ] + ] + ] + }, + "properties": { + "name": "Earvin \"Magic\" Johnson Recreation Area", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 72654536, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.270604, + 33.856845 + ], + [ + -118.268098, + 33.856857 + ], + [ + -118.268123, + 33.858634 + ], + [ + -118.272121, + 33.858628 + ], + [ + -118.274473, + 33.858634 + ], + [ + -118.274437, + 33.858369 + ], + [ + -118.274243, + 33.858012 + ], + [ + -118.274007, + 33.857515 + ], + [ + -118.273641, + 33.856708 + ], + [ + -118.273211, + 33.855966 + ], + [ + -118.273292, + 33.855815 + ], + [ + -118.272889, + 33.854989 + ], + [ + -118.271416, + 33.856135 + ], + [ + -118.271193, + 33.856213 + ], + [ + -118.271021, + 33.856243 + ], + [ + -118.270987, + 33.856249 + ], + [ + -118.270854, + 33.856662 + ], + [ + -118.270824, + 33.856755 + ], + [ + -118.270837, + 33.856852 + ], + [ + -118.270604, + 33.856845 + ] + ] + ] + }, + "properties": { + "name": "Victoria Community Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 80213753, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.260218, + 33.791254 + ], + [ + -118.259927, + 33.789086 + ], + [ + -118.256133, + 33.789294 + ], + [ + -118.256288, + 33.791472 + ], + [ + -118.258565, + 33.791346 + ], + [ + -118.260218, + 33.791254 + ] + ] + ] + }, + "properties": { + "name": "Banning Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 107758844, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.350895, + 33.859217 + ], + [ + -118.350895, + 33.859796 + ], + [ + -118.35067, + 33.859792 + ], + [ + -118.350643, + 33.861845 + ], + [ + -118.347264, + 33.86185 + ], + [ + -118.347269, + 33.861912 + ], + [ + -118.345737, + 33.861927 + ], + [ + -118.343949, + 33.861943 + ], + [ + -118.343959, + 33.858531 + ], + [ + -118.344061, + 33.858429 + ], + [ + -118.348117, + 33.858433 + ], + [ + -118.348129, + 33.859031 + ], + [ + -118.348133, + 33.859222 + ], + [ + -118.350895, + 33.859217 + ] + ] + ] + }, + "properties": { + "name": "Columbia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 108532547, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.378503, + 33.891085 + ], + [ + -118.377243, + 33.891108 + ], + [ + -118.377238, + 33.890379 + ], + [ + -118.377233, + 33.889571 + ], + [ + -118.376385, + 33.890288 + ], + [ + -118.375962, + 33.889938 + ], + [ + -118.376927, + 33.889067 + ], + [ + -118.376929, + 33.888769 + ], + [ + -118.376929, + 33.888592 + ], + [ + -118.376922, + 33.88845 + ], + [ + -118.376909, + 33.888158 + ], + [ + -118.376881, + 33.887531 + ], + [ + -118.377457, + 33.887526 + ], + [ + -118.378415, + 33.887522 + ], + [ + -118.378455, + 33.887553 + ], + [ + -118.3785, + 33.887587 + ], + [ + -118.378503, + 33.891085 + ] + ] + ] + }, + "properties": { + "name": "Aviation Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 112932707, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.374473, + 33.918407 + ], + [ + -118.37521, + 33.918406 + ], + [ + -118.37521, + 33.918452 + ], + [ + -118.376536, + 33.91845 + ], + [ + -118.376534, + 33.917192 + ], + [ + -118.374471, + 33.917194 + ], + [ + -118.374472, + 33.917423 + ], + [ + -118.374473, + 33.918407 + ] + ] + ] + }, + "properties": { + "name": "Del Aire Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 112933098, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.371315, + 33.90852 + ], + [ + -118.371656, + 33.908524 + ], + [ + -118.371658, + 33.908673 + ], + [ + -118.37177, + 33.908601 + ], + [ + -118.37188, + 33.908633 + ], + [ + -118.372, + 33.908686 + ], + [ + -118.372554, + 33.908693 + ], + [ + -118.372566, + 33.90797 + ], + [ + -118.371318, + 33.907957 + ], + [ + -118.371315, + 33.90852 + ] + ] + ] + }, + "properties": { + "name": "Holly Glen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 113057736, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.256525, + 33.91459 + ], + [ + -118.256596, + 33.914651 + ], + [ + -118.258299, + 33.914655 + ], + [ + -118.258391, + 33.914629 + ], + [ + -118.258708, + 33.914631 + ], + [ + -118.258724, + 33.912819 + ], + [ + -118.256565, + 33.912822 + ], + [ + -118.256564, + 33.913068 + ], + [ + -118.256546, + 33.913262 + ], + [ + -118.256525, + 33.91459 + ] + ] + ] + }, + "properties": { + "name": "Enterprise Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 113666942, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.357562, + 33.938102 + ], + [ + -118.357593, + 33.938101 + ], + [ + -118.358685, + 33.938096 + ], + [ + -118.359066, + 33.938094 + ], + [ + -118.35907, + 33.93727 + ], + [ + -118.359072, + 33.936878 + ], + [ + -118.359073, + 33.936511 + ], + [ + -118.358793, + 33.936511 + ], + [ + -118.358591, + 33.936511 + ], + [ + -118.358588, + 33.936685 + ], + [ + -118.358036, + 33.936683 + ], + [ + -118.358033, + 33.936765 + ], + [ + -118.357977, + 33.936988 + ], + [ + -118.357572, + 33.937486 + ], + [ + -118.357562, + 33.938102 + ] + ] + ] + }, + "properties": { + "name": "Lennox Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 116700065, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.398877, + 33.920946 + ], + [ + -118.398877, + 33.923575 + ], + [ + -118.398787, + 33.923574 + ], + [ + -118.39876, + 33.923574 + ], + [ + -118.398417, + 33.923571 + ], + [ + -118.398386, + 33.920949 + ], + [ + -118.398877, + 33.920946 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 116700066, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.398914, + 33.928106 + ], + [ + -118.398834, + 33.928104 + ], + [ + -118.398655, + 33.928101 + ], + [ + -118.398655, + 33.928889 + ], + [ + -118.398655, + 33.928957 + ], + [ + -118.398654, + 33.929009 + ], + [ + -118.398669, + 33.929009 + ], + [ + -118.398686, + 33.929009 + ], + [ + -118.39872, + 33.929009 + ], + [ + -118.398914, + 33.929008 + ], + [ + -118.398914, + 33.928991 + ], + [ + -118.398914, + 33.928178 + ], + [ + -118.398914, + 33.928106 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 116700068, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.398893, + 33.927081 + ], + [ + -118.398453, + 33.927087 + ], + [ + -118.398466, + 33.927999 + ], + [ + -118.398894, + 33.927996 + ], + [ + -118.398893, + 33.927081 + ] + ] + ] + }, + "properties": { + "name": "Constitution Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 127846761, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.309619, + 33.949083 + ], + [ + -118.309619, + 33.949005 + ], + [ + -118.309622, + 33.948023 + ], + [ + -118.311785, + 33.948022 + ], + [ + -118.311812, + 33.949005 + ], + [ + -118.313918, + 33.948997 + ], + [ + -118.313932, + 33.945603 + ], + [ + -118.309207, + 33.945589 + ], + [ + -118.309177, + 33.949084 + ], + [ + -118.309619, + 33.949083 + ] + ] + ] + }, + "properties": { + "name": "Jesse Owens County Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 128706711, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.315063, + 33.912605 + ], + [ + -118.317696, + 33.912596 + ], + [ + -118.317727, + 33.910286 + ], + [ + -118.314583, + 33.910267 + ], + [ + -118.314572, + 33.912538 + ], + [ + -118.314918, + 33.912538 + ], + [ + -118.315063, + 33.912605 + ] + ] + ] + }, + "properties": { + "name": "Rowley Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 136637111, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.282538, + 33.789678 + ], + [ + -118.282131, + 33.788765 + ], + [ + -118.282059, + 33.788414 + ], + [ + -118.281974, + 33.787876 + ], + [ + -118.281731, + 33.786161 + ], + [ + -118.286349, + 33.786138 + ], + [ + -118.286482, + 33.786234 + ], + [ + -118.286719, + 33.786216 + ], + [ + -118.286811, + 33.786037 + ], + [ + -118.286877, + 33.785104 + ], + [ + -118.286935, + 33.784903 + ], + [ + -118.28711, + 33.783982 + ], + [ + -118.28714, + 33.783795 + ], + [ + -118.287137, + 33.783576 + ], + [ + -118.287127, + 33.783032 + ], + [ + -118.287244, + 33.78263 + ], + [ + -118.28711, + 33.782279 + ], + [ + -118.286852, + 33.782159 + ], + [ + -118.285493, + 33.782193 + ], + [ + -118.28538, + 33.782048 + ], + [ + -118.285287, + 33.781534 + ], + [ + -118.285102, + 33.781295 + ], + [ + -118.284813, + 33.781141 + ], + [ + -118.284453, + 33.781029 + ], + [ + -118.284093, + 33.780816 + ], + [ + -118.283773, + 33.780781 + ], + [ + -118.283258, + 33.780918 + ], + [ + -118.28264, + 33.781089 + ], + [ + -118.281961, + 33.781072 + ], + [ + -118.281652, + 33.781218 + ], + [ + -118.281217, + 33.781671 + ], + [ + -118.281123, + 33.781687 + ], + [ + -118.281088, + 33.781642 + ], + [ + -118.281065, + 33.780262 + ], + [ + -118.281991, + 33.780229 + ], + [ + -118.282254, + 33.780105 + ], + [ + -118.282475, + 33.77945 + ], + [ + -118.282486, + 33.778997 + ], + [ + -118.282486, + 33.778968 + ], + [ + -118.2892, + 33.77861 + ], + [ + -118.290797, + 33.77888 + ], + [ + -118.292262, + 33.77918 + ], + [ + -118.293349, + 33.779617 + ], + [ + -118.294563, + 33.780456 + ], + [ + -118.295419, + 33.780973 + ], + [ + -118.296567, + 33.781642 + ], + [ + -118.2965, + 33.781686 + ], + [ + -118.297219, + 33.782785 + ], + [ + -118.297235, + 33.785126 + ], + [ + -118.297112, + 33.785638 + ], + [ + -118.296792, + 33.786216 + ], + [ + -118.295782, + 33.78719 + ], + [ + -118.294017, + 33.788729 + ], + [ + -118.291619, + 33.790846 + ], + [ + -118.287435, + 33.79081 + ], + [ + -118.285541, + 33.790797 + ], + [ + -118.28303, + 33.790548 + ], + [ + -118.282538, + 33.789678 + ] + ] + ] + }, + "properties": { + "name": "Ken Malloy Harbor Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 136641845, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.309037, + 33.750153 + ], + [ + -118.30906, + 33.750004 + ], + [ + -118.309155, + 33.749384 + ], + [ + -118.309493, + 33.747172 + ], + [ + -118.3065, + 33.747065 + ], + [ + -118.306489, + 33.748162 + ], + [ + -118.304654, + 33.748206 + ], + [ + -118.303989, + 33.748617 + ], + [ + -118.303667, + 33.749098 + ], + [ + -118.302959, + 33.749348 + ], + [ + -118.303034, + 33.749553 + ], + [ + -118.303024, + 33.749731 + ], + [ + -118.302877, + 33.749995 + ], + [ + -118.302198, + 33.751399 + ], + [ + -118.301366, + 33.751583 + ], + [ + -118.301575, + 33.752113 + ], + [ + -118.30238, + 33.75189 + ], + [ + -118.302541, + 33.752184 + ], + [ + -118.302273, + 33.752675 + ], + [ + -118.302648, + 33.752764 + ], + [ + -118.30356, + 33.75255 + ], + [ + -118.304311, + 33.751962 + ], + [ + -118.305116, + 33.751926 + ], + [ + -118.306478, + 33.751935 + ], + [ + -118.306474, + 33.749967 + ], + [ + -118.308453, + 33.749957 + ], + [ + -118.308817, + 33.750105 + ], + [ + -118.309037, + 33.750153 + ] + ] + ] + }, + "properties": { + "name": "Peck Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 136689355, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.317803, + 33.921694 + ], + [ + -118.317663, + 33.923611 + ], + [ + -118.316743, + 33.923625 + ], + [ + -118.316745, + 33.923788 + ], + [ + -118.313098, + 33.923788 + ], + [ + -118.313086, + 33.92363 + ], + [ + -118.317803, + 33.921694 + ] + ] + ] + }, + "properties": { + "name": "Holly Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 136689508, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.241162, + 33.972726 + ], + [ + -118.2429, + 33.972726 + ], + [ + -118.242901, + 33.967533 + ], + [ + -118.241121, + 33.967536 + ], + [ + -118.241119, + 33.970884 + ], + [ + -118.241162, + 33.972726 + ] + ] + ] + }, + "properties": { + "name": "Roosevelt Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144946776, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.214242, + 33.822543 + ], + [ + -118.212816, + 33.823898 + ], + [ + -118.21281, + 33.824148 + ], + [ + -118.213164, + 33.82417 + ], + [ + -118.214033, + 33.822918 + ], + [ + -118.214242, + 33.822543 + ] + ] + ] + }, + "properties": { + "name": "Tanaka Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 145159946, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.37814, + 33.855097 + ], + [ + -118.376147, + 33.855676 + ], + [ + -118.375996, + 33.855756 + ], + [ + -118.375912, + 33.85602 + ], + [ + -118.375776, + 33.856197 + ], + [ + -118.375842, + 33.856719 + ], + [ + -118.375809, + 33.856763 + ], + [ + -118.375192, + 33.856861 + ], + [ + -118.375483, + 33.858127 + ], + [ + -118.37656, + 33.858139 + ], + [ + -118.377488, + 33.858139 + ], + [ + -118.378303, + 33.858148 + ], + [ + -118.378496, + 33.858117 + ], + [ + -118.378689, + 33.858046 + ], + [ + -118.378721, + 33.857997 + ], + [ + -118.378574, + 33.857264 + ], + [ + -118.378562, + 33.8572 + ], + [ + -118.37854, + 33.857091 + ], + [ + -118.378527, + 33.857028 + ], + [ + -118.378413, + 33.856459 + ], + [ + -118.378403, + 33.856408 + ], + [ + -118.378312, + 33.855955 + ], + [ + -118.3783, + 33.855895 + ], + [ + -118.37814, + 33.855097 + ] + ] + ] + }, + "properties": { + "name": "Dominquez Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 159294824, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.253939, + 33.945541 + ], + [ + -118.25395, + 33.943387 + ], + [ + -118.249253, + 33.943371 + ], + [ + -118.249243, + 33.945525 + ], + [ + -118.253939, + 33.945541 + ] + ] + ] + }, + "properties": { + "name": "Ted Watkins Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 159426178, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.242657, + 33.939867 + ], + [ + -118.242408, + 33.93962 + ], + [ + -118.242227, + 33.939436 + ], + [ + -118.24214, + 33.939362 + ], + [ + -118.242036, + 33.939281 + ], + [ + -118.241876, + 33.939167 + ], + [ + -118.241699, + 33.939057 + ], + [ + -118.241566, + 33.938991 + ], + [ + -118.241438, + 33.938931 + ], + [ + -118.241334, + 33.938912 + ], + [ + -118.240812, + 33.93868 + ], + [ + -118.240811, + 33.938664 + ], + [ + -118.23952, + 33.938097 + ], + [ + -118.239177, + 33.937942 + ], + [ + -118.23913, + 33.937964 + ], + [ + -118.23913, + 33.938205 + ], + [ + -118.240777, + 33.938932 + ], + [ + -118.241298, + 33.939163 + ], + [ + -118.241458, + 33.939244 + ], + [ + -118.241665, + 33.939378 + ], + [ + -118.241942, + 33.939575 + ], + [ + -118.242116, + 33.939724 + ], + [ + -118.242266, + 33.939869 + ], + [ + -118.242421, + 33.940043 + ], + [ + -118.242569, + 33.940244 + ], + [ + -118.242601, + 33.940259 + ], + [ + -118.242636, + 33.94025 + ], + [ + -118.242657, + 33.939867 + ] + ] + ] + }, + "properties": { + "name": "Watts Towers Cultural Crescent", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 159614022, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.242711, + 33.939101 + ], + [ + -118.24225, + 33.939092 + ], + [ + -118.242227, + 33.939436 + ], + [ + -118.24214, + 33.939362 + ], + [ + -118.242036, + 33.939281 + ], + [ + -118.241876, + 33.939167 + ], + [ + -118.241699, + 33.939057 + ], + [ + -118.241566, + 33.938991 + ], + [ + -118.241438, + 33.938931 + ], + [ + -118.241334, + 33.938912 + ], + [ + -118.241352, + 33.938683 + ], + [ + -118.242529, + 33.93869 + ], + [ + -118.242492, + 33.939037 + ], + [ + -118.242711, + 33.939041 + ], + [ + -118.242711, + 33.939101 + ] + ] + ] + }, + "properties": { + "name": "Watts Towers Arts Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 159761760, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.244126, + 33.960048 + ], + [ + -118.244091, + 33.953371 + ], + [ + -118.243404, + 33.953381 + ], + [ + -118.243447, + 33.960055 + ], + [ + -118.244126, + 33.960048 + ] + ] + ] + }, + "properties": { + "name": "Colonel Leo H Washington Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 174883456, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.308704, + 33.776717 + ], + [ + -118.30857, + 33.776642 + ], + [ + -118.307973, + 33.776753 + ], + [ + -118.308071, + 33.776374 + ], + [ + -118.307749, + 33.776289 + ], + [ + -118.307857, + 33.776169 + ], + [ + -118.307776, + 33.775959 + ], + [ + -118.307616, + 33.775763 + ], + [ + -118.307439, + 33.775678 + ], + [ + -118.307187, + 33.775638 + ], + [ + -118.30701, + 33.775625 + ], + [ + -118.307072, + 33.776252 + ], + [ + -118.307342, + 33.776254 + ], + [ + -118.307318, + 33.776559 + ], + [ + -118.308166, + 33.777576 + ], + [ + -118.308898, + 33.777453 + ], + [ + -118.308704, + 33.776717 + ] + ] + ] + }, + "properties": { + "name": "Baseball Fields", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 179079337, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.350835, + 33.78398 + ], + [ + -118.346766, + 33.781258 + ], + [ + -118.346709, + 33.781219 + ], + [ + -118.342329, + 33.779879 + ], + [ + -118.342142, + 33.780331 + ], + [ + -118.341847, + 33.781447 + ], + [ + -118.341588, + 33.782017 + ], + [ + -118.341066, + 33.782769 + ], + [ + -118.340811, + 33.783187 + ], + [ + -118.340663, + 33.783517 + ], + [ + -118.340631, + 33.783612 + ], + [ + -118.340642, + 33.783682 + ], + [ + -118.340695, + 33.783755 + ], + [ + -118.34078, + 33.783834 + ], + [ + -118.340989, + 33.783846 + ], + [ + -118.341276, + 33.783883 + ], + [ + -118.341445, + 33.783979 + ], + [ + -118.34291, + 33.785196 + ], + [ + -118.343653, + 33.785801 + ], + [ + -118.343855, + 33.786078 + ], + [ + -118.344104, + 33.785881 + ], + [ + -118.344776, + 33.785407 + ], + [ + -118.344976, + 33.785283 + ], + [ + -118.345302, + 33.785121 + ], + [ + -118.345492, + 33.785038 + ], + [ + -118.345669, + 33.784965 + ], + [ + -118.345958, + 33.784877 + ], + [ + -118.346135, + 33.784826 + ], + [ + -118.346354, + 33.784788 + ], + [ + -118.346633, + 33.784751 + ], + [ + -118.347438, + 33.784646 + ], + [ + -118.349516, + 33.78437 + ], + [ + -118.349886, + 33.784314 + ], + [ + -118.350211, + 33.784227 + ], + [ + -118.350437, + 33.784155 + ], + [ + -118.350678, + 33.784051 + ], + [ + -118.350835, + 33.78398 + ] + ] + ] + }, + "properties": { + "name": "South Coast Botanical Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 186584927, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.314745, + 33.841473 + ], + [ + -118.315684, + 33.841468 + ], + [ + -118.315673, + 33.840715 + ], + [ + -118.314764, + 33.840707 + ], + [ + -118.314745, + 33.841473 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 186711206, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.317424, + 33.840101 + ], + [ + -118.317414, + 33.84052 + ], + [ + -118.317638, + 33.840528 + ], + [ + -118.317909, + 33.840615 + ], + [ + -118.318282, + 33.8409 + ], + [ + -118.318424, + 33.840954 + ], + [ + -118.318619, + 33.840948 + ], + [ + -118.31863, + 33.839944 + ], + [ + -118.31856, + 33.839607 + ], + [ + -118.318346, + 33.839264 + ], + [ + -118.316514, + 33.83761 + ], + [ + -118.316384, + 33.837653 + ], + [ + -118.316139, + 33.838107 + ], + [ + -118.316041, + 33.838481 + ], + [ + -118.317146, + 33.83848 + ], + [ + -118.317321, + 33.838568 + ], + [ + -118.317397, + 33.838643 + ], + [ + -118.318026, + 33.839192 + ], + [ + -118.318224, + 33.839401 + ], + [ + -118.318347, + 33.839588 + ], + [ + -118.31844, + 33.839818 + ], + [ + -118.318461, + 33.840103 + ], + [ + -118.317424, + 33.840101 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 186734196, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.33162, + 33.883397 + ], + [ + -118.331329, + 33.882764 + ], + [ + -118.33123, + 33.882717 + ], + [ + -118.330361, + 33.882993 + ], + [ + -118.330687, + 33.883697 + ], + [ + -118.33162, + 33.883397 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 186737918, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.331794, + 33.885031 + ], + [ + -118.331338, + 33.884072 + ], + [ + -118.330565, + 33.884325 + ], + [ + -118.33102, + 33.885281 + ], + [ + -118.331794, + 33.885031 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 190005587, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.35524, + 33.810805 + ], + [ + -118.35515, + 33.810812 + ], + [ + -118.355058, + 33.810807 + ], + [ + -118.354962, + 33.81079 + ], + [ + -118.354881, + 33.810757 + ], + [ + -118.3548, + 33.810716 + ], + [ + -118.354731, + 33.810665 + ], + [ + -118.354669, + 33.810602 + ], + [ + -118.354621, + 33.810539 + ], + [ + -118.354586, + 33.810483 + ], + [ + -118.354563, + 33.810413 + ], + [ + -118.354556, + 33.810325 + ], + [ + -118.35456, + 33.810237 + ], + [ + -118.355065, + 33.81021 + ], + [ + -118.35509, + 33.810183 + ], + [ + -118.355214, + 33.810185 + ], + [ + -118.355309, + 33.810265 + ], + [ + -118.355309, + 33.810363 + ], + [ + -118.355269, + 33.810388 + ], + [ + -118.35524, + 33.810805 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 190005595, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.355286, + 33.809537 + ], + [ + -118.355205, + 33.809536 + ], + [ + -118.355119, + 33.809541 + ], + [ + -118.355037, + 33.809558 + ], + [ + -118.35496, + 33.809585 + ], + [ + -118.354888, + 33.809621 + ], + [ + -118.354822, + 33.809665 + ], + [ + -118.354766, + 33.809717 + ], + [ + -118.354719, + 33.809774 + ], + [ + -118.354686, + 33.809835 + ], + [ + -118.354658, + 33.809904 + ], + [ + -118.354647, + 33.809972 + ], + [ + -118.354645, + 33.810043 + ], + [ + -118.355056, + 33.810064 + ], + [ + -118.355104, + 33.810097 + ], + [ + -118.355206, + 33.810098 + ], + [ + -118.355305, + 33.810022 + ], + [ + -118.355305, + 33.809915 + ], + [ + -118.355273, + 33.809894 + ], + [ + -118.355286, + 33.809537 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 191620910, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.30891, + 33.732858 + ], + [ + -118.309241, + 33.733183 + ], + [ + -118.309685, + 33.733819 + ], + [ + -118.310442, + 33.733479 + ], + [ + -118.31073, + 33.733385 + ], + [ + -118.310965, + 33.733352 + ], + [ + -118.311192, + 33.733339 + ], + [ + -118.311809, + 33.733348 + ], + [ + -118.311809, + 33.731662 + ], + [ + -118.30979, + 33.731647 + ], + [ + -118.309793, + 33.732059 + ], + [ + -118.30964, + 33.732283 + ], + [ + -118.30891, + 33.732858 + ] + ] + ] + }, + "properties": { + "name": "Averill Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192168936, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.388353, + 33.897171 + ], + [ + -118.38779, + 33.897094 + ], + [ + -118.387446, + 33.897212 + ], + [ + -118.386999, + 33.898385 + ], + [ + -118.38657, + 33.898696 + ], + [ + -118.384388, + 33.898693 + ], + [ + -118.3844, + 33.899064 + ], + [ + -118.384643, + 33.899068 + ], + [ + -118.384871, + 33.899214 + ], + [ + -118.384679, + 33.899434 + ], + [ + -118.385828, + 33.900066 + ], + [ + -118.386896, + 33.900414 + ], + [ + -118.387053, + 33.899691 + ], + [ + -118.387236, + 33.899602 + ], + [ + -118.389301, + 33.899617 + ], + [ + -118.389297, + 33.899487 + ], + [ + -118.389476, + 33.899487 + ], + [ + -118.38948, + 33.899572 + ], + [ + -118.389891, + 33.899554 + ], + [ + -118.38986, + 33.899105 + ], + [ + -118.389257, + 33.899097 + ], + [ + -118.388997, + 33.899064 + ], + [ + -118.388523, + 33.898619 + ], + [ + -118.388519, + 33.898463 + ], + [ + -118.388331, + 33.897962 + ], + [ + -118.38834, + 33.897639 + ], + [ + -118.388353, + 33.897171 + ] + ] + ] + }, + "properties": { + "name": "Radisson Plaza Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192179456, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.361476, + 33.821461 + ], + [ + -118.36, + 33.820703 + ], + [ + -118.36001, + 33.820392 + ], + [ + -118.361473, + 33.821188 + ], + [ + -118.361476, + 33.821461 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192179514, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.36764, + 33.821682 + ], + [ + -118.365834, + 33.821673 + ], + [ + -118.365842, + 33.820515 + ], + [ + -118.367649, + 33.820524 + ], + [ + -118.36764, + 33.821682 + ] + ] + ] + }, + "properties": { + "name": "Sea-Aire Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192338679, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.396206, + 33.899918 + ], + [ + -118.396247, + 33.90032 + ], + [ + -118.396281, + 33.90032 + ], + [ + -118.396351, + 33.900173 + ], + [ + -118.39763, + 33.899183 + ], + [ + -118.397719, + 33.899261 + ], + [ + -118.398585, + 33.898332 + ], + [ + -118.399495, + 33.897363 + ], + [ + -118.400379, + 33.896402 + ], + [ + -118.400661, + 33.896098 + ], + [ + -118.40053, + 33.896 + ], + [ + -118.400433, + 33.895914 + ], + [ + -118.399843, + 33.896544 + ], + [ + -118.398958, + 33.897499 + ], + [ + -118.397884, + 33.898583 + ], + [ + -118.397498, + 33.898939 + ], + [ + -118.397322, + 33.899082 + ], + [ + -118.396969, + 33.89936 + ], + [ + -118.396654, + 33.899621 + ], + [ + -118.396427, + 33.899788 + ], + [ + -118.396296, + 33.899868 + ], + [ + -118.396206, + 33.899918 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192528773, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.314762, + 33.841588 + ], + [ + -118.314764, + 33.841819 + ], + [ + -118.314776, + 33.841861 + ], + [ + -118.314805, + 33.841893 + ], + [ + -118.314864, + 33.841912 + ], + [ + -118.314919, + 33.841901 + ], + [ + -118.314977, + 33.841872 + ], + [ + -118.314984, + 33.841839 + ], + [ + -118.314985, + 33.841588 + ], + [ + -118.314965, + 33.841558 + ], + [ + -118.314942, + 33.841534 + ], + [ + -118.314896, + 33.841516 + ], + [ + -118.314853, + 33.841515 + ], + [ + -118.314821, + 33.841519 + ], + [ + -118.314793, + 33.841544 + ], + [ + -118.314776, + 33.841568 + ], + [ + -118.314762, + 33.841588 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 204200174, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.31489, + 33.834178 + ], + [ + -118.31455, + 33.833887 + ], + [ + -118.314552, + 33.83417 + ], + [ + -118.314584, + 33.834198 + ], + [ + -118.314627, + 33.834212 + ], + [ + -118.314825, + 33.834214 + ], + [ + -118.31486, + 33.834201 + ], + [ + -118.31489, + 33.834178 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 205740419, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.315993, + 33.92226 + ], + [ + -118.312805, + 33.923559 + ], + [ + -118.312713, + 33.92344 + ], + [ + -118.311989, + 33.923596 + ], + [ + -118.31172, + 33.92361 + ], + [ + -118.310396, + 33.923598 + ], + [ + -118.309488, + 33.923834 + ], + [ + -118.309245, + 33.92385 + ], + [ + -118.309252, + 33.91678 + ], + [ + -118.309252, + 33.916587 + ], + [ + -118.30933, + 33.916544 + ], + [ + -118.314251, + 33.916583 + ], + [ + -118.314277, + 33.916636 + ], + [ + -118.314431, + 33.917809 + ], + [ + -118.314587, + 33.917804 + ], + [ + -118.314611, + 33.918079 + ], + [ + -118.314611, + 33.918377 + ], + [ + -118.314573, + 33.918475 + ], + [ + -118.314577, + 33.918534 + ], + [ + -118.315328, + 33.918552 + ], + [ + -118.316093, + 33.918118 + ], + [ + -118.316881, + 33.917671 + ], + [ + -118.31767, + 33.917679 + ], + [ + -118.317806, + 33.921458 + ], + [ + -118.315993, + 33.92226 + ] + ] + ] + }, + "properties": { + "name": "Chester Washington Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 208096045, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.31122, + 33.760512 + ], + [ + -118.310523, + 33.762773 + ], + [ + -118.309079, + 33.762573 + ], + [ + -118.309034, + 33.762567 + ], + [ + -118.309035, + 33.762207 + ], + [ + -118.309035, + 33.762169 + ], + [ + -118.309038, + 33.760702 + ], + [ + -118.309038, + 33.760515 + ], + [ + -118.31122, + 33.760512 + ] + ] + ] + }, + "properties": { + "name": "Eastview Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 210807069, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.371107, + 33.808912 + ], + [ + -118.370057, + 33.808651 + ], + [ + -118.369913, + 33.808575 + ], + [ + -118.370009, + 33.808339 + ], + [ + -118.370159, + 33.808299 + ], + [ + -118.370224, + 33.808236 + ], + [ + -118.370324, + 33.808001 + ], + [ + -118.370603, + 33.807614 + ], + [ + -118.370921, + 33.807407 + ], + [ + -118.371098, + 33.807599 + ], + [ + -118.371106, + 33.808761 + ], + [ + -118.371107, + 33.808912 + ] + ] + ] + }, + "properties": { + "name": "Los Arboles Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 219614088, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.365725, + 33.858408 + ], + [ + -118.365725, + 33.858432 + ], + [ + -118.365699, + 33.860079 + ], + [ + -118.365572, + 33.860095 + ], + [ + -118.365433, + 33.860171 + ], + [ + -118.365374, + 33.8603 + ], + [ + -118.36537, + 33.858429 + ], + [ + -118.365369, + 33.858411 + ], + [ + -118.365725, + 33.858408 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 223574926, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.335097, + 33.897505 + ], + [ + -118.333918, + 33.897376 + ], + [ + -118.333939, + 33.897238 + ], + [ + -118.333162, + 33.897158 + ], + [ + -118.333107, + 33.897323 + ], + [ + -118.331584, + 33.897332 + ], + [ + -118.331938, + 33.896993 + ], + [ + -118.332168, + 33.896753 + ], + [ + -118.33248, + 33.896339 + ], + [ + -118.332866, + 33.8958 + ], + [ + -118.333188, + 33.895355 + ], + [ + -118.33373, + 33.895551 + ], + [ + -118.333966, + 33.895555 + ], + [ + -118.333972, + 33.895724 + ], + [ + -118.334068, + 33.89572 + ], + [ + -118.334074, + 33.895938 + ], + [ + -118.334813, + 33.895933 + ], + [ + -118.334824, + 33.896219 + ], + [ + -118.335087, + 33.896219 + ], + [ + -118.335097, + 33.897505 + ] + ] + ] + }, + "properties": { + "name": "Bodger Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 226827049, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.342022, + 33.916531 + ], + [ + -118.342038, + 33.917831 + ], + [ + -118.343726, + 33.917824 + ], + [ + -118.343756, + 33.917824 + ], + [ + -118.343727, + 33.916531 + ], + [ + -118.342022, + 33.916531 + ] + ] + ] + }, + "properties": { + "name": "Hawthorne Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 234383777, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.365632, + 33.881533 + ], + [ + -118.365618, + 33.880168 + ], + [ + -118.366005, + 33.880167 + ], + [ + -118.366011, + 33.881168 + ], + [ + -118.365632, + 33.881533 + ] + ] + ] + }, + "properties": { + "name": "Dale Page Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 238900647, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.331406, + 33.784957 + ], + [ + -118.331367, + 33.784098 + ], + [ + -118.33184, + 33.783631 + ], + [ + -118.333009, + 33.784037 + ], + [ + -118.333006, + 33.785064 + ], + [ + -118.331991, + 33.785064 + ], + [ + -118.331406, + 33.784957 + ] + ] + ] + }, + "properties": { + "name": "Alta Loma Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 240899051, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.255052, + 33.826957 + ], + [ + -118.257134, + 33.826908 + ], + [ + -118.257128, + 33.824424 + ], + [ + -118.257654, + 33.824366 + ], + [ + -118.257655, + 33.827795 + ], + [ + -118.255086, + 33.827793 + ], + [ + -118.255052, + 33.826957 + ] + ] + ] + }, + "properties": { + "name": "Calas Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 247372880, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.293432, + 33.918773 + ], + [ + -118.291941, + 33.918773 + ], + [ + -118.291935, + 33.916988 + ], + [ + -118.292284, + 33.916986 + ], + [ + -118.292284, + 33.916924 + ], + [ + -118.293448, + 33.916912 + ], + [ + -118.293432, + 33.918773 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 247785002, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.253931, + 33.949581 + ], + [ + -118.253564, + 33.949583 + ], + [ + -118.253558, + 33.949308 + ], + [ + -118.253926, + 33.94931 + ], + [ + -118.253931, + 33.949581 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 247958154, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.281647, + 33.821973 + ], + [ + -118.279544, + 33.821964 + ], + [ + -118.27956, + 33.822659 + ], + [ + -118.279549, + 33.822721 + ], + [ + -118.279528, + 33.822759 + ], + [ + -118.279551, + 33.82426 + ], + [ + -118.281636, + 33.824259 + ], + [ + -118.281647, + 33.821973 + ] + ] + ] + }, + "properties": { + "name": "Veterans Park and Sports Complex", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 247958809, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.278629, + 33.834422 + ], + [ + -118.278379, + 33.833583 + ], + [ + -118.275644, + 33.833534 + ], + [ + -118.274597, + 33.833516 + ], + [ + -118.274614, + 33.835283 + ], + [ + -118.275644, + 33.835292 + ], + [ + -118.275623, + 33.83442 + ], + [ + -118.278629, + 33.834422 + ] + ] + ] + }, + "properties": { + "name": "Carson Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 247975850, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.2806, + 33.919975 + ], + [ + -118.280664, + 33.916556 + ], + [ + -118.278476, + 33.916556 + ], + [ + -118.278444, + 33.919948 + ], + [ + -118.2806, + 33.919975 + ] + ] + ] + }, + "properties": { + "name": "Athens Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 247975929, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.286877, + 33.958245 + ], + [ + -118.284795, + 33.958249 + ], + [ + -118.284784, + 33.955134 + ], + [ + -118.286866, + 33.95513 + ], + [ + -118.286877, + 33.958245 + ] + ] + ] + }, + "properties": { + "name": "Algin Sutton Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 248606165, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.255747, + 33.886226 + ], + [ + -118.255237, + 33.884097 + ], + [ + -118.254345, + 33.884128 + ], + [ + -118.254872, + 33.886342 + ], + [ + -118.25514, + 33.886288 + ], + [ + -118.255375, + 33.886248 + ], + [ + -118.255559, + 33.886226 + ], + [ + -118.255747, + 33.886226 + ] + ] + ] + }, + "properties": { + "name": "Burrel McDonald Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 248606174, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.264512, + 33.881154 + ], + [ + -118.264394, + 33.881158 + ], + [ + -118.26433, + 33.88114 + ], + [ + -118.264314, + 33.881114 + ], + [ + -118.264249, + 33.880833 + ], + [ + -118.262763, + 33.880882 + ], + [ + -118.263079, + 33.882306 + ], + [ + -118.261996, + 33.882338 + ], + [ + -118.261776, + 33.882383 + ], + [ + -118.261267, + 33.88008 + ], + [ + -118.26124, + 33.879604 + ], + [ + -118.264677, + 33.879469 + ], + [ + -118.264672, + 33.87983 + ], + [ + -118.264512, + 33.881154 + ] + ] + ] + }, + "properties": { + "name": "Vernon Hemingway Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 248796695, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.248395, + 33.848768 + ], + [ + -118.248374, + 33.848815 + ], + [ + -118.248336, + 33.848837 + ], + [ + -118.248258, + 33.848862 + ], + [ + -118.246337, + 33.848854 + ], + [ + -118.246295, + 33.848846 + ], + [ + -118.246348, + 33.847979 + ], + [ + -118.246723, + 33.847841 + ], + [ + -118.248403, + 33.847875 + ], + [ + -118.248395, + 33.848768 + ] + ] + ] + }, + "properties": { + "name": "Doctor Thomas G Mills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 253640679, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.378341, + 33.890844 + ], + [ + -118.378341, + 33.888971 + ], + [ + -118.377969, + 33.888965 + ], + [ + -118.377965, + 33.889025 + ], + [ + -118.37744, + 33.889026 + ], + [ + -118.377432, + 33.89019 + ], + [ + -118.377333, + 33.890437 + ], + [ + -118.377319, + 33.890839 + ], + [ + -118.378341, + 33.890844 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 253770076, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.400259, + 33.745352 + ], + [ + -118.398585, + 33.745753 + ], + [ + -118.397197, + 33.746193 + ], + [ + -118.396225, + 33.746637 + ], + [ + -118.394465, + 33.747832 + ], + [ + -118.39416, + 33.747933 + ], + [ + -118.393924, + 33.74812 + ], + [ + -118.39394, + 33.748331 + ], + [ + -118.393639, + 33.748465 + ], + [ + -118.393264, + 33.748492 + ], + [ + -118.393028, + 33.748679 + ], + [ + -118.392835, + 33.748706 + ], + [ + -118.392776, + 33.748629 + ], + [ + -118.392749, + 33.748323 + ], + [ + -118.392637, + 33.748191 + ], + [ + -118.392669, + 33.748013 + ], + [ + -118.392819, + 33.747835 + ], + [ + -118.392781, + 33.747627 + ], + [ + -118.391129, + 33.747948 + ], + [ + -118.390367, + 33.747983 + ], + [ + -118.390292, + 33.74826 + ], + [ + -118.390678, + 33.749652 + ], + [ + -118.390867, + 33.749752 + ], + [ + -118.390582, + 33.750892 + ], + [ + -118.390625, + 33.751846 + ], + [ + -118.390668, + 33.752016 + ], + [ + -118.390818, + 33.75231 + ], + [ + -118.390861, + 33.752578 + ], + [ + -118.390743, + 33.753586 + ], + [ + -118.390689, + 33.753898 + ], + [ + -118.390845, + 33.754195 + ], + [ + -118.390796, + 33.75454 + ], + [ + -118.390056, + 33.754736 + ], + [ + -118.389326, + 33.755245 + ], + [ + -118.389337, + 33.755504 + ], + [ + -118.388919, + 33.755762 + ], + [ + -118.387867, + 33.755816 + ], + [ + -118.386414, + 33.756318 + ], + [ + -118.385786, + 33.756895 + ], + [ + -118.385604, + 33.757493 + ], + [ + -118.385539, + 33.757653 + ], + [ + -118.385368, + 33.7576 + ], + [ + -118.385384, + 33.757335 + ], + [ + -118.385373, + 33.7568 + ], + [ + -118.385271, + 33.756422 + ], + [ + -118.384681, + 33.756208 + ], + [ + -118.38379, + 33.756288 + ], + [ + -118.382363, + 33.756619 + ], + [ + -118.381516, + 33.75702 + ], + [ + -118.381215, + 33.757314 + ], + [ + -118.380904, + 33.757707 + ], + [ + -118.38069, + 33.757644 + ], + [ + -118.380486, + 33.757439 + ], + [ + -118.380239, + 33.757163 + ], + [ + -118.380663, + 33.756764 + ], + [ + -118.380975, + 33.75713 + ], + [ + -118.38223, + 33.756309 + ], + [ + -118.382589, + 33.756119 + ], + [ + -118.383211, + 33.755958 + ], + [ + -118.385314, + 33.755655 + ], + [ + -118.385325, + 33.755557 + ], + [ + -118.387524, + 33.75529 + ], + [ + -118.387642, + 33.755254 + ], + [ + -118.387905, + 33.754971 + ], + [ + -118.388157, + 33.754701 + ], + [ + -118.388146, + 33.754451 + ], + [ + -118.385561, + 33.754754 + ], + [ + -118.384981, + 33.754692 + ], + [ + -118.384617, + 33.754567 + ], + [ + -118.384429, + 33.754445 + ], + [ + -118.384182, + 33.754016 + ], + [ + -118.383983, + 33.7538 + ], + [ + -118.383174, + 33.753829 + ], + [ + -118.382713, + 33.754275 + ], + [ + -118.382514, + 33.754281 + ], + [ + -118.382181, + 33.753925 + ], + [ + -118.381827, + 33.753836 + ], + [ + -118.381323, + 33.753943 + ], + [ + -118.381087, + 33.754094 + ], + [ + -118.380803, + 33.754436 + ], + [ + -118.380668, + 33.755388 + ], + [ + -118.380657, + 33.755718 + ], + [ + -118.380185, + 33.756172 + ], + [ + -118.379831, + 33.756422 + ], + [ + -118.379091, + 33.756797 + ], + [ + -118.378565, + 33.757216 + ], + [ + -118.377595, + 33.758494 + ], + [ + -118.377321, + 33.759009 + ], + [ + -118.376941, + 33.759119 + ], + [ + -118.376505, + 33.759116 + ], + [ + -118.376114, + 33.759092 + ], + [ + -118.375894, + 33.759107 + ], + [ + -118.375937, + 33.758804 + ], + [ + -118.377026, + 33.758271 + ], + [ + -118.376962, + 33.75762 + ], + [ + -118.376709, + 33.757475 + ], + [ + -118.375546, + 33.757567 + ], + [ + -118.374585, + 33.757858 + ], + [ + -118.37407, + 33.757671 + ], + [ + -118.373115, + 33.757858 + ], + [ + -118.372128, + 33.758643 + ], + [ + -118.371924, + 33.758144 + ], + [ + -118.370926, + 33.758385 + ], + [ + -118.370755, + 33.758786 + ], + [ + -118.369564, + 33.759161 + ], + [ + -118.369382, + 33.758884 + ], + [ + -118.368952, + 33.758652 + ], + [ + -118.368577, + 33.758358 + ], + [ + -118.369939, + 33.756708 + ], + [ + -118.369141, + 33.756086 + ], + [ + -118.368454, + 33.755997 + ], + [ + -118.36671, + 33.757029 + ], + [ + -118.366495, + 33.757189 + ], + [ + -118.365369, + 33.75628 + ], + [ + -118.364516, + 33.755997 + ], + [ + -118.36347, + 33.755914 + ], + [ + -118.363197, + 33.756256 + ], + [ + -118.362655, + 33.756208 + ], + [ + -118.362601, + 33.755896 + ], + [ + -118.361083, + 33.756015 + ], + [ + -118.361217, + 33.75661 + ], + [ + -118.360123, + 33.756726 + ], + [ + -118.359758, + 33.756485 + ], + [ + -118.359367, + 33.756291 + ], + [ + -118.357848, + 33.756387 + ], + [ + -118.357494, + 33.756779 + ], + [ + -118.357719, + 33.757073 + ], + [ + -118.361469, + 33.758735 + ], + [ + -118.363191, + 33.759178 + ], + [ + -118.364918, + 33.759482 + ], + [ + -118.36642, + 33.759758 + ], + [ + -118.367864, + 33.760162 + ], + [ + -118.367922, + 33.76032 + ], + [ + -118.366463, + 33.760088 + ], + [ + -118.364704, + 33.75991 + ], + [ + -118.363395, + 33.759616 + ], + [ + -118.362537, + 33.759473 + ], + [ + -118.36009, + 33.758527 + ], + [ + -118.359066, + 33.757968 + ], + [ + -118.357843, + 33.757344 + ], + [ + -118.356979, + 33.75677 + ], + [ + -118.35567, + 33.756717 + ], + [ + -118.354431, + 33.757058 + ], + [ + -118.354597, + 33.75677 + ], + [ + -118.355767, + 33.755878 + ], + [ + -118.355938, + 33.755521 + ], + [ + -118.355563, + 33.754852 + ], + [ + -118.354822, + 33.754237 + ], + [ + -118.354142, + 33.754373 + ], + [ + -118.353777, + 33.754034 + ], + [ + -118.354335, + 33.753731 + ], + [ + -118.354979, + 33.753678 + ], + [ + -118.355295, + 33.753488 + ], + [ + -118.355402, + 33.753059 + ], + [ + -118.354715, + 33.751686 + ], + [ + -118.354072, + 33.751391 + ], + [ + -118.353149, + 33.751882 + ], + [ + -118.352054, + 33.752141 + ], + [ + -118.35146, + 33.75258 + ], + [ + -118.351153, + 33.753256 + ], + [ + -118.350569, + 33.753526 + ], + [ + -118.350413, + 33.753586 + ], + [ + -118.350655, + 33.752679 + ], + [ + -118.350998, + 33.752081 + ], + [ + -118.351776, + 33.75148 + ], + [ + -118.352801, + 33.751109 + ], + [ + -118.353627, + 33.750645 + ], + [ + -118.355622, + 33.748905 + ], + [ + -118.355815, + 33.748388 + ], + [ + -118.355376, + 33.747603 + ], + [ + -118.354619, + 33.747377 + ], + [ + -118.354114, + 33.747582 + ], + [ + -118.353771, + 33.747475 + ], + [ + -118.353707, + 33.746984 + ], + [ + -118.353444, + 33.746104 + ], + [ + -118.352956, + 33.746039 + ], + [ + -118.352183, + 33.745976 + ], + [ + -118.350826, + 33.746389 + ], + [ + -118.350381, + 33.746815 + ], + [ + -118.349823, + 33.747207 + ], + [ + -118.349641, + 33.747573 + ], + [ + -118.349973, + 33.748064 + ], + [ + -118.349769, + 33.74859 + ], + [ + -118.35132, + 33.74845 + ], + [ + -118.352178, + 33.748584 + ], + [ + -118.352608, + 33.749048 + ], + [ + -118.352484, + 33.749152 + ], + [ + -118.352264, + 33.749083 + ], + [ + -118.351824, + 33.748905 + ], + [ + -118.351153, + 33.748956 + ], + [ + -118.350864, + 33.749027 + ], + [ + -118.350649, + 33.749027 + ], + [ + -118.34963, + 33.748679 + ], + [ + -118.348799, + 33.74878 + ], + [ + -118.348417, + 33.749215 + ], + [ + -118.348085, + 33.749197 + ], + [ + -118.347613, + 33.74909 + ], + [ + -118.347216, + 33.749232 + ], + [ + -118.347012, + 33.74958 + ], + [ + -118.346969, + 33.749866 + ], + [ + -118.347613, + 33.750142 + ], + [ + -118.348546, + 33.750383 + ], + [ + -118.349351, + 33.749696 + ], + [ + -118.349786, + 33.749663 + ], + [ + -118.349876, + 33.750517 + ], + [ + -118.349748, + 33.751043 + ], + [ + -118.350097, + 33.751929 + ], + [ + -118.349812, + 33.752132 + ], + [ + -118.349437, + 33.752221 + ], + [ + -118.349174, + 33.752286 + ], + [ + -118.34911, + 33.752072 + ], + [ + -118.349453, + 33.75184 + ], + [ + -118.349404, + 33.751605 + ], + [ + -118.349029, + 33.751249 + ], + [ + -118.348718, + 33.751025 + ], + [ + -118.347726, + 33.75217 + ], + [ + -118.346068, + 33.751668 + ], + [ + -118.346433, + 33.750499 + ], + [ + -118.345907, + 33.750187 + ], + [ + -118.346181, + 33.749164 + ], + [ + -118.346599, + 33.748495 + ], + [ + -118.346438, + 33.748272 + ], + [ + -118.346293, + 33.748153 + ], + [ + -118.346331, + 33.748075 + ], + [ + -118.346524, + 33.747968 + ], + [ + -118.346669, + 33.74785 + ], + [ + -118.346975, + 33.747683 + ], + [ + -118.348327, + 33.747192 + ], + [ + -118.34882, + 33.74705 + ], + [ + -118.348627, + 33.746728 + ], + [ + -118.347415, + 33.746996 + ], + [ + -118.34749, + 33.746488 + ], + [ + -118.348037, + 33.74614 + ], + [ + -118.348144, + 33.74589 + ], + [ + -118.348531, + 33.745872 + ], + [ + -118.3486, + 33.746074 + ], + [ + -118.349533, + 33.74636 + ], + [ + -118.349683, + 33.746146 + ], + [ + -118.350853, + 33.745254 + ], + [ + -118.350949, + 33.744942 + ], + [ + -118.35073, + 33.744632 + ], + [ + -118.350316, + 33.744424 + ], + [ + -118.349758, + 33.744237 + ], + [ + -118.348799, + 33.743874 + ], + [ + -118.347452, + 33.743398 + ], + [ + -118.346722, + 33.742979 + ], + [ + -118.346325, + 33.742988 + ], + [ + -118.346009, + 33.743196 + ], + [ + -118.346164, + 33.74363 + ], + [ + -118.346443, + 33.744192 + ], + [ + -118.346368, + 33.744924 + ], + [ + -118.346256, + 33.745105 + ], + [ + -118.345864, + 33.74504 + ], + [ + -118.345473, + 33.745221 + ], + [ + -118.34536, + 33.74545 + ], + [ + -118.345102, + 33.745049 + ], + [ + -118.345033, + 33.744935 + ], + [ + -118.34477, + 33.744879 + ], + [ + -118.344415, + 33.744754 + ], + [ + -118.343911, + 33.744745 + ], + [ + -118.343257, + 33.745129 + ], + [ + -118.343225, + 33.745655 + ], + [ + -118.341916, + 33.745834 + ], + [ + -118.341149, + 33.745417 + ], + [ + -118.341873, + 33.744362 + ], + [ + -118.342533, + 33.743508 + ], + [ + -118.341004, + 33.743344 + ], + [ + -118.340317, + 33.744335 + ], + [ + -118.34021, + 33.74487 + ], + [ + -118.339894, + 33.74514 + ], + [ + -118.338553, + 33.74564 + ], + [ + -118.337528, + 33.745566 + ], + [ + -118.337377, + 33.745245 + ], + [ + -118.337416, + 33.7449 + ], + [ + -118.336347, + 33.744888 + ], + [ + -118.335478, + 33.744228 + ], + [ + -118.335248, + 33.743838 + ], + [ + -118.335049, + 33.743559 + ], + [ + -118.334577, + 33.743318 + ], + [ + -118.334084, + 33.743023 + ], + [ + -118.333526, + 33.742827 + ], + [ + -118.333075, + 33.742782 + ], + [ + -118.332753, + 33.742818 + ], + [ + -118.33218, + 33.743017 + ], + [ + -118.332271, + 33.742782 + ], + [ + -118.332523, + 33.742482 + ], + [ + -118.332925, + 33.74222 + ], + [ + -118.334208, + 33.742553 + ], + [ + -118.335318, + 33.742827 + ], + [ + -118.335253, + 33.743371 + ], + [ + -118.338381, + 33.744007 + ], + [ + -118.338875, + 33.743419 + ], + [ + -118.339046, + 33.742678 + ], + [ + -118.339448, + 33.74148 + ], + [ + -118.34006, + 33.740704 + ], + [ + -118.340581, + 33.740091 + ], + [ + -118.34101, + 33.739984 + ], + [ + -118.341551, + 33.739 + ], + [ + -118.342319, + 33.739422 + ], + [ + -118.342377, + 33.739776 + ], + [ + -118.343509, + 33.740225 + ], + [ + -118.344143, + 33.739404 + ], + [ + -118.344233, + 33.738705 + ], + [ + -118.34477, + 33.738107 + ], + [ + -118.345011, + 33.737753 + ], + [ + -118.347211, + 33.737718 + ], + [ + -118.347619, + 33.738351 + ], + [ + -118.348964, + 33.740454 + ], + [ + -118.349786, + 33.741233 + ], + [ + -118.35081, + 33.74181 + ], + [ + -118.351374, + 33.742098 + ], + [ + -118.352612, + 33.740507 + ], + [ + -118.353015, + 33.739368 + ], + [ + -118.355702, + 33.740079 + ], + [ + -118.356416, + 33.739939 + ], + [ + -118.357028, + 33.739582 + ], + [ + -118.357671, + 33.739261 + ], + [ + -118.357719, + 33.738875 + ], + [ + -118.35706, + 33.738503 + ], + [ + -118.357011, + 33.738054 + ], + [ + -118.357167, + 33.737932 + ], + [ + -118.358369, + 33.739386 + ], + [ + -118.358824, + 33.739812 + ], + [ + -118.359511, + 33.740177 + ], + [ + -118.35986, + 33.740002 + ], + [ + -118.360826, + 33.740332 + ], + [ + -118.361485, + 33.740427 + ], + [ + -118.36229, + 33.740481 + ], + [ + -118.36295, + 33.74051 + ], + [ + -118.363991, + 33.740742 + ], + [ + -118.364946, + 33.740849 + ], + [ + -118.365911, + 33.74068 + ], + [ + -118.368341, + 33.739883 + ], + [ + -118.368824, + 33.739731 + ], + [ + -118.368384, + 33.740588 + ], + [ + -118.367885, + 33.74043 + ], + [ + -118.36781, + 33.740867 + ], + [ + -118.368834, + 33.741239 + ], + [ + -118.369098, + 33.741929 + ], + [ + -118.369028, + 33.742274 + ], + [ + -118.368937, + 33.742027 + ], + [ + -118.368551, + 33.741376 + ], + [ + -118.368201, + 33.741275 + ], + [ + -118.367708, + 33.741623 + ], + [ + -118.367885, + 33.741991 + ], + [ + -118.368534, + 33.742988 + ], + [ + -118.368008, + 33.74313 + ], + [ + -118.367665, + 33.742693 + ], + [ + -118.36721, + 33.742401 + ], + [ + -118.36671, + 33.74189 + ], + [ + -118.366356, + 33.741712 + ], + [ + -118.366238, + 33.741596 + ], + [ + -118.365305, + 33.741096 + ], + [ + -118.365032, + 33.740956 + ], + [ + -118.364564, + 33.740945 + ], + [ + -118.364135, + 33.741587 + ], + [ + -118.36368, + 33.742375 + ], + [ + -118.363888, + 33.743229 + ], + [ + -118.363513, + 33.743532 + ], + [ + -118.363851, + 33.744355 + ], + [ + -118.363921, + 33.745191 + ], + [ + -118.363738, + 33.745843 + ], + [ + -118.363652, + 33.746574 + ], + [ + -118.364167, + 33.747047 + ], + [ + -118.364951, + 33.746404 + ], + [ + -118.365407, + 33.745934 + ], + [ + -118.366152, + 33.746369 + ], + [ + -118.365664, + 33.747629 + ], + [ + -118.368465, + 33.74837 + ], + [ + -118.36818, + 33.749518 + ], + [ + -118.369087, + 33.749797 + ], + [ + -118.369044, + 33.750725 + ], + [ + -118.369322, + 33.751101 + ], + [ + -118.369459, + 33.751217 + ], + [ + -118.371128, + 33.75188 + ], + [ + -118.370943, + 33.75205 + ], + [ + -118.370931, + 33.752554 + ], + [ + -118.371325, + 33.752779 + ], + [ + -118.371809, + 33.752813 + ], + [ + -118.371903, + 33.752986 + ], + [ + -118.372299, + 33.752972 + ], + [ + -118.372035, + 33.754113 + ], + [ + -118.37302, + 33.754143 + ], + [ + -118.373548, + 33.753584 + ], + [ + -118.374081, + 33.752783 + ], + [ + -118.373717, + 33.751356 + ], + [ + -118.373008, + 33.750785 + ], + [ + -118.371941, + 33.75085 + ], + [ + -118.370519, + 33.75066 + ], + [ + -118.369811, + 33.749982 + ], + [ + -118.370154, + 33.749571 + ], + [ + -118.370884, + 33.749536 + ], + [ + -118.371635, + 33.749893 + ], + [ + -118.37303, + 33.75016 + ], + [ + -118.374875, + 33.749928 + ], + [ + -118.375283, + 33.749464 + ], + [ + -118.375111, + 33.749108 + ], + [ + -118.376742, + 33.74884 + ], + [ + -118.376485, + 33.749375 + ], + [ + -118.376855, + 33.749833 + ], + [ + -118.3776, + 33.750178 + ], + [ + -118.378244, + 33.750303 + ], + [ + -118.378781, + 33.750017 + ], + [ + -118.379381, + 33.749001 + ], + [ + -118.379725, + 33.748358 + ], + [ + -118.379017, + 33.747752 + ], + [ + -118.378158, + 33.747377 + ], + [ + -118.37833, + 33.747199 + ], + [ + -118.379167, + 33.74743 + ], + [ + -118.379424, + 33.747091 + ], + [ + -118.378652, + 33.746645 + ], + [ + -118.377709, + 33.746691 + ], + [ + -118.377201, + 33.747093 + ], + [ + -118.376249, + 33.746538 + ], + [ + -118.37554, + 33.746253 + ], + [ + -118.376871, + 33.74479 + ], + [ + -118.377128, + 33.744968 + ], + [ + -118.377321, + 33.745111 + ], + [ + -118.377579, + 33.744879 + ], + [ + -118.377815, + 33.744451 + ], + [ + -118.377772, + 33.74429 + ], + [ + -118.378609, + 33.743327 + ], + [ + -118.38245, + 33.744897 + ], + [ + -118.38275, + 33.745075 + ], + [ + -118.382713, + 33.745372 + ], + [ + -118.382734, + 33.745908 + ], + [ + -118.38275, + 33.746485 + ], + [ + -118.382879, + 33.746699 + ], + [ + -118.383094, + 33.746735 + ], + [ + -118.38348, + 33.746628 + ], + [ + -118.383716, + 33.746449 + ], + [ + -118.384536, + 33.746728 + ], + [ + -118.385218, + 33.747181 + ], + [ + -118.386205, + 33.746788 + ], + [ + -118.38687, + 33.746663 + ], + [ + -118.386634, + 33.74743 + ], + [ + -118.387042, + 33.747537 + ], + [ + -118.387492, + 33.747537 + ], + [ + -118.387879, + 33.747769 + ], + [ + -118.388222, + 33.747841 + ], + [ + -118.388651, + 33.747716 + ], + [ + -118.38893, + 33.747698 + ], + [ + -118.38908, + 33.748198 + ], + [ + -118.389488, + 33.748108 + ], + [ + -118.389037, + 33.746146 + ], + [ + -118.389359, + 33.74611 + ], + [ + -118.389386, + 33.745658 + ], + [ + -118.389375, + 33.745506 + ], + [ + -118.390233, + 33.745354 + ], + [ + -118.391296, + 33.745024 + ], + [ + -118.391515, + 33.745405 + ], + [ + -118.392809, + 33.745524 + ], + [ + -118.392379, + 33.745988 + ], + [ + -118.391633, + 33.746066 + ], + [ + -118.390609, + 33.746273 + ], + [ + -118.390163, + 33.746735 + ], + [ + -118.390185, + 33.747234 + ], + [ + -118.390464, + 33.747707 + ], + [ + -118.393334, + 33.746969 + ], + [ + -118.393592, + 33.745194 + ], + [ + -118.393785, + 33.744989 + ], + [ + -118.394176, + 33.745138 + ], + [ + -118.394455, + 33.745771 + ], + [ + -118.394444, + 33.746128 + ], + [ + -118.39475, + 33.746523 + ], + [ + -118.39637, + 33.745836 + ], + [ + -118.395394, + 33.743651 + ], + [ + -118.396435, + 33.743276 + ], + [ + -118.396933, + 33.74346 + ], + [ + -118.397572, + 33.743329 + ], + [ + -118.397663, + 33.743452 + ], + [ + -118.397502, + 33.743559 + ], + [ + -118.396407, + 33.743755 + ], + [ + -118.396113, + 33.7439 + ], + [ + -118.396236, + 33.74446 + ], + [ + -118.396478, + 33.745881 + ], + [ + -118.397008, + 33.74578 + ], + [ + -118.397491, + 33.745548 + ], + [ + -118.398656, + 33.745462 + ], + [ + -118.399626, + 33.745343 + ], + [ + -118.400222, + 33.745274 + ], + [ + -118.400259, + 33.745352 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 256666655, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.407549, + 33.88564 + ], + [ + -118.407466, + 33.885582 + ], + [ + -118.407219, + 33.885464 + ], + [ + -118.406659, + 33.884857 + ], + [ + -118.406109, + 33.884322 + ], + [ + -118.405444, + 33.883692 + ], + [ + -118.404556, + 33.882837 + ], + [ + -118.404729, + 33.88273 + ], + [ + -118.404813, + 33.882697 + ], + [ + -118.404895, + 33.882732 + ], + [ + -118.406404, + 33.884195 + ], + [ + -118.406774, + 33.884561 + ], + [ + -118.406923, + 33.884758 + ], + [ + -118.407207, + 33.885168 + ], + [ + -118.407525, + 33.885547 + ], + [ + -118.407549, + 33.88564 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 256666658, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.40233, + 33.879666 + ], + [ + -118.402416, + 33.879392 + ], + [ + -118.402432, + 33.87933 + ], + [ + -118.40226, + 33.878733 + ], + [ + -118.402155, + 33.878259 + ], + [ + -118.402072, + 33.877742 + ], + [ + -118.401978, + 33.877297 + ], + [ + -118.401917, + 33.876934 + ], + [ + -118.401817, + 33.876393 + ], + [ + -118.401758, + 33.876351 + ], + [ + -118.401529, + 33.876459 + ], + [ + -118.401514, + 33.876493 + ], + [ + -118.401549, + 33.876611 + ], + [ + -118.401707, + 33.877606 + ], + [ + -118.401868, + 33.878406 + ], + [ + -118.402007, + 33.878996 + ], + [ + -118.402173, + 33.879497 + ], + [ + -118.402247, + 33.879671 + ], + [ + -118.402271, + 33.879689 + ], + [ + -118.402294, + 33.879697 + ], + [ + -118.402322, + 33.879693 + ], + [ + -118.40233, + 33.879666 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 256666659, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.402602, + 33.879719 + ], + [ + -118.40259, + 33.879704 + ], + [ + -118.40257, + 33.879693 + ], + [ + -118.402547, + 33.879691 + ], + [ + -118.402525, + 33.879695 + ], + [ + -118.402507, + 33.879707 + ], + [ + -118.402496, + 33.879724 + ], + [ + -118.402402, + 33.880063 + ], + [ + -118.402755, + 33.880712 + ], + [ + -118.403024, + 33.881147 + ], + [ + -118.403294, + 33.881507 + ], + [ + -118.403645, + 33.881917 + ], + [ + -118.404018, + 33.882309 + ], + [ + -118.404448, + 33.882723 + ], + [ + -118.404497, + 33.882739 + ], + [ + -118.404583, + 33.882706 + ], + [ + -118.404685, + 33.882657 + ], + [ + -118.404717, + 33.882617 + ], + [ + -118.40472, + 33.882579 + ], + [ + -118.404505, + 33.882374 + ], + [ + -118.403805, + 33.881653 + ], + [ + -118.403354, + 33.881065 + ], + [ + -118.403024, + 33.880559 + ], + [ + -118.402907, + 33.880366 + ], + [ + -118.402819, + 33.880183 + ], + [ + -118.402711, + 33.879958 + ], + [ + -118.402602, + 33.879719 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 256666661, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.394063, + 33.85576 + ], + [ + -118.394231, + 33.856043 + ], + [ + -118.394306, + 33.856119 + ], + [ + -118.394322, + 33.856306 + ], + [ + -118.394195, + 33.856393 + ], + [ + -118.394289, + 33.856609 + ], + [ + -118.394302, + 33.856834 + ], + [ + -118.394235, + 33.85711 + ], + [ + -118.394101, + 33.857139 + ], + [ + -118.394145, + 33.857299 + ], + [ + -118.393991, + 33.857714 + ], + [ + -118.393814, + 33.857758 + ], + [ + -118.393891, + 33.85815 + ], + [ + -118.393881, + 33.858371 + ], + [ + -118.393824, + 33.858632 + ], + [ + -118.393751, + 33.858994 + ], + [ + -118.393737, + 33.859308 + ], + [ + -118.393755, + 33.859618 + ], + [ + -118.39383, + 33.860039 + ], + [ + -118.393878, + 33.860166 + ], + [ + -118.393923, + 33.860181 + ], + [ + -118.393979, + 33.860177 + ], + [ + -118.394149, + 33.860117 + ], + [ + -118.394156, + 33.86007 + ], + [ + -118.39418, + 33.860068 + ], + [ + -118.394114, + 33.859803 + ], + [ + -118.394085, + 33.859525 + ], + [ + -118.394082, + 33.85907 + ], + [ + -118.394117, + 33.85877 + ], + [ + -118.394178, + 33.858516 + ], + [ + -118.394275, + 33.858179 + ], + [ + -118.394453, + 33.857662 + ], + [ + -118.394597, + 33.857117 + ], + [ + -118.394634, + 33.856859 + ], + [ + -118.394653, + 33.856689 + ], + [ + -118.394648, + 33.856467 + ], + [ + -118.394637, + 33.85617 + ], + [ + -118.394567, + 33.855711 + ], + [ + -118.394551, + 33.855642 + ], + [ + -118.394465, + 33.855631 + ], + [ + -118.394063, + 33.85576 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 256666663, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.394211, + 33.860231 + ], + [ + -118.394267, + 33.860411 + ], + [ + -118.394295, + 33.860506 + ], + [ + -118.394427, + 33.860961 + ], + [ + -118.394507, + 33.861288 + ], + [ + -118.394734, + 33.862149 + ], + [ + -118.394819, + 33.862442 + ], + [ + -118.395148, + 33.863571 + ], + [ + -118.395363, + 33.864458 + ], + [ + -118.395084, + 33.864502 + ], + [ + -118.395056, + 33.864485 + ], + [ + -118.394739, + 33.863244 + ], + [ + -118.394449, + 33.86226 + ], + [ + -118.394347, + 33.861888 + ], + [ + -118.39394, + 33.860347 + ], + [ + -118.393956, + 33.860315 + ], + [ + -118.393998, + 33.860286 + ], + [ + -118.394211, + 33.860231 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 256666667, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.395434, + 33.864719 + ], + [ + -118.395152, + 33.864768 + ], + [ + -118.395144, + 33.864803 + ], + [ + -118.39518, + 33.864965 + ], + [ + -118.395774, + 33.867035 + ], + [ + -118.396002, + 33.867672 + ], + [ + -118.39633, + 33.86848 + ], + [ + -118.396599, + 33.868999 + ], + [ + -118.396996, + 33.869847 + ], + [ + -118.397435, + 33.870774 + ], + [ + -118.39774, + 33.871487 + ], + [ + -118.397967, + 33.871885 + ], + [ + -118.398288, + 33.872418 + ], + [ + -118.398595, + 33.872807 + ], + [ + -118.398982, + 33.873275 + ], + [ + -118.399424, + 33.873727 + ], + [ + -118.399813, + 33.874072 + ], + [ + -118.400205, + 33.874373 + ], + [ + -118.400264, + 33.87442 + ], + [ + -118.400391, + 33.874435 + ], + [ + -118.400549, + 33.874444 + ], + [ + -118.400594, + 33.874402 + ], + [ + -118.400551, + 33.874322 + ], + [ + -118.400382, + 33.874199 + ], + [ + -118.399945, + 33.873847 + ], + [ + -118.399648, + 33.873556 + ], + [ + -118.399387, + 33.873324 + ], + [ + -118.399083, + 33.872967 + ], + [ + -118.398652, + 33.872436 + ], + [ + -118.398416, + 33.872079 + ], + [ + -118.398137, + 33.871627 + ], + [ + -118.397939, + 33.871204 + ], + [ + -118.397695, + 33.870685 + ], + [ + -118.397244, + 33.869721 + ], + [ + -118.396893, + 33.868959 + ], + [ + -118.396652, + 33.868431 + ], + [ + -118.396351, + 33.867736 + ], + [ + -118.396142, + 33.867189 + ], + [ + -118.395914, + 33.866525 + ], + [ + -118.395689, + 33.865692 + ], + [ + -118.395434, + 33.864719 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 256671995, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.390549, + 33.83891 + ], + [ + -118.391073, + 33.838781 + ], + [ + -118.391165, + 33.838758 + ], + [ + -118.391133, + 33.838662 + ], + [ + -118.390821, + 33.837805 + ], + [ + -118.390647, + 33.836939 + ], + [ + -118.390595, + 33.836522 + ], + [ + -118.390526, + 33.835117 + ], + [ + -118.39056, + 33.834728 + ], + [ + -118.390682, + 33.833868 + ], + [ + -118.390734, + 33.83323 + ], + [ + -118.390838, + 33.832541 + ], + [ + -118.390821, + 33.832117 + ], + [ + -118.391043, + 33.83195 + ], + [ + -118.391083, + 33.831919 + ], + [ + -118.391443, + 33.831852 + ], + [ + -118.391523, + 33.831814 + ], + [ + -118.391453, + 33.831761 + ], + [ + -118.391434, + 33.831711 + ], + [ + -118.391267, + 33.831282 + ], + [ + -118.3912, + 33.830673 + ], + [ + -118.391271, + 33.82941 + ], + [ + -118.391183, + 33.827686 + ], + [ + -118.39097, + 33.826169 + ], + [ + -118.390927, + 33.825706 + ], + [ + -118.390949, + 33.824954 + ], + [ + -118.390859, + 33.823968 + ], + [ + -118.390843, + 33.823666 + ], + [ + -118.390846, + 33.82336 + ], + [ + -118.390868, + 33.823095 + ], + [ + -118.390821, + 33.82291 + ], + [ + -118.390851, + 33.822696 + ], + [ + -118.390879, + 33.822234 + ], + [ + -118.390861, + 33.821561 + ], + [ + -118.390866, + 33.821087 + ], + [ + -118.390921, + 33.820394 + ], + [ + -118.390978, + 33.819912 + ], + [ + -118.39102, + 33.819586 + ], + [ + -118.391044, + 33.819191 + ], + [ + -118.391099, + 33.81847 + ], + [ + -118.391121, + 33.817811 + ], + [ + -118.391146, + 33.817459 + ], + [ + -118.391247, + 33.816965 + ], + [ + -118.39132, + 33.816565 + ], + [ + -118.391393, + 33.8161 + ], + [ + -118.391461, + 33.815813 + ], + [ + -118.391556, + 33.815463 + ], + [ + -118.390925, + 33.815457 + ], + [ + -118.390836, + 33.81568 + ], + [ + -118.390791, + 33.815833 + ], + [ + -118.390783, + 33.815947 + ], + [ + -118.390795, + 33.816134 + ], + [ + -118.390777, + 33.816335 + ], + [ + -118.390667, + 33.816607 + ], + [ + -118.390464, + 33.817848 + ], + [ + -118.390297, + 33.818844 + ], + [ + -118.390281, + 33.819091 + ], + [ + -118.390184, + 33.81966 + ], + [ + -118.390126, + 33.820081 + ], + [ + -118.390112, + 33.820437 + ], + [ + -118.390136, + 33.820792 + ], + [ + -118.390185, + 33.821752 + ], + [ + -118.390222, + 33.822327 + ], + [ + -118.390281, + 33.822884 + ], + [ + -118.390327, + 33.823388 + ], + [ + -118.390334, + 33.823998 + ], + [ + -118.390348, + 33.824455 + ], + [ + -118.390381, + 33.824462 + ], + [ + -118.390452, + 33.824671 + ], + [ + -118.390461, + 33.825179 + ], + [ + -118.39049, + 33.826041 + ], + [ + -118.390549, + 33.826777 + ], + [ + -118.390533, + 33.827167 + ], + [ + -118.390484, + 33.827862 + ], + [ + -118.390415, + 33.82796 + ], + [ + -118.39064, + 33.827976 + ], + [ + -118.390654, + 33.828572 + ], + [ + -118.390539, + 33.828575 + ], + [ + -118.390477, + 33.828751 + ], + [ + -118.390437, + 33.82886 + ], + [ + -118.39045, + 33.829078 + ], + [ + -118.390426, + 33.829297 + ], + [ + -118.39039, + 33.829486 + ], + [ + -118.390417, + 33.829756 + ], + [ + -118.390394, + 33.830286 + ], + [ + -118.390402, + 33.830865 + ], + [ + -118.390423, + 33.830995 + ], + [ + -118.390488, + 33.831106 + ], + [ + -118.390466, + 33.831284 + ], + [ + -118.390423, + 33.831371 + ], + [ + -118.390463, + 33.832628 + ], + [ + -118.39045, + 33.833051 + ], + [ + -118.390453, + 33.833441 + ], + [ + -118.390495, + 33.833483 + ], + [ + -118.390488, + 33.833644 + ], + [ + -118.390437, + 33.83365 + ], + [ + -118.390407, + 33.833877 + ], + [ + -118.390385, + 33.834011 + ], + [ + -118.390291, + 33.834482 + ], + [ + -118.390254, + 33.834702 + ], + [ + -118.390254, + 33.835241 + ], + [ + -118.390262, + 33.835707 + ], + [ + -118.390268, + 33.835865 + ], + [ + -118.390297, + 33.836883 + ], + [ + -118.390326, + 33.837536 + ], + [ + -118.390361, + 33.837886 + ], + [ + -118.390429, + 33.838407 + ], + [ + -118.390509, + 33.838625 + ], + [ + -118.390552, + 33.838648 + ], + [ + -118.390588, + 33.838661 + ], + [ + -118.390595, + 33.838695 + ], + [ + -118.390555, + 33.838759 + ], + [ + -118.390523, + 33.838823 + ], + [ + -118.390549, + 33.83891 + ] + ] + ] + }, + "properties": { + "name": "Redondo Beach State Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 259293968, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.354253, + 33.805487 + ], + [ + -118.354249, + 33.805215 + ], + [ + -118.354011, + 33.805217 + ], + [ + -118.353869, + 33.80534 + ], + [ + -118.353928, + 33.805476 + ], + [ + -118.354022, + 33.805512 + ], + [ + -118.354177, + 33.805527 + ], + [ + -118.354253, + 33.805487 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 259293969, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.35432, + 33.804914 + ], + [ + -118.354328, + 33.804829 + ], + [ + -118.354255, + 33.804796 + ], + [ + -118.354175, + 33.804776 + ], + [ + -118.354153, + 33.804705 + ], + [ + -118.354081, + 33.804678 + ], + [ + -118.354033, + 33.804711 + ], + [ + -118.354006, + 33.804749 + ], + [ + -118.353923, + 33.804794 + ], + [ + -118.353874, + 33.804865 + ], + [ + -118.353933, + 33.804923 + ], + [ + -118.354099, + 33.804915 + ], + [ + -118.354193, + 33.804918 + ], + [ + -118.35432, + 33.804914 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 259300234, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.356098, + 33.809601 + ], + [ + -118.355515, + 33.809567 + ], + [ + -118.355393, + 33.81102 + ], + [ + -118.355501, + 33.811026 + ], + [ + -118.355496, + 33.811091 + ], + [ + -118.355857, + 33.811112 + ], + [ + -118.355862, + 33.811057 + ], + [ + -118.355975, + 33.811063 + ], + [ + -118.356098, + 33.809601 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 259659300, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.323902, + 33.826993 + ], + [ + -118.323868, + 33.82702 + ], + [ + -118.323734, + 33.827017 + ], + [ + -118.323708, + 33.826984 + ], + [ + -118.323661, + 33.827018 + ], + [ + -118.32354, + 33.827014 + ], + [ + -118.323506, + 33.826983 + ], + [ + -118.323466, + 33.827014 + ], + [ + -118.323343, + 33.827014 + ], + [ + -118.323311, + 33.826986 + ], + [ + -118.323309, + 33.826876 + ], + [ + -118.323272, + 33.826906 + ], + [ + -118.323208, + 33.826909 + ], + [ + -118.323185, + 33.826885 + ], + [ + -118.323145, + 33.826911 + ], + [ + -118.323081, + 33.826907 + ], + [ + -118.323049, + 33.826884 + ], + [ + -118.323039, + 33.826723 + ], + [ + -118.323067, + 33.826694 + ], + [ + -118.323127, + 33.826692 + ], + [ + -118.323169, + 33.826721 + ], + [ + -118.32321, + 33.826699 + ], + [ + -118.323257, + 33.826688 + ], + [ + -118.323295, + 33.826715 + ], + [ + -118.323332, + 33.826698 + ], + [ + -118.323454, + 33.826691 + ], + [ + -118.323498, + 33.826724 + ], + [ + -118.323532, + 33.826692 + ], + [ + -118.323658, + 33.826683 + ], + [ + -118.323708, + 33.826715 + ], + [ + -118.323733, + 33.826688 + ], + [ + -118.323871, + 33.82668 + ], + [ + -118.3239, + 33.826721 + ], + [ + -118.323902, + 33.826993 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 259659301, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.324775, + 33.827112 + ], + [ + -118.32477, + 33.826776 + ], + [ + -118.324104, + 33.82678 + ], + [ + -118.32411, + 33.827122 + ], + [ + -118.324775, + 33.827112 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 259659302, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.32685, + 33.826462 + ], + [ + -118.326517, + 33.826455 + ], + [ + -118.326471, + 33.826438 + ], + [ + -118.32645, + 33.826406 + ], + [ + -118.326447, + 33.82636 + ], + [ + -118.326436, + 33.826092 + ], + [ + -118.326512, + 33.826057 + ], + [ + -118.326595, + 33.826034 + ], + [ + -118.326721, + 33.826063 + ], + [ + -118.326817, + 33.826115 + ], + [ + -118.326911, + 33.826195 + ], + [ + -118.326941, + 33.826313 + ], + [ + -118.326949, + 33.826389 + ], + [ + -118.326925, + 33.826453 + ], + [ + -118.32685, + 33.826462 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 259659303, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.328022, + 33.825613 + ], + [ + -118.327971, + 33.825647 + ], + [ + -118.327904, + 33.825664 + ], + [ + -118.327802, + 33.82568 + ], + [ + -118.327743, + 33.82568 + ], + [ + -118.327665, + 33.825658 + ], + [ + -118.327579, + 33.825593 + ], + [ + -118.327517, + 33.825526 + ], + [ + -118.327496, + 33.825446 + ], + [ + -118.327496, + 33.825386 + ], + [ + -118.327496, + 33.82531 + ], + [ + -118.327515, + 33.825252 + ], + [ + -118.327525, + 33.825232 + ], + [ + -118.327861, + 33.825232 + ], + [ + -118.32792, + 33.825223 + ], + [ + -118.327941, + 33.825223 + ], + [ + -118.327984, + 33.825223 + ], + [ + -118.328003, + 33.825243 + ], + [ + -118.32803, + 33.825286 + ], + [ + -118.328032, + 33.82533 + ], + [ + -118.328022, + 33.825613 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 265730065, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.401049, + 33.920937 + ], + [ + -118.401047, + 33.921311 + ], + [ + -118.40058, + 33.921309 + ], + [ + -118.400582, + 33.920935 + ], + [ + -118.401049, + 33.920937 + ] + ] + ] + }, + "properties": { + "name": "Kansas Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 265730066, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.401998, + 33.927966 + ], + [ + -118.401306, + 33.927972 + ], + [ + -118.4013, + 33.927526 + ], + [ + -118.401992, + 33.92752 + ], + [ + -118.401998, + 33.927966 + ] + ] + ] + }, + "properties": { + "name": "Sycamore Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 265730082, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.400865, + 33.921165 + ], + [ + -118.400645, + 33.921167 + ], + [ + -118.400642, + 33.920984 + ], + [ + -118.400862, + 33.920981 + ], + [ + -118.400865, + 33.921165 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 271414098, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.379585, + 33.895488 + ], + [ + -118.379569, + 33.895114 + ], + [ + -118.379633, + 33.895052 + ], + [ + -118.379638, + 33.89479 + ], + [ + -118.382412, + 33.894803 + ], + [ + -118.382435, + 33.895482 + ], + [ + -118.379585, + 33.895488 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 277512883, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.368576, + 33.869927 + ], + [ + -118.368617, + 33.869927 + ], + [ + -118.369038, + 33.869926 + ], + [ + -118.370496, + 33.869921 + ], + [ + -118.370492, + 33.869123 + ], + [ + -118.368573, + 33.869129 + ], + [ + -118.368573, + 33.869196 + ], + [ + -118.368576, + 33.869927 + ] + ] + ] + }, + "properties": { + "name": "Perry Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 278779766, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.379399, + 33.815779 + ], + [ + -118.379896, + 33.815566 + ], + [ + -118.379729, + 33.815278 + ], + [ + -118.379649, + 33.815194 + ], + [ + -118.379334, + 33.815456 + ], + [ + -118.379035, + 33.815165 + ], + [ + -118.37867, + 33.814958 + ], + [ + -118.378402, + 33.814859 + ], + [ + -118.377932, + 33.814739 + ], + [ + -118.377549, + 33.814688 + ], + [ + -118.377205, + 33.814719 + ], + [ + -118.37683, + 33.814777 + ], + [ + -118.376782, + 33.814924 + ], + [ + -118.376805, + 33.815106 + ], + [ + -118.376891, + 33.815178 + ], + [ + -118.377125, + 33.815457 + ], + [ + -118.379399, + 33.815779 + ] + ] + ] + }, + "properties": { + "name": "El Retiro Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 285844232, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.390182, + 33.838476 + ], + [ + -118.390174, + 33.83838 + ], + [ + -118.390154, + 33.838288 + ], + [ + -118.390094, + 33.838098 + ], + [ + -118.389988, + 33.837468 + ], + [ + -118.389922, + 33.837043 + ], + [ + -118.38989, + 33.83683 + ], + [ + -118.389837, + 33.836672 + ], + [ + -118.389766, + 33.836557 + ], + [ + -118.389705, + 33.836494 + ], + [ + -118.389621, + 33.836458 + ], + [ + -118.389246, + 33.836663 + ], + [ + -118.388814, + 33.836681 + ], + [ + -118.388638, + 33.836898 + ], + [ + -118.388666, + 33.837522 + ], + [ + -118.38817, + 33.837869 + ], + [ + -118.388184, + 33.838092 + ], + [ + -118.388524, + 33.838116 + ], + [ + -118.388822, + 33.83818 + ], + [ + -118.389027, + 33.838274 + ], + [ + -118.389154, + 33.838374 + ], + [ + -118.389303, + 33.838404 + ], + [ + -118.389491, + 33.838419 + ], + [ + -118.389572, + 33.8384 + ], + [ + -118.389787, + 33.838375 + ], + [ + -118.389961, + 33.838398 + ], + [ + -118.390073, + 33.838431 + ], + [ + -118.390173, + 33.838477 + ], + [ + -118.390182, + 33.838476 + ] + ] + ] + }, + "properties": { + "name": "Veteran's Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 291408445, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.395772, + 33.853296 + ], + [ + -118.395728, + 33.853139 + ], + [ + -118.395855, + 33.853108 + ], + [ + -118.395908, + 33.85327 + ], + [ + -118.395772, + 33.853296 + ] + ] + ] + }, + "properties": { + "name": "Kay Etow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 295736559, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.387328, + 33.924736 + ], + [ + -118.385735, + 33.924736 + ], + [ + -118.385504, + 33.924778 + ], + [ + -118.385418, + 33.924727 + ], + [ + -118.385416, + 33.923744 + ], + [ + -118.387266, + 33.923736 + ], + [ + -118.387328, + 33.924736 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305739120, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.394445, + 33.909866 + ], + [ + -118.391937, + 33.910845 + ], + [ + -118.391715, + 33.910963 + ], + [ + -118.391866, + 33.911164 + ], + [ + -118.393291, + 33.912433 + ], + [ + -118.393541, + 33.912779 + ], + [ + -118.393863, + 33.913385 + ], + [ + -118.394105, + 33.913814 + ], + [ + -118.39482, + 33.914067 + ], + [ + -118.395288, + 33.914239 + ], + [ + -118.39553, + 33.91442 + ], + [ + -118.395757, + 33.914426 + ], + [ + -118.395705, + 33.909741 + ], + [ + -118.395403, + 33.909734 + ], + [ + -118.395058, + 33.909603 + ], + [ + -118.394581, + 33.909606 + ], + [ + -118.394445, + 33.909866 + ] + ] + ] + }, + "properties": { + "name": "The Lakes at El Segundo", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305741943, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.289994, + 33.783352 + ], + [ + -118.290524, + 33.783483 + ], + [ + -118.290858, + 33.783674 + ], + [ + -118.291175, + 33.784222 + ], + [ + -118.291643, + 33.784317 + ], + [ + -118.291855, + 33.784908 + ], + [ + -118.292082, + 33.785024 + ], + [ + -118.292749, + 33.785012 + ], + [ + -118.292887, + 33.785309 + ], + [ + -118.292856, + 33.785711 + ], + [ + -118.292053, + 33.787089 + ], + [ + -118.290632, + 33.788125 + ], + [ + -118.289643, + 33.788553 + ], + [ + -118.288088, + 33.788844 + ], + [ + -118.286029, + 33.788716 + ], + [ + -118.284741, + 33.788681 + ], + [ + -118.28367, + 33.788733 + ], + [ + -118.282558, + 33.788493 + ], + [ + -118.28229, + 33.788339 + ], + [ + -118.282373, + 33.787971 + ], + [ + -118.282692, + 33.787954 + ], + [ + -118.282702, + 33.787637 + ], + [ + -118.283825, + 33.787509 + ], + [ + -118.285514, + 33.787483 + ], + [ + -118.286142, + 33.787029 + ], + [ + -118.286636, + 33.786465 + ], + [ + -118.286719, + 33.786216 + ], + [ + -118.286811, + 33.786037 + ], + [ + -118.286877, + 33.785104 + ], + [ + -118.286935, + 33.784903 + ], + [ + -118.28711, + 33.783982 + ], + [ + -118.28714, + 33.783795 + ], + [ + -118.287137, + 33.783576 + ], + [ + -118.289623, + 33.783251 + ], + [ + -118.289994, + 33.783352 + ] + ] + ] + }, + "properties": { + "name": "Harbor Park Municipal Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 306773257, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.343724, + 33.905493 + ], + [ + -118.343729, + 33.903743 + ], + [ + -118.342846, + 33.903731 + ], + [ + -118.342844, + 33.903565 + ], + [ + -118.342792, + 33.903566 + ], + [ + -118.34279, + 33.903392 + ], + [ + -118.34176, + 33.903392 + ], + [ + -118.341744, + 33.905137 + ], + [ + -118.342718, + 33.905137 + ], + [ + -118.342739, + 33.905137 + ], + [ + -118.342774, + 33.905137 + ], + [ + -118.342776, + 33.905493 + ], + [ + -118.343187, + 33.905493 + ], + [ + -118.343678, + 33.905493 + ], + [ + -118.343724, + 33.905493 + ] + ] + ] + }, + "properties": { + "name": "Jim Thorpe Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 306965807, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.371143, + 33.88339 + ], + [ + -118.371052, + 33.883446 + ], + [ + -118.370917, + 33.883434 + ], + [ + -118.370893, + 33.883365 + ], + [ + -118.370878, + 33.883323 + ], + [ + -118.370923, + 33.883204 + ], + [ + -118.370942, + 33.883152 + ], + [ + -118.371116, + 33.88306 + ], + [ + -118.371187, + 33.883102 + ], + [ + -118.3713, + 33.883279 + ], + [ + -118.371143, + 33.88339 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 306965810, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.3727, + 33.881812 + ], + [ + -118.372728, + 33.88369 + ], + [ + -118.369982, + 33.883691 + ], + [ + -118.370008, + 33.882318 + ], + [ + -118.370952, + 33.88231 + ], + [ + -118.370947, + 33.881821 + ], + [ + -118.3727, + 33.881812 + ] + ] + ] + }, + "properties": { + "name": "Glen M. Anderson Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 307218411, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.377898, + 33.895304 + ], + [ + -118.377895, + 33.895163 + ], + [ + -118.377819, + 33.895142 + ], + [ + -118.377783, + 33.895117 + ], + [ + -118.377755, + 33.895081 + ], + [ + -118.377738, + 33.895042 + ], + [ + -118.377732, + 33.895004 + ], + [ + -118.377742, + 33.894967 + ], + [ + -118.377765, + 33.894934 + ], + [ + -118.377805, + 33.894893 + ], + [ + -118.377846, + 33.894869 + ], + [ + -118.378512, + 33.894858 + ], + [ + -118.378513, + 33.89483 + ], + [ + -118.378503, + 33.894801 + ], + [ + -118.378493, + 33.894782 + ], + [ + -118.378466, + 33.894753 + ], + [ + -118.378427, + 33.894734 + ], + [ + -118.378355, + 33.894722 + ], + [ + -118.377442, + 33.894726 + ], + [ + -118.377442, + 33.895304 + ], + [ + -118.377898, + 33.895304 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 308486723, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.386319, + 33.890885 + ], + [ + -118.386311, + 33.890405 + ], + [ + -118.386577, + 33.890341 + ], + [ + -118.386867, + 33.890392 + ], + [ + -118.387047, + 33.890579 + ], + [ + -118.387043, + 33.890966 + ], + [ + -118.386421, + 33.890974 + ], + [ + -118.386319, + 33.890885 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 308486725, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.387053, + 33.889878 + ], + [ + -118.387056, + 33.890306 + ], + [ + -118.38681, + 33.89031 + ], + [ + -118.386582, + 33.890259 + ], + [ + -118.386465, + 33.890182 + ], + [ + -118.386348, + 33.890069 + ], + [ + -118.386301, + 33.889948 + ], + [ + -118.386314, + 33.889774 + ], + [ + -118.386976, + 33.88978 + ], + [ + -118.38703, + 33.889812 + ], + [ + -118.387053, + 33.889878 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 308486742, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.345832, + 33.879331 + ], + [ + -118.345934, + 33.879331 + ], + [ + -118.34602, + 33.879331 + ], + [ + -118.346043, + 33.879291 + ], + [ + -118.346028, + 33.87924 + ], + [ + -118.345827, + 33.878979 + ], + [ + -118.345729, + 33.878905 + ], + [ + -118.3457, + 33.878907 + ], + [ + -118.345704, + 33.879331 + ], + [ + -118.34582, + 33.879331 + ], + [ + -118.345832, + 33.879331 + ] + ] + ] + }, + "properties": { + "name": "Frank Hogan Tot Lot", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 308486746, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.357591, + 33.893497 + ], + [ + -118.357568, + 33.894537 + ], + [ + -118.355919, + 33.894528 + ], + [ + -118.355925, + 33.893481 + ], + [ + -118.357591, + 33.893497 + ] + ] + ] + }, + "properties": { + "name": "Jane Addams Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 315707096, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.261531, + 33.864857 + ], + [ + -118.260619, + 33.864859 + ], + [ + -118.260616, + 33.863779 + ], + [ + -118.261528, + 33.863778 + ], + [ + -118.261531, + 33.864857 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 326189320, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.301355, + 33.797948 + ], + [ + -118.299312, + 33.797913 + ], + [ + -118.299231, + 33.797975 + ], + [ + -118.299257, + 33.800015 + ], + [ + -118.30135, + 33.800003 + ], + [ + -118.301355, + 33.797948 + ] + ] + ] + }, + "properties": { + "name": "Harbor City Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 388761468, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.36119, + 33.923238 + ], + [ + -118.361186, + 33.922255 + ], + [ + -118.361184, + 33.921777 + ], + [ + -118.361183, + 33.921548 + ], + [ + -118.361097, + 33.921548 + ], + [ + -118.360754, + 33.921549 + ], + [ + -118.36029, + 33.92155 + ], + [ + -118.360213, + 33.92155 + ], + [ + -118.360215, + 33.921677 + ], + [ + -118.359614, + 33.921868 + ], + [ + -118.360174, + 33.921867 + ], + [ + -118.360179, + 33.922984 + ], + [ + -118.360178, + 33.923097 + ], + [ + -118.360204, + 33.923104 + ], + [ + -118.360204, + 33.923238 + ], + [ + -118.36119, + 33.923238 + ] + ] + ] + }, + "properties": { + "name": "Eucalyptus Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 397327063, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.39029, + 33.814487 + ], + [ + -118.390501, + 33.814559 + ], + [ + -118.390621, + 33.814576 + ], + [ + -118.390718, + 33.814578 + ], + [ + -118.390744, + 33.814596 + ], + [ + -118.390783, + 33.814557 + ], + [ + -118.390857, + 33.814337 + ], + [ + -118.391185, + 33.814384 + ], + [ + -118.391156, + 33.81455 + ], + [ + -118.391099, + 33.814724 + ], + [ + -118.391013, + 33.814893 + ], + [ + -118.390949, + 33.815209 + ], + [ + -118.390952, + 33.815361 + ], + [ + -118.390925, + 33.815457 + ], + [ + -118.390836, + 33.81568 + ], + [ + -118.390791, + 33.815833 + ], + [ + -118.390783, + 33.815947 + ], + [ + -118.390795, + 33.816134 + ], + [ + -118.390777, + 33.816335 + ], + [ + -118.390376, + 33.816369 + ], + [ + -118.390352, + 33.816321 + ], + [ + -118.39037, + 33.816211 + ], + [ + -118.390378, + 33.816081 + ], + [ + -118.390366, + 33.815948 + ], + [ + -118.390352, + 33.815867 + ], + [ + -118.390268, + 33.815642 + ], + [ + -118.390175, + 33.815499 + ], + [ + -118.390066, + 33.815379 + ], + [ + -118.389984, + 33.815308 + ], + [ + -118.38988, + 33.815218 + ], + [ + -118.38986, + 33.815185 + ], + [ + -118.389853, + 33.815144 + ], + [ + -118.389866, + 33.815102 + ], + [ + -118.38992, + 33.815026 + ], + [ + -118.390059, + 33.814863 + ], + [ + -118.390175, + 33.8147 + ], + [ + -118.39029, + 33.814487 + ] + ] + ] + }, + "properties": { + "name": "Miramar Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 402541266, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.385978, + 33.889117 + ], + [ + -118.385948, + 33.889114 + ], + [ + -118.385865, + 33.889173 + ], + [ + -118.385871, + 33.889246 + ], + [ + -118.385901, + 33.889288 + ], + [ + -118.38588, + 33.889325 + ], + [ + -118.385806, + 33.889329 + ], + [ + -118.385764, + 33.889371 + ], + [ + -118.385769, + 33.889426 + ], + [ + -118.38579, + 33.889467 + ], + [ + -118.385751, + 33.889493 + ], + [ + -118.385756, + 33.889559 + ], + [ + -118.385818, + 33.889584 + ], + [ + -118.385862, + 33.889571 + ], + [ + -118.385892, + 33.889587 + ], + [ + -118.385869, + 33.889642 + ], + [ + -118.385877, + 33.889696 + ], + [ + -118.385917, + 33.889723 + ], + [ + -118.385969, + 33.889732 + ], + [ + -118.386034, + 33.889707 + ], + [ + -118.386051, + 33.889658 + ], + [ + -118.38604, + 33.889588 + ], + [ + -118.386025, + 33.889475 + ], + [ + -118.385979, + 33.889462 + ], + [ + -118.385943, + 33.889432 + ], + [ + -118.385958, + 33.889393 + ], + [ + -118.386005, + 33.889372 + ], + [ + -118.386, + 33.889313 + ], + [ + -118.385978, + 33.889117 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 402541271, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.385714, + 33.888422 + ], + [ + -118.385686, + 33.888458 + ], + [ + -118.38585, + 33.888548 + ], + [ + -118.385881, + 33.888509 + ], + [ + -118.386156, + 33.888511 + ], + [ + -118.386151, + 33.888437 + ], + [ + -118.386125, + 33.888366 + ], + [ + -118.38608, + 33.888302 + ], + [ + -118.386019, + 33.888249 + ], + [ + -118.385944, + 33.888209 + ], + [ + -118.385859, + 33.888185 + ], + [ + -118.385771, + 33.888177 + ], + [ + -118.385683, + 33.888187 + ], + [ + -118.3856, + 33.888214 + ], + [ + -118.385714, + 33.888422 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 405341557, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.262741, + 33.847589 + ], + [ + -118.262209, + 33.847503 + ], + [ + -118.26108, + 33.847228 + ], + [ + -118.261135, + 33.847481 + ], + [ + -118.261272, + 33.848537 + ], + [ + -118.261382, + 33.848739 + ], + [ + -118.261833, + 33.84951 + ], + [ + -118.262105, + 33.849575 + ], + [ + -118.262592, + 33.84937 + ], + [ + -118.263181, + 33.849101 + ], + [ + -118.263071, + 33.848259 + ], + [ + -118.262995, + 33.847629 + ], + [ + -118.262741, + 33.847589 + ] + ] + ] + }, + "properties": { + "name": "Del Amo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 415145073, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.42321, + 33.930341 + ], + [ + -118.423202, + 33.929851 + ], + [ + -118.422769, + 33.929855 + ], + [ + -118.422777, + 33.930346 + ], + [ + -118.42321, + 33.930341 + ] + ] + ] + }, + "properties": { + "name": "Acacia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 419774108, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.324215, + 33.77753 + ], + [ + -118.323582, + 33.778765 + ], + [ + -118.322429, + 33.777004 + ], + [ + -118.323276, + 33.776825 + ], + [ + -118.32311, + 33.776125 + ], + [ + -118.323518, + 33.776023 + ], + [ + -118.323298, + 33.775332 + ], + [ + -118.324767, + 33.774886 + ], + [ + -118.325411, + 33.774676 + ], + [ + -118.325642, + 33.77473 + ], + [ + -118.324215, + 33.77753 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 437244086, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.247635, + 33.786006 + ], + [ + -118.246667, + 33.787428 + ], + [ + -118.246653, + 33.787453 + ], + [ + -118.246652, + 33.787498 + ], + [ + -118.24668, + 33.787526 + ], + [ + -118.246771, + 33.787538 + ], + [ + -118.247215, + 33.787509 + ], + [ + -118.247499, + 33.787084 + ], + [ + -118.24773, + 33.787074 + ], + [ + -118.247635, + 33.786006 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 439382623, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.312524, + 33.790632 + ], + [ + -118.312528, + 33.790297 + ], + [ + -118.312354, + 33.790296 + ], + [ + -118.312212, + 33.790551 + ], + [ + -118.312209, + 33.790567 + ], + [ + -118.312214, + 33.790599 + ], + [ + -118.312225, + 33.790614 + ], + [ + -118.31224, + 33.790622 + ], + [ + -118.312269, + 33.790632 + ], + [ + -118.312314, + 33.790634 + ], + [ + -118.312524, + 33.790632 + ] + ] + ] + }, + "properties": { + "name": "Veterans Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 439896570, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.371032, + 33.909368 + ], + [ + -118.370863, + 33.905577 + ], + [ + -118.37104, + 33.902983 + ], + [ + -118.371054, + 33.902717 + ], + [ + -118.371173, + 33.902721 + ], + [ + -118.371171, + 33.90281 + ], + [ + -118.371193, + 33.902901 + ], + [ + -118.37124, + 33.902975 + ], + [ + -118.371266, + 33.903042 + ], + [ + -118.37127, + 33.90313 + ], + [ + -118.371238, + 33.903179 + ], + [ + -118.371189, + 33.903283 + ], + [ + -118.371177, + 33.903366 + ], + [ + -118.371179, + 33.903804 + ], + [ + -118.371187, + 33.904034 + ], + [ + -118.371206, + 33.904092 + ], + [ + -118.37124, + 33.904161 + ], + [ + -118.371331, + 33.904313 + ], + [ + -118.371371, + 33.904389 + ], + [ + -118.37139, + 33.904436 + ], + [ + -118.371397, + 33.904501 + ], + [ + -118.371395, + 33.904615 + ], + [ + -118.371392, + 33.904804 + ], + [ + -118.371371, + 33.904883 + ], + [ + -118.371336, + 33.904959 + ], + [ + -118.371299, + 33.905032 + ], + [ + -118.371203, + 33.90522 + ], + [ + -118.37119, + 33.905272 + ], + [ + -118.371183, + 33.90532 + ], + [ + -118.371181, + 33.905502 + ], + [ + -118.371181, + 33.906007 + ], + [ + -118.371178, + 33.9067 + ], + [ + -118.371179, + 33.907367 + ], + [ + -118.371179, + 33.907964 + ], + [ + -118.371183, + 33.909275 + ], + [ + -118.371185, + 33.909301 + ], + [ + -118.371142, + 33.90931 + ], + [ + -118.371126, + 33.909343 + ], + [ + -118.371091, + 33.90936 + ], + [ + -118.371067, + 33.909364 + ], + [ + -118.371032, + 33.909368 + ] + ] + ] + }, + "properties": { + "name": "Glasgow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440608427, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.375284, + 33.919105 + ], + [ + -118.375283, + 33.918778 + ], + [ + -118.374495, + 33.918779 + ], + [ + -118.374496, + 33.919106 + ], + [ + -118.375284, + 33.919105 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440611979, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.300696, + 33.885683 + ], + [ + -118.299632, + 33.885683 + ], + [ + -118.299568, + 33.887321 + ], + [ + -118.300696, + 33.887333 + ], + [ + -118.300696, + 33.885683 + ] + ] + ] + }, + "properties": { + "name": "Mas Fukai Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442689337, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.391645, + 33.869663 + ], + [ + -118.391244, + 33.869722 + ], + [ + -118.391185, + 33.869447 + ], + [ + -118.391593, + 33.869387 + ], + [ + -118.391647, + 33.869429 + ], + [ + -118.391686, + 33.869611 + ], + [ + -118.391645, + 33.869663 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442691615, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.302509, + 33.897084 + ], + [ + -118.301516, + 33.897081 + ], + [ + -118.301515, + 33.897809 + ], + [ + -118.302515, + 33.897817 + ], + [ + -118.302509, + 33.897084 + ] + ] + ] + }, + "properties": { + "name": "Bell Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442857022, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.360516, + 33.85409 + ], + [ + -118.360518, + 33.853327 + ], + [ + -118.361279, + 33.853329 + ], + [ + -118.36128, + 33.852982 + ], + [ + -118.361588, + 33.852983 + ], + [ + -118.36171, + 33.852945 + ], + [ + -118.361851, + 33.85298 + ], + [ + -118.362178, + 33.852882 + ], + [ + -118.362353, + 33.853174 + ], + [ + -118.362469, + 33.853339 + ], + [ + -118.362718, + 33.853675 + ], + [ + -118.362021, + 33.854118 + ], + [ + -118.361881, + 33.854152 + ], + [ + -118.360562, + 33.854495 + ], + [ + -118.360516, + 33.85409 + ] + ] + ] + }, + "properties": { + "name": "La Romeria Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442857023, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.337354, + 33.872703 + ], + [ + -118.33735, + 33.87124 + ], + [ + -118.336513, + 33.871241 + ], + [ + -118.336513, + 33.871441 + ], + [ + -118.336147, + 33.871442 + ], + [ + -118.336151, + 33.872705 + ], + [ + -118.337354, + 33.872703 + ] + ] + ] + }, + "properties": { + "name": "McMaster Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442857026, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.387131, + 33.858684 + ], + [ + -118.386468, + 33.858494 + ], + [ + -118.38644, + 33.858519 + ], + [ + -118.386554, + 33.859139 + ], + [ + -118.387199, + 33.859057 + ], + [ + -118.387131, + 33.858684 + ] + ] + ] + }, + "properties": { + "name": "Rodaway Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442857027, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.346594, + 33.888359 + ], + [ + -118.344343, + 33.888373 + ], + [ + -118.344349, + 33.889846 + ], + [ + -118.344966, + 33.889854 + ], + [ + -118.345004, + 33.889797 + ], + [ + -118.344998, + 33.889454 + ], + [ + -118.345261, + 33.889454 + ], + [ + -118.345264, + 33.889774 + ], + [ + -118.345328, + 33.889823 + ], + [ + -118.345355, + 33.889921 + ], + [ + -118.346117, + 33.889852 + ], + [ + -118.346117, + 33.889877 + ], + [ + -118.346205, + 33.889866 + ], + [ + -118.346322, + 33.889841 + ], + [ + -118.346746, + 33.889836 + ], + [ + -118.346744, + 33.88962 + ], + [ + -118.347169, + 33.889624 + ], + [ + -118.347188, + 33.889545 + ], + [ + -118.347641, + 33.889557 + ], + [ + -118.347641, + 33.888769 + ], + [ + -118.347826, + 33.888769 + ], + [ + -118.347826, + 33.88854 + ], + [ + -118.346594, + 33.88854 + ], + [ + -118.346594, + 33.888359 + ] + ] + ] + }, + "properties": { + "name": "Rogers-Anderson Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 446444446, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.271217, + 33.81354 + ], + [ + -118.271217, + 33.815006 + ], + [ + -118.27118, + 33.815216 + ], + [ + -118.271124, + 33.815337 + ], + [ + -118.271007, + 33.815329 + ], + [ + -118.270946, + 33.815242 + ], + [ + -118.270853, + 33.815109 + ], + [ + -118.270619, + 33.814996 + ], + [ + -118.270299, + 33.814948 + ], + [ + -118.269492, + 33.814976 + ], + [ + -118.269418, + 33.81496 + ], + [ + -118.269387, + 33.814906 + ], + [ + -118.269424, + 33.814374 + ], + [ + -118.269485, + 33.813122 + ], + [ + -118.269738, + 33.813086 + ], + [ + -118.269781, + 33.812434 + ], + [ + -118.270712, + 33.812449 + ], + [ + -118.270713, + 33.812532 + ], + [ + -118.270927, + 33.812619 + ], + [ + -118.270912, + 33.812859 + ], + [ + -118.270707, + 33.812867 + ], + [ + -118.270703, + 33.812964 + ], + [ + -118.270418, + 33.812964 + ], + [ + -118.270416, + 33.813084 + ], + [ + -118.271223, + 33.813115 + ], + [ + -118.271217, + 33.81354 + ] + ] + ] + }, + "properties": { + "name": "Scott Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 453895878, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.390584, + 33.801077 + ], + [ + -118.390822, + 33.800972 + ], + [ + -118.391047, + 33.801265 + ], + [ + -118.391154, + 33.801342 + ], + [ + -118.391326, + 33.801464 + ], + [ + -118.391427, + 33.801519 + ], + [ + -118.391631, + 33.801596 + ], + [ + -118.391893, + 33.801634 + ], + [ + -118.391955, + 33.801631 + ], + [ + -118.392079, + 33.801718 + ], + [ + -118.392239, + 33.801771 + ], + [ + -118.392501, + 33.801866 + ], + [ + -118.392841, + 33.80203 + ], + [ + -118.393154, + 33.802134 + ], + [ + -118.393235, + 33.802126 + ], + [ + -118.393257, + 33.802114 + ], + [ + -118.393325, + 33.802124 + ], + [ + -118.393431, + 33.802186 + ], + [ + -118.393717, + 33.802213 + ], + [ + -118.394076, + 33.802246 + ], + [ + -118.394239, + 33.802335 + ], + [ + -118.394305, + 33.802428 + ], + [ + -118.394423, + 33.802446 + ], + [ + -118.394503, + 33.802419 + ], + [ + -118.394575, + 33.802369 + ], + [ + -118.394598, + 33.802316 + ], + [ + -118.3946, + 33.802256 + ], + [ + -118.394981, + 33.802152 + ], + [ + -118.395477, + 33.802081 + ], + [ + -118.395758, + 33.802072 + ], + [ + -118.39587, + 33.802174 + ], + [ + -118.395949, + 33.802215 + ], + [ + -118.396071, + 33.802259 + ], + [ + -118.396186, + 33.802326 + ], + [ + -118.396238, + 33.802419 + ], + [ + -118.396249, + 33.802539 + ], + [ + -118.396322, + 33.802659 + ], + [ + -118.396425, + 33.802708 + ], + [ + -118.396458, + 33.802756 + ], + [ + -118.396314, + 33.802965 + ], + [ + -118.396158, + 33.803141 + ], + [ + -118.396074, + 33.803231 + ], + [ + -118.395868, + 33.803272 + ], + [ + -118.395481, + 33.803336 + ], + [ + -118.395409, + 33.803305 + ], + [ + -118.39512, + 33.80327 + ], + [ + -118.39479, + 33.803322 + ], + [ + -118.394569, + 33.803468 + ], + [ + -118.394375, + 33.803668 + ], + [ + -118.394249, + 33.803851 + ], + [ + -118.394092, + 33.804096 + ], + [ + -118.393956, + 33.804291 + ], + [ + -118.393889, + 33.804374 + ], + [ + -118.393698, + 33.804702 + ], + [ + -118.393278, + 33.805609 + ], + [ + -118.393237, + 33.805867 + ], + [ + -118.393052, + 33.806536 + ], + [ + -118.392821, + 33.807191 + ], + [ + -118.392561, + 33.808241 + ], + [ + -118.392389, + 33.808862 + ], + [ + -118.392371, + 33.809121 + ], + [ + -118.392347, + 33.809328 + ], + [ + -118.391536, + 33.80899 + ], + [ + -118.391581, + 33.808835 + ], + [ + -118.391637, + 33.808845 + ], + [ + -118.391821, + 33.808302 + ], + [ + -118.391961, + 33.808318 + ], + [ + -118.391926, + 33.808131 + ], + [ + -118.391924, + 33.808025 + ], + [ + -118.391947, + 33.807829 + ], + [ + -118.391984, + 33.807744 + ], + [ + -118.392038, + 33.807613 + ], + [ + -118.391998, + 33.807449 + ], + [ + -118.392079, + 33.807243 + ], + [ + -118.392154, + 33.806863 + ], + [ + -118.392256, + 33.806734 + ], + [ + -118.392319, + 33.806637 + ], + [ + -118.392344, + 33.806533 + ], + [ + -118.392243, + 33.806377 + ], + [ + -118.392282, + 33.80607 + ], + [ + -118.392313, + 33.806043 + ], + [ + -118.392672, + 33.806171 + ], + [ + -118.392796, + 33.805781 + ], + [ + -118.392441, + 33.805642 + ], + [ + -118.392307, + 33.805568 + ], + [ + -118.392212, + 33.805448 + ], + [ + -118.392192, + 33.80533 + ], + [ + -118.392165, + 33.805206 + ], + [ + -118.392223, + 33.804905 + ], + [ + -118.392315, + 33.804694 + ], + [ + -118.392431, + 33.804607 + ], + [ + -118.392639, + 33.804569 + ], + [ + -118.392847, + 33.804535 + ], + [ + -118.392948, + 33.804513 + ], + [ + -118.393021, + 33.804507 + ], + [ + -118.393167, + 33.804391 + ], + [ + -118.393173, + 33.804321 + ], + [ + -118.393433, + 33.804302 + ], + [ + -118.393753, + 33.804319 + ], + [ + -118.393856, + 33.803693 + ], + [ + -118.394103, + 33.803517 + ], + [ + -118.394192, + 33.803554 + ], + [ + -118.394291, + 33.803366 + ], + [ + -118.394404, + 33.80331 + ], + [ + -118.394425, + 33.803143 + ], + [ + -118.394278, + 33.803152 + ], + [ + -118.393499, + 33.803022 + ], + [ + -118.393404, + 33.802822 + ], + [ + -118.393115, + 33.802938 + ], + [ + -118.392882, + 33.803067 + ], + [ + -118.392751, + 33.803149 + ], + [ + -118.392656, + 33.803336 + ], + [ + -118.3928, + 33.803382 + ], + [ + -118.392786, + 33.803469 + ], + [ + -118.392716, + 33.803455 + ], + [ + -118.392467, + 33.803729 + ], + [ + -118.392623, + 33.803832 + ], + [ + -118.392608, + 33.804249 + ], + [ + -118.390886, + 33.804252 + ], + [ + -118.390866, + 33.803938 + ], + [ + -118.390855, + 33.803886 + ], + [ + -118.390884, + 33.80386 + ], + [ + -118.391068, + 33.803868 + ], + [ + -118.39112, + 33.803858 + ], + [ + -118.391171, + 33.803863 + ], + [ + -118.39115, + 33.803934 + ], + [ + -118.391099, + 33.803994 + ], + [ + -118.391088, + 33.804104 + ], + [ + -118.391652, + 33.804113 + ], + [ + -118.391676, + 33.80391 + ], + [ + -118.391435, + 33.803913 + ], + [ + -118.391307, + 33.803933 + ], + [ + -118.391248, + 33.803913 + ], + [ + -118.391248, + 33.803884 + ], + [ + -118.39127, + 33.803856 + ], + [ + -118.391518, + 33.80384 + ], + [ + -118.391775, + 33.803828 + ], + [ + -118.39186, + 33.803797 + ], + [ + -118.391936, + 33.803726 + ], + [ + -118.392, + 33.803606 + ], + [ + -118.39205, + 33.803421 + ], + [ + -118.39221, + 33.803238 + ], + [ + -118.392338, + 33.80306 + ], + [ + -118.392429, + 33.802931 + ], + [ + -118.392429, + 33.802866 + ], + [ + -118.392419, + 33.802803 + ], + [ + -118.392272, + 33.802784 + ], + [ + -118.392132, + 33.80276 + ], + [ + -118.391986, + 33.802713 + ], + [ + -118.391664, + 33.802554 + ], + [ + -118.391429, + 33.802427 + ], + [ + -118.391491, + 33.802342 + ], + [ + -118.391113, + 33.802129 + ], + [ + -118.391031, + 33.802336 + ], + [ + -118.391049, + 33.802477 + ], + [ + -118.391144, + 33.80256 + ], + [ + -118.391276, + 33.802681 + ], + [ + -118.391051, + 33.802875 + ], + [ + -118.390965, + 33.80318 + ], + [ + -118.390948, + 33.803377 + ], + [ + -118.391101, + 33.803483 + ], + [ + -118.391322, + 33.803622 + ], + [ + -118.391519, + 33.803692 + ], + [ + -118.39168, + 33.803693 + ], + [ + -118.391755, + 33.80374 + ], + [ + -118.391445, + 33.803787 + ], + [ + -118.391237, + 33.803793 + ], + [ + -118.390843, + 33.803753 + ], + [ + -118.390804, + 33.803726 + ], + [ + -118.390781, + 33.803596 + ], + [ + -118.390769, + 33.803442 + ], + [ + -118.390798, + 33.803318 + ], + [ + -118.390754, + 33.803116 + ], + [ + -118.39067, + 33.802871 + ], + [ + -118.390544, + 33.802681 + ], + [ + -118.390313, + 33.802429 + ], + [ + -118.390059, + 33.802261 + ], + [ + -118.38976, + 33.802143 + ], + [ + -118.389214, + 33.802023 + ], + [ + -118.388743, + 33.801898 + ], + [ + -118.388645, + 33.801806 + ], + [ + -118.388487, + 33.801743 + ], + [ + -118.388311, + 33.801682 + ], + [ + -118.388212, + 33.8016 + ], + [ + -118.38815, + 33.801536 + ], + [ + -118.388138, + 33.801456 + ], + [ + -118.388177, + 33.801283 + ], + [ + -118.388249, + 33.801192 + ], + [ + -118.388439, + 33.801057 + ], + [ + -118.388846, + 33.800833 + ], + [ + -118.389072, + 33.801113 + ], + [ + -118.389404, + 33.801058 + ], + [ + -118.38955, + 33.800992 + ], + [ + -118.389899, + 33.800948 + ], + [ + -118.390061, + 33.800925 + ], + [ + -118.390146, + 33.800939 + ], + [ + -118.390197, + 33.800896 + ], + [ + -118.390299, + 33.801029 + ], + [ + -118.390584, + 33.801077 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 454182394, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.36055, + 33.767643 + ], + [ + -118.360434, + 33.767837 + ], + [ + -118.360356, + 33.767994 + ], + [ + -118.360274, + 33.768063 + ], + [ + -118.359873, + 33.767871 + ], + [ + -118.359626, + 33.767953 + ], + [ + -118.359494, + 33.768238 + ], + [ + -118.3594, + 33.768411 + ], + [ + -118.359156, + 33.768589 + ], + [ + -118.358859, + 33.76872 + ], + [ + -118.358913, + 33.768627 + ], + [ + -118.35888, + 33.768541 + ], + [ + -118.358822, + 33.768606 + ], + [ + -118.358759, + 33.768728 + ], + [ + -118.358562, + 33.76887 + ], + [ + -118.358194, + 33.769195 + ], + [ + -118.358039, + 33.769319 + ], + [ + -118.357884, + 33.769579 + ], + [ + -118.358043, + 33.769782 + ], + [ + -118.357993, + 33.770002 + ], + [ + -118.357744, + 33.770255 + ], + [ + -118.357354, + 33.770533 + ], + [ + -118.356878, + 33.770845 + ], + [ + -118.356653, + 33.771037 + ], + [ + -118.356369, + 33.771201 + ], + [ + -118.355569, + 33.771822 + ], + [ + -118.35502, + 33.772199 + ], + [ + -118.354603, + 33.772603 + ], + [ + -118.354336, + 33.772922 + ], + [ + -118.354208, + 33.773174 + ], + [ + -118.353828, + 33.773423 + ], + [ + -118.353729, + 33.773361 + ], + [ + -118.353386, + 33.773585 + ], + [ + -118.353135, + 33.773683 + ], + [ + -118.352917, + 33.773693 + ], + [ + -118.352764, + 33.773906 + ], + [ + -118.352508, + 33.774512 + ], + [ + -118.352067, + 33.774383 + ], + [ + -118.351947, + 33.774556 + ], + [ + -118.351728, + 33.774926 + ], + [ + -118.351261, + 33.775472 + ], + [ + -118.350983, + 33.775732 + ], + [ + -118.350908, + 33.775887 + ], + [ + -118.350766, + 33.775832 + ], + [ + -118.350533, + 33.776127 + ], + [ + -118.350397, + 33.776467 + ], + [ + -118.350343, + 33.776813 + ], + [ + -118.350541, + 33.776991 + ], + [ + -118.350397, + 33.777344 + ], + [ + -118.350308, + 33.777448 + ], + [ + -118.350121, + 33.777385 + ], + [ + -118.349797, + 33.777869 + ], + [ + -118.349399, + 33.777725 + ], + [ + -118.34963, + 33.777262 + ], + [ + -118.349865, + 33.776714 + ], + [ + -118.349993, + 33.776268 + ], + [ + -118.350036, + 33.776069 + ], + [ + -118.35025, + 33.775812 + ], + [ + -118.350623, + 33.775493 + ], + [ + -118.35083, + 33.775308 + ], + [ + -118.350855, + 33.775133 + ], + [ + -118.350805, + 33.775051 + ], + [ + -118.350661, + 33.775095 + ], + [ + -118.350467, + 33.775167 + ], + [ + -118.349968, + 33.775133 + ], + [ + -118.3505, + 33.774999 + ], + [ + -118.350585, + 33.774933 + ], + [ + -118.351679, + 33.774375 + ], + [ + -118.351931, + 33.773474 + ], + [ + -118.352001, + 33.772857 + ], + [ + -118.351914, + 33.772637 + ], + [ + -118.351044, + 33.772641 + ], + [ + -118.351028, + 33.772551 + ], + [ + -118.352005, + 33.772514 + ], + [ + -118.352393, + 33.771756 + ], + [ + -118.352224, + 33.771664 + ], + [ + -118.352484, + 33.771455 + ], + [ + -118.35283, + 33.771249 + ], + [ + -118.353333, + 33.771003 + ], + [ + -118.353651, + 33.770794 + ], + [ + -118.35382, + 33.770588 + ], + [ + -118.35434, + 33.769943 + ], + [ + -118.354728, + 33.769377 + ], + [ + -118.35471, + 33.7691 + ], + [ + -118.354743, + 33.769003 + ], + [ + -118.35495, + 33.768503 + ], + [ + -118.355065, + 33.768321 + ], + [ + -118.355267, + 33.76826 + ], + [ + -118.355465, + 33.768318 + ], + [ + -118.355716, + 33.768095 + ], + [ + -118.355906, + 33.767937 + ], + [ + -118.355982, + 33.76773 + ], + [ + -118.355725, + 33.767609 + ], + [ + -118.355594, + 33.767703 + ], + [ + -118.355532, + 33.767588 + ], + [ + -118.355586, + 33.767373 + ], + [ + -118.355766, + 33.767063 + ], + [ + -118.356042, + 33.7666 + ], + [ + -118.356208, + 33.766395 + ], + [ + -118.357242, + 33.766086 + ], + [ + -118.357511, + 33.765506 + ], + [ + -118.35793, + 33.764468 + ], + [ + -118.35808, + 33.764139 + ], + [ + -118.357989, + 33.764094 + ], + [ + -118.358254, + 33.763676 + ], + [ + -118.357733, + 33.763261 + ], + [ + -118.358093, + 33.762812 + ], + [ + -118.358385, + 33.76297 + ], + [ + -118.358517, + 33.762733 + ], + [ + -118.358903, + 33.762969 + ], + [ + -118.358932, + 33.76326 + ], + [ + -118.359428, + 33.763271 + ], + [ + -118.359428, + 33.763418 + ], + [ + -118.359601, + 33.763552 + ], + [ + -118.359651, + 33.763631 + ], + [ + -118.359557, + 33.764208 + ], + [ + -118.359499, + 33.764283 + ], + [ + -118.359466, + 33.764314 + ], + [ + -118.359536, + 33.764441 + ], + [ + -118.359532, + 33.764777 + ], + [ + -118.359972, + 33.764859 + ], + [ + -118.360055, + 33.76503 + ], + [ + -118.360109, + 33.765079 + ], + [ + -118.360521, + 33.76503 + ], + [ + -118.360826, + 33.764821 + ], + [ + -118.360884, + 33.764557 + ], + [ + -118.360927, + 33.764528 + ], + [ + -118.361, + 33.764478 + ], + [ + -118.360967, + 33.764338 + ], + [ + -118.360946, + 33.764266 + ], + [ + -118.360992, + 33.764139 + ], + [ + -118.361054, + 33.764033 + ], + [ + -118.361, + 33.763806 + ], + [ + -118.360946, + 33.763621 + ], + [ + -118.361226, + 33.763693 + ], + [ + -118.36114, + 33.763919 + ], + [ + -118.36112, + 33.764279 + ], + [ + -118.361238, + 33.764674 + ], + [ + -118.361507, + 33.764828 + ], + [ + -118.361351, + 33.765408 + ], + [ + -118.361107, + 33.765326 + ], + [ + -118.361107, + 33.765411 + ], + [ + -118.360926, + 33.765696 + ], + [ + -118.360794, + 33.766323 + ], + [ + -118.360633, + 33.766926 + ], + [ + -118.360579, + 33.767298 + ], + [ + -118.36055, + 33.767619 + ], + [ + -118.36055, + 33.767643 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 456657052, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.347276, + 33.758305 + ], + [ + -118.347562, + 33.758326 + ], + [ + -118.347574, + 33.75918 + ], + [ + -118.347625, + 33.759524 + ], + [ + -118.348141, + 33.759123 + ], + [ + -118.348224, + 33.758943 + ], + [ + -118.348454, + 33.758975 + ], + [ + -118.348366, + 33.759277 + ], + [ + -118.348451, + 33.759347 + ], + [ + -118.348383, + 33.759597 + ], + [ + -118.348251, + 33.75985 + ], + [ + -118.348688, + 33.760155 + ], + [ + -118.348676, + 33.760233 + ], + [ + -118.34774, + 33.760192 + ], + [ + -118.347493, + 33.760637 + ], + [ + -118.347408, + 33.761083 + ], + [ + -118.34752, + 33.761439 + ], + [ + -118.347809, + 33.761596 + ], + [ + -118.347713, + 33.761802 + ], + [ + -118.347128, + 33.761673 + ], + [ + -118.346751, + 33.762079 + ], + [ + -118.346323, + 33.762192 + ], + [ + -118.346181, + 33.762394 + ], + [ + -118.345966, + 33.76266 + ], + [ + -118.345793, + 33.762832 + ], + [ + -118.34577, + 33.763052 + ], + [ + -118.345684, + 33.76313 + ], + [ + -118.345232, + 33.763162 + ], + [ + -118.34488, + 33.763199 + ], + [ + -118.344768, + 33.763213 + ], + [ + -118.344712, + 33.763172 + ], + [ + -118.344471, + 33.763175 + ], + [ + -118.344331, + 33.763154 + ], + [ + -118.344251, + 33.763068 + ], + [ + -118.344, + 33.763066 + ], + [ + -118.343762, + 33.763182 + ], + [ + -118.343582, + 33.763262 + ], + [ + -118.343548, + 33.7633 + ], + [ + -118.343515, + 33.763411 + ], + [ + -118.343296, + 33.763577 + ], + [ + -118.343274, + 33.763358 + ], + [ + -118.343228, + 33.763364 + ], + [ + -118.342946, + 33.763828 + ], + [ + -118.342756, + 33.764009 + ], + [ + -118.342693, + 33.764181 + ], + [ + -118.34268, + 33.764293 + ], + [ + -118.342634, + 33.764227 + ], + [ + -118.342648, + 33.764196 + ], + [ + -118.342621, + 33.764167 + ], + [ + -118.342611, + 33.764151 + ], + [ + -118.3426, + 33.7641 + ], + [ + -118.342659, + 33.763984 + ], + [ + -118.342807, + 33.763788 + ], + [ + -118.342857, + 33.763703 + ], + [ + -118.342958, + 33.763581 + ], + [ + -118.343158, + 33.763297 + ], + [ + -118.343235, + 33.763095 + ], + [ + -118.343263, + 33.762901 + ], + [ + -118.343075, + 33.762778 + ], + [ + -118.343072, + 33.762665 + ], + [ + -118.342975, + 33.762233 + ], + [ + -118.342759, + 33.761592 + ], + [ + -118.342471, + 33.761157 + ], + [ + -118.342395, + 33.761036 + ], + [ + -118.342308, + 33.760881 + ], + [ + -118.342238, + 33.760772 + ], + [ + -118.342305, + 33.760751 + ], + [ + -118.342527, + 33.760878 + ], + [ + -118.342719, + 33.760932 + ], + [ + -118.34317, + 33.761166 + ], + [ + -118.343946, + 33.761572 + ], + [ + -118.344351, + 33.761306 + ], + [ + -118.344732, + 33.761514 + ], + [ + -118.344994, + 33.761606 + ], + [ + -118.345132, + 33.761811 + ], + [ + -118.345396, + 33.761774 + ], + [ + -118.34551, + 33.761678 + ], + [ + -118.345604, + 33.761508 + ], + [ + -118.345682, + 33.761077 + ], + [ + -118.345512, + 33.760958 + ], + [ + -118.345483, + 33.76083 + ], + [ + -118.345556, + 33.760669 + ], + [ + -118.345458, + 33.760526 + ], + [ + -118.345385, + 33.760393 + ], + [ + -118.345535, + 33.760243 + ], + [ + -118.345364, + 33.760144 + ], + [ + -118.345579, + 33.760051 + ], + [ + -118.34577, + 33.760123 + ], + [ + -118.345885, + 33.760139 + ], + [ + -118.346153, + 33.760309 + ], + [ + -118.346171, + 33.760505 + ], + [ + -118.346463, + 33.760372 + ], + [ + -118.346511, + 33.760254 + ], + [ + -118.346659, + 33.760125 + ], + [ + -118.346712, + 33.760058 + ], + [ + -118.346753, + 33.759973 + ], + [ + -118.346689, + 33.75995 + ], + [ + -118.346581, + 33.759898 + ], + [ + -118.346469, + 33.759923 + ], + [ + -118.346557, + 33.759627 + ], + [ + -118.346723, + 33.75951 + ], + [ + -118.346651, + 33.75938 + ], + [ + -118.346744, + 33.759277 + ], + [ + -118.346779, + 33.759196 + ], + [ + -118.347063, + 33.759173 + ], + [ + -118.347121, + 33.758881 + ], + [ + -118.346969, + 33.75877 + ], + [ + -118.346954, + 33.758734 + ], + [ + -118.346738, + 33.758721 + ], + [ + -118.346813, + 33.758549 + ], + [ + -118.34674, + 33.758416 + ], + [ + -118.34652, + 33.75835 + ], + [ + -118.346673, + 33.758105 + ], + [ + -118.346826, + 33.75797 + ], + [ + -118.34676, + 33.75794 + ], + [ + -118.346878, + 33.757769 + ], + [ + -118.347125, + 33.757719 + ], + [ + -118.34723, + 33.757588 + ], + [ + -118.347313, + 33.757273 + ], + [ + -118.347115, + 33.757097 + ], + [ + -118.346849, + 33.75707 + ], + [ + -118.346895, + 33.756944 + ], + [ + -118.347058, + 33.756912 + ], + [ + -118.346949, + 33.756695 + ], + [ + -118.346805, + 33.75648 + ], + [ + -118.346778, + 33.756356 + ], + [ + -118.346717, + 33.756026 + ], + [ + -118.346612, + 33.755888 + ], + [ + -118.346461, + 33.755728 + ], + [ + -118.346499, + 33.755601 + ], + [ + -118.346702, + 33.755544 + ], + [ + -118.347184, + 33.755517 + ], + [ + -118.347176, + 33.755693 + ], + [ + -118.347232, + 33.755913 + ], + [ + -118.347291, + 33.756098 + ], + [ + -118.347416, + 33.756248 + ], + [ + -118.347679, + 33.756274 + ], + [ + -118.347512, + 33.756368 + ], + [ + -118.347127, + 33.756537 + ], + [ + -118.346994, + 33.756611 + ], + [ + -118.347334, + 33.757078 + ], + [ + -118.347489, + 33.7571 + ], + [ + -118.347615, + 33.756972 + ], + [ + -118.347878, + 33.756791 + ], + [ + -118.348026, + 33.756701 + ], + [ + -118.348052, + 33.75664 + ], + [ + -118.348235, + 33.75636 + ], + [ + -118.348375, + 33.756142 + ], + [ + -118.348473, + 33.755981 + ], + [ + -118.34868, + 33.75578 + ], + [ + -118.348768, + 33.755807 + ], + [ + -118.34855, + 33.756153 + ], + [ + -118.348352, + 33.756467 + ], + [ + -118.3483, + 33.756765 + ], + [ + -118.348604, + 33.756907 + ], + [ + -118.349148, + 33.757135 + ], + [ + -118.349411, + 33.757208 + ], + [ + -118.349357, + 33.757296 + ], + [ + -118.34915, + 33.75736 + ], + [ + -118.348955, + 33.757205 + ], + [ + -118.348563, + 33.756996 + ], + [ + -118.348405, + 33.757039 + ], + [ + -118.3482, + 33.75727 + ], + [ + -118.348019, + 33.757503 + ], + [ + -118.347606, + 33.757317 + ], + [ + -118.347276, + 33.758305 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 456668066, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.342027, + 33.763629 + ], + [ + -118.341938, + 33.763791 + ], + [ + -118.34178, + 33.763854 + ], + [ + -118.341523, + 33.764051 + ], + [ + -118.341228, + 33.763933 + ], + [ + -118.340983, + 33.763962 + ], + [ + -118.340753, + 33.764159 + ], + [ + -118.340358, + 33.764389 + ], + [ + -118.340181, + 33.764611 + ], + [ + -118.339493, + 33.76444 + ], + [ + -118.339136, + 33.764006 + ], + [ + -118.339703, + 33.763672 + ], + [ + -118.339653, + 33.763634 + ], + [ + -118.339477, + 33.763491 + ], + [ + -118.33909, + 33.76343 + ], + [ + -118.338747, + 33.763575 + ], + [ + -118.338471, + 33.763304 + ], + [ + -118.338785, + 33.762904 + ], + [ + -118.338374, + 33.76278 + ], + [ + -118.338334, + 33.762554 + ], + [ + -118.338854, + 33.762647 + ], + [ + -118.339065, + 33.762761 + ], + [ + -118.339107, + 33.762949 + ], + [ + -118.339217, + 33.763019 + ], + [ + -118.339542, + 33.763102 + ], + [ + -118.33971, + 33.763231 + ], + [ + -118.339787, + 33.763303 + ], + [ + -118.339867, + 33.763247 + ], + [ + -118.339975, + 33.763143 + ], + [ + -118.34004, + 33.763086 + ], + [ + -118.340458, + 33.763245 + ], + [ + -118.340653, + 33.763229 + ], + [ + -118.340732, + 33.763129 + ], + [ + -118.340787, + 33.76304 + ], + [ + -118.341031, + 33.762906 + ], + [ + -118.341167, + 33.76281 + ], + [ + -118.341519, + 33.762766 + ], + [ + -118.341735, + 33.763306 + ], + [ + -118.341901, + 33.763307 + ], + [ + -118.341885, + 33.763009 + ], + [ + -118.341988, + 33.762769 + ], + [ + -118.342104, + 33.762606 + ], + [ + -118.342073, + 33.762545 + ], + [ + -118.341877, + 33.762587 + ], + [ + -118.341745, + 33.762611 + ], + [ + -118.341659, + 33.762568 + ], + [ + -118.341424, + 33.762561 + ], + [ + -118.340991, + 33.76265 + ], + [ + -118.340667, + 33.762802 + ], + [ + -118.340628, + 33.762877 + ], + [ + -118.340126, + 33.762836 + ], + [ + -118.339664, + 33.76248 + ], + [ + -118.339216, + 33.762098 + ], + [ + -118.339083, + 33.762113 + ], + [ + -118.338847, + 33.76201 + ], + [ + -118.338724, + 33.76197 + ], + [ + -118.338681, + 33.761868 + ], + [ + -118.338793, + 33.761805 + ], + [ + -118.338922, + 33.761778 + ], + [ + -118.33904, + 33.761729 + ], + [ + -118.33911, + 33.761631 + ], + [ + -118.339153, + 33.761529 + ], + [ + -118.339083, + 33.761435 + ], + [ + -118.338949, + 33.761422 + ], + [ + -118.338826, + 33.76144 + ], + [ + -118.338595, + 33.761547 + ], + [ + -118.338466, + 33.761573 + ], + [ + -118.338338, + 33.761555 + ], + [ + -118.338204, + 33.76156 + ], + [ + -118.338112, + 33.76164 + ], + [ + -118.337989, + 33.7616 + ], + [ + -118.337946, + 33.761497 + ], + [ + -118.337887, + 33.761399 + ], + [ + -118.337769, + 33.761359 + ], + [ + -118.33764, + 33.761355 + ], + [ + -118.337549, + 33.761435 + ], + [ + -118.337544, + 33.761547 + ], + [ + -118.337527, + 33.761654 + ], + [ + -118.33749, + 33.761681 + ], + [ + -118.337372, + 33.761725 + ], + [ + -118.337275, + 33.761649 + ], + [ + -118.337147, + 33.761604 + ], + [ + -118.337023, + 33.761578 + ], + [ + -118.337034, + 33.761694 + ], + [ + -118.337152, + 33.761752 + ], + [ + -118.33727, + 33.761805 + ], + [ + -118.337367, + 33.761885 + ], + [ + -118.337393, + 33.761992 + ], + [ + -118.337297, + 33.762073 + ], + [ + -118.337222, + 33.762162 + ], + [ + -118.337098, + 33.762354 + ], + [ + -118.337114, + 33.76247 + ], + [ + -118.337163, + 33.762572 + ], + [ + -118.337222, + 33.76267 + ], + [ + -118.337468, + 33.762853 + ], + [ + -118.337613, + 33.762858 + ], + [ + -118.337731, + 33.762809 + ], + [ + -118.337866, + 33.762786 + ], + [ + -118.338, + 33.762813 + ], + [ + -118.338091, + 33.762893 + ], + [ + -118.338144, + 33.762996 + ], + [ + -118.338107, + 33.763103 + ], + [ + -118.338016, + 33.763179 + ], + [ + -118.337892, + 33.763214 + ], + [ + -118.337833, + 33.763313 + ], + [ + -118.337699, + 33.763326 + ], + [ + -118.33757, + 33.763322 + ], + [ + -118.337447, + 33.763362 + ], + [ + -118.337318, + 33.763384 + ], + [ + -118.33719, + 33.763384 + ], + [ + -118.337077, + 33.763437 + ], + [ + -118.337015, + 33.763458 + ], + [ + -118.336852, + 33.763809 + ], + [ + -118.336551, + 33.763989 + ], + [ + -118.336111, + 33.763933 + ], + [ + -118.336113, + 33.764207 + ], + [ + -118.336198, + 33.764379 + ], + [ + -118.336288, + 33.764466 + ], + [ + -118.33677, + 33.764614 + ], + [ + -118.336969, + 33.764362 + ], + [ + -118.336838, + 33.764269 + ], + [ + -118.336915, + 33.764142 + ], + [ + -118.337332, + 33.764301 + ], + [ + -118.337358, + 33.764419 + ], + [ + -118.33741, + 33.764429 + ], + [ + -118.337492, + 33.764521 + ], + [ + -118.337494, + 33.764638 + ], + [ + -118.337347, + 33.764881 + ], + [ + -118.337189, + 33.76498 + ], + [ + -118.337107, + 33.764984 + ], + [ + -118.337063, + 33.765054 + ], + [ + -118.336808, + 33.765041 + ], + [ + -118.336488, + 33.765543 + ], + [ + -118.336201, + 33.76537 + ], + [ + -118.336373, + 33.76514 + ], + [ + -118.336307, + 33.765073 + ], + [ + -118.336103, + 33.764983 + ], + [ + -118.335879, + 33.765007 + ], + [ + -118.335576, + 33.765049 + ], + [ + -118.335274, + 33.76511 + ], + [ + -118.334996, + 33.765281 + ], + [ + -118.335339, + 33.765699 + ], + [ + -118.33508, + 33.765868 + ], + [ + -118.335205, + 33.76595 + ], + [ + -118.335191, + 33.766246 + ], + [ + -118.335588, + 33.766066 + ], + [ + -118.335724, + 33.766041 + ], + [ + -118.335891, + 33.766123 + ], + [ + -118.335895, + 33.766239 + ], + [ + -118.335741, + 33.766278 + ], + [ + -118.33563, + 33.766314 + ], + [ + -118.335605, + 33.766432 + ], + [ + -118.335662, + 33.766573 + ], + [ + -118.335682, + 33.766711 + ], + [ + -118.335643, + 33.766819 + ], + [ + -118.335458, + 33.766876 + ], + [ + -118.335189, + 33.766925 + ], + [ + -118.335002, + 33.767013 + ], + [ + -118.335071, + 33.767145 + ], + [ + -118.335415, + 33.767225 + ], + [ + -118.335607, + 33.767207 + ], + [ + -118.335779, + 33.767286 + ], + [ + -118.335793, + 33.767399 + ], + [ + -118.335766, + 33.767504 + ], + [ + -118.335465, + 33.767631 + ], + [ + -118.335228, + 33.767687 + ], + [ + -118.335045, + 33.76786 + ], + [ + -118.334901, + 33.767991 + ], + [ + -118.334729, + 33.768074 + ], + [ + -118.33444, + 33.768171 + ], + [ + -118.334318, + 33.768158 + ], + [ + -118.334264, + 33.76823 + ], + [ + -118.334161, + 33.768321 + ], + [ + -118.334067, + 33.768354 + ], + [ + -118.333983, + 33.768361 + ], + [ + -118.333841, + 33.768323 + ], + [ + -118.333764, + 33.768358 + ], + [ + -118.333669, + 33.768417 + ], + [ + -118.333411, + 33.768647 + ], + [ + -118.333319, + 33.768721 + ], + [ + -118.333149, + 33.768912 + ], + [ + -118.332759, + 33.769225 + ], + [ + -118.332377, + 33.769463 + ], + [ + -118.331811, + 33.769735 + ], + [ + -118.331378, + 33.769787 + ], + [ + -118.331264, + 33.769756 + ], + [ + -118.330988, + 33.769655 + ], + [ + -118.330626, + 33.769633 + ], + [ + -118.33043, + 33.769732 + ], + [ + -118.330227, + 33.769757 + ], + [ + -118.330008, + 33.76972 + ], + [ + -118.329637, + 33.769654 + ], + [ + -118.329344, + 33.769665 + ], + [ + -118.32907, + 33.769808 + ], + [ + -118.32897, + 33.769851 + ], + [ + -118.328919, + 33.769802 + ], + [ + -118.328819, + 33.769764 + ], + [ + -118.328658, + 33.769714 + ], + [ + -118.328405, + 33.769727 + ], + [ + -118.328026, + 33.769751 + ], + [ + -118.32781, + 33.769907 + ], + [ + -118.32738, + 33.770286 + ], + [ + -118.327196, + 33.770455 + ], + [ + -118.327026, + 33.770578 + ], + [ + -118.32694, + 33.770695 + ], + [ + -118.326646, + 33.771001 + ], + [ + -118.326493, + 33.771116 + ], + [ + -118.326182, + 33.771329 + ], + [ + -118.326159, + 33.771377 + ], + [ + -118.32632, + 33.771505 + ], + [ + -118.326478, + 33.771618 + ], + [ + -118.326577, + 33.771731 + ], + [ + -118.326763, + 33.772153 + ], + [ + -118.326815, + 33.772072 + ], + [ + -118.326815, + 33.77195 + ], + [ + -118.326761, + 33.771864 + ], + [ + -118.326638, + 33.771779 + ], + [ + -118.32652, + 33.771638 + ], + [ + -118.326846, + 33.77149 + ], + [ + -118.326868, + 33.771104 + ], + [ + -118.326969, + 33.771044 + ], + [ + -118.327193, + 33.77097 + ], + [ + -118.327398, + 33.770781 + ], + [ + -118.327573, + 33.770625 + ], + [ + -118.327786, + 33.770466 + ], + [ + -118.328786, + 33.770223 + ], + [ + -118.328827, + 33.770314 + ], + [ + -118.3294, + 33.770172 + ], + [ + -118.329519, + 33.770232 + ], + [ + -118.329786, + 33.77021 + ], + [ + -118.329925, + 33.770262 + ], + [ + -118.330331, + 33.770055 + ], + [ + -118.330576, + 33.769998 + ], + [ + -118.330697, + 33.769934 + ], + [ + -118.330799, + 33.769918 + ], + [ + -118.330982, + 33.769904 + ], + [ + -118.331115, + 33.769969 + ], + [ + -118.331134, + 33.770084 + ], + [ + -118.33128, + 33.770161 + ], + [ + -118.331573, + 33.770162 + ], + [ + -118.33204, + 33.770184 + ], + [ + -118.332241, + 33.770108 + ], + [ + -118.332469, + 33.770037 + ], + [ + -118.332839, + 33.770015 + ], + [ + -118.332913, + 33.769976 + ], + [ + -118.333141, + 33.769942 + ], + [ + -118.333176, + 33.769866 + ], + [ + -118.332922, + 33.769689 + ], + [ + -118.33281, + 33.769568 + ], + [ + -118.333164, + 33.769443 + ], + [ + -118.333565, + 33.769213 + ], + [ + -118.333747, + 33.769126 + ], + [ + -118.333983, + 33.768887 + ], + [ + -118.334439, + 33.768858 + ], + [ + -118.334773, + 33.76896 + ], + [ + -118.335066, + 33.769424 + ], + [ + -118.335006, + 33.76963 + ], + [ + -118.3355, + 33.769735 + ], + [ + -118.33582, + 33.769698 + ], + [ + -118.336044, + 33.769561 + ], + [ + -118.336253, + 33.769438 + ], + [ + -118.336553, + 33.769373 + ], + [ + -118.336781, + 33.769443 + ], + [ + -118.337024, + 33.769528 + ], + [ + -118.337087, + 33.769382 + ], + [ + -118.337184, + 33.769163 + ], + [ + -118.337116, + 33.769107 + ], + [ + -118.337205, + 33.768826 + ], + [ + -118.337215, + 33.768722 + ], + [ + -118.337126, + 33.768681 + ], + [ + -118.337023, + 33.768682 + ], + [ + -118.33685, + 33.768953 + ], + [ + -118.336559, + 33.769068 + ], + [ + -118.336337, + 33.769091 + ], + [ + -118.336159, + 33.769138 + ], + [ + -118.335828, + 33.769161 + ], + [ + -118.335519, + 33.769094 + ], + [ + -118.335419, + 33.7692 + ], + [ + -118.335134, + 33.769059 + ], + [ + -118.335041, + 33.769016 + ], + [ + -118.335019, + 33.768918 + ], + [ + -118.335249, + 33.768811 + ], + [ + -118.335674, + 33.768778 + ], + [ + -118.336247, + 33.768609 + ], + [ + -118.336503, + 33.768323 + ], + [ + -118.337243, + 33.76801 + ], + [ + -118.337366, + 33.767806 + ], + [ + -118.33723, + 33.767727 + ], + [ + -118.33745, + 33.767433 + ], + [ + -118.33768, + 33.767454 + ], + [ + -118.33794, + 33.76742 + ], + [ + -118.338074, + 33.767219 + ], + [ + -118.337958, + 33.767126 + ], + [ + -118.337849, + 33.766868 + ], + [ + -118.338063, + 33.766728 + ], + [ + -118.338436, + 33.766679 + ], + [ + -118.338713, + 33.766389 + ], + [ + -118.338904, + 33.766206 + ], + [ + -118.338768, + 33.765966 + ], + [ + -118.338969, + 33.765747 + ], + [ + -118.339895, + 33.766494 + ], + [ + -118.340076, + 33.76643 + ], + [ + -118.339952, + 33.766063 + ], + [ + -118.340113, + 33.765704 + ], + [ + -118.340811, + 33.76598 + ], + [ + -118.340719, + 33.766188 + ], + [ + -118.340705, + 33.766347 + ], + [ + -118.340575, + 33.766563 + ], + [ + -118.340283, + 33.76662 + ], + [ + -118.340172, + 33.766966 + ], + [ + -118.340437, + 33.767086 + ], + [ + -118.34109, + 33.767241 + ], + [ + -118.34146, + 33.76723 + ], + [ + -118.342021, + 33.767125 + ], + [ + -118.34209, + 33.767091 + ], + [ + -118.342008, + 33.767006 + ], + [ + -118.341845, + 33.767036 + ], + [ + -118.341595, + 33.76708 + ], + [ + -118.341547, + 33.76701 + ], + [ + -118.341404, + 33.76701 + ], + [ + -118.341379, + 33.767123 + ], + [ + -118.341309, + 33.767192 + ], + [ + -118.340711, + 33.767015 + ], + [ + -118.340684, + 33.766846 + ], + [ + -118.340843, + 33.766605 + ], + [ + -118.341012, + 33.766552 + ], + [ + -118.341424, + 33.766195 + ], + [ + -118.341739, + 33.766092 + ], + [ + -118.341956, + 33.765957 + ], + [ + -118.342519, + 33.765725 + ], + [ + -118.342895, + 33.76535 + ], + [ + -118.343108, + 33.765478 + ], + [ + -118.343168, + 33.765387 + ], + [ + -118.343075, + 33.765248 + ], + [ + -118.342874, + 33.765112 + ], + [ + -118.342888, + 33.76507 + ], + [ + -118.342855, + 33.764795 + ], + [ + -118.342627, + 33.764503 + ], + [ + -118.342602, + 33.764811 + ], + [ + -118.342579, + 33.76522 + ], + [ + -118.34231, + 33.76548 + ], + [ + -118.341917, + 33.765512 + ], + [ + -118.341708, + 33.765403 + ], + [ + -118.34176, + 33.765203 + ], + [ + -118.342117, + 33.764861 + ], + [ + -118.342276, + 33.764766 + ], + [ + -118.342211, + 33.764753 + ], + [ + -118.341977, + 33.76444 + ], + [ + -118.342132, + 33.764038 + ], + [ + -118.342305, + 33.763822 + ], + [ + -118.342383, + 33.763736 + ], + [ + -118.342516, + 33.763694 + ], + [ + -118.3426, + 33.763531 + ], + [ + -118.342747, + 33.763309 + ], + [ + -118.342849, + 33.76307 + ], + [ + -118.342878, + 33.762994 + ], + [ + -118.342872, + 33.762949 + ], + [ + -118.342836, + 33.762907 + ], + [ + -118.342772, + 33.762888 + ], + [ + -118.342706, + 33.762928 + ], + [ + -118.342519, + 33.763094 + ], + [ + -118.342351, + 33.763296 + ], + [ + -118.34217, + 33.763349 + ], + [ + -118.341837, + 33.763435 + ], + [ + -118.341731, + 33.763518 + ], + [ + -118.341948, + 33.763525 + ], + [ + -118.342017, + 33.763575 + ], + [ + -118.342027, + 33.763629 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 456916326, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.356135, + 33.759074 + ], + [ + -118.356094, + 33.75944 + ], + [ + -118.356287, + 33.759616 + ], + [ + -118.356619, + 33.759693 + ], + [ + -118.356504, + 33.759821 + ], + [ + -118.356212, + 33.760017 + ], + [ + -118.356021, + 33.760231 + ], + [ + -118.355636, + 33.760493 + ], + [ + -118.355588, + 33.76068 + ], + [ + -118.355602, + 33.760924 + ], + [ + -118.355811, + 33.761554 + ], + [ + -118.35599, + 33.761477 + ], + [ + -118.356223, + 33.762063 + ], + [ + -118.356315, + 33.762039 + ], + [ + -118.3564, + 33.762405 + ], + [ + -118.356736, + 33.762378 + ], + [ + -118.356763, + 33.762881 + ], + [ + -118.356532, + 33.762886 + ], + [ + -118.35621, + 33.763466 + ], + [ + -118.355636, + 33.76329 + ], + [ + -118.355288, + 33.763781 + ], + [ + -118.35513, + 33.764387 + ], + [ + -118.355099, + 33.764554 + ], + [ + -118.355191, + 33.764991 + ], + [ + -118.355357, + 33.76536 + ], + [ + -118.355477, + 33.765336 + ], + [ + -118.355429, + 33.765693 + ], + [ + -118.35532, + 33.765904 + ], + [ + -118.355182, + 33.76607 + ], + [ + -118.355309, + 33.766156 + ], + [ + -118.355196, + 33.766451 + ], + [ + -118.355053, + 33.766632 + ], + [ + -118.354841, + 33.767015 + ], + [ + -118.35481, + 33.76723 + ], + [ + -118.354641, + 33.767229 + ], + [ + -118.354544, + 33.767735 + ], + [ + -118.354427, + 33.767928 + ], + [ + -118.354159, + 33.768169 + ], + [ + -118.354057, + 33.768472 + ], + [ + -118.353951, + 33.76869 + ], + [ + -118.353653, + 33.768487 + ], + [ + -118.353347, + 33.768615 + ], + [ + -118.353256, + 33.76879 + ], + [ + -118.353064, + 33.769156 + ], + [ + -118.353074, + 33.769346 + ], + [ + -118.353038, + 33.769462 + ], + [ + -118.352857, + 33.769561 + ], + [ + -118.352591, + 33.769632 + ], + [ + -118.352607, + 33.769882 + ], + [ + -118.352138, + 33.770033 + ], + [ + -118.352031, + 33.77017 + ], + [ + -118.351956, + 33.770417 + ], + [ + -118.351754, + 33.770645 + ], + [ + -118.351462, + 33.770806 + ], + [ + -118.351282, + 33.771002 + ], + [ + -118.351094, + 33.771249 + ], + [ + -118.350789, + 33.771499 + ], + [ + -118.350621, + 33.771606 + ], + [ + -118.350461, + 33.771677 + ], + [ + -118.350196, + 33.771832 + ], + [ + -118.350113, + 33.771909 + ], + [ + -118.349978, + 33.772215 + ], + [ + -118.349909, + 33.772361 + ], + [ + -118.34986, + 33.772468 + ], + [ + -118.349927, + 33.772575 + ], + [ + -118.35016, + 33.772715 + ], + [ + -118.350109, + 33.772792 + ], + [ + -118.349527, + 33.772507 + ], + [ + -118.34932, + 33.773274 + ], + [ + -118.348988, + 33.773699 + ], + [ + -118.348887, + 33.774032 + ], + [ + -118.348861, + 33.774367 + ], + [ + -118.348937, + 33.774484 + ], + [ + -118.349086, + 33.774632 + ], + [ + -118.349188, + 33.774727 + ], + [ + -118.349413, + 33.774814 + ], + [ + -118.349541, + 33.775036 + ], + [ + -118.349272, + 33.774932 + ], + [ + -118.349065, + 33.774733 + ], + [ + -118.348847, + 33.774546 + ], + [ + -118.348748, + 33.77429 + ], + [ + -118.348737, + 33.773904 + ], + [ + -118.348723, + 33.773717 + ], + [ + -118.348632, + 33.773577 + ], + [ + -118.348476, + 33.773511 + ], + [ + -118.348332, + 33.773505 + ], + [ + -118.348122, + 33.773565 + ], + [ + -118.347993, + 33.773669 + ], + [ + -118.348265, + 33.773294 + ], + [ + -118.348428, + 33.773006 + ], + [ + -118.348589, + 33.772682 + ], + [ + -118.348747, + 33.772061 + ], + [ + -118.348368, + 33.772028 + ], + [ + -118.348576, + 33.771648 + ], + [ + -118.348744, + 33.771309 + ], + [ + -118.348625, + 33.770967 + ], + [ + -118.348993, + 33.770732 + ], + [ + -118.349553, + 33.770982 + ], + [ + -118.349928, + 33.771008 + ], + [ + -118.350531, + 33.770404 + ], + [ + -118.350593, + 33.770051 + ], + [ + -118.350778, + 33.769751 + ], + [ + -118.350997, + 33.769572 + ], + [ + -118.351185, + 33.769427 + ], + [ + -118.351377, + 33.769329 + ], + [ + -118.351859, + 33.769219 + ], + [ + -118.352233, + 33.768993 + ], + [ + -118.352244, + 33.768817 + ], + [ + -118.352102, + 33.768511 + ], + [ + -118.351866, + 33.768318 + ], + [ + -118.351665, + 33.768276 + ], + [ + -118.350958, + 33.768398 + ], + [ + -118.350454, + 33.768582 + ], + [ + -118.350449, + 33.768428 + ], + [ + -118.350636, + 33.768181 + ], + [ + -118.351351, + 33.768184 + ], + [ + -118.351697, + 33.768169 + ], + [ + -118.351769, + 33.76808 + ], + [ + -118.351781, + 33.767911 + ], + [ + -118.351645, + 33.767717 + ], + [ + -118.351329, + 33.767666 + ], + [ + -118.351112, + 33.767625 + ], + [ + -118.351237, + 33.767316 + ], + [ + -118.351375, + 33.766855 + ], + [ + -118.351441, + 33.766641 + ], + [ + -118.351448, + 33.766585 + ], + [ + -118.351723, + 33.76673 + ], + [ + -118.351722, + 33.766885 + ], + [ + -118.351547, + 33.767209 + ], + [ + -118.351573, + 33.767378 + ], + [ + -118.351845, + 33.767468 + ], + [ + -118.352235, + 33.767408 + ], + [ + -118.35233, + 33.767215 + ], + [ + -118.352416, + 33.76698 + ], + [ + -118.352271, + 33.766757 + ], + [ + -118.352224, + 33.766656 + ], + [ + -118.352274, + 33.766516 + ], + [ + -118.352299, + 33.766368 + ], + [ + -118.352295, + 33.766231 + ], + [ + -118.352557, + 33.766317 + ], + [ + -118.352834, + 33.766451 + ], + [ + -118.353063, + 33.766748 + ], + [ + -118.353125, + 33.766959 + ], + [ + -118.353049, + 33.767342 + ], + [ + -118.353075, + 33.767673 + ], + [ + -118.353125, + 33.767798 + ], + [ + -118.353067, + 33.76802 + ], + [ + -118.353342, + 33.768003 + ], + [ + -118.353801, + 33.767833 + ], + [ + -118.353991, + 33.767649 + ], + [ + -118.354118, + 33.767274 + ], + [ + -118.354109, + 33.767004 + ], + [ + -118.354194, + 33.766415 + ], + [ + -118.354184, + 33.76632 + ], + [ + -118.354004, + 33.766234 + ], + [ + -118.353876, + 33.766163 + ], + [ + -118.35383, + 33.765907 + ], + [ + -118.35383, + 33.765565 + ], + [ + -118.353861, + 33.765413 + ], + [ + -118.353603, + 33.765291 + ], + [ + -118.353698, + 33.765244 + ], + [ + -118.353989, + 33.765425 + ], + [ + -118.35409, + 33.765416 + ], + [ + -118.35418, + 33.765404 + ], + [ + -118.354277, + 33.765553 + ], + [ + -118.354232, + 33.765975 + ], + [ + -118.354316, + 33.766165 + ], + [ + -118.354295, + 33.766329 + ], + [ + -118.354309, + 33.766552 + ], + [ + -118.354416, + 33.766692 + ], + [ + -118.354755, + 33.766685 + ], + [ + -118.354953, + 33.766486 + ], + [ + -118.355064, + 33.766097 + ], + [ + -118.355137, + 33.765785 + ], + [ + -118.354989, + 33.765761 + ], + [ + -118.354776, + 33.76536 + ], + [ + -118.354544, + 33.765122 + ], + [ + -118.354438, + 33.765051 + ], + [ + -118.35434, + 33.764988 + ], + [ + -118.354251, + 33.76491 + ], + [ + -118.354273, + 33.764727 + ], + [ + -118.354366, + 33.76437 + ], + [ + -118.354234, + 33.764319 + ], + [ + -118.354258, + 33.764075 + ], + [ + -118.354338, + 33.763844 + ], + [ + -118.354352, + 33.763624 + ], + [ + -118.354227, + 33.763255 + ], + [ + -118.354874, + 33.7633 + ], + [ + -118.355055, + 33.763213 + ], + [ + -118.355618, + 33.763068 + ], + [ + -118.355833, + 33.762634 + ], + [ + -118.354597, + 33.762515 + ], + [ + -118.354588, + 33.762928 + ], + [ + -118.35423, + 33.762999 + ], + [ + -118.354037, + 33.762922 + ], + [ + -118.353758, + 33.762622 + ], + [ + -118.35325, + 33.762321 + ], + [ + -118.353011, + 33.762271 + ], + [ + -118.352033, + 33.762538 + ], + [ + -118.352087, + 33.763017 + ], + [ + -118.352521, + 33.763621 + ], + [ + -118.353156, + 33.764093 + ], + [ + -118.353476, + 33.76404 + ], + [ + -118.353796, + 33.764539 + ], + [ + -118.353782, + 33.764604 + ], + [ + -118.353583, + 33.764563 + ], + [ + -118.352911, + 33.764429 + ], + [ + -118.352399, + 33.764105 + ], + [ + -118.352156, + 33.763989 + ], + [ + -118.351661, + 33.764144 + ], + [ + -118.35123, + 33.764108 + ], + [ + -118.350778, + 33.763638 + ], + [ + -118.351511, + 33.763531 + ], + [ + -118.351501, + 33.76321 + ], + [ + -118.351255, + 33.762982 + ], + [ + -118.350359, + 33.762981 + ], + [ + -118.350342, + 33.762663 + ], + [ + -118.35084, + 33.762402 + ], + [ + -118.351001, + 33.762226 + ], + [ + -118.35091, + 33.762045 + ], + [ + -118.350604, + 33.761914 + ], + [ + -118.350296, + 33.761899 + ], + [ + -118.350231, + 33.761789 + ], + [ + -118.350221, + 33.761534 + ], + [ + -118.350396, + 33.761667 + ], + [ + -118.350568, + 33.761748 + ], + [ + -118.350778, + 33.761599 + ], + [ + -118.350847, + 33.761468 + ], + [ + -118.350592, + 33.76098 + ], + [ + -118.350331, + 33.760433 + ], + [ + -118.350221, + 33.759955 + ], + [ + -118.34997, + 33.759628 + ], + [ + -118.349816, + 33.759205 + ], + [ + -118.34971, + 33.759134 + ], + [ + -118.349394, + 33.75911 + ], + [ + -118.349399, + 33.759188 + ], + [ + -118.349199, + 33.759179 + ], + [ + -118.349048, + 33.758819 + ], + [ + -118.349029, + 33.758554 + ], + [ + -118.349262, + 33.758474 + ], + [ + -118.34958, + 33.757814 + ], + [ + -118.349499, + 33.757701 + ], + [ + -118.349889, + 33.757386 + ], + [ + -118.350263, + 33.757047 + ], + [ + -118.350486, + 33.756598 + ], + [ + -118.350597, + 33.756009 + ], + [ + -118.350846, + 33.756342 + ], + [ + -118.351189, + 33.756556 + ], + [ + -118.351161, + 33.757088 + ], + [ + -118.350983, + 33.758061 + ], + [ + -118.350735, + 33.758156 + ], + [ + -118.350479, + 33.758444 + ], + [ + -118.350489, + 33.758751 + ], + [ + -118.350782, + 33.759181 + ], + [ + -118.350951, + 33.759265 + ], + [ + -118.350771, + 33.759589 + ], + [ + -118.350808, + 33.759901 + ], + [ + -118.351037, + 33.760092 + ], + [ + -118.351179, + 33.760534 + ], + [ + -118.351201, + 33.76093 + ], + [ + -118.351469, + 33.761046 + ], + [ + -118.35163, + 33.76099 + ], + [ + -118.351829, + 33.760716 + ], + [ + -118.351906, + 33.760627 + ], + [ + -118.352184, + 33.760748 + ], + [ + -118.352309, + 33.760442 + ], + [ + -118.352191, + 33.76032 + ], + [ + -118.352292, + 33.759827 + ], + [ + -118.352588, + 33.759482 + ], + [ + -118.3524, + 33.759081 + ], + [ + -118.352231, + 33.759054 + ], + [ + -118.352146, + 33.758495 + ], + [ + -118.352133, + 33.758251 + ], + [ + -118.351501, + 33.757808 + ], + [ + -118.351486, + 33.757487 + ], + [ + -118.351679, + 33.75713 + ], + [ + -118.351944, + 33.756853 + ], + [ + -118.352292, + 33.756354 + ], + [ + -118.353651, + 33.756976 + ], + [ + -118.353567, + 33.757115 + ], + [ + -118.35266, + 33.756699 + ], + [ + -118.352502, + 33.756862 + ], + [ + -118.352664, + 33.757181 + ], + [ + -118.352337, + 33.757549 + ], + [ + -118.353075, + 33.757665 + ], + [ + -118.353172, + 33.757924 + ], + [ + -118.352702, + 33.758084 + ], + [ + -118.352574, + 33.75837 + ], + [ + -118.352764, + 33.758673 + ], + [ + -118.353153, + 33.758813 + ], + [ + -118.353558, + 33.758899 + ], + [ + -118.353773, + 33.759122 + ], + [ + -118.353111, + 33.759476 + ], + [ + -118.353281, + 33.760047 + ], + [ + -118.35363, + 33.760659 + ], + [ + -118.353265, + 33.761091 + ], + [ + -118.353826, + 33.761394 + ], + [ + -118.353662, + 33.761831 + ], + [ + -118.3536, + 33.762039 + ], + [ + -118.353987, + 33.762152 + ], + [ + -118.354466, + 33.762214 + ], + [ + -118.35486, + 33.762155 + ], + [ + -118.355067, + 33.762104 + ], + [ + -118.354699, + 33.761819 + ], + [ + -118.354547, + 33.76173 + ], + [ + -118.354588, + 33.761697 + ], + [ + -118.354833, + 33.761801 + ], + [ + -118.355019, + 33.761789 + ], + [ + -118.355144, + 33.761727 + ], + [ + -118.355149, + 33.761507 + ], + [ + -118.355123, + 33.761192 + ], + [ + -118.355035, + 33.761209 + ], + [ + -118.354931, + 33.761308 + ], + [ + -118.354612, + 33.76129 + ], + [ + -118.354301, + 33.761346 + ], + [ + -118.354161, + 33.761302 + ], + [ + -118.354204, + 33.761153 + ], + [ + -118.354373, + 33.760796 + ], + [ + -118.354402, + 33.760484 + ], + [ + -118.35428, + 33.760112 + ], + [ + -118.354004, + 33.759164 + ], + [ + -118.353837, + 33.758923 + ], + [ + -118.353858, + 33.7587 + ], + [ + -118.354114, + 33.758828 + ], + [ + -118.354494, + 33.758296 + ], + [ + -118.354218, + 33.758171 + ], + [ + -118.354512, + 33.758123 + ], + [ + -118.354717, + 33.758058 + ], + [ + -118.35527, + 33.758554 + ], + [ + -118.35576, + 33.758379 + ], + [ + -118.356165, + 33.758995 + ], + [ + -118.356135, + 33.759074 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 457290944, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.345349, + 33.752705 + ], + [ + -118.345542, + 33.752764 + ], + [ + -118.345256, + 33.753312 + ], + [ + -118.345321, + 33.753627 + ], + [ + -118.345342, + 33.753865 + ], + [ + -118.345177, + 33.75412 + ], + [ + -118.345056, + 33.754459 + ], + [ + -118.345177, + 33.754917 + ], + [ + -118.345549, + 33.755114 + ], + [ + -118.345557, + 33.755435 + ], + [ + -118.345384, + 33.755809 + ], + [ + -118.345127, + 33.755933 + ], + [ + -118.344855, + 33.75594 + ], + [ + -118.34472, + 33.755899 + ], + [ + -118.34449, + 33.756374 + ], + [ + -118.344454, + 33.756516 + ], + [ + -118.34419, + 33.756725 + ], + [ + -118.344061, + 33.756927 + ], + [ + -118.343846, + 33.757396 + ], + [ + -118.34346, + 33.758312 + ], + [ + -118.343819, + 33.758224 + ], + [ + -118.344519, + 33.757783 + ], + [ + -118.34497, + 33.757605 + ], + [ + -118.345256, + 33.757362 + ], + [ + -118.345449, + 33.757338 + ], + [ + -118.345241, + 33.7577 + ], + [ + -118.344876, + 33.758009 + ], + [ + -118.344375, + 33.758241 + ], + [ + -118.344161, + 33.758592 + ], + [ + -118.344018, + 33.75877 + ], + [ + -118.344133, + 33.75936 + ], + [ + -118.343976, + 33.759336 + ], + [ + -118.343868, + 33.759335 + ], + [ + -118.343846, + 33.758818 + ], + [ + -118.343345, + 33.759061 + ], + [ + -118.34301, + 33.758943 + ], + [ + -118.342902, + 33.75915 + ], + [ + -118.342659, + 33.759335 + ], + [ + -118.34231, + 33.759639 + ], + [ + -118.342015, + 33.759692 + ], + [ + -118.341614, + 33.759894 + ], + [ + -118.341352, + 33.760174 + ], + [ + -118.34143, + 33.760287 + ], + [ + -118.340929, + 33.760608 + ], + [ + -118.3406, + 33.760234 + ], + [ + -118.339984, + 33.760191 + ], + [ + -118.339555, + 33.759888 + ], + [ + -118.339327, + 33.759502 + ], + [ + -118.339492, + 33.758717 + ], + [ + -118.339512, + 33.758342 + ], + [ + -118.339433, + 33.758009 + ], + [ + -118.340579, + 33.757724 + ], + [ + -118.340608, + 33.757938 + ], + [ + -118.340213, + 33.758068 + ], + [ + -118.340035, + 33.758462 + ], + [ + -118.339849, + 33.759228 + ], + [ + -118.34002, + 33.75965 + ], + [ + -118.340349, + 33.759793 + ], + [ + -118.34095, + 33.759686 + ], + [ + -118.341473, + 33.759288 + ], + [ + -118.342023, + 33.758972 + ], + [ + -118.342252, + 33.758782 + ], + [ + -118.342267, + 33.758569 + ], + [ + -118.341995, + 33.758462 + ], + [ + -118.341958, + 33.758247 + ], + [ + -118.342245, + 33.757909 + ], + [ + -118.342546, + 33.758039 + ], + [ + -118.342638, + 33.757944 + ], + [ + -118.342545, + 33.757735 + ], + [ + -118.342817, + 33.757551 + ], + [ + -118.343039, + 33.757308 + ], + [ + -118.343667, + 33.756808 + ], + [ + -118.343903, + 33.756594 + ], + [ + -118.343617, + 33.756308 + ], + [ + -118.343804, + 33.755892 + ], + [ + -118.344155, + 33.754924 + ], + [ + -118.344077, + 33.754757 + ], + [ + -118.344304, + 33.754572 + ], + [ + -118.343254, + 33.753407 + ], + [ + -118.343617, + 33.753258 + ], + [ + -118.344012, + 33.753621 + ], + [ + -118.344706, + 33.753716 + ], + [ + -118.344863, + 33.753758 + ], + [ + -118.345135, + 33.753347 + ], + [ + -118.345135, + 33.753175 + ], + [ + -118.345349, + 33.752705 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 457290945, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.339949, + 33.755465 + ], + [ + -118.340008, + 33.755363 + ], + [ + -118.340083, + 33.755274 + ], + [ + -118.340174, + 33.75519 + ], + [ + -118.340292, + 33.755048 + ], + [ + -118.340088, + 33.754953 + ], + [ + -118.339895, + 33.754819 + ], + [ + -118.339836, + 33.754717 + ], + [ + -118.339842, + 33.754605 + ], + [ + -118.339868, + 33.754494 + ], + [ + -118.339992, + 33.754297 + ], + [ + -118.340024, + 33.753963 + ], + [ + -118.340045, + 33.753856 + ], + [ + -118.340008, + 33.753749 + ], + [ + -118.339927, + 33.75366 + ], + [ + -118.339956, + 33.753538 + ], + [ + -118.340343, + 33.753532 + ], + [ + -118.340844, + 33.753288 + ], + [ + -118.341008, + 33.75305 + ], + [ + -118.341124, + 33.752787 + ], + [ + -118.340882, + 33.752705 + ], + [ + -118.340818, + 33.752612 + ], + [ + -118.340829, + 33.7525 + ], + [ + -118.340904, + 33.752411 + ], + [ + -118.34099, + 33.752326 + ], + [ + -118.341129, + 33.752313 + ], + [ + -118.341263, + 33.752282 + ], + [ + -118.341344, + 33.752201 + ], + [ + -118.34144, + 33.752125 + ], + [ + -118.341574, + 33.752108 + ], + [ + -118.341816, + 33.752005 + ], + [ + -118.341955, + 33.751992 + ], + [ + -118.342062, + 33.75192 + ], + [ + -118.342078, + 33.75184 + ], + [ + -118.341741, + 33.751608 + ], + [ + -118.341805, + 33.751505 + ], + [ + -118.341918, + 33.751452 + ], + [ + -118.342009, + 33.751376 + ], + [ + -118.342052, + 33.751273 + ], + [ + -118.342041, + 33.751166 + ], + [ + -118.341993, + 33.751024 + ], + [ + -118.341939, + 33.750926 + ], + [ + -118.341902, + 33.750819 + ], + [ + -118.341928, + 33.750703 + ], + [ + -118.342009, + 33.750618 + ], + [ + -118.342138, + 33.750596 + ], + [ + -118.342234, + 33.75052 + ], + [ + -118.342245, + 33.750413 + ], + [ + -118.342336, + 33.750332 + ], + [ + -118.342459, + 33.750372 + ], + [ + -118.342577, + 33.750426 + ], + [ + -118.342636, + 33.750328 + ], + [ + -118.342465, + 33.749815 + ], + [ + -118.342288, + 33.748758 + ], + [ + -118.340904, + 33.748869 + ], + [ + -118.340652, + 33.74944 + ], + [ + -118.340925, + 33.749476 + ], + [ + -118.341038, + 33.749534 + ], + [ + -118.341118, + 33.749761 + ], + [ + -118.341322, + 33.749793 + ], + [ + -118.341429, + 33.749864 + ], + [ + -118.341429, + 33.749975 + ], + [ + -118.341344, + 33.750056 + ], + [ + -118.341215, + 33.750051 + ], + [ + -118.340979, + 33.74994 + ], + [ + -118.34085, + 33.749913 + ], + [ + -118.340721, + 33.749944 + ], + [ + -118.340609, + 33.750007 + ], + [ + -118.340523, + 33.750087 + ], + [ + -118.340501, + 33.750194 + ], + [ + -118.340544, + 33.750301 + ], + [ + -118.340641, + 33.750381 + ], + [ + -118.340775, + 33.750399 + ], + [ + -118.340909, + 33.75043 + ], + [ + -118.341043, + 33.750448 + ], + [ + -118.341177, + 33.750479 + ], + [ + -118.341301, + 33.750538 + ], + [ + -118.341403, + 33.750609 + ], + [ + -118.341472, + 33.750703 + ], + [ + -118.34144, + 33.75081 + ], + [ + -118.341311, + 33.750805 + ], + [ + -118.341081, + 33.75068 + ], + [ + -118.340957, + 33.750636 + ], + [ + -118.340834, + 33.750613 + ], + [ + -118.3407, + 33.750609 + ], + [ + -118.340582, + 33.750644 + ], + [ + -118.340485, + 33.75072 + ], + [ + -118.340453, + 33.750939 + ], + [ + -118.340416, + 33.751041 + ], + [ + -118.340292, + 33.751198 + ], + [ + -118.340206, + 33.751278 + ], + [ + -118.34011, + 33.751345 + ], + [ + -118.340051, + 33.751443 + ], + [ + -118.339938, + 33.751496 + ], + [ + -118.339804, + 33.75151 + ], + [ + -118.339745, + 33.751728 + ], + [ + -118.339664, + 33.751818 + ], + [ + -118.339536, + 33.751809 + ], + [ + -118.339398, + 33.751777 + ], + [ + -118.339091, + 33.751885 + ], + [ + -118.339111, + 33.752176 + ], + [ + -118.338761, + 33.752247 + ], + [ + -118.339206, + 33.753038 + ], + [ + -118.338432, + 33.753567 + ], + [ + -118.33809, + 33.753776 + ], + [ + -118.337983, + 33.754121 + ], + [ + -118.337948, + 33.754327 + ], + [ + -118.337809, + 33.754417 + ], + [ + -118.338232, + 33.75456 + ], + [ + -118.337784, + 33.755087 + ], + [ + -118.338092, + 33.755169 + ], + [ + -118.337711, + 33.75553 + ], + [ + -118.337217, + 33.756012 + ], + [ + -118.337445, + 33.755999 + ], + [ + -118.337754, + 33.755934 + ], + [ + -118.338104, + 33.755756 + ], + [ + -118.338383, + 33.755702 + ], + [ + -118.338632, + 33.755779 + ], + [ + -118.338741, + 33.75597 + ], + [ + -118.338747, + 33.756118 + ], + [ + -118.338618, + 33.756397 + ], + [ + -118.338797, + 33.756457 + ], + [ + -118.338876, + 33.756374 + ], + [ + -118.339204, + 33.755804 + ], + [ + -118.33943, + 33.755797 + ], + [ + -118.339677, + 33.755454 + ], + [ + -118.339949, + 33.755465 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 457294081, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.307685, + 33.749444 + ], + [ + -118.307688, + 33.749643 + ], + [ + -118.307377, + 33.749646 + ], + [ + -118.307374, + 33.749446 + ], + [ + -118.307685, + 33.749444 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461760267, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.280362, + 33.737628 + ], + [ + -118.280346, + 33.737661 + ], + [ + -118.280315, + 33.737673 + ], + [ + -118.280195, + 33.737658 + ], + [ + -118.280106, + 33.737654 + ], + [ + -118.280048, + 33.737619 + ], + [ + -118.280036, + 33.73756 + ], + [ + -118.280092, + 33.732282 + ], + [ + -118.280178, + 33.732287 + ], + [ + -118.280204, + 33.732316 + ], + [ + -118.280257, + 33.732327 + ], + [ + -118.280266, + 33.732431 + ], + [ + -118.280307, + 33.73248 + ], + [ + -118.280383, + 33.732488 + ], + [ + -118.280362, + 33.737628 + ] + ] + ] + }, + "properties": { + "name": "San Pedro Plaza Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461762196, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.294641, + 33.758772 + ], + [ + -118.294469, + 33.757822 + ], + [ + -118.295856, + 33.757813 + ], + [ + -118.295969, + 33.757797 + ], + [ + -118.296103, + 33.757766 + ], + [ + -118.296234, + 33.757723 + ], + [ + -118.296824, + 33.757723 + ], + [ + -118.296832, + 33.757748 + ], + [ + -118.296814, + 33.757775 + ], + [ + -118.296221, + 33.758049 + ], + [ + -118.295981, + 33.758212 + ], + [ + -118.295813, + 33.758326 + ], + [ + -118.295649, + 33.758437 + ], + [ + -118.295349, + 33.75858 + ], + [ + -118.295113, + 33.758671 + ], + [ + -118.294856, + 33.758734 + ], + [ + -118.294641, + 33.758772 + ] + ] + ] + }, + "properties": { + "name": "Harbor Highlands Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461958433, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.236653, + 33.857942 + ], + [ + -118.236562, + 33.855952 + ], + [ + -118.234951, + 33.855995 + ], + [ + -118.23491, + 33.856003 + ], + [ + -118.234854, + 33.85605 + ], + [ + -118.235015, + 33.85793 + ], + [ + -118.235025, + 33.857953 + ], + [ + -118.235046, + 33.857972 + ], + [ + -118.235082, + 33.857986 + ], + [ + -118.235123, + 33.857987 + ], + [ + -118.235507, + 33.857977 + ], + [ + -118.236566, + 33.857943 + ], + [ + -118.236653, + 33.857942 + ] + ] + ] + }, + "properties": { + "name": "Anderson Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462662804, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.278749, + 33.771354 + ], + [ + -118.277397, + 33.770669 + ], + [ + -118.276641, + 33.770659 + ], + [ + -118.267104, + 33.771133 + ], + [ + -118.267146, + 33.771795 + ], + [ + -118.267716, + 33.771764 + ], + [ + -118.267748, + 33.772319 + ], + [ + -118.269678, + 33.772301 + ], + [ + -118.274889, + 33.772035 + ], + [ + -118.276183, + 33.771967 + ], + [ + -118.278149, + 33.771865 + ], + [ + -118.278321, + 33.771828 + ], + [ + -118.278749, + 33.771354 + ] + ] + ] + }, + "properties": { + "name": "Waterfront Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462663045, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.269904, + 33.775193 + ], + [ + -118.268605, + 33.775265 + ], + [ + -118.268379, + 33.772454 + ], + [ + -118.268372, + 33.77237 + ], + [ + -118.268502, + 33.772363 + ], + [ + -118.269678, + 33.772301 + ], + [ + -118.269762, + 33.77332 + ], + [ + -118.269797, + 33.773751 + ], + [ + -118.269904, + 33.775193 + ] + ] + ] + }, + "properties": { + "name": "Wilhall Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 464037568, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.33648, + 33.728497 + ], + [ + -118.337129, + 33.729311 + ], + [ + -118.337264, + 33.729452 + ], + [ + -118.337289, + 33.729533 + ], + [ + -118.337227, + 33.729602 + ], + [ + -118.337147, + 33.729604 + ], + [ + -118.337036, + 33.729558 + ], + [ + -118.336838, + 33.729337 + ], + [ + -118.336319, + 33.728825 + ], + [ + -118.335649, + 33.728379 + ], + [ + -118.335371, + 33.728179 + ], + [ + -118.335077, + 33.72805 + ], + [ + -118.334753, + 33.727959 + ], + [ + -118.334402, + 33.727926 + ], + [ + -118.333685, + 33.72799 + ], + [ + -118.333585, + 33.727996 + ], + [ + -118.333401, + 33.727976 + ], + [ + -118.333304, + 33.728005 + ], + [ + -118.333181, + 33.728056 + ], + [ + -118.333108, + 33.728105 + ], + [ + -118.332976, + 33.728152 + ], + [ + -118.331789, + 33.728401 + ], + [ + -118.331405, + 33.728516 + ], + [ + -118.331149, + 33.728617 + ], + [ + -118.330921, + 33.728744 + ], + [ + -118.330813, + 33.728778 + ], + [ + -118.330699, + 33.728807 + ], + [ + -118.330626, + 33.728856 + ], + [ + -118.330557, + 33.728937 + ], + [ + -118.330523, + 33.729003 + ], + [ + -118.330329, + 33.729161 + ], + [ + -118.330011, + 33.72936 + ], + [ + -118.329689, + 33.729521 + ], + [ + -118.329399, + 33.729671 + ], + [ + -118.32928, + 33.729717 + ], + [ + -118.329178, + 33.729714 + ], + [ + -118.329036, + 33.729676 + ], + [ + -118.328948, + 33.72965 + ], + [ + -118.328911, + 33.729688 + ], + [ + -118.328917, + 33.729725 + ], + [ + -118.32896, + 33.729754 + ], + [ + -118.329042, + 33.729757 + ], + [ + -118.329098, + 33.72978 + ], + [ + -118.328911, + 33.729861 + ], + [ + -118.328775, + 33.72999 + ], + [ + -118.328689, + 33.730154 + ], + [ + -118.328692, + 33.730335 + ], + [ + -118.328827, + 33.730566 + ], + [ + -118.329039, + 33.730666 + ], + [ + -118.329441, + 33.730646 + ], + [ + -118.329592, + 33.730571 + ], + [ + -118.330022, + 33.73037 + ], + [ + -118.330271, + 33.73022 + ], + [ + -118.330592, + 33.729869 + ], + [ + -118.330769, + 33.729668 + ], + [ + -118.330934, + 33.729584 + ], + [ + -118.331093, + 33.729576 + ], + [ + -118.331266, + 33.729639 + ], + [ + -118.331325, + 33.729705 + ], + [ + -118.331374, + 33.729852 + ], + [ + -118.331308, + 33.73003 + ], + [ + -118.33119, + 33.730177 + ], + [ + -118.330889, + 33.730433 + ], + [ + -118.330536, + 33.730643 + ], + [ + -118.330093, + 33.730834 + ], + [ + -118.329785, + 33.730934 + ], + [ + -118.329486, + 33.73102 + ], + [ + -118.329247, + 33.731083 + ], + [ + -118.329128, + 33.731164 + ], + [ + -118.32901, + 33.731314 + ], + [ + -118.329022, + 33.731563 + ], + [ + -118.329128, + 33.73178 + ], + [ + -118.329281, + 33.731843 + ], + [ + -118.329519, + 33.73187 + ], + [ + -118.329796, + 33.731748 + ], + [ + -118.330253, + 33.731595 + ], + [ + -118.330645, + 33.731466 + ], + [ + -118.330966, + 33.731279 + ], + [ + -118.331128, + 33.731173 + ], + [ + -118.331194, + 33.731075 + ], + [ + -118.331602, + 33.730753 + ], + [ + -118.331942, + 33.73049 + ], + [ + -118.33217, + 33.730427 + ], + [ + -118.332336, + 33.730401 + ], + [ + -118.332647, + 33.730482 + ], + [ + -118.333298, + 33.73081 + ], + [ + -118.334044, + 33.731373 + ], + [ + -118.334387, + 33.731641 + ], + [ + -118.334487, + 33.731776 + ], + [ + -118.33457, + 33.73192 + ], + [ + -118.334297, + 33.731633 + ], + [ + -118.333971, + 33.731408 + ], + [ + -118.333727, + 33.73184 + ], + [ + -118.333433, + 33.731757 + ], + [ + -118.333654, + 33.731187 + ], + [ + -118.333256, + 33.730994 + ], + [ + -118.333138, + 33.731589 + ], + [ + -118.333059, + 33.731592 + ], + [ + -118.333004, + 33.731634 + ], + [ + -118.332983, + 33.731687 + ], + [ + -118.332751, + 33.731679 + ], + [ + -118.332758, + 33.732263 + ], + [ + -118.33256, + 33.732599 + ], + [ + -118.33243, + 33.73294 + ], + [ + -118.332487, + 33.733089 + ], + [ + -118.332071, + 33.733453 + ], + [ + -118.331691, + 33.733819 + ], + [ + -118.331622, + 33.733906 + ], + [ + -118.33159, + 33.734007 + ], + [ + -118.331599, + 33.734111 + ], + [ + -118.331648, + 33.734207 + ], + [ + -118.330862, + 33.733369 + ], + [ + -118.330444, + 33.733445 + ], + [ + -118.329965, + 33.73345 + ], + [ + -118.329761, + 33.733772 + ], + [ + -118.329332, + 33.733738 + ], + [ + -118.329266, + 33.734172 + ], + [ + -118.330149, + 33.734912 + ], + [ + -118.330534, + 33.735073 + ], + [ + -118.330948, + 33.735116 + ], + [ + -118.331104, + 33.735125 + ], + [ + -118.331388, + 33.735335 + ], + [ + -118.329993, + 33.735249 + ], + [ + -118.32971, + 33.735125 + ], + [ + -118.329432, + 33.734969 + ], + [ + -118.32962, + 33.735286 + ], + [ + -118.329772, + 33.735654 + ], + [ + -118.329716, + 33.735844 + ], + [ + -118.329616, + 33.735916 + ], + [ + -118.329405, + 33.735726 + ], + [ + -118.329074, + 33.735568 + ], + [ + -118.328664, + 33.735398 + ], + [ + -118.328368, + 33.735387 + ], + [ + -118.327311, + 33.734938 + ], + [ + -118.327531, + 33.734632 + ], + [ + -118.32757, + 33.734437 + ], + [ + -118.327522, + 33.73433 + ], + [ + -118.327773, + 33.734271 + ], + [ + -118.327591, + 33.733979 + ], + [ + -118.327366, + 33.734066 + ], + [ + -118.327368, + 33.733411 + ], + [ + -118.327318, + 33.733176 + ], + [ + -118.327413, + 33.732944 + ], + [ + -118.327586, + 33.732524 + ], + [ + -118.327746, + 33.732295 + ], + [ + -118.32779, + 33.732099 + ], + [ + -118.327718, + 33.731969 + ], + [ + -118.32759, + 33.731817 + ], + [ + -118.327435, + 33.7318 + ], + [ + -118.327335, + 33.731849 + ], + [ + -118.327247, + 33.732027 + ], + [ + -118.327158, + 33.731959 + ], + [ + -118.327017, + 33.731907 + ], + [ + -118.326932, + 33.731895 + ], + [ + -118.326138, + 33.733364 + ], + [ + -118.32586, + 33.733724 + ], + [ + -118.325542, + 33.734129 + ], + [ + -118.325435, + 33.734443 + ], + [ + -118.32541, + 33.73441 + ], + [ + -118.325362, + 33.734349 + ], + [ + -118.325283, + 33.734271 + ], + [ + -118.325206, + 33.73423 + ], + [ + -118.325089, + 33.734207 + ], + [ + -118.324895, + 33.734187 + ], + [ + -118.324708, + 33.734112 + ], + [ + -118.324573, + 33.733997 + ], + [ + -118.324528, + 33.733876 + ], + [ + -118.324597, + 33.73372 + ], + [ + -118.324597, + 33.733606 + ], + [ + -118.324532, + 33.73346 + ], + [ + -118.324324, + 33.733313 + ], + [ + -118.324134, + 33.733316 + ], + [ + -118.323895, + 33.733409 + ], + [ + -118.323761, + 33.733545 + ], + [ + -118.323822, + 33.733738 + ], + [ + -118.323947, + 33.733807 + ], + [ + -118.324031, + 33.733888 + ], + [ + -118.324027, + 33.734002 + ], + [ + -118.323944, + 33.734127 + ], + [ + -118.323827, + 33.734228 + ], + [ + -118.323768, + 33.734279 + ], + [ + -118.323958, + 33.734492 + ], + [ + -118.32431, + 33.734627 + ], + [ + -118.324524, + 33.73465 + ], + [ + -118.324712, + 33.734653 + ], + [ + -118.325131, + 33.734555 + ], + [ + -118.325324, + 33.734544 + ], + [ + -118.325366, + 33.734602 + ], + [ + -118.325286, + 33.734725 + ], + [ + -118.322355, + 33.734748 + ], + [ + -118.322284, + 33.734782 + ], + [ + -118.319094, + 33.734817 + ], + [ + -118.317641, + 33.734788 + ], + [ + -118.317651, + 33.73501 + ], + [ + -118.317786, + 33.735179 + ], + [ + -118.31798, + 33.735473 + ], + [ + -118.317803, + 33.735493 + ], + [ + -118.317603, + 33.735056 + ], + [ + -118.317551, + 33.734777 + ], + [ + -118.317468, + 33.734282 + ], + [ + -118.317305, + 33.733514 + ], + [ + -118.317316, + 33.732883 + ], + [ + -118.317509, + 33.732576 + ], + [ + -118.317842, + 33.7322 + ], + [ + -118.31798, + 33.732154 + ], + [ + -118.318039, + 33.732309 + ], + [ + -118.317804, + 33.732688 + ], + [ + -118.317939, + 33.732953 + ], + [ + -118.317762, + 33.733263 + ], + [ + -118.31769, + 33.733507 + ], + [ + -118.317921, + 33.733617 + ], + [ + -118.31797, + 33.733743 + ], + [ + -118.31814, + 33.73394 + ], + [ + -118.318589, + 33.734107 + ], + [ + -118.319195, + 33.734146 + ], + [ + -118.319091, + 33.734026 + ], + [ + -118.319243, + 33.733833 + ], + [ + -118.319219, + 33.733628 + ], + [ + -118.319025, + 33.73347 + ], + [ + -118.318741, + 33.733117 + ], + [ + -118.318942, + 33.732978 + ], + [ + -118.319035, + 33.732749 + ], + [ + -118.318977, + 33.732514 + ], + [ + -118.319052, + 33.73226 + ], + [ + -118.31907, + 33.732093 + ], + [ + -118.319015, + 33.732048 + ], + [ + -118.318479, + 33.732039 + ], + [ + -118.319091, + 33.731349 + ], + [ + -118.319222, + 33.731241 + ], + [ + -118.319309, + 33.731063 + ], + [ + -118.319305, + 33.730977 + ], + [ + -118.319537, + 33.731077 + ], + [ + -118.319846, + 33.731078 + ], + [ + -118.319915, + 33.731271 + ], + [ + -118.320571, + 33.730988 + ], + [ + -118.320678, + 33.731057 + ], + [ + -118.320934, + 33.730934 + ], + [ + -118.320934, + 33.730683 + ], + [ + -118.320905, + 33.730448 + ], + [ + -118.320931, + 33.729651 + ], + [ + -118.32095, + 33.729412 + ], + [ + -118.322933, + 33.72944 + ], + [ + -118.32322, + 33.729518 + ], + [ + -118.32367, + 33.729458 + ], + [ + -118.323808, + 33.729368 + ], + [ + -118.324179, + 33.729472 + ], + [ + -118.324559, + 33.729452 + ], + [ + -118.324964, + 33.729426 + ], + [ + -118.326272, + 33.729446 + ], + [ + -118.326176, + 33.729124 + ], + [ + -118.326034, + 33.728934 + ], + [ + -118.325902, + 33.728548 + ], + [ + -118.32578, + 33.727792 + ], + [ + -118.32576, + 33.727572 + ], + [ + -118.325778, + 33.727385 + ], + [ + -118.325794, + 33.727283 + ], + [ + -118.325839, + 33.727251 + ], + [ + -118.326376, + 33.727299 + ], + [ + -118.331672, + 33.727719 + ], + [ + -118.33208, + 33.727693 + ], + [ + -118.332737, + 33.727595 + ], + [ + -118.333091, + 33.727495 + ], + [ + -118.333586, + 33.727423 + ], + [ + -118.334004, + 33.72742 + ], + [ + -118.334437, + 33.727448 + ], + [ + -118.334876, + 33.727561 + ], + [ + -118.335405, + 33.727731 + ], + [ + -118.336015, + 33.728062 + ], + [ + -118.336269, + 33.728278 + ], + [ + -118.33648, + 33.728497 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469604405, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.371091, + 33.909571 + ], + [ + -118.370726, + 33.909563 + ], + [ + -118.370824, + 33.913049 + ], + [ + -118.370949, + 33.914439 + ], + [ + -118.370978, + 33.914815 + ], + [ + -118.37117, + 33.914807 + ], + [ + -118.371238, + 33.914647 + ], + [ + -118.371324, + 33.914607 + ], + [ + -118.371401, + 33.914463 + ], + [ + -118.371228, + 33.914304 + ], + [ + -118.37119, + 33.914248 + ], + [ + -118.371143, + 33.910572 + ], + [ + -118.371143, + 33.910028 + ], + [ + -118.371143, + 33.909616 + ], + [ + -118.371091, + 33.909571 + ] + ] + ] + }, + "properties": { + "name": "Glasgow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469609936, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.424972, + 33.931211 + ], + [ + -118.424972, + 33.930904 + ], + [ + -118.422075, + 33.930915 + ], + [ + -118.418669, + 33.930922 + ], + [ + -118.417309, + 33.930929 + ], + [ + -118.416381, + 33.93096 + ], + [ + -118.416456, + 33.931018 + ], + [ + -118.416442, + 33.931102 + ], + [ + -118.416418, + 33.931173 + ], + [ + -118.416381, + 33.931211 + ], + [ + -118.416799, + 33.931236 + ], + [ + -118.424972, + 33.931211 + ] + ] + ] + }, + "properties": { + "name": "Imperial Strip and Memory Tree Row", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474052723, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.301414, + 33.822327 + ], + [ + -118.299518, + 33.822342 + ], + [ + -118.299505, + 33.823345 + ], + [ + -118.299623, + 33.823584 + ], + [ + -118.299625, + 33.823967 + ], + [ + -118.301455, + 33.823949 + ], + [ + -118.301414, + 33.822327 + ] + ] + ] + }, + "properties": { + "name": "Normandale Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 476883679, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.313543, + 33.860985 + ], + [ + -118.315799, + 33.861886 + ], + [ + -118.313559, + 33.861893 + ], + [ + -118.313543, + 33.860985 + ] + ] + ] + }, + "properties": { + "name": "La Carretera Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 479634172, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.389266, + 33.882925 + ], + [ + -118.388923, + 33.882922 + ], + [ + -118.38892, + 33.882854 + ], + [ + -118.389722, + 33.882852 + ], + [ + -118.389775, + 33.882898 + ], + [ + -118.389778, + 33.88365 + ], + [ + -118.389712, + 33.883712 + ], + [ + -118.388721, + 33.883713 + ], + [ + -118.388755, + 33.883646 + ], + [ + -118.389034, + 33.883656 + ], + [ + -118.389102, + 33.883606 + ], + [ + -118.389274, + 33.883512 + ], + [ + -118.389351, + 33.883506 + ], + [ + -118.389434, + 33.883482 + ], + [ + -118.389513, + 33.883419 + ], + [ + -118.389565, + 33.883357 + ], + [ + -118.389588, + 33.883274 + ], + [ + -118.389562, + 33.883152 + ], + [ + -118.38949, + 33.883086 + ], + [ + -118.38938, + 33.883031 + ], + [ + -118.389265, + 33.883012 + ], + [ + -118.389266, + 33.882925 + ] + ] + ] + }, + "properties": { + "name": "Water Tower Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 481878509, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.291518, + 33.896811 + ], + [ + -118.291566, + 33.894469 + ], + [ + -118.28927, + 33.895213 + ], + [ + -118.289228, + 33.896415 + ], + [ + -118.289753, + 33.896633 + ], + [ + -118.290097, + 33.896735 + ], + [ + -118.290309, + 33.896756 + ], + [ + -118.290563, + 33.89678 + ], + [ + -118.290707, + 33.896785 + ], + [ + -118.291518, + 33.896811 + ] + ] + ] + }, + "properties": { + "name": "Rosecrans Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 481878514, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.290161, + 33.896281 + ], + [ + -118.290016, + 33.896281 + ], + [ + -118.289839, + 33.896241 + ], + [ + -118.289748, + 33.896304 + ], + [ + -118.289742, + 33.896388 + ], + [ + -118.289753, + 33.896451 + ], + [ + -118.289796, + 33.896473 + ], + [ + -118.289839, + 33.896468 + ], + [ + -118.289903, + 33.896495 + ], + [ + -118.289979, + 33.896428 + ], + [ + -118.290075, + 33.896415 + ], + [ + -118.290139, + 33.896397 + ], + [ + -118.290161, + 33.896281 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 482619276, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.291137, + 33.873536 + ], + [ + -118.291184, + 33.874643 + ], + [ + -118.291361, + 33.874642 + ], + [ + -118.291443, + 33.874671 + ], + [ + -118.291762, + 33.874675 + ], + [ + -118.291975, + 33.874785 + ], + [ + -118.292178, + 33.874792 + ], + [ + -118.292182, + 33.875275 + ], + [ + -118.292226, + 33.875405 + ], + [ + -118.293597, + 33.875378 + ], + [ + -118.293622, + 33.875245 + ], + [ + -118.29464, + 33.875199 + ], + [ + -118.294634, + 33.875189 + ], + [ + -118.29453, + 33.875001 + ], + [ + -118.294485, + 33.874803 + ], + [ + -118.29524, + 33.874548 + ], + [ + -118.295414, + 33.87454 + ], + [ + -118.295397, + 33.874118 + ], + [ + -118.294481, + 33.8741 + ], + [ + -118.294287, + 33.873955 + ], + [ + -118.294291, + 33.873899 + ], + [ + -118.293094, + 33.873778 + ], + [ + -118.293101, + 33.873566 + ], + [ + -118.291137, + 33.873536 + ] + ] + ] + }, + "properties": { + "name": "South Gardena Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 482889163, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.390494, + 33.829501 + ], + [ + -118.390608, + 33.829505 + ], + [ + -118.390617, + 33.829319 + ], + [ + -118.390503, + 33.829315 + ], + [ + -118.390494, + 33.829501 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 482889164, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.390538, + 33.829197 + ], + [ + -118.390653, + 33.8292 + ], + [ + -118.390661, + 33.829015 + ], + [ + -118.390547, + 33.829011 + ], + [ + -118.390538, + 33.829197 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 482889166, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.390734, + 33.827284 + ], + [ + -118.390849, + 33.82728 + ], + [ + -118.390839, + 33.827094 + ], + [ + -118.390725, + 33.827098 + ], + [ + -118.390734, + 33.827284 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486292092, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.353999, + 33.791014 + ], + [ + -118.350328, + 33.793071 + ], + [ + -118.349762, + 33.793555 + ], + [ + -118.349556, + 33.793912 + ], + [ + -118.351061, + 33.7952 + ], + [ + -118.354664, + 33.795211 + ], + [ + -118.353999, + 33.791014 + ] + ] + ] + }, + "properties": { + "name": "Ernie J Howlett Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486645193, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.336333, + 33.872082 + ], + [ + -118.336332, + 33.871756 + ], + [ + -118.336163, + 33.871757 + ], + [ + -118.336164, + 33.872082 + ], + [ + -118.336333, + 33.872082 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486645195, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.337264, + 33.871882 + ], + [ + -118.337254, + 33.871509 + ], + [ + -118.33724, + 33.871476 + ], + [ + -118.337213, + 33.871454 + ], + [ + -118.337173, + 33.871442 + ], + [ + -118.336707, + 33.871434 + ], + [ + -118.336711, + 33.871886 + ], + [ + -118.337264, + 33.871882 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486689152, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.359066, + 33.938094 + ], + [ + -118.358685, + 33.938096 + ], + [ + -118.357593, + 33.938101 + ], + [ + -118.357647, + 33.937411 + ], + [ + -118.357886, + 33.937315 + ], + [ + -118.357927, + 33.937289 + ], + [ + -118.35802, + 33.937136 + ], + [ + -118.358024, + 33.936966 + ], + [ + -118.358075, + 33.936778 + ], + [ + -118.358204, + 33.936685 + ], + [ + -118.358606, + 33.936686 + ], + [ + -118.358591, + 33.936511 + ], + [ + -118.359073, + 33.936511 + ], + [ + -118.359071, + 33.936866 + ], + [ + -118.359032, + 33.93727 + ], + [ + -118.359066, + 33.938094 + ] + ] + ] + }, + "properties": { + "name": "Lennox Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486822204, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.303827, + 33.841569 + ], + [ + -118.303507, + 33.841687 + ], + [ + -118.303503, + 33.841547 + ], + [ + -118.303826, + 33.841542 + ], + [ + -118.303827, + 33.841569 + ] + ] + ] + }, + "properties": { + "name": "Janet Shour Pocket Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486828815, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.325079, + 33.846668 + ], + [ + -118.324408, + 33.846671 + ], + [ + -118.324404, + 33.846411 + ], + [ + -118.325083, + 33.846413 + ], + [ + -118.325079, + 33.846668 + ] + ] + ] + }, + "properties": { + "name": "Pueblo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487045910, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.262422, + 33.848804 + ], + [ + -118.262399, + 33.848845 + ], + [ + -118.26236, + 33.848878 + ], + [ + -118.262311, + 33.848898 + ], + [ + -118.262257, + 33.848905 + ], + [ + -118.262203, + 33.848896 + ], + [ + -118.262154, + 33.848873 + ], + [ + -118.262118, + 33.848838 + ], + [ + -118.262097, + 33.848795 + ], + [ + -118.262095, + 33.848749 + ], + [ + -118.26211, + 33.848705 + ], + [ + -118.262142, + 33.848667 + ], + [ + -118.262188, + 33.84864 + ], + [ + -118.262241, + 33.848627 + ], + [ + -118.262296, + 33.848629 + ], + [ + -118.262347, + 33.848646 + ], + [ + -118.262389, + 33.848675 + ], + [ + -118.262417, + 33.848714 + ], + [ + -118.262428, + 33.848759 + ], + [ + -118.262422, + 33.848804 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487081108, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.313489, + 33.867793 + ], + [ + -118.312408, + 33.867782 + ], + [ + -118.312413, + 33.869316 + ], + [ + -118.312242, + 33.869321 + ], + [ + -118.312236, + 33.869617 + ], + [ + -118.312411, + 33.869619 + ], + [ + -118.312413, + 33.870601 + ], + [ + -118.313491, + 33.870601 + ], + [ + -118.313447, + 33.870462 + ], + [ + -118.313422, + 33.87044 + ], + [ + -118.313401, + 33.870401 + ], + [ + -118.313422, + 33.869344 + ], + [ + -118.313429, + 33.869313 + ], + [ + -118.313438, + 33.869275 + ], + [ + -118.313472, + 33.8692 + ], + [ + -118.31348, + 33.869148 + ], + [ + -118.313488, + 33.867868 + ], + [ + -118.313489, + 33.867793 + ] + ] + ] + }, + "properties": { + "name": "Guenser Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487081109, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.313124, + 33.869161 + ], + [ + -118.31293, + 33.869158 + ], + [ + -118.312937, + 33.868877 + ], + [ + -118.31313, + 33.868881 + ], + [ + -118.313124, + 33.869161 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487081110, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.312608, + 33.869577 + ], + [ + -118.312444, + 33.869578 + ], + [ + -118.312441, + 33.869347 + ], + [ + -118.312606, + 33.869346 + ], + [ + -118.312608, + 33.869577 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487179655, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.314401, + 33.803123 + ], + [ + -118.311864, + 33.803121 + ], + [ + -118.311863, + 33.803965 + ], + [ + -118.312029, + 33.803965 + ], + [ + -118.312428, + 33.803965 + ], + [ + -118.31299, + 33.803966 + ], + [ + -118.31299, + 33.804003 + ], + [ + -118.313095, + 33.804003 + ], + [ + -118.313095, + 33.804574 + ], + [ + -118.313854, + 33.804575 + ], + [ + -118.313854, + 33.804738 + ], + [ + -118.313862, + 33.804739 + ], + [ + -118.314399, + 33.804738 + ], + [ + -118.314399, + 33.804554 + ], + [ + -118.314401, + 33.803123 + ] + ] + ] + }, + "properties": { + "name": "Lomita Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 488774238, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.29475, + 33.876163 + ], + [ + -118.294766, + 33.876508 + ], + [ + -118.294771, + 33.876613 + ], + [ + -118.295819, + 33.87658 + ], + [ + -118.296559, + 33.876566 + ], + [ + -118.296548, + 33.876316 + ], + [ + -118.296522, + 33.87573 + ], + [ + -118.296511, + 33.875476 + ], + [ + -118.296495, + 33.875477 + ], + [ + -118.295515, + 33.875496 + ], + [ + -118.295492, + 33.875496 + ], + [ + -118.295486, + 33.875385 + ], + [ + -118.295357, + 33.875273 + ], + [ + -118.295338, + 33.875193 + ], + [ + -118.294707, + 33.875224 + ], + [ + -118.29475, + 33.876163 + ] + ] + ] + }, + "properties": { + "name": "Arthur Lee Johnson Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 488775903, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.30198, + 33.75213 + ], + [ + -118.302142, + 33.751984 + ], + [ + -118.302157, + 33.751958 + ], + [ + -118.302149, + 33.751931 + ], + [ + -118.302116, + 33.751923 + ], + [ + -118.301941, + 33.751937 + ], + [ + -118.301915, + 33.751897 + ], + [ + -118.301929, + 33.751871 + ], + [ + -118.301957, + 33.751854 + ], + [ + -118.302017, + 33.751828 + ], + [ + -118.302128, + 33.751761 + ], + [ + -118.302158, + 33.751746 + ], + [ + -118.302182, + 33.751725 + ], + [ + -118.302222, + 33.751684 + ], + [ + -118.302374, + 33.751586 + ], + [ + -118.30239, + 33.751561 + ], + [ + -118.302399, + 33.751534 + ], + [ + -118.302409, + 33.751479 + ], + [ + -118.302419, + 33.751454 + ], + [ + -118.302397, + 33.751441 + ], + [ + -118.302364, + 33.751436 + ], + [ + -118.302331, + 33.751445 + ], + [ + -118.302305, + 33.751462 + ], + [ + -118.302216, + 33.751549 + ], + [ + -118.302139, + 33.751606 + ], + [ + -118.302116, + 33.751626 + ], + [ + -118.302089, + 33.751644 + ], + [ + -118.302055, + 33.751647 + ], + [ + -118.30202, + 33.751645 + ], + [ + -118.301989, + 33.751637 + ], + [ + -118.301961, + 33.751624 + ], + [ + -118.301929, + 33.751617 + ], + [ + -118.301895, + 33.751612 + ], + [ + -118.301825, + 33.751616 + ], + [ + -118.30179, + 33.75162 + ], + [ + -118.301557, + 33.751627 + ], + [ + -118.301458, + 33.751612 + ], + [ + -118.301428, + 33.751598 + ], + [ + -118.301397, + 33.751589 + ], + [ + -118.301364, + 33.75159 + ], + [ + -118.301269, + 33.751587 + ], + [ + -118.301057, + 33.751567 + ], + [ + -118.301026, + 33.751558 + ], + [ + -118.301007, + 33.751547 + ], + [ + -118.300989, + 33.751524 + ], + [ + -118.300983, + 33.750644 + ], + [ + -118.300071, + 33.750646 + ], + [ + -118.300071, + 33.750357 + ], + [ + -118.300164, + 33.750356 + ], + [ + -118.300157, + 33.750319 + ], + [ + -118.300089, + 33.750299 + ], + [ + -118.300058, + 33.750271 + ], + [ + -118.300039, + 33.750222 + ], + [ + -118.299996, + 33.750215 + ], + [ + -118.300001, + 33.749974 + ], + [ + -118.299969, + 33.749973 + ], + [ + -118.299937, + 33.749978 + ], + [ + -118.29985, + 33.750014 + ], + [ + -118.299818, + 33.750064 + ], + [ + -118.299795, + 33.750085 + ], + [ + -118.299768, + 33.7501 + ], + [ + -118.299736, + 33.750109 + ], + [ + -118.299634, + 33.750113 + ], + [ + -118.29961, + 33.750094 + ], + [ + -118.299571, + 33.750048 + ], + [ + -118.299552, + 33.750025 + ], + [ + -118.299523, + 33.75001 + ], + [ + -118.299489, + 33.750002 + ], + [ + -118.299456, + 33.750002 + ], + [ + -118.299423, + 33.750009 + ], + [ + -118.299395, + 33.750023 + ], + [ + -118.299376, + 33.750045 + ], + [ + -118.299338, + 33.750071 + ], + [ + -118.299315, + 33.75009 + ], + [ + -118.299284, + 33.750103 + ], + [ + -118.299249, + 33.750109 + ], + [ + -118.29922, + 33.750121 + ], + [ + -118.299197, + 33.750142 + ], + [ + -118.299167, + 33.750155 + ], + [ + -118.299135, + 33.750157 + ], + [ + -118.2991, + 33.750157 + ], + [ + -118.299067, + 33.750166 + ], + [ + -118.299009, + 33.750192 + ], + [ + -118.298982, + 33.750208 + ], + [ + -118.298963, + 33.750232 + ], + [ + -118.298963, + 33.75026 + ], + [ + -118.29898, + 33.750287 + ], + [ + -118.29899, + 33.750313 + ], + [ + -118.298984, + 33.750341 + ], + [ + -118.298965, + 33.750363 + ], + [ + -118.298939, + 33.750384 + ], + [ + -118.29888, + 33.750411 + ], + [ + -118.298849, + 33.750418 + ], + [ + -118.298815, + 33.75042 + ], + [ + -118.298784, + 33.750433 + ], + [ + -118.298758, + 33.75045 + ], + [ + -118.298711, + 33.75051 + ], + [ + -118.298734, + 33.750533 + ], + [ + -118.298765, + 33.750545 + ], + [ + -118.298835, + 33.750556 + ], + [ + -118.298868, + 33.750565 + ], + [ + -118.298898, + 33.75058 + ], + [ + -118.298919, + 33.750605 + ], + [ + -118.298922, + 33.750633 + ], + [ + -118.298915, + 33.750661 + ], + [ + -118.29889, + 33.750714 + ], + [ + -118.298884, + 33.75074 + ], + [ + -118.298902, + 33.750794 + ], + [ + -118.298907, + 33.750822 + ], + [ + -118.298907, + 33.750852 + ], + [ + -118.2989, + 33.75088 + ], + [ + -118.298887, + 33.750906 + ], + [ + -118.298869, + 33.750932 + ], + [ + -118.298828, + 33.750977 + ], + [ + -118.298805, + 33.750996 + ], + [ + -118.298772, + 33.750997 + ], + [ + -118.298742, + 33.751009 + ], + [ + -118.298731, + 33.751037 + ], + [ + -118.298725, + 33.751064 + ], + [ + -118.298707, + 33.751088 + ], + [ + -118.298682, + 33.751106 + ], + [ + -118.29865, + 33.751112 + ], + [ + -118.29862, + 33.751122 + ], + [ + -118.298599, + 33.751144 + ], + [ + -118.29858, + 33.75117 + ], + [ + -118.298554, + 33.751185 + ], + [ + -118.298519, + 33.751183 + ], + [ + -118.298487, + 33.751176 + ], + [ + -118.298458, + 33.751168 + ], + [ + -118.29843, + 33.751154 + ], + [ + -118.298403, + 33.75114 + ], + [ + -118.298377, + 33.751122 + ], + [ + -118.29834, + 33.751079 + ], + [ + -118.298314, + 33.751061 + ], + [ + -118.298286, + 33.75105 + ], + [ + -118.298202, + 33.751043 + ], + [ + -118.29817, + 33.75105 + ], + [ + -118.298068, + 33.751041 + ], + [ + -118.297995, + 33.751039 + ], + [ + -118.29794, + 33.75107 + ], + [ + -118.297908, + 33.751069 + ], + [ + -118.297876, + 33.751077 + ], + [ + -118.297852, + 33.751096 + ], + [ + -118.297832, + 33.751117 + ], + [ + -118.297824, + 33.751144 + ], + [ + -118.297809, + 33.751171 + ], + [ + -118.29779, + 33.751192 + ], + [ + -118.297758, + 33.751194 + ], + [ + -118.297724, + 33.751192 + ], + [ + -118.297696, + 33.75118 + ], + [ + -118.297673, + 33.75116 + ], + [ + -118.297665, + 33.751099 + ], + [ + -118.297665, + 33.75107 + ], + [ + -118.297679, + 33.751015 + ], + [ + -118.297712, + 33.750934 + ], + [ + -118.29772, + 33.750908 + ], + [ + -118.297734, + 33.750883 + ], + [ + -118.297752, + 33.750859 + ], + [ + -118.297782, + 33.750844 + ], + [ + -118.297849, + 33.75083 + ], + [ + -118.297884, + 33.750825 + ], + [ + -118.29838, + 33.750835 + ], + [ + -118.298416, + 33.750836 + ], + [ + -118.298486, + 33.750837 + ], + [ + -118.298521, + 33.750833 + ], + [ + -118.298552, + 33.750823 + ], + [ + -118.298562, + 33.750798 + ], + [ + -118.298544, + 33.750776 + ], + [ + -118.298512, + 33.750765 + ], + [ + -118.298478, + 33.750763 + ], + [ + -118.298411, + 33.750763 + ], + [ + -118.298375, + 33.750758 + ], + [ + -118.298345, + 33.750748 + ], + [ + -118.298322, + 33.750728 + ], + [ + -118.298325, + 33.7507 + ], + [ + -118.298337, + 33.750675 + ], + [ + -118.298373, + 33.750629 + ], + [ + -118.298356, + 33.750549 + ], + [ + -118.298363, + 33.750478 + ], + [ + -118.298369, + 33.750452 + ], + [ + -118.298344, + 33.750433 + ], + [ + -118.298322, + 33.750433 + ], + [ + -118.298292, + 33.750444 + ], + [ + -118.298274, + 33.750466 + ], + [ + -118.298247, + 33.750482 + ], + [ + -118.298216, + 33.750487 + ], + [ + -118.298183, + 33.750486 + ], + [ + -118.298152, + 33.750494 + ], + [ + -118.298124, + 33.75051 + ], + [ + -118.298093, + 33.750521 + ], + [ + -118.298027, + 33.750533 + ], + [ + -118.297995, + 33.750533 + ], + [ + -118.297972, + 33.750515 + ], + [ + -118.297958, + 33.75049 + ], + [ + -118.297932, + 33.750472 + ], + [ + -118.297899, + 33.750473 + ], + [ + -118.297869, + 33.750461 + ], + [ + -118.297844, + 33.750445 + ], + [ + -118.297715, + 33.750434 + ], + [ + -118.29735, + 33.750427 + ], + [ + -118.297212, + 33.750428 + ], + [ + -118.297209, + 33.750513 + ], + [ + -118.297188, + 33.750534 + ], + [ + -118.297157, + 33.750542 + ], + [ + -118.297146, + 33.750555 + ], + [ + -118.297156, + 33.750682 + ], + [ + -118.297029, + 33.750682 + ], + [ + -118.297028, + 33.750786 + ], + [ + -118.29718, + 33.750787 + ], + [ + -118.297211, + 33.750794 + ], + [ + -118.29724, + 33.750806 + ], + [ + -118.297259, + 33.750831 + ], + [ + -118.297271, + 33.750856 + ], + [ + -118.297278, + 33.750885 + ], + [ + -118.297279, + 33.750913 + ], + [ + -118.297275, + 33.750973 + ], + [ + -118.29729, + 33.751 + ], + [ + -118.297308, + 33.751025 + ], + [ + -118.297333, + 33.751045 + ], + [ + -118.297354, + 33.751068 + ], + [ + -118.297367, + 33.751095 + ], + [ + -118.297369, + 33.751123 + ], + [ + -118.297394, + 33.751141 + ], + [ + -118.297419, + 33.751161 + ], + [ + -118.297425, + 33.75119 + ], + [ + -118.297425, + 33.751219 + ], + [ + -118.297422, + 33.751247 + ], + [ + -118.297412, + 33.751302 + ], + [ + -118.297323, + 33.751414 + ], + [ + -118.297276, + 33.751492 + ], + [ + -118.297259, + 33.751517 + ], + [ + -118.297236, + 33.751539 + ], + [ + -118.297212, + 33.75156 + ], + [ + -118.297137, + 33.751615 + ], + [ + -118.297047, + 33.751697 + ], + [ + -118.297021, + 33.751714 + ], + [ + -118.296989, + 33.751719 + ], + [ + -118.296966, + 33.751752 + ], + [ + -118.296929, + 33.751828 + ], + [ + -118.296941, + 33.751853 + ], + [ + -118.296972, + 33.751866 + ], + [ + -118.297043, + 33.751868 + ], + [ + -118.297079, + 33.751873 + ], + [ + -118.297145, + 33.751899 + ], + [ + -118.297176, + 33.751914 + ], + [ + -118.297228, + 33.751955 + ], + [ + -118.297271, + 33.751977 + ], + [ + -118.297347, + 33.751978 + ], + [ + -118.297405, + 33.751949 + ], + [ + -118.297504, + 33.751925 + ], + [ + -118.297537, + 33.751921 + ], + [ + -118.297565, + 33.751907 + ], + [ + -118.297577, + 33.751881 + ], + [ + -118.297595, + 33.751858 + ], + [ + -118.297628, + 33.751846 + ], + [ + -118.297696, + 33.751841 + ], + [ + -118.29772, + 33.751809 + ], + [ + -118.297746, + 33.751789 + ], + [ + -118.297766, + 33.751765 + ], + [ + -118.297778, + 33.751738 + ], + [ + -118.297805, + 33.751722 + ], + [ + -118.297836, + 33.751712 + ], + [ + -118.297869, + 33.751706 + ], + [ + -118.297948, + 33.751657 + ], + [ + -118.29801, + 33.751632 + ], + [ + -118.298026, + 33.751608 + ], + [ + -118.29805, + 33.75159 + ], + [ + -118.298082, + 33.751581 + ], + [ + -118.298119, + 33.751578 + ], + [ + -118.298187, + 33.751576 + ], + [ + -118.298258, + 33.75157 + ], + [ + -118.298294, + 33.751572 + ], + [ + -118.298357, + 33.751597 + ], + [ + -118.298371, + 33.751622 + ], + [ + -118.298455, + 33.751651 + ], + [ + -118.298487, + 33.751657 + ], + [ + -118.298558, + 33.751658 + ], + [ + -118.298593, + 33.751656 + ], + [ + -118.298625, + 33.751652 + ], + [ + -118.298656, + 33.75164 + ], + [ + -118.298691, + 33.751636 + ], + [ + -118.298831, + 33.751634 + ], + [ + -118.298864, + 33.751631 + ], + [ + -118.298924, + 33.751606 + ], + [ + -118.299028, + 33.751592 + ], + [ + -118.299063, + 33.751587 + ], + [ + -118.299213, + 33.751576 + ], + [ + -118.299242, + 33.751563 + ], + [ + -118.299279, + 33.751558 + ], + [ + -118.299387, + 33.751551 + ], + [ + -118.299421, + 33.751552 + ], + [ + -118.299453, + 33.751563 + ], + [ + -118.299473, + 33.751586 + ], + [ + -118.299477, + 33.751615 + ], + [ + -118.299472, + 33.751641 + ], + [ + -118.299484, + 33.751668 + ], + [ + -118.299508, + 33.751687 + ], + [ + -118.299543, + 33.751689 + ], + [ + -118.299579, + 33.751688 + ], + [ + -118.299611, + 33.7517 + ], + [ + -118.299643, + 33.751706 + ], + [ + -118.299662, + 33.751683 + ], + [ + -118.29967, + 33.751656 + ], + [ + -118.299684, + 33.751631 + ], + [ + -118.299716, + 33.751622 + ], + [ + -118.299739, + 33.751644 + ], + [ + -118.299752, + 33.75167 + ], + [ + -118.299752, + 33.751699 + ], + [ + -118.299745, + 33.751726 + ], + [ + -118.299732, + 33.751752 + ], + [ + -118.299659, + 33.751795 + ], + [ + -118.299639, + 33.751816 + ], + [ + -118.299631, + 33.751843 + ], + [ + -118.299633, + 33.751871 + ], + [ + -118.299646, + 33.751897 + ], + [ + -118.299665, + 33.751919 + ], + [ + -118.299697, + 33.75193 + ], + [ + -118.299728, + 33.751921 + ], + [ + -118.299763, + 33.751917 + ], + [ + -118.299798, + 33.751921 + ], + [ + -118.299822, + 33.75194 + ], + [ + -118.299845, + 33.751961 + ], + [ + -118.299875, + 33.751976 + ], + [ + -118.299909, + 33.751981 + ], + [ + -118.299941, + 33.751975 + ], + [ + -118.299975, + 33.751962 + ], + [ + -118.299997, + 33.751942 + ], + [ + -118.300023, + 33.751925 + ], + [ + -118.300051, + 33.751911 + ], + [ + -118.300083, + 33.751906 + ], + [ + -118.300185, + 33.751913 + ], + [ + -118.300276, + 33.751951 + ], + [ + -118.300308, + 33.751959 + ], + [ + -118.300504, + 33.75197 + ], + [ + -118.300597, + 33.751959 + ], + [ + -118.300632, + 33.751957 + ], + [ + -118.300668, + 33.751957 + ], + [ + -118.300702, + 33.751958 + ], + [ + -118.300734, + 33.751949 + ], + [ + -118.300755, + 33.751928 + ], + [ + -118.300783, + 33.751913 + ], + [ + -118.300821, + 33.751906 + ], + [ + -118.300856, + 33.751905 + ], + [ + -118.300889, + 33.751908 + ], + [ + -118.300923, + 33.75192 + ], + [ + -118.300982, + 33.751948 + ], + [ + -118.301047, + 33.75196 + ], + [ + -118.301113, + 33.751969 + ], + [ + -118.301108, + 33.752012 + ], + [ + -118.301113, + 33.752038 + ], + [ + -118.301132, + 33.752061 + ], + [ + -118.301192, + 33.752093 + ], + [ + -118.301344, + 33.752148 + ], + [ + -118.301549, + 33.752184 + ], + [ + -118.301624, + 33.752181 + ], + [ + -118.301658, + 33.752186 + ], + [ + -118.301725, + 33.752201 + ], + [ + -118.301758, + 33.752202 + ], + [ + -118.301892, + 33.752186 + ], + [ + -118.301943, + 33.752167 + ], + [ + -118.30198, + 33.75213 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 488784320, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.319118, + 33.741292 + ], + [ + -118.319064, + 33.74119 + ], + [ + -118.318973, + 33.741029 + ], + [ + -118.318844, + 33.741011 + ], + [ + -118.31871, + 33.741025 + ], + [ + -118.318308, + 33.741038 + ], + [ + -118.318184, + 33.741078 + ], + [ + -118.318061, + 33.741096 + ], + [ + -118.317932, + 33.741092 + ], + [ + -118.317809, + 33.741056 + ], + [ + -118.317691, + 33.741011 + ], + [ + -118.317471, + 33.740882 + ], + [ + -118.317128, + 33.740708 + ], + [ + -118.317004, + 33.740663 + ], + [ + -118.316886, + 33.740614 + ], + [ + -118.316698, + 33.740472 + ], + [ + -118.316586, + 33.740423 + ], + [ + -118.316334, + 33.740342 + ], + [ + -118.315942, + 33.74032 + ], + [ + -118.315572, + 33.740311 + ], + [ + -118.31518, + 33.740329 + ], + [ + -118.314783, + 33.740333 + ], + [ + -118.314655, + 33.740351 + ], + [ + -118.314537, + 33.7404 + ], + [ + -118.314445, + 33.740481 + ], + [ + -118.314317, + 33.740476 + ], + [ + -118.314199, + 33.740431 + ], + [ + -118.314075, + 33.740414 + ], + [ + -118.313947, + 33.740405 + ], + [ + -118.313319, + 33.740052 + ], + [ + -118.313217, + 33.739981 + ], + [ + -118.313008, + 33.73986 + ], + [ + -118.312884, + 33.739829 + ], + [ + -118.312648, + 33.739749 + ], + [ + -118.312546, + 33.739682 + ], + [ + -118.312412, + 33.739562 + ], + [ + -118.312359, + 33.739455 + ], + [ + -118.312326, + 33.739348 + ], + [ + -118.312198, + 33.739325 + ], + [ + -118.312085, + 33.739383 + ], + [ + -118.311983, + 33.739446 + ], + [ + -118.31187, + 33.739499 + ], + [ + -118.311785, + 33.739588 + ], + [ + -118.31187, + 33.739682 + ], + [ + -118.312117, + 33.739767 + ], + [ + -118.312219, + 33.739834 + ], + [ + -118.312273, + 33.739936 + ], + [ + -118.312176, + 33.740142 + ], + [ + -118.312235, + 33.740244 + ], + [ + -118.312353, + 33.740195 + ], + [ + -118.312439, + 33.740106 + ], + [ + -118.312546, + 33.740043 + ], + [ + -118.31268, + 33.74007 + ], + [ + -118.312761, + 33.740159 + ], + [ + -118.312756, + 33.740275 + ], + [ + -118.312804, + 33.740378 + ], + [ + -118.31289, + 33.740463 + ], + [ + -118.313163, + 33.740445 + ], + [ + -118.313292, + 33.74049 + ], + [ + -118.313405, + 33.740556 + ], + [ + -118.313528, + 33.740623 + ], + [ + -118.313651, + 33.740681 + ], + [ + -118.313786, + 33.740699 + ], + [ + -118.31393, + 33.74069 + ], + [ + -118.31407, + 33.740704 + ], + [ + -118.314209, + 33.74073 + ], + [ + -118.314569, + 33.740895 + ], + [ + -118.314703, + 33.740864 + ], + [ + -118.314944, + 33.740771 + ], + [ + -118.315191, + 33.740735 + ], + [ + -118.315717, + 33.740744 + ], + [ + -118.316119, + 33.740726 + ], + [ + -118.316269, + 33.740713 + ], + [ + -118.316355, + 33.740797 + ], + [ + -118.316591, + 33.740909 + ], + [ + -118.316811, + 33.740989 + ], + [ + -118.316929, + 33.741047 + ], + [ + -118.317031, + 33.741123 + ], + [ + -118.317498, + 33.741422 + ], + [ + -118.317594, + 33.741498 + ], + [ + -118.317723, + 33.741529 + ], + [ + -118.317846, + 33.741489 + ], + [ + -118.317964, + 33.741435 + ], + [ + -118.318088, + 33.741399 + ], + [ + -118.318227, + 33.741382 + ], + [ + -118.31863, + 33.741382 + ], + [ + -118.318662, + 33.741458 + ], + [ + -118.319021, + 33.741346 + ], + [ + -118.319118, + 33.741292 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 488784905, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.345093, + 33.772023 + ], + [ + -118.345232, + 33.772019 + ], + [ + -118.345479, + 33.771947 + ], + [ + -118.34557, + 33.771862 + ], + [ + -118.345645, + 33.771773 + ], + [ + -118.345763, + 33.771724 + ], + [ + -118.345903, + 33.771715 + ], + [ + -118.346176, + 33.771729 + ], + [ + -118.346257, + 33.771639 + ], + [ + -118.346257, + 33.771532 + ], + [ + -118.346192, + 33.771327 + ], + [ + -118.346203, + 33.771211 + ], + [ + -118.346203, + 33.7711 + ], + [ + -118.346176, + 33.770993 + ], + [ + -118.346026, + 33.770734 + ], + [ + -118.345565, + 33.770101 + ], + [ + -118.345205, + 33.769731 + ], + [ + -118.345109, + 33.769655 + ], + [ + -118.345028, + 33.76957 + ], + [ + -118.345012, + 33.769236 + ], + [ + -118.344975, + 33.768955 + ], + [ + -118.344948, + 33.768852 + ], + [ + -118.344937, + 33.768745 + ], + [ + -118.344873, + 33.768647 + ], + [ + -118.344749, + 33.768607 + ], + [ + -118.34468, + 33.768701 + ], + [ + -118.344578, + 33.768763 + ], + [ + -118.344454, + 33.768736 + ], + [ + -118.344409, + 33.768679 + ], + [ + -118.344277, + 33.768665 + ], + [ + -118.344154, + 33.768705 + ], + [ + -118.344175, + 33.768817 + ], + [ + -118.344299, + 33.768875 + ], + [ + -118.344417, + 33.768924 + ], + [ + -118.344631, + 33.769049 + ], + [ + -118.344701, + 33.769147 + ], + [ + -118.344658, + 33.769258 + ], + [ + -118.344529, + 33.769298 + ], + [ + -118.344395, + 33.769272 + ], + [ + -118.344288, + 33.769205 + ], + [ + -118.344197, + 33.769124 + ], + [ + -118.344159, + 33.769017 + ], + [ + -118.344095, + 33.768919 + ], + [ + -118.344004, + 33.768839 + ], + [ + -118.343934, + 33.76875 + ], + [ + -118.343875, + 33.768656 + ], + [ + -118.343827, + 33.768558 + ], + [ + -118.343902, + 33.768344 + ], + [ + -118.343875, + 33.767996 + ], + [ + -118.343837, + 33.767894 + ], + [ + -118.343945, + 33.767831 + ], + [ + -118.343961, + 33.76772 + ], + [ + -118.343864, + 33.767644 + ], + [ + -118.343795, + 33.767559 + ], + [ + -118.343741, + 33.767461 + ], + [ + -118.343719, + 33.767359 + ], + [ + -118.343677, + 33.767292 + ], + [ + -118.343559, + 33.767332 + ], + [ + -118.343424, + 33.767318 + ], + [ + -118.343322, + 33.76726 + ], + [ + -118.343279, + 33.767162 + ], + [ + -118.343317, + 33.767055 + ], + [ + -118.343382, + 33.766962 + ], + [ + -118.343403, + 33.76685 + ], + [ + -118.343339, + 33.766752 + ], + [ + -118.34329, + 33.766649 + ], + [ + -118.343371, + 33.76644 + ], + [ + -118.343349, + 33.766333 + ], + [ + -118.343279, + 33.766239 + ], + [ + -118.343156, + 33.766266 + ], + [ + -118.343092, + 33.766364 + ], + [ + -118.343092, + 33.766712 + ], + [ + -118.343076, + 33.766823 + ], + [ + -118.343033, + 33.76693 + ], + [ + -118.342942, + 33.767015 + ], + [ + -118.342722, + 33.76714 + ], + [ + -118.342722, + 33.767252 + ], + [ + -118.342791, + 33.76735 + ], + [ + -118.342926, + 33.767381 + ], + [ + -118.343054, + 33.767345 + ], + [ + -118.343172, + 33.767296 + ], + [ + -118.343258, + 33.767385 + ], + [ + -118.34329, + 33.767492 + ], + [ + -118.343306, + 33.767604 + ], + [ + -118.343221, + 33.767813 + ], + [ + -118.343322, + 33.768246 + ], + [ + -118.343333, + 33.768357 + ], + [ + -118.343419, + 33.768625 + ], + [ + -118.343424, + 33.768741 + ], + [ + -118.343457, + 33.768852 + ], + [ + -118.343596, + 33.769044 + ], + [ + -118.343623, + 33.769151 + ], + [ + -118.343682, + 33.769258 + ], + [ + -118.343773, + 33.769339 + ], + [ + -118.343998, + 33.769459 + ], + [ + -118.3441, + 33.76953 + ], + [ + -118.344202, + 33.769628 + ], + [ + -118.344299, + 33.769544 + ], + [ + -118.344417, + 33.769486 + ], + [ + -118.34454, + 33.769521 + ], + [ + -118.344599, + 33.769624 + ], + [ + -118.34454, + 33.769726 + ], + [ + -118.344503, + 33.769829 + ], + [ + -118.344937, + 33.770413 + ], + [ + -118.345205, + 33.770667 + ], + [ + -118.345286, + 33.770756 + ], + [ + -118.345404, + 33.770953 + ], + [ + -118.345457, + 33.771055 + ], + [ + -118.345549, + 33.771185 + ], + [ + -118.345549, + 33.771278 + ], + [ + -118.345452, + 33.771345 + ], + [ + -118.345318, + 33.771358 + ], + [ + -118.345184, + 33.771354 + ], + [ + -118.345055, + 33.771381 + ], + [ + -118.344921, + 33.771381 + ], + [ + -118.344969, + 33.771483 + ], + [ + -118.345377, + 33.771479 + ], + [ + -118.34549, + 33.771537 + ], + [ + -118.345447, + 33.771644 + ], + [ + -118.345313, + 33.771671 + ], + [ + -118.345066, + 33.771599 + ], + [ + -118.344937, + 33.77159 + ], + [ + -118.34483, + 33.771648 + ], + [ + -118.344674, + 33.771831 + ], + [ + -118.344572, + 33.771894 + ], + [ + -118.344438, + 33.771907 + ], + [ + -118.344309, + 33.771938 + ], + [ + -118.344186, + 33.771987 + ], + [ + -118.344057, + 33.771992 + ], + [ + -118.343934, + 33.771943 + ], + [ + -118.343821, + 33.771885 + ], + [ + -118.34373, + 33.771804 + ], + [ + -118.343634, + 33.771729 + ], + [ + -118.34358, + 33.771631 + ], + [ + -118.343569, + 33.771519 + ], + [ + -118.343483, + 33.771439 + ], + [ + -118.343387, + 33.771358 + ], + [ + -118.343306, + 33.771274 + ], + [ + -118.343253, + 33.771171 + ], + [ + -118.343355, + 33.771095 + ], + [ + -118.343403, + 33.770993 + ], + [ + -118.343387, + 33.770774 + ], + [ + -118.343467, + 33.770694 + ], + [ + -118.343612, + 33.770694 + ], + [ + -118.344009, + 33.77077 + ], + [ + -118.344138, + 33.77081 + ], + [ + -118.344256, + 33.770868 + ], + [ + -118.34446, + 33.771015 + ], + [ + -118.344535, + 33.771109 + ], + [ + -118.344615, + 33.771194 + ], + [ + -118.344728, + 33.771136 + ], + [ + -118.344685, + 33.771028 + ], + [ + -118.344535, + 33.770846 + ], + [ + -118.344422, + 33.770788 + ], + [ + -118.344299, + 33.770748 + ], + [ + -118.344181, + 33.770694 + ], + [ + -118.34395, + 33.770609 + ], + [ + -118.343719, + 33.770507 + ], + [ + -118.343478, + 33.770422 + ], + [ + -118.34336, + 33.770373 + ], + [ + -118.343237, + 33.770333 + ], + [ + -118.343103, + 33.770324 + ], + [ + -118.342974, + 33.770328 + ], + [ + -118.34285, + 33.770355 + ], + [ + -118.342834, + 33.770467 + ], + [ + -118.342963, + 33.770672 + ], + [ + -118.343011, + 33.770774 + ], + [ + -118.343043, + 33.770886 + ], + [ + -118.343097, + 33.771234 + ], + [ + -118.343145, + 33.771461 + ], + [ + -118.343333, + 33.772108 + ], + [ + -118.34336, + 33.772215 + ], + [ + -118.343398, + 33.772326 + ], + [ + -118.343462, + 33.772424 + ], + [ + -118.343591, + 33.772455 + ], + [ + -118.343698, + 33.77246 + ], + [ + -118.343837, + 33.772447 + ], + [ + -118.343945, + 33.772384 + ], + [ + -118.344068, + 33.772331 + ], + [ + -118.344191, + 33.772295 + ], + [ + -118.344326, + 33.772273 + ], + [ + -118.344449, + 33.772233 + ], + [ + -118.344567, + 33.772166 + ], + [ + -118.344696, + 33.772143 + ], + [ + -118.344808, + 33.772206 + ], + [ + -118.344937, + 33.772237 + ], + [ + -118.34505, + 33.77217 + ], + [ + -118.345093, + 33.772023 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491947070, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.32534, + 33.790994 + ], + [ + -118.324698, + 33.790993 + ], + [ + -118.3247, + 33.790433 + ], + [ + -118.325341, + 33.790435 + ], + [ + -118.32534, + 33.790994 + ] + ] + ] + }, + "properties": { + "name": "Hathaway Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 492153214, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.215432, + 33.835474 + ], + [ + -118.212835, + 33.835467 + ], + [ + -118.21343, + 33.834293 + ], + [ + -118.215869, + 33.834282 + ], + [ + -118.215432, + 33.835474 + ] + ] + ] + }, + "properties": { + "name": "Dominguez Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 492984871, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.34351, + 33.793688 + ], + [ + -118.344146, + 33.79326 + ], + [ + -118.343974, + 33.7931 + ], + [ + -118.343749, + 33.793015 + ], + [ + -118.343564, + 33.792995 + ], + [ + -118.343352, + 33.793002 + ], + [ + -118.34318, + 33.793071 + ], + [ + -118.342998, + 33.793229 + ], + [ + -118.34351, + 33.793688 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496710860, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.315341, + 33.890352 + ], + [ + -118.314763, + 33.89036 + ], + [ + -118.314763, + 33.890636 + ], + [ + -118.314763, + 33.890639 + ], + [ + -118.314763, + 33.891574 + ], + [ + -118.31561, + 33.891565 + ], + [ + -118.315605, + 33.890353 + ], + [ + -118.315341, + 33.890352 + ] + ] + ] + }, + "properties": { + "name": "Freeman Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496712214, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.320015, + 33.896532 + ], + [ + -118.319201, + 33.896524 + ], + [ + -118.31921, + 33.895492 + ], + [ + -118.320007, + 33.895499 + ], + [ + -118.320015, + 33.896532 + ] + ] + ] + }, + "properties": { + "name": "Thornburg Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496713451, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.32206, + 33.87197 + ], + [ + -118.322068, + 33.871944 + ], + [ + -118.32208, + 33.871008 + ], + [ + -118.320465, + 33.871022 + ], + [ + -118.32047, + 33.871356 + ], + [ + -118.320525, + 33.871385 + ], + [ + -118.320736, + 33.871459 + ], + [ + -118.321007, + 33.871598 + ], + [ + -118.321513, + 33.871868 + ], + [ + -118.321638, + 33.871932 + ], + [ + -118.321825, + 33.871983 + ], + [ + -118.322033, + 33.871991 + ], + [ + -118.32206, + 33.87197 + ] + ] + ] + }, + "properties": { + "name": "Descanso Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496720307, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.319374, + 33.8963 + ], + [ + -118.319373, + 33.89607 + ], + [ + -118.319222, + 33.896071 + ], + [ + -118.319221, + 33.8963 + ], + [ + -118.319374, + 33.8963 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496720679, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.315511, + 33.890931 + ], + [ + -118.315481, + 33.890897 + ], + [ + -118.314813, + 33.890899 + ], + [ + -118.314812, + 33.89109 + ], + [ + -118.314829, + 33.891187 + ], + [ + -118.314862, + 33.891313 + ], + [ + -118.314947, + 33.891407 + ], + [ + -118.315067, + 33.89148 + ], + [ + -118.315287, + 33.891523 + ], + [ + -118.315511, + 33.891527 + ], + [ + -118.315511, + 33.890931 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496720680, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.315327, + 33.890457 + ], + [ + -118.315177, + 33.890457 + ], + [ + -118.315176, + 33.890712 + ], + [ + -118.315326, + 33.890712 + ], + [ + -118.315327, + 33.890457 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496722881, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.307087, + 33.885481 + ], + [ + -118.307414, + 33.885471 + ], + [ + -118.307617, + 33.885464 + ], + [ + -118.30762, + 33.885588 + ], + [ + -118.307416, + 33.885588 + ], + [ + -118.307085, + 33.885587 + ], + [ + -118.307086, + 33.885531 + ], + [ + -118.307087, + 33.885481 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 496726549, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.344816, + 33.875451 + ], + [ + -118.344721, + 33.875406 + ], + [ + -118.344585, + 33.875341 + ], + [ + -118.344542, + 33.875335 + ], + [ + -118.344518, + 33.875342 + ], + [ + -118.344505, + 33.875346 + ], + [ + -118.344472, + 33.875575 + ], + [ + -118.344653, + 33.875608 + ], + [ + -118.344816, + 33.875451 + ] + ] + ] + }, + "properties": { + "name": "Osage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 510474245, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.422702, + 33.920787 + ], + [ + -118.4223, + 33.920789 + ], + [ + -118.422284, + 33.920775 + ], + [ + -118.422286, + 33.920625 + ], + [ + -118.422718, + 33.920625 + ], + [ + -118.42273, + 33.92069 + ], + [ + -118.422726, + 33.920749 + ], + [ + -118.422702, + 33.920787 + ] + ] + ] + }, + "properties": { + "name": "HollyValleyPark", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 536231347, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.39225, + 33.767376 + ], + [ + -118.392184, + 33.767392 + ], + [ + -118.392121, + 33.767368 + ], + [ + -118.392095, + 33.767333 + ], + [ + -118.39208, + 33.767303 + ], + [ + -118.392056, + 33.767254 + ], + [ + -118.392037, + 33.767216 + ], + [ + -118.391981, + 33.767103 + ], + [ + -118.39194, + 33.76702 + ], + [ + -118.391885, + 33.766909 + ], + [ + -118.392291, + 33.766823 + ], + [ + -118.392532, + 33.766902 + ], + [ + -118.392682, + 33.767038 + ], + [ + -118.392797, + 33.767196 + ], + [ + -118.39225, + 33.767376 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 536234481, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.317127, + 33.822465 + ], + [ + -118.317198, + 33.822449 + ], + [ + -118.317429, + 33.82212 + ], + [ + -118.317281, + 33.822002 + ], + [ + -118.317164, + 33.821954 + ], + [ + -118.316993, + 33.821968 + ], + [ + -118.316873, + 33.822032 + ], + [ + -118.316757, + 33.822252 + ], + [ + -118.317127, + 33.822465 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 537565059, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.380939, + 33.767934 + ], + [ + -118.382614, + 33.767924 + ], + [ + -118.383462, + 33.767855 + ], + [ + -118.383594, + 33.767736 + ], + [ + -118.383566, + 33.767488 + ], + [ + -118.383636, + 33.767417 + ], + [ + -118.38356, + 33.767419 + ], + [ + -118.383514, + 33.767373 + ], + [ + -118.383502, + 33.766777 + ], + [ + -118.382431, + 33.766772 + ], + [ + -118.382465, + 33.766192 + ], + [ + -118.381697, + 33.76611 + ], + [ + -118.381099, + 33.766113 + ], + [ + -118.380939, + 33.767934 + ] + ] + ] + }, + "properties": { + "name": "Highridge Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 537565062, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.381863, + 33.767722 + ], + [ + -118.382438, + 33.767784 + ], + [ + -118.382572, + 33.766926 + ], + [ + -118.381997, + 33.766864 + ], + [ + -118.381863, + 33.767722 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 541464076, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.416145, + 33.894462 + ], + [ + -118.415169, + 33.894816 + ], + [ + -118.415154, + 33.894787 + ], + [ + -118.414882, + 33.894269 + ], + [ + -118.414855, + 33.894217 + ], + [ + -118.415825, + 33.893866 + ], + [ + -118.416126, + 33.894428 + ], + [ + -118.416145, + 33.894462 + ] + ] + ] + }, + "properties": { + "name": "Bruce's Beach", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 550675271, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.420559, + 33.917161 + ], + [ + -118.420559, + 33.917266 + ], + [ + -118.420128, + 33.917264 + ], + [ + -118.420128, + 33.917162 + ], + [ + -118.420559, + 33.917161 + ] + ] + ] + }, + "properties": { + "name": "Candy Cane Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 552250359, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.381636, + 33.883682 + ], + [ + -118.381641, + 33.883291 + ], + [ + -118.381389, + 33.883288 + ], + [ + -118.381381, + 33.883681 + ], + [ + -118.381636, + 33.883682 + ] + ] + ] + }, + "properties": { + "name": "8th Street Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 552309135, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.377064, + 33.889095 + ], + [ + -118.377092, + 33.889084 + ], + [ + -118.377112, + 33.889065 + ], + [ + -118.37712, + 33.88904 + ], + [ + -118.377112, + 33.88901 + ], + [ + -118.377083, + 33.88899 + ], + [ + -118.377038, + 33.888986 + ], + [ + -118.377011, + 33.889005 + ], + [ + -118.376981, + 33.88903 + ], + [ + -118.376983, + 33.88906 + ], + [ + -118.377026, + 33.889089 + ], + [ + -118.377064, + 33.889095 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 553892416, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.295465, + 33.876497 + ], + [ + -118.294766, + 33.876508 + ], + [ + -118.29475, + 33.876163 + ], + [ + -118.295454, + 33.876158 + ], + [ + -118.295465, + 33.876497 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 554789010, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.359218, + 33.908873 + ], + [ + -118.359218, + 33.908023 + ], + [ + -118.35844, + 33.908036 + ], + [ + -118.358418, + 33.908873 + ], + [ + -118.35873, + 33.908877 + ], + [ + -118.359218, + 33.908873 + ] + ] + ] + }, + "properties": { + "name": "Ramona Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 555009040, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.387771, + 33.859617 + ], + [ + -118.387935, + 33.859911 + ], + [ + -118.388182, + 33.859883 + ], + [ + -118.388143, + 33.859575 + ], + [ + -118.387771, + 33.859617 + ] + ] + ] + }, + "properties": { + "name": "Fort Lots-o-Fun Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 556432955, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.322608, + 33.825573 + ], + [ + -118.322469, + 33.825575 + ], + [ + -118.322467, + 33.825376 + ], + [ + -118.322605, + 33.825374 + ], + [ + -118.322608, + 33.825573 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 556434725, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.325161, + 33.826637 + ], + [ + -118.324771, + 33.826639 + ], + [ + -118.324775, + 33.827007 + ], + [ + -118.324775, + 33.827012 + ], + [ + -118.325169, + 33.827006 + ], + [ + -118.325161, + 33.826637 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 562291616, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.36364, + 33.791542 + ], + [ + -118.36383, + 33.791196 + ], + [ + -118.363644, + 33.791149 + ], + [ + -118.363299, + 33.791191 + ], + [ + -118.362757, + 33.791241 + ], + [ + -118.362586, + 33.791288 + ], + [ + -118.362559, + 33.791325 + ], + [ + -118.362554, + 33.791368 + ], + [ + -118.36261, + 33.79141 + ], + [ + -118.362779, + 33.791424 + ], + [ + -118.363083, + 33.791507 + ], + [ + -118.363574, + 33.79166 + ], + [ + -118.36364, + 33.791542 + ] + ] + ] + }, + "properties": { + "name": "Silver Spur Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 571830291, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.317011, + 33.91254 + ], + [ + -118.316491, + 33.912541 + ], + [ + -118.316492, + 33.912324 + ], + [ + -118.31651, + 33.912298 + ], + [ + -118.316553, + 33.912292 + ], + [ + -118.316578, + 33.912311 + ], + [ + -118.316608, + 33.912317 + ], + [ + -118.316711, + 33.912401 + ], + [ + -118.316705, + 33.912433 + ], + [ + -118.316743, + 33.912466 + ], + [ + -118.316829, + 33.912476 + ], + [ + -118.317006, + 33.912473 + ], + [ + -118.317029, + 33.912484 + ], + [ + -118.31703, + 33.912526 + ], + [ + -118.317011, + 33.91254 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 572182090, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.334887, + 33.881263 + ], + [ + -118.334942, + 33.881114 + ], + [ + -118.335064, + 33.88078 + ], + [ + -118.335073, + 33.880755 + ], + [ + -118.335042, + 33.880722 + ], + [ + -118.334884, + 33.880791 + ], + [ + -118.334751, + 33.880882 + ], + [ + -118.334702, + 33.881007 + ], + [ + -118.334705, + 33.88105 + ], + [ + -118.334648, + 33.881168 + ], + [ + -118.334659, + 33.881183 + ], + [ + -118.334672, + 33.881203 + ], + [ + -118.334698, + 33.881212 + ], + [ + -118.334735, + 33.88121 + ], + [ + -118.334766, + 33.881224 + ], + [ + -118.334794, + 33.88126 + ], + [ + -118.334817, + 33.881281 + ], + [ + -118.334862, + 33.881285 + ], + [ + -118.334887, + 33.881263 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 572182091, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.280837, + 33.824187 + ], + [ + -118.280834, + 33.823704 + ], + [ + -118.280738, + 33.823709 + ], + [ + -118.280661, + 33.823862 + ], + [ + -118.280659, + 33.824184 + ], + [ + -118.280837, + 33.824187 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 579043888, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.360991, + 33.922673 + ], + [ + -118.360831, + 33.922675 + ], + [ + -118.360729, + 33.922724 + ], + [ + -118.36067, + 33.922813 + ], + [ + -118.360663, + 33.922949 + ], + [ + -118.360762, + 33.923024 + ], + [ + -118.360891, + 33.923028 + ], + [ + -118.360918, + 33.923055 + ], + [ + -118.360993, + 33.923053 + ], + [ + -118.361047, + 33.923039 + ], + [ + -118.361097, + 33.923002 + ], + [ + -118.361127, + 33.922937 + ], + [ + -118.361131, + 33.92289 + ], + [ + -118.361092, + 33.922865 + ], + [ + -118.361092, + 33.922755 + ], + [ + -118.360991, + 33.922673 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 614592029, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.299673, + 33.886142 + ], + [ + -118.299781, + 33.886145 + ], + [ + -118.299933, + 33.886128 + ], + [ + -118.300025, + 33.886092 + ], + [ + -118.300118, + 33.886037 + ], + [ + -118.300184, + 33.885966 + ], + [ + -118.300214, + 33.885895 + ], + [ + -118.300234, + 33.885808 + ], + [ + -118.300234, + 33.885738 + ], + [ + -118.300234, + 33.885725 + ], + [ + -118.299685, + 33.885725 + ], + [ + -118.299673, + 33.886142 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 621067770, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.29449, + 33.858194 + ], + [ + -118.293519, + 33.858184 + ], + [ + -118.293517, + 33.858103 + ], + [ + -118.29351, + 33.857611 + ], + [ + -118.294494, + 33.857611 + ], + [ + -118.294491, + 33.858107 + ], + [ + -118.29449, + 33.858194 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 624910319, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.295586, + 33.876105 + ], + [ + -118.295464, + 33.876109 + ], + [ + -118.295454, + 33.87594 + ], + [ + -118.29558, + 33.875936 + ], + [ + -118.295586, + 33.876105 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 626326265, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.280863, + 33.824187 + ], + [ + -118.280865, + 33.823917 + ], + [ + -118.281192, + 33.823915 + ], + [ + -118.281197, + 33.824189 + ], + [ + -118.280863, + 33.824187 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 627460423, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.329385, + 33.884003 + ], + [ + -118.329493, + 33.88397 + ], + [ + -118.329508, + 33.88402 + ], + [ + -118.329475, + 33.884108 + ], + [ + -118.329457, + 33.884148 + ], + [ + -118.329153, + 33.884249 + ], + [ + -118.32872, + 33.884392 + ], + [ + -118.32878, + 33.884517 + ], + [ + -118.328818, + 33.884579 + ], + [ + -118.328928, + 33.884823 + ], + [ + -118.329027, + 33.885033 + ], + [ + -118.329051, + 33.885079 + ], + [ + -118.329101, + 33.885096 + ], + [ + -118.329125, + 33.8851 + ], + [ + -118.32915, + 33.885108 + ], + [ + -118.329168, + 33.885127 + ], + [ + -118.329193, + 33.885148 + ], + [ + -118.329266, + 33.885162 + ], + [ + -118.329363, + 33.885183 + ], + [ + -118.329428, + 33.885222 + ], + [ + -118.329507, + 33.885397 + ], + [ + -118.329494, + 33.885452 + ], + [ + -118.32952, + 33.885511 + ], + [ + -118.329573, + 33.885546 + ], + [ + -118.329649, + 33.885526 + ], + [ + -118.329695, + 33.885598 + ], + [ + -118.329687, + 33.885645 + ], + [ + -118.329705, + 33.885681 + ], + [ + -118.329766, + 33.885661 + ], + [ + -118.329798, + 33.885728 + ], + [ + -118.329868, + 33.885704 + ], + [ + -118.329894, + 33.885761 + ], + [ + -118.329896, + 33.885781 + ], + [ + -118.329884, + 33.885791 + ], + [ + -118.329841, + 33.885776 + ], + [ + -118.329672, + 33.885723 + ], + [ + -118.329674, + 33.885807 + ], + [ + -118.32931, + 33.8858 + ], + [ + -118.329209, + 33.885826 + ], + [ + -118.32921, + 33.885891 + ], + [ + -118.329202, + 33.885942 + ], + [ + -118.329207, + 33.886067 + ], + [ + -118.329204, + 33.886074 + ], + [ + -118.33018, + 33.886083 + ], + [ + -118.330181, + 33.88617 + ], + [ + -118.329208, + 33.886169 + ], + [ + -118.329208, + 33.886253 + ], + [ + -118.329182, + 33.886285 + ], + [ + -118.329136, + 33.886308 + ], + [ + -118.32907, + 33.886309 + ], + [ + -118.328939, + 33.88631 + ], + [ + -118.329019, + 33.886132 + ], + [ + -118.329065, + 33.885989 + ], + [ + -118.329102, + 33.885789 + ], + [ + -118.329106, + 33.88574 + ], + [ + -118.328343, + 33.885739 + ], + [ + -118.328204, + 33.885613 + ], + [ + -118.328202, + 33.885587 + ], + [ + -118.3281, + 33.885586 + ], + [ + -118.327922, + 33.885585 + ], + [ + -118.327913, + 33.885584 + ], + [ + -118.327913, + 33.885658 + ], + [ + -118.327912, + 33.885677 + ], + [ + -118.327889, + 33.885678 + ], + [ + -118.327848, + 33.885679 + ], + [ + -118.32785, + 33.885726 + ], + [ + -118.327846, + 33.885739 + ], + [ + -118.327819, + 33.885744 + ], + [ + -118.327822, + 33.885366 + ], + [ + -118.327847, + 33.885366 + ], + [ + -118.327846, + 33.88539 + ], + [ + -118.327885, + 33.885427 + ], + [ + -118.328052, + 33.885365 + ], + [ + -118.328251, + 33.885364 + ], + [ + -118.328266, + 33.885373 + ], + [ + -118.328269, + 33.885386 + ], + [ + -118.328213, + 33.885499 + ], + [ + -118.328237, + 33.885517 + ], + [ + -118.328325, + 33.885696 + ], + [ + -118.328382, + 33.885697 + ], + [ + -118.328392, + 33.885686 + ], + [ + -118.329107, + 33.885691 + ], + [ + -118.329107, + 33.885683 + ], + [ + -118.329108, + 33.885626 + ], + [ + -118.32909, + 33.885469 + ], + [ + -118.329075, + 33.885388 + ], + [ + -118.328994, + 33.885353 + ], + [ + -118.32898, + 33.885375 + ], + [ + -118.328966, + 33.88539 + ], + [ + -118.328924, + 33.885408 + ], + [ + -118.328867, + 33.885409 + ], + [ + -118.328866, + 33.885212 + ], + [ + -118.328826, + 33.885212 + ], + [ + -118.328837, + 33.885098 + ], + [ + -118.328695, + 33.885093 + ], + [ + -118.32856, + 33.885107 + ], + [ + -118.328525, + 33.885107 + ], + [ + -118.328447, + 33.884941 + ], + [ + -118.328409, + 33.884953 + ], + [ + -118.328371, + 33.884886 + ], + [ + -118.328322, + 33.884785 + ], + [ + -118.328317, + 33.884751 + ], + [ + -118.328208, + 33.88475 + ], + [ + -118.328153, + 33.88475 + ], + [ + -118.327948, + 33.884752 + ], + [ + -118.32794, + 33.884654 + ], + [ + -118.327946, + 33.884537 + ], + [ + -118.327823, + 33.884502 + ], + [ + -118.32775, + 33.884507 + ], + [ + -118.32767, + 33.884507 + ], + [ + -118.327671, + 33.884299 + ], + [ + -118.327679, + 33.884247 + ], + [ + -118.327702, + 33.884207 + ], + [ + -118.327658, + 33.884162 + ], + [ + -118.327579, + 33.884158 + ], + [ + -118.327556, + 33.884092 + ], + [ + -118.327551, + 33.88402 + ], + [ + -118.327581, + 33.884015 + ], + [ + -118.327626, + 33.884113 + ], + [ + -118.327702, + 33.88409 + ], + [ + -118.327717, + 33.884123 + ], + [ + -118.328019, + 33.884028 + ], + [ + -118.32803, + 33.884024 + ], + [ + -118.328035, + 33.884023 + ], + [ + -118.328042, + 33.884021 + ], + [ + -118.328193, + 33.883973 + ], + [ + -118.32823, + 33.884053 + ], + [ + -118.328434, + 33.883989 + ], + [ + -118.328395, + 33.883902 + ], + [ + -118.328433, + 33.883891 + ], + [ + -118.328472, + 33.883975 + ], + [ + -118.328502, + 33.883965 + ], + [ + -118.328506, + 33.883978 + ], + [ + -118.328511, + 33.883989 + ], + [ + -118.328496, + 33.884002 + ], + [ + -118.328501, + 33.88402 + ], + [ + -118.328535, + 33.884035 + ], + [ + -118.328585, + 33.884148 + ], + [ + -118.328751, + 33.884129 + ], + [ + -118.328811, + 33.884112 + ], + [ + -118.32886, + 33.884218 + ], + [ + -118.329235, + 33.884095 + ], + [ + -118.329402, + 33.88404 + ], + [ + -118.329385, + 33.884003 + ] + ] + ] + }, + "properties": { + "name": "ECC Grass", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 627460974, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.329996, + 33.885838 + ], + [ + -118.329996, + 33.88589 + ], + [ + -118.330027, + 33.88589 + ], + [ + -118.330024, + 33.886058 + ], + [ + -118.330049, + 33.88606 + ], + [ + -118.330088, + 33.886052 + ], + [ + -118.330112, + 33.886044 + ], + [ + -118.330137, + 33.886032 + ], + [ + -118.330144, + 33.88602 + ], + [ + -118.330154, + 33.886003 + ], + [ + -118.33016, + 33.885987 + ], + [ + -118.33016, + 33.88597 + ], + [ + -118.330153, + 33.885953 + ], + [ + -118.330146, + 33.885938 + ], + [ + -118.330128, + 33.885916 + ], + [ + -118.330104, + 33.885894 + ], + [ + -118.330067, + 33.885874 + ], + [ + -118.330044, + 33.88586 + ], + [ + -118.330021, + 33.885847 + ], + [ + -118.329996, + 33.885838 + ] + ] + ] + }, + "properties": { + "name": "grass", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 627493051, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.342206, + 33.904188 + ], + [ + -118.342302, + 33.904175 + ], + [ + -118.342359, + 33.904156 + ], + [ + -118.342387, + 33.904126 + ], + [ + -118.34242, + 33.904085 + ], + [ + -118.342473, + 33.904079 + ], + [ + -118.342511, + 33.904067 + ], + [ + -118.342537, + 33.904049 + ], + [ + -118.342559, + 33.90402 + ], + [ + -118.342582, + 33.903977 + ], + [ + -118.342601, + 33.903941 + ], + [ + -118.342611, + 33.903894 + ], + [ + -118.342604, + 33.903853 + ], + [ + -118.342578, + 33.903823 + ], + [ + -118.342544, + 33.9038 + ], + [ + -118.342501, + 33.903785 + ], + [ + -118.342442, + 33.903784 + ], + [ + -118.342399, + 33.903797 + ], + [ + -118.34235, + 33.903827 + ], + [ + -118.342335, + 33.903863 + ], + [ + -118.342318, + 33.90391 + ], + [ + -118.342297, + 33.903934 + ], + [ + -118.342269, + 33.90395 + ], + [ + -118.342216, + 33.903949 + ], + [ + -118.342173, + 33.90394 + ], + [ + -118.342133, + 33.903943 + ], + [ + -118.342093, + 33.903963 + ], + [ + -118.342066, + 33.903994 + ], + [ + -118.34205, + 33.904037 + ], + [ + -118.342043, + 33.904083 + ], + [ + -118.342054, + 33.90412 + ], + [ + -118.342085, + 33.904156 + ], + [ + -118.342123, + 33.904176 + ], + [ + -118.342162, + 33.904183 + ], + [ + -118.342206, + 33.904188 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 627495049, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.342674, + 33.903628 + ], + [ + -118.342546, + 33.903628 + ], + [ + -118.342551, + 33.903439 + ], + [ + -118.342676, + 33.903439 + ], + [ + -118.342674, + 33.903628 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 627495051, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.343174, + 33.905486 + ], + [ + -118.343174, + 33.905149 + ], + [ + -118.342783, + 33.905147 + ], + [ + -118.342785, + 33.905486 + ], + [ + -118.343174, + 33.905486 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 627495052, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.342718, + 33.905137 + ], + [ + -118.342726, + 33.904987 + ], + [ + -118.342718, + 33.90486 + ], + [ + -118.342674, + 33.904757 + ], + [ + -118.342607, + 33.904647 + ], + [ + -118.342519, + 33.904559 + ], + [ + -118.342408, + 33.904469 + ], + [ + -118.342302, + 33.904418 + ], + [ + -118.342171, + 33.904371 + ], + [ + -118.342006, + 33.904336 + ], + [ + -118.341839, + 33.904334 + ], + [ + -118.341826, + 33.905145 + ], + [ + -118.342718, + 33.905137 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 627495053, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.342739, + 33.905137 + ], + [ + -118.342744, + 33.905061 + ], + [ + -118.342756, + 33.904889 + ], + [ + -118.342756, + 33.904824 + ], + [ + -118.342766, + 33.904775 + ], + [ + -118.342805, + 33.904717 + ], + [ + -118.342865, + 33.904634 + ], + [ + -118.342948, + 33.904548 + ], + [ + -118.34304, + 33.90448 + ], + [ + -118.343128, + 33.904425 + ], + [ + -118.343261, + 33.904376 + ], + [ + -118.343357, + 33.904352 + ], + [ + -118.343483, + 33.904333 + ], + [ + -118.343599, + 33.904329 + ], + [ + -118.343692, + 33.904331 + ], + [ + -118.343697, + 33.905138 + ], + [ + -118.342739, + 33.905137 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 632302727, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.340535, + 33.927075 + ], + [ + -118.34062, + 33.927134 + ], + [ + -118.340933, + 33.927349 + ], + [ + -118.340975, + 33.927378 + ], + [ + -118.340984, + 33.927384 + ], + [ + -118.340975, + 33.927089 + ], + [ + -118.340951, + 33.927089 + ], + [ + -118.340724, + 33.927089 + ], + [ + -118.340681, + 33.927089 + ], + [ + -118.340655, + 33.927089 + ], + [ + -118.34064, + 33.927089 + ], + [ + -118.34061, + 33.927087 + ], + [ + -118.340581, + 33.927084 + ], + [ + -118.340557, + 33.92708 + ], + [ + -118.340535, + 33.927075 + ] + ] + ] + }, + "properties": { + "name": "118th Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 632704335, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.336342, + 33.886545 + ], + [ + -118.336509, + 33.886468 + ], + [ + -118.336296, + 33.88614 + ], + [ + -118.336122, + 33.886263 + ], + [ + -118.336088, + 33.886273 + ], + [ + -118.336072, + 33.886335 + ], + [ + -118.336008, + 33.886372 + ], + [ + -118.336114, + 33.886528 + ], + [ + -118.336221, + 33.886479 + ], + [ + -118.336278, + 33.886448 + ], + [ + -118.336342, + 33.886545 + ] + ] + ] + }, + "properties": { + "name": "Alondra Park playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 632704363, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.327113, + 33.885945 + ], + [ + -118.327107, + 33.885945 + ], + [ + -118.326884, + 33.885946 + ], + [ + -118.326889, + 33.886796 + ], + [ + -118.326891, + 33.887149 + ], + [ + -118.32712, + 33.887154 + ], + [ + -118.327128, + 33.886954 + ], + [ + -118.327242, + 33.886956 + ], + [ + -118.327258, + 33.886955 + ], + [ + -118.327258, + 33.88694 + ], + [ + -118.327242, + 33.88694 + ], + [ + -118.327242, + 33.886661 + ], + [ + -118.327124, + 33.886669 + ], + [ + -118.327113, + 33.885945 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 633448657, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.32737, + 33.885919 + ], + [ + -118.327109, + 33.885917 + ], + [ + -118.327107, + 33.885945 + ], + [ + -118.32737, + 33.885945 + ], + [ + -118.327369, + 33.885941 + ], + [ + -118.327371, + 33.885936 + ], + [ + -118.32737, + 33.885919 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 641477158, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.360578, + 33.921965 + ], + [ + -118.360601, + 33.921965 + ], + [ + -118.360644, + 33.921955 + ], + [ + -118.360657, + 33.921946 + ], + [ + -118.360681, + 33.92193 + ], + [ + -118.360698, + 33.921909 + ], + [ + -118.360711, + 33.92188 + ], + [ + -118.360704, + 33.921833 + ], + [ + -118.360677, + 33.921798 + ], + [ + -118.360626, + 33.921774 + ], + [ + -118.360586, + 33.92177 + ], + [ + -118.36053, + 33.921783 + ], + [ + -118.360498, + 33.921811 + ], + [ + -118.360487, + 33.921847 + ], + [ + -118.360487, + 33.921871 + ], + [ + -118.360487, + 33.921892 + ], + [ + -118.360492, + 33.921916 + ], + [ + -118.360507, + 33.921936 + ], + [ + -118.360538, + 33.921953 + ], + [ + -118.360578, + 33.921965 + ] + ] + ] + }, + "properties": { + "name": "Eucalyptus playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 641477171, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.360623, + 33.922675 + ], + [ + -118.360806, + 33.922675 + ], + [ + -118.360811, + 33.92242 + ], + [ + -118.36062, + 33.922418 + ], + [ + -118.360623, + 33.922675 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 641833766, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.32578, + 33.923851 + ], + [ + -118.325779, + 33.923847 + ], + [ + -118.325809, + 33.923853 + ], + [ + -118.32583, + 33.923859 + ], + [ + -118.325846, + 33.923868 + ], + [ + -118.325884, + 33.923893 + ], + [ + -118.32591, + 33.923905 + ], + [ + -118.325955, + 33.923911 + ], + [ + -118.326138, + 33.92393 + ], + [ + -118.326179, + 33.92394 + ], + [ + -118.32622, + 33.923961 + ], + [ + -118.326243, + 33.92398 + ], + [ + -118.32626, + 33.923999 + ], + [ + -118.326286, + 33.924036 + ], + [ + -118.326295, + 33.924053 + ], + [ + -118.326299, + 33.924071 + ], + [ + -118.326299, + 33.924294 + ], + [ + -118.326297, + 33.924329 + ], + [ + -118.326291, + 33.924354 + ], + [ + -118.326264, + 33.924342 + ], + [ + -118.326244, + 33.924318 + ], + [ + -118.326234, + 33.92429 + ], + [ + -118.326234, + 33.924139 + ], + [ + -118.326179, + 33.924139 + ], + [ + -118.326173, + 33.924138 + ], + [ + -118.326172, + 33.924134 + ], + [ + -118.326173, + 33.924128 + ], + [ + -118.326186, + 33.924096 + ], + [ + -118.326068, + 33.924058 + ], + [ + -118.326048, + 33.924093 + ], + [ + -118.326041, + 33.924095 + ], + [ + -118.326035, + 33.924094 + ], + [ + -118.326028, + 33.924091 + ], + [ + -118.326061, + 33.924034 + ], + [ + -118.326032, + 33.924022 + ], + [ + -118.326003, + 33.92401 + ], + [ + -118.325974, + 33.923995 + ], + [ + -118.325943, + 33.923977 + ], + [ + -118.325915, + 33.923958 + ], + [ + -118.325886, + 33.923937 + ], + [ + -118.325862, + 33.923919 + ], + [ + -118.325838, + 33.9239 + ], + [ + -118.325807, + 33.923872 + ], + [ + -118.325787, + 33.923856 + ], + [ + -118.32578, + 33.923851 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 643623526, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.335491, + 33.885816 + ], + [ + -118.335483, + 33.886156 + ], + [ + -118.335799, + 33.88615 + ], + [ + -118.335798, + 33.886061 + ], + [ + -118.335802, + 33.886023 + ], + [ + -118.335791, + 33.885978 + ], + [ + -118.335774, + 33.885937 + ], + [ + -118.335751, + 33.885901 + ], + [ + -118.335718, + 33.885868 + ], + [ + -118.335677, + 33.885845 + ], + [ + -118.33562, + 33.885832 + ], + [ + -118.335551, + 33.885821 + ], + [ + -118.335491, + 33.885816 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 666166614, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.28028, + 33.725721 + ], + [ + -118.280297, + 33.725747 + ], + [ + -118.28026, + 33.725754 + ], + [ + -118.281122, + 33.727982 + ], + [ + -118.279384, + 33.728674 + ], + [ + -118.27966, + 33.728957 + ], + [ + -118.279761, + 33.729058 + ], + [ + -118.279843, + 33.729164 + ], + [ + -118.279866, + 33.729194 + ], + [ + -118.279888, + 33.729203 + ], + [ + -118.279914, + 33.729207 + ], + [ + -118.27996, + 33.729208 + ], + [ + -118.279994, + 33.729188 + ], + [ + -118.280099, + 33.729096 + ], + [ + -118.280176, + 33.729028 + ], + [ + -118.280337, + 33.728957 + ], + [ + -118.280704, + 33.728875 + ], + [ + -118.281074, + 33.728785 + ], + [ + -118.281487, + 33.728624 + ], + [ + -118.281684, + 33.72852 + ], + [ + -118.282129, + 33.728229 + ], + [ + -118.282505, + 33.728008 + ], + [ + -118.282877, + 33.727768 + ], + [ + -118.283103, + 33.727633 + ], + [ + -118.283182, + 33.727606 + ], + [ + -118.283316, + 33.727516 + ], + [ + -118.283754, + 33.727156 + ], + [ + -118.283951, + 33.727022 + ], + [ + -118.284186, + 33.72676 + ], + [ + -118.284459, + 33.726468 + ], + [ + -118.284697, + 33.726106 + ], + [ + -118.284802, + 33.72594 + ], + [ + -118.284816, + 33.725893 + ], + [ + -118.284887, + 33.725628 + ], + [ + -118.284945, + 33.725405 + ], + [ + -118.285024, + 33.725124 + ], + [ + -118.285036, + 33.724997 + ], + [ + -118.284999, + 33.724878 + ], + [ + -118.284885, + 33.724625 + ], + [ + -118.284787, + 33.724541 + ], + [ + -118.28028, + 33.725721 + ] + ] + ] + }, + "properties": { + "name": "22nd Street Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 668217321, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.293319, + 33.746349 + ], + [ + -118.293173, + 33.746321 + ], + [ + -118.293078, + 33.746336 + ], + [ + -118.293012, + 33.746416 + ], + [ + -118.293, + 33.746519 + ], + [ + -118.292939, + 33.746605 + ], + [ + -118.292919, + 33.746704 + ], + [ + -118.293, + 33.746789 + ], + [ + -118.29318, + 33.746765 + ], + [ + -118.293302, + 33.746763 + ], + [ + -118.293325, + 33.746741 + ], + [ + -118.293319, + 33.746349 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 670916322, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.325566, + 33.915766 + ], + [ + -118.325655, + 33.915768 + ], + [ + -118.32565, + 33.916452 + ], + [ + -118.325526, + 33.916455 + ], + [ + -118.324706, + 33.916456 + ], + [ + -118.324284, + 33.916458 + ], + [ + -118.324118, + 33.916459 + ], + [ + -118.323962, + 33.916458 + ], + [ + -118.322975, + 33.916452 + ], + [ + -118.321271, + 33.916453 + ], + [ + -118.321069, + 33.916454 + ], + [ + -118.320445, + 33.916454 + ], + [ + -118.320438, + 33.916275 + ], + [ + -118.324706, + 33.916264 + ], + [ + -118.325566, + 33.91625 + ], + [ + -118.325566, + 33.915766 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 24352431, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.960569, + 33.726999 + ], + [ + -117.96114, + 33.72698 + ], + [ + -117.961161, + 33.728794 + ], + [ + -117.960999, + 33.72891 + ], + [ + -117.96087, + 33.728817 + ], + [ + -117.960699, + 33.728735 + ], + [ + -117.960359, + 33.728651 + ], + [ + -117.960348, + 33.727417 + ], + [ + -117.96046, + 33.727152 + ], + [ + -117.960569, + 33.726999 + ] + ] + ] + }, + "properties": { + "name": "Allen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 25651494, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.923651, + 33.783405 + ], + [ + -117.923535, + 33.783408 + ], + [ + -117.92229, + 33.783431 + ], + [ + -117.921361, + 33.783441 + ], + [ + -117.921363, + 33.783832 + ], + [ + -117.921387, + 33.78526 + ], + [ + -117.922205, + 33.78525 + ], + [ + -117.923684, + 33.785268 + ], + [ + -117.923651, + 33.783405 + ] + ] + ] + }, + "properties": { + "name": "West Haven Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 25652082, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.907178, + 33.78161 + ], + [ + -117.907158, + 33.781135 + ], + [ + -117.908195, + 33.781124 + ], + [ + -117.908179, + 33.779877 + ], + [ + -117.910514, + 33.779857 + ], + [ + -117.910498, + 33.778001 + ], + [ + -117.910285, + 33.778001 + ], + [ + -117.91025, + 33.778053 + ], + [ + -117.910207, + 33.778055 + ], + [ + -117.90724, + 33.778059 + ], + [ + -117.907239, + 33.779319 + ], + [ + -117.906576, + 33.779874 + ], + [ + -117.9063, + 33.779876 + ], + [ + -117.906302, + 33.781613 + ], + [ + -117.907178, + 33.78161 + ] + ] + ] + }, + "properties": { + "name": "Haster Basin Recreational Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 25654949, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.770579, + 33.750108 + ], + [ + -117.77084, + 33.750139 + ], + [ + -117.770979, + 33.750156 + ], + [ + -117.770756, + 33.750573 + ], + [ + -117.770265, + 33.751452 + ], + [ + -117.77028, + 33.751483 + ], + [ + -117.770328, + 33.751549 + ], + [ + -117.770393, + 33.751652 + ], + [ + -117.770362, + 33.751697 + ], + [ + -117.770226, + 33.751782 + ], + [ + -117.770095, + 33.751869 + ], + [ + -117.769962, + 33.752006 + ], + [ + -117.769925, + 33.752121 + ], + [ + -117.769903, + 33.752232 + ], + [ + -117.76992, + 33.752364 + ], + [ + -117.769931, + 33.752465 + ], + [ + -117.769883, + 33.752541 + ], + [ + -117.769789, + 33.75259 + ], + [ + -117.769687, + 33.752658 + ], + [ + -117.769612, + 33.752743 + ], + [ + -117.769541, + 33.752706 + ], + [ + -117.769212, + 33.752536 + ], + [ + -117.768978, + 33.752161 + ], + [ + -117.768732, + 33.751835 + ], + [ + -117.768342, + 33.751056 + ], + [ + -117.768387, + 33.750991 + ], + [ + -117.768553, + 33.750801 + ], + [ + -117.768712, + 33.75066 + ], + [ + -117.768915, + 33.75052 + ], + [ + -117.769078, + 33.750422 + ], + [ + -117.769246, + 33.750336 + ], + [ + -117.769525, + 33.750231 + ], + [ + -117.769631, + 33.750199 + ], + [ + -117.769736, + 33.750172 + ], + [ + -117.769887, + 33.750139 + ], + [ + -117.77004, + 33.750118 + ], + [ + -117.770182, + 33.750105 + ], + [ + -117.77038, + 33.750101 + ], + [ + -117.770579, + 33.750108 + ] + ] + ] + }, + "properties": { + "name": "Cedar Grove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30991368, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.638218, + 33.551927 + ], + [ + -117.638286, + 33.551855 + ], + [ + -117.638321, + 33.551762 + ], + [ + -117.638295, + 33.551297 + ], + [ + -117.638252, + 33.550997 + ], + [ + -117.638209, + 33.550775 + ], + [ + -117.638098, + 33.55036 + ], + [ + -117.638029, + 33.550131 + ], + [ + -117.638003, + 33.550088 + ], + [ + -117.637926, + 33.550095 + ], + [ + -117.637711, + 33.550188 + ], + [ + -117.637514, + 33.550346 + ], + [ + -117.637325, + 33.550561 + ], + [ + -117.637222, + 33.550804 + ], + [ + -117.637205, + 33.551097 + ], + [ + -117.637265, + 33.551326 + ], + [ + -117.637428, + 33.551562 + ], + [ + -117.637625, + 33.551755 + ], + [ + -117.637857, + 33.551884 + ], + [ + -117.63808, + 33.551955 + ], + [ + -117.638218, + 33.551927 + ] + ] + ] + }, + "properties": { + "name": "Avendale Village Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30993263, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.637197, + 33.551813 + ], + [ + -117.637189, + 33.551734 + ], + [ + -117.637214, + 33.551634 + ], + [ + -117.637077, + 33.551333 + ], + [ + -117.637043, + 33.551255 + ], + [ + -117.636983, + 33.551233 + ], + [ + -117.634236, + 33.551398 + ], + [ + -117.633824, + 33.551398 + ], + [ + -117.633764, + 33.551448 + ], + [ + -117.633781, + 33.551519 + ], + [ + -117.634021, + 33.552313 + ], + [ + -117.634382, + 33.552957 + ], + [ + -117.634828, + 33.553501 + ], + [ + -117.635369, + 33.553959 + ], + [ + -117.635549, + 33.553794 + ], + [ + -117.635326, + 33.553623 + ], + [ + -117.636485, + 33.552442 + ], + [ + -117.63645, + 33.552356 + ], + [ + -117.636476, + 33.552292 + ], + [ + -117.636596, + 33.552235 + ], + [ + -117.636674, + 33.552242 + ], + [ + -117.636862, + 33.552049 + ], + [ + -117.637197, + 33.551813 + ] + ] + ] + }, + "properties": { + "name": "Founder's Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30993323, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.634193, + 33.552149 + ], + [ + -117.634356, + 33.552113 + ], + [ + -117.634322, + 33.551984 + ], + [ + -117.634167, + 33.552013 + ], + [ + -117.634193, + 33.552149 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30993362, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.644132, + 33.559688 + ], + [ + -117.644235, + 33.559495 + ], + [ + -117.644321, + 33.559295 + ], + [ + -117.644407, + 33.559116 + ], + [ + -117.644433, + 33.558908 + ], + [ + -117.644415, + 33.558815 + ], + [ + -117.644295, + 33.558737 + ], + [ + -117.643935, + 33.558729 + ], + [ + -117.643806, + 33.55883 + ], + [ + -117.643823, + 33.559016 + ], + [ + -117.643866, + 33.559259 + ], + [ + -117.643858, + 33.559509 + ], + [ + -117.643909, + 33.559674 + ], + [ + -117.644012, + 33.559709 + ], + [ + -117.644132, + 33.559688 + ] + ] + ] + }, + "properties": { + "name": "Wagsdale Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30993453, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.640064, + 33.559645 + ], + [ + -117.640107, + 33.559459 + ], + [ + -117.64009, + 33.55928 + ], + [ + -117.640055, + 33.559151 + ], + [ + -117.640038, + 33.558715 + ], + [ + -117.640048, + 33.558622 + ], + [ + -117.639899, + 33.558548 + ], + [ + -117.639778, + 33.558578 + ], + [ + -117.63967, + 33.558535 + ], + [ + -117.639622, + 33.558425 + ], + [ + -117.639555, + 33.558403 + ], + [ + -117.639008, + 33.558586 + ], + [ + -117.639137, + 33.559123 + ], + [ + -117.639166, + 33.559313 + ], + [ + -117.639137, + 33.559573 + ], + [ + -117.639163, + 33.559724 + ], + [ + -117.639223, + 33.559759 + ], + [ + -117.6396, + 33.559659 + ], + [ + -117.640064, + 33.559645 + ] + ] + ] + }, + "properties": { + "name": "Flintridge Village Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30993580, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.633764, + 33.564687 + ], + [ + -117.633773, + 33.564644 + ], + [ + -117.633738, + 33.564623 + ], + [ + -117.633455, + 33.564208 + ], + [ + -117.63336, + 33.564058 + ], + [ + -117.63336, + 33.564029 + ], + [ + -117.633335, + 33.564008 + ], + [ + -117.6333, + 33.564015 + ], + [ + -117.633292, + 33.564044 + ], + [ + -117.633267, + 33.564055 + ], + [ + -117.632531, + 33.564409 + ], + [ + -117.632502, + 33.564423 + ], + [ + -117.632416, + 33.56443 + ], + [ + -117.632399, + 33.56448 + ], + [ + -117.632416, + 33.564516 + ], + [ + -117.632451, + 33.564558 + ], + [ + -117.632494, + 33.564573 + ], + [ + -117.632537, + 33.564573 + ], + [ + -117.632571, + 33.564566 + ], + [ + -117.632854, + 33.56498 + ], + [ + -117.632837, + 33.564995 + ], + [ + -117.632854, + 33.565016 + ], + [ + -117.63288, + 33.565009 + ], + [ + -117.632923, + 33.565045 + ], + [ + -117.63294, + 33.565081 + ], + [ + -117.632966, + 33.565066 + ], + [ + -117.633764, + 33.564687 + ] + ] + ] + }, + "properties": { + "name": "Town Green", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 31092676, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.648406, + 33.563497 + ], + [ + -117.647849, + 33.563624 + ], + [ + -117.64748, + 33.563738 + ], + [ + -117.647172, + 33.563892 + ], + [ + -117.646991, + 33.563982 + ], + [ + -117.646953, + 33.563996 + ], + [ + -117.646416, + 33.564203 + ], + [ + -117.645832, + 33.564547 + ], + [ + -117.645154, + 33.564876 + ], + [ + -117.644545, + 33.56519 + ], + [ + -117.644038, + 33.565433 + ], + [ + -117.643867, + 33.565577 + ], + [ + -117.643944, + 33.565948 + ], + [ + -117.644013, + 33.566413 + ], + [ + -117.644038, + 33.566728 + ], + [ + -117.644596, + 33.566742 + ], + [ + -117.644999, + 33.566864 + ], + [ + -117.64524, + 33.566921 + ], + [ + -117.645557, + 33.566921 + ], + [ + -117.645832, + 33.566821 + ], + [ + -117.646038, + 33.566771 + ], + [ + -117.646331, + 33.566885 + ], + [ + -117.646673, + 33.567036 + ], + [ + -117.6468, + 33.567055 + ], + [ + -117.646922, + 33.567069 + ], + [ + -117.647018, + 33.566977 + ], + [ + -117.647197, + 33.566788 + ], + [ + -117.647395, + 33.566621 + ], + [ + -117.64751, + 33.566481 + ], + [ + -117.647502, + 33.566141 + ], + [ + -117.647417, + 33.566068 + ], + [ + -117.647344, + 33.566023 + ], + [ + -117.647185, + 33.565889 + ], + [ + -117.647155, + 33.565863 + ], + [ + -117.647207, + 33.565648 + ], + [ + -117.647195, + 33.565402 + ], + [ + -117.6474, + 33.565159 + ], + [ + -117.647647, + 33.56493 + ], + [ + -117.647895, + 33.564777 + ], + [ + -117.648169, + 33.564544 + ], + [ + -117.648342, + 33.56421 + ], + [ + -117.648403, + 33.563873 + ], + [ + -117.648406, + 33.563497 + ] + ] + ] + }, + "properties": { + "name": "Cox Sports Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35104315, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.893865, + 33.687033 + ], + [ + -117.893859, + 33.685424 + ], + [ + -117.892988, + 33.685424 + ], + [ + -117.892978, + 33.684724 + ], + [ + -117.892292, + 33.684718 + ], + [ + -117.892302, + 33.687031 + ], + [ + -117.893865, + 33.687033 + ] + ] + ] + }, + "properties": { + "name": "Shiffer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35599426, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.801038, + 33.675554 + ], + [ + -117.800897, + 33.67557 + ], + [ + -117.800872, + 33.675341 + ], + [ + -117.801013, + 33.675325 + ], + [ + -117.801038, + 33.675554 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 35599454, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.800906, + 33.676063 + ], + [ + -117.800553, + 33.67582 + ], + [ + -117.800773, + 33.675597 + ], + [ + -117.801117, + 33.675834 + ], + [ + -117.800906, + 33.676063 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 38226393, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.688682, + 33.871762 + ], + [ + -117.688682, + 33.871408 + ], + [ + -117.68848, + 33.871407 + ], + [ + -117.688482, + 33.871671 + ], + [ + -117.688298, + 33.871762 + ], + [ + -117.687363, + 33.871323 + ], + [ + -117.686349, + 33.871036 + ], + [ + -117.686307, + 33.871026 + ], + [ + -117.685057, + 33.870683 + ], + [ + -117.684557, + 33.87044 + ], + [ + -117.683123, + 33.869707 + ], + [ + -117.681656, + 33.869342 + ], + [ + -117.679848, + 33.868783 + ], + [ + -117.678053, + 33.868538 + ], + [ + -117.676975, + 33.868486 + ], + [ + -117.675817, + 33.868492 + ], + [ + -117.674915, + 33.868556 + ], + [ + -117.674054, + 33.868606 + ], + [ + -117.673559, + 33.862152 + ], + [ + -117.676324, + 33.862094 + ], + [ + -117.676606, + 33.862528 + ], + [ + -117.6773, + 33.862462 + ], + [ + -117.67759, + 33.862833 + ], + [ + -117.678034, + 33.863188 + ], + [ + -117.679668, + 33.863217 + ], + [ + -117.67992, + 33.862648 + ], + [ + -117.678828, + 33.861716 + ], + [ + -117.678605, + 33.860812 + ], + [ + -117.680118, + 33.860773 + ], + [ + -117.680805, + 33.86088 + ], + [ + -117.681647, + 33.861167 + ], + [ + -117.682235, + 33.861708 + ], + [ + -117.683123, + 33.861798 + ], + [ + -117.683015, + 33.86117 + ], + [ + -117.683359, + 33.860788 + ], + [ + -117.683443, + 33.859794 + ], + [ + -117.68412, + 33.859576 + ], + [ + -117.684169, + 33.859245 + ], + [ + -117.682398, + 33.858994 + ], + [ + -117.680504, + 33.857667 + ], + [ + -117.681775, + 33.856405 + ], + [ + -117.683501, + 33.857255 + ], + [ + -117.684365, + 33.856396 + ], + [ + -117.685461, + 33.856803 + ], + [ + -117.684353, + 33.857903 + ], + [ + -117.684676, + 33.858437 + ], + [ + -117.684982, + 33.858562 + ], + [ + -117.685846, + 33.859092 + ], + [ + -117.685628, + 33.859793 + ], + [ + -117.686427, + 33.859887 + ], + [ + -117.686661, + 33.860204 + ], + [ + -117.686191, + 33.860941 + ], + [ + -117.685959, + 33.861877 + ], + [ + -117.687501, + 33.861748 + ], + [ + -117.687138, + 33.86241 + ], + [ + -117.688085, + 33.862718 + ], + [ + -117.688787, + 33.862519 + ], + [ + -117.688894, + 33.860934 + ], + [ + -117.688215, + 33.860356 + ], + [ + -117.688362, + 33.859761 + ], + [ + -117.688305, + 33.859356 + ], + [ + -117.688439, + 33.859018 + ], + [ + -117.687677, + 33.85876 + ], + [ + -117.686331, + 33.857526 + ], + [ + -117.685702, + 33.855738 + ], + [ + -117.685661, + 33.854742 + ], + [ + -117.686391, + 33.854061 + ], + [ + -117.687116, + 33.853966 + ], + [ + -117.688491, + 33.853412 + ], + [ + -117.69098, + 33.853495 + ], + [ + -117.691939, + 33.852542 + ], + [ + -117.693877, + 33.853899 + ], + [ + -117.692709, + 33.855058 + ], + [ + -117.693847, + 33.855662 + ], + [ + -117.694912, + 33.856619 + ], + [ + -117.69566, + 33.855058 + ], + [ + -117.697274, + 33.856189 + ], + [ + -117.700847, + 33.85884 + ], + [ + -117.700593, + 33.858807 + ], + [ + -117.699955, + 33.858833 + ], + [ + -117.699377, + 33.858972 + ], + [ + -117.698652, + 33.859404 + ], + [ + -117.698204, + 33.859914 + ], + [ + -117.697957, + 33.860254 + ], + [ + -117.69771, + 33.860603 + ], + [ + -117.697495, + 33.861089 + ], + [ + -117.697412, + 33.861531 + ], + [ + -117.697463, + 33.862031 + ], + [ + -117.697738, + 33.862672 + ], + [ + -117.695626, + 33.864835 + ], + [ + -117.693816, + 33.866687 + ], + [ + -117.692588, + 33.867944 + ], + [ + -117.69055, + 33.870041 + ], + [ + -117.689666, + 33.870945 + ], + [ + -117.689016, + 33.871616 + ], + [ + -117.688794, + 33.871839 + ], + [ + -117.688682, + 33.871762 + ] + ] + ] + }, + "properties": { + "name": "Chino Hills State Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 39536568, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.793739, + 33.791703 + ], + [ + -117.795121, + 33.791946 + ], + [ + -117.796237, + 33.792395 + ], + [ + -117.796597, + 33.792509 + ], + [ + -117.796906, + 33.792723 + ], + [ + -117.797292, + 33.793308 + ], + [ + -117.797421, + 33.793943 + ], + [ + -117.797462, + 33.794364 + ], + [ + -117.796542, + 33.794843 + ], + [ + -117.796551, + 33.795917 + ], + [ + -117.797858, + 33.796837 + ], + [ + -117.797438, + 33.797153 + ], + [ + -117.797387, + 33.797745 + ], + [ + -117.79725, + 33.798679 + ], + [ + -117.796975, + 33.798814 + ], + [ + -117.796812, + 33.799242 + ], + [ + -117.796837, + 33.800041 + ], + [ + -117.797078, + 33.800526 + ], + [ + -117.797395, + 33.800712 + ], + [ + -117.797507, + 33.801054 + ], + [ + -117.797464, + 33.80124 + ], + [ + -117.797258, + 33.801518 + ], + [ + -117.796941, + 33.801853 + ], + [ + -117.796571, + 33.802081 + ], + [ + -117.796202, + 33.802138 + ], + [ + -117.796116, + 33.802152 + ], + [ + -117.796116, + 33.802402 + ], + [ + -117.796537, + 33.802481 + ], + [ + -117.796589, + 33.802616 + ], + [ + -117.796537, + 33.802751 + ], + [ + -117.796211, + 33.802951 + ], + [ + -117.797, + 33.803165 + ], + [ + -117.797756, + 33.803144 + ], + [ + -117.797661, + 33.803386 + ], + [ + -117.797189, + 33.8036 + ], + [ + -117.797086, + 33.803629 + ], + [ + -117.796983, + 33.803607 + ], + [ + -117.796812, + 33.803579 + ], + [ + -117.796606, + 33.803657 + ], + [ + -117.796408, + 33.803729 + ], + [ + -117.796323, + 33.804014 + ], + [ + -117.796056, + 33.80472 + ], + [ + -117.795868, + 33.805055 + ], + [ + -117.795858, + 33.805306 + ], + [ + -117.795687, + 33.805747 + ], + [ + -117.795627, + 33.805911 + ], + [ + -117.795232, + 33.805597 + ], + [ + -117.795026, + 33.805504 + ], + [ + -117.794958, + 33.805362 + ], + [ + -117.795095, + 33.805062 + ], + [ + -117.795095, + 33.804955 + ], + [ + -117.795181, + 33.804527 + ], + [ + -117.795181, + 33.804449 + ], + [ + -117.794812, + 33.804335 + ], + [ + -117.79452, + 33.804306 + ], + [ + -117.794074, + 33.804285 + ], + [ + -117.793979, + 33.804285 + ], + [ + -117.793885, + 33.803964 + ], + [ + -117.792984, + 33.804199 + ], + [ + -117.792941, + 33.804278 + ], + [ + -117.793224, + 33.804756 + ], + [ + -117.793001, + 33.80482 + ], + [ + -117.792915, + 33.804798 + ], + [ + -117.792718, + 33.804278 + ], + [ + -117.792469, + 33.803615 + ], + [ + -117.792323, + 33.803208 + ], + [ + -117.79228, + 33.80258 + ], + [ + -117.792306, + 33.802117 + ], + [ + -117.792391, + 33.801667 + ], + [ + -117.792546, + 33.800997 + ], + [ + -117.792597, + 33.800533 + ], + [ + -117.792589, + 33.800341 + ], + [ + -117.792546, + 33.80007 + ], + [ + -117.792469, + 33.799727 + ], + [ + -117.792349, + 33.799371 + ], + [ + -117.792142, + 33.798971 + ], + [ + -117.791937, + 33.79855 + ], + [ + -117.791739, + 33.798065 + ], + [ + -117.791619, + 33.797659 + ], + [ + -117.791628, + 33.797331 + ], + [ + -117.791645, + 33.796967 + ], + [ + -117.791696, + 33.79666 + ], + [ + -117.791808, + 33.796347 + ], + [ + -117.792048, + 33.795847 + ], + [ + -117.792469, + 33.795127 + ], + [ + -117.792606, + 33.794806 + ], + [ + -117.792709, + 33.794407 + ], + [ + -117.792778, + 33.794114 + ], + [ + -117.792803, + 33.793736 + ], + [ + -117.792821, + 33.793337 + ], + [ + -117.792881, + 33.79313 + ], + [ + -117.792958, + 33.792851 + ], + [ + -117.793104, + 33.792545 + ], + [ + -117.793275, + 33.792302 + ], + [ + -117.79349, + 33.791981 + ], + [ + -117.793739, + 33.791703 + ] + ] + ] + }, + "properties": { + "name": "El Modena Open Space", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 42232295, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.76215, + 33.702988 + ], + [ + -117.761478, + 33.702543 + ], + [ + -117.760498, + 33.70349 + ], + [ + -117.761164, + 33.703987 + ], + [ + -117.76173, + 33.703348 + ], + [ + -117.761869, + 33.703346 + ], + [ + -117.761891, + 33.703281 + ], + [ + -117.761919, + 33.703222 + ], + [ + -117.76215, + 33.702988 + ] + ] + ] + }, + "properties": { + "name": "Blue Gum Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 43757408, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.971087, + 33.653973 + ], + [ + -117.973064, + 33.653967 + ], + [ + -117.973265, + 33.653964 + ], + [ + -117.973351, + 33.654082 + ], + [ + -117.974092, + 33.654082 + ], + [ + -117.974083, + 33.653581 + ], + [ + -117.975311, + 33.65358 + ], + [ + -117.975297, + 33.651066 + ], + [ + -117.97756, + 33.651063 + ], + [ + -117.977553, + 33.650548 + ], + [ + -117.967026, + 33.650604 + ], + [ + -117.967026, + 33.650627 + ], + [ + -117.967029, + 33.651144 + ], + [ + -117.968255, + 33.651143 + ], + [ + -117.969947, + 33.651142 + ], + [ + -117.970793, + 33.651142 + ], + [ + -117.970827, + 33.651141 + ], + [ + -117.971048, + 33.651141 + ], + [ + -117.971087, + 33.653973 + ] + ] + ] + }, + "properties": { + "name": "Edison Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 43855137, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.629966, + 33.686371 + ], + [ + -117.629895, + 33.686448 + ], + [ + -117.629883, + 33.68646 + ], + [ + -117.629868, + 33.686466 + ], + [ + -117.629842, + 33.686477 + ], + [ + -117.629646, + 33.686602 + ], + [ + -117.629485, + 33.686673 + ], + [ + -117.629472, + 33.686711 + ], + [ + -117.629497, + 33.686774 + ], + [ + -117.629536, + 33.686836 + ], + [ + -117.62951, + 33.68685 + ], + [ + -117.629487, + 33.686868 + ], + [ + -117.629471, + 33.686886 + ], + [ + -117.629464, + 33.686904 + ], + [ + -117.629465, + 33.686923 + ], + [ + -117.629472, + 33.68694 + ], + [ + -117.629508, + 33.687002 + ], + [ + -117.62955, + 33.687046 + ], + [ + -117.629576, + 33.687064 + ], + [ + -117.629612, + 33.68715 + ], + [ + -117.629642, + 33.687258 + ], + [ + -117.630006, + 33.687476 + ], + [ + -117.630117, + 33.687507 + ], + [ + -117.630294, + 33.687512 + ], + [ + -117.630454, + 33.68749 + ], + [ + -117.630622, + 33.687465 + ], + [ + -117.630779, + 33.687424 + ], + [ + -117.630932, + 33.687372 + ], + [ + -117.631063, + 33.687323 + ], + [ + -117.631191, + 33.687255 + ], + [ + -117.63124, + 33.687162 + ], + [ + -117.631249, + 33.687093 + ], + [ + -117.631211, + 33.686987 + ], + [ + -117.631125, + 33.686858 + ], + [ + -117.631073, + 33.686709 + ], + [ + -117.630987, + 33.686584 + ], + [ + -117.630949, + 33.686568 + ], + [ + -117.630906, + 33.686549 + ], + [ + -117.630727, + 33.686585 + ], + [ + -117.630515, + 33.68663 + ], + [ + -117.630429, + 33.686637 + ], + [ + -117.630342, + 33.686633 + ], + [ + -117.630247, + 33.686596 + ], + [ + -117.630158, + 33.686549 + ], + [ + -117.630106, + 33.686508 + ], + [ + -117.630059, + 33.68645 + ], + [ + -117.629966, + 33.686371 + ] + ] + ] + }, + "properties": { + "name": "Concourse Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44123233, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.729424, + 33.577046 + ], + [ + -117.729184, + 33.577003 + ], + [ + -117.728866, + 33.576903 + ], + [ + -117.728573, + 33.576778 + ], + [ + -117.728197, + 33.576545 + ], + [ + -117.727936, + 33.576319 + ], + [ + -117.727845, + 33.576002 + ], + [ + -117.727802, + 33.575902 + ], + [ + -117.727777, + 33.575837 + ], + [ + -117.727565, + 33.575756 + ], + [ + -117.727124, + 33.575481 + ], + [ + -117.726384, + 33.575056 + ], + [ + -117.726275, + 33.574965 + ], + [ + -117.72636, + 33.574872 + ], + [ + -117.726412, + 33.574765 + ], + [ + -117.726414, + 33.574744 + ], + [ + -117.72642, + 33.574672 + ], + [ + -117.726425, + 33.574602 + ], + [ + -117.726429, + 33.574543 + ], + [ + -117.726404, + 33.574393 + ], + [ + -117.727317, + 33.574369 + ], + [ + -117.727473, + 33.57438 + ], + [ + -117.727625, + 33.574404 + ], + [ + -117.727746, + 33.574451 + ], + [ + -117.727853, + 33.574515 + ], + [ + -117.727973, + 33.574587 + ], + [ + -117.7281, + 33.574715 + ], + [ + -117.728171, + 33.574807 + ], + [ + -117.728239, + 33.574932 + ], + [ + -117.728273, + 33.575038 + ], + [ + -117.7286, + 33.576095 + ], + [ + -117.728652, + 33.576274 + ], + [ + -117.728755, + 33.576481 + ], + [ + -117.728841, + 33.576588 + ], + [ + -117.728935, + 33.576695 + ], + [ + -117.729107, + 33.576781 + ], + [ + -117.729261, + 33.576839 + ], + [ + -117.729459, + 33.576889 + ], + [ + -117.729424, + 33.577046 + ] + ] + ] + }, + "properties": { + "name": "Grand Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44447062, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.012437, + 33.755434 + ], + [ + -118.015321, + 33.755439 + ], + [ + -118.01534, + 33.755812 + ], + [ + -118.015717, + 33.75581 + ], + [ + -118.015647, + 33.755362 + ], + [ + -118.015142, + 33.754255 + ], + [ + -118.014987, + 33.753628 + ], + [ + -118.012608, + 33.751799 + ], + [ + -118.012458, + 33.751803 + ], + [ + -118.012442, + 33.754534 + ], + [ + -118.012437, + 33.755434 + ] + ] + ] + }, + "properties": { + "name": "Buckingham Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44709633, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.716765, + 33.578509 + ], + [ + -117.713387, + 33.576923 + ], + [ + -117.712729, + 33.577978 + ], + [ + -117.712325, + 33.578281 + ], + [ + -117.713427, + 33.578938 + ], + [ + -117.713427, + 33.579103 + ], + [ + -117.713487, + 33.57926 + ], + [ + -117.713606, + 33.57947 + ], + [ + -117.713672, + 33.579504 + ], + [ + -117.713963, + 33.579654 + ], + [ + -117.713995, + 33.579671 + ], + [ + -117.714042, + 33.579586 + ], + [ + -117.714142, + 33.579529 + ], + [ + -117.714272, + 33.579535 + ], + [ + -117.714553, + 33.579598 + ], + [ + -117.714868, + 33.57965 + ], + [ + -117.7151, + 33.579686 + ], + [ + -117.715264, + 33.579727 + ], + [ + -117.715421, + 33.579789 + ], + [ + -117.715544, + 33.579838 + ], + [ + -117.715681, + 33.579907 + ], + [ + -117.715804, + 33.579979 + ], + [ + -117.715943, + 33.580081 + ], + [ + -117.71607, + 33.580186 + ], + [ + -117.716152, + 33.580274 + ], + [ + -117.716302, + 33.580061 + ], + [ + -117.716388, + 33.579789 + ], + [ + -117.716371, + 33.57941 + ], + [ + -117.716457, + 33.578981 + ], + [ + -117.716765, + 33.578509 + ] + ] + ] + }, + "properties": { + "name": "Aliso Viejo Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44772858, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.718286, + 33.575168 + ], + [ + -117.718518, + 33.575483 + ], + [ + -117.718655, + 33.575612 + ], + [ + -117.718561, + 33.575891 + ], + [ + -117.718192, + 33.577249 + ], + [ + -117.718149, + 33.577314 + ], + [ + -117.717746, + 33.57775 + ], + [ + -117.717668, + 33.577771 + ], + [ + -117.71693, + 33.577278 + ], + [ + -117.716999, + 33.577192 + ], + [ + -117.717128, + 33.577021 + ], + [ + -117.717274, + 33.576927 + ], + [ + -117.717419, + 33.576837 + ], + [ + -117.717605, + 33.576695 + ], + [ + -117.717759, + 33.576514 + ], + [ + -117.717873, + 33.57628 + ], + [ + -117.717916, + 33.576017 + ], + [ + -117.71789, + 33.575812 + ], + [ + -117.717869, + 33.575669 + ], + [ + -117.717883, + 33.575576 + ], + [ + -117.718002, + 33.575362 + ], + [ + -117.718043, + 33.575125 + ], + [ + -117.71807, + 33.574931 + ], + [ + -117.718286, + 33.575168 + ] + ] + ] + }, + "properties": { + "name": "Springdale Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44772923, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.718879, + 33.567109 + ], + [ + -117.719233, + 33.567189 + ], + [ + -117.719246, + 33.567234 + ], + [ + -117.719237, + 33.567424 + ], + [ + -117.719029, + 33.568285 + ], + [ + -117.718929, + 33.568547 + ], + [ + -117.718828, + 33.568629 + ], + [ + -117.718769, + 33.56867 + ], + [ + -117.718759, + 33.56878 + ], + [ + -117.718559, + 33.568849 + ], + [ + -117.718398, + 33.568939 + ], + [ + -117.718326, + 33.568953 + ], + [ + -117.717247, + 33.566803 + ], + [ + -117.717553, + 33.566364 + ], + [ + -117.718879, + 33.567109 + ] + ] + ] + }, + "properties": { + "name": "Foxborough Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44773160, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.720584, + 33.560541 + ], + [ + -117.720571, + 33.560315 + ], + [ + -117.720456, + 33.560124 + ], + [ + -117.720432, + 33.559957 + ], + [ + -117.72036, + 33.559739 + ], + [ + -117.720137, + 33.559517 + ], + [ + -117.72, + 33.55942 + ], + [ + -117.71923, + 33.559421 + ], + [ + -117.719095, + 33.559461 + ], + [ + -117.718852, + 33.558908 + ], + [ + -117.718723, + 33.55875 + ], + [ + -117.718508, + 33.558443 + ], + [ + -117.718337, + 33.557992 + ], + [ + -117.718199, + 33.557584 + ], + [ + -117.718174, + 33.557069 + ], + [ + -117.718251, + 33.556683 + ], + [ + -117.718575, + 33.555782 + ], + [ + -117.719462, + 33.555917 + ], + [ + -117.720705, + 33.556142 + ], + [ + -117.720869, + 33.556173 + ], + [ + -117.721096, + 33.556226 + ], + [ + -117.721457, + 33.556347 + ], + [ + -117.721844, + 33.556492 + ], + [ + -117.72218, + 33.556639 + ], + [ + -117.722674, + 33.556907 + ], + [ + -117.723059, + 33.557128 + ], + [ + -117.723443, + 33.557397 + ], + [ + -117.72346, + 33.557507 + ], + [ + -117.723339, + 33.557651 + ], + [ + -117.723243, + 33.557803 + ], + [ + -117.723168, + 33.557954 + ], + [ + -117.723106, + 33.557999 + ], + [ + -117.723257, + 33.557615 + ], + [ + -117.723106, + 33.557339 + ], + [ + -117.722861, + 33.55721 + ], + [ + -117.722277, + 33.55696 + ], + [ + -117.721711, + 33.556781 + ], + [ + -117.721265, + 33.556674 + ], + [ + -117.720535, + 33.556516 + ], + [ + -117.720272, + 33.556526 + ], + [ + -117.720073, + 33.556595 + ], + [ + -117.719992, + 33.556812 + ], + [ + -117.719977, + 33.55701 + ], + [ + -117.719831, + 33.557181 + ], + [ + -117.719917, + 33.557525 + ], + [ + -117.719951, + 33.557732 + ], + [ + -117.720069, + 33.557887 + ], + [ + -117.720466, + 33.558204 + ], + [ + -117.720655, + 33.55844 + ], + [ + -117.72093, + 33.558784 + ], + [ + -117.721248, + 33.559206 + ], + [ + -117.721496, + 33.559542 + ], + [ + -117.721642, + 33.559849 + ], + [ + -117.721814, + 33.560014 + ], + [ + -117.722183, + 33.560236 + ], + [ + -117.722303, + 33.560422 + ], + [ + -117.722466, + 33.561037 + ], + [ + -117.722432, + 33.561244 + ], + [ + -117.722174, + 33.561666 + ], + [ + -117.722089, + 33.561988 + ], + [ + -117.72208, + 33.562224 + ], + [ + -117.722329, + 33.562653 + ], + [ + -117.722629, + 33.563025 + ], + [ + -117.722881, + 33.563233 + ], + [ + -117.722975, + 33.563288 + ], + [ + -117.723, + 33.563312 + ], + [ + -117.722966, + 33.563336 + ], + [ + -117.722937, + 33.563337 + ], + [ + -117.722558, + 33.563164 + ], + [ + -117.722327, + 33.563042 + ], + [ + -117.722057, + 33.562864 + ], + [ + -117.721849, + 33.56271 + ], + [ + -117.721588, + 33.562474 + ], + [ + -117.721376, + 33.562202 + ], + [ + -117.721221, + 33.561978 + ], + [ + -117.721085, + 33.561683 + ], + [ + -117.720899, + 33.561151 + ], + [ + -117.720677, + 33.560612 + ], + [ + -117.720584, + 33.560541 + ] + ] + ] + }, + "properties": { + "name": "Hillview Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44947869, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.745064, + 33.582991 + ], + [ + -117.745332, + 33.582991 + ], + [ + -117.745482, + 33.582955 + ], + [ + -117.745611, + 33.583013 + ], + [ + -117.745649, + 33.583196 + ], + [ + -117.745722, + 33.583446 + ], + [ + -117.745611, + 33.583734 + ], + [ + -117.745496, + 33.583986 + ], + [ + -117.745351, + 33.584514 + ], + [ + -117.745216, + 33.584741 + ], + [ + -117.74513, + 33.584863 + ], + [ + -117.744762, + 33.58512 + ], + [ + -117.744492, + 33.585382 + ], + [ + -117.744375, + 33.585446 + ], + [ + -117.744294, + 33.585418 + ], + [ + -117.74395, + 33.58522 + ], + [ + -117.743556, + 33.584885 + ], + [ + -117.743369, + 33.584755 + ], + [ + -117.743534, + 33.584774 + ], + [ + -117.743638, + 33.584515 + ], + [ + -117.743693, + 33.58429 + ], + [ + -117.743821, + 33.583828 + ], + [ + -117.74394, + 33.583573 + ], + [ + -117.744053, + 33.583259 + ], + [ + -117.744155, + 33.582668 + ], + [ + -117.744137, + 33.582443 + ], + [ + -117.744405, + 33.58242 + ], + [ + -117.744576, + 33.582768 + ], + [ + -117.744699, + 33.582884 + ], + [ + -117.744833, + 33.582937 + ], + [ + -117.745064, + 33.582991 + ] + ] + ] + }, + "properties": { + "name": "Canyon View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44947870, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.733917, + 33.565274 + ], + [ + -117.733348, + 33.565386 + ], + [ + -117.733101, + 33.565457 + ], + [ + -117.732844, + 33.56556 + ], + [ + -117.732689, + 33.565622 + ], + [ + -117.732774, + 33.565275 + ], + [ + -117.73298, + 33.564788 + ], + [ + -117.733177, + 33.564359 + ], + [ + -117.733255, + 33.564246 + ], + [ + -117.7336, + 33.56438 + ], + [ + -117.733709, + 33.564324 + ], + [ + -117.734001, + 33.564595 + ], + [ + -117.734173, + 33.56496 + ], + [ + -117.733874, + 33.565113 + ], + [ + -117.733917, + 33.565274 + ] + ] + ] + }, + "properties": { + "name": "Oak Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44947871, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.739431, + 33.569078 + ], + [ + -117.739085, + 33.569117 + ], + [ + -117.739085, + 33.569 + ], + [ + -117.739091, + 33.568916 + ], + [ + -117.739076, + 33.568774 + ], + [ + -117.739075, + 33.568474 + ], + [ + -117.739067, + 33.56839 + ], + [ + -117.739329, + 33.568398 + ], + [ + -117.739968, + 33.568515 + ], + [ + -117.740166, + 33.568456 + ], + [ + -117.740364, + 33.568436 + ], + [ + -117.740504, + 33.568523 + ], + [ + -117.740756, + 33.568558 + ], + [ + -117.74069, + 33.568739 + ], + [ + -117.74061, + 33.569008 + ], + [ + -117.74063, + 33.569129 + ], + [ + -117.739431, + 33.569078 + ] + ] + ] + }, + "properties": { + "name": "Westridge Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44947882, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.722079, + 33.553369 + ], + [ + -117.721993, + 33.553402 + ], + [ + -117.721402, + 33.553207 + ], + [ + -117.721131, + 33.553131 + ], + [ + -117.720905, + 33.553095 + ], + [ + -117.720672, + 33.553079 + ], + [ + -117.720631, + 33.553063 + ], + [ + -117.720601, + 33.553016 + ], + [ + -117.7206, + 33.552967 + ], + [ + -117.720729, + 33.552757 + ], + [ + -117.720921, + 33.552518 + ], + [ + -117.721004, + 33.552385 + ], + [ + -117.721183, + 33.552198 + ], + [ + -117.721346, + 33.551954 + ], + [ + -117.721447, + 33.551761 + ], + [ + -117.721407, + 33.551312 + ], + [ + -117.721408, + 33.551011 + ], + [ + -117.722744, + 33.551307 + ], + [ + -117.722678, + 33.551447 + ], + [ + -117.72304, + 33.551558 + ], + [ + -117.722079, + 33.553369 + ] + ] + ] + }, + "properties": { + "name": "Aliso Canyon Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44948717, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.723137, + 33.606337 + ], + [ + -117.723072, + 33.606132 + ], + [ + -117.723029, + 33.605935 + ], + [ + -117.723005, + 33.605905 + ], + [ + -117.722755, + 33.605595 + ], + [ + -117.72286, + 33.605229 + ], + [ + -117.722878, + 33.604925 + ], + [ + -117.722869, + 33.604338 + ], + [ + -117.722971, + 33.603501 + ], + [ + -117.723263, + 33.603608 + ], + [ + -117.72346, + 33.60373 + ], + [ + -117.723709, + 33.603923 + ], + [ + -117.723966, + 33.604509 + ], + [ + -117.72441, + 33.605345 + ], + [ + -117.723291, + 33.606512 + ], + [ + -117.723137, + 33.606337 + ] + ] + ] + }, + "properties": { + "name": "Iglesia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 45004468, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.697168, + 33.586971 + ], + [ + -117.69725, + 33.587143 + ], + [ + -117.697736, + 33.587868 + ], + [ + -117.697916, + 33.588213 + ], + [ + -117.697525, + 33.588387 + ], + [ + -117.697357, + 33.588208 + ], + [ + -117.697029, + 33.588067 + ], + [ + -117.696701, + 33.58771 + ], + [ + -117.696337, + 33.587414 + ], + [ + -117.695964, + 33.58717 + ], + [ + -117.695885, + 33.587051 + ], + [ + -117.696303, + 33.58687 + ], + [ + -117.696881, + 33.586614 + ], + [ + -117.697168, + 33.586971 + ] + ] + ] + }, + "properties": { + "name": "Mendocino Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 45005855, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.691259, + 33.590271 + ], + [ + -117.691042, + 33.590466 + ], + [ + -117.690967, + 33.590436 + ], + [ + -117.69087, + 33.590445 + ], + [ + -117.69081, + 33.590489 + ], + [ + -117.690779, + 33.590558 + ], + [ + -117.690534, + 33.590767 + ], + [ + -117.690593, + 33.590809 + ], + [ + -117.690322, + 33.59105 + ], + [ + -117.690023, + 33.590799 + ], + [ + -117.689981, + 33.590743 + ], + [ + -117.689918, + 33.590648 + ], + [ + -117.689837, + 33.590595 + ], + [ + -117.68974, + 33.590583 + ], + [ + -117.689671, + 33.590592 + ], + [ + -117.689615, + 33.590622 + ], + [ + -117.68934, + 33.590381 + ], + [ + -117.689393, + 33.590312 + ], + [ + -117.689819, + 33.590052 + ], + [ + -117.690905, + 33.58998 + ], + [ + -117.691034, + 33.59 + ], + [ + -117.691259, + 33.590271 + ] + ] + ] + }, + "properties": { + "name": "El Conejo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 49031554, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.897456, + 33.837422 + ], + [ + -117.896118, + 33.837727 + ], + [ + -117.89644, + 33.838753 + ], + [ + -117.897286, + 33.83857 + ], + [ + -117.897251, + 33.838473 + ], + [ + -117.897764, + 33.838364 + ], + [ + -117.897456, + 33.837422 + ] + ] + ] + }, + "properties": { + "name": "Lincoln Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 50033925, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.834053, + 33.651098 + ], + [ + -117.833315, + 33.651118 + ], + [ + -117.833085, + 33.650006 + ], + [ + -117.832653, + 33.649668 + ], + [ + -117.832628, + 33.649648 + ], + [ + -117.832834, + 33.649371 + ], + [ + -117.833034, + 33.649228 + ], + [ + -117.833415, + 33.6491 + ], + [ + -117.833417, + 33.649153 + ], + [ + -117.833439, + 33.649872 + ], + [ + -117.833974, + 33.649817 + ], + [ + -117.834053, + 33.651098 + ] + ] + ] + }, + "properties": { + "name": "Columbia Square Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 50097567, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.821268, + 33.681122 + ], + [ + -117.820696, + 33.680062 + ], + [ + -117.820197, + 33.679787 + ], + [ + -117.819843, + 33.68007 + ], + [ + -117.819553, + 33.680287 + ], + [ + -117.820136, + 33.680937 + ], + [ + -117.820305, + 33.681082 + ], + [ + -117.820412, + 33.68114 + ], + [ + -117.820543, + 33.68118 + ], + [ + -117.820731, + 33.681231 + ], + [ + -117.820879, + 33.681231 + ], + [ + -117.821074, + 33.681182 + ], + [ + -117.821268, + 33.681122 + ] + ] + ] + }, + "properties": { + "name": "San Marino Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 50842219, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.720711, + 33.592673 + ], + [ + -117.720432, + 33.592771 + ], + [ + -117.719745, + 33.592704 + ], + [ + -117.718538, + 33.592494 + ], + [ + -117.716559, + 33.592347 + ], + [ + -117.716435, + 33.59245 + ], + [ + -117.716661, + 33.592798 + ], + [ + -117.716929, + 33.592736 + ], + [ + -117.717594, + 33.592852 + ], + [ + -117.717996, + 33.592812 + ], + [ + -117.718517, + 33.592812 + ], + [ + -117.719032, + 33.592905 + ], + [ + -117.719321, + 33.592843 + ], + [ + -117.719686, + 33.593089 + ], + [ + -117.72004, + 33.593196 + ], + [ + -117.719869, + 33.593589 + ], + [ + -117.720287, + 33.593652 + ], + [ + -117.720308, + 33.593464 + ], + [ + -117.720502, + 33.593384 + ], + [ + -117.720764, + 33.59329 + ], + [ + -117.720984, + 33.593053 + ], + [ + -117.720711, + 33.592673 + ] + ] + ] + }, + "properties": { + "name": "Glenwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 50842334, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.719796, + 33.58967 + ], + [ + -117.719922, + 33.590014 + ], + [ + -117.719957, + 33.59028 + ], + [ + -117.720048, + 33.590546 + ], + [ + -117.720746, + 33.59047 + ], + [ + -117.721813, + 33.590463 + ], + [ + -117.722191, + 33.590512 + ], + [ + -117.722674, + 33.590396 + ], + [ + -117.72306, + 33.590479 + ], + [ + -117.723235, + 33.590618 + ], + [ + -117.723959, + 33.590901 + ], + [ + -117.724603, + 33.591158 + ], + [ + -117.725067, + 33.590329 + ], + [ + -117.725032, + 33.590278 + ], + [ + -117.723554, + 33.589867 + ], + [ + -117.722586, + 33.58954 + ], + [ + -117.721886, + 33.589221 + ], + [ + -117.7218, + 33.58961 + ], + [ + -117.721596, + 33.589699 + ], + [ + -117.719796, + 33.58967 + ] + ] + ] + }, + "properties": { + "name": "Argonaut Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 50842460, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.7221, + 33.593895 + ], + [ + -117.722725, + 33.593971 + ], + [ + -117.722983, + 33.593453 + ], + [ + -117.723068, + 33.593283 + ], + [ + -117.722508, + 33.592624 + ], + [ + -117.722116, + 33.59261 + ], + [ + -117.720933, + 33.592733 + ], + [ + -117.721271, + 33.593082 + ], + [ + -117.721792, + 33.593437 + ], + [ + -117.7221, + 33.593895 + ] + ] + ] + }, + "properties": { + "name": "Pinewood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 52881723, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.954385, + 33.81554 + ], + [ + -117.953076, + 33.81558 + ], + [ + -117.950246, + 33.815575 + ], + [ + -117.950238, + 33.81367 + ], + [ + -117.950794, + 33.813654 + ], + [ + -117.951376, + 33.813536 + ], + [ + -117.954423, + 33.813516 + ], + [ + -117.954398, + 33.815181 + ], + [ + -117.954385, + 33.81554 + ] + ] + ] + }, + "properties": { + "name": "Modjeska Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 52882045, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.939294, + 33.823434 + ], + [ + -117.938356, + 33.823443 + ], + [ + -117.937213, + 33.823453 + ], + [ + -117.937192, + 33.821766 + ], + [ + -117.939273, + 33.821748 + ], + [ + -117.939294, + 33.823434 + ] + ] + ] + }, + "properties": { + "name": "Willow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 52882296, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.94528, + 33.828766 + ], + [ + -117.94527, + 33.826395 + ], + [ + -117.944293, + 33.826398 + ], + [ + -117.943901, + 33.826399 + ], + [ + -117.943903, + 33.826829 + ], + [ + -117.943662, + 33.82683 + ], + [ + -117.94367, + 33.82877 + ], + [ + -117.944579, + 33.828768 + ], + [ + -117.944972, + 33.828767 + ], + [ + -117.945088, + 33.828766 + ], + [ + -117.945168, + 33.828766 + ], + [ + -117.94528, + 33.828766 + ] + ] + ] + }, + "properties": { + "name": "Chaparral Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 52882396, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.924071, + 33.849924 + ], + [ + -117.923953, + 33.849983 + ], + [ + -117.919922, + 33.848105 + ], + [ + -117.919911, + 33.847881 + ], + [ + -117.919928, + 33.84738 + ], + [ + -117.920808, + 33.847316 + ], + [ + -117.923692, + 33.847287 + ], + [ + -117.924034, + 33.848374 + ], + [ + -117.924072, + 33.848929 + ], + [ + -117.924071, + 33.849924 + ] + ] + ] + }, + "properties": { + "name": "La Palma Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 54224352, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.934109, + 33.617078 + ], + [ + -117.934333, + 33.616936 + ], + [ + -117.935145, + 33.617824 + ], + [ + -117.935151, + 33.617861 + ], + [ + -117.935135, + 33.617895 + ], + [ + -117.935007, + 33.617999 + ], + [ + -117.934986, + 33.618009 + ], + [ + -117.934955, + 33.618004 + ], + [ + -117.934927, + 33.617984 + ], + [ + -117.934109, + 33.617078 + ] + ] + ] + }, + "properties": { + "name": "38th Street Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 54231487, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.926852, + 33.616113 + ], + [ + -117.926899, + 33.616039 + ], + [ + -117.926945, + 33.615946 + ], + [ + -117.926919, + 33.61594 + ], + [ + -117.926671, + 33.615941 + ], + [ + -117.92655, + 33.615942 + ], + [ + -117.926457, + 33.615941 + ], + [ + -117.926416, + 33.615943 + ], + [ + -117.926377, + 33.615952 + ], + [ + -117.926062, + 33.616078 + ], + [ + -117.925914, + 33.616127 + ], + [ + -117.926051, + 33.616155 + ], + [ + -117.92621, + 33.61619 + ], + [ + -117.926398, + 33.616234 + ], + [ + -117.926511, + 33.616244 + ], + [ + -117.926569, + 33.616246 + ], + [ + -117.92662, + 33.616241 + ], + [ + -117.926665, + 33.616231 + ], + [ + -117.926704, + 33.616217 + ], + [ + -117.926754, + 33.616197 + ], + [ + -117.926804, + 33.616168 + ], + [ + -117.926835, + 33.616139 + ], + [ + -117.926852, + 33.616113 + ] + ] + ] + }, + "properties": { + "name": "Lido Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 55209872, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.922067, + 33.607391 + ], + [ + -117.92167, + 33.607333 + ], + [ + -117.921618, + 33.607583 + ], + [ + -117.921833, + 33.607614 + ], + [ + -117.922016, + 33.60764 + ], + [ + -117.922067, + 33.607391 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 55292248, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.666877, + 33.664974 + ], + [ + -117.666978, + 33.665094 + ], + [ + -117.66676, + 33.665222 + ], + [ + -117.666658, + 33.665102 + ], + [ + -117.666877, + 33.664974 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 55292249, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.667064, + 33.664992 + ], + [ + -117.667289, + 33.664871 + ], + [ + -117.667214, + 33.664775 + ], + [ + -117.666987, + 33.664895 + ], + [ + -117.667064, + 33.664992 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 55335417, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.947431, + 33.625232 + ], + [ + -117.947153, + 33.625153 + ], + [ + -117.946809, + 33.625099 + ], + [ + -117.946473, + 33.625074 + ], + [ + -117.946338, + 33.625038 + ], + [ + -117.946297, + 33.625027 + ], + [ + -117.946052, + 33.62501 + ], + [ + -117.945953, + 33.625017 + ], + [ + -117.945741, + 33.62498 + ], + [ + -117.945779, + 33.62495 + ], + [ + -117.945819, + 33.624897 + ], + [ + -117.9459, + 33.624777 + ], + [ + -117.945709, + 33.624378 + ], + [ + -117.945517, + 33.623985 + ], + [ + -117.946206, + 33.624329 + ], + [ + -117.946345, + 33.624405 + ], + [ + -117.946623, + 33.624557 + ], + [ + -117.947176, + 33.624863 + ], + [ + -117.947597, + 33.625096 + ], + [ + -117.948339, + 33.6255 + ], + [ + -117.949721, + 33.626237 + ], + [ + -117.95061, + 33.626731 + ], + [ + -117.951114, + 33.627009 + ], + [ + -117.951611, + 33.627295 + ], + [ + -117.952583, + 33.62789 + ], + [ + -117.956341, + 33.630183 + ], + [ + -117.956352, + 33.630284 + ], + [ + -117.954416, + 33.629198 + ], + [ + -117.952676, + 33.628166 + ], + [ + -117.949797, + 33.626521 + ], + [ + -117.947949, + 33.625444 + ], + [ + -117.947697, + 33.625335 + ], + [ + -117.947431, + 33.625232 + ] + ] + ] + }, + "properties": { + "name": "West Newport Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 55543904, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.000772, + 33.668801 + ], + [ + -118.000755, + 33.66881 + ], + [ + -118.000733, + 33.668805 + ], + [ + -118.000498, + 33.668746 + ], + [ + -118.000361, + 33.668735 + ], + [ + -118.000234, + 33.668735 + ], + [ + -118.000095, + 33.668753 + ], + [ + -117.999957, + 33.668791 + ], + [ + -117.999708, + 33.668891 + ], + [ + -117.999635, + 33.668942 + ], + [ + -117.999546, + 33.668985 + ], + [ + -117.999414, + 33.669029 + ], + [ + -117.999271, + 33.66907 + ], + [ + -117.999112, + 33.669102 + ], + [ + -117.998971, + 33.669118 + ], + [ + -117.998803, + 33.66912 + ], + [ + -117.998635, + 33.669103 + ], + [ + -117.998439, + 33.66906 + ], + [ + -117.997989, + 33.668928 + ], + [ + -117.997992, + 33.668391 + ], + [ + -117.998209, + 33.668267 + ], + [ + -117.998328, + 33.668212 + ], + [ + -117.998441, + 33.668174 + ], + [ + -117.998515, + 33.668156 + ], + [ + -117.998637, + 33.668149 + ], + [ + -117.998813, + 33.668162 + ], + [ + -117.999283, + 33.668268 + ], + [ + -117.999466, + 33.668292 + ], + [ + -117.999629, + 33.668305 + ], + [ + -117.999783, + 33.668309 + ], + [ + -117.999966, + 33.668305 + ], + [ + -118.000114, + 33.668296 + ], + [ + -118.000289, + 33.668275 + ], + [ + -118.000539, + 33.668212 + ], + [ + -118.00077, + 33.668774 + ], + [ + -118.000772, + 33.668801 + ] + ] + ] + }, + "properties": { + "name": "Lake Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 55556058, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.021987, + 33.674398 + ], + [ + -118.022672, + 33.674909 + ], + [ + -118.022631, + 33.674949 + ], + [ + -118.023856, + 33.675893 + ], + [ + -118.023798, + 33.675941 + ], + [ + -118.023776, + 33.675959 + ], + [ + -118.023596, + 33.675853 + ], + [ + -118.023406, + 33.675759 + ], + [ + -118.023246, + 33.67568 + ], + [ + -118.023077, + 33.675619 + ], + [ + -118.022699, + 33.675508 + ], + [ + -118.02249, + 33.675462 + ], + [ + -118.022316, + 33.675438 + ], + [ + -118.022113, + 33.675422 + ], + [ + -118.021805, + 33.675408 + ], + [ + -118.021705, + 33.675405 + ], + [ + -118.021617, + 33.6754 + ], + [ + -118.021473, + 33.675381 + ], + [ + -118.021248, + 33.675343 + ], + [ + -118.021029, + 33.675292 + ], + [ + -118.021987, + 33.674398 + ] + ] + ] + }, + "properties": { + "name": "Pattinson Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 55677601, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.054579, + 33.703544 + ], + [ + -118.053403, + 33.702428 + ], + [ + -118.040518, + 33.68877 + ], + [ + -118.039892, + 33.689143 + ], + [ + -118.039735, + 33.688944 + ], + [ + -118.039271, + 33.68918 + ], + [ + -118.034566, + 33.684184 + ], + [ + -118.032124, + 33.684831 + ], + [ + -118.031849, + 33.684857 + ], + [ + -118.031595, + 33.684831 + ], + [ + -118.031331, + 33.684709 + ], + [ + -118.031116, + 33.684534 + ], + [ + -118.030906, + 33.684371 + ], + [ + -118.030837, + 33.682674 + ], + [ + -118.029093, + 33.682688 + ], + [ + -118.027842, + 33.682695 + ], + [ + -118.026737, + 33.683652 + ], + [ + -118.025464, + 33.684272 + ], + [ + -118.024272, + 33.685379 + ], + [ + -118.023511, + 33.685358 + ], + [ + -118.023136, + 33.685487 + ], + [ + -118.021045, + 33.685517 + ], + [ + -118.020046, + 33.686052 + ], + [ + -118.019154, + 33.686924 + ], + [ + -118.018632, + 33.687635 + ], + [ + -118.018083, + 33.687918 + ], + [ + -118.017783, + 33.688567 + ], + [ + -118.017913, + 33.689698 + ], + [ + -118.017935, + 33.692749 + ], + [ + -118.017151, + 33.692756 + ], + [ + -118.016983, + 33.694532 + ], + [ + -118.01512, + 33.694605 + ], + [ + -118.015152, + 33.698004 + ], + [ + -118.016647, + 33.69823 + ], + [ + -118.016711, + 33.697944 + ], + [ + -118.020845, + 33.694964 + ], + [ + -118.021492, + 33.695257 + ], + [ + -118.022875, + 33.696381 + ], + [ + -118.024051, + 33.696634 + ], + [ + -118.028736, + 33.69986 + ], + [ + -118.037018, + 33.706364 + ], + [ + -118.038027, + 33.707453 + ], + [ + -118.038192, + 33.707751 + ], + [ + -118.038426, + 33.708169 + ], + [ + -118.032688, + 33.710641 + ], + [ + -118.032708, + 33.711758 + ], + [ + -118.041296, + 33.711673 + ], + [ + -118.041227, + 33.708645 + ], + [ + -118.042104, + 33.708022 + ], + [ + -118.043375, + 33.707543 + ], + [ + -118.044319, + 33.707437 + ], + [ + -118.045278, + 33.70739 + ], + [ + -118.046357, + 33.707769 + ], + [ + -118.04639, + 33.708168 + ], + [ + -118.046757, + 33.708773 + ], + [ + -118.047677, + 33.708886 + ], + [ + -118.049292, + 33.709339 + ], + [ + -118.051346, + 33.710682 + ], + [ + -118.051354, + 33.711587 + ], + [ + -118.061692, + 33.71154 + ], + [ + -118.062483, + 33.711467 + ], + [ + -118.062555, + 33.711402 + ], + [ + -118.062539, + 33.711292 + ], + [ + -118.06063, + 33.708999 + ], + [ + -118.060093, + 33.708443 + ], + [ + -118.059185, + 33.707629 + ], + [ + -118.054579, + 33.703544 + ] + ] + ] + }, + "properties": { + "name": "Bolsa Chica Ecological Reserve", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 56395862, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.673454, + 33.6629 + ], + [ + -117.673217, + 33.662712 + ], + [ + -117.673108, + 33.662798 + ], + [ + -117.672779, + 33.662801 + ], + [ + -117.672552, + 33.662877 + ], + [ + -117.672257, + 33.663021 + ], + [ + -117.672196, + 33.663051 + ], + [ + -117.671923, + 33.663252 + ], + [ + -117.671646, + 33.663338 + ], + [ + -117.671376, + 33.663387 + ], + [ + -117.670955, + 33.663575 + ], + [ + -117.670461, + 33.663719 + ], + [ + -117.670237, + 33.66392 + ], + [ + -117.670145, + 33.664072 + ], + [ + -117.670402, + 33.664259 + ], + [ + -117.670692, + 33.664006 + ], + [ + -117.671011, + 33.663891 + ], + [ + -117.671465, + 33.663733 + ], + [ + -117.671821, + 33.663594 + ], + [ + -117.672048, + 33.663604 + ], + [ + -117.672272, + 33.663677 + ], + [ + -117.672395, + 33.663716 + ], + [ + -117.672325, + 33.66367 + ], + [ + -117.672512, + 33.663627 + ], + [ + -117.672769, + 33.663532 + ], + [ + -117.673006, + 33.66342 + ], + [ + -117.673246, + 33.663269 + ], + [ + -117.673388, + 33.663157 + ], + [ + -117.673552, + 33.663002 + ], + [ + -117.673454, + 33.6629 + ] + ] + ] + }, + "properties": { + "name": "Lake Forest Nature Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 57018540, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.87428, + 33.601857 + ], + [ + -117.873639, + 33.601407 + ], + [ + -117.873373, + 33.601683 + ], + [ + -117.87306, + 33.601745 + ], + [ + -117.87335, + 33.602666 + ], + [ + -117.873518, + 33.602634 + ], + [ + -117.87428, + 33.601857 + ] + ] + ] + }, + "properties": { + "name": "Sherman Library & Gardens", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 57018543, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.887895, + 33.614042 + ], + [ + -117.887167, + 33.613802 + ], + [ + -117.886442, + 33.613444 + ], + [ + -117.882885, + 33.611349 + ], + [ + -117.883221, + 33.610994 + ], + [ + -117.881544, + 33.609799 + ], + [ + -117.880968, + 33.610402 + ], + [ + -117.880643, + 33.610252 + ], + [ + -117.880832, + 33.610908 + ], + [ + -117.880632, + 33.610953 + ], + [ + -117.880614, + 33.610917 + ], + [ + -117.880238, + 33.610986 + ], + [ + -117.880329, + 33.61132 + ], + [ + -117.879896, + 33.611396 + ], + [ + -117.879932, + 33.611526 + ], + [ + -117.879513, + 33.611599 + ], + [ + -117.879535, + 33.611803 + ], + [ + -117.879462, + 33.612273 + ], + [ + -117.879316, + 33.612491 + ], + [ + -117.879189, + 33.612476 + ], + [ + -117.879061, + 33.613126 + ], + [ + -117.878981, + 33.613129 + ], + [ + -117.879185, + 33.613775 + ], + [ + -117.879349, + 33.61417 + ], + [ + -117.879604, + 33.614646 + ], + [ + -117.879666, + 33.614725 + ], + [ + -117.8801, + 33.615168 + ], + [ + -117.880184, + 33.615289 + ], + [ + -117.880169, + 33.615441 + ], + [ + -117.879826, + 33.615605 + ], + [ + -117.880072, + 33.615783 + ], + [ + -117.880254, + 33.616068 + ], + [ + -117.88055, + 33.616675 + ], + [ + -117.880537, + 33.617134 + ], + [ + -117.881521, + 33.618017 + ], + [ + -117.881056, + 33.620012 + ], + [ + -117.880687, + 33.62002 + ], + [ + -117.880437, + 33.621674 + ], + [ + -117.880427, + 33.62189 + ], + [ + -117.880491, + 33.622171 + ], + [ + -117.880591, + 33.622421 + ], + [ + -117.880801, + 33.622679 + ], + [ + -117.881006, + 33.622857 + ], + [ + -117.881256, + 33.62305 + ], + [ + -117.881338, + 33.623043 + ], + [ + -117.881985, + 33.622455 + ], + [ + -117.882318, + 33.622076 + ], + [ + -117.883397, + 33.620638 + ], + [ + -117.883557, + 33.620446 + ], + [ + -117.884023, + 33.61999 + ], + [ + -117.884568, + 33.619578 + ], + [ + -117.884035, + 33.618939 + ], + [ + -117.884048, + 33.618757 + ], + [ + -117.884354, + 33.617972 + ], + [ + -117.884372, + 33.617839 + ], + [ + -117.884317, + 33.617638 + ], + [ + -117.884285, + 33.617433 + ], + [ + -117.88439, + 33.616527 + ], + [ + -117.884549, + 33.61644 + ], + [ + -117.884882, + 33.615654 + ], + [ + -117.885, + 33.615579 + ], + [ + -117.885306, + 33.615525 + ], + [ + -117.885661, + 33.615575 + ], + [ + -117.885879, + 33.615563 + ], + [ + -117.886093, + 33.615495 + ], + [ + -117.886348, + 33.615366 + ], + [ + -117.886704, + 33.615078 + ], + [ + -117.887473, + 33.614945 + ], + [ + -117.887883, + 33.614748 + ], + [ + -117.887986, + 33.614604 + ], + [ + -117.887984, + 33.614369 + ], + [ + -117.887895, + 33.614042 + ] + ] + ] + }, + "properties": { + "name": "Newport Beach Country Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 58536412, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.790898, + 33.712926 + ], + [ + -117.790798, + 33.712963 + ], + [ + -117.790705, + 33.713012 + ], + [ + -117.790622, + 33.713071 + ], + [ + -117.790549, + 33.713139 + ], + [ + -117.79049, + 33.713216 + ], + [ + -117.790443, + 33.713299 + ], + [ + -117.790412, + 33.713386 + ], + [ + -117.790395, + 33.713476 + ], + [ + -117.790395, + 33.713567 + ], + [ + -117.790409, + 33.713657 + ], + [ + -117.79044, + 33.713745 + ], + [ + -117.790484, + 33.713828 + ], + [ + -117.790543, + 33.713905 + ], + [ + -117.790614, + 33.713975 + ], + [ + -117.790696, + 33.714035 + ], + [ + -117.790788, + 33.714085 + ], + [ + -117.790888, + 33.714123 + ], + [ + -117.790993, + 33.714149 + ], + [ + -117.791101, + 33.714163 + ], + [ + -117.791211, + 33.714164 + ], + [ + -117.791319, + 33.714151 + ], + [ + -117.791425, + 33.714126 + ], + [ + -117.791524, + 33.714089 + ], + [ + -117.791617, + 33.71404 + ], + [ + -117.7917, + 33.713981 + ], + [ + -117.791773, + 33.713912 + ], + [ + -117.791833, + 33.713836 + ], + [ + -117.791879, + 33.713754 + ], + [ + -117.791911, + 33.713666 + ], + [ + -117.791927, + 33.713576 + ], + [ + -117.791928, + 33.713485 + ], + [ + -117.791913, + 33.713395 + ], + [ + -117.791883, + 33.713307 + ], + [ + -117.791838, + 33.713224 + ], + [ + -117.791779, + 33.713147 + ], + [ + -117.791708, + 33.713077 + ], + [ + -117.791626, + 33.713017 + ], + [ + -117.791534, + 33.712967 + ], + [ + -117.791435, + 33.712929 + ], + [ + -117.79133, + 33.712903 + ], + [ + -117.791221, + 33.712889 + ], + [ + -117.791112, + 33.712888 + ], + [ + -117.791003, + 33.712901 + ], + [ + -117.790898, + 33.712926 + ] + ] + ] + }, + "properties": { + "name": "Harvard Square Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 58547138, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.796765, + 33.710405 + ], + [ + -117.796865, + 33.710501 + ], + [ + -117.798129, + 33.710641 + ], + [ + -117.799519, + 33.709284 + ], + [ + -117.79992, + 33.708914 + ], + [ + -117.800361, + 33.708574 + ], + [ + -117.800891, + 33.70814 + ], + [ + -117.801453, + 33.707714 + ], + [ + -117.801581, + 33.707572 + ], + [ + -117.80169, + 33.707443 + ], + [ + -117.801898, + 33.70715 + ], + [ + -117.801721, + 33.707146 + ], + [ + -117.799757, + 33.707107 + ], + [ + -117.799768, + 33.706878 + ], + [ + -117.798148, + 33.706857 + ], + [ + -117.797966, + 33.706834 + ], + [ + -117.797794, + 33.706789 + ], + [ + -117.797757, + 33.706779 + ], + [ + -117.797665, + 33.706986 + ], + [ + -117.797489, + 33.707074 + ], + [ + -117.797278, + 33.707554 + ], + [ + -117.797184, + 33.707837 + ], + [ + -117.797079, + 33.708183 + ], + [ + -117.796991, + 33.70854 + ], + [ + -117.796924, + 33.708842 + ], + [ + -117.796903, + 33.708965 + ], + [ + -117.796907, + 33.709007 + ], + [ + -117.796924, + 33.709039 + ], + [ + -117.796957, + 33.70906 + ], + [ + -117.79699, + 33.709073 + ], + [ + -117.796765, + 33.710405 + ] + ] + ] + }, + "properties": { + "name": "Harvard Athletic Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 60118519, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.659959, + 33.680415 + ], + [ + -117.660391, + 33.680275 + ], + [ + -117.660332, + 33.680121 + ], + [ + -117.660601, + 33.68003 + ], + [ + -117.661236, + 33.679686 + ], + [ + -117.661293, + 33.679667 + ], + [ + -117.66138, + 33.679736 + ], + [ + -117.662347, + 33.680599 + ], + [ + -117.662481, + 33.680754 + ], + [ + -117.662521, + 33.680828 + ], + [ + -117.662574, + 33.680955 + ], + [ + -117.662595, + 33.681044 + ], + [ + -117.662596, + 33.6812 + ], + [ + -117.661625, + 33.681101 + ], + [ + -117.660233, + 33.680956 + ], + [ + -117.660158, + 33.680947 + ], + [ + -117.660077, + 33.680984 + ], + [ + -117.66002, + 33.680924 + ], + [ + -117.66002, + 33.680826 + ], + [ + -117.659985, + 33.68068 + ], + [ + -117.659982, + 33.680521 + ], + [ + -117.659959, + 33.680415 + ] + ] + ] + }, + "properties": { + "name": "Borrego Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 60118523, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.655927, + 33.690146 + ], + [ + -117.655988, + 33.690181 + ], + [ + -117.656145, + 33.69035 + ], + [ + -117.656217, + 33.690264 + ], + [ + -117.656307, + 33.690195 + ], + [ + -117.656418, + 33.69021 + ], + [ + -117.656592, + 33.6901 + ], + [ + -117.656703, + 33.690048 + ], + [ + -117.656823, + 33.690023 + ], + [ + -117.656856, + 33.69 + ], + [ + -117.656878, + 33.689967 + ], + [ + -117.656899, + 33.689927 + ], + [ + -117.656981, + 33.689864 + ], + [ + -117.656727, + 33.689672 + ], + [ + -117.656618, + 33.68962 + ], + [ + -117.656299, + 33.68946 + ], + [ + -117.656214, + 33.689438 + ], + [ + -117.656148, + 33.689435 + ], + [ + -117.655921, + 33.689583 + ], + [ + -117.65615, + 33.689818 + ], + [ + -117.655909, + 33.689982 + ], + [ + -117.655929, + 33.690015 + ], + [ + -117.65594, + 33.690038 + ], + [ + -117.655943, + 33.690053 + ], + [ + -117.655943, + 33.69007 + ], + [ + -117.655927, + 33.690146 + ] + ] + ] + }, + "properties": { + "name": "Borrego Canyon Overlook Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 60118524, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.708852, + 33.625951 + ], + [ + -117.708852, + 33.625923 + ], + [ + -117.708841, + 33.62589 + ], + [ + -117.70849, + 33.625514 + ], + [ + -117.70802, + 33.625796 + ], + [ + -117.707486, + 33.625247 + ], + [ + -117.707436, + 33.62528 + ], + [ + -117.707227, + 33.625054 + ], + [ + -117.706994, + 33.625188 + ], + [ + -117.706812, + 33.625267 + ], + [ + -117.706667, + 33.625309 + ], + [ + -117.70667, + 33.626093 + ], + [ + -117.70636, + 33.626087 + ], + [ + -117.706277, + 33.62604 + ], + [ + -117.706264, + 33.626083 + ], + [ + -117.706389, + 33.626144 + ], + [ + -117.706562, + 33.626255 + ], + [ + -117.706419, + 33.626388 + ], + [ + -117.706808, + 33.626543 + ], + [ + -117.707178, + 33.627009 + ], + [ + -117.708805, + 33.626008 + ], + [ + -117.708836, + 33.625986 + ], + [ + -117.708852, + 33.625951 + ] + ] + ] + }, + "properties": { + "name": "Village Pond Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 60430397, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.719529, + 33.697231 + ], + [ + -117.71991, + 33.696852 + ], + [ + -117.719542, + 33.6966 + ], + [ + -117.719485, + 33.696603 + ], + [ + -117.719165, + 33.696945 + ], + [ + -117.719169, + 33.696988 + ], + [ + -117.719529, + 33.697231 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 60430410, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.716791, + 33.696068 + ], + [ + -117.716867, + 33.696062 + ], + [ + -117.717684, + 33.695264 + ], + [ + -117.717687, + 33.695211 + ], + [ + -117.716801, + 33.694597 + ], + [ + -117.716744, + 33.694601 + ], + [ + -117.715908, + 33.695425 + ], + [ + -117.715928, + 33.69549 + ], + [ + -117.716791, + 33.696068 + ] + ] + ] + }, + "properties": { + "name": "Silverado Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 61453324, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.634248, + 33.629434 + ], + [ + -117.633293, + 33.629881 + ], + [ + -117.633389, + 33.630041 + ], + [ + -117.633503, + 33.630246 + ], + [ + -117.633689, + 33.630578 + ], + [ + -117.634723, + 33.63284 + ], + [ + -117.634183, + 33.633183 + ], + [ + -117.633964, + 33.6335 + ], + [ + -117.633938, + 33.633852 + ], + [ + -117.633982, + 33.634083 + ], + [ + -117.634294, + 33.634011 + ], + [ + -117.634877, + 33.633968 + ], + [ + -117.635165, + 33.633894 + ], + [ + -117.636223, + 33.633796 + ], + [ + -117.636357, + 33.633775 + ], + [ + -117.636428, + 33.633625 + ], + [ + -117.636393, + 33.632552 + ], + [ + -117.636178, + 33.631831 + ], + [ + -117.635998, + 33.631544 + ], + [ + -117.635556, + 33.630848 + ], + [ + -117.635114, + 33.630346 + ], + [ + -117.63456, + 33.62975 + ], + [ + -117.634248, + 33.629434 + ] + ] + ] + }, + "properties": { + "name": "Florence Joyner Olympiad Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 61453328, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.635289, + 33.631759 + ], + [ + -117.635203, + 33.631719 + ], + [ + -117.63516, + 33.631794 + ], + [ + -117.635067, + 33.631754 + ], + [ + -117.634998, + 33.631847 + ], + [ + -117.634778, + 33.631708 + ], + [ + -117.63473, + 33.631554 + ], + [ + -117.63472, + 33.631406 + ], + [ + -117.634831, + 33.631323 + ], + [ + -117.635079, + 33.631259 + ], + [ + -117.635252, + 33.631294 + ], + [ + -117.635328, + 33.631378 + ], + [ + -117.635307, + 33.631497 + ], + [ + -117.635367, + 33.631625 + ], + [ + -117.635289, + 33.631759 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 62445821, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.92914, + 33.851892 + ], + [ + -117.929062, + 33.851948 + ], + [ + -117.927659, + 33.852948 + ], + [ + -117.927091, + 33.852948 + ], + [ + -117.92706, + 33.852995 + ], + [ + -117.927005, + 33.853077 + ], + [ + -117.926957, + 33.853127 + ], + [ + -117.926662, + 33.85314 + ], + [ + -117.926361, + 33.853171 + ], + [ + -117.926157, + 33.853127 + ], + [ + -117.926223, + 33.852927 + ], + [ + -117.925503, + 33.852944 + ], + [ + -117.925417, + 33.852988 + ], + [ + -117.925288, + 33.853033 + ], + [ + -117.926292, + 33.853229 + ], + [ + -117.928389, + 33.853608 + ], + [ + -117.929145, + 33.853741 + ], + [ + -117.929156, + 33.853479 + ], + [ + -117.929097, + 33.853452 + ], + [ + -117.929043, + 33.853389 + ], + [ + -117.929065, + 33.853345 + ], + [ + -117.929092, + 33.853318 + ], + [ + -117.929151, + 33.8533 + ], + [ + -117.929143, + 33.852307 + ], + [ + -117.92914, + 33.851892 + ] + ] + ] + }, + "properties": { + "name": "Manzanita Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 64738784, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.731694, + 33.591672 + ], + [ + -117.731068, + 33.591543 + ], + [ + -117.730684, + 33.592246 + ], + [ + -117.730488, + 33.592546 + ], + [ + -117.73022, + 33.592892 + ], + [ + -117.729826, + 33.593319 + ], + [ + -117.729602, + 33.593513 + ], + [ + -117.729529, + 33.593593 + ], + [ + -117.729152, + 33.593896 + ], + [ + -117.72896, + 33.594029 + ], + [ + -117.728935, + 33.594115 + ], + [ + -117.72918, + 33.594381 + ], + [ + -117.729442, + 33.594617 + ], + [ + -117.729806, + 33.594913 + ], + [ + -117.730166, + 33.595126 + ], + [ + -117.730571, + 33.59533 + ], + [ + -117.730855, + 33.59544 + ], + [ + -117.731136, + 33.595542 + ], + [ + -117.731404, + 33.595611 + ], + [ + -117.731566, + 33.59563 + ], + [ + -117.731645, + 33.595581 + ], + [ + -117.73172, + 33.595224 + ], + [ + -117.731807, + 33.59492 + ], + [ + -117.731822, + 33.594854 + ], + [ + -117.731888, + 33.59472 + ], + [ + -117.731982, + 33.594487 + ], + [ + -117.732131, + 33.594223 + ], + [ + -117.732197, + 33.594091 + ], + [ + -117.73225, + 33.593939 + ], + [ + -117.73234, + 33.593664 + ], + [ + -117.732427, + 33.593463 + ], + [ + -117.732506, + 33.593298 + ], + [ + -117.732613, + 33.593025 + ], + [ + -117.73259, + 33.592949 + ], + [ + -117.732257, + 33.592822 + ], + [ + -117.73211, + 33.59274 + ], + [ + -117.731899, + 33.592653 + ], + [ + -117.731757, + 33.592613 + ], + [ + -117.731651, + 33.5926 + ], + [ + -117.731588, + 33.592552 + ], + [ + -117.731555, + 33.592497 + ], + [ + -117.731573, + 33.592384 + ], + [ + -117.731584, + 33.592287 + ], + [ + -117.731592, + 33.592133 + ], + [ + -117.731615, + 33.591947 + ], + [ + -117.731694, + 33.591672 + ] + ] + ] + }, + "properties": { + "name": "Ridgecrest Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 65251672, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.723434, + 33.601249 + ], + [ + -117.723323, + 33.601513 + ], + [ + -117.723331, + 33.601749 + ], + [ + -117.723417, + 33.601971 + ], + [ + -117.723434, + 33.602207 + ], + [ + -117.72334, + 33.602686 + ], + [ + -117.723494, + 33.60286 + ], + [ + -117.7241, + 33.602962 + ], + [ + -117.724569, + 33.603053 + ], + [ + -117.72497, + 33.603083 + ], + [ + -117.725377, + 33.603346 + ], + [ + -117.725679, + 33.603806 + ], + [ + -117.725759, + 33.604616 + ], + [ + -117.726203, + 33.605231 + ], + [ + -117.726711, + 33.605738 + ], + [ + -117.727076, + 33.605874 + ], + [ + -117.72747, + 33.605936 + ], + [ + -117.729198, + 33.606102 + ], + [ + -117.729895, + 33.606046 + ], + [ + -117.731546, + 33.606007 + ], + [ + -117.73225, + 33.605988 + ], + [ + -117.732258, + 33.605797 + ], + [ + -117.732086, + 33.605646 + ], + [ + -117.732125, + 33.605541 + ], + [ + -117.731987, + 33.605004 + ], + [ + -117.731877, + 33.604647 + ], + [ + -117.732109, + 33.604118 + ], + [ + -117.732031, + 33.603916 + ], + [ + -117.732006, + 33.603602 + ], + [ + -117.732161, + 33.603309 + ], + [ + -117.732205, + 33.603028 + ], + [ + -117.732324, + 33.602626 + ], + [ + -117.732255, + 33.601926 + ], + [ + -117.732205, + 33.601383 + ], + [ + -117.732212, + 33.601006 + ], + [ + -117.732342, + 33.600449 + ], + [ + -117.73249, + 33.600034 + ], + [ + -117.732501, + 33.599738 + ], + [ + -117.732726, + 33.599557 + ], + [ + -117.732218, + 33.599524 + ], + [ + -117.732178, + 33.599335 + ], + [ + -117.732187, + 33.599122 + ], + [ + -117.731564, + 33.599218 + ], + [ + -117.731439, + 33.599306 + ], + [ + -117.731155, + 33.599025 + ], + [ + -117.730926, + 33.598918 + ], + [ + -117.730708, + 33.598929 + ], + [ + -117.729204, + 33.599651 + ], + [ + -117.728599, + 33.599899 + ], + [ + -117.728525, + 33.600099 + ], + [ + -117.728186, + 33.599964 + ], + [ + -117.728142, + 33.599428 + ], + [ + -117.725741, + 33.599556 + ], + [ + -117.725759, + 33.599944 + ], + [ + -117.72513, + 33.599954 + ], + [ + -117.724631, + 33.599902 + ], + [ + -117.724453, + 33.599652 + ], + [ + -117.724213, + 33.597295 + ], + [ + -117.723729, + 33.597246 + ], + [ + -117.723082, + 33.596911 + ], + [ + -117.722776, + 33.596988 + ], + [ + -117.722665, + 33.599503 + ], + [ + -117.722838, + 33.599789 + ], + [ + -117.723395, + 33.600206 + ], + [ + -117.723434, + 33.601249 + ] + ] + ] + }, + "properties": { + "name": "Aliso Viejo Resort and Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 65270006, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.732857, + 33.592897 + ], + [ + -117.733359, + 33.593135 + ], + [ + -117.733933, + 33.59343 + ], + [ + -117.73522, + 33.593877 + ], + [ + -117.736513, + 33.594355 + ], + [ + -117.738549, + 33.595166 + ], + [ + -117.738508, + 33.595335 + ], + [ + -117.738491, + 33.595595 + ], + [ + -117.738455, + 33.595879 + ], + [ + -117.738366, + 33.596142 + ], + [ + -117.738268, + 33.596189 + ], + [ + -117.737186, + 33.595729 + ], + [ + -117.736905, + 33.595625 + ], + [ + -117.736617, + 33.595546 + ], + [ + -117.736256, + 33.595475 + ], + [ + -117.735916, + 33.595433 + ], + [ + -117.735935, + 33.595259 + ], + [ + -117.735942, + 33.59509 + ], + [ + -117.735666, + 33.594979 + ], + [ + -117.735187, + 33.594923 + ], + [ + -117.734849, + 33.594735 + ], + [ + -117.734008, + 33.594453 + ], + [ + -117.732311, + 33.593895 + ], + [ + -117.732766, + 33.593095 + ], + [ + -117.732857, + 33.592897 + ] + ] + ] + }, + "properties": { + "name": "Wingspan Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 67230118, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818559, + 33.633438 + ], + [ + -117.818508, + 33.633438 + ], + [ + -117.818463, + 33.633421 + ], + [ + -117.81809, + 33.633229 + ], + [ + -117.818063, + 33.633206 + ], + [ + -117.81806, + 33.633155 + ], + [ + -117.818084, + 33.633108 + ], + [ + -117.818589, + 33.632266 + ], + [ + -117.818599, + 33.632237 + ], + [ + -117.818629, + 33.632226 + ], + [ + -117.818664, + 33.632215 + ], + [ + -117.818712, + 33.632224 + ], + [ + -117.819192, + 33.632367 + ], + [ + -117.819227, + 33.632389 + ], + [ + -117.819238, + 33.632413 + ], + [ + -117.81924, + 33.632436 + ], + [ + -117.819219, + 33.632467 + ], + [ + -117.818559, + 33.633438 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 67230156, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.815438, + 33.632502 + ], + [ + -117.81542, + 33.632511 + ], + [ + -117.815374, + 33.632511 + ], + [ + -117.814915, + 33.632455 + ], + [ + -117.814891, + 33.632437 + ], + [ + -117.814864, + 33.632417 + ], + [ + -117.814859, + 33.632388 + ], + [ + -117.814862, + 33.632352 + ], + [ + -117.815267, + 33.631441 + ], + [ + -117.81528, + 33.631419 + ], + [ + -117.815309, + 33.631401 + ], + [ + -117.815342, + 33.631389 + ], + [ + -117.815387, + 33.631398 + ], + [ + -117.815808, + 33.631548 + ], + [ + -117.815833, + 33.631568 + ], + [ + -117.815843, + 33.631602 + ], + [ + -117.815838, + 33.631637 + ], + [ + -117.815707, + 33.631876 + ], + [ + -117.815594, + 33.632124 + ], + [ + -117.815492, + 33.632381 + ], + [ + -117.815465, + 33.632481 + ], + [ + -117.815438, + 33.632502 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 67235761, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.82195, + 33.635695 + ], + [ + -117.821915, + 33.63571 + ], + [ + -117.821888, + 33.635722 + ], + [ + -117.821856, + 33.635724 + ], + [ + -117.821496, + 33.635719 + ], + [ + -117.82147, + 33.635713 + ], + [ + -117.821448, + 33.635699 + ], + [ + -117.821429, + 33.635681 + ], + [ + -117.821346, + 33.635565 + ], + [ + -117.821327, + 33.635521 + ], + [ + -117.821327, + 33.635494 + ], + [ + -117.821341, + 33.635456 + ], + [ + -117.82136, + 33.635411 + ], + [ + -117.821384, + 33.63536 + ], + [ + -117.821834, + 33.634699 + ], + [ + -117.821869, + 33.634685 + ], + [ + -117.821915, + 33.634679 + ], + [ + -117.821955, + 33.634681 + ], + [ + -117.82199, + 33.634696 + ], + [ + -117.822416, + 33.634891 + ], + [ + -117.822435, + 33.634918 + ], + [ + -117.822441, + 33.634944 + ], + [ + -117.822427, + 33.634965 + ], + [ + -117.822349, + 33.635085 + ], + [ + -117.822255, + 33.635235 + ], + [ + -117.822194, + 33.635333 + ], + [ + -117.821971, + 33.635675 + ], + [ + -117.82195, + 33.635695 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 67375461, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.918951, + 33.656835 + ], + [ + -117.918877, + 33.656836 + ], + [ + -117.918875, + 33.656418 + ], + [ + -117.918875, + 33.6564 + ], + [ + -117.918835, + 33.656363 + ], + [ + -117.918603, + 33.656365 + ], + [ + -117.918603, + 33.6563 + ], + [ + -117.918863, + 33.656298 + ], + [ + -117.918915, + 33.656316 + ], + [ + -117.918939, + 33.656342 + ], + [ + -117.918951, + 33.656835 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 67502512, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818407, + 33.854157 + ], + [ + -117.818089, + 33.8527 + ], + [ + -117.818311, + 33.852669 + ], + [ + -117.818298, + 33.852598 + ], + [ + -117.81849, + 33.852569 + ], + [ + -117.818562, + 33.852558 + ], + [ + -117.818447, + 33.851877 + ], + [ + -117.818535, + 33.851857 + ], + [ + -117.818589, + 33.851844 + ], + [ + -117.818637, + 33.851832 + ], + [ + -117.818813, + 33.851787 + ], + [ + -117.818972, + 33.851755 + ], + [ + -117.819121, + 33.851732 + ], + [ + -117.819528, + 33.851676 + ], + [ + -117.819548, + 33.851776 + ], + [ + -117.819936, + 33.853698 + ], + [ + -117.818794, + 33.854041 + ], + [ + -117.818778, + 33.854046 + ], + [ + -117.818407, + 33.854157 + ] + ] + ] + }, + "properties": { + "name": "Riverdale Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 68991958, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.798007, + 33.709356 + ], + [ + -117.797346, + 33.709278 + ], + [ + -117.797191, + 33.710191 + ], + [ + -117.797852, + 33.710268 + ], + [ + -117.798007, + 33.709356 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 68991960, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.800647, + 33.707169 + ], + [ + -117.8004, + 33.707163 + ], + [ + -117.800379, + 33.707166 + ], + [ + -117.800365, + 33.707175 + ], + [ + -117.800354, + 33.707189 + ], + [ + -117.800352, + 33.707209 + ], + [ + -117.800354, + 33.707372 + ], + [ + -117.80036, + 33.707387 + ], + [ + -117.800376, + 33.707402 + ], + [ + -117.800406, + 33.707415 + ], + [ + -117.800493, + 33.707417 + ], + [ + -117.800524, + 33.707411 + ], + [ + -117.800551, + 33.707397 + ], + [ + -117.800662, + 33.707317 + ], + [ + -117.800707, + 33.707275 + ], + [ + -117.800709, + 33.707238 + ], + [ + -117.800704, + 33.707198 + ], + [ + -117.80068, + 33.707177 + ], + [ + -117.800647, + 33.707169 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 68991968, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.798974, + 33.709601 + ], + [ + -117.798272, + 33.709418 + ], + [ + -117.798077, + 33.71004 + ], + [ + -117.798404, + 33.710062 + ], + [ + -117.79864, + 33.710021 + ], + [ + -117.798769, + 33.709923 + ], + [ + -117.798904, + 33.709801 + ], + [ + -117.798974, + 33.709601 + ] + ] + ] + }, + "properties": { + "name": "Field 7", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 68991970, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.798785, + 33.708484 + ], + [ + -117.799418, + 33.708709 + ], + [ + -117.799502, + 33.708572 + ], + [ + -117.799452, + 33.708259 + ], + [ + -117.799307, + 33.708061 + ], + [ + -117.799128, + 33.70792 + ], + [ + -117.798995, + 33.707908 + ], + [ + -117.798785, + 33.708484 + ] + ] + ] + }, + "properties": { + "name": "Field 3", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 68991974, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.797425, + 33.708941 + ], + [ + -117.798412, + 33.708911 + ], + [ + -117.798347, + 33.708617 + ], + [ + -117.798122, + 33.708286 + ], + [ + -117.797867, + 33.708118 + ], + [ + -117.797554, + 33.708084 + ], + [ + -117.797444, + 33.708084 + ], + [ + -117.797425, + 33.708941 + ] + ] + ] + }, + "properties": { + "name": "Field 1", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 68996653, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.659314, + 33.626343 + ], + [ + -117.659319, + 33.62621 + ], + [ + -117.659438, + 33.626179 + ], + [ + -117.659487, + 33.626113 + ], + [ + -117.659748, + 33.625874 + ], + [ + -117.65991, + 33.625876 + ], + [ + -117.660087, + 33.625865 + ], + [ + -117.660169, + 33.626005 + ], + [ + -117.660169, + 33.626182 + ], + [ + -117.660109, + 33.626394 + ], + [ + -117.659892, + 33.626569 + ], + [ + -117.659657, + 33.626702 + ], + [ + -117.659558, + 33.626595 + ], + [ + -117.65933, + 33.626533 + ], + [ + -117.659354, + 33.626494 + ], + [ + -117.659363, + 33.626452 + ], + [ + -117.659365, + 33.626416 + ], + [ + -117.65935, + 33.626392 + ], + [ + -117.659339, + 33.62637 + ], + [ + -117.659314, + 33.626343 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 69693303, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.934788, + 33.668627 + ], + [ + -117.934777, + 33.666494 + ], + [ + -117.934618, + 33.666414 + ], + [ + -117.934457, + 33.666315 + ], + [ + -117.934311, + 33.666191 + ], + [ + -117.934195, + 33.666066 + ], + [ + -117.934103, + 33.66594 + ], + [ + -117.934033, + 33.665807 + ], + [ + -117.933984, + 33.665671 + ], + [ + -117.933956, + 33.665525 + ], + [ + -117.933942, + 33.665403 + ], + [ + -117.933948, + 33.665277 + ], + [ + -117.933976, + 33.66514 + ], + [ + -117.934015, + 33.665008 + ], + [ + -117.934188, + 33.664655 + ], + [ + -117.934361, + 33.664293 + ], + [ + -117.93446, + 33.6641 + ], + [ + -117.934527, + 33.663919 + ], + [ + -117.934556, + 33.663781 + ], + [ + -117.934559, + 33.663637 + ], + [ + -117.934521, + 33.663391 + ], + [ + -117.934525, + 33.66329 + ], + [ + -117.934546, + 33.663176 + ], + [ + -117.934789, + 33.663184 + ], + [ + -117.934752, + 33.66092 + ], + [ + -117.934415, + 33.660744 + ], + [ + -117.934143, + 33.660564 + ], + [ + -117.933887, + 33.660349 + ], + [ + -117.93368, + 33.660171 + ], + [ + -117.933589, + 33.660024 + ], + [ + -117.932662, + 33.660035 + ], + [ + -117.931653, + 33.658808 + ], + [ + -117.931403, + 33.65883 + ], + [ + -117.931231, + 33.658887 + ], + [ + -117.93055, + 33.658894 + ], + [ + -117.930545, + 33.658686 + ], + [ + -117.929948, + 33.658693 + ], + [ + -117.929947, + 33.658869 + ], + [ + -117.929343, + 33.658876 + ], + [ + -117.929323, + 33.658409 + ], + [ + -117.929221, + 33.658257 + ], + [ + -117.929107, + 33.658161 + ], + [ + -117.92894, + 33.658052 + ], + [ + -117.928698, + 33.658006 + ], + [ + -117.928697, + 33.657971 + ], + [ + -117.926424, + 33.657992 + ], + [ + -117.921235, + 33.658033 + ], + [ + -117.919567, + 33.658052 + ], + [ + -117.9195, + 33.658082 + ], + [ + -117.91945, + 33.658126 + ], + [ + -117.919431, + 33.65819 + ], + [ + -117.919464, + 33.662962 + ], + [ + -117.919371, + 33.662959 + ], + [ + -117.919359, + 33.663021 + ], + [ + -117.919848, + 33.663169 + ], + [ + -117.920014, + 33.663362 + ], + [ + -117.92018, + 33.663514 + ], + [ + -117.920365, + 33.663612 + ], + [ + -117.9208, + 33.663701 + ], + [ + -117.921152, + 33.6637 + ], + [ + -117.921238, + 33.663285 + ], + [ + -117.922689, + 33.65945 + ], + [ + -117.922936, + 33.659304 + ], + [ + -117.923788, + 33.65959 + ], + [ + -117.923994, + 33.659643 + ], + [ + -117.924246, + 33.659673 + ], + [ + -117.924607, + 33.659653 + ], + [ + -117.925221, + 33.65963 + ], + [ + -117.925479, + 33.65964 + ], + [ + -117.925727, + 33.659669 + ], + [ + -117.92781, + 33.660232 + ], + [ + -117.928017, + 33.660274 + ], + [ + -117.928284, + 33.660437 + ], + [ + -117.928462, + 33.660632 + ], + [ + -117.928575, + 33.660875 + ], + [ + -117.928552, + 33.661256 + ], + [ + -117.927729, + 33.663334 + ], + [ + -117.928398, + 33.663514 + ], + [ + -117.928371, + 33.663614 + ], + [ + -117.928778, + 33.663722 + ], + [ + -117.929567, + 33.663935 + ], + [ + -117.929066, + 33.665214 + ], + [ + -117.928634, + 33.665096 + ], + [ + -117.928334, + 33.665866 + ], + [ + -117.926951, + 33.665489 + ], + [ + -117.926706, + 33.665942 + ], + [ + -117.926488, + 33.666128 + ], + [ + -117.926104, + 33.666264 + ], + [ + -117.925686, + 33.666372 + ], + [ + -117.925418, + 33.666452 + ], + [ + -117.925267, + 33.666578 + ], + [ + -117.924913, + 33.667179 + ], + [ + -117.924754, + 33.667791 + ], + [ + -117.924757, + 33.668652 + ], + [ + -117.927273, + 33.668561 + ], + [ + -117.931388, + 33.668479 + ], + [ + -117.931396, + 33.66865 + ], + [ + -117.934788, + 33.668627 + ] + ] + ] + }, + "properties": { + "name": "Costa Mesa Country Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 70517929, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.810189, + 33.671858 + ], + [ + -117.810136, + 33.671891 + ], + [ + -117.810134, + 33.67195 + ], + [ + -117.810417, + 33.671917 + ], + [ + -117.811671, + 33.672785 + ], + [ + -117.812212, + 33.673182 + ], + [ + -117.812015, + 33.673371 + ], + [ + -117.812436, + 33.673704 + ], + [ + -117.812487, + 33.673738 + ], + [ + -117.812527, + 33.673748 + ], + [ + -117.812572, + 33.673748 + ], + [ + -117.812609, + 33.673736 + ], + [ + -117.812645, + 33.673704 + ], + [ + -117.812835, + 33.673513 + ], + [ + -117.813002, + 33.673332 + ], + [ + -117.813081, + 33.673192 + ], + [ + -117.81313, + 33.673041 + ], + [ + -117.813138, + 33.672861 + ], + [ + -117.813108, + 33.672733 + ], + [ + -117.813043, + 33.672565 + ], + [ + -117.812961, + 33.672383 + ], + [ + -117.812811, + 33.672581 + ], + [ + -117.812717, + 33.672607 + ], + [ + -117.812343, + 33.672988 + ], + [ + -117.812308, + 33.672998 + ], + [ + -117.811867, + 33.672678 + ], + [ + -117.811215, + 33.672222 + ], + [ + -117.810794, + 33.671934 + ], + [ + -117.810885, + 33.671838 + ], + [ + -117.810869, + 33.671782 + ], + [ + -117.810189, + 33.671858 + ] + ] + ] + }, + "properties": { + "name": "Springacre Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 71181607, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.813234, + 33.677654 + ], + [ + -117.812763, + 33.677332 + ], + [ + -117.812594, + 33.677216 + ], + [ + -117.812505, + 33.677155 + ], + [ + -117.812427, + 33.677102 + ], + [ + -117.812333, + 33.677037 + ], + [ + -117.812279, + 33.677 + ], + [ + -117.812214, + 33.676956 + ], + [ + -117.811976, + 33.677158 + ], + [ + -117.811762, + 33.677352 + ], + [ + -117.811739, + 33.677391 + ], + [ + -117.811739, + 33.677407 + ], + [ + -117.811744, + 33.677422 + ], + [ + -117.811754, + 33.677439 + ], + [ + -117.811769, + 33.677451 + ], + [ + -117.812681, + 33.67809 + ], + [ + -117.812724, + 33.678103 + ], + [ + -117.81276, + 33.678101 + ], + [ + -117.812793, + 33.678091 + ], + [ + -117.812823, + 33.678072 + ], + [ + -117.813234, + 33.677654 + ] + ] + ] + }, + "properties": { + "name": "Windjammer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 71902340, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.648695, + 33.634083 + ], + [ + -117.648476, + 33.633929 + ], + [ + -117.648114, + 33.633771 + ], + [ + -117.647858, + 33.633683 + ], + [ + -117.64781, + 33.633565 + ], + [ + -117.647901, + 33.633406 + ], + [ + -117.648116, + 33.633114 + ], + [ + -117.648387, + 33.632779 + ], + [ + -117.648773, + 33.632368 + ], + [ + -117.649612, + 33.63271 + ], + [ + -117.649479, + 33.632795 + ], + [ + -117.649399, + 33.632898 + ], + [ + -117.649363, + 33.633044 + ], + [ + -117.649348, + 33.633227 + ], + [ + -117.64929, + 33.633383 + ], + [ + -117.649068, + 33.633624 + ], + [ + -117.648695, + 33.634083 + ] + ] + ] + }, + "properties": { + "name": "Vista Del Lago Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 74269605, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.76217, + 33.766495 + ], + [ + -117.761545, + 33.766443 + ], + [ + -117.761531, + 33.766542 + ], + [ + -117.760993, + 33.766525 + ], + [ + -117.761211, + 33.768064 + ], + [ + -117.761292, + 33.768029 + ], + [ + -117.761384, + 33.767976 + ], + [ + -117.761518, + 33.767879 + ], + [ + -117.761673, + 33.767757 + ], + [ + -117.761801, + 33.767601 + ], + [ + -117.761891, + 33.767459 + ], + [ + -117.761981, + 33.767328 + ], + [ + -117.762031, + 33.767231 + ], + [ + -117.762066, + 33.76712 + ], + [ + -117.762094, + 33.767001 + ], + [ + -117.762131, + 33.766796 + ], + [ + -117.76217, + 33.766495 + ] + ] + ] + }, + "properties": { + "name": "Pioneer Road Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 74269606, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.773117, + 33.742443 + ], + [ + -117.771709, + 33.74387 + ], + [ + -117.771716, + 33.743966 + ], + [ + -117.771907, + 33.744163 + ], + [ + -117.772084, + 33.744369 + ], + [ + -117.772257, + 33.744598 + ], + [ + -117.772558, + 33.745045 + ], + [ + -117.772765, + 33.745361 + ], + [ + -117.772897, + 33.745591 + ], + [ + -117.773019, + 33.745711 + ], + [ + -117.773175, + 33.745935 + ], + [ + -117.773346, + 33.746153 + ], + [ + -117.773801, + 33.746579 + ], + [ + -117.774169, + 33.746936 + ], + [ + -117.774284, + 33.746935 + ], + [ + -117.775073, + 33.746569 + ], + [ + -117.775054, + 33.746541 + ], + [ + -117.774418, + 33.745589 + ], + [ + -117.774741, + 33.745352 + ], + [ + -117.774486, + 33.745252 + ], + [ + -117.774151, + 33.745075 + ], + [ + -117.773939, + 33.744676 + ], + [ + -117.773875, + 33.744222 + ], + [ + -117.774007, + 33.744016 + ], + [ + -117.77417, + 33.74391 + ], + [ + -117.773787, + 33.742976 + ], + [ + -117.773117, + 33.742443 + ] + ] + ] + }, + "properties": { + "name": "Citrus Ranch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 74269609, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.758216, + 33.73776 + ], + [ + -117.75815, + 33.737803 + ], + [ + -117.757963, + 33.738228 + ], + [ + -117.757766, + 33.738562 + ], + [ + -117.759691, + 33.739855 + ], + [ + -117.759793, + 33.739924 + ], + [ + -117.760199, + 33.739644 + ], + [ + -117.760488, + 33.739594 + ], + [ + -117.760336, + 33.738899 + ], + [ + -117.760207, + 33.738751 + ], + [ + -117.759882, + 33.738577 + ], + [ + -117.759586, + 33.738314 + ], + [ + -117.759457, + 33.738145 + ], + [ + -117.759129, + 33.737977 + ], + [ + -117.758568, + 33.737828 + ], + [ + -117.758216, + 33.73776 + ] + ] + ] + }, + "properties": { + "name": "Settlers Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 74269644, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.80549, + 33.782646 + ], + [ + -117.805139, + 33.782254 + ], + [ + -117.805038, + 33.782019 + ], + [ + -117.804754, + 33.780405 + ], + [ + -117.804691, + 33.77999 + ], + [ + -117.804747, + 33.779703 + ], + [ + -117.803611, + 33.779729 + ], + [ + -117.803449, + 33.779573 + ], + [ + -117.803353, + 33.778985 + ], + [ + -117.803298, + 33.778014 + ], + [ + -117.805208, + 33.778012 + ], + [ + -117.805278, + 33.778074 + ], + [ + -117.80523, + 33.778388 + ], + [ + -117.805118, + 33.77876 + ], + [ + -117.805294, + 33.778909 + ], + [ + -117.806604, + 33.778962 + ], + [ + -117.806581, + 33.779055 + ], + [ + -117.806542, + 33.779176 + ], + [ + -117.806459, + 33.779267 + ], + [ + -117.806353, + 33.779339 + ], + [ + -117.806289, + 33.779362 + ], + [ + -117.806087, + 33.779365 + ], + [ + -117.805962, + 33.779603 + ], + [ + -117.805948, + 33.780835 + ], + [ + -117.805975, + 33.781654 + ], + [ + -117.805875, + 33.782034 + ], + [ + -117.80549, + 33.782646 + ] + ] + ] + }, + "properties": { + "name": "El Modena Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 75033596, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.922757, + 33.699678 + ], + [ + -117.922675, + 33.699499 + ], + [ + -117.922701, + 33.69946 + ], + [ + -117.922719, + 33.699438 + ], + [ + -117.922727, + 33.699416 + ], + [ + -117.922745, + 33.699383 + ], + [ + -117.923198, + 33.699458 + ], + [ + -117.923225, + 33.699462 + ], + [ + -117.923241, + 33.699472 + ], + [ + -117.923248, + 33.699489 + ], + [ + -117.923253, + 33.699666 + ], + [ + -117.92321, + 33.699665 + ], + [ + -117.923212, + 33.69973 + ], + [ + -117.923252, + 33.69971 + ], + [ + -117.923254, + 33.699866 + ], + [ + -117.923177, + 33.699944 + ], + [ + -117.923208, + 33.699971 + ], + [ + -117.922884, + 33.699977 + ], + [ + -117.922878, + 33.699942 + ], + [ + -117.922829, + 33.699911 + ], + [ + -117.922796, + 33.699935 + ], + [ + -117.922789, + 33.699842 + ], + [ + -117.922766, + 33.699718 + ], + [ + -117.922816, + 33.699731 + ], + [ + -117.922797, + 33.699649 + ], + [ + -117.922757, + 33.699678 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 76803430, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.644829, + 33.595537 + ], + [ + -117.644694, + 33.594666 + ], + [ + -117.644539, + 33.594634 + ], + [ + -117.644287, + 33.594719 + ], + [ + -117.644078, + 33.594813 + ], + [ + -117.643863, + 33.594952 + ], + [ + -117.643552, + 33.595251 + ], + [ + -117.643198, + 33.595792 + ], + [ + -117.643016, + 33.596082 + ], + [ + -117.642812, + 33.596279 + ], + [ + -117.642592, + 33.596435 + ], + [ + -117.64228, + 33.596596 + ], + [ + -117.642914, + 33.596909 + ], + [ + -117.644174, + 33.595939 + ], + [ + -117.644442, + 33.595743 + ], + [ + -117.644582, + 33.595649 + ], + [ + -117.644829, + 33.595537 + ] + ] + ] + }, + "properties": { + "name": "Fieldcrest Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 76805065, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.642814, + 33.59665 + ], + [ + -117.642672, + 33.596732 + ], + [ + -117.642506, + 33.596545 + ], + [ + -117.642653, + 33.59646 + ], + [ + -117.642814, + 33.59665 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 77065087, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.918641, + 33.69222 + ], + [ + -117.918724, + 33.692155 + ], + [ + -117.918826, + 33.692154 + ], + [ + -117.918885, + 33.692099 + ], + [ + -117.918758, + 33.692098 + ], + [ + -117.918758, + 33.692046 + ], + [ + -117.918823, + 33.692043 + ], + [ + -117.918819, + 33.691899 + ], + [ + -117.918271, + 33.691905 + ], + [ + -117.918269, + 33.69198 + ], + [ + -117.918259, + 33.691981 + ], + [ + -117.918145, + 33.691887 + ], + [ + -117.918102, + 33.691926 + ], + [ + -117.918084, + 33.691907 + ], + [ + -117.918083, + 33.691806 + ], + [ + -117.918385, + 33.691803 + ], + [ + -117.918515, + 33.691817 + ], + [ + -117.918556, + 33.691822 + ], + [ + -117.91914, + 33.691815 + ], + [ + -117.919211, + 33.69189 + ], + [ + -117.919211, + 33.691941 + ], + [ + -117.91918, + 33.692098 + ], + [ + -117.919183, + 33.692345 + ], + [ + -117.919173, + 33.692345 + ], + [ + -117.919173, + 33.692368 + ], + [ + -117.919121, + 33.692369 + ], + [ + -117.919077, + 33.692359 + ], + [ + -117.918912, + 33.692278 + ], + [ + -117.918893, + 33.692272 + ], + [ + -117.918838, + 33.692273 + ], + [ + -117.918837, + 33.692221 + ], + [ + -117.918641, + 33.69222 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 77589965, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.904591, + 33.663641 + ], + [ + -117.904618, + 33.663643 + ], + [ + -117.90462, + 33.663717 + ], + [ + -117.904566, + 33.663765 + ], + [ + -117.904027, + 33.663772 + ], + [ + -117.903966, + 33.663743 + ], + [ + -117.903932, + 33.66371 + ], + [ + -117.90393, + 33.663512 + ], + [ + -117.902451, + 33.663528 + ], + [ + -117.902451, + 33.663461 + ], + [ + -117.902518, + 33.663461 + ], + [ + -117.902518, + 33.663438 + ], + [ + -117.902805, + 33.663436 + ], + [ + -117.902808, + 33.663233 + ], + [ + -117.903277, + 33.663226 + ], + [ + -117.903277, + 33.663017 + ], + [ + -117.903258, + 33.663014 + ], + [ + -117.903258, + 33.6629 + ], + [ + -117.903571, + 33.6629 + ], + [ + -117.903581, + 33.663464 + ], + [ + -117.904009, + 33.663459 + ], + [ + -117.904004, + 33.663503 + ], + [ + -117.904036, + 33.663558 + ], + [ + -117.904085, + 33.663575 + ], + [ + -117.904219, + 33.663575 + ], + [ + -117.904215, + 33.663645 + ], + [ + -117.904591, + 33.663641 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 77669882, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.906967, + 33.663756 + ], + [ + -117.906965, + 33.663245 + ], + [ + -117.90491, + 33.663276 + ], + [ + -117.904907, + 33.663716 + ], + [ + -117.904969, + 33.663763 + ], + [ + -117.90609, + 33.663754 + ], + [ + -117.906281, + 33.663727 + ], + [ + -117.906468, + 33.663725 + ], + [ + -117.906678, + 33.663761 + ], + [ + -117.906967, + 33.663756 + ] + ] + ] + }, + "properties": { + "name": "Civic Center Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 79581868, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.940118, + 33.674812 + ], + [ + -117.940102, + 33.674796 + ], + [ + -117.940097, + 33.672615 + ], + [ + -117.93639, + 33.672624 + ], + [ + -117.9356, + 33.67265 + ], + [ + -117.935587, + 33.672662 + ], + [ + -117.935571, + 33.672678 + ], + [ + -117.935591, + 33.672923 + ], + [ + -117.935655, + 33.67316 + ], + [ + -117.935725, + 33.673338 + ], + [ + -117.935832, + 33.673553 + ], + [ + -117.93588, + 33.673575 + ], + [ + -117.936025, + 33.673535 + ], + [ + -117.936224, + 33.673499 + ], + [ + -117.936261, + 33.673401 + ], + [ + -117.936342, + 33.673325 + ], + [ + -117.93647, + 33.673307 + ], + [ + -117.936594, + 33.673303 + ], + [ + -117.936717, + 33.673321 + ], + [ + -117.936825, + 33.673343 + ], + [ + -117.936943, + 33.673379 + ], + [ + -117.937195, + 33.673504 + ], + [ + -117.937425, + 33.673646 + ], + [ + -117.93757, + 33.673754 + ], + [ + -117.938058, + 33.674169 + ], + [ + -117.938112, + 33.67424 + ], + [ + -117.938103, + 33.674299 + ], + [ + -117.938033, + 33.674346 + ], + [ + -117.937985, + 33.674381 + ], + [ + -117.937982, + 33.6744 + ], + [ + -117.937999, + 33.674441 + ], + [ + -117.938251, + 33.674785 + ], + [ + -117.938284, + 33.674794 + ], + [ + -117.938407, + 33.675004 + ], + [ + -117.938915, + 33.675006 + ], + [ + -117.938931, + 33.674937 + ], + [ + -117.938985, + 33.674873 + ], + [ + -117.939063, + 33.674837 + ], + [ + -117.939159, + 33.67483 + ], + [ + -117.939344, + 33.674828 + ], + [ + -117.939342, + 33.674584 + ], + [ + -117.939397, + 33.674583 + ], + [ + -117.939397, + 33.674556 + ], + [ + -117.939524, + 33.674554 + ], + [ + -117.939524, + 33.674576 + ], + [ + -117.939584, + 33.674575 + ], + [ + -117.939587, + 33.674851 + ], + [ + -117.940121, + 33.674845 + ], + [ + -117.940118, + 33.674812 + ] + ] + ] + }, + "properties": { + "name": "Estancia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 79625303, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.933194, + 33.675261 + ], + [ + -117.933, + 33.675443 + ], + [ + -117.932801, + 33.675687 + ], + [ + -117.932774, + 33.675698 + ], + [ + -117.932485, + 33.675625 + ], + [ + -117.932354, + 33.675601 + ], + [ + -117.931519, + 33.675515 + ], + [ + -117.930723, + 33.67544 + ], + [ + -117.930365, + 33.675411 + ], + [ + -117.930176, + 33.675402 + ], + [ + -117.930149, + 33.675395 + ], + [ + -117.93013, + 33.675366 + ], + [ + -117.930133, + 33.675339 + ], + [ + -117.930207, + 33.675015 + ], + [ + -117.930634, + 33.675015 + ], + [ + -117.933194, + 33.675261 + ] + ] + ] + }, + "properties": { + "name": "Mesa Verde Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 79626075, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.929947, + 33.670664 + ], + [ + -117.92995, + 33.670615 + ], + [ + -117.92988, + 33.670499 + ], + [ + -117.929805, + 33.670381 + ], + [ + -117.929708, + 33.670207 + ], + [ + -117.929614, + 33.669995 + ], + [ + -117.929556, + 33.669845 + ], + [ + -117.929504, + 33.669629 + ], + [ + -117.929486, + 33.66955 + ], + [ + -117.929454, + 33.669327 + ], + [ + -117.929445, + 33.669135 + ], + [ + -117.929429, + 33.669086 + ], + [ + -117.929387, + 33.669062 + ], + [ + -117.929255, + 33.669039 + ], + [ + -117.929121, + 33.668992 + ], + [ + -117.929022, + 33.668917 + ], + [ + -117.928931, + 33.66885 + ], + [ + -117.928794, + 33.668791 + ], + [ + -117.928684, + 33.668783 + ], + [ + -117.92837, + 33.66878 + ], + [ + -117.928123, + 33.668778 + ], + [ + -117.92813, + 33.669682 + ], + [ + -117.928134, + 33.670189 + ], + [ + -117.928131, + 33.67068 + ], + [ + -117.928134, + 33.670928 + ], + [ + -117.92904, + 33.670919 + ], + [ + -117.929035, + 33.670863 + ], + [ + -117.929051, + 33.670839 + ], + [ + -117.929094, + 33.67083 + ], + [ + -117.929534, + 33.670832 + ], + [ + -117.929682, + 33.670787 + ], + [ + -117.929791, + 33.670745 + ], + [ + -117.929891, + 33.670705 + ], + [ + -117.929947, + 33.670664 + ] + ] + ] + }, + "properties": { + "name": "Tanager Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 79690642, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.91518, + 33.656271 + ], + [ + -117.915208, + 33.657599 + ], + [ + -117.915281, + 33.657604 + ], + [ + -117.915273, + 33.657758 + ], + [ + -117.915155, + 33.657755 + ], + [ + -117.91516, + 33.658025 + ], + [ + -117.915133, + 33.658025 + ], + [ + -117.915133, + 33.658041 + ], + [ + -117.914642, + 33.658041 + ], + [ + -117.914632, + 33.657304 + ], + [ + -117.914148, + 33.657313 + ], + [ + -117.914146, + 33.656321 + ], + [ + -117.914168, + 33.656295 + ], + [ + -117.914198, + 33.656277 + ], + [ + -117.91518, + 33.656271 + ] + ] + ] + }, + "properties": { + "name": "Wilson Street Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 83187779, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921373, + 33.642206 + ], + [ + -117.921402, + 33.642176 + ], + [ + -117.921596, + 33.642176 + ], + [ + -117.921596, + 33.642133 + ], + [ + -117.921905, + 33.642129 + ], + [ + -117.921907, + 33.642348 + ], + [ + -117.921968, + 33.642348 + ], + [ + -117.921967, + 33.642168 + ], + [ + -117.922031, + 33.642168 + ], + [ + -117.922039, + 33.642161 + ], + [ + -117.922038, + 33.64215 + ], + [ + -117.921908, + 33.642039 + ], + [ + -117.921909, + 33.642102 + ], + [ + -117.921583, + 33.642105 + ], + [ + -117.921578, + 33.642096 + ], + [ + -117.921342, + 33.642095 + ], + [ + -117.921323, + 33.642051 + ], + [ + -117.92131, + 33.642049 + ], + [ + -117.921244, + 33.64205 + ], + [ + -117.921213, + 33.642092 + ], + [ + -117.921215, + 33.642188 + ], + [ + -117.921229, + 33.642209 + ], + [ + -117.921373, + 33.642206 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 83187854, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.923814, + 33.643324 + ], + [ + -117.923814, + 33.643265 + ], + [ + -117.923788, + 33.643245 + ], + [ + -117.923731, + 33.643245 + ], + [ + -117.923732, + 33.643259 + ], + [ + -117.923678, + 33.643259 + ], + [ + -117.923678, + 33.643276 + ], + [ + -117.92355, + 33.643276 + ], + [ + -117.923548, + 33.643261 + ], + [ + -117.923511, + 33.643261 + ], + [ + -117.923505, + 33.643251 + ], + [ + -117.92347, + 33.64325 + ], + [ + -117.923446, + 33.643236 + ], + [ + -117.923444, + 33.643199 + ], + [ + -117.923382, + 33.643199 + ], + [ + -117.923382, + 33.643266 + ], + [ + -117.923398, + 33.643284 + ], + [ + -117.923441, + 33.643324 + ], + [ + -117.923465, + 33.643329 + ], + [ + -117.923796, + 33.643329 + ], + [ + -117.923814, + 33.643324 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 83221833, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921329, + 33.636051 + ], + [ + -117.921595, + 33.636234 + ], + [ + -117.921603, + 33.636271 + ], + [ + -117.92159, + 33.636283 + ], + [ + -117.921425, + 33.636313 + ], + [ + -117.921301, + 33.636327 + ], + [ + -117.921206, + 33.636333 + ], + [ + -117.921108, + 33.636336 + ], + [ + -117.921003, + 33.636333 + ], + [ + -117.920902, + 33.636327 + ], + [ + -117.920753, + 33.63631 + ], + [ + -117.920801, + 33.636262 + ], + [ + -117.92088, + 33.636277 + ], + [ + -117.920991, + 33.636288 + ], + [ + -117.921089, + 33.636295 + ], + [ + -117.921171, + 33.636296 + ], + [ + -117.921261, + 33.636292 + ], + [ + -117.921327, + 33.636287 + ], + [ + -117.921386, + 33.636278 + ], + [ + -117.921413, + 33.636265 + ], + [ + -117.92143, + 33.636249 + ], + [ + -117.921442, + 33.636224 + ], + [ + -117.92145, + 33.636204 + ], + [ + -117.921443, + 33.636184 + ], + [ + -117.921423, + 33.636157 + ], + [ + -117.921395, + 33.636134 + ], + [ + -117.92136, + 33.636102 + ], + [ + -117.921341, + 33.636083 + ], + [ + -117.921331, + 33.636068 + ], + [ + -117.921329, + 33.636051 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 83348609, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.914375, + 33.631239 + ], + [ + -117.915065, + 33.630553 + ], + [ + -117.914116, + 33.6299 + ], + [ + -117.913455, + 33.630539 + ], + [ + -117.914128, + 33.631034 + ], + [ + -117.914108, + 33.631054 + ], + [ + -117.914375, + 33.631239 + ] + ] + ] + }, + "properties": { + "name": "Pinkley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 90961653, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.77174, + 33.688027 + ], + [ + -117.77176, + 33.688027 + ], + [ + -117.771788, + 33.688035 + ], + [ + -117.771852, + 33.688072 + ], + [ + -117.771845, + 33.68808 + ], + [ + -117.771839, + 33.688076 + ], + [ + -117.771777, + 33.68808 + ], + [ + -117.771759, + 33.688094 + ], + [ + -117.771754, + 33.688106 + ], + [ + -117.771755, + 33.688149 + ], + [ + -117.771747, + 33.688149 + ], + [ + -117.771739, + 33.688092 + ], + [ + -117.771753, + 33.68807 + ], + [ + -117.771749, + 33.688043 + ], + [ + -117.771747, + 33.688034 + ], + [ + -117.77174, + 33.688027 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 90961880, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.771723, + 33.688626 + ], + [ + -117.771744, + 33.688627 + ], + [ + -117.771757, + 33.688733 + ], + [ + -117.771735, + 33.688734 + ], + [ + -117.771727, + 33.68874 + ], + [ + -117.771733, + 33.688792 + ], + [ + -117.771723, + 33.688794 + ], + [ + -117.771656, + 33.688868 + ], + [ + -117.771751, + 33.688932 + ], + [ + -117.771739, + 33.688944 + ], + [ + -117.771735, + 33.688948 + ], + [ + -117.771572, + 33.688838 + ], + [ + -117.771687, + 33.688698 + ], + [ + -117.771684, + 33.688665 + ], + [ + -117.771716, + 33.688645 + ], + [ + -117.771723, + 33.688626 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 96023516, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.753248, + 33.872743 + ], + [ + -117.754791, + 33.872109 + ], + [ + -117.755659, + 33.871768 + ], + [ + -117.7574, + 33.871173 + ], + [ + -117.759534, + 33.870434 + ], + [ + -117.760249, + 33.870161 + ], + [ + -117.761395, + 33.869683 + ], + [ + -117.761868, + 33.869481 + ], + [ + -117.763986, + 33.868463 + ], + [ + -117.764229, + 33.86836 + ], + [ + -117.764584, + 33.868165 + ], + [ + -117.766822, + 33.867082 + ], + [ + -117.767191, + 33.866948 + ], + [ + -117.767875, + 33.866602 + ], + [ + -117.768577, + 33.866219 + ], + [ + -117.770022, + 33.865513 + ], + [ + -117.773529, + 33.86383 + ], + [ + -117.773987, + 33.864469 + ], + [ + -117.774512, + 33.864909 + ], + [ + -117.773926, + 33.865502 + ], + [ + -117.770725, + 33.868976 + ], + [ + -117.770396, + 33.869299 + ], + [ + -117.770173, + 33.869471 + ], + [ + -117.76996, + 33.869619 + ], + [ + -117.7696, + 33.869816 + ], + [ + -117.76927, + 33.869955 + ], + [ + -117.768759, + 33.870113 + ], + [ + -117.767852, + 33.870364 + ], + [ + -117.758362, + 33.872977 + ], + [ + -117.758178, + 33.873014 + ], + [ + -117.757401, + 33.873216 + ], + [ + -117.756963, + 33.873293 + ], + [ + -117.756547, + 33.873314 + ], + [ + -117.756169, + 33.873295 + ], + [ + -117.754595, + 33.873086 + ], + [ + -117.754276, + 33.873068 + ], + [ + -117.753877, + 33.873078 + ], + [ + -117.753464, + 33.873121 + ], + [ + -117.753018, + 33.873226 + ], + [ + -117.752676, + 33.873335 + ], + [ + -117.752421, + 33.873441 + ], + [ + -117.752127, + 33.873577 + ], + [ + -117.751864, + 33.873734 + ], + [ + -117.751486, + 33.873986 + ], + [ + -117.751207, + 33.874222 + ], + [ + -117.750941, + 33.874521 + ], + [ + -117.750786, + 33.874736 + ], + [ + -117.750664, + 33.874774 + ], + [ + -117.749785, + 33.874562 + ], + [ + -117.750255, + 33.874293 + ], + [ + -117.750489, + 33.874197 + ], + [ + -117.751553, + 33.873561 + ], + [ + -117.753248, + 33.872743 + ] + ] + ] + }, + "properties": { + "name": "Yorba Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 99029239, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.738228, + 33.676721 + ], + [ + -117.739465, + 33.675566 + ], + [ + -117.740018, + 33.67593 + ], + [ + -117.741236, + 33.676775 + ], + [ + -117.742216, + 33.675779 + ], + [ + -117.742718, + 33.675293 + ], + [ + -117.742968, + 33.67505 + ], + [ + -117.74321, + 33.674835 + ], + [ + -117.743275, + 33.674776 + ], + [ + -117.743493, + 33.67465 + ], + [ + -117.74353, + 33.67464 + ], + [ + -117.743676, + 33.674593 + ], + [ + -117.743829, + 33.674572 + ], + [ + -117.743978, + 33.674555 + ], + [ + -117.744135, + 33.674558 + ], + [ + -117.744278, + 33.674569 + ], + [ + -117.744428, + 33.674605 + ], + [ + -117.744602, + 33.674666 + ], + [ + -117.74476, + 33.674756 + ], + [ + -117.745086, + 33.674974 + ], + [ + -117.745247, + 33.675036 + ], + [ + -117.745339, + 33.675069 + ], + [ + -117.745551, + 33.675095 + ], + [ + -117.745785, + 33.675084 + ], + [ + -117.746009, + 33.67504 + ], + [ + -117.746164, + 33.674976 + ], + [ + -117.746321, + 33.674878 + ], + [ + -117.74648, + 33.674749 + ], + [ + -117.746706, + 33.674509 + ], + [ + -117.746855, + 33.674365 + ], + [ + -117.747115, + 33.674223 + ], + [ + -117.747296, + 33.674161 + ], + [ + -117.747482, + 33.674134 + ], + [ + -117.747644, + 33.674123 + ], + [ + -117.748286, + 33.674175 + ], + [ + -117.749005, + 33.674247 + ], + [ + -117.749189, + 33.674237 + ], + [ + -117.749395, + 33.674193 + ], + [ + -117.749555, + 33.674132 + ], + [ + -117.749752, + 33.674019 + ], + [ + -117.749876, + 33.673907 + ], + [ + -117.750091, + 33.67371 + ], + [ + -117.750428, + 33.673283 + ], + [ + -117.750643, + 33.673066 + ], + [ + -117.750394, + 33.672928 + ], + [ + -117.749704, + 33.672592 + ], + [ + -117.749389, + 33.672426 + ], + [ + -117.749225, + 33.672332 + ], + [ + -117.749149, + 33.672238 + ], + [ + -117.747376, + 33.671346 + ], + [ + -117.746684, + 33.670982 + ], + [ + -117.746089, + 33.670575 + ], + [ + -117.745523, + 33.670155 + ], + [ + -117.7441, + 33.668805 + ], + [ + -117.743344, + 33.668002 + ], + [ + -117.742462, + 33.667354 + ], + [ + -117.741609, + 33.668197 + ], + [ + -117.740657, + 33.668908 + ], + [ + -117.739452, + 33.669304 + ], + [ + -117.73897, + 33.669341 + ], + [ + -117.738321, + 33.66939 + ], + [ + -117.737115, + 33.669289 + ], + [ + -117.735862, + 33.669294 + ], + [ + -117.734752, + 33.669549 + ], + [ + -117.733694, + 33.669958 + ], + [ + -117.7335, + 33.67035 + ], + [ + -117.733285, + 33.670688 + ], + [ + -117.733517, + 33.671675 + ], + [ + -117.734216, + 33.673617 + ], + [ + -117.734568, + 33.675295 + ], + [ + -117.734819, + 33.67643 + ], + [ + -117.735038, + 33.676731 + ], + [ + -117.738228, + 33.676721 + ] + ] + ] + }, + "properties": { + "name": "Orange County Great Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 99096455, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.755951, + 33.726305 + ], + [ + -117.755943, + 33.72492 + ], + [ + -117.755885, + 33.724808 + ], + [ + -117.75595, + 33.724679 + ], + [ + -117.755891, + 33.724607 + ], + [ + -117.753346, + 33.724349 + ], + [ + -117.753093, + 33.725154 + ], + [ + -117.753026, + 33.725205 + ], + [ + -117.752998, + 33.725279 + ], + [ + -117.753093, + 33.725324 + ], + [ + -117.753139, + 33.725272 + ], + [ + -117.753225, + 33.725259 + ], + [ + -117.753294, + 33.725281 + ], + [ + -117.753353, + 33.725326 + ], + [ + -117.753369, + 33.725406 + ], + [ + -117.753327, + 33.725464 + ], + [ + -117.753289, + 33.725509 + ], + [ + -117.753235, + 33.725576 + ], + [ + -117.753219, + 33.725701 + ], + [ + -117.755951, + 33.726305 + ] + ] + ] + }, + "properties": { + "name": "Meadowood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 100199519, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.726447, + 33.580085 + ], + [ + -117.726213, + 33.58033 + ], + [ + -117.725979, + 33.579874 + ], + [ + -117.725936, + 33.579541 + ], + [ + -117.726, + 33.579228 + ], + [ + -117.726099, + 33.578922 + ], + [ + -117.726145, + 33.578703 + ], + [ + -117.726142, + 33.578497 + ], + [ + -117.726115, + 33.578312 + ], + [ + -117.726158, + 33.578225 + ], + [ + -117.726288, + 33.578157 + ], + [ + -117.726362, + 33.578091 + ], + [ + -117.727046, + 33.577347 + ], + [ + -117.727936, + 33.576319 + ], + [ + -117.728197, + 33.576545 + ], + [ + -117.728573, + 33.576778 + ], + [ + -117.7274, + 33.578081 + ], + [ + -117.726939, + 33.578539 + ], + [ + -117.726815, + 33.578679 + ], + [ + -117.726708, + 33.579029 + ], + [ + -117.726578, + 33.579451 + ], + [ + -117.726486, + 33.579745 + ], + [ + -117.726466, + 33.579867 + ], + [ + -117.726466, + 33.579979 + ], + [ + -117.726447, + 33.580085 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 100220626, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.729013, + 33.579523 + ], + [ + -117.729201, + 33.579579 + ], + [ + -117.729258, + 33.579494 + ], + [ + -117.72923, + 33.579376 + ], + [ + -117.729038, + 33.579377 + ], + [ + -117.729013, + 33.579523 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 100946536, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.769773, + 33.722985 + ], + [ + -117.769664, + 33.722988 + ], + [ + -117.768124, + 33.724495 + ], + [ + -117.768145, + 33.724603 + ], + [ + -117.768256, + 33.724672 + ], + [ + -117.76836, + 33.72473 + ], + [ + -117.76847, + 33.724779 + ], + [ + -117.768676, + 33.724855 + ], + [ + -117.768748, + 33.72487 + ], + [ + -117.768813, + 33.724881 + ], + [ + -117.769043, + 33.724915 + ], + [ + -117.769233, + 33.724924 + ], + [ + -117.769412, + 33.724938 + ], + [ + -117.769617, + 33.724977 + ], + [ + -117.769779, + 33.725025 + ], + [ + -117.769954, + 33.725087 + ], + [ + -117.770209, + 33.725218 + ], + [ + -117.770487, + 33.725416 + ], + [ + -117.770625, + 33.725545 + ], + [ + -117.770735, + 33.725683 + ], + [ + -117.770804, + 33.72578 + ], + [ + -117.770859, + 33.725882 + ], + [ + -117.770964, + 33.726082 + ], + [ + -117.771037, + 33.726178 + ], + [ + -117.771125, + 33.726271 + ], + [ + -117.771228, + 33.726351 + ], + [ + -117.771335, + 33.726428 + ], + [ + -117.771421, + 33.726409 + ], + [ + -117.772151, + 33.725687 + ], + [ + -117.771826, + 33.725488 + ], + [ + -117.771878, + 33.725378 + ], + [ + -117.771907, + 33.725257 + ], + [ + -117.771904, + 33.725098 + ], + [ + -117.771892, + 33.725018 + ], + [ + -117.771872, + 33.724943 + ], + [ + -117.772166, + 33.724656 + ], + [ + -117.769773, + 33.722985 + ] + ] + ] + }, + "properties": { + "name": "Hicks Canyon Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 101097590, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.750237, + 33.722644 + ], + [ + -117.750295, + 33.722585 + ], + [ + -117.751215, + 33.72164 + ], + [ + -117.751068, + 33.721587 + ], + [ + -117.750435, + 33.721511 + ], + [ + -117.749158, + 33.721516 + ], + [ + -117.748879, + 33.721551 + ], + [ + -117.74867, + 33.721573 + ], + [ + -117.750008, + 33.72249 + ], + [ + -117.750237, + 33.722644 + ] + ] + ] + }, + "properties": { + "name": "Citrusglen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 101097596, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.750185, + 33.721621 + ], + [ + -117.749277, + 33.721635 + ], + [ + -117.749284, + 33.721944 + ], + [ + -117.750192, + 33.721929 + ], + [ + -117.750185, + 33.721621 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 101118906, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.753871, + 33.725123 + ], + [ + -117.753938, + 33.725098 + ], + [ + -117.753989, + 33.725045 + ], + [ + -117.75401, + 33.724982 + ], + [ + -117.754016, + 33.72492 + ], + [ + -117.753981, + 33.724882 + ], + [ + -117.75393, + 33.724855 + ], + [ + -117.753863, + 33.724848 + ], + [ + -117.753804, + 33.724895 + ], + [ + -117.753772, + 33.724951 + ], + [ + -117.753761, + 33.725009 + ], + [ + -117.753766, + 33.725062 + ], + [ + -117.753815, + 33.725107 + ], + [ + -117.753871, + 33.725123 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 101120868, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.779856, + 33.715425 + ], + [ + -117.779374, + 33.715091 + ], + [ + -117.77841, + 33.714442 + ], + [ + -117.77833, + 33.714435 + ], + [ + -117.776889, + 33.71588 + ], + [ + -117.776915, + 33.71597 + ], + [ + -117.778335, + 33.716957 + ], + [ + -117.779856, + 33.715425 + ] + ] + ] + }, + "properties": { + "name": "Lower Peters Canyon Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 101452909, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.950109, + 33.702582 + ], + [ + -117.94998, + 33.702483 + ], + [ + -117.949487, + 33.702189 + ], + [ + -117.948924, + 33.702832 + ], + [ + -117.948824, + 33.703002 + ], + [ + -117.9488, + 33.703157 + ], + [ + -117.948816, + 33.703278 + ], + [ + -117.948865, + 33.703421 + ], + [ + -117.948913, + 33.703492 + ], + [ + -117.948983, + 33.703604 + ], + [ + -117.949755, + 33.704175 + ], + [ + -117.949846, + 33.704197 + ], + [ + -117.949927, + 33.704153 + ], + [ + -117.950034, + 33.704037 + ], + [ + -117.9499, + 33.70393 + ], + [ + -117.949911, + 33.702774 + ], + [ + -117.950109, + 33.702582 + ] + ] + ] + }, + "properties": { + "name": "Los Alamos Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 101452915, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.949751, + 33.70263 + ], + [ + -117.949597, + 33.702601 + ], + [ + -117.949653, + 33.702399 + ], + [ + -117.949807, + 33.702428 + ], + [ + -117.949751, + 33.70263 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 101646596, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.970398, + 33.717322 + ], + [ + -117.970388, + 33.71683 + ], + [ + -117.969884, + 33.716842 + ], + [ + -117.969748, + 33.716884 + ], + [ + -117.969752, + 33.717342 + ], + [ + -117.969766, + 33.717664 + ], + [ + -117.970412, + 33.717644 + ], + [ + -117.970398, + 33.717322 + ] + ] + ] + }, + "properties": { + "name": "Fountain Valley Skating Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 101916821, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.77855, + 33.703059 + ], + [ + -117.778418, + 33.704188 + ], + [ + -117.778292, + 33.704191 + ], + [ + -117.778147, + 33.704082 + ], + [ + -117.776844, + 33.702199 + ], + [ + -117.777202, + 33.702027 + ], + [ + -117.778121, + 33.702098 + ], + [ + -117.778189, + 33.702166 + ], + [ + -117.778138, + 33.702518 + ], + [ + -117.77807, + 33.703016 + ], + [ + -117.778504, + 33.703028 + ], + [ + -117.77855, + 33.703059 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 101916826, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.779962, + 33.702112 + ], + [ + -117.779866, + 33.702179 + ], + [ + -117.779792, + 33.70264 + ], + [ + -117.779751, + 33.702891 + ], + [ + -117.779746, + 33.702921 + ], + [ + -117.77966, + 33.702949 + ], + [ + -117.779539, + 33.70289 + ], + [ + -117.779399, + 33.702846 + ], + [ + -117.779224, + 33.702844 + ], + [ + -117.77907, + 33.702886 + ], + [ + -117.77895, + 33.702949 + ], + [ + -117.778831, + 33.70305 + ], + [ + -117.778729, + 33.703137 + ], + [ + -117.778625, + 33.703273 + ], + [ + -117.778516, + 33.703851 + ], + [ + -117.778438, + 33.704268 + ], + [ + -117.778212, + 33.704268 + ], + [ + -117.775659, + 33.700466 + ], + [ + -117.77679, + 33.699806 + ], + [ + -117.777861, + 33.698797 + ], + [ + -117.778276, + 33.69908 + ], + [ + -117.778657, + 33.698694 + ], + [ + -117.780905, + 33.700252 + ], + [ + -117.780765, + 33.700824 + ], + [ + -117.780669, + 33.700886 + ], + [ + -117.780551, + 33.700904 + ], + [ + -117.780398, + 33.700884 + ], + [ + -117.780329, + 33.700878 + ], + [ + -117.780267, + 33.700906 + ], + [ + -117.780214, + 33.70095 + ], + [ + -117.780199, + 33.701017 + ], + [ + -117.780136, + 33.701317 + ], + [ + -117.780001, + 33.701994 + ], + [ + -117.779986, + 33.70203 + ], + [ + -117.779962, + 33.702112 + ] + ] + ] + }, + "properties": { + "name": "Heritage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 102016766, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.767822, + 33.710132 + ], + [ + -117.765603, + 33.710764 + ], + [ + -117.76497, + 33.710976 + ], + [ + -117.764999, + 33.711114 + ], + [ + -117.767902, + 33.713131 + ], + [ + -117.76967, + 33.711354 + ], + [ + -117.767962, + 33.710153 + ], + [ + -117.767822, + 33.710132 + ] + ] + ] + }, + "properties": { + "name": "Northwood Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 102016768, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.768204, + 33.711016 + ], + [ + -117.767987, + 33.710871 + ], + [ + -117.767875, + 33.710882 + ], + [ + -117.767786, + 33.710931 + ], + [ + -117.767593, + 33.711128 + ], + [ + -117.767995, + 33.711391 + ], + [ + -117.768033, + 33.711415 + ], + [ + -117.768116, + 33.711435 + ], + [ + -117.768199, + 33.711411 + ], + [ + -117.768299, + 33.711297 + ], + [ + -117.768191, + 33.711224 + ], + [ + -117.768188, + 33.711199 + ], + [ + -117.768213, + 33.711139 + ], + [ + -117.768231, + 33.711087 + ], + [ + -117.768204, + 33.711016 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 102228028, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.817962, + 33.692226 + ], + [ + -117.816352, + 33.690808 + ], + [ + -117.816351, + 33.690753 + ], + [ + -117.817263, + 33.689879 + ], + [ + -117.81734, + 33.689876 + ], + [ + -117.819015, + 33.691402 + ], + [ + -117.817962, + 33.692226 + ] + ] + ] + }, + "properties": { + "name": "Sweet Shade Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 102235672, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.790019, + 33.673825 + ], + [ + -117.789416, + 33.673517 + ], + [ + -117.789351, + 33.673473 + ], + [ + -117.789815, + 33.673133 + ], + [ + -117.789916, + 33.673191 + ], + [ + -117.790099, + 33.673506 + ], + [ + -117.790199, + 33.673611 + ], + [ + -117.790019, + 33.673825 + ] + ] + ] + }, + "properties": { + "name": "Creekview Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 102235673, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.789611, + 33.673011 + ], + [ + -117.788359, + 33.672229 + ], + [ + -117.78698, + 33.67151 + ], + [ + -117.785103, + 33.67341 + ], + [ + -117.785116, + 33.673584 + ], + [ + -117.787444, + 33.674937 + ], + [ + -117.787602, + 33.674895 + ], + [ + -117.788294, + 33.674107 + ], + [ + -117.788386, + 33.674013 + ], + [ + -117.787956, + 33.673691 + ], + [ + -117.788524, + 33.673161 + ], + [ + -117.78896, + 33.673492 + ], + [ + -117.789611, + 33.673011 + ] + ] + ] + }, + "properties": { + "name": "Windrow Athletic Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 102314514, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.776311, + 33.6666 + ], + [ + -117.775294, + 33.665896 + ], + [ + -117.774674, + 33.666512 + ], + [ + -117.77524, + 33.666899 + ], + [ + -117.775323, + 33.667024 + ], + [ + -117.775696, + 33.667247 + ], + [ + -117.776311, + 33.6666 + ] + ] + ] + }, + "properties": { + "name": "Valley Oak Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 102314515, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.773078, + 33.667568 + ], + [ + -117.772145, + 33.668591 + ], + [ + -117.769447, + 33.666742 + ], + [ + -117.770353, + 33.66576 + ], + [ + -117.773078, + 33.667568 + ] + ] + ] + }, + "properties": { + "name": "Oak Creek Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 104932753, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.675049, + 33.620168 + ], + [ + -117.675058, + 33.620456 + ], + [ + -117.67501, + 33.620679 + ], + [ + -117.67492, + 33.620877 + ], + [ + -117.674798, + 33.621026 + ], + [ + -117.674677, + 33.62117 + ], + [ + -117.674359, + 33.621383 + ], + [ + -117.672466, + 33.621669 + ], + [ + -117.672088, + 33.620545 + ], + [ + -117.672108, + 33.620451 + ], + [ + -117.673241, + 33.620092 + ], + [ + -117.674155, + 33.619561 + ], + [ + -117.674427, + 33.619338 + ], + [ + -117.674914, + 33.619836 + ], + [ + -117.675049, + 33.620168 + ] + ] + ] + }, + "properties": { + "name": "Alicia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 105924742, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.76048, + 33.723023 + ], + [ + -117.760399, + 33.723155 + ], + [ + -117.76033, + 33.723247 + ], + [ + -117.760273, + 33.723354 + ], + [ + -117.76019, + 33.723458 + ], + [ + -117.759546, + 33.723131 + ], + [ + -117.759007, + 33.722867 + ], + [ + -117.758857, + 33.722805 + ], + [ + -117.758884, + 33.722774 + ], + [ + -117.75901, + 33.722776 + ], + [ + -117.759112, + 33.722765 + ], + [ + -117.759208, + 33.722729 + ], + [ + -117.759329, + 33.722713 + ], + [ + -117.759546, + 33.722696 + ], + [ + -117.759715, + 33.722709 + ], + [ + -117.759935, + 33.722745 + ], + [ + -117.760077, + 33.722774 + ], + [ + -117.760268, + 33.722843 + ], + [ + -117.760418, + 33.72291 + ], + [ + -117.76052, + 33.722981 + ], + [ + -117.76048, + 33.723023 + ] + ] + ] + }, + "properties": { + "name": "Trailwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 106823062, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.777686, + 33.679068 + ], + [ + -117.7776, + 33.679229 + ], + [ + -117.777527, + 33.679323 + ], + [ + -117.7773, + 33.679435 + ], + [ + -117.777214, + 33.679774 + ], + [ + -117.776999, + 33.680086 + ], + [ + -117.776635, + 33.680399 + ], + [ + -117.776334, + 33.680676 + ], + [ + -117.775197, + 33.681952 + ], + [ + -117.774436, + 33.682631 + ], + [ + -117.773492, + 33.683541 + ], + [ + -117.77258, + 33.684514 + ], + [ + -117.770541, + 33.686684 + ], + [ + -117.769801, + 33.68738 + ], + [ + -117.769254, + 33.687898 + ], + [ + -117.767912, + 33.68596 + ], + [ + -117.767676, + 33.68571 + ], + [ + -117.767322, + 33.68555 + ], + [ + -117.767151, + 33.685237 + ], + [ + -117.767054, + 33.684978 + ], + [ + -117.766818, + 33.684702 + ], + [ + -117.766882, + 33.6843 + ], + [ + -117.767204, + 33.683845 + ], + [ + -117.767998, + 33.682827 + ], + [ + -117.769296, + 33.681399 + ], + [ + -117.769575, + 33.680542 + ], + [ + -117.769693, + 33.679828 + ], + [ + -117.769661, + 33.679203 + ], + [ + -117.7695, + 33.678676 + ], + [ + -117.769168, + 33.678051 + ], + [ + -117.769339, + 33.677524 + ], + [ + -117.769768, + 33.67714 + ], + [ + -117.769914, + 33.676877 + ], + [ + -117.76987, + 33.676761 + ], + [ + -117.769418, + 33.676458 + ], + [ + -117.769327, + 33.676455 + ], + [ + -117.769366, + 33.676267 + ], + [ + -117.766844, + 33.67451 + ], + [ + -117.768491, + 33.672729 + ], + [ + -117.76862, + 33.67272 + ], + [ + -117.777686, + 33.679068 + ] + ] + ] + }, + "properties": { + "name": "Oak Creek Golf Course (Irvine)", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 107144106, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.792889, + 33.738491 + ], + [ + -117.793801, + 33.73767 + ], + [ + -117.792707, + 33.736858 + ], + [ + -117.791666, + 33.736136 + ], + [ + -117.791269, + 33.736359 + ], + [ + -117.790626, + 33.736537 + ], + [ + -117.789456, + 33.736805 + ], + [ + -117.789209, + 33.736939 + ], + [ + -117.788834, + 33.737215 + ], + [ + -117.788437, + 33.737233 + ], + [ + -117.788158, + 33.737001 + ], + [ + -117.788115, + 33.736778 + ], + [ + -117.78745, + 33.734976 + ], + [ + -117.787106, + 33.734958 + ], + [ + -117.78672, + 33.734985 + ], + [ + -117.786313, + 33.735145 + ], + [ + -117.78578, + 33.735351 + ], + [ + -117.786346, + 33.736816 + ], + [ + -117.786411, + 33.736938 + ], + [ + -117.786454, + 33.736993 + ], + [ + -117.786506, + 33.737032 + ], + [ + -117.78656, + 33.737099 + ], + [ + -117.786608, + 33.737191 + ], + [ + -117.786629, + 33.737288 + ], + [ + -117.786619, + 33.737403 + ], + [ + -117.786601, + 33.737492 + ], + [ + -117.786535, + 33.737563 + ], + [ + -117.78648, + 33.737607 + ], + [ + -117.786392, + 33.73766 + ], + [ + -117.786284, + 33.737699 + ], + [ + -117.78604, + 33.737729 + ], + [ + -117.785857, + 33.737751 + ], + [ + -117.785244, + 33.737799 + ], + [ + -117.784646, + 33.737942 + ], + [ + -117.784112, + 33.738185 + ], + [ + -117.784025, + 33.738226 + ], + [ + -117.783977, + 33.738243 + ], + [ + -117.783923, + 33.738252 + ], + [ + -117.78386, + 33.738256 + ], + [ + -117.783803, + 33.738256 + ], + [ + -117.783755, + 33.738248 + ], + [ + -117.783703, + 33.738236 + ], + [ + -117.78363, + 33.738213 + ], + [ + -117.78354, + 33.738185 + ], + [ + -117.783457, + 33.738151 + ], + [ + -117.783378, + 33.738114 + ], + [ + -117.783125, + 33.73784 + ], + [ + -117.782623, + 33.737195 + ], + [ + -117.782177, + 33.736638 + ], + [ + -117.781479, + 33.736072 + ], + [ + -117.780441, + 33.73521 + ], + [ + -117.780403, + 33.735161 + ], + [ + -117.780342, + 33.735093 + ], + [ + -117.779854, + 33.735627 + ], + [ + -117.779629, + 33.735886 + ], + [ + -117.779768, + 33.736189 + ], + [ + -117.780927, + 33.737688 + ], + [ + -117.782, + 33.738786 + ], + [ + -117.781892, + 33.739392 + ], + [ + -117.781742, + 33.739401 + ], + [ + -117.780294, + 33.739312 + ], + [ + -117.780176, + 33.739285 + ], + [ + -117.778094, + 33.737403 + ], + [ + -117.777751, + 33.737675 + ], + [ + -117.777879, + 33.737795 + ], + [ + -117.77711, + 33.738436 + ], + [ + -117.777391, + 33.738647 + ], + [ + -117.777552, + 33.738888 + ], + [ + -117.777601, + 33.739107 + ], + [ + -117.77774, + 33.739575 + ], + [ + -117.777804, + 33.739896 + ], + [ + -117.777922, + 33.740342 + ], + [ + -117.778046, + 33.740927 + ], + [ + -117.777704, + 33.740958 + ], + [ + -117.777432, + 33.741026 + ], + [ + -117.777162, + 33.741175 + ], + [ + -117.776925, + 33.741391 + ], + [ + -117.77671, + 33.741609 + ], + [ + -117.776538, + 33.741752 + ], + [ + -117.776318, + 33.742038 + ], + [ + -117.775954, + 33.74239 + ], + [ + -117.775744, + 33.742604 + ], + [ + -117.775428, + 33.742738 + ], + [ + -117.775235, + 33.742827 + ], + [ + -117.774983, + 33.743144 + ], + [ + -117.774854, + 33.743394 + ], + [ + -117.774676, + 33.743576 + ], + [ + -117.774512, + 33.743704 + ], + [ + -117.77436, + 33.743804 + ], + [ + -117.77417, + 33.74391 + ], + [ + -117.774007, + 33.744016 + ], + [ + -117.773875, + 33.744222 + ], + [ + -117.773939, + 33.744676 + ], + [ + -117.774151, + 33.745075 + ], + [ + -117.774486, + 33.745252 + ], + [ + -117.774741, + 33.745352 + ], + [ + -117.775079, + 33.745049 + ], + [ + -117.776131, + 33.744553 + ], + [ + -117.776442, + 33.744317 + ], + [ + -117.77678, + 33.744031 + ], + [ + -117.777037, + 33.7438 + ], + [ + -117.777359, + 33.743581 + ], + [ + -117.777686, + 33.743139 + ], + [ + -117.777879, + 33.742939 + ], + [ + -117.77804, + 33.742689 + ], + [ + -117.778448, + 33.742287 + ], + [ + -117.779392, + 33.741373 + ], + [ + -117.779859, + 33.741698 + ], + [ + -117.780706, + 33.741779 + ], + [ + -117.780926, + 33.74185 + ], + [ + -117.781114, + 33.74198 + ], + [ + -117.781211, + 33.742091 + ], + [ + -117.781398, + 33.742069 + ], + [ + -117.7815, + 33.742131 + ], + [ + -117.781919, + 33.741908 + ], + [ + -117.782895, + 33.74198 + ], + [ + -117.783292, + 33.742041 + ], + [ + -117.783552, + 33.742146 + ], + [ + -117.783845, + 33.742274 + ], + [ + -117.78407, + 33.742439 + ], + [ + -117.784242, + 33.742613 + ], + [ + -117.784966, + 33.743572 + ], + [ + -117.785105, + 33.743831 + ], + [ + -117.786259, + 33.743608 + ], + [ + -117.787026, + 33.743362 + ], + [ + -117.786184, + 33.741632 + ], + [ + -117.78583, + 33.740949 + ], + [ + -117.78577, + 33.740557 + ], + [ + -117.785202, + 33.739856 + ], + [ + -117.785256, + 33.739424 + ], + [ + -117.78731, + 33.73887 + ], + [ + -117.787573, + 33.738902 + ], + [ + -117.78775, + 33.738946 + ], + [ + -117.788024, + 33.739151 + ], + [ + -117.788211, + 33.739089 + ], + [ + -117.788308, + 33.73858 + ], + [ + -117.790738, + 33.738174 + ], + [ + -117.790931, + 33.738152 + ], + [ + -117.791698, + 33.738094 + ], + [ + -117.791875, + 33.738107 + ], + [ + -117.792192, + 33.738143 + ], + [ + -117.792455, + 33.738232 + ], + [ + -117.792889, + 33.738491 + ] + ] + ] + }, + "properties": { + "name": "Tustin Ranch Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 108189471, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.75305, + 33.697288 + ], + [ + -117.752152, + 33.696646 + ], + [ + -117.752109, + 33.696689 + ], + [ + -117.751813, + 33.696981 + ], + [ + -117.75176, + 33.696945 + ], + [ + -117.751739, + 33.696966 + ], + [ + -117.751704, + 33.696978 + ], + [ + -117.751667, + 33.696975 + ], + [ + -117.75165, + 33.69697 + ], + [ + -117.751632, + 33.696958 + ], + [ + -117.750811, + 33.697792 + ], + [ + -117.750882, + 33.697842 + ], + [ + -117.749885, + 33.698813 + ], + [ + -117.750902, + 33.69952 + ], + [ + -117.751017, + 33.699508 + ], + [ + -117.753077, + 33.697417 + ], + [ + -117.75305, + 33.697288 + ] + ] + ] + }, + "properties": { + "name": "Woodbury Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 108538980, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.757724, + 33.714183 + ], + [ + -117.757149, + 33.714193 + ], + [ + -117.757141, + 33.713873 + ], + [ + -117.757717, + 33.713863 + ], + [ + -117.757724, + 33.714183 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 108719169, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.755708, + 33.72591 + ], + [ + -117.755748, + 33.725928 + ], + [ + -117.755708, + 33.726082 + ], + [ + -117.755649, + 33.726144 + ], + [ + -117.755569, + 33.726171 + ], + [ + -117.755488, + 33.726167 + ], + [ + -117.755172, + 33.726089 + ], + [ + -117.755177, + 33.726053 + ], + [ + -117.754134, + 33.725819 + ], + [ + -117.754375, + 33.725047 + ], + [ + -117.754321, + 33.725038 + ], + [ + -117.754372, + 33.724873 + ], + [ + -117.754523, + 33.724795 + ], + [ + -117.754759, + 33.724844 + ], + [ + -117.754748, + 33.724877 + ], + [ + -117.755923, + 33.725136 + ], + [ + -117.755708, + 33.72591 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 109500432, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.902181, + 33.913436 + ], + [ + -117.902519, + 33.913542 + ], + [ + -117.902465, + 33.913671 + ], + [ + -117.902605, + 33.913723 + ], + [ + -117.902661, + 33.913625 + ], + [ + -117.902715, + 33.913574 + ], + [ + -117.902774, + 33.913587 + ], + [ + -117.90287, + 33.913458 + ], + [ + -117.903178, + 33.91358 + ], + [ + -117.902918, + 33.914061 + ], + [ + -117.902904, + 33.914087 + ], + [ + -117.902827, + 33.914228 + ], + [ + -117.902796, + 33.914284 + ], + [ + -117.902717, + 33.914426 + ], + [ + -117.902712, + 33.914435 + ], + [ + -117.902288, + 33.915183 + ], + [ + -117.901956, + 33.915065 + ], + [ + -117.901975, + 33.915023 + ], + [ + -117.902057, + 33.914847 + ], + [ + -117.902087, + 33.914764 + ], + [ + -117.902082, + 33.914715 + ], + [ + -117.902079, + 33.914647 + ], + [ + -117.90202, + 33.9146 + ], + [ + -117.901934, + 33.91456 + ], + [ + -117.901953, + 33.914504 + ], + [ + -117.901679, + 33.914397 + ], + [ + -117.902181, + 33.913436 + ] + ] + ] + }, + "properties": { + "name": "City Hall Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 110477515, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.796668, + 33.700462 + ], + [ + -117.796641, + 33.700361 + ], + [ + -117.795712, + 33.699703 + ], + [ + -117.795644, + 33.699654 + ], + [ + -117.795475, + 33.699616 + ], + [ + -117.795389, + 33.699679 + ], + [ + -117.795231, + 33.69983 + ], + [ + -117.795357, + 33.69998 + ], + [ + -117.795483, + 33.700174 + ], + [ + -117.795711, + 33.700473 + ], + [ + -117.795898, + 33.70064 + ], + [ + -117.796199, + 33.700888 + ], + [ + -117.796376, + 33.701006 + ], + [ + -117.796432, + 33.700928 + ], + [ + -117.796456, + 33.700823 + ], + [ + -117.796502, + 33.700656 + ], + [ + -117.796521, + 33.700634 + ], + [ + -117.796668, + 33.700462 + ] + ] + ] + }, + "properties": { + "name": "Flagstone Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 110564869, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.793825, + 33.690714 + ], + [ + -117.79385, + 33.690764 + ], + [ + -117.793839, + 33.690816 + ], + [ + -117.793603, + 33.691046 + ], + [ + -117.793205, + 33.691437 + ], + [ + -117.792567, + 33.692079 + ], + [ + -117.792398, + 33.692206 + ], + [ + -117.792369, + 33.692253 + ], + [ + -117.792355, + 33.692302 + ], + [ + -117.792261, + 33.692333 + ], + [ + -117.792087, + 33.692515 + ], + [ + -117.791793, + 33.692316 + ], + [ + -117.790743, + 33.691561 + ], + [ + -117.790952, + 33.691357 + ], + [ + -117.791018, + 33.691332 + ], + [ + -117.791068, + 33.691291 + ], + [ + -117.791206, + 33.691088 + ], + [ + -117.792503, + 33.689795 + ], + [ + -117.792538, + 33.68979 + ], + [ + -117.792579, + 33.689804 + ], + [ + -117.792731, + 33.690014 + ], + [ + -117.792878, + 33.690165 + ], + [ + -117.79307, + 33.690289 + ], + [ + -117.793206, + 33.690394 + ], + [ + -117.793346, + 33.690489 + ], + [ + -117.793502, + 33.69056 + ], + [ + -117.793825, + 33.690714 + ] + ] + ] + }, + "properties": { + "name": "Deerfield Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 110826369, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.756312, + 33.701749 + ], + [ + -117.755831, + 33.701419 + ], + [ + -117.756588, + 33.700727 + ], + [ + -117.756647, + 33.700647 + ], + [ + -117.75691, + 33.700335 + ], + [ + -117.758701, + 33.698541 + ], + [ + -117.759289, + 33.698503 + ], + [ + -117.759388, + 33.698397 + ], + [ + -117.759514, + 33.698263 + ], + [ + -117.760854, + 33.696839 + ], + [ + -117.760783, + 33.696564 + ], + [ + -117.760474, + 33.696356 + ], + [ + -117.760984, + 33.695892 + ], + [ + -117.761539, + 33.696327 + ], + [ + -117.761558, + 33.696427 + ], + [ + -117.761531, + 33.696497 + ], + [ + -117.761252, + 33.696787 + ], + [ + -117.761266, + 33.696836 + ], + [ + -117.761204, + 33.696909 + ], + [ + -117.75923, + 33.698931 + ], + [ + -117.756427, + 33.701747 + ], + [ + -117.756368, + 33.701761 + ], + [ + -117.756351, + 33.701757 + ], + [ + -117.756312, + 33.701749 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 110826377, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.749902, + 33.706441 + ], + [ + -117.750014, + 33.706322 + ], + [ + -117.750124, + 33.706364 + ], + [ + -117.750231, + 33.706346 + ], + [ + -117.750304, + 33.706284 + ], + [ + -117.750352, + 33.706201 + ], + [ + -117.751908, + 33.704626 + ], + [ + -117.751942, + 33.70451 + ], + [ + -117.752482, + 33.703999 + ], + [ + -117.752535, + 33.703896 + ], + [ + -117.754743, + 33.701671 + ], + [ + -117.754871, + 33.701596 + ], + [ + -117.754995, + 33.701651 + ], + [ + -117.755245, + 33.70138 + ], + [ + -117.755979, + 33.701904 + ], + [ + -117.756025, + 33.701999 + ], + [ + -117.756008, + 33.702084 + ], + [ + -117.755928, + 33.70218 + ], + [ + -117.755724, + 33.702394 + ], + [ + -117.755754, + 33.702423 + ], + [ + -117.751902, + 33.70623 + ], + [ + -117.751741, + 33.70633 + ], + [ + -117.751114, + 33.70696 + ], + [ + -117.750998, + 33.707018 + ], + [ + -117.750924, + 33.707037 + ], + [ + -117.750856, + 33.707036 + ], + [ + -117.750733, + 33.707007 + ], + [ + -117.750607, + 33.706937 + ], + [ + -117.749902, + 33.706441 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 111660775, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.781575, + 33.675673 + ], + [ + -117.78293, + 33.67426 + ], + [ + -117.783112, + 33.674142 + ], + [ + -117.783426, + 33.673845 + ], + [ + -117.783716, + 33.674048 + ], + [ + -117.783713, + 33.674115 + ], + [ + -117.783619, + 33.674198 + ], + [ + -117.783662, + 33.674289 + ], + [ + -117.783083, + 33.674874 + ], + [ + -117.782951, + 33.674901 + ], + [ + -117.78286, + 33.674995 + ], + [ + -117.782822, + 33.675115 + ], + [ + -117.782018, + 33.675917 + ], + [ + -117.781913, + 33.675892 + ], + [ + -117.781575, + 33.675673 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 111874153, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.777015, + 33.721688 + ], + [ + -117.777067, + 33.721676 + ], + [ + -117.777515, + 33.721226 + ], + [ + -117.775653, + 33.719938 + ], + [ + -117.775221, + 33.720373 + ], + [ + -117.775224, + 33.72041 + ], + [ + -117.777015, + 33.721688 + ] + ] + ] + }, + "properties": { + "name": "Northpark Square", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 111875958, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.778367, + 33.736414 + ], + [ + -117.778018, + 33.736153 + ], + [ + -117.777904, + 33.736048 + ], + [ + -117.777821, + 33.735953 + ], + [ + -117.777488, + 33.73554 + ], + [ + -117.777398, + 33.735442 + ], + [ + -117.777276, + 33.735562 + ], + [ + -117.777035, + 33.735807 + ], + [ + -117.776963, + 33.735877 + ], + [ + -117.776955, + 33.735885 + ], + [ + -117.776986, + 33.735906 + ], + [ + -117.776052, + 33.736838 + ], + [ + -117.777236, + 33.73768 + ], + [ + -117.777566, + 33.737352 + ], + [ + -117.777398, + 33.737223 + ], + [ + -117.777356, + 33.737039 + ], + [ + -117.777655, + 33.736741 + ], + [ + -117.777959, + 33.736947 + ], + [ + -117.778378, + 33.736537 + ], + [ + -117.778367, + 33.736414 + ] + ] + ] + }, + "properties": { + "name": "Valencia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 111960597, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.873186, + 33.874604 + ], + [ + -117.873192, + 33.874558 + ], + [ + -117.873133, + 33.874544 + ], + [ + -117.873087, + 33.874507 + ], + [ + -117.873067, + 33.874442 + ], + [ + -117.873179, + 33.874322 + ], + [ + -117.87324, + 33.874228 + ], + [ + -117.873363, + 33.873754 + ], + [ + -117.873581, + 33.873039 + ], + [ + -117.873583, + 33.872979 + ], + [ + -117.873556, + 33.872952 + ], + [ + -117.8735, + 33.872932 + ], + [ + -117.873218, + 33.872885 + ], + [ + -117.872764, + 33.872796 + ], + [ + -117.872293, + 33.872703 + ], + [ + -117.872202, + 33.873046 + ], + [ + -117.871617, + 33.872932 + ], + [ + -117.871601, + 33.873046 + ], + [ + -117.871413, + 33.873001 + ], + [ + -117.8714, + 33.873079 + ], + [ + -117.871204, + 33.87305 + ], + [ + -117.871231, + 33.872965 + ], + [ + -117.870909, + 33.872885 + ], + [ + -117.870882, + 33.872994 + ], + [ + -117.870783, + 33.872965 + ], + [ + -117.870764, + 33.872997 + ], + [ + -117.870421, + 33.872928 + ], + [ + -117.870107, + 33.873896 + ], + [ + -117.870064, + 33.873914 + ], + [ + -117.870043, + 33.87397 + ], + [ + -117.872355, + 33.874417 + ], + [ + -117.873186, + 33.874604 + ] + ] + ] + }, + "properties": { + "name": "Kraemer Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 112112888, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.923982, + 33.884267 + ], + [ + -117.924076, + 33.884104 + ], + [ + -117.924215, + 33.883817 + ], + [ + -117.92443, + 33.88322 + ], + [ + -117.924502, + 33.883009 + ], + [ + -117.924513, + 33.882857 + ], + [ + -117.924497, + 33.88255 + ], + [ + -117.924473, + 33.882198 + ], + [ + -117.924406, + 33.881294 + ], + [ + -117.924376, + 33.88127 + ], + [ + -117.92417, + 33.881274 + ], + [ + -117.922123, + 33.881267 + ], + [ + -117.919985, + 33.881292 + ], + [ + -117.919859, + 33.881804 + ], + [ + -117.919728, + 33.882149 + ], + [ + -117.919776, + 33.88237 + ], + [ + -117.919902, + 33.882621 + ], + [ + -117.920154, + 33.883204 + ], + [ + -117.920136, + 33.883543 + ], + [ + -117.920061, + 33.883901 + ], + [ + -117.919959, + 33.884171 + ], + [ + -117.919975, + 33.884316 + ], + [ + -117.920181, + 33.884476 + ], + [ + -117.920581, + 33.884718 + ], + [ + -117.920731, + 33.884841 + ], + [ + -117.920804, + 33.885001 + ], + [ + -117.920747, + 33.885162 + ], + [ + -117.920589, + 33.885286 + ], + [ + -117.920455, + 33.885344 + ], + [ + -117.920323, + 33.885431 + ], + [ + -117.920243, + 33.88554 + ], + [ + -117.920288, + 33.88572 + ], + [ + -117.920385, + 33.88589 + ], + [ + -117.920476, + 33.886057 + ], + [ + -117.920546, + 33.886213 + ], + [ + -117.920723, + 33.886429 + ], + [ + -117.920841, + 33.886466 + ], + [ + -117.921136, + 33.886339 + ], + [ + -117.92211, + 33.885939 + ], + [ + -117.922456, + 33.885692 + ], + [ + -117.922698, + 33.885489 + ], + [ + -117.92281, + 33.885395 + ], + [ + -117.922338, + 33.885001 + ], + [ + -117.922327, + 33.884968 + ], + [ + -117.923354, + 33.884013 + ], + [ + -117.923547, + 33.883935 + ], + [ + -117.923982, + 33.884267 + ] + ] + ] + }, + "properties": { + "name": "Hillcrest Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 112112893, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.922646, + 33.885424 + ], + [ + -117.922292, + 33.885204 + ], + [ + -117.922193, + 33.885026 + ], + [ + -117.922155, + 33.884921 + ], + [ + -117.922198, + 33.884741 + ], + [ + -117.922128, + 33.884701 + ], + [ + -117.921847, + 33.884701 + ], + [ + -117.921646, + 33.884727 + ], + [ + -117.921233, + 33.885048 + ], + [ + -117.921101, + 33.885077 + ], + [ + -117.920635, + 33.885333 + ], + [ + -117.920543, + 33.885462 + ], + [ + -117.920436, + 33.885542 + ], + [ + -117.920388, + 33.885634 + ], + [ + -117.920527, + 33.886052 + ], + [ + -117.920574, + 33.886132 + ], + [ + -117.920731, + 33.886402 + ], + [ + -117.920841, + 33.886466 + ], + [ + -117.921136, + 33.886339 + ], + [ + -117.92211, + 33.885939 + ], + [ + -117.922178, + 33.885887 + ], + [ + -117.922698, + 33.885489 + ], + [ + -117.922646, + 33.885424 + ] + ] + ] + }, + "properties": { + "name": "Lions Feild", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 112268504, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.862759, + 33.772216 + ], + [ + -117.862657, + 33.772161 + ], + [ + -117.862625, + 33.772067 + ], + [ + -117.862429, + 33.772075 + ], + [ + -117.861756, + 33.772078 + ], + [ + -117.861756, + 33.772324 + ], + [ + -117.86131, + 33.772329 + ], + [ + -117.861305, + 33.772528 + ], + [ + -117.861225, + 33.772541 + ], + [ + -117.861136, + 33.772577 + ], + [ + -117.861095, + 33.772674 + ], + [ + -117.860371, + 33.772691 + ], + [ + -117.860371, + 33.77279 + ], + [ + -117.860384, + 33.773274 + ], + [ + -117.860389, + 33.773369 + ], + [ + -117.860397, + 33.773584 + ], + [ + -117.860396, + 33.77365 + ], + [ + -117.86023, + 33.773725 + ], + [ + -117.860225, + 33.773713 + ], + [ + -117.860212, + 33.773707 + ], + [ + -117.860193, + 33.773707 + ], + [ + -117.859839, + 33.773862 + ], + [ + -117.859287, + 33.774085 + ], + [ + -117.858491, + 33.774398 + ], + [ + -117.857814, + 33.774637 + ], + [ + -117.85765, + 33.774684 + ], + [ + -117.857381, + 33.774753 + ], + [ + -117.857243, + 33.774789 + ], + [ + -117.856943, + 33.774858 + ], + [ + -117.856584, + 33.774927 + ], + [ + -117.8565, + 33.774943 + ], + [ + -117.856346, + 33.77498 + ], + [ + -117.856259, + 33.774949 + ], + [ + -117.856061, + 33.774533 + ], + [ + -117.85595, + 33.774233 + ], + [ + -117.855894, + 33.774251 + ], + [ + -117.855805, + 33.77499 + ], + [ + -117.855778, + 33.775124 + ], + [ + -117.85509, + 33.775649 + ], + [ + -117.855241, + 33.775731 + ], + [ + -117.855407, + 33.77581 + ], + [ + -117.855912, + 33.776051 + ], + [ + -117.856057, + 33.776126 + ], + [ + -117.856927, + 33.776574 + ], + [ + -117.856987, + 33.776349 + ], + [ + -117.857007, + 33.776272 + ], + [ + -117.856921, + 33.776055 + ], + [ + -117.856808, + 33.775787 + ], + [ + -117.856719, + 33.775606 + ], + [ + -117.856846, + 33.775565 + ], + [ + -117.856975, + 33.775812 + ], + [ + -117.857102, + 33.776066 + ], + [ + -117.857202, + 33.776309 + ], + [ + -117.85749, + 33.776188 + ], + [ + -117.857468, + 33.776014 + ], + [ + -117.858324, + 33.775662 + ], + [ + -117.858978, + 33.775445 + ], + [ + -117.859585, + 33.775288 + ], + [ + -117.859629, + 33.775183 + ], + [ + -117.85971, + 33.77505 + ], + [ + -117.85986, + 33.774873 + ], + [ + -117.859998, + 33.774726 + ], + [ + -117.860167, + 33.774561 + ], + [ + -117.860479, + 33.774296 + ], + [ + -117.860679, + 33.774139 + ], + [ + -117.860957, + 33.773943 + ], + [ + -117.861349, + 33.773686 + ], + [ + -117.86169, + 33.773497 + ], + [ + -117.861949, + 33.773369 + ], + [ + -117.862199, + 33.773286 + ], + [ + -117.862549, + 33.773189 + ], + [ + -117.862822, + 33.773147 + ], + [ + -117.863083, + 33.773125 + ], + [ + -117.863506, + 33.773094 + ], + [ + -117.863936, + 33.773071 + ], + [ + -117.864259, + 33.77304 + ], + [ + -117.86455, + 33.772981 + ], + [ + -117.864807, + 33.772904 + ], + [ + -117.865124, + 33.772815 + ], + [ + -117.865209, + 33.772789 + ], + [ + -117.865201, + 33.772406 + ], + [ + -117.865722, + 33.772006 + ], + [ + -117.866304, + 33.771572 + ], + [ + -117.866979, + 33.771313 + ], + [ + -117.867227, + 33.771286 + ], + [ + -117.867228, + 33.771222 + ], + [ + -117.867232, + 33.770899 + ], + [ + -117.867232, + 33.770526 + ], + [ + -117.867023, + 33.770572 + ], + [ + -117.866483, + 33.770791 + ], + [ + -117.865959, + 33.771097 + ], + [ + -117.865957, + 33.771211 + ], + [ + -117.86562, + 33.771346 + ], + [ + -117.865614, + 33.771402 + ], + [ + -117.865449, + 33.771418 + ], + [ + -117.86428, + 33.771988 + ], + [ + -117.864107, + 33.772045 + ], + [ + -117.862888, + 33.772221 + ], + [ + -117.862866, + 33.772221 + ], + [ + -117.862759, + 33.772216 + ] + ] + ] + }, + "properties": { + "name": "Santiago Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 112440736, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.906274, + 33.914204 + ], + [ + -117.90637, + 33.914039 + ], + [ + -117.906285, + 33.91401 + ], + [ + -117.906164, + 33.914012 + ], + [ + -117.906046, + 33.914068 + ], + [ + -117.905982, + 33.914112 + ], + [ + -117.905949, + 33.914172 + ], + [ + -117.906161, + 33.91425 + ], + [ + -117.906274, + 33.914204 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 112643271, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.77691, + 33.709591 + ], + [ + -117.776597, + 33.709374 + ], + [ + -117.776852, + 33.709121 + ], + [ + -117.777164, + 33.709339 + ], + [ + -117.77691, + 33.709591 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 112643272, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.773942, + 33.712538 + ], + [ + -117.773357, + 33.71214 + ], + [ + -117.773094, + 33.712163 + ], + [ + -117.772499, + 33.712837 + ], + [ + -117.773196, + 33.713283 + ], + [ + -117.773942, + 33.712538 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 112643274, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.774072, + 33.712522 + ], + [ + -117.773483, + 33.712126 + ], + [ + -117.772558, + 33.711503 + ], + [ + -117.771695, + 33.712336 + ], + [ + -117.771721, + 33.712436 + ], + [ + -117.773191, + 33.713457 + ], + [ + -117.774072, + 33.712522 + ] + ] + ] + }, + "properties": { + "name": "Brywood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 112643275, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.772842, + 33.712297 + ], + [ + -117.772348, + 33.712782 + ], + [ + -117.771871, + 33.71248 + ], + [ + -117.771834, + 33.712314 + ], + [ + -117.772262, + 33.711855 + ], + [ + -117.772842, + 33.712297 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 113087530, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.937478, + 33.866745 + ], + [ + -117.937494, + 33.868169 + ], + [ + -117.939369, + 33.868145 + ], + [ + -117.939438, + 33.868122 + ], + [ + -117.939753, + 33.868097 + ], + [ + -117.939775, + 33.868143 + ], + [ + -117.940009, + 33.868138 + ], + [ + -117.940264, + 33.868033 + ], + [ + -117.940262, + 33.867759 + ], + [ + -117.940164, + 33.86761 + ], + [ + -117.940274, + 33.867563 + ], + [ + -117.940152, + 33.867282 + ], + [ + -117.940146, + 33.866725 + ], + [ + -117.937478, + 33.866745 + ] + ] + ] + }, + "properties": { + "name": "Independence Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 113629916, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.776235, + 33.686512 + ], + [ + -117.775879, + 33.686875 + ], + [ + -117.773713, + 33.685414 + ], + [ + -117.774052, + 33.684972 + ], + [ + -117.775215, + 33.685803 + ], + [ + -117.775313, + 33.685682 + ], + [ + -117.775536, + 33.685426 + ], + [ + -117.77555, + 33.685245 + ], + [ + -117.775772, + 33.684978 + ], + [ + -117.775864, + 33.684981 + ], + [ + -117.775993, + 33.684984 + ], + [ + -117.776192, + 33.684773 + ], + [ + -117.776263, + 33.684823 + ], + [ + -117.777256, + 33.685498 + ], + [ + -117.776235, + 33.686512 + ] + ] + ] + }, + "properties": { + "name": "Hoeptner Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 113629920, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.783589, + 33.68537 + ], + [ + -117.78345, + 33.685521 + ], + [ + -117.782523, + 33.684848 + ], + [ + -117.782335, + 33.684848 + ], + [ + -117.78161, + 33.684361 + ], + [ + -117.780558, + 33.685445 + ], + [ + -117.781854, + 33.68635 + ], + [ + -117.781978, + 33.686439 + ], + [ + -117.782027, + 33.686534 + ], + [ + -117.782275, + 33.686702 + ], + [ + -117.782184, + 33.686805 + ], + [ + -117.780937, + 33.685926 + ], + [ + -117.780766, + 33.685833 + ], + [ + -117.77888, + 33.684544 + ], + [ + -117.778995, + 33.684421 + ], + [ + -117.780418, + 33.685353 + ], + [ + -117.781497, + 33.684258 + ], + [ + -117.781131, + 33.684006 + ], + [ + -117.781136, + 33.683865 + ], + [ + -117.78044, + 33.683371 + ], + [ + -117.780333, + 33.68326 + ], + [ + -117.7778, + 33.681501 + ], + [ + -117.777901, + 33.681399 + ], + [ + -117.77848, + 33.681787 + ], + [ + -117.781328, + 33.683802 + ], + [ + -117.781403, + 33.683702 + ], + [ + -117.78151, + 33.683668 + ], + [ + -117.781671, + 33.683735 + ], + [ + -117.781769, + 33.683746 + ], + [ + -117.781849, + 33.68375 + ], + [ + -117.781983, + 33.683835 + ], + [ + -117.782612, + 33.683156 + ], + [ + -117.782946, + 33.683394 + ], + [ + -117.782322, + 33.68405 + ], + [ + -117.782358, + 33.684117 + ], + [ + -117.782465, + 33.684169 + ], + [ + -117.78246, + 33.684262 + ], + [ + -117.782505, + 33.684369 + ], + [ + -117.782554, + 33.684421 + ], + [ + -117.782527, + 33.684611 + ], + [ + -117.783589, + 33.68537 + ] + ] + ] + }, + "properties": { + "name": "Ranch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 117447299, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.907923, + 33.916067 + ], + [ + -117.908224, + 33.915693 + ], + [ + -117.908267, + 33.915622 + ], + [ + -117.908481, + 33.915577 + ], + [ + -117.908476, + 33.915052 + ], + [ + -117.908353, + 33.9149 + ], + [ + -117.908154, + 33.914704 + ], + [ + -117.907816, + 33.91462 + ], + [ + -117.907709, + 33.91454 + ], + [ + -117.908283, + 33.913534 + ], + [ + -117.908674, + 33.913035 + ], + [ + -117.90876, + 33.912901 + ], + [ + -117.908208, + 33.913093 + ], + [ + -117.907682, + 33.913164 + ], + [ + -117.907596, + 33.913017 + ], + [ + -117.907451, + 33.912937 + ], + [ + -117.907264, + 33.912964 + ], + [ + -117.907011, + 33.913124 + ], + [ + -117.906067, + 33.913676 + ], + [ + -117.905649, + 33.913908 + ], + [ + -117.905531, + 33.914041 + ], + [ + -117.905407, + 33.914246 + ], + [ + -117.905708, + 33.914384 + ], + [ + -117.906067, + 33.914491 + ], + [ + -117.906164, + 33.914589 + ], + [ + -117.906298, + 33.914856 + ], + [ + -117.906405, + 33.91531 + ], + [ + -117.906453, + 33.915586 + ], + [ + -117.90622, + 33.916055 + ], + [ + -117.90611, + 33.916276 + ], + [ + -117.905594, + 33.917264 + ], + [ + -117.905878, + 33.917261 + ], + [ + -117.906584, + 33.917252 + ], + [ + -117.90673, + 33.917248 + ], + [ + -117.906785, + 33.917239 + ], + [ + -117.906842, + 33.917119 + ], + [ + -117.906873, + 33.91708 + ], + [ + -117.906893, + 33.917055 + ], + [ + -117.906915, + 33.916418 + ], + [ + -117.907237, + 33.916356 + ], + [ + -117.907382, + 33.916352 + ], + [ + -117.90751, + 33.91632 + ], + [ + -117.9078, + 33.916191 + ], + [ + -117.907923, + 33.916067 + ] + ] + ] + }, + "properties": { + "name": "Arovista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 118292070, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.868184, + 33.905533 + ], + [ + -117.863946, + 33.905577 + ], + [ + -117.863825, + 33.901888 + ], + [ + -117.86747, + 33.901865 + ], + [ + -117.868195, + 33.901856 + ], + [ + -117.868211, + 33.90194 + ], + [ + -117.868484, + 33.902145 + ], + [ + -117.868442, + 33.902192 + ], + [ + -117.868152, + 33.901967 + ], + [ + -117.868071, + 33.901976 + ], + [ + -117.868098, + 33.903632 + ], + [ + -117.868082, + 33.903759 + ], + [ + -117.868136, + 33.903877 + ], + [ + -117.868184, + 33.903993 + ], + [ + -117.868193, + 33.904297 + ], + [ + -117.868184, + 33.904313 + ], + [ + -117.868125, + 33.904413 + ], + [ + -117.868179, + 33.905255 + ], + [ + -117.868184, + 33.905533 + ] + ] + ] + }, + "properties": { + "name": "Tri City Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 118422109, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.865768, + 33.902408 + ], + [ + -117.865728, + 33.902442 + ], + [ + -117.865666, + 33.902458 + ], + [ + -117.865603, + 33.902466 + ], + [ + -117.865555, + 33.902443 + ], + [ + -117.865543, + 33.902395 + ], + [ + -117.865539, + 33.902343 + ], + [ + -117.865547, + 33.902292 + ], + [ + -117.865576, + 33.902269 + ], + [ + -117.865676, + 33.902265 + ], + [ + -117.865707, + 33.902268 + ], + [ + -117.865768, + 33.902275 + ], + [ + -117.865798, + 33.902305 + ], + [ + -117.865796, + 33.902317 + ], + [ + -117.865794, + 33.902335 + ], + [ + -117.86579, + 33.902348 + ], + [ + -117.865782, + 33.902385 + ], + [ + -117.865768, + 33.902408 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 118422110, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.88785, + 33.89621 + ], + [ + -117.887516, + 33.895875 + ], + [ + -117.887314, + 33.895569 + ], + [ + -117.887022, + 33.895252 + ], + [ + -117.886788, + 33.895061 + ], + [ + -117.88652, + 33.894892 + ], + [ + -117.886413, + 33.894696 + ], + [ + -117.886573, + 33.89458 + ], + [ + -117.886346, + 33.894459 + ], + [ + -117.88625, + 33.89429 + ], + [ + -117.886219, + 33.894046 + ], + [ + -117.886402, + 33.893619 + ], + [ + -117.885951, + 33.893485 + ], + [ + -117.885758, + 33.893556 + ], + [ + -117.885715, + 33.893841 + ], + [ + -117.885672, + 33.894349 + ], + [ + -117.885425, + 33.895052 + ], + [ + -117.884964, + 33.896085 + ], + [ + -117.884664, + 33.896629 + ], + [ + -117.883999, + 33.89759 + ], + [ + -117.883376, + 33.898632 + ], + [ + -117.883258, + 33.89922 + ], + [ + -117.88402, + 33.899202 + ], + [ + -117.883913, + 33.900191 + ], + [ + -117.883902, + 33.900467 + ], + [ + -117.883784, + 33.900476 + ], + [ + -117.8839, + 33.9008 + ], + [ + -117.884039, + 33.90104 + ], + [ + -117.884061, + 33.901236 + ], + [ + -117.884052, + 33.901411 + ], + [ + -117.883977, + 33.901909 + ], + [ + -117.883934, + 33.902372 + ], + [ + -117.883891, + 33.902898 + ], + [ + -117.883814, + 33.903044 + ], + [ + -117.884009, + 33.903129 + ], + [ + -117.883827, + 33.903379 + ], + [ + -117.883741, + 33.90353 + ], + [ + -117.883752, + 33.903735 + ], + [ + -117.883492, + 33.903774 + ], + [ + -117.883475, + 33.90408 + ], + [ + -117.883441, + 33.904697 + ], + [ + -117.883291, + 33.905213 + ], + [ + -117.882881, + 33.905973 + ], + [ + -117.882454, + 33.9067 + ], + [ + -117.882218, + 33.907038 + ], + [ + -117.88169, + 33.907567 + ], + [ + -117.881349, + 33.907813 + ], + [ + -117.881155, + 33.907991 + ], + [ + -117.881014, + 33.908146 + ], + [ + -117.881068, + 33.909295 + ], + [ + -117.880565, + 33.909763 + ], + [ + -117.880548, + 33.909903 + ], + [ + -117.880544, + 33.909932 + ], + [ + -117.880812, + 33.910012 + ], + [ + -117.882024, + 33.908962 + ], + [ + -117.882205, + 33.908983 + ], + [ + -117.882121, + 33.90849 + ], + [ + -117.882024, + 33.90824 + ], + [ + -117.882773, + 33.907709 + ], + [ + -117.883232, + 33.908587 + ], + [ + -117.883459, + 33.908784 + ], + [ + -117.88413, + 33.909672 + ], + [ + -117.884404, + 33.91008 + ], + [ + -117.885022, + 33.910534 + ], + [ + -117.885546, + 33.910637 + ], + [ + -117.88594, + 33.910636 + ], + [ + -117.886153, + 33.910628 + ], + [ + -117.88844, + 33.910572 + ], + [ + -117.88889, + 33.909728 + ], + [ + -117.889085, + 33.909369 + ], + [ + -117.889242, + 33.909064 + ], + [ + -117.889299, + 33.908952 + ], + [ + -117.88935, + 33.90883 + ], + [ + -117.889427, + 33.908597 + ], + [ + -117.889471, + 33.908427 + ], + [ + -117.889503, + 33.908267 + ], + [ + -117.889521, + 33.908031 + ], + [ + -117.888041, + 33.907122 + ], + [ + -117.88707, + 33.906582 + ], + [ + -117.885949, + 33.90584 + ], + [ + -117.885756, + 33.905591 + ], + [ + -117.885769, + 33.905213 + ], + [ + -117.885788, + 33.904495 + ], + [ + -117.885992, + 33.904246 + ], + [ + -117.886271, + 33.904139 + ], + [ + -117.88638, + 33.904136 + ], + [ + -117.886475, + 33.90381 + ], + [ + -117.886625, + 33.903596 + ], + [ + -117.886979, + 33.903596 + ], + [ + -117.887558, + 33.903774 + ], + [ + -117.88858, + 33.904224 + ], + [ + -117.888953, + 33.904362 + ], + [ + -117.889028, + 33.904157 + ], + [ + -117.888719, + 33.904064 + ], + [ + -117.888483, + 33.903993 + ], + [ + -117.888455, + 33.903973 + ], + [ + -117.888063, + 33.903685 + ], + [ + -117.888161, + 33.903592 + ], + [ + -117.887947, + 33.903476 + ], + [ + -117.887464, + 33.903112 + ], + [ + -117.886979, + 33.902875 + ], + [ + -117.887109, + 33.90272 + ], + [ + -117.887228, + 33.902577 + ], + [ + -117.887443, + 33.902613 + ], + [ + -117.887625, + 33.902533 + ], + [ + -117.887848, + 33.902563 + ], + [ + -117.888245, + 33.902331 + ], + [ + -117.888597, + 33.902168 + ], + [ + -117.889578, + 33.901918 + ], + [ + -117.889618, + 33.901298 + ], + [ + -117.889503, + 33.901517 + ], + [ + -117.889318, + 33.901744 + ], + [ + -117.889009, + 33.901927 + ], + [ + -117.888655, + 33.902016 + ], + [ + -117.888355, + 33.902052 + ], + [ + -117.888119, + 33.902025 + ], + [ + -117.888022, + 33.901874 + ], + [ + -117.887365, + 33.901815 + ], + [ + -117.887121, + 33.901785 + ], + [ + -117.886979, + 33.90169 + ], + [ + -117.886797, + 33.901592 + ], + [ + -117.886981, + 33.901322 + ], + [ + -117.887183, + 33.901076 + ], + [ + -117.887131, + 33.900832 + ], + [ + -117.887237, + 33.900622 + ], + [ + -117.887582, + 33.900511 + ], + [ + -117.887709, + 33.900444 + ], + [ + -117.887709, + 33.900114 + ], + [ + -117.887711, + 33.899416 + ], + [ + -117.887764, + 33.89914 + ], + [ + -117.8877, + 33.898873 + ], + [ + -117.888063, + 33.898186 + ], + [ + -117.888084, + 33.898146 + ], + [ + -117.888215, + 33.897893 + ], + [ + -117.888473, + 33.897795 + ], + [ + -117.888666, + 33.897938 + ], + [ + -117.888932, + 33.897888 + ], + [ + -117.889009, + 33.897813 + ], + [ + -117.888964, + 33.897638 + ], + [ + -117.888889, + 33.897496 + ], + [ + -117.888781, + 33.897336 + ], + [ + -117.888494, + 33.897528 + ], + [ + -117.888363, + 33.897487 + ], + [ + -117.888086, + 33.897118 + ], + [ + -117.888097, + 33.896753 + ], + [ + -117.887912, + 33.896588 + ], + [ + -117.88787, + 33.896436 + ], + [ + -117.887977, + 33.896267 + ], + [ + -117.88785, + 33.89621 + ] + ] + ] + }, + "properties": { + "name": "Craig Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 118784353, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.958885, + 33.877003 + ], + [ + -117.958747, + 33.876985 + ], + [ + -117.958644, + 33.876994 + ], + [ + -117.958558, + 33.876994 + ], + [ + -117.958473, + 33.876954 + ], + [ + -117.958366, + 33.876927 + ], + [ + -117.958286, + 33.876883 + ], + [ + -117.957925, + 33.876771 + ], + [ + -117.957781, + 33.876865 + ], + [ + -117.957352, + 33.877462 + ], + [ + -117.957163, + 33.87764 + ], + [ + -117.95689, + 33.877858 + ], + [ + -117.956686, + 33.877987 + ], + [ + -117.956257, + 33.878223 + ], + [ + -117.955185, + 33.878767 + ], + [ + -117.95483, + 33.878958 + ], + [ + -117.954814, + 33.879025 + ], + [ + -117.954797, + 33.879096 + ], + [ + -117.955243, + 33.879724 + ], + [ + -117.956407, + 33.879288 + ], + [ + -117.956825, + 33.879123 + ], + [ + -117.957207, + 33.878914 + ], + [ + -117.95763, + 33.878642 + ], + [ + -117.958022, + 33.878286 + ], + [ + -117.958311, + 33.877965 + ], + [ + -117.958601, + 33.87756 + ], + [ + -117.958885, + 33.877003 + ] + ] + ] + }, + "properties": { + "name": "Bastanchury Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 120578855, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.879039, + 33.914328 + ], + [ + -117.878948, + 33.914288 + ], + [ + -117.878907, + 33.914259 + ], + [ + -117.878851, + 33.914208 + ], + [ + -117.878776, + 33.914123 + ], + [ + -117.878698, + 33.914103 + ], + [ + -117.878601, + 33.914057 + ], + [ + -117.878553, + 33.914019 + ], + [ + -117.878378, + 33.91381 + ], + [ + -117.878339, + 33.913778 + ], + [ + -117.878306, + 33.913772 + ], + [ + -117.878269, + 33.913781 + ], + [ + -117.877781, + 33.914052 + ], + [ + -117.87734, + 33.914329 + ], + [ + -117.877091, + 33.914554 + ], + [ + -117.876837, + 33.914891 + ], + [ + -117.876742, + 33.915046 + ], + [ + -117.876633, + 33.915314 + ], + [ + -117.87655, + 33.915666 + ], + [ + -117.876525, + 33.915833 + ], + [ + -117.87656, + 33.915833 + ], + [ + -117.876609, + 33.915822 + ], + [ + -117.876608, + 33.915802 + ], + [ + -117.876731, + 33.915769 + ], + [ + -117.87692, + 33.915668 + ], + [ + -117.877019, + 33.91559 + ], + [ + -117.877065, + 33.915512 + ], + [ + -117.877529, + 33.915417 + ], + [ + -117.877631, + 33.915252 + ], + [ + -117.877713, + 33.915148 + ], + [ + -117.877845, + 33.915034 + ], + [ + -117.878024, + 33.914914 + ], + [ + -117.878145, + 33.914852 + ], + [ + -117.878264, + 33.914818 + ], + [ + -117.878516, + 33.914778 + ], + [ + -117.878593, + 33.914798 + ], + [ + -117.878566, + 33.91493 + ], + [ + -117.878551, + 33.915025 + ], + [ + -117.878612, + 33.915052 + ], + [ + -117.878619, + 33.91504 + ], + [ + -117.878992, + 33.914407 + ], + [ + -117.879039, + 33.914328 + ] + ] + ] + }, + "properties": { + "name": "Greenbriar Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 120578858, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.877955, + 33.914549 + ], + [ + -117.877987, + 33.914555 + ], + [ + -117.878038, + 33.914531 + ], + [ + -117.878084, + 33.914482 + ], + [ + -117.8781, + 33.914451 + ], + [ + -117.878097, + 33.914411 + ], + [ + -117.878062, + 33.914387 + ], + [ + -117.878033, + 33.914379 + ], + [ + -117.877987, + 33.914382 + ], + [ + -117.877946, + 33.914416 + ], + [ + -117.877901, + 33.914451 + ], + [ + -117.877869, + 33.914475 + ], + [ + -117.877885, + 33.914506 + ], + [ + -117.87792, + 33.914533 + ], + [ + -117.877955, + 33.914549 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 120719388, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.899417, + 33.788606 + ], + [ + -117.899438, + 33.788618 + ], + [ + -117.899475, + 33.788626 + ], + [ + -117.899826, + 33.788623 + ], + [ + -117.899857, + 33.788621 + ], + [ + -117.89988, + 33.788612 + ], + [ + -117.899905, + 33.788597 + ], + [ + -117.899923, + 33.788576 + ], + [ + -117.900322, + 33.788124 + ], + [ + -117.900311, + 33.787978 + ], + [ + -117.900216, + 33.787754 + ], + [ + -117.899487, + 33.787755 + ], + [ + -117.899481, + 33.78811 + ], + [ + -117.899437, + 33.78811 + ], + [ + -117.899388, + 33.78811 + ], + [ + -117.89938, + 33.788542 + ], + [ + -117.89939, + 33.788573 + ], + [ + -117.899402, + 33.788593 + ], + [ + -117.899417, + 33.788606 + ] + ] + ] + }, + "properties": { + "name": "Memorial Gardens", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 120719849, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.898637, + 33.786911 + ], + [ + -117.899486, + 33.78691 + ], + [ + -117.899485, + 33.786788 + ], + [ + -117.899632, + 33.786788 + ], + [ + -117.89976, + 33.786787 + ], + [ + -117.899758, + 33.786131 + ], + [ + -117.899754, + 33.786115 + ], + [ + -117.899743, + 33.786105 + ], + [ + -117.899727, + 33.786097 + ], + [ + -117.899707, + 33.786095 + ], + [ + -117.898863, + 33.786096 + ], + [ + -117.898865, + 33.785995 + ], + [ + -117.898866, + 33.78549 + ], + [ + -117.898866, + 33.785472 + ], + [ + -117.898801, + 33.785472 + ], + [ + -117.898798, + 33.786343 + ], + [ + -117.89874, + 33.786383 + ], + [ + -117.898681, + 33.786437 + ], + [ + -117.898648, + 33.786489 + ], + [ + -117.898623, + 33.786553 + ], + [ + -117.898616, + 33.786616 + ], + [ + -117.898621, + 33.786675 + ], + [ + -117.898635, + 33.786723 + ], + [ + -117.898637, + 33.786911 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 120719851, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.900322, + 33.788124 + ], + [ + -117.900311, + 33.787978 + ], + [ + -117.900216, + 33.787754 + ], + [ + -117.899487, + 33.787755 + ], + [ + -117.899483, + 33.787434 + ], + [ + -117.899588, + 33.7874 + ], + [ + -117.89948, + 33.787367 + ], + [ + -117.899482, + 33.787211 + ], + [ + -117.899834, + 33.787207 + ], + [ + -117.899835, + 33.786788 + ], + [ + -117.899836, + 33.786706 + ], + [ + -117.900645, + 33.786706 + ], + [ + -117.900665, + 33.786712 + ], + [ + -117.900679, + 33.786721 + ], + [ + -117.900693, + 33.786734 + ], + [ + -117.900696, + 33.787615 + ], + [ + -117.900694, + 33.787641 + ], + [ + -117.900688, + 33.787677 + ], + [ + -117.900674, + 33.787717 + ], + [ + -117.900653, + 33.787754 + ], + [ + -117.900322, + 33.788124 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 120720416, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.89938, + 33.787165 + ], + [ + -117.899051, + 33.787166 + ], + [ + -117.899051, + 33.787204 + ], + [ + -117.899171, + 33.787274 + ], + [ + -117.89938, + 33.787337 + ], + [ + -117.89938, + 33.787165 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 120778118, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.926253, + 33.807932 + ], + [ + -117.926047, + 33.807932 + ], + [ + -117.926054, + 33.807927 + ], + [ + -117.926055, + 33.807916 + ], + [ + -117.926051, + 33.80791 + ], + [ + -117.926036, + 33.807903 + ], + [ + -117.92603, + 33.807893 + ], + [ + -117.926035, + 33.807882 + ], + [ + -117.92605, + 33.80787 + ], + [ + -117.926069, + 33.807857 + ], + [ + -117.926094, + 33.807841 + ], + [ + -117.926127, + 33.807842 + ], + [ + -117.926227, + 33.807851 + ], + [ + -117.92627, + 33.807862 + ], + [ + -117.926276, + 33.807851 + ], + [ + -117.926299, + 33.807858 + ], + [ + -117.926326, + 33.807859 + ], + [ + -117.926371, + 33.807862 + ], + [ + -117.926413, + 33.807881 + ], + [ + -117.92643, + 33.807903 + ], + [ + -117.926435, + 33.807926 + ], + [ + -117.926431, + 33.807963 + ], + [ + -117.926425, + 33.807994 + ], + [ + -117.926394, + 33.808013 + ], + [ + -117.926361, + 33.808022 + ], + [ + -117.926361, + 33.808005 + ], + [ + -117.926372, + 33.808002 + ], + [ + -117.926393, + 33.807992 + ], + [ + -117.926411, + 33.807981 + ], + [ + -117.92642, + 33.807964 + ], + [ + -117.926423, + 33.807942 + ], + [ + -117.92642, + 33.80792 + ], + [ + -117.926408, + 33.807901 + ], + [ + -117.926386, + 33.807886 + ], + [ + -117.926361, + 33.80788 + ], + [ + -117.92636, + 33.807871 + ], + [ + -117.92634, + 33.80787 + ], + [ + -117.926314, + 33.807877 + ], + [ + -117.926286, + 33.807892 + ], + [ + -117.92627, + 33.807915 + ], + [ + -117.926267, + 33.807925 + ], + [ + -117.926254, + 33.807925 + ], + [ + -117.926253, + 33.807932 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 120880408, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.880346, + 33.844682 + ], + [ + -117.878259, + 33.844974 + ], + [ + -117.878259, + 33.84546 + ], + [ + -117.87709, + 33.845466 + ], + [ + -117.877093, + 33.845554 + ], + [ + -117.876589, + 33.845556 + ], + [ + -117.876398, + 33.843679 + ], + [ + -117.876708, + 33.843678 + ], + [ + -117.876736, + 33.843689 + ], + [ + -117.876762, + 33.84372 + ], + [ + -117.876787, + 33.843735 + ], + [ + -117.87682, + 33.843747 + ], + [ + -117.876856, + 33.843749 + ], + [ + -117.876893, + 33.843742 + ], + [ + -117.876946, + 33.843719 + ], + [ + -117.877008, + 33.843702 + ], + [ + -117.877094, + 33.843697 + ], + [ + -117.879268, + 33.843695 + ], + [ + -117.879654, + 33.843693 + ], + [ + -117.87984, + 33.843675 + ], + [ + -117.880044, + 33.843668 + ], + [ + -117.880165, + 33.843657 + ], + [ + -117.880305, + 33.843656 + ], + [ + -117.880333, + 33.843671 + ], + [ + -117.880348, + 33.8437 + ], + [ + -117.880346, + 33.844682 + ] + ] + ] + }, + "properties": { + "name": "Pioneer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 120902182, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.883121, + 33.800839 + ], + [ + -117.883076, + 33.800864 + ], + [ + -117.883022, + 33.800872 + ], + [ + -117.882687, + 33.800886 + ], + [ + -117.882231, + 33.800672 + ], + [ + -117.882043, + 33.800148 + ], + [ + -117.882028, + 33.800094 + ], + [ + -117.882035, + 33.800039 + ], + [ + -117.882064, + 33.79999 + ], + [ + -117.882129, + 33.799961 + ], + [ + -117.882215, + 33.79995 + ], + [ + -117.882727, + 33.799941 + ], + [ + -117.882713, + 33.799974 + ], + [ + -117.882697, + 33.800023 + ], + [ + -117.882707, + 33.800076 + ], + [ + -117.882751, + 33.800167 + ], + [ + -117.8828, + 33.80022 + ], + [ + -117.882874, + 33.800265 + ], + [ + -117.88296, + 33.80029 + ], + [ + -117.883044, + 33.800291 + ], + [ + -117.883101, + 33.800286 + ], + [ + -117.88315, + 33.800267 + ], + [ + -117.883156, + 33.800682 + ], + [ + -117.883121, + 33.800839 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 121661461, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.915723, + 33.807729 + ], + [ + -117.915719, + 33.807733 + ], + [ + -117.915653, + 33.807734 + ], + [ + -117.915654, + 33.807776 + ], + [ + -117.91572, + 33.807775 + ], + [ + -117.915723, + 33.807774 + ], + [ + -117.915725, + 33.808076 + ], + [ + -117.915725, + 33.808082 + ], + [ + -117.915721, + 33.808087 + ], + [ + -117.915715, + 33.808089 + ], + [ + -117.915708, + 33.808087 + ], + [ + -117.91558, + 33.808052 + ], + [ + -117.915559, + 33.808043 + ], + [ + -117.915543, + 33.808031 + ], + [ + -117.915532, + 33.808008 + ], + [ + -117.915526, + 33.807169 + ], + [ + -117.915568, + 33.807129 + ], + [ + -117.915574, + 33.807124 + ], + [ + -117.915605, + 33.807123 + ], + [ + -117.915633, + 33.80713 + ], + [ + -117.915707, + 33.80715 + ], + [ + -117.915726, + 33.807158 + ], + [ + -117.915739, + 33.807174 + ], + [ + -117.915745, + 33.807189 + ], + [ + -117.915746, + 33.807204 + ], + [ + -117.915743, + 33.807217 + ], + [ + -117.915738, + 33.807234 + ], + [ + -117.915727, + 33.807288 + ], + [ + -117.915721, + 33.807331 + ], + [ + -117.915723, + 33.807729 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 123421472, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.92033, + 33.817511 + ], + [ + -117.920237, + 33.817511 + ], + [ + -117.920238, + 33.817637 + ], + [ + -117.920237, + 33.817811 + ], + [ + -117.920322, + 33.817798 + ], + [ + -117.920327, + 33.817799 + ], + [ + -117.92033, + 33.817511 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 124282180, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.954853, + 33.867979 + ], + [ + -117.954757, + 33.86798 + ], + [ + -117.954741, + 33.867973 + ], + [ + -117.954733, + 33.867959 + ], + [ + -117.954732, + 33.867876 + ], + [ + -117.954729, + 33.867863 + ], + [ + -117.954722, + 33.867857 + ], + [ + -117.954711, + 33.867858 + ], + [ + -117.954695, + 33.867868 + ], + [ + -117.954679, + 33.867874 + ], + [ + -117.954664, + 33.867872 + ], + [ + -117.954653, + 33.867866 + ], + [ + -117.954647, + 33.867855 + ], + [ + -117.954646, + 33.867774 + ], + [ + -117.954656, + 33.867763 + ], + [ + -117.954671, + 33.867756 + ], + [ + -117.954688, + 33.867757 + ], + [ + -117.954739, + 33.867791 + ], + [ + -117.954751, + 33.867792 + ], + [ + -117.954756, + 33.867785 + ], + [ + -117.954756, + 33.867755 + ], + [ + -117.954796, + 33.867718 + ], + [ + -117.954814, + 33.867715 + ], + [ + -117.95483, + 33.86772 + ], + [ + -117.954872, + 33.867754 + ], + [ + -117.954874, + 33.867767 + ], + [ + -117.954879, + 33.867951 + ], + [ + -117.954871, + 33.867968 + ], + [ + -117.954853, + 33.867979 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 124282181, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.954633, + 33.866639 + ], + [ + -117.954943, + 33.866636 + ], + [ + -117.95496, + 33.866642 + ], + [ + -117.954976, + 33.866656 + ], + [ + -117.954988, + 33.866674 + ], + [ + -117.954999, + 33.866695 + ], + [ + -117.955003, + 33.866716 + ], + [ + -117.955016, + 33.868019 + ], + [ + -117.955006, + 33.868045 + ], + [ + -117.954986, + 33.868061 + ], + [ + -117.954963, + 33.868071 + ], + [ + -117.954643, + 33.868069 + ], + [ + -117.954633, + 33.866639 + ] + ] + ] + }, + "properties": { + "name": "Pacific Drive Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 124282637, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.929682, + 33.870142 + ], + [ + -117.929682, + 33.869881 + ], + [ + -117.92982, + 33.86988 + ], + [ + -117.930156, + 33.869197 + ], + [ + -117.930187, + 33.869114 + ], + [ + -117.930184, + 33.869031 + ], + [ + -117.930141, + 33.868948 + ], + [ + -117.930065, + 33.868888 + ], + [ + -117.929979, + 33.868857 + ], + [ + -117.929877, + 33.868853 + ], + [ + -117.928818, + 33.868866 + ], + [ + -117.928827, + 33.869452 + ], + [ + -117.928793, + 33.869681 + ], + [ + -117.928789, + 33.870083 + ], + [ + -117.928874, + 33.870147 + ], + [ + -117.929682, + 33.870142 + ] + ] + ] + }, + "properties": { + "name": "Amerige Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 124411454, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.919724, + 33.87353 + ], + [ + -117.919722, + 33.873762 + ], + [ + -117.919569, + 33.873755 + ], + [ + -117.919578, + 33.873844 + ], + [ + -117.919583, + 33.873886 + ], + [ + -117.919508, + 33.87386 + ], + [ + -117.919301, + 33.873849 + ], + [ + -117.919232, + 33.873875 + ], + [ + -117.919119, + 33.873817 + ], + [ + -117.919022, + 33.873771 + ], + [ + -117.918939, + 33.873697 + ], + [ + -117.918899, + 33.873641 + ], + [ + -117.918883, + 33.873579 + ], + [ + -117.918899, + 33.87353 + ], + [ + -117.919151, + 33.873303 + ], + [ + -117.919307, + 33.873425 + ], + [ + -117.919406, + 33.873343 + ], + [ + -117.919476, + 33.873341 + ], + [ + -117.919612, + 33.873245 + ], + [ + -117.919724, + 33.87353 + ] + ] + ] + }, + "properties": { + "name": "Sculpture Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 126325449, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.922128, + 33.895916 + ], + [ + -117.922123, + 33.895845 + ], + [ + -117.922096, + 33.895773 + ], + [ + -117.92201, + 33.89572 + ], + [ + -117.92186, + 33.895658 + ], + [ + -117.92179, + 33.895665 + ], + [ + -117.921715, + 33.895701 + ], + [ + -117.921624, + 33.895732 + ], + [ + -117.921039, + 33.895728 + ], + [ + -117.920514, + 33.895671 + ], + [ + -117.920449, + 33.895652 + ], + [ + -117.920444, + 33.895622 + ], + [ + -117.920407, + 33.895593 + ], + [ + -117.919816, + 33.895581 + ], + [ + -117.919725, + 33.895618 + ], + [ + -117.919344, + 33.895644 + ], + [ + -117.918673, + 33.895652 + ], + [ + -117.918067, + 33.895688 + ], + [ + -117.917788, + 33.895723 + ], + [ + -117.917552, + 33.895696 + ], + [ + -117.917413, + 33.895729 + ], + [ + -117.917069, + 33.895843 + ], + [ + -117.916909, + 33.895978 + ], + [ + -117.916951, + 33.896124 + ], + [ + -117.917064, + 33.896174 + ], + [ + -117.917263, + 33.896156 + ], + [ + -117.917472, + 33.896232 + ], + [ + -117.918186, + 33.896606 + ], + [ + -117.918395, + 33.896667 + ], + [ + -117.91869, + 33.896668 + ], + [ + -117.918883, + 33.896664 + ], + [ + -117.919688, + 33.896611 + ], + [ + -117.919897, + 33.896762 + ], + [ + -117.919988, + 33.89686 + ], + [ + -117.920004, + 33.896921 + ], + [ + -117.919999, + 33.897025 + ], + [ + -117.92002, + 33.89893 + ], + [ + -117.920653, + 33.898895 + ], + [ + -117.920712, + 33.89889 + ], + [ + -117.920707, + 33.898467 + ], + [ + -117.920718, + 33.898378 + ], + [ + -117.920761, + 33.898325 + ], + [ + -117.920911, + 33.898035 + ], + [ + -117.92112, + 33.89784 + ], + [ + -117.921351, + 33.897604 + ], + [ + -117.921447, + 33.897497 + ], + [ + -117.921479, + 33.897385 + ], + [ + -117.921474, + 33.897234 + ], + [ + -117.921447, + 33.897149 + ], + [ + -117.921372, + 33.897096 + ], + [ + -117.921292, + 33.896927 + ], + [ + -117.921335, + 33.896882 + ], + [ + -117.921372, + 33.89682 + ], + [ + -117.921431, + 33.896735 + ], + [ + -117.921517, + 33.896664 + ], + [ + -117.921603, + 33.896619 + ], + [ + -117.921726, + 33.896569 + ], + [ + -117.921828, + 33.896553 + ], + [ + -117.921871, + 33.896517 + ], + [ + -117.921876, + 33.89645 + ], + [ + -117.921892, + 33.896272 + ], + [ + -117.921919, + 33.896188 + ], + [ + -117.921978, + 33.896121 + ], + [ + -117.922091, + 33.895974 + ], + [ + -117.922128, + 33.895916 + ] + ] + ] + }, + "properties": { + "name": "Fullerton Sports Complex", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 127011138, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.920542, + 33.811978 + ], + [ + -117.920532, + 33.811986 + ], + [ + -117.920528, + 33.81199 + ], + [ + -117.920519, + 33.811992 + ], + [ + -117.92051, + 33.811992 + ], + [ + -117.920498, + 33.81199 + ], + [ + -117.92049, + 33.811988 + ], + [ + -117.920485, + 33.811982 + ], + [ + -117.920479, + 33.811968 + ], + [ + -117.920474, + 33.812005 + ], + [ + -117.920474, + 33.812013 + ], + [ + -117.920493, + 33.812012 + ], + [ + -117.920489, + 33.812045 + ], + [ + -117.920471, + 33.812045 + ], + [ + -117.920469, + 33.812069 + ], + [ + -117.920484, + 33.812082 + ], + [ + -117.9205, + 33.812084 + ], + [ + -117.920509, + 33.812083 + ], + [ + -117.920523, + 33.812071 + ], + [ + -117.920535, + 33.812056 + ], + [ + -117.920538, + 33.812023 + ], + [ + -117.920538, + 33.812012 + ], + [ + -117.920542, + 33.811978 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 127297520, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.930636, + 33.829189 + ], + [ + -117.930379, + 33.829084 + ], + [ + -117.930122, + 33.828974 + ], + [ + -117.92989, + 33.828875 + ], + [ + -117.929273, + 33.828533 + ], + [ + -117.929198, + 33.82846 + ], + [ + -117.928669, + 33.827951 + ], + [ + -117.92862, + 33.827909 + ], + [ + -117.928593, + 33.827852 + ], + [ + -117.928591, + 33.827819 + ], + [ + -117.92859, + 33.827613 + ], + [ + -117.928687, + 33.827526 + ], + [ + -117.929681, + 33.827646 + ], + [ + -117.92999, + 33.827674 + ], + [ + -117.930572, + 33.827987 + ], + [ + -117.930636, + 33.829189 + ] + ] + ] + }, + "properties": { + "name": "Ross Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 127575379, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.900521, + 33.670618 + ], + [ + -117.900526, + 33.66931 + ], + [ + -117.900451, + 33.669308 + ], + [ + -117.900451, + 33.668997 + ], + [ + -117.897371, + 33.669058 + ], + [ + -117.897141, + 33.669063 + ], + [ + -117.895451, + 33.669078 + ], + [ + -117.894043, + 33.669085 + ], + [ + -117.892484, + 33.669092 + ], + [ + -117.892366, + 33.669207 + ], + [ + -117.891324, + 33.670157 + ], + [ + -117.892335, + 33.670147 + ], + [ + -117.892337, + 33.671519 + ], + [ + -117.897598, + 33.671478 + ], + [ + -117.89833, + 33.671476 + ], + [ + -117.898337, + 33.671363 + ], + [ + -117.898347, + 33.671352 + ], + [ + -117.898397, + 33.6713 + ], + [ + -117.898533, + 33.671283 + ], + [ + -117.89866, + 33.67128 + ], + [ + -117.898689, + 33.671279 + ], + [ + -117.899632, + 33.671276 + ], + [ + -117.899636, + 33.670926 + ], + [ + -117.899636, + 33.670716 + ], + [ + -117.899673, + 33.670618 + ], + [ + -117.900521, + 33.670618 + ] + ] + ] + }, + "properties": { + "name": "Te Winkle Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 127693196, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.901714, + 33.662986 + ], + [ + -117.901713, + 33.662345 + ], + [ + -117.901703, + 33.662327 + ], + [ + -117.901371, + 33.662327 + ], + [ + -117.901321, + 33.66228 + ], + [ + -117.900999, + 33.662282 + ], + [ + -117.900999, + 33.662367 + ], + [ + -117.900616, + 33.662368 + ], + [ + -117.900614, + 33.66233 + ], + [ + -117.900548, + 33.662332 + ], + [ + -117.900542, + 33.662339 + ], + [ + -117.900539, + 33.662356 + ], + [ + -117.900352, + 33.662357 + ], + [ + -117.90033, + 33.662369 + ], + [ + -117.900326, + 33.662389 + ], + [ + -117.900326, + 33.662414 + ], + [ + -117.90035, + 33.662423 + ], + [ + -117.900385, + 33.662395 + ], + [ + -117.900521, + 33.66249 + ], + [ + -117.900568, + 33.662492 + ], + [ + -117.900565, + 33.66247 + ], + [ + -117.900576, + 33.66245 + ], + [ + -117.900587, + 33.662429 + ], + [ + -117.901077, + 33.662429 + ], + [ + -117.901078, + 33.662534 + ], + [ + -117.901093, + 33.662534 + ], + [ + -117.901096, + 33.662663 + ], + [ + -117.901045, + 33.662665 + ], + [ + -117.901049, + 33.662947 + ], + [ + -117.900739, + 33.662947 + ], + [ + -117.900735, + 33.662733 + ], + [ + -117.900757, + 33.662733 + ], + [ + -117.900758, + 33.662682 + ], + [ + -117.900656, + 33.662683 + ], + [ + -117.900663, + 33.663016 + ], + [ + -117.901014, + 33.663013 + ], + [ + -117.901046, + 33.663035 + ], + [ + -117.901047, + 33.663056 + ], + [ + -117.901144, + 33.663054 + ], + [ + -117.901144, + 33.662996 + ], + [ + -117.901179, + 33.662996 + ], + [ + -117.901192, + 33.662988 + ], + [ + -117.901714, + 33.662986 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 128245090, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.924532, + 33.812564 + ], + [ + -117.92451, + 33.81256 + ], + [ + -117.924482, + 33.81255 + ], + [ + -117.924468, + 33.812541 + ], + [ + -117.924447, + 33.812525 + ], + [ + -117.924427, + 33.812496 + ], + [ + -117.924421, + 33.81248 + ], + [ + -117.924419, + 33.812456 + ], + [ + -117.924423, + 33.812441 + ], + [ + -117.924426, + 33.81237 + ], + [ + -117.92443, + 33.812281 + ], + [ + -117.924419, + 33.812166 + ], + [ + -117.924403, + 33.812044 + ], + [ + -117.924391, + 33.811941 + ], + [ + -117.924376, + 33.811847 + ], + [ + -117.924361, + 33.81173 + ], + [ + -117.924303, + 33.811476 + ], + [ + -117.924296, + 33.811445 + ], + [ + -117.9243, + 33.811435 + ], + [ + -117.924325, + 33.811433 + ], + [ + -117.924426, + 33.81144 + ], + [ + -117.924536, + 33.811449 + ], + [ + -117.924781, + 33.811449 + ], + [ + -117.924791, + 33.811449 + ], + [ + -117.924797, + 33.811458 + ], + [ + -117.924796, + 33.811504 + ], + [ + -117.924792, + 33.811515 + ], + [ + -117.924777, + 33.811519 + ], + [ + -117.924765, + 33.811518 + ], + [ + -117.924759, + 33.811512 + ], + [ + -117.924755, + 33.811504 + ], + [ + -117.924755, + 33.811489 + ], + [ + -117.924757, + 33.811472 + ], + [ + -117.924615, + 33.81147 + ], + [ + -117.924615, + 33.811516 + ], + [ + -117.924549, + 33.811518 + ], + [ + -117.924547, + 33.812288 + ], + [ + -117.924546, + 33.812363 + ], + [ + -117.924545, + 33.812419 + ], + [ + -117.924609, + 33.81242 + ], + [ + -117.924609, + 33.812461 + ], + [ + -117.925193, + 33.812457 + ], + [ + -117.925559, + 33.812455 + ], + [ + -117.925562, + 33.81241 + ], + [ + -117.925579, + 33.812395 + ], + [ + -117.925606, + 33.812386 + ], + [ + -117.925681, + 33.812385 + ], + [ + -117.92569, + 33.812018 + ], + [ + -117.925517, + 33.812017 + ], + [ + -117.925494, + 33.812012 + ], + [ + -117.92548, + 33.811999 + ], + [ + -117.925478, + 33.811978 + ], + [ + -117.925543, + 33.811977 + ], + [ + -117.925543, + 33.811465 + ], + [ + -117.925543, + 33.81145 + ], + [ + -117.925558, + 33.811449 + ], + [ + -117.925603, + 33.811456 + ], + [ + -117.925633, + 33.811481 + ], + [ + -117.925643, + 33.811497 + ], + [ + -117.925649, + 33.811546 + ], + [ + -117.925643, + 33.811573 + ], + [ + -117.925646, + 33.811653 + ], + [ + -117.925649, + 33.811713 + ], + [ + -117.92565, + 33.811769 + ], + [ + -117.925671, + 33.811819 + ], + [ + -117.9257, + 33.811888 + ], + [ + -117.925726, + 33.811959 + ], + [ + -117.925738, + 33.811989 + ], + [ + -117.925742, + 33.812023 + ], + [ + -117.925742, + 33.812075 + ], + [ + -117.925742, + 33.81213 + ], + [ + -117.925742, + 33.812442 + ], + [ + -117.925739, + 33.812475 + ], + [ + -117.925733, + 33.812507 + ], + [ + -117.92572, + 33.812526 + ], + [ + -117.925715, + 33.812534 + ], + [ + -117.925713, + 33.812537 + ], + [ + -117.925675, + 33.812567 + ], + [ + -117.925642, + 33.812579 + ], + [ + -117.925605, + 33.812585 + ], + [ + -117.925566, + 33.812588 + ], + [ + -117.925246, + 33.812589 + ], + [ + -117.925173, + 33.812574 + ], + [ + -117.925126, + 33.812568 + ], + [ + -117.925042, + 33.812557 + ], + [ + -117.92492, + 33.812554 + ], + [ + -117.924753, + 33.812557 + ], + [ + -117.924532, + 33.812564 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 128253931, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.924074, + 33.812545 + ], + [ + -117.924073, + 33.812475 + ], + [ + -117.924076, + 33.812199 + ], + [ + -117.924062, + 33.811991 + ], + [ + -117.924017, + 33.811615 + ], + [ + -117.923966, + 33.81118 + ], + [ + -117.923899, + 33.810975 + ], + [ + -117.923863, + 33.810885 + ], + [ + -117.92384, + 33.810787 + ], + [ + -117.92383, + 33.810788 + ], + [ + -117.923796, + 33.810791 + ], + [ + -117.923781, + 33.810783 + ], + [ + -117.923751, + 33.810741 + ], + [ + -117.923743, + 33.810735 + ], + [ + -117.923604, + 33.81059 + ], + [ + -117.923519, + 33.810587 + ], + [ + -117.923647, + 33.810701 + ], + [ + -117.923757, + 33.810825 + ], + [ + -117.923827, + 33.810929 + ], + [ + -117.923894, + 33.811086 + ], + [ + -117.92393, + 33.811257 + ], + [ + -117.923968, + 33.811603 + ], + [ + -117.924024, + 33.811966 + ], + [ + -117.924036, + 33.812059 + ], + [ + -117.924042, + 33.81219 + ], + [ + -117.924046, + 33.812506 + ], + [ + -117.924044, + 33.812527 + ], + [ + -117.924074, + 33.812545 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 128254966, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.933622, + 33.807541 + ], + [ + -117.933611, + 33.80751 + ], + [ + -117.933584, + 33.807488 + ], + [ + -117.933544, + 33.807472 + ], + [ + -117.93349, + 33.807481 + ], + [ + -117.933445, + 33.807508 + ], + [ + -117.933437, + 33.807619 + ], + [ + -117.933306, + 33.807616 + ], + [ + -117.933293, + 33.807654 + ], + [ + -117.933504, + 33.807657 + ], + [ + -117.933506, + 33.807635 + ], + [ + -117.933547, + 33.807623 + ], + [ + -117.933584, + 33.80761 + ], + [ + -117.933603, + 33.807592 + ], + [ + -117.933622, + 33.807541 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 128428010, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.882572, + 33.688911 + ], + [ + -117.882526, + 33.68892 + ], + [ + -117.882492, + 33.688909 + ], + [ + -117.882481, + 33.688884 + ], + [ + -117.882484, + 33.688802 + ], + [ + -117.8825, + 33.688782 + ], + [ + -117.882529, + 33.688768 + ], + [ + -117.88257, + 33.688778 + ], + [ + -117.882572, + 33.688911 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 128430020, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.883052, + 33.68923 + ], + [ + -117.883053, + 33.689161 + ], + [ + -117.882745, + 33.689161 + ], + [ + -117.88264, + 33.68925 + ], + [ + -117.882642, + 33.689315 + ], + [ + -117.88279, + 33.689422 + ], + [ + -117.882803, + 33.68941 + ], + [ + -117.882744, + 33.689364 + ], + [ + -117.882749, + 33.689275 + ], + [ + -117.882751, + 33.689226 + ], + [ + -117.883052, + 33.68923 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 128918440, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.879445, + 33.691329 + ], + [ + -117.879484, + 33.691316 + ], + [ + -117.879509, + 33.691298 + ], + [ + -117.879528, + 33.691272 + ], + [ + -117.879538, + 33.691237 + ], + [ + -117.879538, + 33.691206 + ], + [ + -117.879532, + 33.691169 + ], + [ + -117.879515, + 33.691136 + ], + [ + -117.879527, + 33.691112 + ], + [ + -117.879532, + 33.69106 + ], + [ + -117.879509, + 33.690994 + ], + [ + -117.879522, + 33.69097 + ], + [ + -117.879543, + 33.690959 + ], + [ + -117.879582, + 33.690969 + ], + [ + -117.879608, + 33.690974 + ], + [ + -117.87965, + 33.690964 + ], + [ + -117.879698, + 33.690955 + ], + [ + -117.879736, + 33.690954 + ], + [ + -117.879798, + 33.690969 + ], + [ + -117.879827, + 33.690972 + ], + [ + -117.879866, + 33.690971 + ], + [ + -117.879903, + 33.690962 + ], + [ + -117.879926, + 33.690949 + ], + [ + -117.879914, + 33.69093 + ], + [ + -117.879948, + 33.690912 + ], + [ + -117.879935, + 33.690892 + ], + [ + -117.879834, + 33.690804 + ], + [ + -117.879607, + 33.690796 + ], + [ + -117.87959, + 33.690769 + ], + [ + -117.879736, + 33.690769 + ], + [ + -117.879719, + 33.690749 + ], + [ + -117.87957, + 33.690747 + ], + [ + -117.87957, + 33.690608 + ], + [ + -117.879346, + 33.690611 + ], + [ + -117.879299, + 33.690646 + ], + [ + -117.879306, + 33.690675 + ], + [ + -117.879363, + 33.690702 + ], + [ + -117.879363, + 33.690775 + ], + [ + -117.879338, + 33.690785 + ], + [ + -117.879335, + 33.691018 + ], + [ + -117.879314, + 33.691017 + ], + [ + -117.879272, + 33.691042 + ], + [ + -117.87927, + 33.691055 + ], + [ + -117.879301, + 33.691087 + ], + [ + -117.879313, + 33.691114 + ], + [ + -117.87932, + 33.691139 + ], + [ + -117.879316, + 33.691167 + ], + [ + -117.879309, + 33.691182 + ], + [ + -117.879344, + 33.691203 + ], + [ + -117.87937, + 33.691206 + ], + [ + -117.879286, + 33.691265 + ], + [ + -117.87927, + 33.691269 + ], + [ + -117.879227, + 33.691324 + ], + [ + -117.879147, + 33.691392 + ], + [ + -117.879095, + 33.691424 + ], + [ + -117.879048, + 33.691405 + ], + [ + -117.878995, + 33.691377 + ], + [ + -117.878746, + 33.691172 + ], + [ + -117.878704, + 33.691147 + ], + [ + -117.878067, + 33.691148 + ], + [ + -117.878002, + 33.691442 + ], + [ + -117.878055, + 33.691415 + ], + [ + -117.878259, + 33.691309 + ], + [ + -117.878289, + 33.691294 + ], + [ + -117.878457, + 33.69132 + ], + [ + -117.878549, + 33.691449 + ], + [ + -117.878581, + 33.691453 + ], + [ + -117.878585, + 33.691436 + ], + [ + -117.87869, + 33.691453 + ], + [ + -117.878707, + 33.691449 + ], + [ + -117.878823, + 33.691479 + ], + [ + -117.878868, + 33.691494 + ], + [ + -117.878857, + 33.69153 + ], + [ + -117.878905, + 33.691537 + ], + [ + -117.878891, + 33.691586 + ], + [ + -117.878869, + 33.691597 + ], + [ + -117.87884, + 33.691593 + ], + [ + -117.878825, + 33.691656 + ], + [ + -117.878804, + 33.691677 + ], + [ + -117.87876, + 33.691678 + ], + [ + -117.878638, + 33.691658 + ], + [ + -117.878626, + 33.691676 + ], + [ + -117.878716, + 33.691744 + ], + [ + -117.8787, + 33.691758 + ], + [ + -117.878686, + 33.691782 + ], + [ + -117.878685, + 33.691803 + ], + [ + -117.878517, + 33.691944 + ], + [ + -117.878493, + 33.691936 + ], + [ + -117.87847, + 33.691938 + ], + [ + -117.878441, + 33.691921 + ], + [ + -117.878438, + 33.691887 + ], + [ + -117.878406, + 33.691875 + ], + [ + -117.878407, + 33.691848 + ], + [ + -117.878392, + 33.691834 + ], + [ + -117.878352, + 33.691826 + ], + [ + -117.878273, + 33.692071 + ], + [ + -117.878289, + 33.692093 + ], + [ + -117.878309, + 33.692104 + ], + [ + -117.878326, + 33.692104 + ], + [ + -117.878347, + 33.692091 + ], + [ + -117.878378, + 33.692089 + ], + [ + -117.878407, + 33.692091 + ], + [ + -117.878428, + 33.692135 + ], + [ + -117.878494, + 33.692166 + ], + [ + -117.878593, + 33.692085 + ], + [ + -117.878568, + 33.692062 + ], + [ + -117.8786, + 33.692036 + ], + [ + -117.878653, + 33.692012 + ], + [ + -117.878685, + 33.691979 + ], + [ + -117.878724, + 33.691914 + ], + [ + -117.878761, + 33.691884 + ], + [ + -117.878817, + 33.691861 + ], + [ + -117.878885, + 33.691827 + ], + [ + -117.878935, + 33.691781 + ], + [ + -117.878957, + 33.69175 + ], + [ + -117.878993, + 33.69169 + ], + [ + -117.879333, + 33.6914 + ], + [ + -117.87941, + 33.69134 + ], + [ + -117.879445, + 33.691329 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 129022549, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.923466, + 33.807991 + ], + [ + -117.923467, + 33.808014 + ], + [ + -117.923535, + 33.808012 + ], + [ + -117.923548, + 33.808008 + ], + [ + -117.923553, + 33.808003 + ], + [ + -117.923558, + 33.807999 + ], + [ + -117.923563, + 33.807989 + ], + [ + -117.923466, + 33.807991 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 129073487, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.915936, + 33.809193 + ], + [ + -117.915909, + 33.809193 + ], + [ + -117.915746, + 33.809056 + ], + [ + -117.91575, + 33.807355 + ], + [ + -117.915758, + 33.807292 + ], + [ + -117.915772, + 33.807243 + ], + [ + -117.915782, + 33.807209 + ], + [ + -117.915785, + 33.807191 + ], + [ + -117.915772, + 33.807162 + ], + [ + -117.91575, + 33.807138 + ], + [ + -117.915718, + 33.807125 + ], + [ + -117.915689, + 33.807116 + ], + [ + -117.915651, + 33.807105 + ], + [ + -117.9156, + 33.807093 + ], + [ + -117.9156, + 33.807074 + ], + [ + -117.915672, + 33.807056 + ], + [ + -117.915752, + 33.807032 + ], + [ + -117.915775, + 33.80704 + ], + [ + -117.915803, + 33.80705 + ], + [ + -117.915834, + 33.807067 + ], + [ + -117.915853, + 33.80709 + ], + [ + -117.915857, + 33.807107 + ], + [ + -117.915856, + 33.807139 + ], + [ + -117.915841, + 33.807169 + ], + [ + -117.915834, + 33.807195 + ], + [ + -117.915822, + 33.807228 + ], + [ + -117.915808, + 33.807285 + ], + [ + -117.9158, + 33.807338 + ], + [ + -117.915785, + 33.80895 + ], + [ + -117.91579, + 33.809004 + ], + [ + -117.915807, + 33.809063 + ], + [ + -117.915831, + 33.809099 + ], + [ + -117.915871, + 33.809132 + ], + [ + -117.915906, + 33.809157 + ], + [ + -117.915936, + 33.809173 + ], + [ + -117.915936, + 33.809193 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 130097850, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.881107, + 33.691212 + ], + [ + -117.881766, + 33.691218 + ], + [ + -117.881766, + 33.691197 + ], + [ + -117.882102, + 33.6912 + ], + [ + -117.882103, + 33.691122 + ], + [ + -117.882107, + 33.690906 + ], + [ + -117.881849, + 33.690907 + ], + [ + -117.881852, + 33.69064 + ], + [ + -117.881925, + 33.690641 + ], + [ + -117.881919, + 33.690333 + ], + [ + -117.881842, + 33.690333 + ], + [ + -117.881806, + 33.690325 + ], + [ + -117.881407, + 33.690324 + ], + [ + -117.881316, + 33.690301 + ], + [ + -117.881203, + 33.690299 + ], + [ + -117.881106, + 33.690374 + ], + [ + -117.881109, + 33.690967 + ], + [ + -117.88116, + 33.690993 + ], + [ + -117.881233, + 33.690993 + ], + [ + -117.881238, + 33.690411 + ], + [ + -117.881407, + 33.690414 + ], + [ + -117.881411, + 33.690438 + ], + [ + -117.881641, + 33.690436 + ], + [ + -117.881641, + 33.690712 + ], + [ + -117.881625, + 33.690712 + ], + [ + -117.881627, + 33.690848 + ], + [ + -117.881638, + 33.690847 + ], + [ + -117.881639, + 33.691114 + ], + [ + -117.881497, + 33.691115 + ], + [ + -117.881499, + 33.691136 + ], + [ + -117.881438, + 33.691136 + ], + [ + -117.881431, + 33.69117 + ], + [ + -117.881136, + 33.69117 + ], + [ + -117.881136, + 33.691145 + ], + [ + -117.881107, + 33.691147 + ], + [ + -117.881107, + 33.691212 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 132130202, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.645811, + 33.565701 + ], + [ + -117.645736, + 33.565062 + ], + [ + -117.645677, + 33.565004 + ], + [ + -117.645462, + 33.564995 + ], + [ + -117.64514, + 33.565129 + ], + [ + -117.644899, + 33.565299 + ], + [ + -117.64476, + 33.565598 + ], + [ + -117.644781, + 33.565849 + ], + [ + -117.645682, + 33.56579 + ], + [ + -117.645752, + 33.56579 + ], + [ + -117.645811, + 33.565701 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133721064, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.004671, + 33.737063 + ], + [ + -118.004649, + 33.736208 + ], + [ + -118.004572, + 33.736125 + ], + [ + -118.003366, + 33.736155 + ], + [ + -118.003371, + 33.736995 + ], + [ + -118.003683, + 33.737237 + ], + [ + -118.004653, + 33.737218 + ], + [ + -118.004671, + 33.737063 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133721128, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.945017, + 33.827265 + ], + [ + -117.944956, + 33.827337 + ], + [ + -117.944831, + 33.827412 + ], + [ + -117.944682, + 33.827454 + ], + [ + -117.944447, + 33.827469 + ], + [ + -117.944302, + 33.827471 + ], + [ + -117.944115, + 33.827431 + ], + [ + -117.943969, + 33.827401 + ], + [ + -117.943893, + 33.827361 + ], + [ + -117.943867, + 33.827327 + ], + [ + -117.944322, + 33.826794 + ], + [ + -117.944368, + 33.826764 + ], + [ + -117.944427, + 33.826766 + ], + [ + -117.944483, + 33.826792 + ], + [ + -117.945017, + 33.827265 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133721137, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.922061, + 33.84852 + ], + [ + -117.922083, + 33.847538 + ], + [ + -117.922021, + 33.847468 + ], + [ + -117.920866, + 33.84752 + ], + [ + -117.920794, + 33.847654 + ], + [ + -117.920785, + 33.847821 + ], + [ + -117.920776, + 33.848051 + ], + [ + -117.921891, + 33.848605 + ], + [ + -117.922061, + 33.84852 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133794954, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.88452, + 33.886948 + ], + [ + -117.884628, + 33.887317 + ], + [ + -117.884719, + 33.887429 + ], + [ + -117.885159, + 33.887665 + ], + [ + -117.885143, + 33.887709 + ], + [ + -117.885019, + 33.887758 + ], + [ + -117.884848, + 33.887914 + ], + [ + -117.884851, + 33.887941 + ], + [ + -117.884885, + 33.888181 + ], + [ + -117.88489, + 33.88822 + ], + [ + -117.884907, + 33.888337 + ], + [ + -117.884708, + 33.888475 + ], + [ + -117.884499, + 33.888618 + ], + [ + -117.884304, + 33.88868 + ], + [ + -117.884111, + 33.888711 + ], + [ + -117.883914, + 33.888693 + ], + [ + -117.881956, + 33.888186 + ], + [ + -117.881651, + 33.888039 + ], + [ + -117.88127, + 33.887638 + ], + [ + -117.881216, + 33.887424 + ], + [ + -117.881213, + 33.887034 + ], + [ + -117.8812, + 33.886694 + ], + [ + -117.881197, + 33.886531 + ], + [ + -117.881189, + 33.886322 + ], + [ + -117.882283, + 33.886306 + ], + [ + -117.882437, + 33.886188 + ], + [ + -117.882766, + 33.885665 + ], + [ + -117.882875, + 33.88537 + ], + [ + -117.882898, + 33.885103 + ], + [ + -117.882885, + 33.884958 + ], + [ + -117.882859, + 33.884817 + ], + [ + -117.88276, + 33.884514 + ], + [ + -117.88308, + 33.88443 + ], + [ + -117.88311, + 33.884404 + ], + [ + -117.883121, + 33.884375 + ], + [ + -117.883123, + 33.884203 + ], + [ + -117.883888, + 33.884204 + ], + [ + -117.883951, + 33.885601 + ], + [ + -117.88415, + 33.886026 + ], + [ + -117.884338, + 33.886449 + ], + [ + -117.884445, + 33.886778 + ], + [ + -117.88452, + 33.886948 + ] + ] + ] + }, + "properties": { + "name": "Fullerton Arboretum", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133794983, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.893077, + 33.884347 + ], + [ + -117.893612, + 33.884344 + ], + [ + -117.893696, + 33.884495 + ], + [ + -117.893621, + 33.884575 + ], + [ + -117.893611, + 33.884668 + ], + [ + -117.893642, + 33.884737 + ], + [ + -117.893735, + 33.884846 + ], + [ + -117.893943, + 33.885227 + ], + [ + -117.894003, + 33.885376 + ], + [ + -117.894017, + 33.885495 + ], + [ + -117.893952, + 33.885867 + ], + [ + -117.893923, + 33.886076 + ], + [ + -117.893879, + 33.886169 + ], + [ + -117.893819, + 33.886247 + ], + [ + -117.893735, + 33.886307 + ], + [ + -117.893643, + 33.88636 + ], + [ + -117.893546, + 33.88641 + ], + [ + -117.893351, + 33.886451 + ], + [ + -117.892596, + 33.886522 + ], + [ + -117.892141, + 33.88657 + ], + [ + -117.891915, + 33.886605 + ], + [ + -117.891714, + 33.886663 + ], + [ + -117.891412, + 33.886868 + ], + [ + -117.891341, + 33.886991 + ], + [ + -117.890852, + 33.887614 + ], + [ + -117.890794, + 33.887745 + ], + [ + -117.890763, + 33.887839 + ], + [ + -117.890266, + 33.88782 + ], + [ + -117.890141, + 33.887144 + ], + [ + -117.890448, + 33.887084 + ], + [ + -117.89055, + 33.887032 + ], + [ + -117.89062, + 33.886905 + ], + [ + -117.890671, + 33.886734 + ], + [ + -117.891154, + 33.886545 + ], + [ + -117.891795, + 33.886184 + ], + [ + -117.891924, + 33.88615 + ], + [ + -117.892913, + 33.886079 + ], + [ + -117.893243, + 33.885949 + ], + [ + -117.893445, + 33.885759 + ], + [ + -117.893519, + 33.885558 + ], + [ + -117.893533, + 33.88538 + ], + [ + -117.893437, + 33.885164 + ], + [ + -117.893273, + 33.884915 + ], + [ + -117.893163, + 33.884516 + ], + [ + -117.893077, + 33.884347 + ] + ] + ] + }, + "properties": { + "name": "Fullerton Creek Greenbelt", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133835884, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.914391, + 33.618207 + ], + [ + -117.915055, + 33.618365 + ], + [ + -117.914945, + 33.61884 + ], + [ + -117.914312, + 33.618698 + ], + [ + -117.914391, + 33.618207 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133835893, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.781779, + 33.665005 + ], + [ + -117.782298, + 33.664483 + ], + [ + -117.781919, + 33.664366 + ], + [ + -117.781475, + 33.664384 + ], + [ + -117.781201, + 33.664589 + ], + [ + -117.781779, + 33.665005 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133835916, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.980081, + 33.827398 + ], + [ + -117.980125, + 33.827402 + ], + [ + -117.980168, + 33.827393 + ], + [ + -117.980198, + 33.827374 + ], + [ + -117.980221, + 33.827346 + ], + [ + -117.98023, + 33.827313 + ], + [ + -117.980225, + 33.827277 + ], + [ + -117.980218, + 33.826923 + ], + [ + -117.980044, + 33.826927 + ], + [ + -117.979859, + 33.826957 + ], + [ + -117.979724, + 33.827034 + ], + [ + -117.979654, + 33.827153 + ], + [ + -117.979642, + 33.827287 + ], + [ + -117.979642, + 33.827403 + ], + [ + -117.980081, + 33.827398 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133835945, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.953583, + 33.848388 + ], + [ + -117.95299, + 33.848425 + ], + [ + -117.952891, + 33.848808 + ], + [ + -117.952878, + 33.849067 + ], + [ + -117.953657, + 33.849067 + ], + [ + -117.953583, + 33.848388 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133835989, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.987462, + 33.903276 + ], + [ + -117.987424, + 33.903233 + ], + [ + -117.986734, + 33.903247 + ], + [ + -117.986701, + 33.903436 + ], + [ + -117.986759, + 33.903596 + ], + [ + -117.986876, + 33.903702 + ], + [ + -117.987028, + 33.903776 + ], + [ + -117.987228, + 33.903835 + ], + [ + -117.987476, + 33.903828 + ], + [ + -117.987462, + 33.903276 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133836066, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.985491, + 33.903007 + ], + [ + -117.985596, + 33.902979 + ], + [ + -117.986237, + 33.903298 + ], + [ + -117.986057, + 33.903534 + ], + [ + -117.985939, + 33.903614 + ], + [ + -117.985795, + 33.903653 + ], + [ + -117.985659, + 33.903669 + ], + [ + -117.985523, + 33.903654 + ], + [ + -117.985382, + 33.903601 + ], + [ + -117.985173, + 33.903486 + ], + [ + -117.985491, + 33.903007 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133836113, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.61441, + 33.624376 + ], + [ + -117.614366, + 33.624367 + ], + [ + -117.614325, + 33.624377 + ], + [ + -117.613696, + 33.624664 + ], + [ + -117.61387, + 33.624944 + ], + [ + -117.613941, + 33.625019 + ], + [ + -117.61401, + 33.625063 + ], + [ + -117.614089, + 33.625092 + ], + [ + -117.614189, + 33.625111 + ], + [ + -117.614283, + 33.625112 + ], + [ + -117.614383, + 33.625098 + ], + [ + -117.614468, + 33.625072 + ], + [ + -117.614548, + 33.625028 + ], + [ + -117.614628, + 33.624959 + ], + [ + -117.614715, + 33.624825 + ], + [ + -117.614542, + 33.62453 + ], + [ + -117.614473, + 33.624422 + ], + [ + -117.614446, + 33.62439 + ], + [ + -117.61441, + 33.624376 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133836123, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.614334, + 33.624205 + ], + [ + -117.614351, + 33.624242 + ], + [ + -117.614352, + 33.624281 + ], + [ + -117.61434, + 33.62431 + ], + [ + -117.614313, + 33.624334 + ], + [ + -117.614271, + 33.624357 + ], + [ + -117.613672, + 33.624605 + ], + [ + -117.613627, + 33.624499 + ], + [ + -117.613607, + 33.624399 + ], + [ + -117.613598, + 33.624248 + ], + [ + -117.613608, + 33.624111 + ], + [ + -117.613636, + 33.624016 + ], + [ + -117.6137, + 33.623916 + ], + [ + -117.6138, + 33.623818 + ], + [ + -117.613895, + 33.623789 + ], + [ + -117.614035, + 33.623781 + ], + [ + -117.614092, + 33.623799 + ], + [ + -117.614334, + 33.624205 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133836169, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.978566, + 33.825984 + ], + [ + -117.978565, + 33.825951 + ], + [ + -117.978552, + 33.825918 + ], + [ + -117.978528, + 33.825892 + ], + [ + -117.978497, + 33.825871 + ], + [ + -117.978459, + 33.825859 + ], + [ + -117.978418, + 33.825857 + ], + [ + -117.977994, + 33.825836 + ], + [ + -117.977992, + 33.825971 + ], + [ + -117.978, + 33.826125 + ], + [ + -117.978093, + 33.826252 + ], + [ + -117.978261, + 33.826331 + ], + [ + -117.978472, + 33.826344 + ], + [ + -117.978617, + 33.82633 + ], + [ + -117.978566, + 33.825984 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133836216, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.988732, + 33.829441 + ], + [ + -117.988368, + 33.828729 + ], + [ + -117.987988, + 33.828729 + ], + [ + -117.987719, + 33.829069 + ], + [ + -117.987672, + 33.829528 + ], + [ + -117.987925, + 33.829671 + ], + [ + -117.988613, + 33.829686 + ], + [ + -117.988732, + 33.829441 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133836291, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.980096, + 33.826679 + ], + [ + -117.980135, + 33.826681 + ], + [ + -117.980171, + 33.826672 + ], + [ + -117.980199, + 33.826651 + ], + [ + -117.980219, + 33.826626 + ], + [ + -117.980228, + 33.826591 + ], + [ + -117.980222, + 33.826554 + ], + [ + -117.980217, + 33.82607 + ], + [ + -117.980011, + 33.826072 + ], + [ + -117.979821, + 33.826127 + ], + [ + -117.979673, + 33.826223 + ], + [ + -117.979567, + 33.826365 + ], + [ + -117.979524, + 33.82652 + ], + [ + -117.979522, + 33.826676 + ], + [ + -117.980096, + 33.826679 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133836345, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.032495, + 33.820809 + ], + [ + -118.03259, + 33.82103 + ], + [ + -118.032749, + 33.821087 + ], + [ + -118.033034, + 33.820992 + ], + [ + -118.033109, + 33.820771 + ], + [ + -118.033078, + 33.820638 + ], + [ + -118.032761, + 33.820505 + ], + [ + -118.032546, + 33.820505 + ], + [ + -118.032495, + 33.820809 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133836357, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.962427, + 33.842141 + ], + [ + -117.962237, + 33.843008 + ], + [ + -117.961819, + 33.843021 + ], + [ + -117.961414, + 33.842925 + ], + [ + -117.961206, + 33.84271 + ], + [ + -117.961073, + 33.842248 + ], + [ + -117.961161, + 33.842065 + ], + [ + -117.962212, + 33.841881 + ], + [ + -117.962402, + 33.841944 + ], + [ + -117.962427, + 33.842141 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950488, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.743514, + 33.744777 + ], + [ + -117.743689, + 33.744525 + ], + [ + -117.744166, + 33.744567 + ], + [ + -117.7445, + 33.744596 + ], + [ + -117.74445, + 33.744365 + ], + [ + -117.745115, + 33.742817 + ], + [ + -117.744764, + 33.742147 + ], + [ + -117.744325, + 33.74237 + ], + [ + -117.744192, + 33.742437 + ], + [ + -117.742082, + 33.743508 + ], + [ + -117.741725, + 33.7428 + ], + [ + -117.741842, + 33.742756 + ], + [ + -117.742237, + 33.74208 + ], + [ + -117.742958, + 33.740843 + ], + [ + -117.743403, + 33.740083 + ], + [ + -117.743515, + 33.740023 + ], + [ + -117.743706, + 33.739926 + ], + [ + -117.743778, + 33.739889 + ], + [ + -117.743911, + 33.739768 + ], + [ + -117.743936, + 33.739639 + ], + [ + -117.743863, + 33.739547 + ], + [ + -117.744876, + 33.739737 + ], + [ + -117.745094, + 33.73988 + ], + [ + -117.745127, + 33.740003 + ], + [ + -117.745139, + 33.740048 + ], + [ + -117.745144, + 33.740067 + ], + [ + -117.745288, + 33.740209 + ], + [ + -117.745413, + 33.740366 + ], + [ + -117.745774, + 33.740429 + ], + [ + -117.745818, + 33.740436 + ], + [ + -117.74597, + 33.740222 + ], + [ + -117.745991, + 33.740192 + ], + [ + -117.746272, + 33.739424 + ], + [ + -117.746521, + 33.738876 + ], + [ + -117.746529, + 33.738857 + ], + [ + -117.746582, + 33.738659 + ], + [ + -117.746591, + 33.738626 + ], + [ + -117.746782, + 33.738386 + ], + [ + -117.746821, + 33.738337 + ], + [ + -117.747047, + 33.73823 + ], + [ + -117.747103, + 33.738203 + ], + [ + -117.747242, + 33.738053 + ], + [ + -117.747467, + 33.738084 + ], + [ + -117.74774, + 33.737959 + ], + [ + -117.748158, + 33.738116 + ], + [ + -117.749172, + 33.738705 + ], + [ + -117.749231, + 33.73874 + ], + [ + -117.748896, + 33.73892 + ], + [ + -117.748313, + 33.739249 + ], + [ + -117.747506, + 33.740091 + ], + [ + -117.747714, + 33.740762 + ], + [ + -117.747971, + 33.740786 + ], + [ + -117.748054, + 33.740803 + ], + [ + -117.748137, + 33.740821 + ], + [ + -117.748266, + 33.740854 + ], + [ + -117.748299, + 33.740979 + ], + [ + -117.74691, + 33.742993 + ], + [ + -117.747309, + 33.743898 + ], + [ + -117.747754, + 33.744541 + ], + [ + -117.747847, + 33.745161 + ], + [ + -117.74764, + 33.745281 + ], + [ + -117.747495, + 33.745185 + ], + [ + -117.747352, + 33.745012 + ], + [ + -117.747191, + 33.744823 + ], + [ + -117.747043, + 33.74479 + ], + [ + -117.746987, + 33.744592 + ], + [ + -117.746854, + 33.744128 + ], + [ + -117.746808, + 33.743965 + ], + [ + -117.746416, + 33.743539 + ], + [ + -117.746359, + 33.743477 + ], + [ + -117.745653, + 33.742921 + ], + [ + -117.745509, + 33.743138 + ], + [ + -117.745455, + 33.743445 + ], + [ + -117.745427, + 33.743608 + ], + [ + -117.745434, + 33.743752 + ], + [ + -117.745666, + 33.743699 + ], + [ + -117.745769, + 33.74372 + ], + [ + -117.745878, + 33.743798 + ], + [ + -117.745893, + 33.743809 + ], + [ + -117.746016, + 33.743917 + ], + [ + -117.746039, + 33.743937 + ], + [ + -117.746044, + 33.743946 + ], + [ + -117.746127, + 33.744093 + ], + [ + -117.746263, + 33.744163 + ], + [ + -117.746348, + 33.744199 + ], + [ + -117.746524, + 33.744274 + ], + [ + -117.746727, + 33.744422 + ], + [ + -117.746728, + 33.744484 + ], + [ + -117.74673, + 33.74475 + ], + [ + -117.746544, + 33.744804 + ], + [ + -117.746312, + 33.744866 + ], + [ + -117.746126, + 33.74493 + ], + [ + -117.74603, + 33.745063 + ], + [ + -117.745945, + 33.745215 + ], + [ + -117.745793, + 33.745384 + ], + [ + -117.745667, + 33.745296 + ], + [ + -117.745659, + 33.745152 + ], + [ + -117.745549, + 33.744986 + ], + [ + -117.745495, + 33.744869 + ], + [ + -117.745524, + 33.744639 + ], + [ + -117.745506, + 33.744456 + ], + [ + -117.745374, + 33.744193 + ], + [ + -117.745365, + 33.744174 + ], + [ + -117.745181, + 33.744584 + ], + [ + -117.745027, + 33.744735 + ], + [ + -117.74501, + 33.744927 + ], + [ + -117.745011, + 33.744973 + ], + [ + -117.745015, + 33.745139 + ], + [ + -117.745012, + 33.745244 + ], + [ + -117.745066, + 33.745361 + ], + [ + -117.745282, + 33.745452 + ], + [ + -117.745534, + 33.745515 + ], + [ + -117.745705, + 33.745576 + ], + [ + -117.745706, + 33.745577 + ], + [ + -117.745692, + 33.745614 + ], + [ + -117.745711, + 33.745768 + ], + [ + -117.745993, + 33.745947 + ], + [ + -117.74639, + 33.746176 + ], + [ + -117.746537, + 33.746266 + ], + [ + -117.746649, + 33.746383 + ], + [ + -117.746736, + 33.746549 + ], + [ + -117.746936, + 33.746793 + ], + [ + -117.747071, + 33.746892 + ], + [ + -117.747263, + 33.74704 + ], + [ + -117.747317, + 33.747157 + ], + [ + -117.747119, + 33.747239 + ], + [ + -117.746912, + 33.747245 + ], + [ + -117.746693, + 33.74724 + ], + [ + -117.746452, + 33.747236 + ], + [ + -117.746455, + 33.74712 + ], + [ + -117.746458, + 33.747005 + ], + [ + -117.746381, + 33.746888 + ], + [ + -117.7462, + 33.746769 + ], + [ + -117.745824, + 33.746646 + ], + [ + -117.745358, + 33.746444 + ], + [ + -117.745175, + 33.746368 + ], + [ + -117.745016, + 33.746303 + ], + [ + -117.744823, + 33.746212 + ], + [ + -117.74469, + 33.746046 + ], + [ + -117.744551, + 33.745688 + ], + [ + -117.744444, + 33.745397 + ], + [ + -117.743989, + 33.745225 + ], + [ + -117.743859, + 33.745102 + ], + [ + -117.743514, + 33.744777 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950498, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.755227, + 33.669424 + ], + [ + -117.754983, + 33.668673 + ], + [ + -117.755569, + 33.669086 + ], + [ + -117.756613, + 33.668019 + ], + [ + -117.756718, + 33.668011 + ], + [ + -117.757419, + 33.668499 + ], + [ + -117.757693, + 33.668685 + ], + [ + -117.75782, + 33.668754 + ], + [ + -117.75796, + 33.668815 + ], + [ + -117.758236, + 33.6689 + ], + [ + -117.7584, + 33.668933 + ], + [ + -117.758579, + 33.668954 + ], + [ + -117.759405, + 33.668972 + ], + [ + -117.759459, + 33.669014 + ], + [ + -117.759789, + 33.669012 + ], + [ + -117.759793, + 33.668726 + ], + [ + -117.759822, + 33.668486 + ], + [ + -117.759873, + 33.668182 + ], + [ + -117.760003, + 33.667706 + ], + [ + -117.760306, + 33.667 + ], + [ + -117.760347, + 33.66695 + ], + [ + -117.761791, + 33.667961 + ], + [ + -117.761754, + 33.668044 + ], + [ + -117.759622, + 33.670159 + ], + [ + -117.759887, + 33.67083 + ], + [ + -117.76002, + 33.671151 + ], + [ + -117.760384, + 33.67171 + ], + [ + -117.760784, + 33.672143 + ], + [ + -117.761206, + 33.672551 + ], + [ + -117.761489, + 33.67279 + ], + [ + -117.762144, + 33.67326 + ], + [ + -117.762145, + 33.673393 + ], + [ + -117.759783, + 33.67575 + ], + [ + -117.756247, + 33.673295 + ], + [ + -117.755561, + 33.670262 + ], + [ + -117.755227, + 33.669424 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950527, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.033655, + 33.710365 + ], + [ + -118.038926, + 33.707991 + ], + [ + -118.039626, + 33.708562 + ], + [ + -118.039486, + 33.708687 + ], + [ + -118.039208, + 33.708886 + ], + [ + -118.039005, + 33.709111 + ], + [ + -118.038966, + 33.709218 + ], + [ + -118.038923, + 33.709338 + ], + [ + -118.038851, + 33.709807 + ], + [ + -118.038709, + 33.710008 + ], + [ + -118.038594, + 33.710336 + ], + [ + -118.038588, + 33.71059 + ], + [ + -118.038614, + 33.710756 + ], + [ + -118.038748, + 33.710898 + ], + [ + -118.038841, + 33.711004 + ], + [ + -118.038895, + 33.711066 + ], + [ + -118.038747, + 33.711258 + ], + [ + -118.038739, + 33.711269 + ], + [ + -118.038519, + 33.711555 + ], + [ + -118.038454, + 33.711719 + ], + [ + -118.037944, + 33.71172 + ], + [ + -118.0328, + 33.711735 + ], + [ + -118.032825, + 33.710757 + ], + [ + -118.033213, + 33.710574 + ], + [ + -118.033655, + 33.710365 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950536, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.706261, + 33.65587 + ], + [ + -117.70674, + 33.655294 + ], + [ + -117.706777, + 33.655296 + ], + [ + -117.706828, + 33.655512 + ], + [ + -117.706884, + 33.65558 + ], + [ + -117.706985, + 33.655667 + ], + [ + -117.707197, + 33.65576 + ], + [ + -117.707414, + 33.655794 + ], + [ + -117.707601, + 33.655786 + ], + [ + -117.707817, + 33.655759 + ], + [ + -117.707988, + 33.655704 + ], + [ + -117.708154, + 33.655579 + ], + [ + -117.708218, + 33.65538 + ], + [ + -117.708271, + 33.655139 + ], + [ + -117.708441, + 33.654969 + ], + [ + -117.708646, + 33.654784 + ], + [ + -117.70884, + 33.654593 + ], + [ + -117.710147, + 33.655522 + ], + [ + -117.71017, + 33.655758 + ], + [ + -117.710206, + 33.656067 + ], + [ + -117.709386, + 33.656918 + ], + [ + -117.709374, + 33.656983 + ], + [ + -117.709435, + 33.657075 + ], + [ + -117.710189, + 33.657798 + ], + [ + -117.709958, + 33.659424 + ], + [ + -117.709836, + 33.659387 + ], + [ + -117.706457, + 33.656995 + ], + [ + -117.706615, + 33.656863 + ], + [ + -117.706635, + 33.656804 + ], + [ + -117.706615, + 33.656729 + ], + [ + -117.705984, + 33.656286 + ], + [ + -117.706261, + 33.65587 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950567, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.759426, + 33.761621 + ], + [ + -117.759571, + 33.760779 + ], + [ + -117.759881, + 33.760087 + ], + [ + -117.76026, + 33.759573 + ], + [ + -117.760422, + 33.759409 + ], + [ + -117.760528, + 33.759068 + ], + [ + -117.760088, + 33.759211 + ], + [ + -117.759837, + 33.759085 + ], + [ + -117.759687, + 33.758784 + ], + [ + -117.759517, + 33.758866 + ], + [ + -117.759274, + 33.759064 + ], + [ + -117.759241, + 33.759206 + ], + [ + -117.759236, + 33.759386 + ], + [ + -117.759231, + 33.759577 + ], + [ + -117.759112, + 33.759718 + ], + [ + -117.758896, + 33.759797 + ], + [ + -117.758636, + 33.759864 + ], + [ + -117.758438, + 33.759812 + ], + [ + -117.758325, + 33.75975 + ], + [ + -117.758261, + 33.759698 + ], + [ + -117.75813, + 33.759591 + ], + [ + -117.757965, + 33.759349 + ], + [ + -117.75773, + 33.759057 + ], + [ + -117.757819, + 33.758963 + ], + [ + -117.758067, + 33.758777 + ], + [ + -117.758172, + 33.758612 + ], + [ + -117.758264, + 33.758375 + ], + [ + -117.75827, + 33.758172 + ], + [ + -117.758316, + 33.758041 + ], + [ + -117.758379, + 33.757852 + ], + [ + -117.758469, + 33.75771 + ], + [ + -117.758418, + 33.75747 + ], + [ + -117.758424, + 33.757267 + ], + [ + -117.758388, + 33.756982 + ], + [ + -117.758377, + 33.756896 + ], + [ + -117.758385, + 33.756633 + ], + [ + -117.758593, + 33.756351 + ], + [ + -117.758672, + 33.75609 + ], + [ + -117.758679, + 33.755851 + ], + [ + -117.758612, + 33.755658 + ], + [ + -117.758444, + 33.755547 + ], + [ + -117.758199, + 33.755614 + ], + [ + -117.758021, + 33.755838 + ], + [ + -117.757757, + 33.756071 + ], + [ + -117.757711, + 33.756214 + ], + [ + -117.757866, + 33.756289 + ], + [ + -117.757977, + 33.756398 + ], + [ + -117.758028, + 33.756626 + ], + [ + -117.758023, + 33.756805 + ], + [ + -117.757891, + 33.756898 + ], + [ + -117.757694, + 33.756811 + ], + [ + -117.757528, + 33.756604 + ], + [ + -117.757387, + 33.756518 + ], + [ + -117.7572, + 33.756562 + ], + [ + -117.757036, + 33.756798 + ], + [ + -117.756917, + 33.756999 + ], + [ + -117.756712, + 33.757162 + ], + [ + -117.756462, + 33.757384 + ], + [ + -117.756253, + 33.7572 + ], + [ + -117.756257, + 33.757069 + ], + [ + -117.756258, + 33.757021 + ], + [ + -117.756279, + 33.756783 + ], + [ + -117.756255, + 33.756639 + ], + [ + -117.755832, + 33.756108 + ], + [ + -117.755675, + 33.755911 + ], + [ + -117.755651, + 33.755743 + ], + [ + -117.75549, + 33.75537 + ], + [ + -117.755406, + 33.755386 + ], + [ + -117.755318, + 33.755402 + ], + [ + -117.754706, + 33.755808 + ], + [ + -117.754743, + 33.756012 + ], + [ + -117.75498, + 33.756231 + ], + [ + -117.755136, + 33.756282 + ], + [ + -117.755309, + 33.756226 + ], + [ + -117.7555, + 33.756529 + ], + [ + -117.755497, + 33.75666 + ], + [ + -117.755352, + 33.756729 + ], + [ + -117.755685, + 33.757133 + ], + [ + -117.756001, + 33.757518 + ], + [ + -117.756081, + 33.757722 + ], + [ + -117.756063, + 33.757842 + ], + [ + -117.756249, + 33.758068 + ], + [ + -117.756989, + 33.758971 + ], + [ + -117.757071, + 33.759104 + ], + [ + -117.756953, + 33.759233 + ], + [ + -117.756835, + 33.759374 + ], + [ + -117.75666, + 33.759478 + ], + [ + -117.756472, + 33.759582 + ], + [ + -117.756268, + 33.759697 + ], + [ + -117.756093, + 33.759825 + ], + [ + -117.756087, + 33.760052 + ], + [ + -117.756123, + 33.760292 + ], + [ + -117.756089, + 33.76047 + ], + [ + -117.75596, + 33.760503 + ], + [ + -117.755602, + 33.760496 + ], + [ + -117.755336, + 33.760324 + ], + [ + -117.755153, + 33.760225 + ], + [ + -117.755041, + 33.760139 + ], + [ + -117.754886, + 33.760064 + ], + [ + -117.754858, + 33.760055 + ], + [ + -117.754659, + 33.759988 + ], + [ + -117.754543, + 33.759958 + ], + [ + -117.754361, + 33.75991 + ], + [ + -117.754292, + 33.759813 + ], + [ + -117.754226, + 33.759621 + ], + [ + -117.754272, + 33.759526 + ], + [ + -117.754362, + 33.759361 + ], + [ + -117.754163, + 33.759333 + ], + [ + -117.753818, + 33.759386 + ], + [ + -117.753572, + 33.75943 + ], + [ + -117.753158, + 33.759488 + ], + [ + -117.753708, + 33.759126 + ], + [ + -117.754083, + 33.758708 + ], + [ + -117.754019, + 33.758403 + ], + [ + -117.753944, + 33.758387 + ], + [ + -117.75355, + 33.758303 + ], + [ + -117.753044, + 33.758202 + ], + [ + -117.752941, + 33.758018 + ], + [ + -117.753102, + 33.757444 + ], + [ + -117.752782, + 33.757195 + ], + [ + -117.752446, + 33.757522 + ], + [ + -117.752112, + 33.757789 + ], + [ + -117.751724, + 33.757386 + ], + [ + -117.751745, + 33.756658 + ], + [ + -117.752057, + 33.755906 + ], + [ + -117.751648, + 33.756231 + ], + [ + -117.751231, + 33.756861 + ], + [ + -117.750724, + 33.75679 + ], + [ + -117.750225, + 33.756476 + ], + [ + -117.749704, + 33.756921 + ], + [ + -117.749951, + 33.757169 + ], + [ + -117.75005, + 33.757345 + ], + [ + -117.749859, + 33.757389 + ], + [ + -117.749572, + 33.757415 + ], + [ + -117.749171, + 33.757455 + ], + [ + -117.749078, + 33.757358 + ], + [ + -117.749059, + 33.757299 + ], + [ + -117.748973, + 33.757037 + ], + [ + -117.748978, + 33.756846 + ], + [ + -117.748913, + 33.756822 + ], + [ + -117.748752, + 33.756762 + ], + [ + -117.748308, + 33.756944 + ], + [ + -117.747977, + 33.757193 + ], + [ + -117.747767, + 33.757463 + ], + [ + -117.747701, + 33.757155 + ], + [ + -117.747636, + 33.75685 + ], + [ + -117.747346, + 33.756844 + ], + [ + -117.747302, + 33.756836 + ], + [ + -117.747137, + 33.756808 + ], + [ + -117.747442, + 33.756676 + ], + [ + -117.747497, + 33.756642 + ], + [ + -117.747621, + 33.75631 + ], + [ + -117.747684, + 33.756104 + ], + [ + -117.747648, + 33.756067 + ], + [ + -117.747444, + 33.75586 + ], + [ + -117.747065, + 33.755773 + ], + [ + -117.746871, + 33.755212 + ], + [ + -117.747287, + 33.755315 + ], + [ + -117.747519, + 33.755209 + ], + [ + -117.747507, + 33.754985 + ], + [ + -117.747438, + 33.754729 + ], + [ + -117.747213, + 33.754597 + ], + [ + -117.746702, + 33.754475 + ], + [ + -117.746614, + 33.754187 + ], + [ + -117.747387, + 33.753836 + ], + [ + -117.747658, + 33.753666 + ], + [ + -117.747666, + 33.753396 + ], + [ + -117.747618, + 33.753076 + ], + [ + -117.747451, + 33.75293 + ], + [ + -117.746382, + 33.752871 + ], + [ + -117.746014, + 33.752035 + ], + [ + -117.745927, + 33.751838 + ], + [ + -117.746912, + 33.751568 + ], + [ + -117.7471, + 33.751516 + ], + [ + -117.746939, + 33.751335 + ], + [ + -117.74657, + 33.75094 + ], + [ + -117.74665, + 33.750668 + ], + [ + -117.747172, + 33.750678 + ], + [ + -117.747362, + 33.750698 + ], + [ + -117.747549, + 33.750797 + ], + [ + -117.747725, + 33.750657 + ], + [ + -117.747922, + 33.750438 + ], + [ + -117.748075, + 33.750425 + ], + [ + -117.748269, + 33.750286 + ], + [ + -117.748197, + 33.750125 + ], + [ + -117.747783, + 33.749942 + ], + [ + -117.74748, + 33.749888 + ], + [ + -117.747331, + 33.749774 + ], + [ + -117.747429, + 33.749664 + ], + [ + -117.747623, + 33.749556 + ], + [ + -117.74789, + 33.74953 + ], + [ + -117.748161, + 33.749376 + ], + [ + -117.748377, + 33.749157 + ], + [ + -117.748694, + 33.748734 + ], + [ + -117.748832, + 33.748593 + ], + [ + -117.749329, + 33.748539 + ], + [ + -117.749404, + 33.748556 + ], + [ + -117.74938, + 33.748763 + ], + [ + -117.749277, + 33.749016 + ], + [ + -117.749233, + 33.749222 + ], + [ + -117.749247, + 33.749398 + ], + [ + -117.749147, + 33.749571 + ], + [ + -117.748948, + 33.749854 + ], + [ + -117.748885, + 33.750075 + ], + [ + -117.748975, + 33.750252 + ], + [ + -117.749222, + 33.750273 + ], + [ + -117.749432, + 33.750261 + ], + [ + -117.749589, + 33.750294 + ], + [ + -117.749944, + 33.750367 + ], + [ + -117.75017, + 33.750435 + ], + [ + -117.750847, + 33.750783 + ], + [ + -117.751144, + 33.75106 + ], + [ + -117.751347, + 33.751271 + ], + [ + -117.751643, + 33.751611 + ], + [ + -117.751864, + 33.751855 + ], + [ + -117.752122, + 33.752178 + ], + [ + -117.752375, + 33.752544 + ], + [ + -117.752378, + 33.75255 + ], + [ + -117.752483, + 33.752749 + ], + [ + -117.752505, + 33.752791 + ], + [ + -117.752956, + 33.753023 + ], + [ + -117.752976, + 33.75292 + ], + [ + -117.753, + 33.752801 + ], + [ + -117.753026, + 33.752562 + ], + [ + -117.753274, + 33.752551 + ], + [ + -117.753598, + 33.752558 + ], + [ + -117.753849, + 33.752451 + ], + [ + -117.75416, + 33.752203 + ], + [ + -117.754481, + 33.751539 + ], + [ + -117.754514, + 33.75141 + ], + [ + -117.754537, + 33.751193 + ], + [ + -117.7545, + 33.750967 + ], + [ + -117.754464, + 33.750833 + ], + [ + -117.754414, + 33.750647 + ], + [ + -117.754422, + 33.75036 + ], + [ + -117.754692, + 33.750052 + ], + [ + -117.754738, + 33.750001 + ], + [ + -117.754954, + 33.749766 + ], + [ + -117.755208, + 33.749532 + ], + [ + -117.755433, + 33.749371 + ], + [ + -117.755668, + 33.749296 + ], + [ + -117.755983, + 33.749249 + ], + [ + -117.756093, + 33.749221 + ], + [ + -117.755551, + 33.750223 + ], + [ + -117.755485, + 33.750509 + ], + [ + -117.755369, + 33.750586 + ], + [ + -117.755232, + 33.750711 + ], + [ + -117.755054, + 33.75093 + ], + [ + -117.754949, + 33.751278 + ], + [ + -117.754822, + 33.751722 + ], + [ + -117.754755, + 33.752055 + ], + [ + -117.754614, + 33.752355 + ], + [ + -117.754512, + 33.75256 + ], + [ + -117.754181, + 33.752808 + ], + [ + -117.753675, + 33.75318 + ], + [ + -117.753364, + 33.753413 + ], + [ + -117.75326, + 33.75358 + ], + [ + -117.753241, + 33.753747 + ], + [ + -117.753207, + 33.753962 + ], + [ + -117.753201, + 33.754165 + ], + [ + -117.75324, + 33.754297 + ], + [ + -117.753336, + 33.754442 + ], + [ + -117.753614, + 33.75471 + ], + [ + -117.753738, + 33.754868 + ], + [ + -117.753987, + 33.75516 + ], + [ + -117.754029, + 33.755266 + ], + [ + -117.754054, + 33.755328 + ], + [ + -117.754238, + 33.755403 + ], + [ + -117.754336, + 33.755477 + ], + [ + -117.754523, + 33.755421 + ], + [ + -117.754641, + 33.75528 + ], + [ + -117.754646, + 33.755101 + ], + [ + -117.754779, + 33.754972 + ], + [ + -117.754922, + 33.754975 + ], + [ + -117.755122, + 33.754955 + ], + [ + -117.755265, + 33.754958 + ], + [ + -117.755438, + 33.754926 + ], + [ + -117.755496, + 33.754883 + ], + [ + -117.755613, + 33.754798 + ], + [ + -117.755749, + 33.754526 + ], + [ + -117.755755, + 33.754323 + ], + [ + -117.755718, + 33.754119 + ], + [ + -117.755664, + 33.753998 + ], + [ + -117.755752, + 33.753936 + ], + [ + -117.755795, + 33.753905 + ], + [ + -117.756027, + 33.753802 + ], + [ + -117.756203, + 33.753639 + ], + [ + -117.756404, + 33.753468 + ], + [ + -117.756437, + 33.75344 + ], + [ + -117.756608, + 33.753456 + ], + [ + -117.756658, + 33.753462 + ], + [ + -117.756808, + 33.753483 + ], + [ + -117.756868, + 33.753458 + ], + [ + -117.757155, + 33.753335 + ], + [ + -117.757401, + 33.753244 + ], + [ + -117.757453, + 33.753376 + ], + [ + -117.757467, + 33.753413 + ], + [ + -117.757145, + 33.753693 + ], + [ + -117.757957, + 33.7543 + ], + [ + -117.758475, + 33.754687 + ], + [ + -117.758971, + 33.755155 + ], + [ + -117.759031, + 33.755212 + ], + [ + -117.759153, + 33.755453 + ], + [ + -117.759246, + 33.75573 + ], + [ + -117.759239, + 33.755968 + ], + [ + -117.759249, + 33.756124 + ], + [ + -117.759317, + 33.756245 + ], + [ + -117.759431, + 33.756259 + ], + [ + -117.759631, + 33.756263 + ], + [ + -117.759892, + 33.756113 + ], + [ + -117.760587, + 33.756582 + ], + [ + -117.761168, + 33.756974 + ], + [ + -117.761341, + 33.75693 + ], + [ + -117.762124, + 33.756025 + ], + [ + -117.762245, + 33.755801 + ], + [ + -117.762206, + 33.755669 + ], + [ + -117.762095, + 33.755535 + ], + [ + -117.762142, + 33.755417 + ], + [ + -117.762866, + 33.754583 + ], + [ + -117.763308, + 33.754114 + ], + [ + -117.763248, + 33.754704 + ], + [ + -117.762925, + 33.755504 + ], + [ + -117.762839, + 33.755884 + ], + [ + -117.761793, + 33.757643 + ], + [ + -117.761311, + 33.758518 + ], + [ + -117.761011, + 33.75899 + ], + [ + -117.760771, + 33.759391 + ], + [ + -117.760517, + 33.759804 + ], + [ + -117.760293, + 33.760146 + ], + [ + -117.760066, + 33.760572 + ], + [ + -117.759812, + 33.760961 + ], + [ + -117.75957, + 33.76161 + ], + [ + -117.759426, + 33.761621 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950574, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.741307, + 33.74769 + ], + [ + -117.742006, + 33.747403 + ], + [ + -117.742437, + 33.747522 + ], + [ + -117.742481, + 33.747534 + ], + [ + -117.742566, + 33.747347 + ], + [ + -117.742667, + 33.747349 + ], + [ + -117.742757, + 33.747263 + ], + [ + -117.742884, + 33.747119 + ], + [ + -117.742895, + 33.747067 + ], + [ + -117.742925, + 33.746929 + ], + [ + -117.742932, + 33.746665 + ], + [ + -117.742939, + 33.746445 + ], + [ + -117.742946, + 33.7462 + ], + [ + -117.743015, + 33.746154 + ], + [ + -117.743119, + 33.746084 + ], + [ + -117.743168, + 33.746035 + ], + [ + -117.743193, + 33.74601 + ], + [ + -117.743201, + 33.746012 + ], + [ + -117.743311, + 33.746034 + ], + [ + -117.743458, + 33.746007 + ], + [ + -117.743532, + 33.745978 + ], + [ + -117.743704, + 33.745706 + ], + [ + -117.743703, + 33.745636 + ], + [ + -117.743702, + 33.745509 + ], + [ + -117.743775, + 33.745436 + ], + [ + -117.743989, + 33.745225 + ], + [ + -117.744444, + 33.745397 + ], + [ + -117.744551, + 33.745688 + ], + [ + -117.74469, + 33.746046 + ], + [ + -117.744823, + 33.746212 + ], + [ + -117.745016, + 33.746303 + ], + [ + -117.745175, + 33.746368 + ], + [ + -117.745358, + 33.746444 + ], + [ + -117.745824, + 33.746646 + ], + [ + -117.7462, + 33.746769 + ], + [ + -117.746381, + 33.746888 + ], + [ + -117.746458, + 33.747005 + ], + [ + -117.746455, + 33.74712 + ], + [ + -117.746452, + 33.747236 + ], + [ + -117.746693, + 33.74724 + ], + [ + -117.746912, + 33.747245 + ], + [ + -117.747119, + 33.747239 + ], + [ + -117.747317, + 33.747157 + ], + [ + -117.747263, + 33.74704 + ], + [ + -117.747071, + 33.746892 + ], + [ + -117.746936, + 33.746793 + ], + [ + -117.746736, + 33.746549 + ], + [ + -117.746649, + 33.746383 + ], + [ + -117.746537, + 33.746266 + ], + [ + -117.74639, + 33.746176 + ], + [ + -117.745993, + 33.745947 + ], + [ + -117.745711, + 33.745768 + ], + [ + -117.745692, + 33.745614 + ], + [ + -117.745706, + 33.745577 + ], + [ + -117.745705, + 33.745576 + ], + [ + -117.745534, + 33.745515 + ], + [ + -117.745282, + 33.745452 + ], + [ + -117.745066, + 33.745361 + ], + [ + -117.745012, + 33.745244 + ], + [ + -117.745015, + 33.745139 + ], + [ + -117.745011, + 33.744973 + ], + [ + -117.74501, + 33.744927 + ], + [ + -117.745027, + 33.744735 + ], + [ + -117.745181, + 33.744584 + ], + [ + -117.745365, + 33.744174 + ], + [ + -117.745374, + 33.744193 + ], + [ + -117.745506, + 33.744456 + ], + [ + -117.745524, + 33.744639 + ], + [ + -117.745495, + 33.744869 + ], + [ + -117.745549, + 33.744986 + ], + [ + -117.745659, + 33.745152 + ], + [ + -117.745667, + 33.745296 + ], + [ + -117.745793, + 33.745384 + ], + [ + -117.745945, + 33.745215 + ], + [ + -117.74603, + 33.745063 + ], + [ + -117.746126, + 33.74493 + ], + [ + -117.746312, + 33.744866 + ], + [ + -117.746544, + 33.744804 + ], + [ + -117.74673, + 33.74475 + ], + [ + -117.746728, + 33.744484 + ], + [ + -117.746727, + 33.744422 + ], + [ + -117.746524, + 33.744274 + ], + [ + -117.746348, + 33.744199 + ], + [ + -117.746263, + 33.744163 + ], + [ + -117.746127, + 33.744093 + ], + [ + -117.746044, + 33.743946 + ], + [ + -117.746039, + 33.743937 + ], + [ + -117.746016, + 33.743917 + ], + [ + -117.745893, + 33.743809 + ], + [ + -117.745878, + 33.743798 + ], + [ + -117.745769, + 33.74372 + ], + [ + -117.745666, + 33.743699 + ], + [ + -117.745434, + 33.743752 + ], + [ + -117.745427, + 33.743608 + ], + [ + -117.745455, + 33.743445 + ], + [ + -117.745509, + 33.743138 + ], + [ + -117.745653, + 33.742921 + ], + [ + -117.746359, + 33.743477 + ], + [ + -117.746416, + 33.743539 + ], + [ + -117.746808, + 33.743965 + ], + [ + -117.746854, + 33.744128 + ], + [ + -117.746987, + 33.744592 + ], + [ + -117.747043, + 33.74479 + ], + [ + -117.747191, + 33.744823 + ], + [ + -117.747352, + 33.745012 + ], + [ + -117.747495, + 33.745185 + ], + [ + -117.74764, + 33.745281 + ], + [ + -117.747847, + 33.745161 + ], + [ + -117.747754, + 33.744541 + ], + [ + -117.747309, + 33.743898 + ], + [ + -117.74691, + 33.742993 + ], + [ + -117.748299, + 33.740979 + ], + [ + -117.748266, + 33.740854 + ], + [ + -117.748137, + 33.740821 + ], + [ + -117.748054, + 33.740803 + ], + [ + -117.747971, + 33.740786 + ], + [ + -117.747714, + 33.740762 + ], + [ + -117.747506, + 33.740091 + ], + [ + -117.748313, + 33.739249 + ], + [ + -117.748896, + 33.73892 + ], + [ + -117.749231, + 33.73874 + ], + [ + -117.749172, + 33.738705 + ], + [ + -117.748158, + 33.738116 + ], + [ + -117.74774, + 33.737959 + ], + [ + -117.747554, + 33.737865 + ], + [ + -117.747386, + 33.737825 + ], + [ + -117.747232, + 33.737837 + ], + [ + -117.747075, + 33.737863 + ], + [ + -117.74688, + 33.737897 + ], + [ + -117.746757, + 33.73787 + ], + [ + -117.746466, + 33.737694 + ], + [ + -117.745165, + 33.736889 + ], + [ + -117.745686, + 33.736428 + ], + [ + -117.745865, + 33.736436 + ], + [ + -117.746191, + 33.736758 + ], + [ + -117.746476, + 33.736981 + ], + [ + -117.746816, + 33.737202 + ], + [ + -117.747148, + 33.737371 + ], + [ + -117.747466, + 33.737502 + ], + [ + -117.74829, + 33.737737 + ], + [ + -117.749026, + 33.737937 + ], + [ + -117.749872, + 33.738153 + ], + [ + -117.750248, + 33.738259 + ], + [ + -117.750582, + 33.73838 + ], + [ + -117.751126, + 33.738638 + ], + [ + -117.751261, + 33.738723 + ], + [ + -117.751397, + 33.738822 + ], + [ + -117.751915, + 33.739253 + ], + [ + -117.752164, + 33.739434 + ], + [ + -117.752464, + 33.739607 + ], + [ + -117.752709, + 33.73973 + ], + [ + -117.753045, + 33.739864 + ], + [ + -117.753302, + 33.739942 + ], + [ + -117.753581, + 33.74001 + ], + [ + -117.753804, + 33.740054 + ], + [ + -117.753859, + 33.740099 + ], + [ + -117.753841, + 33.740271 + ], + [ + -117.753828, + 33.740474 + ], + [ + -117.75383, + 33.740582 + ], + [ + -117.753849, + 33.740689 + ], + [ + -117.753905, + 33.740898 + ], + [ + -117.753983, + 33.741118 + ], + [ + -117.754053, + 33.741278 + ], + [ + -117.754145, + 33.741431 + ], + [ + -117.754299, + 33.74167 + ], + [ + -117.75451, + 33.741911 + ], + [ + -117.754734, + 33.742142 + ], + [ + -117.754837, + 33.742218 + ], + [ + -117.754968, + 33.742303 + ], + [ + -117.755136, + 33.742385 + ], + [ + -117.755228, + 33.742429 + ], + [ + -117.755275, + 33.742451 + ], + [ + -117.755323, + 33.742481 + ], + [ + -117.755382, + 33.742525 + ], + [ + -117.755501, + 33.742651 + ], + [ + -117.755694, + 33.742863 + ], + [ + -117.755882, + 33.743015 + ], + [ + -117.755999, + 33.743161 + ], + [ + -117.756096, + 33.743284 + ], + [ + -117.756396, + 33.743704 + ], + [ + -117.756859, + 33.744363 + ], + [ + -117.757006, + 33.744553 + ], + [ + -117.757416, + 33.745122 + ], + [ + -117.757285, + 33.745265 + ], + [ + -117.756777, + 33.744798 + ], + [ + -117.756113, + 33.744292 + ], + [ + -117.755658, + 33.743907 + ], + [ + -117.755441, + 33.743656 + ], + [ + -117.755315, + 33.74344 + ], + [ + -117.755183, + 33.743458 + ], + [ + -117.754804, + 33.743451 + ], + [ + -117.754737, + 33.743767 + ], + [ + -117.754732, + 33.743921 + ], + [ + -117.75464, + 33.744074 + ], + [ + -117.754422, + 33.744216 + ], + [ + -117.75421, + 33.744496 + ], + [ + -117.753967, + 33.744841 + ], + [ + -117.753762, + 33.745195 + ], + [ + -117.753557, + 33.745565 + ], + [ + -117.753414, + 33.745798 + ], + [ + -117.753174, + 33.746053 + ], + [ + -117.752963, + 33.746261 + ], + [ + -117.752731, + 33.746565 + ], + [ + -117.752597, + 33.746806 + ], + [ + -117.752533, + 33.747041 + ], + [ + -117.752497, + 33.747276 + ], + [ + -117.752416, + 33.747531 + ], + [ + -117.752303, + 33.747834 + ], + [ + -117.752177, + 33.748241 + ], + [ + -117.752116, + 33.748527 + ], + [ + -117.752068, + 33.748761 + ], + [ + -117.752053, + 33.748918 + ], + [ + -117.752009, + 33.749013 + ], + [ + -117.7519, + 33.749176 + ], + [ + -117.751728, + 33.749338 + ], + [ + -117.751558, + 33.749474 + ], + [ + -117.751508, + 33.749503 + ], + [ + -117.75111, + 33.749432 + ], + [ + -117.751021, + 33.749406 + ], + [ + -117.750986, + 33.749407 + ], + [ + -117.750613, + 33.749372 + ], + [ + -117.750547, + 33.74939 + ], + [ + -117.750438, + 33.749464 + ], + [ + -117.750351, + 33.749575 + ], + [ + -117.750351, + 33.749611 + ], + [ + -117.750286, + 33.74974 + ], + [ + -117.750178, + 33.749869 + ], + [ + -117.75009, + 33.749911 + ], + [ + -117.750068, + 33.749925 + ], + [ + -117.749925, + 33.749969 + ], + [ + -117.74985, + 33.750029 + ], + [ + -117.74984, + 33.750106 + ], + [ + -117.749589, + 33.750294 + ], + [ + -117.749432, + 33.750261 + ], + [ + -117.749222, + 33.750273 + ], + [ + -117.748975, + 33.750252 + ], + [ + -117.748885, + 33.750075 + ], + [ + -117.748948, + 33.749854 + ], + [ + -117.749147, + 33.749571 + ], + [ + -117.749247, + 33.749398 + ], + [ + -117.749233, + 33.749222 + ], + [ + -117.749277, + 33.749016 + ], + [ + -117.74938, + 33.748763 + ], + [ + -117.749404, + 33.748556 + ], + [ + -117.749329, + 33.748539 + ], + [ + -117.748832, + 33.748593 + ], + [ + -117.748694, + 33.748734 + ], + [ + -117.748377, + 33.749157 + ], + [ + -117.748161, + 33.749376 + ], + [ + -117.74789, + 33.74953 + ], + [ + -117.747623, + 33.749556 + ], + [ + -117.747429, + 33.749664 + ], + [ + -117.747331, + 33.749774 + ], + [ + -117.74748, + 33.749888 + ], + [ + -117.747783, + 33.749942 + ], + [ + -117.748197, + 33.750125 + ], + [ + -117.748269, + 33.750286 + ], + [ + -117.748075, + 33.750425 + ], + [ + -117.747922, + 33.750438 + ], + [ + -117.747725, + 33.750657 + ], + [ + -117.747549, + 33.750797 + ], + [ + -117.747362, + 33.750698 + ], + [ + -117.747172, + 33.750678 + ], + [ + -117.74665, + 33.750668 + ], + [ + -117.746771, + 33.750541 + ], + [ + -117.746992, + 33.750208 + ], + [ + -117.746726, + 33.750276 + ], + [ + -117.746513, + 33.750375 + ], + [ + -117.746315, + 33.750547 + ], + [ + -117.746067, + 33.75063 + ], + [ + -117.745643, + 33.750709 + ], + [ + -117.745362, + 33.750718 + ], + [ + -117.745167, + 33.750773 + ], + [ + -117.744936, + 33.750901 + ], + [ + -117.744716, + 33.751205 + ], + [ + -117.744497, + 33.751508 + ], + [ + -117.744441, + 33.751624 + ], + [ + -117.744231, + 33.75162 + ], + [ + -117.744056, + 33.751587 + ], + [ + -117.743676, + 33.751374 + ], + [ + -117.743351, + 33.751075 + ], + [ + -117.74313, + 33.750821 + ], + [ + -117.742785, + 33.750594 + ], + [ + -117.742438, + 33.750455 + ], + [ + -117.742022, + 33.750285 + ], + [ + -117.741729, + 33.750103 + ], + [ + -117.741421, + 33.749819 + ], + [ + -117.741375, + 33.749583 + ], + [ + -117.741378, + 33.749466 + ], + [ + -117.74152, + 33.749332 + ], + [ + -117.741867, + 33.749005 + ], + [ + -117.741918, + 33.748709 + ], + [ + -117.741979, + 33.748358 + ], + [ + -117.741571, + 33.748186 + ], + [ + -117.741768, + 33.748094 + ], + [ + -117.741841, + 33.747993 + ], + [ + -117.741719, + 33.747976 + ], + [ + -117.741423, + 33.747897 + ], + [ + -117.741319, + 33.747836 + ], + [ + -117.741307, + 33.74769 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950604, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.689017, + 33.671864 + ], + [ + -117.68933, + 33.671513 + ], + [ + -117.689748, + 33.671814 + ], + [ + -117.690965, + 33.671854 + ], + [ + -117.692384, + 33.671342 + ], + [ + -117.693413, + 33.671386 + ], + [ + -117.693896, + 33.671735 + ], + [ + -117.696808, + 33.674099 + ], + [ + -117.694505, + 33.676839 + ], + [ + -117.694341, + 33.676976 + ], + [ + -117.692478, + 33.678523 + ], + [ + -117.691987, + 33.67893 + ], + [ + -117.690584, + 33.680233 + ], + [ + -117.690138, + 33.681971 + ], + [ + -117.689666, + 33.682943 + ], + [ + -117.688624, + 33.684048 + ], + [ + -117.685574, + 33.687284 + ], + [ + -117.683908, + 33.689052 + ], + [ + -117.680248, + 33.686521 + ], + [ + -117.679945, + 33.686312 + ], + [ + -117.678169, + 33.685084 + ], + [ + -117.679751, + 33.683347 + ], + [ + -117.679792, + 33.6833 + ], + [ + -117.680037, + 33.683015 + ], + [ + -117.680879, + 33.682034 + ], + [ + -117.681327, + 33.681512 + ], + [ + -117.680179, + 33.680454 + ], + [ + -117.682669, + 33.679095 + ], + [ + -117.68289, + 33.678901 + ], + [ + -117.682909, + 33.678876 + ], + [ + -117.683104, + 33.678626 + ], + [ + -117.684518, + 33.676869 + ], + [ + -117.685464, + 33.675715 + ], + [ + -117.685972, + 33.675069 + ], + [ + -117.686154, + 33.674998 + ], + [ + -117.686609, + 33.674383 + ], + [ + -117.68675, + 33.67422 + ], + [ + -117.687474, + 33.673379 + ], + [ + -117.687407, + 33.673285 + ], + [ + -117.687178, + 33.672964 + ], + [ + -117.688053, + 33.672498 + ], + [ + -117.688278, + 33.672327 + ], + [ + -117.68847, + 33.672261 + ], + [ + -117.689017, + 33.671864 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950632, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.799323, + 33.656717 + ], + [ + -117.798833, + 33.656613 + ], + [ + -117.798443, + 33.656659 + ], + [ + -117.79825, + 33.656681 + ], + [ + -117.797885, + 33.65674 + ], + [ + -117.797764, + 33.656715 + ], + [ + -117.796972, + 33.656533 + ], + [ + -117.796901, + 33.656003 + ], + [ + -117.796988, + 33.655983 + ], + [ + -117.797343, + 33.65599 + ], + [ + -117.797687, + 33.656047 + ], + [ + -117.798093, + 33.65612 + ], + [ + -117.798301, + 33.656103 + ], + [ + -117.798423, + 33.656076 + ], + [ + -117.798731, + 33.655915 + ], + [ + -117.798819, + 33.655859 + ], + [ + -117.798823, + 33.655714 + ], + [ + -117.798794, + 33.655518 + ], + [ + -117.798755, + 33.65535 + ], + [ + -117.79861, + 33.655268 + ], + [ + -117.798536, + 33.655143 + ], + [ + -117.79844, + 33.654851 + ], + [ + -117.798453, + 33.654677 + ], + [ + -117.798483, + 33.654555 + ], + [ + -117.798608, + 33.65439 + ], + [ + -117.798338, + 33.654466 + ], + [ + -117.798294, + 33.654479 + ], + [ + -117.798009, + 33.653805 + ], + [ + -117.797969, + 33.653711 + ], + [ + -117.797828, + 33.653469 + ], + [ + -117.797643, + 33.653196 + ], + [ + -117.797612, + 33.65309 + ], + [ + -117.797826, + 33.652908 + ], + [ + -117.797958, + 33.652929 + ], + [ + -117.798226, + 33.65296 + ], + [ + -117.799106, + 33.653163 + ], + [ + -117.799346, + 33.653075 + ], + [ + -117.79969, + 33.653227 + ], + [ + -117.800163, + 33.653404 + ], + [ + -117.800443, + 33.653607 + ], + [ + -117.800661, + 33.65385 + ], + [ + -117.801088, + 33.654627 + ], + [ + -117.801323, + 33.6551 + ], + [ + -117.800484, + 33.655365 + ], + [ + -117.801268, + 33.656955 + ], + [ + -117.801274, + 33.657079 + ], + [ + -117.801271, + 33.657187 + ], + [ + -117.801089, + 33.657192 + ], + [ + -117.801092, + 33.657264 + ], + [ + -117.801127, + 33.657377 + ], + [ + -117.801244, + 33.657451 + ], + [ + -117.801387, + 33.657493 + ], + [ + -117.801333, + 33.657768 + ], + [ + -117.801216, + 33.658116 + ], + [ + -117.800901, + 33.657915 + ], + [ + -117.799752, + 33.65687 + ], + [ + -117.799532, + 33.656791 + ], + [ + -117.799323, + 33.656717 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950678, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.716065, + 33.706193 + ], + [ + -117.714448, + 33.70545 + ], + [ + -117.713772, + 33.705074 + ], + [ + -117.713787, + 33.704548 + ], + [ + -117.713785, + 33.704332 + ], + [ + -117.714421, + 33.7045 + ], + [ + -117.714536, + 33.704455 + ], + [ + -117.714726, + 33.704356 + ], + [ + -117.714695, + 33.704197 + ], + [ + -117.714741, + 33.704013 + ], + [ + -117.714852, + 33.703838 + ], + [ + -117.714866, + 33.703767 + ], + [ + -117.714954, + 33.703891 + ], + [ + -117.715136, + 33.704159 + ], + [ + -117.715225, + 33.704273 + ], + [ + -117.71536, + 33.704441 + ], + [ + -117.715512, + 33.704633 + ], + [ + -117.715147, + 33.704701 + ], + [ + -117.715224, + 33.704838 + ], + [ + -117.715652, + 33.705126 + ], + [ + -117.715953, + 33.705253 + ], + [ + -117.716106, + 33.705235 + ], + [ + -117.716203, + 33.705155 + ], + [ + -117.716314, + 33.705166 + ], + [ + -117.716384, + 33.705284 + ], + [ + -117.716397, + 33.705392 + ], + [ + -117.716521, + 33.705456 + ], + [ + -117.716744, + 33.705444 + ], + [ + -117.716809, + 33.705276 + ], + [ + -117.716866, + 33.705217 + ], + [ + -117.716916, + 33.705185 + ], + [ + -117.716969, + 33.705156 + ], + [ + -117.717039, + 33.705144 + ], + [ + -117.717157, + 33.705157 + ], + [ + -117.717299, + 33.705257 + ], + [ + -117.717338, + 33.705327 + ], + [ + -117.717451, + 33.705581 + ], + [ + -117.717533, + 33.705657 + ], + [ + -117.717725, + 33.705681 + ], + [ + -117.717951, + 33.705671 + ], + [ + -117.718256, + 33.705609 + ], + [ + -117.718437, + 33.70563 + ], + [ + -117.718689, + 33.705705 + ], + [ + -117.71921, + 33.706033 + ], + [ + -117.719394, + 33.706251 + ], + [ + -117.719509, + 33.706517 + ], + [ + -117.719566, + 33.706689 + ], + [ + -117.719586, + 33.70689 + ], + [ + -117.719552, + 33.707123 + ], + [ + -117.719559, + 33.707249 + ], + [ + -117.719602, + 33.707393 + ], + [ + -117.719704, + 33.707614 + ], + [ + -117.719812, + 33.708056 + ], + [ + -117.719982, + 33.70834 + ], + [ + -117.720221, + 33.708586 + ], + [ + -117.720194, + 33.708796 + ], + [ + -117.720212, + 33.709197 + ], + [ + -117.720149, + 33.709363 + ], + [ + -117.720055, + 33.709479 + ], + [ + -117.719912, + 33.709381 + ], + [ + -117.719627, + 33.709168 + ], + [ + -117.719428, + 33.708979 + ], + [ + -117.719252, + 33.708737 + ], + [ + -117.719106, + 33.708724 + ], + [ + -117.718969, + 33.708585 + ], + [ + -117.718875, + 33.708347 + ], + [ + -117.718528, + 33.707748 + ], + [ + -117.717795, + 33.707192 + ], + [ + -117.717339, + 33.706878 + ], + [ + -117.716844, + 33.706513 + ], + [ + -117.716065, + 33.706193 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950686, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.781057, + 33.655091 + ], + [ + -117.781539, + 33.654856 + ], + [ + -117.781966, + 33.655148 + ], + [ + -117.78253, + 33.655493 + ], + [ + -117.783095, + 33.654681 + ], + [ + -117.783047, + 33.654589 + ], + [ + -117.782982, + 33.654532 + ], + [ + -117.783035, + 33.654407 + ], + [ + -117.78344, + 33.654002 + ], + [ + -117.783646, + 33.654125 + ], + [ + -117.783856, + 33.653891 + ], + [ + -117.783974, + 33.65376 + ], + [ + -117.78407, + 33.653636 + ], + [ + -117.784031, + 33.65353 + ], + [ + -117.783924, + 33.653451 + ], + [ + -117.783751, + 33.653357 + ], + [ + -117.783788, + 33.65321 + ], + [ + -117.783776, + 33.65307 + ], + [ + -117.783664, + 33.652879 + ], + [ + -117.783552, + 33.652687 + ], + [ + -117.783558, + 33.652624 + ], + [ + -117.783564, + 33.652561 + ], + [ + -117.783817, + 33.652207 + ], + [ + -117.784017, + 33.651926 + ], + [ + -117.784116, + 33.651683 + ], + [ + -117.784264, + 33.651242 + ], + [ + -117.78449, + 33.65057 + ], + [ + -117.784239, + 33.650446 + ], + [ + -117.784201, + 33.65019 + ], + [ + -117.784151, + 33.649854 + ], + [ + -117.783868, + 33.649611 + ], + [ + -117.783896, + 33.649565 + ], + [ + -117.784025, + 33.649353 + ], + [ + -117.784326, + 33.64905 + ], + [ + -117.784326, + 33.64905 + ], + [ + -117.784439, + 33.648958 + ], + [ + -117.784935, + 33.648555 + ], + [ + -117.784935, + 33.648555 + ], + [ + -117.785757, + 33.648147 + ], + [ + -117.787132, + 33.648445 + ], + [ + -117.787255, + 33.648471 + ], + [ + -117.78746, + 33.648538 + ], + [ + -117.788167, + 33.648769 + ], + [ + -117.790275, + 33.649455 + ], + [ + -117.790895, + 33.649657 + ], + [ + -117.79274, + 33.650843 + ], + [ + -117.792922, + 33.651113 + ], + [ + -117.793525, + 33.652006 + ], + [ + -117.793556, + 33.652052 + ], + [ + -117.79356, + 33.652116 + ], + [ + -117.793656, + 33.653604 + ], + [ + -117.793672, + 33.653851 + ], + [ + -117.793324, + 33.654803 + ], + [ + -117.793054, + 33.656284 + ], + [ + -117.793555, + 33.656987 + ], + [ + -117.794047, + 33.658088 + ], + [ + -117.796776, + 33.659235 + ], + [ + -117.797575, + 33.659969 + ], + [ + -117.797226, + 33.66096 + ], + [ + -117.796367, + 33.661615 + ], + [ + -117.795378, + 33.662256 + ], + [ + -117.794531, + 33.662552 + ], + [ + -117.79399, + 33.662558 + ], + [ + -117.793169, + 33.662566 + ], + [ + -117.793087, + 33.662567 + ], + [ + -117.792347, + 33.662449 + ], + [ + -117.790441, + 33.662065 + ], + [ + -117.787759, + 33.66171 + ], + [ + -117.787593, + 33.661683 + ], + [ + -117.787582, + 33.661679 + ], + [ + -117.787324, + 33.661591 + ], + [ + -117.784556, + 33.660648 + ], + [ + -117.783967, + 33.660447 + ], + [ + -117.7811, + 33.658698 + ], + [ + -117.780823, + 33.658529 + ], + [ + -117.78024, + 33.657266 + ], + [ + -117.779788, + 33.656825 + ], + [ + -117.779334, + 33.656607 + ], + [ + -117.781057, + 33.655091 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950730, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.67451, + 33.567718 + ], + [ + -117.674604, + 33.565405 + ], + [ + -117.674937, + 33.564585 + ], + [ + -117.675006, + 33.564482 + ], + [ + -117.675453, + 33.563819 + ], + [ + -117.675924, + 33.563545 + ], + [ + -117.67597, + 33.563558 + ], + [ + -117.676199, + 33.563628 + ], + [ + -117.676191, + 33.563912 + ], + [ + -117.676249, + 33.564043 + ], + [ + -117.676964, + 33.564069 + ], + [ + -117.676955, + 33.56365 + ], + [ + -117.676961, + 33.563537 + ], + [ + -117.676399, + 33.563141 + ], + [ + -117.676353, + 33.563053 + ], + [ + -117.676223, + 33.562801 + ], + [ + -117.676652, + 33.561853 + ], + [ + -117.677172, + 33.560958 + ], + [ + -117.677211, + 33.560244 + ], + [ + -117.677778, + 33.560424 + ], + [ + -117.677689, + 33.560201 + ], + [ + -117.677759, + 33.560059 + ], + [ + -117.677824, + 33.560033 + ], + [ + -117.678263, + 33.559562 + ], + [ + -117.679078, + 33.559744 + ], + [ + -117.679435, + 33.559391 + ], + [ + -117.679471, + 33.559351 + ], + [ + -117.679607, + 33.558652 + ], + [ + -117.679616, + 33.558604 + ], + [ + -117.67969, + 33.558379 + ], + [ + -117.679781, + 33.558103 + ], + [ + -117.679786, + 33.55809 + ], + [ + -117.679783, + 33.558075 + ], + [ + -117.679734, + 33.557753 + ], + [ + -117.679377, + 33.55728 + ], + [ + -117.679631, + 33.557052 + ], + [ + -117.680041, + 33.557185 + ], + [ + -117.680823, + 33.557439 + ], + [ + -117.681219, + 33.557561 + ], + [ + -117.681933, + 33.557782 + ], + [ + -117.682168, + 33.557854 + ], + [ + -117.68324, + 33.558109 + ], + [ + -117.684497, + 33.558393 + ], + [ + -117.683465, + 33.558864 + ], + [ + -117.682723, + 33.558926 + ], + [ + -117.682252, + 33.559201 + ], + [ + -117.681744, + 33.559682 + ], + [ + -117.681553, + 33.559885 + ], + [ + -117.681187, + 33.559748 + ], + [ + -117.680525, + 33.560251 + ], + [ + -117.680516, + 33.560536 + ], + [ + -117.680542, + 33.560717 + ], + [ + -117.680008, + 33.561042 + ], + [ + -117.679545, + 33.561059 + ], + [ + -117.679256, + 33.561441 + ], + [ + -117.679348, + 33.562503 + ], + [ + -117.679552, + 33.562921 + ], + [ + -117.68023, + 33.562935 + ], + [ + -117.680441, + 33.56312 + ], + [ + -117.68031, + 33.563376 + ], + [ + -117.680054, + 33.563681 + ], + [ + -117.6797, + 33.564191 + ], + [ + -117.679586, + 33.564325 + ], + [ + -117.679126, + 33.564223 + ], + [ + -117.678986, + 33.564264 + ], + [ + -117.678838, + 33.564382 + ], + [ + -117.678998, + 33.56523 + ], + [ + -117.679627, + 33.564893 + ], + [ + -117.679672, + 33.564943 + ], + [ + -117.679815, + 33.564999 + ], + [ + -117.680276, + 33.565062 + ], + [ + -117.680426, + 33.565089 + ], + [ + -117.68079, + 33.565092 + ], + [ + -117.68086, + 33.565069 + ], + [ + -117.680953, + 33.565061 + ], + [ + -117.680936, + 33.564874 + ], + [ + -117.681043, + 33.564684 + ], + [ + -117.681521, + 33.564177 + ], + [ + -117.681834, + 33.564002 + ], + [ + -117.682323, + 33.564167 + ], + [ + -117.682157, + 33.564578 + ], + [ + -117.681811, + 33.564989 + ], + [ + -117.681786, + 33.565656 + ], + [ + -117.680914, + 33.565803 + ], + [ + -117.681114, + 33.56647 + ], + [ + -117.681042, + 33.566512 + ], + [ + -117.680924, + 33.566581 + ], + [ + -117.680901, + 33.566542 + ], + [ + -117.68075, + 33.566294 + ], + [ + -117.68068, + 33.566282 + ], + [ + -117.680138, + 33.566426 + ], + [ + -117.680022, + 33.566439 + ], + [ + -117.679582, + 33.566434 + ], + [ + -117.679467, + 33.566403 + ], + [ + -117.679348, + 33.566323 + ], + [ + -117.6786, + 33.566338 + ], + [ + -117.678526, + 33.56634 + ], + [ + -117.678516, + 33.566286 + ], + [ + -117.678266, + 33.566116 + ], + [ + -117.678005, + 33.565941 + ], + [ + -117.677935, + 33.56594 + ], + [ + -117.677897, + 33.565939 + ], + [ + -117.677834, + 33.565938 + ], + [ + -117.677797, + 33.565937 + ], + [ + -117.677271, + 33.565703 + ], + [ + -117.677279, + 33.565626 + ], + [ + -117.677235, + 33.565542 + ], + [ + -117.677196, + 33.565498 + ], + [ + -117.676995, + 33.56546 + ], + [ + -117.676508, + 33.565455 + ], + [ + -117.676227, + 33.565852 + ], + [ + -117.676155, + 33.566164 + ], + [ + -117.67612, + 33.566316 + ], + [ + -117.675625, + 33.566763 + ], + [ + -117.675392, + 33.566973 + ], + [ + -117.675185, + 33.567693 + ], + [ + -117.675101, + 33.568007 + ], + [ + -117.675082, + 33.568079 + ], + [ + -117.674496, + 33.568067 + ], + [ + -117.67451, + 33.567718 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950733, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.812859, + 33.657458 + ], + [ + -117.811893, + 33.657303 + ], + [ + -117.810588, + 33.657399 + ], + [ + -117.809551, + 33.65773 + ], + [ + -117.808361, + 33.65813 + ], + [ + -117.807503, + 33.65826 + ], + [ + -117.807236, + 33.657739 + ], + [ + -117.807077, + 33.657493 + ], + [ + -117.806482, + 33.656846 + ], + [ + -117.805741, + 33.656094 + ], + [ + -117.805146, + 33.654731 + ], + [ + -117.80472, + 33.653817 + ], + [ + -117.804358, + 33.653956 + ], + [ + -117.80371, + 33.654205 + ], + [ + -117.803211, + 33.653746 + ], + [ + -117.802739, + 33.653341 + ], + [ + -117.802269, + 33.652964 + ], + [ + -117.80187, + 33.652558 + ], + [ + -117.801744, + 33.651942 + ], + [ + -117.801397, + 33.651508 + ], + [ + -117.801294, + 33.651453 + ], + [ + -117.800847, + 33.651216 + ], + [ + -117.800567, + 33.650819 + ], + [ + -117.800227, + 33.650428 + ], + [ + -117.799865, + 33.650112 + ], + [ + -117.800602, + 33.650163 + ], + [ + -117.801727, + 33.650184 + ], + [ + -117.801664, + 33.649608 + ], + [ + -117.80165, + 33.649341 + ], + [ + -117.801678, + 33.648988 + ], + [ + -117.801687, + 33.648824 + ], + [ + -117.801595, + 33.648609 + ], + [ + -117.801503, + 33.648269 + ], + [ + -117.801365, + 33.647945 + ], + [ + -117.801265, + 33.64774 + ], + [ + -117.801016, + 33.647407 + ], + [ + -117.800648, + 33.646514 + ], + [ + -117.800567, + 33.646016 + ], + [ + -117.80081, + 33.645237 + ], + [ + -117.801152, + 33.644738 + ], + [ + -117.801667, + 33.644262 + ], + [ + -117.801733, + 33.644701 + ], + [ + -117.802312, + 33.645054 + ], + [ + -117.802211, + 33.645467 + ], + [ + -117.801924, + 33.646065 + ], + [ + -117.80217, + 33.646937 + ], + [ + -117.802975, + 33.64718 + ], + [ + -117.80324, + 33.647131 + ], + [ + -117.804288, + 33.646941 + ], + [ + -117.804322, + 33.647357 + ], + [ + -117.803853, + 33.648027 + ], + [ + -117.803839, + 33.648517 + ], + [ + -117.80414, + 33.649051 + ], + [ + -117.80418, + 33.649214 + ], + [ + -117.804342, + 33.649885 + ], + [ + -117.804654, + 33.650109 + ], + [ + -117.804828, + 33.650234 + ], + [ + -117.805368, + 33.650282 + ], + [ + -117.805433, + 33.651189 + ], + [ + -117.805785, + 33.651498 + ], + [ + -117.806631, + 33.651854 + ], + [ + -117.805743, + 33.653006 + ], + [ + -117.805761, + 33.65325 + ], + [ + -117.805776, + 33.65346 + ], + [ + -117.805922, + 33.653934 + ], + [ + -117.806123, + 33.654254 + ], + [ + -117.806131, + 33.654268 + ], + [ + -117.806169, + 33.654476 + ], + [ + -117.806448, + 33.654945 + ], + [ + -117.806569, + 33.655339 + ], + [ + -117.806709, + 33.655553 + ], + [ + -117.807338, + 33.655956 + ], + [ + -117.807412, + 33.656002 + ], + [ + -117.80759, + 33.655896 + ], + [ + -117.807782, + 33.655802 + ], + [ + -117.807799, + 33.655797 + ], + [ + -117.808123, + 33.655695 + ], + [ + -117.808239, + 33.655659 + ], + [ + -117.807762, + 33.656593 + ], + [ + -117.807754, + 33.656894 + ], + [ + -117.808429, + 33.656945 + ], + [ + -117.808674, + 33.656233 + ], + [ + -117.809532, + 33.656174 + ], + [ + -117.810572, + 33.656043 + ], + [ + -117.811618, + 33.655724 + ], + [ + -117.81248, + 33.655514 + ], + [ + -117.813112, + 33.655489 + ], + [ + -117.813598, + 33.655837 + ], + [ + -117.814204, + 33.656755 + ], + [ + -117.815005, + 33.657148 + ], + [ + -117.816094, + 33.656867 + ], + [ + -117.816231, + 33.656781 + ], + [ + -117.816736, + 33.656464 + ], + [ + -117.817387, + 33.65576 + ], + [ + -117.817867, + 33.654675 + ], + [ + -117.818605, + 33.654085 + ], + [ + -117.81921, + 33.65338 + ], + [ + -117.819288, + 33.653337 + ], + [ + -117.81944, + 33.653308 + ], + [ + -117.819491, + 33.653311 + ], + [ + -117.819808, + 33.653328 + ], + [ + -117.820033, + 33.653552 + ], + [ + -117.820272, + 33.653864 + ], + [ + -117.820416, + 33.65404 + ], + [ + -117.820478, + 33.654116 + ], + [ + -117.820584, + 33.654247 + ], + [ + -117.820606, + 33.654266 + ], + [ + -117.820842, + 33.654466 + ], + [ + -117.821986, + 33.654671 + ], + [ + -117.822913, + 33.654615 + ], + [ + -117.823905, + 33.654554 + ], + [ + -117.82507, + 33.654361 + ], + [ + -117.825538, + 33.654134 + ], + [ + -117.826144, + 33.653839 + ], + [ + -117.826612, + 33.654013 + ], + [ + -117.826761, + 33.654117 + ], + [ + -117.827111, + 33.654737 + ], + [ + -117.827119, + 33.654756 + ], + [ + -117.827375, + 33.65525 + ], + [ + -117.827604, + 33.656328 + ], + [ + -117.827522, + 33.657222 + ], + [ + -117.826393, + 33.657159 + ], + [ + -117.824229, + 33.657117 + ], + [ + -117.822093, + 33.657092 + ], + [ + -117.821145, + 33.65713 + ], + [ + -117.820261, + 33.657349 + ], + [ + -117.819237, + 33.657721 + ], + [ + -117.817738, + 33.65833 + ], + [ + -117.816789, + 33.658512 + ], + [ + -117.81621, + 33.658532 + ], + [ + -117.815643, + 33.658469 + ], + [ + -117.814712, + 33.658194 + ], + [ + -117.814487, + 33.658105 + ], + [ + -117.814191, + 33.657988 + ], + [ + -117.813934, + 33.657886 + ], + [ + -117.812859, + 33.657458 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950735, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.967646, + 33.837145 + ], + [ + -117.967685, + 33.839613 + ], + [ + -117.96103, + 33.839723 + ], + [ + -117.961, + 33.838824 + ], + [ + -117.960128, + 33.838881 + ], + [ + -117.960115, + 33.836531 + ], + [ + -117.96117, + 33.836498 + ], + [ + -117.961191, + 33.836129 + ], + [ + -117.961758, + 33.83612 + ], + [ + -117.961754, + 33.835841 + ], + [ + -117.962505, + 33.835827 + ], + [ + -117.96249, + 33.83552 + ], + [ + -117.963368, + 33.835501 + ], + [ + -117.963375, + 33.835049 + ], + [ + -117.964352, + 33.83502 + ], + [ + -117.964608, + 33.834867 + ], + [ + -117.965519, + 33.834848 + ], + [ + -117.965517, + 33.834309 + ], + [ + -117.967692, + 33.834326 + ], + [ + -117.967703, + 33.835339 + ], + [ + -117.967714, + 33.836058 + ], + [ + -117.973904, + 33.83592 + ], + [ + -117.974232, + 33.835678 + ], + [ + -117.974201, + 33.834089 + ], + [ + -117.97588, + 33.834085 + ], + [ + -117.975914, + 33.836568 + ], + [ + -117.975581, + 33.836576 + ], + [ + -117.975116, + 33.836823 + ], + [ + -117.975132, + 33.836988 + ], + [ + -117.974856, + 33.83701 + ], + [ + -117.974235, + 33.837248 + ], + [ + -117.974168, + 33.837456 + ], + [ + -117.972056, + 33.837529 + ], + [ + -117.971034, + 33.837616 + ], + [ + -117.970351, + 33.837741 + ], + [ + -117.969079, + 33.837776 + ], + [ + -117.969071, + 33.837301 + ], + [ + -117.968745, + 33.837303 + ], + [ + -117.968741, + 33.83719 + ], + [ + -117.968673, + 33.837144 + ], + [ + -117.967646, + 33.837145 + ] + ] + ] + }, + "properties": { + "name": "Dad Miller Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950737, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.032735, + 33.721436 + ], + [ + -118.030594, + 33.721446 + ], + [ + -118.030607, + 33.722579 + ], + [ + -118.027649, + 33.722601 + ], + [ + -118.027632, + 33.721697 + ], + [ + -118.027625, + 33.721487 + ], + [ + -118.027541, + 33.721443 + ], + [ + -118.026245, + 33.721461 + ], + [ + -118.026166, + 33.717241 + ], + [ + -118.02834, + 33.717236 + ], + [ + -118.028303, + 33.715554 + ], + [ + -118.032426, + 33.71553 + ], + [ + -118.032476, + 33.715537 + ], + [ + -118.032511, + 33.715561 + ], + [ + -118.032548, + 33.715619 + ], + [ + -118.032565, + 33.715699 + ], + [ + -118.032691, + 33.718144 + ], + [ + -118.032735, + 33.721436 + ] + ] + ] + }, + "properties": { + "name": "Meadowlark Golf Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950741, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.823601, + 33.589117 + ], + [ + -117.825862, + 33.589313 + ], + [ + -117.830487, + 33.5839 + ], + [ + -117.833509, + 33.582352 + ], + [ + -117.835309, + 33.580019 + ], + [ + -117.836621, + 33.580136 + ], + [ + -117.836845, + 33.580233 + ], + [ + -117.83712, + 33.580174 + ], + [ + -117.837336, + 33.5801 + ], + [ + -117.837657, + 33.580057 + ], + [ + -117.838006, + 33.580136 + ], + [ + -117.838061, + 33.580146 + ], + [ + -117.838542, + 33.580236 + ], + [ + -117.838078, + 33.580421 + ], + [ + -117.838028, + 33.580441 + ], + [ + -117.837773, + 33.580686 + ], + [ + -117.837891, + 33.580918 + ], + [ + -117.838137, + 33.581027 + ], + [ + -117.838402, + 33.581059 + ], + [ + -117.838393, + 33.581113 + ], + [ + -117.8384, + 33.581139 + ], + [ + -117.838706, + 33.581095 + ], + [ + -117.838718, + 33.581601 + ], + [ + -117.838516, + 33.581608 + ], + [ + -117.838345, + 33.581614 + ], + [ + -117.838071, + 33.581609 + ], + [ + -117.837767, + 33.581812 + ], + [ + -117.837262, + 33.582094 + ], + [ + -117.836988, + 33.582089 + ], + [ + -117.836714, + 33.582125 + ], + [ + -117.836535, + 33.582553 + ], + [ + -117.836569, + 33.582784 + ], + [ + -117.836576, + 33.582808 + ], + [ + -117.836592, + 33.582935 + ], + [ + -117.836712, + 33.583104 + ], + [ + -117.836434, + 33.583584 + ], + [ + -117.836425, + 33.583599 + ], + [ + -117.836285, + 33.584159 + ], + [ + -117.836864, + 33.584206 + ], + [ + -117.836071, + 33.584697 + ], + [ + -117.835748, + 33.584691 + ], + [ + -117.835398, + 33.584747 + ], + [ + -117.835069, + 33.58497 + ], + [ + -117.834739, + 33.585193 + ], + [ + -117.834415, + 33.585228 + ], + [ + -117.83426, + 33.585434 + ], + [ + -117.834429, + 33.585603 + ], + [ + -117.834674, + 33.585775 + ], + [ + -117.835067, + 33.585949 + ], + [ + -117.835658, + 33.586169 + ], + [ + -117.835889, + 33.585902 + ], + [ + -117.836353, + 33.585328 + ], + [ + -117.836787, + 33.584898 + ], + [ + -117.837371, + 33.584493 + ], + [ + -117.837647, + 33.584415 + ], + [ + -117.837813, + 33.58471 + ], + [ + -117.83825, + 33.585093 + ], + [ + -117.838516, + 33.585369 + ], + [ + -117.838801, + 33.585419 + ], + [ + -117.838552, + 33.586836 + ], + [ + -117.838231, + 33.586718 + ], + [ + -117.837687, + 33.586583 + ], + [ + -117.837445, + 33.586349 + ], + [ + -117.837153, + 33.586241 + ], + [ + -117.836836, + 33.586863 + ], + [ + -117.83685, + 33.587028 + ], + [ + -117.836989, + 33.587117 + ], + [ + -117.837017, + 33.587134 + ], + [ + -117.836744, + 33.587419 + ], + [ + -117.836482, + 33.587873 + ], + [ + -117.836348, + 33.588225 + ], + [ + -117.836237, + 33.58866 + ], + [ + -117.83621, + 33.588958 + ], + [ + -117.835421, + 33.588943 + ], + [ + -117.834919, + 33.589264 + ], + [ + -117.834998, + 33.592094 + ], + [ + -117.833828, + 33.592433 + ], + [ + -117.833374, + 33.59258 + ], + [ + -117.832789, + 33.592782 + ], + [ + -117.83198, + 33.59306 + ], + [ + -117.831052, + 33.593376 + ], + [ + -117.831046, + 33.594105 + ], + [ + -117.830768, + 33.594429 + ], + [ + -117.830581, + 33.594343 + ], + [ + -117.830252, + 33.594261 + ], + [ + -117.830159, + 33.594348 + ], + [ + -117.830138, + 33.594575 + ], + [ + -117.830251, + 33.594855 + ], + [ + -117.830448, + 33.594995 + ], + [ + -117.830418, + 33.595406 + ], + [ + -117.830483, + 33.595713 + ], + [ + -117.830399, + 33.596014 + ], + [ + -117.830365, + 33.596399 + ], + [ + -117.830271, + 33.596921 + ], + [ + -117.830204, + 33.597377 + ], + [ + -117.830111, + 33.597817 + ], + [ + -117.830096, + 33.598488 + ], + [ + -117.829753, + 33.598993 + ], + [ + -117.828863, + 33.59899 + ], + [ + -117.82862, + 33.599311 + ], + [ + -117.828599, + 33.599647 + ], + [ + -117.828558, + 33.600198 + ], + [ + -117.828346, + 33.600704 + ], + [ + -117.827828, + 33.600565 + ], + [ + -117.827453, + 33.60069 + ], + [ + -117.826986, + 33.600788 + ], + [ + -117.826519, + 33.600962 + ], + [ + -117.82619, + 33.601209 + ], + [ + -117.825913, + 33.601466 + ], + [ + -117.825811, + 33.601538 + ], + [ + -117.825167, + 33.601045 + ], + [ + -117.824916, + 33.600803 + ], + [ + -117.824707, + 33.600566 + ], + [ + -117.82438, + 33.600092 + ], + [ + -117.824208, + 33.59986 + ], + [ + -117.824329, + 33.599769 + ], + [ + -117.824332, + 33.599632 + ], + [ + -117.824283, + 33.599448 + ], + [ + -117.824166, + 33.599065 + ], + [ + -117.823992, + 33.598773 + ], + [ + -117.823759, + 33.598677 + ], + [ + -117.823452, + 33.59861 + ], + [ + -117.823127, + 33.598528 + ], + [ + -117.822892, + 33.598478 + ], + [ + -117.822691, + 33.59852 + ], + [ + -117.822579, + 33.598609 + ], + [ + -117.822222, + 33.598913 + ], + [ + -117.820309, + 33.598297 + ], + [ + -117.81914, + 33.598427 + ], + [ + -117.818803, + 33.598756 + ], + [ + -117.818679, + 33.599303 + ], + [ + -117.818345, + 33.59954 + ], + [ + -117.81767, + 33.600229 + ], + [ + -117.817158, + 33.60031 + ], + [ + -117.816647, + 33.600362 + ], + [ + -117.816035, + 33.600106 + ], + [ + -117.815781, + 33.599883 + ], + [ + -117.81536, + 33.599513 + ], + [ + -117.815366, + 33.599269 + ], + [ + -117.815412, + 33.598934 + ], + [ + -117.815469, + 33.59853 + ], + [ + -117.815474, + 33.598525 + ], + [ + -117.815624, + 33.598381 + ], + [ + -117.815752, + 33.598258 + ], + [ + -117.815847, + 33.598079 + ], + [ + -117.815869, + 33.597929 + ], + [ + -117.815728, + 33.59782 + ], + [ + -117.815456, + 33.59789 + ], + [ + -117.815318, + 33.59791 + ], + [ + -117.815181, + 33.597873 + ], + [ + -117.81508, + 33.597808 + ], + [ + -117.815066, + 33.597657 + ], + [ + -117.815016, + 33.59752 + ], + [ + -117.814892, + 33.597427 + ], + [ + -117.814641, + 33.597361 + ], + [ + -117.814428, + 33.597396 + ], + [ + -117.81421, + 33.597616 + ], + [ + -117.814192, + 33.598017 + ], + [ + -117.814006, + 33.59821 + ], + [ + -117.813283, + 33.598451 + ], + [ + -117.813088, + 33.598795 + ], + [ + -117.812965, + 33.598982 + ], + [ + -117.81286, + 33.599289 + ], + [ + -117.812707, + 33.599633 + ], + [ + -117.81237, + 33.600077 + ], + [ + -117.812321, + 33.600302 + ], + [ + -117.812028, + 33.600582 + ], + [ + -117.811908, + 33.600816 + ], + [ + -117.811644, + 33.600976 + ], + [ + -117.811351, + 33.600961 + ], + [ + -117.811067, + 33.601117 + ], + [ + -117.810946, + 33.60163 + ], + [ + -117.810815, + 33.601933 + ], + [ + -117.81077, + 33.60243 + ], + [ + -117.810538, + 33.602714 + ], + [ + -117.810433, + 33.603238 + ], + [ + -117.810407, + 33.603505 + ], + [ + -117.809926, + 33.60377 + ], + [ + -117.809779, + 33.604056 + ], + [ + -117.809835, + 33.60444 + ], + [ + -117.810121, + 33.604628 + ], + [ + -117.810558, + 33.604606 + ], + [ + -117.810766, + 33.605007 + ], + [ + -117.810462, + 33.605458 + ], + [ + -117.810202, + 33.605636 + ], + [ + -117.809894, + 33.60624 + ], + [ + -117.809131, + 33.606056 + ], + [ + -117.809043, + 33.606048 + ], + [ + -117.809084, + 33.605752 + ], + [ + -117.809098, + 33.605239 + ], + [ + -117.808782, + 33.604719 + ], + [ + -117.808657, + 33.604125 + ], + [ + -117.808813, + 33.603595 + ], + [ + -117.809375, + 33.602876 + ], + [ + -117.80968, + 33.602072 + ], + [ + -117.809676, + 33.601381 + ], + [ + -117.809547, + 33.600905 + ], + [ + -117.810269, + 33.599517 + ], + [ + -117.810613, + 33.599011 + ], + [ + -117.810851, + 33.598065 + ], + [ + -117.810905, + 33.597852 + ], + [ + -117.811098, + 33.597227 + ], + [ + -117.811275, + 33.596984 + ], + [ + -117.811405, + 33.596713 + ], + [ + -117.81155, + 33.596407 + ], + [ + -117.811624, + 33.59618 + ], + [ + -117.811912, + 33.596117 + ], + [ + -117.812048, + 33.59612 + ], + [ + -117.812153, + 33.596271 + ], + [ + -117.812826, + 33.596089 + ], + [ + -117.812596, + 33.595537 + ], + [ + -117.812028, + 33.595857 + ], + [ + -117.81182, + 33.595488 + ], + [ + -117.81168, + 33.59538 + ], + [ + -117.811233, + 33.59503 + ], + [ + -117.811034, + 33.594874 + ], + [ + -117.810212, + 33.594486 + ], + [ + -117.810076, + 33.594483 + ], + [ + -117.809185, + 33.596102 + ], + [ + -117.808176, + 33.596792 + ], + [ + -117.807806, + 33.597417 + ], + [ + -117.807298, + 33.597421 + ], + [ + -117.806509, + 33.59728 + ], + [ + -117.806348, + 33.597174 + ], + [ + -117.806353, + 33.597015 + ], + [ + -117.806344, + 33.596843 + ], + [ + -117.805812, + 33.596353 + ], + [ + -117.805702, + 33.596888 + ], + [ + -117.805681, + 33.597138 + ], + [ + -117.805753, + 33.597494 + ], + [ + -117.805801, + 33.597684 + ], + [ + -117.805578, + 33.597848 + ], + [ + -117.805017, + 33.598528 + ], + [ + -117.80489, + 33.59888 + ], + [ + -117.804889, + 33.599749 + ], + [ + -117.805097, + 33.60076 + ], + [ + -117.804848, + 33.601228 + ], + [ + -117.804758, + 33.601937 + ], + [ + -117.804752, + 33.602154 + ], + [ + -117.804353, + 33.602956 + ], + [ + -117.804136, + 33.603308 + ], + [ + -117.803905, + 33.603983 + ], + [ + -117.803705, + 33.604216 + ], + [ + -117.803162, + 33.604692 + ], + [ + -117.802677, + 33.605038 + ], + [ + -117.802076, + 33.605217 + ], + [ + -117.801759, + 33.605451 + ], + [ + -117.801617, + 33.605571 + ], + [ + -117.801582, + 33.605696 + ], + [ + -117.801648, + 33.605874 + ], + [ + -117.801857, + 33.605982 + ], + [ + -117.802529, + 33.605906 + ], + [ + -117.80298, + 33.605899 + ], + [ + -117.80352, + 33.605932 + ], + [ + -117.804253, + 33.606087 + ], + [ + -117.804942, + 33.606382 + ], + [ + -117.804975, + 33.606896 + ], + [ + -117.80533, + 33.607499 + ], + [ + -117.805426, + 33.60773 + ], + [ + -117.806065, + 33.608115 + ], + [ + -117.806608, + 33.608269 + ], + [ + -117.807526, + 33.608429 + ], + [ + -117.809608, + 33.608617 + ], + [ + -117.809931, + 33.608018 + ], + [ + -117.810563, + 33.606565 + ], + [ + -117.810725, + 33.606616 + ], + [ + -117.811358, + 33.60675 + ], + [ + -117.811991, + 33.606838 + ], + [ + -117.812536, + 33.606849 + ], + [ + -117.813664, + 33.606863 + ], + [ + -117.814248, + 33.606783 + ], + [ + -117.815113, + 33.607734 + ], + [ + -117.816177, + 33.608193 + ], + [ + -117.816584, + 33.608404 + ], + [ + -117.817214, + 33.608566 + ], + [ + -117.81772, + 33.608545 + ], + [ + -117.818066, + 33.608462 + ], + [ + -117.818434, + 33.608561 + ], + [ + -117.818743, + 33.608567 + ], + [ + -117.818999, + 33.608496 + ], + [ + -117.819157, + 33.608364 + ], + [ + -117.819652, + 33.608447 + ], + [ + -117.820335, + 33.608609 + ], + [ + -117.821095, + 33.608764 + ], + [ + -117.822154, + 33.608992 + ], + [ + -117.822085, + 33.610198 + ], + [ + -117.822402, + 33.610522 + ], + [ + -117.823049, + 33.610717 + ], + [ + -117.823642, + 33.610865 + ], + [ + -117.824065, + 33.611282 + ], + [ + -117.824389, + 33.611379 + ], + [ + -117.824713, + 33.611431 + ], + [ + -117.82541, + 33.611763 + ], + [ + -117.825697, + 33.612538 + ], + [ + -117.825593, + 33.614356 + ], + [ + -117.823562, + 33.615772 + ], + [ + -117.822837, + 33.615791 + ], + [ + -117.821363, + 33.616081 + ], + [ + -117.820439, + 33.616763 + ], + [ + -117.822173, + 33.616887 + ], + [ + -117.8226, + 33.617169 + ], + [ + -117.8232, + 33.617089 + ], + [ + -117.823807, + 33.616737 + ], + [ + -117.824306, + 33.616383 + ], + [ + -117.82474, + 33.616391 + ], + [ + -117.8255, + 33.616405 + ], + [ + -117.825827, + 33.616736 + ], + [ + -117.823734, + 33.617413 + ], + [ + -117.821833, + 33.617422 + ], + [ + -117.819825, + 33.617338 + ], + [ + -117.819268, + 33.617281 + ], + [ + -117.819406, + 33.617443 + ], + [ + -117.819583, + 33.617924 + ], + [ + -117.81974, + 33.618265 + ], + [ + -117.819991, + 33.618668 + ], + [ + -117.820377, + 33.619312 + ], + [ + -117.820122, + 33.619486 + ], + [ + -117.819215, + 33.619341 + ], + [ + -117.819182, + 33.618688 + ], + [ + -117.818974, + 33.618596 + ], + [ + -117.818151, + 33.618756 + ], + [ + -117.817301, + 33.618815 + ], + [ + -117.817012, + 33.618949 + ], + [ + -117.816958, + 33.619186 + ], + [ + -117.816806, + 33.619542 + ], + [ + -117.816631, + 33.619869 + ], + [ + -117.815672, + 33.620377 + ], + [ + -117.815534, + 33.620465 + ], + [ + -117.814765, + 33.620278 + ], + [ + -117.814427, + 33.620471 + ], + [ + -117.814232, + 33.620686 + ], + [ + -117.813591, + 33.620634 + ], + [ + -117.812996, + 33.620682 + ], + [ + -117.812755, + 33.620797 + ], + [ + -117.812005, + 33.621279 + ], + [ + -117.812208, + 33.621662 + ], + [ + -117.812344, + 33.621923 + ], + [ + -117.812269, + 33.622061 + ], + [ + -117.812503, + 33.622185 + ], + [ + -117.81281, + 33.62225 + ], + [ + -117.81319, + 33.622258 + ], + [ + -117.813626, + 33.622204 + ], + [ + -117.813254, + 33.622797 + ], + [ + -117.812057, + 33.622962 + ], + [ + -117.811066, + 33.62312 + ], + [ + -117.810372, + 33.623357 + ], + [ + -117.809924, + 33.623643 + ], + [ + -117.809579, + 33.624005 + ], + [ + -117.809658, + 33.62498 + ], + [ + -117.80986, + 33.625323 + ], + [ + -117.810101, + 33.625535 + ], + [ + -117.810261, + 33.625652 + ], + [ + -117.810915, + 33.625812 + ], + [ + -117.811314, + 33.625759 + ], + [ + -117.811349, + 33.626043 + ], + [ + -117.812042, + 33.626412 + ], + [ + -117.812526, + 33.626502 + ], + [ + -117.813485, + 33.626627 + ], + [ + -117.813708, + 33.626609 + ], + [ + -117.813984, + 33.626578 + ], + [ + -117.814148, + 33.626734 + ], + [ + -117.814386, + 33.626844 + ], + [ + -117.814676, + 33.626825 + ], + [ + -117.815119, + 33.625743 + ], + [ + -117.815126, + 33.625746 + ], + [ + -117.815406, + 33.625312 + ], + [ + -117.815802, + 33.624835 + ], + [ + -117.816468, + 33.623799 + ], + [ + -117.816888, + 33.62356 + ], + [ + -117.817213, + 33.623784 + ], + [ + -117.817541, + 33.624041 + ], + [ + -117.817932, + 33.624488 + ], + [ + -117.81815, + 33.624916 + ], + [ + -117.81819, + 33.625298 + ], + [ + -117.81737, + 33.625664 + ], + [ + -117.817057, + 33.625997 + ], + [ + -117.816842, + 33.626459 + ], + [ + -117.816882, + 33.626841 + ], + [ + -117.817181, + 33.627016 + ], + [ + -117.817836, + 33.627114 + ], + [ + -117.818097, + 33.627023 + ], + [ + -117.818316, + 33.627242 + ], + [ + -117.818701, + 33.627338 + ], + [ + -117.819331, + 33.627468 + ], + [ + -117.819493, + 33.627092 + ], + [ + -117.819658, + 33.627149 + ], + [ + -117.820415, + 33.627248 + ], + [ + -117.821094, + 33.628321 + ], + [ + -117.822262, + 33.630039 + ], + [ + -117.823084, + 33.629588 + ], + [ + -117.823797, + 33.629432 + ], + [ + -117.824206, + 33.629313 + ], + [ + -117.82441, + 33.629232 + ], + [ + -117.824426, + 33.629249 + ], + [ + -117.824902, + 33.62975 + ], + [ + -117.825467, + 33.629464 + ], + [ + -117.825827, + 33.629259 + ], + [ + -117.825985, + 33.629051 + ], + [ + -117.826451, + 33.628678 + ], + [ + -117.826565, + 33.628214 + ], + [ + -117.826576, + 33.62779 + ], + [ + -117.826657, + 33.627462 + ], + [ + -117.82669, + 33.627326 + ], + [ + -117.827444, + 33.627553 + ], + [ + -117.827511, + 33.627575 + ], + [ + -117.827459, + 33.62786 + ], + [ + -117.827394, + 33.628186 + ], + [ + -117.827377, + 33.628271 + ], + [ + -117.827079, + 33.628885 + ], + [ + -117.82682, + 33.629337 + ], + [ + -117.826689, + 33.6296 + ], + [ + -117.826159, + 33.631611 + ], + [ + -117.825093, + 33.632043 + ], + [ + -117.824679, + 33.632374 + ], + [ + -117.824448, + 33.632808 + ], + [ + -117.824412, + 33.632877 + ], + [ + -117.82445, + 33.633344 + ], + [ + -117.824832, + 33.633737 + ], + [ + -117.823786, + 33.633625 + ], + [ + -117.823669, + 33.633613 + ], + [ + -117.822268, + 33.633072 + ], + [ + -117.821969, + 33.632909 + ], + [ + -117.822263, + 33.632557 + ], + [ + -117.822452, + 33.632331 + ], + [ + -117.821762, + 33.63164 + ], + [ + -117.821021, + 33.630989 + ], + [ + -117.819973, + 33.630418 + ], + [ + -117.819067, + 33.630231 + ], + [ + -117.818203, + 33.630342 + ], + [ + -117.817542, + 33.630456 + ], + [ + -117.817231, + 33.630705 + ], + [ + -117.817014, + 33.631121 + ], + [ + -117.815354, + 33.630534 + ], + [ + -117.815143, + 33.630464 + ], + [ + -117.814812, + 33.630361 + ], + [ + -117.815129, + 33.629746 + ], + [ + -117.815189, + 33.629329 + ], + [ + -117.815194, + 33.629291 + ], + [ + -117.815194, + 33.628671 + ], + [ + -117.814977, + 33.628225 + ], + [ + -117.814741, + 33.627818 + ], + [ + -117.814657, + 33.627673 + ], + [ + -117.81433, + 33.627416 + ], + [ + -117.813807, + 33.627199 + ], + [ + -117.812965, + 33.627094 + ], + [ + -117.811963, + 33.626986 + ], + [ + -117.810832, + 33.626776 + ], + [ + -117.8097, + 33.626097 + ], + [ + -117.809466, + 33.626215 + ], + [ + -117.809368, + 33.626723 + ], + [ + -117.8094, + 33.627075 + ], + [ + -117.809773, + 33.627258 + ], + [ + -117.809768, + 33.627434 + ], + [ + -117.80974, + 33.627679 + ], + [ + -117.809605, + 33.62801 + ], + [ + -117.809615, + 33.628026 + ], + [ + -117.809494, + 33.628217 + ], + [ + -117.809637, + 33.628357 + ], + [ + -117.809808, + 33.628345 + ], + [ + -117.809865, + 33.62844 + ], + [ + -117.809867, + 33.629211 + ], + [ + -117.809942, + 33.629436 + ], + [ + -117.809985, + 33.629566 + ], + [ + -117.809677, + 33.629611 + ], + [ + -117.808243, + 33.630128 + ], + [ + -117.805837, + 33.631533 + ], + [ + -117.805058, + 33.632029 + ], + [ + -117.803944, + 33.632364 + ], + [ + -117.802823, + 33.632574 + ], + [ + -117.801539, + 33.632044 + ], + [ + -117.801483, + 33.632045 + ], + [ + -117.801655, + 33.631419 + ], + [ + -117.802003, + 33.630722 + ], + [ + -117.802105, + 33.630255 + ], + [ + -117.803033, + 33.630411 + ], + [ + -117.803128, + 33.630532 + ], + [ + -117.803373, + 33.630566 + ], + [ + -117.80369, + 33.630587 + ], + [ + -117.803902, + 33.630547 + ], + [ + -117.804205, + 33.63042 + ], + [ + -117.804456, + 33.630292 + ], + [ + -117.804514, + 33.630087 + ], + [ + -117.804305, + 33.629504 + ], + [ + -117.803826, + 33.629122 + ], + [ + -117.803387, + 33.62889 + ], + [ + -117.80362, + 33.628522 + ], + [ + -117.803943, + 33.628439 + ], + [ + -117.804121, + 33.628368 + ], + [ + -117.804215, + 33.628164 + ], + [ + -117.804204, + 33.627913 + ], + [ + -117.803609, + 33.627292 + ], + [ + -117.80342, + 33.626927 + ], + [ + -117.803356, + 33.626803 + ], + [ + -117.803317, + 33.626763 + ], + [ + -117.802837, + 33.626272 + ], + [ + -117.802311, + 33.625963 + ], + [ + -117.80241, + 33.62564 + ], + [ + -117.802421, + 33.625603 + ], + [ + -117.802543, + 33.62558 + ], + [ + -117.802648, + 33.625582 + ], + [ + -117.803029, + 33.625825 + ], + [ + -117.803121, + 33.625679 + ], + [ + -117.803077, + 33.62548 + ], + [ + -117.803043, + 33.625324 + ], + [ + -117.802802, + 33.625113 + ], + [ + -117.802339, + 33.624958 + ], + [ + -117.802027, + 33.624735 + ], + [ + -117.801641, + 33.62446 + ], + [ + -117.8015, + 33.624443 + ], + [ + -117.801302, + 33.62442 + ], + [ + -117.80114, + 33.624078 + ], + [ + -117.800708, + 33.623774 + ], + [ + -117.800538, + 33.62355 + ], + [ + -117.800525, + 33.623387 + ], + [ + -117.800345, + 33.623277 + ], + [ + -117.799727, + 33.623199 + ], + [ + -117.799121, + 33.622547 + ], + [ + -117.799109, + 33.622534 + ], + [ + -117.799105, + 33.622373 + ], + [ + -117.799094, + 33.621948 + ], + [ + -117.798719, + 33.621715 + ], + [ + -117.798207, + 33.621811 + ], + [ + -117.798103, + 33.622115 + ], + [ + -117.797656, + 33.6222 + ], + [ + -117.797657, + 33.622384 + ], + [ + -117.797659, + 33.622666 + ], + [ + -117.79722, + 33.622418 + ], + [ + -117.796951, + 33.622386 + ], + [ + -117.796285, + 33.62232 + ], + [ + -117.796079, + 33.621743 + ], + [ + -117.795777, + 33.621138 + ], + [ + -117.795389, + 33.620811 + ], + [ + -117.795231, + 33.620573 + ], + [ + -117.795094, + 33.620401 + ], + [ + -117.795059, + 33.620231 + ], + [ + -117.795004, + 33.62001 + ], + [ + -117.794925, + 33.619941 + ], + [ + -117.794743, + 33.619954 + ], + [ + -117.794691, + 33.619973 + ], + [ + -117.794519, + 33.620035 + ], + [ + -117.794473, + 33.620253 + ], + [ + -117.7946, + 33.622313 + ], + [ + -117.794252, + 33.622253 + ], + [ + -117.793942, + 33.621955 + ], + [ + -117.793849, + 33.621327 + ], + [ + -117.793692, + 33.620685 + ], + [ + -117.793294, + 33.620132 + ], + [ + -117.792466, + 33.619379 + ], + [ + -117.792572, + 33.619211 + ], + [ + -117.792595, + 33.619159 + ], + [ + -117.792704, + 33.619003 + ], + [ + -117.792708, + 33.618846 + ], + [ + -117.792713, + 33.618653 + ], + [ + -117.79255, + 33.618527 + ], + [ + -117.792386, + 33.618384 + ], + [ + -117.792183, + 33.618188 + ], + [ + -117.791939, + 33.61792 + ], + [ + -117.791811, + 33.618005 + ], + [ + -117.791639, + 33.618177 + ], + [ + -117.791304, + 33.618223 + ], + [ + -117.791355, + 33.619058 + ], + [ + -117.791425, + 33.619504 + ], + [ + -117.791517, + 33.619646 + ], + [ + -117.79171, + 33.619764 + ], + [ + -117.791962, + 33.619903 + ], + [ + -117.792341, + 33.620086 + ], + [ + -117.792756, + 33.620614 + ], + [ + -117.792963, + 33.621163 + ], + [ + -117.792964, + 33.622373 + ], + [ + -117.793758, + 33.622887 + ], + [ + -117.794501, + 33.623017 + ], + [ + -117.795648, + 33.622946 + ], + [ + -117.796712, + 33.622967 + ], + [ + -117.797612, + 33.623211 + ], + [ + -117.797525, + 33.623635 + ], + [ + -117.797159, + 33.624 + ], + [ + -117.796877, + 33.624554 + ], + [ + -117.796416, + 33.624492 + ], + [ + -117.796038, + 33.624351 + ], + [ + -117.795876, + 33.624468 + ], + [ + -117.796039, + 33.624897 + ], + [ + -117.796401, + 33.625011 + ], + [ + -117.796775, + 33.625298 + ], + [ + -117.796958, + 33.625567 + ], + [ + -117.796745, + 33.62579 + ], + [ + -117.796705, + 33.626108 + ], + [ + -117.796954, + 33.626299 + ], + [ + -117.797406, + 33.626315 + ], + [ + -117.797697, + 33.627066 + ], + [ + -117.79764, + 33.627482 + ], + [ + -117.79738, + 33.627544 + ], + [ + -117.796825, + 33.627808 + ], + [ + -117.796387, + 33.627769 + ], + [ + -117.796269, + 33.62758 + ], + [ + -117.796234, + 33.627524 + ], + [ + -117.796213, + 33.62749 + ], + [ + -117.795849, + 33.627422 + ], + [ + -117.795489, + 33.627231 + ], + [ + -117.795129, + 33.627071 + ], + [ + -117.795074, + 33.627028 + ], + [ + -117.794664, + 33.626695 + ], + [ + -117.794315, + 33.626138 + ], + [ + -117.793599, + 33.625604 + ], + [ + -117.793275, + 33.625445 + ], + [ + -117.793022, + 33.625348 + ], + [ + -117.793013, + 33.625338 + ], + [ + -117.792703, + 33.625006 + ], + [ + -117.792672, + 33.624988 + ], + [ + -117.792487, + 33.624879 + ], + [ + -117.792169, + 33.624506 + ], + [ + -117.791925, + 33.624073 + ], + [ + -117.791687, + 33.62365 + ], + [ + -117.791647, + 33.623578 + ], + [ + -117.791507, + 33.623361 + ], + [ + -117.791344, + 33.623343 + ], + [ + -117.791004, + 33.623307 + ], + [ + -117.790815, + 33.623286 + ], + [ + -117.790734, + 33.62356 + ], + [ + -117.790653, + 33.623592 + ], + [ + -117.790143, + 33.623793 + ], + [ + -117.78992, + 33.623835 + ], + [ + -117.789703, + 33.623876 + ], + [ + -117.789285, + 33.624449 + ], + [ + -117.788953, + 33.624565 + ], + [ + -117.788763, + 33.624837 + ], + [ + -117.788612, + 33.625819 + ], + [ + -117.788325, + 33.625657 + ], + [ + -117.788184, + 33.625654 + ], + [ + -117.788023, + 33.625739 + ], + [ + -117.78788, + 33.62643 + ], + [ + -117.787979, + 33.626668 + ], + [ + -117.788297, + 33.627152 + ], + [ + -117.788537, + 33.627707 + ], + [ + -117.787858, + 33.628489 + ], + [ + -117.787248, + 33.62863 + ], + [ + -117.786412, + 33.628461 + ], + [ + -117.785975, + 33.628422 + ], + [ + -117.785784, + 33.628724 + ], + [ + -117.785162, + 33.628743 + ], + [ + -117.784654, + 33.628641 + ], + [ + -117.784385, + 33.628661 + ], + [ + -117.784246, + 33.628726 + ], + [ + -117.784165, + 33.628724 + ], + [ + -117.784019, + 33.628625 + ], + [ + -117.783849, + 33.628526 + ], + [ + -117.783676, + 33.628561 + ], + [ + -117.783387, + 33.628447 + ], + [ + -117.783246, + 33.628063 + ], + [ + -117.782623, + 33.628112 + ], + [ + -117.7822, + 33.628899 + ], + [ + -117.782352, + 33.629972 + ], + [ + -117.782989, + 33.631395 + ], + [ + -117.78334, + 33.631529 + ], + [ + -117.783522, + 33.631571 + ], + [ + -117.783752, + 33.631575 + ], + [ + -117.783927, + 33.631482 + ], + [ + -117.784178, + 33.631293 + ], + [ + -117.784077, + 33.630985 + ], + [ + -117.783691, + 33.630427 + ], + [ + -117.783414, + 33.629871 + ], + [ + -117.782737, + 33.629276 + ], + [ + -117.783038, + 33.62881 + ], + [ + -117.784186, + 33.629567 + ], + [ + -117.784762, + 33.629544 + ], + [ + -117.785291, + 33.629387 + ], + [ + -117.785654, + 33.629456 + ], + [ + -117.786457, + 33.629471 + ], + [ + -117.787117, + 33.629393 + ], + [ + -117.788029, + 33.62941 + ], + [ + -117.788713, + 33.629791 + ], + [ + -117.789392, + 33.630324 + ], + [ + -117.790773, + 33.630565 + ], + [ + -117.791262, + 33.630407 + ], + [ + -117.7916, + 33.630297 + ], + [ + -117.791732, + 33.630428 + ], + [ + -117.791851, + 33.630607 + ], + [ + -117.791849, + 33.630685 + ], + [ + -117.791845, + 33.630814 + ], + [ + -117.791913, + 33.631037 + ], + [ + -117.791636, + 33.631041 + ], + [ + -117.790506, + 33.630958 + ], + [ + -117.789437, + 33.631334 + ], + [ + -117.788278, + 33.630975 + ], + [ + -117.787032, + 33.631104 + ], + [ + -117.7864, + 33.63152 + ], + [ + -117.785551, + 33.631839 + ], + [ + -117.783721, + 33.632027 + ], + [ + -117.783608, + 33.632107 + ], + [ + -117.783344, + 33.632408 + ], + [ + -117.783586, + 33.632871 + ], + [ + -117.783595, + 33.633027 + ], + [ + -117.783308, + 33.633366 + ], + [ + -117.782868, + 33.63373 + ], + [ + -117.782654, + 33.633831 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950756, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.975775, + 33.906626 + ], + [ + -117.974542, + 33.906857 + ], + [ + -117.974328, + 33.906888 + ], + [ + -117.973957, + 33.906882 + ], + [ + -117.973963, + 33.906886 + ], + [ + -117.972486, + 33.906958 + ], + [ + -117.972163, + 33.906944 + ], + [ + -117.971628, + 33.906994 + ], + [ + -117.970956, + 33.906982 + ], + [ + -117.970103, + 33.906813 + ], + [ + -117.969369, + 33.9068 + ], + [ + -117.968455, + 33.906682 + ], + [ + -117.967537, + 33.906665 + ], + [ + -117.966803, + 33.906652 + ], + [ + -117.966363, + 33.907104 + ], + [ + -117.966355, + 33.90741 + ], + [ + -117.965254, + 33.90739 + ], + [ + -117.965152, + 33.906623 + ], + [ + -117.96454, + 33.906612 + ], + [ + -117.96399, + 33.906602 + ], + [ + -117.963617, + 33.906799 + ], + [ + -117.963424, + 33.907204 + ], + [ + -117.96317, + 33.907375 + ], + [ + -117.962858, + 33.907414 + ], + [ + -117.962257, + 33.907471 + ], + [ + -117.961939, + 33.907439 + ], + [ + -117.961666, + 33.907375 + ], + [ + -117.961102, + 33.90715 + ], + [ + -117.960563, + 33.906966 + ], + [ + -117.959943, + 33.906809 + ], + [ + -117.959007, + 33.906695 + ], + [ + -117.958093, + 33.906568 + ], + [ + -117.950406, + 33.906472 + ], + [ + -117.950114, + 33.906468 + ], + [ + -117.949942, + 33.906327 + ], + [ + -117.949206, + 33.90572 + ], + [ + -117.94903, + 33.905301 + ], + [ + -117.947024, + 33.905351 + ], + [ + -117.946957, + 33.905991 + ], + [ + -117.947639, + 33.906107 + ], + [ + -117.948058, + 33.906436 + ], + [ + -117.949119, + 33.906476 + ], + [ + -117.949011, + 33.907543 + ], + [ + -117.948353, + 33.908125 + ], + [ + -117.947795, + 33.907946 + ], + [ + -117.94682, + 33.90677 + ], + [ + -117.945222, + 33.905648 + ], + [ + -117.94369, + 33.905424 + ], + [ + -117.941885, + 33.904687 + ], + [ + -117.941154, + 33.903962 + ], + [ + -117.940621, + 33.903166 + ], + [ + -117.940489, + 33.902562 + ], + [ + -117.940426, + 33.902273 + ], + [ + -117.940687, + 33.901176 + ], + [ + -117.940955, + 33.900841 + ], + [ + -117.941146, + 33.90094 + ], + [ + -117.941302, + 33.90099 + ], + [ + -117.941507, + 33.900993 + ], + [ + -117.941527, + 33.900994 + ], + [ + -117.941944, + 33.900964 + ], + [ + -117.941946, + 33.90075 + ], + [ + -117.94195, + 33.900344 + ], + [ + -117.941956, + 33.89981 + ], + [ + -117.941958, + 33.89959 + ], + [ + -117.942234, + 33.899245 + ], + [ + -117.943828, + 33.899219 + ], + [ + -117.944992, + 33.899199 + ], + [ + -117.947253, + 33.899394 + ], + [ + -117.948588, + 33.900109 + ], + [ + -117.949705, + 33.900886 + ], + [ + -117.95007, + 33.901001 + ], + [ + -117.950389, + 33.901046 + ], + [ + -117.950581, + 33.900971 + ], + [ + -117.950917, + 33.900808 + ], + [ + -117.951225, + 33.90062 + ], + [ + -117.95166, + 33.900606 + ], + [ + -117.95249, + 33.899878 + ], + [ + -117.952914, + 33.900051 + ], + [ + -117.953549, + 33.90031 + ], + [ + -117.954791, + 33.900816 + ], + [ + -117.95525, + 33.901183 + ], + [ + -117.955458, + 33.901332 + ], + [ + -117.955564, + 33.901407 + ], + [ + -117.955764, + 33.901489 + ], + [ + -117.956, + 33.901523 + ], + [ + -117.956366, + 33.901513 + ], + [ + -117.956491, + 33.901509 + ], + [ + -117.957616, + 33.901429 + ], + [ + -117.958636, + 33.901322 + ], + [ + -117.959208, + 33.901344 + ], + [ + -117.959705, + 33.901382 + ], + [ + -117.960328, + 33.901339 + ], + [ + -117.960501, + 33.901327 + ], + [ + -117.960618, + 33.901389 + ], + [ + -117.960781, + 33.90151 + ], + [ + -117.960852, + 33.901664 + ], + [ + -117.960882, + 33.90173 + ], + [ + -117.960891, + 33.901742 + ], + [ + -117.961077, + 33.90201 + ], + [ + -117.961307, + 33.901907 + ], + [ + -117.961526, + 33.901777 + ], + [ + -117.962275, + 33.901336 + ], + [ + -117.962794, + 33.901381 + ], + [ + -117.963226, + 33.901061 + ], + [ + -117.963629, + 33.900802 + ], + [ + -117.964669, + 33.900332 + ], + [ + -117.964981, + 33.900311 + ], + [ + -117.965317, + 33.900551 + ], + [ + -117.965969, + 33.900641 + ], + [ + -117.966466, + 33.900676 + ], + [ + -117.966717, + 33.900628 + ], + [ + -117.967034, + 33.900374 + ], + [ + -117.967011, + 33.900062 + ], + [ + -117.967086, + 33.899595 + ], + [ + -117.967747, + 33.899321 + ], + [ + -117.968184, + 33.899277 + ], + [ + -117.968713, + 33.899286 + ], + [ + -117.969554, + 33.899301 + ], + [ + -117.969897, + 33.899282 + ], + [ + -117.970147, + 33.899234 + ], + [ + -117.970275, + 33.899201 + ], + [ + -117.970335, + 33.899185 + ], + [ + -117.970446, + 33.899116 + ], + [ + -117.970485, + 33.899025 + ], + [ + -117.971808, + 33.895946 + ], + [ + -117.972023, + 33.895931 + ], + [ + -117.971948, + 33.896583 + ], + [ + -117.97259, + 33.896621 + ], + [ + -117.972637, + 33.896266 + ], + [ + -117.972716, + 33.89566 + ], + [ + -117.97353, + 33.895671 + ], + [ + -117.976797, + 33.895712 + ], + [ + -117.97681, + 33.896441 + ], + [ + -117.976912, + 33.896569 + ], + [ + -117.977291, + 33.896742 + ], + [ + -117.977741, + 33.896909 + ], + [ + -117.978144, + 33.896884 + ], + [ + -117.97867, + 33.896756 + ], + [ + -117.979081, + 33.896692 + ], + [ + -117.979536, + 33.896848 + ], + [ + -117.980251, + 33.897238 + ], + [ + -117.98141, + 33.897147 + ], + [ + -117.981546, + 33.896613 + ], + [ + -117.981815, + 33.896627 + ], + [ + -117.982767, + 33.897937 + ], + [ + -117.983261, + 33.899102 + ], + [ + -117.982829, + 33.899077 + ], + [ + -117.982494, + 33.899071 + ], + [ + -117.982011, + 33.899001 + ], + [ + -117.981641, + 33.898901 + ], + [ + -117.980865, + 33.898638 + ], + [ + -117.980913, + 33.898235 + ], + [ + -117.980641, + 33.898105 + ], + [ + -117.980508, + 33.898042 + ], + [ + -117.979687, + 33.898089 + ], + [ + -117.979276, + 33.898144 + ], + [ + -117.978748, + 33.898414 + ], + [ + -117.978443, + 33.898689 + ], + [ + -117.978172, + 33.899057 + ], + [ + -117.978055, + 33.899272 + ], + [ + -117.977828, + 33.899423 + ], + [ + -117.977676, + 33.899514 + ], + [ + -117.977493, + 33.899417 + ], + [ + -117.977237, + 33.899226 + ], + [ + -117.977013, + 33.899222 + ], + [ + -117.976823, + 33.899374 + ], + [ + -117.976667, + 33.899651 + ], + [ + -117.976656, + 33.9001 + ], + [ + -117.976578, + 33.900133 + ], + [ + -117.976482, + 33.900081 + ], + [ + -117.976396, + 33.90009 + ], + [ + -117.976309, + 33.900135 + ], + [ + -117.976279, + 33.900196 + ], + [ + -117.9763, + 33.900269 + ], + [ + -117.976364, + 33.900304 + ], + [ + -117.976472, + 33.900312 + ], + [ + -117.97657, + 33.900266 + ], + [ + -117.976651, + 33.900269 + ], + [ + -117.976642, + 33.900614 + ], + [ + -117.977052, + 33.900621 + ], + [ + -117.977575, + 33.900569 + ], + [ + -117.978027, + 33.90039 + ], + [ + -117.978404, + 33.90021 + ], + [ + -117.978709, + 33.899936 + ], + [ + -117.978979, + 33.899568 + ], + [ + -117.979323, + 33.899232 + ], + [ + -117.979587, + 33.899082 + ], + [ + -117.979885, + 33.899087 + ], + [ + -117.98007, + 33.899152 + ], + [ + -117.980067, + 33.899277 + ], + [ + -117.979801, + 33.89949 + ], + [ + -117.97983, + 33.899801 + ], + [ + -117.98005, + 33.899929 + ], + [ + -117.980644, + 33.900033 + ], + [ + -117.981048, + 33.900226 + ], + [ + -117.980552, + 33.900684 + ], + [ + -117.980329, + 33.90068 + ], + [ + -117.979737, + 33.900514 + ], + [ + -117.979365, + 33.900507 + ], + [ + -117.978951, + 33.900655 + ], + [ + -117.978723, + 33.900838 + ], + [ + -117.97842, + 33.90105 + ], + [ + -117.97815, + 33.901387 + ], + [ + -117.97784, + 33.901878 + ], + [ + -117.978257, + 33.902045 + ], + [ + -117.977865, + 33.902345 + ], + [ + -117.977708, + 33.902454 + ], + [ + -117.977543, + 33.902781 + ], + [ + -117.977544, + 33.902781 + ], + [ + -117.976628, + 33.902831 + ], + [ + -117.976671, + 33.906567 + ], + [ + -117.976672, + 33.906609 + ], + [ + -117.976617, + 33.90663 + ], + [ + -117.976456, + 33.906634 + ], + [ + -117.976327, + 33.906634 + ], + [ + -117.97623, + 33.906634 + ], + [ + -117.976187, + 33.906622 + ], + [ + -117.976145, + 33.906594 + ], + [ + -117.976059, + 33.906594 + ], + [ + -117.976, + 33.906617 + ], + [ + -117.97593, + 33.906626 + ], + [ + -117.975775, + 33.906626 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950760, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.654073, + 33.646729 + ], + [ + -117.654129, + 33.645713 + ], + [ + -117.655078, + 33.644477 + ], + [ + -117.655781, + 33.643481 + ], + [ + -117.656334, + 33.642997 + ], + [ + -117.656561, + 33.642255 + ], + [ + -117.656611, + 33.642089 + ], + [ + -117.656087, + 33.641923 + ], + [ + -117.655785, + 33.642269 + ], + [ + -117.655638, + 33.642437 + ], + [ + -117.654968, + 33.643056 + ], + [ + -117.654177, + 33.643357 + ], + [ + -117.653421, + 33.64385 + ], + [ + -117.653313, + 33.643921 + ], + [ + -117.653051, + 33.644027 + ], + [ + -117.652809, + 33.643319 + ], + [ + -117.652616, + 33.643091 + ], + [ + -117.652505, + 33.642961 + ], + [ + -117.652114, + 33.642953 + ], + [ + -117.652033, + 33.642951 + ], + [ + -117.650443, + 33.64349 + ], + [ + -117.650303, + 33.643528 + ], + [ + -117.649702, + 33.643694 + ], + [ + -117.649141, + 33.64398 + ], + [ + -117.64853, + 33.644076 + ], + [ + -117.649088, + 33.64356 + ], + [ + -117.649355, + 33.643366 + ], + [ + -117.649875, + 33.64317 + ], + [ + -117.650565, + 33.642921 + ], + [ + -117.651148, + 33.642713 + ], + [ + -117.651578, + 33.64237 + ], + [ + -117.651777, + 33.642234 + ], + [ + -117.651887, + 33.642218 + ], + [ + -117.652665, + 33.642325 + ], + [ + -117.652743, + 33.641999 + ], + [ + -117.652804, + 33.641737 + ], + [ + -117.653049, + 33.641842 + ], + [ + -117.653854, + 33.641786 + ], + [ + -117.655368, + 33.641043 + ], + [ + -117.656804, + 33.640413 + ], + [ + -117.658258, + 33.639177 + ], + [ + -117.658498, + 33.638973 + ], + [ + -117.657353, + 33.638711 + ], + [ + -117.656386, + 33.638661 + ], + [ + -117.655819, + 33.638872 + ], + [ + -117.655378, + 33.639036 + ], + [ + -117.654594, + 33.639752 + ], + [ + -117.653838, + 33.640484 + ], + [ + -117.653463, + 33.64074 + ], + [ + -117.652608, + 33.640864 + ], + [ + -117.651845, + 33.640442 + ], + [ + -117.651756, + 33.640409 + ], + [ + -117.651693, + 33.639948 + ], + [ + -117.651522, + 33.639293 + ], + [ + -117.651721, + 33.639297 + ], + [ + -117.652309, + 33.638958 + ], + [ + -117.653334, + 33.638012 + ], + [ + -117.653505, + 33.637532 + ], + [ + -117.653266, + 33.636736 + ], + [ + -117.653021, + 33.636159 + ], + [ + -117.653186, + 33.635899 + ], + [ + -117.653592, + 33.635958 + ], + [ + -117.654441, + 33.63573 + ], + [ + -117.654815, + 33.635474 + ], + [ + -117.654623, + 33.63487 + ], + [ + -117.654182, + 33.634162 + ], + [ + -117.653867, + 33.633999 + ], + [ + -117.654265, + 33.632316 + ], + [ + -117.654936, + 33.632367 + ], + [ + -117.65563, + 33.632417 + ], + [ + -117.656229, + 33.632358 + ], + [ + -117.656379, + 33.632625 + ], + [ + -117.656374, + 33.632784 + ], + [ + -117.656368, + 33.632976 + ], + [ + -117.656156, + 33.63306 + ], + [ + -117.656044, + 33.633277 + ], + [ + -117.655728, + 33.63351 + ], + [ + -117.655888, + 33.633871 + ], + [ + -117.655931, + 33.633969 + ], + [ + -117.656347, + 33.634663 + ], + [ + -117.656418, + 33.63509 + ], + [ + -117.656383, + 33.635259 + ], + [ + -117.65627, + 33.6354 + ], + [ + -117.65617, + 33.63556 + ], + [ + -117.656256, + 33.635912 + ], + [ + -117.656468, + 33.636067 + ], + [ + -117.656803, + 33.636161 + ], + [ + -117.657844, + 33.635837 + ], + [ + -117.658276, + 33.635873 + ], + [ + -117.659097, + 33.636001 + ], + [ + -117.65913, + 33.636006 + ], + [ + -117.659462, + 33.635773 + ], + [ + -117.660243, + 33.635926 + ], + [ + -117.660425, + 33.635961 + ], + [ + -117.661323, + 33.636298 + ], + [ + -117.66162, + 33.636409 + ], + [ + -117.661811, + 33.63579 + ], + [ + -117.662116, + 33.635009 + ], + [ + -117.662183, + 33.634838 + ], + [ + -117.662493, + 33.634441 + ], + [ + -117.66254, + 33.634381 + ], + [ + -117.662389, + 33.634326 + ], + [ + -117.661895, + 33.634146 + ], + [ + -117.661314, + 33.634265 + ], + [ + -117.659756, + 33.634212 + ], + [ + -117.659651, + 33.63389 + ], + [ + -117.661909, + 33.633662 + ], + [ + -117.662439, + 33.633498 + ], + [ + -117.663042, + 33.633331 + ], + [ + -117.663317, + 33.632897 + ], + [ + -117.663454, + 33.632529 + ], + [ + -117.663633, + 33.632095 + ], + [ + -117.663276, + 33.631737 + ], + [ + -117.662015, + 33.631863 + ], + [ + -117.661708, + 33.631869 + ], + [ + -117.660965, + 33.631885 + ], + [ + -117.660653, + 33.631791 + ], + [ + -117.660661, + 33.631527 + ], + [ + -117.661241, + 33.631407 + ], + [ + -117.662076, + 33.631424 + ], + [ + -117.662237, + 33.631428 + ], + [ + -117.66303, + 33.631224 + ], + [ + -117.663145, + 33.630875 + ], + [ + -117.663055, + 33.63039 + ], + [ + -117.662592, + 33.630073 + ], + [ + -117.661757, + 33.629923 + ], + [ + -117.661233, + 33.629913 + ], + [ + -117.660554, + 33.629811 + ], + [ + -117.66033, + 33.629695 + ], + [ + -117.660081, + 33.629655 + ], + [ + -117.659828, + 33.629348 + ], + [ + -117.660364, + 33.628499 + ], + [ + -117.660641, + 33.628959 + ], + [ + -117.661191, + 33.628898 + ], + [ + -117.661362, + 33.628927 + ], + [ + -117.661719, + 33.628857 + ], + [ + -117.661855, + 33.62914 + ], + [ + -117.662254, + 33.629059 + ], + [ + -117.663125, + 33.629386 + ], + [ + -117.663804, + 33.629878 + ], + [ + -117.664375, + 33.630109 + ], + [ + -117.664381, + 33.630103 + ], + [ + -117.664591, + 33.629876 + ], + [ + -117.665133, + 33.62929 + ], + [ + -117.665206, + 33.629439 + ], + [ + -117.665323, + 33.629681 + ], + [ + -117.66536, + 33.629663 + ], + [ + -117.665746, + 33.629483 + ], + [ + -117.666006, + 33.629789 + ], + [ + -117.66605, + 33.629841 + ], + [ + -117.666193, + 33.629987 + ], + [ + -117.666104, + 33.630189 + ], + [ + -117.665669, + 33.630223 + ], + [ + -117.665219, + 33.630875 + ], + [ + -117.664909, + 33.631571 + ], + [ + -117.664843, + 33.632009 + ], + [ + -117.664768, + 33.6321 + ], + [ + -117.664528, + 33.632391 + ], + [ + -117.664267, + 33.632792 + ], + [ + -117.663768, + 33.633559 + ], + [ + -117.663887, + 33.634524 + ], + [ + -117.664103, + 33.634706 + ], + [ + -117.66416, + 33.634724 + ], + [ + -117.664168, + 33.634802 + ], + [ + -117.664199, + 33.635098 + ], + [ + -117.663962, + 33.635286 + ], + [ + -117.663735, + 33.635466 + ], + [ + -117.66353, + 33.63563 + ], + [ + -117.662888, + 33.636056 + ], + [ + -117.662407, + 33.636626 + ], + [ + -117.661587, + 33.637479 + ], + [ + -117.661073, + 33.638875 + ], + [ + -117.660354, + 33.640135 + ], + [ + -117.659575, + 33.639855 + ], + [ + -117.659099, + 33.639977 + ], + [ + -117.658607, + 33.64067 + ], + [ + -117.658479, + 33.641459 + ], + [ + -117.658411, + 33.641985 + ], + [ + -117.658191, + 33.642332 + ], + [ + -117.658123, + 33.642858 + ], + [ + -117.657795, + 33.64329 + ], + [ + -117.657138, + 33.6442 + ], + [ + -117.657124, + 33.644683 + ], + [ + -117.656958, + 33.644987 + ], + [ + -117.656507, + 33.646033 + ], + [ + -117.656229, + 33.646554 + ], + [ + -117.655838, + 33.646521 + ], + [ + -117.655549, + 33.646496 + ], + [ + -117.655138, + 33.646395 + ], + [ + -117.654901, + 33.646756 + ], + [ + -117.654524, + 33.647266 + ], + [ + -117.654055, + 33.6478 + ], + [ + -117.653404, + 33.648392 + ], + [ + -117.652678, + 33.648971 + ], + [ + -117.651968, + 33.649536 + ], + [ + -117.651967, + 33.649537 + ], + [ + -117.651419, + 33.649929 + ], + [ + -117.650749, + 33.650408 + ], + [ + -117.650147, + 33.650863 + ], + [ + -117.649979, + 33.651007 + ], + [ + -117.649729, + 33.651221 + ], + [ + -117.649211, + 33.651817 + ], + [ + -117.649189, + 33.651843 + ], + [ + -117.649173, + 33.651826 + ], + [ + -117.648892, + 33.651544 + ], + [ + -117.649198, + 33.651216 + ], + [ + -117.649879, + 33.650485 + ], + [ + -117.649976, + 33.65038 + ], + [ + -117.651277, + 33.649001 + ], + [ + -117.651918, + 33.648618 + ], + [ + -117.652939, + 33.647805 + ], + [ + -117.654073, + 33.646729 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950762, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.753589, + 33.868044 + ], + [ + -117.753315, + 33.867396 + ], + [ + -117.753652, + 33.86676 + ], + [ + -117.753771, + 33.866319 + ], + [ + -117.753809, + 33.866233 + ], + [ + -117.753886, + 33.866206 + ], + [ + -117.753952, + 33.866103 + ], + [ + -117.754205, + 33.865639 + ], + [ + -117.75428, + 33.865553 + ], + [ + -117.754594, + 33.864777 + ], + [ + -117.754575, + 33.864698 + ], + [ + -117.754527, + 33.864558 + ], + [ + -117.754358, + 33.864336 + ], + [ + -117.753889, + 33.864016 + ], + [ + -117.753797, + 33.863526 + ], + [ + -117.753916, + 33.863063 + ], + [ + -117.754373, + 33.86192 + ], + [ + -117.754409, + 33.86161 + ], + [ + -117.753997, + 33.861136 + ], + [ + -117.753553, + 33.860906 + ], + [ + -117.752663, + 33.860467 + ], + [ + -117.751947, + 33.860431 + ], + [ + -117.751611, + 33.860114 + ], + [ + -117.751217, + 33.859973 + ], + [ + -117.750318, + 33.859844 + ], + [ + -117.750023, + 33.859927 + ], + [ + -117.748956, + 33.860106 + ], + [ + -117.748574, + 33.860497 + ], + [ + -117.748611, + 33.86103 + ], + [ + -117.747836, + 33.861236 + ], + [ + -117.74747, + 33.861029 + ], + [ + -117.746886, + 33.860087 + ], + [ + -117.746451, + 33.859524 + ], + [ + -117.746958, + 33.859423 + ], + [ + -117.747622, + 33.859436 + ], + [ + -117.748919, + 33.859551 + ], + [ + -117.750056, + 33.859706 + ], + [ + -117.750777, + 33.859565 + ], + [ + -117.751636, + 33.859228 + ], + [ + -117.753103, + 33.858969 + ], + [ + -117.754064, + 33.85881 + ], + [ + -117.754053, + 33.858234 + ], + [ + -117.754019, + 33.857559 + ], + [ + -117.753663, + 33.857042 + ], + [ + -117.753675, + 33.856621 + ], + [ + -117.753667, + 33.856276 + ], + [ + -117.753663, + 33.856089 + ], + [ + -117.753551, + 33.855377 + ], + [ + -117.753355, + 33.854797 + ], + [ + -117.753045, + 33.854481 + ], + [ + -117.752706, + 33.854275 + ], + [ + -117.752648, + 33.853718 + ], + [ + -117.752581, + 33.853075 + ], + [ + -117.752572, + 33.852653 + ], + [ + -117.752547, + 33.851456 + ], + [ + -117.752305, + 33.850653 + ], + [ + -117.751763, + 33.849157 + ], + [ + -117.751505, + 33.848886 + ], + [ + -117.751363, + 33.848715 + ], + [ + -117.7513, + 33.848638 + ], + [ + -117.751228, + 33.84838 + ], + [ + -117.750834, + 33.848217 + ], + [ + -117.749897, + 33.848509 + ], + [ + -117.749542, + 33.848856 + ], + [ + -117.748742, + 33.848996 + ], + [ + -117.74821, + 33.849052 + ], + [ + -117.747637, + 33.849154 + ], + [ + -117.747609, + 33.849159 + ], + [ + -117.747543, + 33.849171 + ], + [ + -117.747135, + 33.849496 + ], + [ + -117.746374, + 33.850123 + ], + [ + -117.745539, + 33.85055 + ], + [ + -117.744713, + 33.850955 + ], + [ + -117.74428, + 33.851257 + ], + [ + -117.743617, + 33.851221 + ], + [ + -117.742957, + 33.851097 + ], + [ + -117.742935, + 33.850942 + ], + [ + -117.742987, + 33.850056 + ], + [ + -117.743835, + 33.849164 + ], + [ + -117.743971, + 33.849034 + ], + [ + -117.745106, + 33.849256 + ], + [ + -117.745061, + 33.848967 + ], + [ + -117.744801, + 33.848784 + ], + [ + -117.744037, + 33.848592 + ], + [ + -117.743568, + 33.848294 + ], + [ + -117.744124, + 33.847397 + ], + [ + -117.744243, + 33.846955 + ], + [ + -117.74424, + 33.846135 + ], + [ + -117.744733, + 33.845591 + ], + [ + -117.744845, + 33.845394 + ], + [ + -117.744701, + 33.844859 + ], + [ + -117.744416, + 33.844609 + ], + [ + -117.744369, + 33.844387 + ], + [ + -117.744402, + 33.844166 + ], + [ + -117.744933, + 33.844154 + ], + [ + -117.745446, + 33.844785 + ], + [ + -117.745934, + 33.845371 + ], + [ + -117.746242, + 33.845709 + ], + [ + -117.746415, + 33.846178 + ], + [ + -117.746698, + 33.846494 + ], + [ + -117.747014, + 33.846589 + ], + [ + -117.747364, + 33.846419 + ], + [ + -117.747556, + 33.846201 + ], + [ + -117.747904, + 33.846097 + ], + [ + -117.748217, + 33.846281 + ], + [ + -117.74842, + 33.846617 + ], + [ + -117.749017, + 33.847072 + ], + [ + -117.749043, + 33.847095 + ], + [ + -117.749306, + 33.847167 + ], + [ + -117.749714, + 33.84682 + ], + [ + -117.750098, + 33.846407 + ], + [ + -117.750424, + 33.846147 + ], + [ + -117.750803, + 33.845889 + ], + [ + -117.751651, + 33.845905 + ], + [ + -117.751882, + 33.846176 + ], + [ + -117.752439, + 33.846209 + ], + [ + -117.751947, + 33.846709 + ], + [ + -117.752522, + 33.847031 + ], + [ + -117.752898, + 33.846861 + ], + [ + -117.753218, + 33.846801 + ], + [ + -117.75349, + 33.846585 + ], + [ + -117.754401, + 33.846292 + ], + [ + -117.754953, + 33.846481 + ], + [ + -117.754972, + 33.846725 + ], + [ + -117.75475, + 33.847075 + ], + [ + -117.754557, + 33.847315 + ], + [ + -117.754317, + 33.848286 + ], + [ + -117.754469, + 33.848577 + ], + [ + -117.754999, + 33.848587 + ], + [ + -117.755473, + 33.84873 + ], + [ + -117.755122, + 33.848922 + ], + [ + -117.754773, + 33.849071 + ], + [ + -117.754445, + 33.849397 + ], + [ + -117.754073, + 33.849434 + ], + [ + -117.7537, + 33.849448 + ], + [ + -117.754285, + 33.850369 + ], + [ + -117.754303, + 33.850657 + ], + [ + -117.754735, + 33.850422 + ], + [ + -117.755231, + 33.849767 + ], + [ + -117.756123, + 33.849186 + ], + [ + -117.756343, + 33.848946 + ], + [ + -117.756591, + 33.848597 + ], + [ + -117.756883, + 33.848602 + ], + [ + -117.757573, + 33.848594 + ], + [ + -117.757839, + 33.8484 + ], + [ + -117.757858, + 33.847735 + ], + [ + -117.760078, + 33.848067 + ], + [ + -117.760775, + 33.848746 + ], + [ + -117.761165, + 33.849064 + ], + [ + -117.761766, + 33.849386 + ], + [ + -117.76197, + 33.849678 + ], + [ + -117.762091, + 33.850102 + ], + [ + -117.761688, + 33.850271 + ], + [ + -117.761269, + 33.850063 + ], + [ + -117.760979, + 33.849991 + ], + [ + -117.760298, + 33.849667 + ], + [ + -117.759612, + 33.849521 + ], + [ + -117.758897, + 33.849485 + ], + [ + -117.758031, + 33.850066 + ], + [ + -117.757223, + 33.850471 + ], + [ + -117.756994, + 33.850469 + ], + [ + -117.756391, + 33.850787 + ], + [ + -117.755634, + 33.851282 + ], + [ + -117.754965, + 33.851469 + ], + [ + -117.754791, + 33.851997 + ], + [ + -117.755145, + 33.852625 + ], + [ + -117.755498, + 33.853252 + ], + [ + -117.755884, + 33.853703 + ], + [ + -117.756006, + 33.854061 + ], + [ + -117.755598, + 33.854407 + ], + [ + -117.755319, + 33.854911 + ], + [ + -117.75579, + 33.856073 + ], + [ + -117.756263, + 33.857178 + ], + [ + -117.756561, + 33.857893 + ], + [ + -117.756987, + 33.858788 + ], + [ + -117.75744, + 33.858753 + ], + [ + -117.757921, + 33.858629 + ], + [ + -117.758018, + 33.858942 + ], + [ + -117.75803, + 33.859452 + ], + [ + -117.758013, + 33.860072 + ], + [ + -117.758181, + 33.860696 + ], + [ + -117.758379, + 33.861188 + ], + [ + -117.758791, + 33.861661 + ], + [ + -117.759206, + 33.86198 + ], + [ + -117.759659, + 33.861944 + ], + [ + -117.760015, + 33.862461 + ], + [ + -117.759872, + 33.862835 + ], + [ + -117.760277, + 33.863553 + ], + [ + -117.760611, + 33.863936 + ], + [ + -117.760572, + 33.864368 + ], + [ + -117.76071, + 33.864508 + ], + [ + -117.760685, + 33.864623 + ], + [ + -117.760754, + 33.864796 + ], + [ + -117.760782, + 33.864974 + ], + [ + -117.760856, + 33.86525 + ], + [ + -117.760849, + 33.865496 + ], + [ + -117.76118, + 33.865695 + ], + [ + -117.761303, + 33.865704 + ], + [ + -117.761526, + 33.865688 + ], + [ + -117.761681, + 33.865711 + ], + [ + -117.762053, + 33.865946 + ], + [ + -117.761792, + 33.866167 + ], + [ + -117.761599, + 33.866363 + ], + [ + -117.761191, + 33.866776 + ], + [ + -117.760745, + 33.86715 + ], + [ + -117.760674, + 33.867209 + ], + [ + -117.760349, + 33.867446 + ], + [ + -117.759998, + 33.867639 + ], + [ + -117.759546, + 33.867697 + ], + [ + -117.759013, + 33.867753 + ], + [ + -117.758323, + 33.867739 + ], + [ + -117.757501, + 33.8677 + ], + [ + -117.756626, + 33.867661 + ], + [ + -117.755989, + 33.867671 + ], + [ + -117.754414, + 33.867972 + ], + [ + -117.753589, + 33.868044 + ] + ] + ] + }, + "properties": { + "name": "Deer Canyon Park Preserve", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950790, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.773935, + 33.667377 + ], + [ + -117.77359, + 33.667143 + ], + [ + -117.773326, + 33.66748 + ], + [ + -117.773184, + 33.667645 + ], + [ + -117.770442, + 33.665774 + ], + [ + -117.771317, + 33.664846 + ], + [ + -117.771764, + 33.664381 + ], + [ + -117.772104, + 33.664025 + ], + [ + -117.772286, + 33.663826 + ], + [ + -117.772904, + 33.664468 + ], + [ + -117.773163, + 33.664679 + ], + [ + -117.773121, + 33.66472 + ], + [ + -117.773154, + 33.664802 + ], + [ + -117.773347, + 33.664911 + ], + [ + -117.773269, + 33.665017 + ], + [ + -117.773452, + 33.665392 + ], + [ + -117.773769, + 33.665893 + ], + [ + -117.774049, + 33.666159 + ], + [ + -117.774376, + 33.666366 + ], + [ + -117.774252, + 33.666469 + ], + [ + -117.773864, + 33.666792 + ], + [ + -117.775665, + 33.667997 + ], + [ + -117.777017, + 33.668677 + ], + [ + -117.777862, + 33.669101 + ], + [ + -117.778942, + 33.669561 + ], + [ + -117.779748, + 33.67042 + ], + [ + -117.78013, + 33.670827 + ], + [ + -117.781371, + 33.671729 + ], + [ + -117.781872, + 33.672024 + ], + [ + -117.782868, + 33.672609 + ], + [ + -117.784218, + 33.673402 + ], + [ + -117.784514, + 33.67358 + ], + [ + -117.783939, + 33.674168 + ], + [ + -117.780596, + 33.671899 + ], + [ + -117.780156, + 33.6716 + ], + [ + -117.773935, + 33.667377 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950807, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.848232, + 33.641471 + ], + [ + -117.847516, + 33.641259 + ], + [ + -117.846839, + 33.641197 + ], + [ + -117.846378, + 33.641322 + ], + [ + -117.84612, + 33.641404 + ], + [ + -117.845437, + 33.641542 + ], + [ + -117.845073, + 33.64153 + ], + [ + -117.844825, + 33.641522 + ], + [ + -117.844133, + 33.641585 + ], + [ + -117.842838, + 33.642047 + ], + [ + -117.842842, + 33.641601 + ], + [ + -117.842983, + 33.64099 + ], + [ + -117.843416, + 33.64026 + ], + [ + -117.84527, + 33.637097 + ], + [ + -117.844941, + 33.636416 + ], + [ + -117.844322, + 33.636002 + ], + [ + -117.844568, + 33.635465 + ], + [ + -117.8444, + 33.634892 + ], + [ + -117.844618, + 33.634429 + ], + [ + -117.844239, + 33.634013 + ], + [ + -117.843853, + 33.633932 + ], + [ + -117.84296, + 33.633706 + ], + [ + -117.843322, + 33.63337 + ], + [ + -117.843327, + 33.633207 + ], + [ + -117.843156, + 33.632998 + ], + [ + -117.842116, + 33.632373 + ], + [ + -117.841779, + 33.632455 + ], + [ + -117.840833, + 33.632909 + ], + [ + -117.840407, + 33.633048 + ], + [ + -117.840018, + 33.633071 + ], + [ + -117.8397, + 33.633123 + ], + [ + -117.839089, + 33.633689 + ], + [ + -117.838829, + 33.633563 + ], + [ + -117.838095, + 33.633206 + ], + [ + -117.837637, + 33.632984 + ], + [ + -117.838082, + 33.632885 + ], + [ + -117.839101, + 33.63265 + ], + [ + -117.840329, + 33.632165 + ], + [ + -117.840451, + 33.632117 + ], + [ + -117.84125, + 33.631801 + ], + [ + -117.841865, + 33.631516 + ], + [ + -117.841887, + 33.631476 + ], + [ + -117.84192, + 33.631419 + ], + [ + -117.842736, + 33.631562 + ], + [ + -117.843189, + 33.630888 + ], + [ + -117.843529, + 33.630394 + ], + [ + -117.843633, + 33.630365 + ], + [ + -117.844131, + 33.630224 + ], + [ + -117.843505, + 33.629257 + ], + [ + -117.843635, + 33.629027 + ], + [ + -117.844418, + 33.627636 + ], + [ + -117.844394, + 33.626544 + ], + [ + -117.844078, + 33.626227 + ], + [ + -117.844024, + 33.626173 + ], + [ + -117.844051, + 33.625909 + ], + [ + -117.844054, + 33.625783 + ], + [ + -117.843984, + 33.625593 + ], + [ + -117.843765, + 33.625368 + ], + [ + -117.843711, + 33.625257 + ], + [ + -117.843828, + 33.625133 + ], + [ + -117.843907, + 33.624977 + ], + [ + -117.84395, + 33.624773 + ], + [ + -117.843898, + 33.624599 + ], + [ + -117.843774, + 33.624345 + ], + [ + -117.843623, + 33.624342 + ], + [ + -117.843495, + 33.624213 + ], + [ + -117.843523, + 33.623867 + ], + [ + -117.843549, + 33.623616 + ], + [ + -117.843405, + 33.623377 + ], + [ + -117.842849, + 33.623051 + ], + [ + -117.842569, + 33.622999 + ], + [ + -117.842482, + 33.622745 + ], + [ + -117.842455, + 33.622319 + ], + [ + -117.842309, + 33.622175 + ], + [ + -117.842008, + 33.622169 + ], + [ + -117.841727, + 33.622132 + ], + [ + -117.84141, + 33.622016 + ], + [ + -117.841221, + 33.622059 + ], + [ + -117.841026, + 33.622387 + ], + [ + -117.840973, + 33.622475 + ], + [ + -117.840942, + 33.622318 + ], + [ + -117.840782, + 33.621516 + ], + [ + -117.841172, + 33.621159 + ], + [ + -117.841247, + 33.620387 + ], + [ + -117.841151, + 33.619931 + ], + [ + -117.840473, + 33.618917 + ], + [ + -117.839738, + 33.617947 + ], + [ + -117.8397, + 33.617355 + ], + [ + -117.839004, + 33.617221 + ], + [ + -117.838993, + 33.617202 + ], + [ + -117.838725, + 33.616915 + ], + [ + -117.838397, + 33.616634 + ], + [ + -117.838208, + 33.616336 + ], + [ + -117.838, + 33.616149 + ], + [ + -117.837658, + 33.615638 + ], + [ + -117.837626, + 33.615237 + ], + [ + -117.837544, + 33.614534 + ], + [ + -117.837103, + 33.614549 + ], + [ + -117.836799, + 33.61447 + ], + [ + -117.83668, + 33.614453 + ], + [ + -117.836113, + 33.614375 + ], + [ + -117.836122, + 33.614128 + ], + [ + -117.836273, + 33.614072 + ], + [ + -117.836819, + 33.613985 + ], + [ + -117.83732, + 33.613802 + ], + [ + -117.837805, + 33.61343 + ], + [ + -117.83863, + 33.613289 + ], + [ + -117.839294, + 33.614101 + ], + [ + -117.839783, + 33.6145 + ], + [ + -117.839941, + 33.614685 + ], + [ + -117.841042, + 33.612158 + ], + [ + -117.840759, + 33.611774 + ], + [ + -117.840816, + 33.611344 + ], + [ + -117.840993, + 33.611083 + ], + [ + -117.841188, + 33.610796 + ], + [ + -117.840852, + 33.609864 + ], + [ + -117.839814, + 33.606982 + ], + [ + -117.839872, + 33.606585 + ], + [ + -117.839964, + 33.605859 + ], + [ + -117.838601, + 33.60606 + ], + [ + -117.837789, + 33.606359 + ], + [ + -117.837427, + 33.606318 + ], + [ + -117.837345, + 33.606309 + ], + [ + -117.837363, + 33.606274 + ], + [ + -117.83746, + 33.606084 + ], + [ + -117.837367, + 33.605491 + ], + [ + -117.83693, + 33.605612 + ], + [ + -117.836634, + 33.605567 + ], + [ + -117.836096, + 33.605455 + ], + [ + -117.835872, + 33.605526 + ], + [ + -117.835753, + 33.605828 + ], + [ + -117.835891, + 33.606234 + ], + [ + -117.834669, + 33.606214 + ], + [ + -117.834272, + 33.606549 + ], + [ + -117.834219, + 33.606785 + ], + [ + -117.834178, + 33.607088 + ], + [ + -117.834191, + 33.607357 + ], + [ + -117.834263, + 33.607552 + ], + [ + -117.833494, + 33.607943 + ], + [ + -117.832503, + 33.608312 + ], + [ + -117.831962, + 33.608374 + ], + [ + -117.831899, + 33.608007 + ], + [ + -117.832029, + 33.607246 + ], + [ + -117.831821, + 33.606876 + ], + [ + -117.831349, + 33.606806 + ], + [ + -117.83084, + 33.606797 + ], + [ + -117.830333, + 33.606695 + ], + [ + -117.830015, + 33.606323 + ], + [ + -117.82966, + 33.606011 + ], + [ + -117.829223, + 33.606003 + ], + [ + -117.828412, + 33.605982 + ], + [ + -117.828239, + 33.606144 + ], + [ + -117.827734, + 33.605852 + ], + [ + -117.828299, + 33.605162 + ], + [ + -117.829007, + 33.604575 + ], + [ + -117.829795, + 33.604632 + ], + [ + -117.830387, + 33.604643 + ], + [ + -117.831228, + 33.604576 + ], + [ + -117.831526, + 33.604499 + ], + [ + -117.832118, + 33.604511 + ], + [ + -117.832757, + 33.604606 + ], + [ + -117.832947, + 33.604899 + ], + [ + -117.833393, + 33.604825 + ], + [ + -117.834795, + 33.604107 + ], + [ + -117.834814, + 33.603405 + ], + [ + -117.834181, + 33.603103 + ], + [ + -117.833945, + 33.602685 + ], + [ + -117.83348, + 33.601642 + ], + [ + -117.833496, + 33.601064 + ], + [ + -117.833019, + 33.600434 + ], + [ + -117.83357, + 33.600155 + ], + [ + -117.834592, + 33.600671 + ], + [ + -117.835308, + 33.601595 + ], + [ + -117.836183, + 33.602066 + ], + [ + -117.837073, + 33.602001 + ], + [ + -117.837714, + 33.602054 + ], + [ + -117.838446, + 33.602357 + ], + [ + -117.839032, + 33.602576 + ], + [ + -117.840067, + 33.602637 + ], + [ + -117.840857, + 33.602652 + ], + [ + -117.841397, + 33.602745 + ], + [ + -117.841459, + 33.602291 + ], + [ + -117.841221, + 33.601956 + ], + [ + -117.840459, + 33.600949 + ], + [ + -117.839241, + 33.600347 + ], + [ + -117.838406, + 33.600206 + ], + [ + -117.838124, + 33.599664 + ], + [ + -117.837545, + 33.599198 + ], + [ + -117.837603, + 33.598868 + ], + [ + -117.837961, + 33.59842 + ], + [ + -117.837979, + 33.597759 + ], + [ + -117.837898, + 33.597096 + ], + [ + -117.837817, + 33.596432 + ], + [ + -117.837248, + 33.595594 + ], + [ + -117.837449, + 33.595474 + ], + [ + -117.838161, + 33.59533 + ], + [ + -117.839428, + 33.595934 + ], + [ + -117.840156, + 33.596472 + ], + [ + -117.840272, + 33.596601 + ], + [ + -117.840081, + 33.59681 + ], + [ + -117.840141, + 33.596885 + ], + [ + -117.840216, + 33.597034 + ], + [ + -117.840275, + 33.597161 + ], + [ + -117.840246, + 33.597235 + ], + [ + -117.840244, + 33.597316 + ], + [ + -117.84045, + 33.597543 + ], + [ + -117.840511, + 33.597558 + ], + [ + -117.840728, + 33.597726 + ], + [ + -117.840769, + 33.597845 + ], + [ + -117.840756, + 33.598008 + ], + [ + -117.84075, + 33.598208 + ], + [ + -117.840774, + 33.598312 + ], + [ + -117.840788, + 33.598453 + ], + [ + -117.840853, + 33.598639 + ], + [ + -117.840894, + 33.59878 + ], + [ + -117.841038, + 33.599005 + ], + [ + -117.841116, + 33.599081 + ], + [ + -117.841247, + 33.599113 + ], + [ + -117.841451, + 33.599102 + ], + [ + -117.841602, + 33.599068 + ], + [ + -117.841791, + 33.598953 + ], + [ + -117.842058, + 33.59882 + ], + [ + -117.842526, + 33.599334 + ], + [ + -117.843108, + 33.599717 + ], + [ + -117.843386, + 33.600384 + ], + [ + -117.844003, + 33.601306 + ], + [ + -117.845125, + 33.601782 + ], + [ + -117.847328, + 33.601959 + ], + [ + -117.848332, + 33.602941 + ], + [ + -117.848778, + 33.603075 + ], + [ + -117.849297, + 33.603176 + ], + [ + -117.849829, + 33.603211 + ], + [ + -117.850098, + 33.603174 + ], + [ + -117.851129, + 33.602434 + ], + [ + -117.851672, + 33.602444 + ], + [ + -117.8529, + 33.602674 + ], + [ + -117.853847, + 33.60232 + ], + [ + -117.8539, + 33.601711 + ], + [ + -117.854087, + 33.601714 + ], + [ + -117.854163, + 33.601603 + ], + [ + -117.854194, + 33.601379 + ], + [ + -117.85432, + 33.601218 + ], + [ + -117.854469, + 33.601119 + ], + [ + -117.854582, + 33.601009 + ], + [ + -117.854694, + 33.600919 + ], + [ + -117.854782, + 33.600819 + ], + [ + -117.854785, + 33.600707 + ], + [ + -117.854726, + 33.600644 + ], + [ + -117.85458, + 33.600631 + ], + [ + -117.854358, + 33.600709 + ], + [ + -117.85422, + 33.600849 + ], + [ + -117.85384, + 33.600944 + ], + [ + -117.853836, + 33.600914 + ], + [ + -117.853663, + 33.600001 + ], + [ + -117.854553, + 33.599935 + ], + [ + -117.855259, + 33.599411 + ], + [ + -117.855285, + 33.59936 + ], + [ + -117.855656, + 33.59863 + ], + [ + -117.855804, + 33.598633 + ], + [ + -117.855936, + 33.598635 + ], + [ + -117.856048, + 33.598637 + ], + [ + -117.856146, + 33.598598 + ], + [ + -117.856115, + 33.598404 + ], + [ + -117.856047, + 33.598209 + ], + [ + -117.855957, + 33.597941 + ], + [ + -117.855909, + 33.597696 + ], + [ + -117.855899, + 33.597645 + ], + [ + -117.856006, + 33.597659 + ], + [ + -117.856636, + 33.597741 + ], + [ + -117.857239, + 33.597774 + ], + [ + -117.858418, + 33.596994 + ], + [ + -117.858692, + 33.59695 + ], + [ + -117.859007, + 33.596797 + ], + [ + -117.859212, + 33.596733 + ], + [ + -117.859456, + 33.596692 + ], + [ + -117.859675, + 33.596583 + ], + [ + -117.859727, + 33.596507 + ], + [ + -117.861051, + 33.596295 + ], + [ + -117.863472, + 33.596342 + ], + [ + -117.863707, + 33.596456 + ], + [ + -117.862255, + 33.598027 + ], + [ + -117.86206, + 33.598066 + ], + [ + -117.86094, + 33.598092 + ], + [ + -117.86072, + 33.598 + ], + [ + -117.860326, + 33.597942 + ], + [ + -117.860001, + 33.597969 + ], + [ + -117.859685, + 33.598031 + ], + [ + -117.859309, + 33.59813 + ], + [ + -117.858095, + 33.59891 + ], + [ + -117.856272, + 33.601526 + ], + [ + -117.855252, + 33.604106 + ], + [ + -117.853848, + 33.605441 + ], + [ + -117.852666, + 33.605978 + ], + [ + -117.85065, + 33.606499 + ], + [ + -117.850628, + 33.607302 + ], + [ + -117.850503, + 33.607289 + ], + [ + -117.850224, + 33.607261 + ], + [ + -117.846012, + 33.60683 + ], + [ + -117.845008, + 33.606632 + ], + [ + -117.844519, + 33.606536 + ], + [ + -117.841929, + 33.606026 + ], + [ + -117.841604, + 33.606361 + ], + [ + -117.841663, + 33.606947 + ], + [ + -117.841691, + 33.607219 + ], + [ + -117.841519, + 33.607908 + ], + [ + -117.841501, + 33.608124 + ], + [ + -117.84148, + 33.608374 + ], + [ + -117.84132, + 33.608416 + ], + [ + -117.841235, + 33.608592 + ], + [ + -117.841606, + 33.610149 + ], + [ + -117.841736, + 33.610692 + ], + [ + -117.841743, + 33.610696 + ], + [ + -117.842065, + 33.610877 + ], + [ + -117.844067, + 33.615296 + ], + [ + -117.844458, + 33.61616 + ], + [ + -117.844462, + 33.616193 + ], + [ + -117.844905, + 33.620055 + ], + [ + -117.84453, + 33.6214 + ], + [ + -117.845648, + 33.623234 + ], + [ + -117.845763, + 33.624378 + ], + [ + -117.846256, + 33.62713 + ], + [ + -117.847308, + 33.628036 + ], + [ + -117.847525, + 33.628804 + ], + [ + -117.847756, + 33.629179 + ], + [ + -117.847708, + 33.629474 + ], + [ + -117.847718, + 33.629794 + ], + [ + -117.847883, + 33.630053 + ], + [ + -117.848126, + 33.630266 + ], + [ + -117.848352, + 33.630398 + ], + [ + -117.848632, + 33.630354 + ], + [ + -117.849878, + 33.63002 + ], + [ + -117.850103, + 33.629954 + ], + [ + -117.850395, + 33.629959 + ], + [ + -117.850998, + 33.629955 + ], + [ + -117.85101, + 33.630185 + ], + [ + -117.850802, + 33.630874 + ], + [ + -117.850839, + 33.631253 + ], + [ + -117.850947, + 33.631604 + ], + [ + -117.851166, + 33.631908 + ], + [ + -117.851561, + 33.632154 + ], + [ + -117.8517, + 33.632307 + ], + [ + -117.851935, + 33.63248 + ], + [ + -117.852178, + 33.632696 + ], + [ + -117.852739, + 33.632915 + ], + [ + -117.852941, + 33.633082 + ], + [ + -117.8532, + 33.633165 + ], + [ + -117.854062, + 33.634204 + ], + [ + -117.854348, + 33.63421 + ], + [ + -117.854596, + 33.634262 + ], + [ + -117.854964, + 33.634141 + ], + [ + -117.8553, + 33.634428 + ], + [ + -117.855676, + 33.634713 + ], + [ + -117.856045, + 33.634954 + ], + [ + -117.856548, + 33.635071 + ], + [ + -117.85671, + 33.635075 + ], + [ + -117.857192, + 33.635957 + ], + [ + -117.856462, + 33.636276 + ], + [ + -117.856447, + 33.636282 + ], + [ + -117.855566, + 33.636204 + ], + [ + -117.854549, + 33.635691 + ], + [ + -117.853827, + 33.635185 + ], + [ + -117.852867, + 33.635802 + ], + [ + -117.852104, + 33.636292 + ], + [ + -117.851204, + 33.637329 + ], + [ + -117.851217, + 33.636856 + ], + [ + -117.851225, + 33.636552 + ], + [ + -117.851401, + 33.636411 + ], + [ + -117.851562, + 33.636142 + ], + [ + -117.851569, + 33.63587 + ], + [ + -117.851478, + 33.635692 + ], + [ + -117.85133, + 33.635529 + ], + [ + -117.85122, + 33.635437 + ], + [ + -117.850862, + 33.635136 + ], + [ + -117.85106, + 33.634884 + ], + [ + -117.849895, + 33.634094 + ], + [ + -117.849577, + 33.633879 + ], + [ + -117.849291, + 33.633842 + ], + [ + -117.848814, + 33.634505 + ], + [ + -117.848143, + 33.635277 + ], + [ + -117.848368, + 33.635457 + ], + [ + -117.848091, + 33.635788 + ], + [ + -117.847752, + 33.636314 + ], + [ + -117.847632, + 33.636499 + ], + [ + -117.847329, + 33.637102 + ], + [ + -117.847242, + 33.637768 + ], + [ + -117.847173, + 33.638296 + ], + [ + -117.84716, + 33.638395 + ], + [ + -117.847178, + 33.638398 + ], + [ + -117.847959, + 33.638538 + ], + [ + -117.847998, + 33.638542 + ], + [ + -117.848894, + 33.63862 + ], + [ + -117.849121, + 33.638689 + ], + [ + -117.849407, + 33.638742 + ], + [ + -117.849789, + 33.638733 + ], + [ + -117.850012, + 33.638737 + ], + [ + -117.849366, + 33.639538 + ], + [ + -117.849482, + 33.640711 + ], + [ + -117.849942, + 33.641397 + ], + [ + -117.850485, + 33.642062 + ], + [ + -117.850012, + 33.642375 + ], + [ + -117.849284, + 33.642843 + ], + [ + -117.848933, + 33.641964 + ], + [ + -117.848232, + 33.641471 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950814, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.789605, + 33.807011 + ], + [ + -117.789541, + 33.806749 + ], + [ + -117.789972, + 33.806778 + ], + [ + -117.790155, + 33.806279 + ], + [ + -117.789738, + 33.805709 + ], + [ + -117.789233, + 33.805719 + ], + [ + -117.789108, + 33.805897 + ], + [ + -117.789124, + 33.805311 + ], + [ + -117.789126, + 33.805235 + ], + [ + -117.790377, + 33.804335 + ], + [ + -117.790484, + 33.804401 + ], + [ + -117.79085, + 33.804626 + ], + [ + -117.79103, + 33.804207 + ], + [ + -117.790708, + 33.803621 + ], + [ + -117.790115, + 33.802543 + ], + [ + -117.789327, + 33.80062 + ], + [ + -117.788888, + 33.79977 + ], + [ + -117.788803, + 33.799605 + ], + [ + -117.788674, + 33.799603 + ], + [ + -117.788082, + 33.799591 + ], + [ + -117.787387, + 33.799518 + ], + [ + -117.786956, + 33.799467 + ], + [ + -117.786356, + 33.799397 + ], + [ + -117.785475, + 33.799119 + ], + [ + -117.785207, + 33.798294 + ], + [ + -117.785235, + 33.797303 + ], + [ + -117.785094, + 33.796579 + ], + [ + -117.785072, + 33.795407 + ], + [ + -117.785096, + 33.794551 + ], + [ + -117.785112, + 33.79401 + ], + [ + -117.78501, + 33.793943 + ], + [ + -117.784688, + 33.793731 + ], + [ + -117.784151, + 33.793661 + ], + [ + -117.783882, + 33.793625 + ], + [ + -117.783346, + 33.79348 + ], + [ + -117.783028, + 33.793293 + ], + [ + -117.782927, + 33.793021 + ], + [ + -117.78289, + 33.792434 + ], + [ + -117.782894, + 33.792299 + ], + [ + -117.782425, + 33.791704 + ], + [ + -117.78281, + 33.791441 + ], + [ + -117.783596, + 33.792267 + ], + [ + -117.783872, + 33.792427 + ], + [ + -117.784088, + 33.792368 + ], + [ + -117.784132, + 33.789441 + ], + [ + -117.782435, + 33.789405 + ], + [ + -117.781033, + 33.789377 + ], + [ + -117.781043, + 33.789017 + ], + [ + -117.781861, + 33.788717 + ], + [ + -117.782351, + 33.788547 + ], + [ + -117.782941, + 33.788693 + ], + [ + -117.783529, + 33.788885 + ], + [ + -117.78407, + 33.788806 + ], + [ + -117.78419, + 33.788402 + ], + [ + -117.783017, + 33.787883 + ], + [ + -117.782371, + 33.787826 + ], + [ + -117.780592, + 33.787791 + ], + [ + -117.782711, + 33.787247 + ], + [ + -117.783203, + 33.787031 + ], + [ + -117.783323, + 33.786582 + ], + [ + -117.783325, + 33.786537 + ], + [ + -117.783228, + 33.78613 + ], + [ + -117.782156, + 33.785883 + ], + [ + -117.780423, + 33.78612 + ], + [ + -117.78025, + 33.786522 + ], + [ + -117.779701, + 33.786872 + ], + [ + -117.778835, + 33.78699 + ], + [ + -117.777682, + 33.787689 + ], + [ + -117.778406, + 33.786892 + ], + [ + -117.779237, + 33.786097 + ], + [ + -117.779308, + 33.785512 + ], + [ + -117.778716, + 33.785455 + ], + [ + -117.778398, + 33.785224 + ], + [ + -117.778412, + 33.784728 + ], + [ + -117.779228, + 33.784519 + ], + [ + -117.780204, + 33.784312 + ], + [ + -117.780844, + 33.784301 + ], + [ + -117.780998, + 33.78428 + ], + [ + -117.780935, + 33.783801 + ], + [ + -117.780813, + 33.783178 + ], + [ + -117.780787, + 33.782984 + ], + [ + -117.780697, + 33.78289 + ], + [ + -117.781087, + 33.782527 + ], + [ + -117.780298, + 33.781779 + ], + [ + -117.780404, + 33.780757 + ], + [ + -117.780033, + 33.780587 + ], + [ + -117.779448, + 33.780803 + ], + [ + -117.779034, + 33.781133 + ], + [ + -117.77884, + 33.780848 + ], + [ + -117.778097, + 33.780491 + ], + [ + -117.776835, + 33.780163 + ], + [ + -117.776211, + 33.780772 + ], + [ + -117.775963, + 33.781008 + ], + [ + -117.775754, + 33.780167 + ], + [ + -117.775427, + 33.779373 + ], + [ + -117.775122, + 33.778632 + ], + [ + -117.775628, + 33.777457 + ], + [ + -117.777007, + 33.776091 + ], + [ + -117.778428, + 33.775095 + ], + [ + -117.78016, + 33.774669 + ], + [ + -117.779208, + 33.77568 + ], + [ + -117.777861, + 33.776982 + ], + [ + -117.77728, + 33.777929 + ], + [ + -117.777109, + 33.778435 + ], + [ + -117.778627, + 33.778497 + ], + [ + -117.779262, + 33.778602 + ], + [ + -117.779097, + 33.779104 + ], + [ + -117.77907, + 33.779493 + ], + [ + -117.779078, + 33.77992 + ], + [ + -117.778837, + 33.780006 + ], + [ + -117.778978, + 33.780313 + ], + [ + -117.779334, + 33.780213 + ], + [ + -117.779445, + 33.780099 + ], + [ + -117.779982, + 33.780038 + ], + [ + -117.780052, + 33.780191 + ], + [ + -117.780231, + 33.780311 + ], + [ + -117.780605, + 33.780336 + ], + [ + -117.780854, + 33.780216 + ], + [ + -117.781494, + 33.779924 + ], + [ + -117.781311, + 33.779373 + ], + [ + -117.78113, + 33.77858 + ], + [ + -117.781421, + 33.777853 + ], + [ + -117.781966, + 33.777638 + ], + [ + -117.781733, + 33.778761 + ], + [ + -117.781817, + 33.778899 + ], + [ + -117.782393, + 33.779115 + ], + [ + -117.783392, + 33.779392 + ], + [ + -117.783584, + 33.779058 + ], + [ + -117.783994, + 33.779561 + ], + [ + -117.784627, + 33.779621 + ], + [ + -117.787588, + 33.781159 + ], + [ + -117.789288, + 33.781975 + ], + [ + -117.789748, + 33.78201 + ], + [ + -117.79013, + 33.782066 + ], + [ + -117.791467, + 33.782723 + ], + [ + -117.791861, + 33.782519 + ], + [ + -117.792253, + 33.782626 + ], + [ + -117.79247, + 33.782709 + ], + [ + -117.793081, + 33.782937 + ], + [ + -117.793531, + 33.783115 + ], + [ + -117.79404, + 33.783255 + ], + [ + -117.794617, + 33.783531 + ], + [ + -117.795225, + 33.784055 + ], + [ + -117.795585, + 33.784501 + ], + [ + -117.795768, + 33.784749 + ], + [ + -117.795813, + 33.78481 + ], + [ + -117.795797, + 33.785385 + ], + [ + -117.795795, + 33.785444 + ], + [ + -117.795782, + 33.785923 + ], + [ + -117.795779, + 33.786628 + ], + [ + -117.795766, + 33.787079 + ], + [ + -117.795755, + 33.787487 + ], + [ + -117.795539, + 33.787492 + ], + [ + -117.794354, + 33.787517 + ], + [ + -117.791969, + 33.787448 + ], + [ + -117.791744, + 33.787296 + ], + [ + -117.791479, + 33.787122 + ], + [ + -117.791198, + 33.786933 + ], + [ + -117.791056, + 33.786846 + ], + [ + -117.790818, + 33.786616 + ], + [ + -117.790511, + 33.786339 + ], + [ + -117.790249, + 33.786096 + ], + [ + -117.790012, + 33.785881 + ], + [ + -117.789653, + 33.785619 + ], + [ + -117.789429, + 33.78548 + ], + [ + -117.788667, + 33.785233 + ], + [ + -117.788715, + 33.785207 + ], + [ + -117.788577, + 33.785079 + ], + [ + -117.788442, + 33.784088 + ], + [ + -117.790145, + 33.784135 + ], + [ + -117.790492, + 33.784424 + ], + [ + -117.791007, + 33.784688 + ], + [ + -117.791482, + 33.785205 + ], + [ + -117.792428, + 33.785759 + ], + [ + -117.792967, + 33.785826 + ], + [ + -117.79283, + 33.7865 + ], + [ + -117.7928, + 33.786597 + ], + [ + -117.792837, + 33.786679 + ], + [ + -117.79315, + 33.78669 + ], + [ + -117.793801, + 33.786547 + ], + [ + -117.793897, + 33.786786 + ], + [ + -117.794194, + 33.786841 + ], + [ + -117.794456, + 33.786731 + ], + [ + -117.794844, + 33.786342 + ], + [ + -117.794876, + 33.786245 + ], + [ + -117.79485, + 33.78579 + ], + [ + -117.794673, + 33.785439 + ], + [ + -117.794589, + 33.785315 + ], + [ + -117.794458, + 33.785275 + ], + [ + -117.794325, + 33.785317 + ], + [ + -117.79424, + 33.785337 + ], + [ + -117.794211, + 33.785388 + ], + [ + -117.794134, + 33.785486 + ], + [ + -117.793894, + 33.786248 + ], + [ + -117.793652, + 33.785898 + ], + [ + -117.793638, + 33.785709 + ], + [ + -117.793553, + 33.785409 + ], + [ + -117.793451, + 33.785277 + ], + [ + -117.793425, + 33.784738 + ], + [ + -117.793187, + 33.784561 + ], + [ + -117.79295, + 33.784396 + ], + [ + -117.792641, + 33.784198 + ], + [ + -117.79206, + 33.783848 + ], + [ + -117.790652, + 33.783511 + ], + [ + -117.790286, + 33.783334 + ], + [ + -117.789249, + 33.783325 + ], + [ + -117.788835, + 33.783187 + ], + [ + -117.788792, + 33.783037 + ], + [ + -117.788745, + 33.782924 + ], + [ + -117.788748, + 33.782825 + ], + [ + -117.788682, + 33.782767 + ], + [ + -117.788595, + 33.782776 + ], + [ + -117.788194, + 33.782686 + ], + [ + -117.786937, + 33.782395 + ], + [ + -117.785806, + 33.781657 + ], + [ + -117.78444, + 33.780899 + ], + [ + -117.784176, + 33.780976 + ], + [ + -117.782469, + 33.780491 + ], + [ + -117.781865, + 33.780293 + ], + [ + -117.781812, + 33.780338 + ], + [ + -117.781675, + 33.780425 + ], + [ + -117.781544, + 33.780471 + ], + [ + -117.78141, + 33.780527 + ], + [ + -117.781393, + 33.780671 + ], + [ + -117.781457, + 33.780833 + ], + [ + -117.781557, + 33.780955 + ], + [ + -117.781504, + 33.781261 + ], + [ + -117.781564, + 33.781395 + ], + [ + -117.781871, + 33.781587 + ], + [ + -117.781846, + 33.781765 + ], + [ + -117.781708, + 33.782638 + ], + [ + -117.781861, + 33.783205 + ], + [ + -117.782161, + 33.783432 + ], + [ + -117.782628, + 33.783375 + ], + [ + -117.783193, + 33.783257 + ], + [ + -117.784701, + 33.783007 + ], + [ + -117.78322, + 33.784078 + ], + [ + -117.782902, + 33.784314 + ], + [ + -117.782666, + 33.78454 + ], + [ + -117.782154, + 33.784855 + ], + [ + -117.781881, + 33.78501 + ], + [ + -117.782173, + 33.785298 + ], + [ + -117.782981, + 33.785313 + ], + [ + -117.783785, + 33.785509 + ], + [ + -117.784522, + 33.786155 + ], + [ + -117.784666, + 33.786614 + ], + [ + -117.784667, + 33.786635 + ], + [ + -117.784505, + 33.786763 + ], + [ + -117.784204, + 33.786997 + ], + [ + -117.783813, + 33.787339 + ], + [ + -117.784224, + 33.787709 + ], + [ + -117.786007, + 33.78772 + ], + [ + -117.786015, + 33.787446 + ], + [ + -117.786519, + 33.787456 + ], + [ + -117.787435, + 33.787519 + ], + [ + -117.788236, + 33.787669 + ], + [ + -117.78824, + 33.78767 + ], + [ + -117.788262, + 33.787753 + ], + [ + -117.788267, + 33.78777 + ], + [ + -117.788387, + 33.788214 + ], + [ + -117.788388, + 33.788233 + ], + [ + -117.788469, + 33.789117 + ], + [ + -117.788513, + 33.789478 + ], + [ + -117.788344, + 33.789746 + ], + [ + -117.787614, + 33.790768 + ], + [ + -117.786721, + 33.791833 + ], + [ + -117.787784, + 33.792394 + ], + [ + -117.788337, + 33.791909 + ], + [ + -117.788989, + 33.791742 + ], + [ + -117.78977, + 33.791921 + ], + [ + -117.789847, + 33.791939 + ], + [ + -117.790476, + 33.792515 + ], + [ + -117.790735, + 33.792753 + ], + [ + -117.790952, + 33.792952 + ], + [ + -117.79092, + 33.793046 + ], + [ + -117.79054, + 33.794161 + ], + [ + -117.789754, + 33.795273 + ], + [ + -117.788695, + 33.796469 + ], + [ + -117.7884, + 33.797365 + ], + [ + -117.788063, + 33.797854 + ], + [ + -117.78742, + 33.797706 + ], + [ + -117.787488, + 33.797212 + ], + [ + -117.787609, + 33.796718 + ], + [ + -117.787997, + 33.796365 + ], + [ + -117.788712, + 33.795537 + ], + [ + -117.78917, + 33.794599 + ], + [ + -117.789733, + 33.7941 + ], + [ + -117.789492, + 33.793059 + ], + [ + -117.788956, + 33.792913 + ], + [ + -117.788578, + 33.792951 + ], + [ + -117.788296, + 33.793396 + ], + [ + -117.787798, + 33.793837 + ], + [ + -117.788269, + 33.794342 + ], + [ + -117.788262, + 33.794612 + ], + [ + -117.788137, + 33.795196 + ], + [ + -117.787793, + 33.795656 + ], + [ + -117.787629, + 33.79629 + ], + [ + -117.78704, + 33.796399 + ], + [ + -117.787163, + 33.79607 + ], + [ + -117.786782, + 33.795873 + ], + [ + -117.786976, + 33.79544 + ], + [ + -117.787072, + 33.795252 + ], + [ + -117.78742, + 33.794993 + ], + [ + -117.787565, + 33.794711 + ], + [ + -117.787527, + 33.794445 + ], + [ + -117.787303, + 33.794308 + ], + [ + -117.786916, + 33.794338 + ], + [ + -117.786479, + 33.794539 + ], + [ + -117.786196, + 33.794894 + ], + [ + -117.786128, + 33.795653 + ], + [ + -117.78615, + 33.796825 + ], + [ + -117.786123, + 33.797771 + ], + [ + -117.786099, + 33.798627 + ], + [ + -117.786411, + 33.799039 + ], + [ + -117.788084, + 33.799026 + ], + [ + -117.78841, + 33.798943 + ], + [ + -117.788639, + 33.798496 + ], + [ + -117.788893, + 33.797611 + ], + [ + -117.789271, + 33.797596 + ], + [ + -117.78954, + 33.797624 + ], + [ + -117.789942, + 33.797699 + ], + [ + -117.790234, + 33.797885 + ], + [ + -117.790365, + 33.798023 + ], + [ + -117.790383, + 33.798339 + ], + [ + -117.790565, + 33.79859 + ], + [ + -117.79096, + 33.798936 + ], + [ + -117.791369, + 33.798764 + ], + [ + -117.791702, + 33.798455 + ], + [ + -117.792006, + 33.79819 + ], + [ + -117.791885, + 33.797692 + ], + [ + -117.791881, + 33.79688 + ], + [ + -117.792207, + 33.795827 + ], + [ + -117.792624, + 33.795152 + ], + [ + -117.792904, + 33.794631 + ], + [ + -117.792965, + 33.793769 + ], + [ + -117.792984, + 33.793265 + ], + [ + -117.792986, + 33.79321 + ], + [ + -117.793036, + 33.793104 + ], + [ + -117.793124, + 33.792915 + ], + [ + -117.793213, + 33.792624 + ], + [ + -117.793349, + 33.792416 + ], + [ + -117.793626, + 33.792268 + ], + [ + -117.794117, + 33.791883 + ], + [ + -117.794743, + 33.791866 + ], + [ + -117.795631, + 33.791995 + ], + [ + -117.796184, + 33.792615 + ], + [ + -117.796959, + 33.792764 + ], + [ + -117.797263, + 33.793073 + ], + [ + -117.797457, + 33.79327 + ], + [ + -117.797475, + 33.793661 + ], + [ + -117.797486, + 33.793918 + ], + [ + -117.797462, + 33.794364 + ], + [ + -117.796542, + 33.794843 + ], + [ + -117.796551, + 33.795917 + ], + [ + -117.797858, + 33.796837 + ], + [ + -117.797441, + 33.797872 + ], + [ + -117.797303, + 33.798827 + ], + [ + -117.796554, + 33.799178 + ], + [ + -117.796442, + 33.799231 + ], + [ + -117.796965, + 33.800301 + ], + [ + -117.797698, + 33.800287 + ], + [ + -117.797657, + 33.800399 + ], + [ + -117.797651, + 33.800625 + ], + [ + -117.797951, + 33.800957 + ], + [ + -117.797973, + 33.801161 + ], + [ + -117.797649, + 33.801639 + ], + [ + -117.797118, + 33.801831 + ], + [ + -117.796882, + 33.802075 + ], + [ + -117.797025, + 33.802742 + ], + [ + -117.797513, + 33.803146 + ], + [ + -117.797722, + 33.803387 + ], + [ + -117.797257, + 33.803615 + ], + [ + -117.797236, + 33.80362 + ], + [ + -117.796822, + 33.80373 + ], + [ + -117.79666, + 33.803748 + ], + [ + -117.79662, + 33.803753 + ], + [ + -117.796602, + 33.803856 + ], + [ + -117.796165, + 33.804893 + ], + [ + -117.79599, + 33.805307 + ], + [ + -117.795866, + 33.805601 + ], + [ + -117.795751, + 33.805873 + ], + [ + -117.795673, + 33.80583 + ], + [ + -117.7951, + 33.805511 + ], + [ + -117.795402, + 33.804356 + ], + [ + -117.794173, + 33.8044 + ], + [ + -117.793946, + 33.804155 + ], + [ + -117.793891, + 33.803853 + ], + [ + -117.793695, + 33.803888 + ], + [ + -117.793453, + 33.803964 + ], + [ + -117.792965, + 33.804195 + ], + [ + -117.792693, + 33.803627 + ], + [ + -117.79224, + 33.802614 + ], + [ + -117.792753, + 33.80146 + ], + [ + -117.791652, + 33.801277 + ], + [ + -117.791023, + 33.801426 + ], + [ + -117.790808, + 33.802265 + ], + [ + -117.790973, + 33.803232 + ], + [ + -117.791436, + 33.803884 + ], + [ + -117.791808, + 33.804333 + ], + [ + -117.79235, + 33.804273 + ], + [ + -117.792978, + 33.805658 + ], + [ + -117.792984, + 33.805671 + ], + [ + -117.792935, + 33.805793 + ], + [ + -117.792417, + 33.807066 + ], + [ + -117.791521, + 33.80727 + ], + [ + -117.791123, + 33.807764 + ], + [ + -117.790757, + 33.807958 + ], + [ + -117.789513, + 33.808596 + ], + [ + -117.789126, + 33.809553 + ], + [ + -117.788857, + 33.809688 + ], + [ + -117.788727, + 33.809183 + ], + [ + -117.788835, + 33.807057 + ], + [ + -117.789605, + 33.807011 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950837, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.692358, + 33.53058 + ], + [ + -117.694349, + 33.530578 + ], + [ + -117.695119, + 33.530396 + ], + [ + -117.695647, + 33.529963 + ], + [ + -117.695982, + 33.529923 + ], + [ + -117.696508, + 33.530039 + ], + [ + -117.697962, + 33.529812 + ], + [ + -117.698138, + 33.529967 + ], + [ + -117.698374, + 33.529995 + ], + [ + -117.698503, + 33.529881 + ], + [ + -117.698684, + 33.529579 + ], + [ + -117.700101, + 33.529483 + ], + [ + -117.700102, + 33.529483 + ], + [ + -117.700265, + 33.529579 + ], + [ + -117.70057, + 33.529643 + ], + [ + -117.700821, + 33.529602 + ], + [ + -117.700949, + 33.529511 + ], + [ + -117.700992, + 33.529389 + ], + [ + -117.70169, + 33.529315 + ], + [ + -117.703057, + 33.528928 + ], + [ + -117.704235, + 33.528031 + ], + [ + -117.705984, + 33.527272 + ], + [ + -117.706862, + 33.526502 + ], + [ + -117.707283, + 33.525798 + ], + [ + -117.708298, + 33.524558 + ], + [ + -117.708963, + 33.524823 + ], + [ + -117.709255, + 33.52506 + ], + [ + -117.709464, + 33.525216 + ], + [ + -117.709329, + 33.525447 + ], + [ + -117.709142, + 33.525859 + ], + [ + -117.708776, + 33.526183 + ], + [ + -117.708304, + 33.526582 + ], + [ + -117.707886, + 33.527062 + ], + [ + -117.707713, + 33.527318 + ], + [ + -117.707193, + 33.527395 + ], + [ + -117.706928, + 33.527329 + ], + [ + -117.706557, + 33.527827 + ], + [ + -117.704435, + 33.528905 + ], + [ + -117.704024, + 33.529995 + ], + [ + -117.703644, + 33.529902 + ], + [ + -117.703191, + 33.529786 + ], + [ + -117.701962, + 33.53002 + ], + [ + -117.701117, + 33.530553 + ], + [ + -117.70056, + 33.531098 + ], + [ + -117.699417, + 33.530417 + ], + [ + -117.69798, + 33.530698 + ], + [ + -117.697264, + 33.530653 + ], + [ + -117.693022, + 33.531362 + ], + [ + -117.692044, + 33.530911 + ], + [ + -117.692358, + 33.53058 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950842, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.8141, + 33.636469 + ], + [ + -117.813752, + 33.636389 + ], + [ + -117.813255, + 33.636416 + ], + [ + -117.812916, + 33.636544 + ], + [ + -117.812689, + 33.636845 + ], + [ + -117.812612, + 33.637027 + ], + [ + -117.812085, + 33.636994 + ], + [ + -117.811539, + 33.63701 + ], + [ + -117.811058, + 33.63733 + ], + [ + -117.810479, + 33.637841 + ], + [ + -117.809972, + 33.63789 + ], + [ + -117.809205, + 33.637637 + ], + [ + -117.808904, + 33.637417 + ], + [ + -117.808798, + 33.637735 + ], + [ + -117.808505, + 33.638662 + ], + [ + -117.80834, + 33.638927 + ], + [ + -117.808424, + 33.639939 + ], + [ + -117.806312, + 33.638483 + ], + [ + -117.806609, + 33.637562 + ], + [ + -117.807278, + 33.637009 + ], + [ + -117.807453, + 33.636371 + ], + [ + -117.807967, + 33.636513 + ], + [ + -117.80848, + 33.6359 + ], + [ + -117.809534, + 33.635279 + ], + [ + -117.811153, + 33.635187 + ], + [ + -117.812257, + 33.635507 + ], + [ + -117.812658, + 33.635624 + ], + [ + -117.813126, + 33.63576 + ], + [ + -117.813668, + 33.635917 + ], + [ + -117.813786, + 33.635809 + ], + [ + -117.813928, + 33.63569 + ], + [ + -117.814324, + 33.634565 + ], + [ + -117.813995, + 33.633626 + ], + [ + -117.813306, + 33.633508 + ], + [ + -117.813291, + 33.632879 + ], + [ + -117.817139, + 33.633446 + ], + [ + -117.816601, + 33.636542 + ], + [ + -117.817373, + 33.638934 + ], + [ + -117.816661, + 33.639442 + ], + [ + -117.81673, + 33.639862 + ], + [ + -117.817315, + 33.640312 + ], + [ + -117.817304, + 33.640495 + ], + [ + -117.817406, + 33.64078 + ], + [ + -117.817941, + 33.641438 + ], + [ + -117.8179, + 33.641547 + ], + [ + -117.817859, + 33.641734 + ], + [ + -117.817612, + 33.641872 + ], + [ + -117.817338, + 33.642016 + ], + [ + -117.817101, + 33.642212 + ], + [ + -117.816735, + 33.64216 + ], + [ + -117.815696, + 33.642173 + ], + [ + -117.815406, + 33.642924 + ], + [ + -117.815328, + 33.643427 + ], + [ + -117.815396, + 33.643793 + ], + [ + -117.815458, + 33.644162 + ], + [ + -117.815353, + 33.644241 + ], + [ + -117.815185, + 33.644329 + ], + [ + -117.814907, + 33.644586 + ], + [ + -117.814634, + 33.643857 + ], + [ + -117.814446, + 33.643635 + ], + [ + -117.813597, + 33.642127 + ], + [ + -117.813798, + 33.641667 + ], + [ + -117.814041, + 33.640369 + ], + [ + -117.814612, + 33.639707 + ], + [ + -117.814775, + 33.63892 + ], + [ + -117.814802, + 33.638387 + ], + [ + -117.814626, + 33.63803 + ], + [ + -117.814547, + 33.637748 + ], + [ + -117.814482, + 33.637429 + ], + [ + -117.814298, + 33.637254 + ], + [ + -117.814263, + 33.636912 + ], + [ + -117.814152, + 33.63661 + ], + [ + -117.8141, + 33.636469 + ] + ] + ] + }, + "properties": { + "name": "Chaparral Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950867, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.009545, + 33.67963 + ], + [ + -118.008674, + 33.679002 + ], + [ + -118.008221, + 33.678562 + ], + [ + -118.008449, + 33.67842 + ], + [ + -118.008623, + 33.678209 + ], + [ + -118.008818, + 33.678191 + ], + [ + -118.009391, + 33.677644 + ], + [ + -118.010225, + 33.676657 + ], + [ + -118.010703, + 33.676386 + ], + [ + -118.011252, + 33.676187 + ], + [ + -118.011886, + 33.676156 + ], + [ + -118.012639, + 33.676264 + ], + [ + -118.013267, + 33.676213 + ], + [ + -118.013883, + 33.67604 + ], + [ + -118.013945, + 33.675758 + ], + [ + -118.014944, + 33.675467 + ], + [ + -118.015213, + 33.675252 + ], + [ + -118.015244, + 33.675091 + ], + [ + -118.015047, + 33.67458 + ], + [ + -118.015664, + 33.674488 + ], + [ + -118.016133, + 33.674641 + ], + [ + -118.016535, + 33.674662 + ], + [ + -118.017035, + 33.674891 + ], + [ + -118.017315, + 33.675026 + ], + [ + -118.017761, + 33.675048 + ], + [ + -118.018284, + 33.674527 + ], + [ + -118.018348, + 33.673994 + ], + [ + -118.018552, + 33.674056 + ], + [ + -118.020147, + 33.675191 + ], + [ + -118.019419, + 33.675193 + ], + [ + -118.019416, + 33.675916 + ], + [ + -118.019775, + 33.675917 + ], + [ + -118.01978, + 33.676086 + ], + [ + -118.019886, + 33.676214 + ], + [ + -118.01997, + 33.676216 + ], + [ + -118.019981, + 33.676625 + ], + [ + -118.020118, + 33.676945 + ], + [ + -118.020418, + 33.677143 + ], + [ + -118.020442, + 33.677316 + ], + [ + -118.020225, + 33.677517 + ], + [ + -118.020256, + 33.677826 + ], + [ + -118.020419, + 33.678381 + ], + [ + -118.020264, + 33.67882 + ], + [ + -118.020222, + 33.679198 + ], + [ + -118.020445, + 33.679464 + ], + [ + -118.021128, + 33.679986 + ], + [ + -118.021933, + 33.680504 + ], + [ + -118.022253, + 33.680658 + ], + [ + -118.022205, + 33.680771 + ], + [ + -118.022674, + 33.680952 + ], + [ + -118.022681, + 33.681104 + ], + [ + -118.022454, + 33.681115 + ], + [ + -118.022304, + 33.68131 + ], + [ + -118.02232, + 33.681683 + ], + [ + -118.022603, + 33.681718 + ], + [ + -118.02264, + 33.682046 + ], + [ + -118.022982, + 33.682032 + ], + [ + -118.02299, + 33.682442 + ], + [ + -118.023246, + 33.682673 + ], + [ + -118.022595, + 33.682973 + ], + [ + -118.022423, + 33.682781 + ], + [ + -118.02212, + 33.682992 + ], + [ + -118.020692, + 33.681355 + ], + [ + -118.019917, + 33.680599 + ], + [ + -118.018316, + 33.68013 + ], + [ + -118.018038, + 33.681089 + ], + [ + -118.017855, + 33.681801 + ], + [ + -118.017872, + 33.682054 + ], + [ + -118.01793, + 33.682221 + ], + [ + -118.018012, + 33.682365 + ], + [ + -118.018512, + 33.682769 + ], + [ + -118.01921, + 33.682939 + ], + [ + -118.020641, + 33.68378 + ], + [ + -118.021784, + 33.684426 + ], + [ + -118.021096, + 33.685083 + ], + [ + -118.018776, + 33.684317 + ], + [ + -118.018098, + 33.683814 + ], + [ + -118.017016, + 33.683044 + ], + [ + -118.016515, + 33.682925 + ], + [ + -118.016434, + 33.682858 + ], + [ + -118.016389, + 33.682761 + ], + [ + -118.016404, + 33.682648 + ], + [ + -118.016548, + 33.682216 + ], + [ + -118.016758, + 33.680845 + ], + [ + -118.01694, + 33.680519 + ], + [ + -118.016872, + 33.68031 + ], + [ + -118.016225, + 33.680061 + ], + [ + -118.016149, + 33.680124 + ], + [ + -118.01606, + 33.680174 + ], + [ + -118.01601, + 33.68019 + ], + [ + -118.01596, + 33.680193 + ], + [ + -118.015936, + 33.680178 + ], + [ + -118.015918, + 33.680157 + ], + [ + -118.015901, + 33.680082 + ], + [ + -118.015921, + 33.680015 + ], + [ + -118.015962, + 33.679954 + ], + [ + -118.016314, + 33.679502 + ], + [ + -118.016759, + 33.678901 + ], + [ + -118.016946, + 33.678547 + ], + [ + -118.017237, + 33.678226 + ], + [ + -118.017345, + 33.678092 + ], + [ + -118.017418, + 33.677909 + ], + [ + -118.017556, + 33.677479 + ], + [ + -118.017652, + 33.676816 + ], + [ + -118.017647, + 33.67677 + ], + [ + -118.01761, + 33.676729 + ], + [ + -118.017576, + 33.676714 + ], + [ + -118.017526, + 33.67671 + ], + [ + -118.01718, + 33.67678 + ], + [ + -118.015633, + 33.677214 + ], + [ + -118.01279, + 33.677086 + ], + [ + -118.012478, + 33.67703 + ], + [ + -118.012436, + 33.677021 + ], + [ + -118.012407, + 33.677021 + ], + [ + -118.012382, + 33.67703 + ], + [ + -118.012342, + 33.677052 + ], + [ + -118.010692, + 33.678082 + ], + [ + -118.010558, + 33.67821 + ], + [ + -118.010556, + 33.678404 + ], + [ + -118.011151, + 33.67902 + ], + [ + -118.011426, + 33.679191 + ], + [ + -118.011619, + 33.679249 + ], + [ + -118.011807, + 33.67921 + ], + [ + -118.012093, + 33.679002 + ], + [ + -118.012274, + 33.679013 + ], + [ + -118.012368, + 33.679298 + ], + [ + -118.012777, + 33.679863 + ], + [ + -118.013108, + 33.68028 + ], + [ + -118.013431, + 33.680493 + ], + [ + -118.013567, + 33.680942 + ], + [ + -118.013566, + 33.681164 + ], + [ + -118.013315, + 33.681843 + ], + [ + -118.013276, + 33.682289 + ], + [ + -118.01327, + 33.682764 + ], + [ + -118.012689, + 33.683361 + ], + [ + -118.012522, + 33.683446 + ], + [ + -118.012257, + 33.683548 + ], + [ + -118.011147, + 33.683803 + ], + [ + -118.011156, + 33.683468 + ], + [ + -118.011926, + 33.680808 + ], + [ + -118.010638, + 33.680271 + ], + [ + -118.009545, + 33.67963 + ] + ] + ] + }, + "properties": { + "name": "SeaCliff Country Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950876, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.67808, + 33.659901 + ], + [ + -117.67797, + 33.659735 + ], + [ + -117.677134, + 33.660589 + ], + [ + -117.677087, + 33.660636 + ], + [ + -117.677158, + 33.660477 + ], + [ + -117.676844, + 33.660337 + ], + [ + -117.676778, + 33.660308 + ], + [ + -117.678494, + 33.657569 + ], + [ + -117.678437, + 33.656655 + ], + [ + -117.678514, + 33.656527 + ], + [ + -117.678534, + 33.656495 + ], + [ + -117.678537, + 33.65649 + ], + [ + -117.67963, + 33.65468 + ], + [ + -117.680267, + 33.653293 + ], + [ + -117.680344, + 33.653127 + ], + [ + -117.680242, + 33.652522 + ], + [ + -117.680201, + 33.652281 + ], + [ + -117.680664, + 33.652221 + ], + [ + -117.680846, + 33.652344 + ], + [ + -117.681209, + 33.65259 + ], + [ + -117.681929, + 33.653077 + ], + [ + -117.682268, + 33.653307 + ], + [ + -117.681549, + 33.653503 + ], + [ + -117.681351, + 33.653708 + ], + [ + -117.681117, + 33.65395 + ], + [ + -117.680661, + 33.655122 + ], + [ + -117.680274, + 33.656114 + ], + [ + -117.680999, + 33.656303 + ], + [ + -117.681288, + 33.656598 + ], + [ + -117.681723, + 33.65714 + ], + [ + -117.681747, + 33.657483 + ], + [ + -117.681816, + 33.658705 + ], + [ + -117.681632, + 33.659737 + ], + [ + -117.681299, + 33.659681 + ], + [ + -117.681171, + 33.659674 + ], + [ + -117.680982, + 33.659664 + ], + [ + -117.680742, + 33.659747 + ], + [ + -117.680446, + 33.659896 + ], + [ + -117.680322, + 33.66006 + ], + [ + -117.680305, + 33.66009 + ], + [ + -117.680267, + 33.660158 + ], + [ + -117.680145, + 33.660244 + ], + [ + -117.680129, + 33.660344 + ], + [ + -117.680459, + 33.660827 + ], + [ + -117.68066, + 33.661185 + ], + [ + -117.681011, + 33.661846 + ], + [ + -117.681358, + 33.662207 + ], + [ + -117.681088, + 33.662401 + ], + [ + -117.68066, + 33.662667 + ], + [ + -117.680462, + 33.66251 + ], + [ + -117.680166, + 33.66215 + ], + [ + -117.680053, + 33.662014 + ], + [ + -117.67964, + 33.661606 + ], + [ + -117.679204, + 33.661177 + ], + [ + -117.678789, + 33.660767 + ], + [ + -117.678602, + 33.660582 + ], + [ + -117.678408, + 33.66039 + ], + [ + -117.67833, + 33.660274 + ], + [ + -117.67808, + 33.659901 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 133950935, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.914715, + 33.89675 + ], + [ + -117.914413, + 33.896826 + ], + [ + -117.914321, + 33.896763 + ], + [ + -117.914321, + 33.896599 + ], + [ + -117.914601, + 33.896393 + ], + [ + -117.915075, + 33.896168 + ], + [ + -117.915068, + 33.896059 + ], + [ + -117.914965, + 33.896006 + ], + [ + -117.914613, + 33.896052 + ], + [ + -117.914192, + 33.896173 + ], + [ + -117.914029, + 33.896244 + ], + [ + -117.91371, + 33.896572 + ], + [ + -117.913184, + 33.896073 + ], + [ + -117.913968, + 33.8957 + ], + [ + -117.914146, + 33.895364 + ], + [ + -117.914523, + 33.894945 + ], + [ + -117.914948, + 33.894567 + ], + [ + -117.915238, + 33.894205 + ], + [ + -117.915974, + 33.893506 + ], + [ + -117.916649, + 33.89399 + ], + [ + -117.916281, + 33.894375 + ], + [ + -117.916096, + 33.894349 + ], + [ + -117.915933, + 33.894512 + ], + [ + -117.91583, + 33.894634 + ], + [ + -117.915765, + 33.894747 + ], + [ + -117.915734, + 33.894891 + ], + [ + -117.915874, + 33.895022 + ], + [ + -117.915965, + 33.895025 + ], + [ + -117.91604, + 33.895022 + ], + [ + -117.916244, + 33.895008 + ], + [ + -117.916882, + 33.895234 + ], + [ + -117.917022, + 33.895061 + ], + [ + -117.917223, + 33.894922 + ], + [ + -117.917638, + 33.894397 + ], + [ + -117.91845, + 33.894483 + ], + [ + -117.919112, + 33.894553 + ], + [ + -117.920245, + 33.894673 + ], + [ + -117.920271, + 33.895108 + ], + [ + -117.920952, + 33.894897 + ], + [ + -117.922025, + 33.894563 + ], + [ + -117.922578, + 33.894391 + ], + [ + -117.922616, + 33.89416 + ], + [ + -117.922578, + 33.893986 + ], + [ + -117.922444, + 33.893866 + ], + [ + -117.922298, + 33.893898 + ], + [ + -117.92204, + 33.893911 + ], + [ + -117.921458, + 33.894037 + ], + [ + -117.921397, + 33.893963 + ], + [ + -117.921158, + 33.894025 + ], + [ + -117.920741, + 33.894084 + ], + [ + -117.920429, + 33.894166 + ], + [ + -117.920337, + 33.894072 + ], + [ + -117.920331, + 33.893857 + ], + [ + -117.920358, + 33.893599 + ], + [ + -117.92043, + 33.893417 + ], + [ + -117.920632, + 33.893206 + ], + [ + -117.92088, + 33.892978 + ], + [ + -117.921058, + 33.893088 + ], + [ + -117.92126, + 33.893417 + ], + [ + -117.921756, + 33.893323 + ], + [ + -117.921886, + 33.893322 + ], + [ + -117.921842, + 33.892888 + ], + [ + -117.921909, + 33.892587 + ], + [ + -117.922069, + 33.892567 + ], + [ + -117.922207, + 33.892671 + ], + [ + -117.922441, + 33.89266 + ], + [ + -117.922565, + 33.892584 + ], + [ + -117.922642, + 33.892491 + ], + [ + -117.922654, + 33.892407 + ], + [ + -117.92293, + 33.892017 + ], + [ + -117.923001, + 33.89155 + ], + [ + -117.922807, + 33.891053 + ], + [ + -117.922345, + 33.89065 + ], + [ + -117.922173, + 33.890474 + ], + [ + -117.922479, + 33.890061 + ], + [ + -117.922726, + 33.889671 + ], + [ + -117.922769, + 33.889129 + ], + [ + -117.923164, + 33.888717 + ], + [ + -117.923363, + 33.889041 + ], + [ + -117.923449, + 33.889554 + ], + [ + -117.923516, + 33.889956 + ], + [ + -117.923631, + 33.890144 + ], + [ + -117.923714, + 33.890281 + ], + [ + -117.924128, + 33.890288 + ], + [ + -117.924688, + 33.890323 + ], + [ + -117.925091, + 33.890725 + ], + [ + -117.925844, + 33.891306 + ], + [ + -117.926385, + 33.892105 + ], + [ + -117.925581, + 33.892312 + ], + [ + -117.925304, + 33.892751 + ], + [ + -117.925191, + 33.893433 + ], + [ + -117.925218, + 33.893933 + ], + [ + -117.92523, + 33.894203 + ], + [ + -117.925297, + 33.894567 + ], + [ + -117.925469, + 33.894984 + ], + [ + -117.926133, + 33.896046 + ], + [ + -117.924599, + 33.897079 + ], + [ + -117.924364, + 33.897383 + ], + [ + -117.924151, + 33.897141 + ], + [ + -117.924163, + 33.89669 + ], + [ + -117.924021, + 33.896363 + ], + [ + -117.923698, + 33.896106 + ], + [ + -117.923468, + 33.895918 + ], + [ + -117.923195, + 33.895818 + ], + [ + -117.922925, + 33.895641 + ], + [ + -117.922696, + 33.895637 + ], + [ + -117.922375, + 33.895612 + ], + [ + -117.922089, + 33.895677 + ], + [ + -117.920261, + 33.895618 + ], + [ + -117.918219, + 33.895681 + ], + [ + -117.917946, + 33.895801 + ], + [ + -117.917344, + 33.895865 + ], + [ + -117.917164, + 33.895887 + ], + [ + -117.91704, + 33.896009 + ], + [ + -117.917032, + 33.896335 + ], + [ + -117.91682, + 33.896406 + ], + [ + -117.916637, + 33.896528 + ], + [ + -117.916329, + 33.896822 + ], + [ + -117.915959, + 33.897191 + ], + [ + -117.915679, + 33.898047 + ], + [ + -117.915156, + 33.89803 + ], + [ + -117.915007, + 33.897615 + ], + [ + -117.915021, + 33.897108 + ], + [ + -117.915281, + 33.896681 + ], + [ + -117.914715, + 33.89675 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 136163148, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.892992, + 33.898378 + ], + [ + -117.892964, + 33.898383 + ], + [ + -117.892919, + 33.898392 + ], + [ + -117.892886, + 33.898451 + ], + [ + -117.89286, + 33.898595 + ], + [ + -117.892857, + 33.898704 + ], + [ + -117.89283, + 33.898758 + ], + [ + -117.89268, + 33.898721 + ], + [ + -117.892562, + 33.898725 + ], + [ + -117.892482, + 33.898703 + ], + [ + -117.892356, + 33.898663 + ], + [ + -117.892227, + 33.898655 + ], + [ + -117.892144, + 33.898681 + ], + [ + -117.892055, + 33.898745 + ], + [ + -117.892012, + 33.898787 + ], + [ + -117.891951, + 33.898828 + ], + [ + -117.891892, + 33.898828 + ], + [ + -117.891813, + 33.898862 + ], + [ + -117.891734, + 33.898913 + ], + [ + -117.89152, + 33.89904 + ], + [ + -117.891477, + 33.89903 + ], + [ + -117.891407, + 33.899013 + ], + [ + -117.891584, + 33.898691 + ], + [ + -117.891716, + 33.898504 + ], + [ + -117.891774, + 33.898383 + ], + [ + -117.891899, + 33.898001 + ], + [ + -117.892608, + 33.898249 + ], + [ + -117.892887, + 33.898334 + ], + [ + -117.892992, + 33.898378 + ] + ] + ] + }, + "properties": { + "name": "Mountain View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138177771, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.714647, + 33.579285 + ], + [ + -117.714666, + 33.579222 + ], + [ + -117.714636, + 33.57916 + ], + [ + -117.71454, + 33.579131 + ], + [ + -117.714419, + 33.579144 + ], + [ + -117.714317, + 33.579135 + ], + [ + -117.714269, + 33.579209 + ], + [ + -117.714331, + 33.579276 + ], + [ + -117.714572, + 33.579321 + ], + [ + -117.714647, + 33.579285 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138180161, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.717488, + 33.573197 + ], + [ + -117.717839, + 33.572932 + ], + [ + -117.717718, + 33.572822 + ], + [ + -117.717576, + 33.572768 + ], + [ + -117.717396, + 33.572773 + ], + [ + -117.717265, + 33.57282 + ], + [ + -117.717145, + 33.572905 + ], + [ + -117.717488, + 33.573197 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138180170, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.715851, + 33.576529 + ], + [ + -117.716208, + 33.575712 + ], + [ + -117.716324, + 33.575667 + ], + [ + -117.717278, + 33.575971 + ], + [ + -117.71716, + 33.57621 + ], + [ + -117.716975, + 33.576409 + ], + [ + -117.716669, + 33.576558 + ], + [ + -117.716273, + 33.576619 + ], + [ + -117.715851, + 33.576529 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138194847, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.702158, + 33.592 + ], + [ + -117.701185, + 33.592429 + ], + [ + -117.700873, + 33.591922 + ], + [ + -117.700854, + 33.590956 + ], + [ + -117.700875, + 33.590385 + ], + [ + -117.700799, + 33.590334 + ], + [ + -117.700717, + 33.590315 + ], + [ + -117.700537, + 33.590307 + ], + [ + -117.70093, + 33.589856 + ], + [ + -117.701105, + 33.590068 + ], + [ + -117.701957, + 33.589994 + ], + [ + -117.70245, + 33.590079 + ], + [ + -117.703075, + 33.590128 + ], + [ + -117.703389, + 33.590338 + ], + [ + -117.703437, + 33.590589 + ], + [ + -117.703491, + 33.59087 + ], + [ + -117.702188, + 33.591719 + ], + [ + -117.702158, + 33.592 + ] + ] + ] + }, + "properties": { + "name": "Laguna Hills Community Center & Sports Complex", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138194856, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.702633, + 33.591138 + ], + [ + -117.70237, + 33.591109 + ], + [ + -117.702046, + 33.591238 + ], + [ + -117.701992, + 33.591383 + ], + [ + -117.702134, + 33.591609 + ], + [ + -117.702437, + 33.59148 + ], + [ + -117.702523, + 33.591352 + ], + [ + -117.70263, + 33.591247 + ], + [ + -117.702633, + 33.591138 + ] + ] + ] + }, + "properties": { + "name": "Dinosaur Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138357592, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.779498, + 33.662976 + ], + [ + -117.778878, + 33.66233 + ], + [ + -117.779072, + 33.66222 + ], + [ + -117.779258, + 33.662097 + ], + [ + -117.779609, + 33.661847 + ], + [ + -117.779739, + 33.661744 + ], + [ + -117.77987, + 33.661623 + ], + [ + -117.779898, + 33.661612 + ], + [ + -117.779924, + 33.661616 + ], + [ + -117.780534, + 33.662028 + ], + [ + -117.780536, + 33.662075 + ], + [ + -117.780152, + 33.662456 + ], + [ + -117.779979, + 33.662625 + ], + [ + -117.779862, + 33.662726 + ], + [ + -117.77974, + 33.662824 + ], + [ + -117.779498, + 33.662976 + ] + ] + ] + }, + "properties": { + "name": "Ravencreek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138357593, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.781875, + 33.662989 + ], + [ + -117.78182, + 33.663045 + ], + [ + -117.781236, + 33.663637 + ], + [ + -117.781165, + 33.663694 + ], + [ + -117.78103, + 33.663776 + ], + [ + -117.780674, + 33.663955 + ], + [ + -117.780653, + 33.66397 + ], + [ + -117.780637, + 33.663996 + ], + [ + -117.780645, + 33.664026 + ], + [ + -117.780878, + 33.664348 + ], + [ + -117.781128, + 33.664646 + ], + [ + -117.781286, + 33.664835 + ], + [ + -117.78146, + 33.665023 + ], + [ + -117.781661, + 33.665195 + ], + [ + -117.781666, + 33.665199 + ], + [ + -117.781771, + 33.665286 + ], + [ + -117.781848, + 33.665341 + ], + [ + -117.782575, + 33.664614 + ], + [ + -117.782607, + 33.664635 + ], + [ + -117.782797, + 33.664434 + ], + [ + -117.782654, + 33.664336 + ], + [ + -117.782758, + 33.664243 + ], + [ + -117.78277, + 33.664228 + ], + [ + -117.782776, + 33.664209 + ], + [ + -117.782775, + 33.664191 + ], + [ + -117.782769, + 33.66418 + ], + [ + -117.782759, + 33.66417 + ], + [ + -117.78247, + 33.663972 + ], + [ + -117.782817, + 33.663637 + ], + [ + -117.781875, + 33.662989 + ] + ] + ] + }, + "properties": { + "name": "Dovecreek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138357668, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.800053, + 33.670546 + ], + [ + -117.800484, + 33.669214 + ], + [ + -117.799143, + 33.668892 + ], + [ + -117.798736, + 33.670225 + ], + [ + -117.800053, + 33.670546 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138357669, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.820033, + 33.685282 + ], + [ + -117.820521, + 33.684465 + ], + [ + -117.818976, + 33.684108 + ], + [ + -117.818554, + 33.684396 + ], + [ + -117.818388, + 33.684767 + ], + [ + -117.818407, + 33.685027 + ], + [ + -117.818944, + 33.684987 + ], + [ + -117.820033, + 33.685282 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138953332, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.629816, + 33.686798 + ], + [ + -117.629619, + 33.686893 + ], + [ + -117.629616, + 33.686916 + ], + [ + -117.629601, + 33.686934 + ], + [ + -117.629588, + 33.686944 + ], + [ + -117.629607, + 33.686982 + ], + [ + -117.629626, + 33.686992 + ], + [ + -117.629646, + 33.686994 + ], + [ + -117.629664, + 33.686988 + ], + [ + -117.629677, + 33.686976 + ], + [ + -117.629687, + 33.686957 + ], + [ + -117.6297, + 33.68693 + ], + [ + -117.629688, + 33.686918 + ], + [ + -117.629764, + 33.686849 + ], + [ + -117.629781, + 33.686862 + ], + [ + -117.629818, + 33.686841 + ], + [ + -117.629827, + 33.686831 + ], + [ + -117.629829, + 33.686822 + ], + [ + -117.629826, + 33.686815 + ], + [ + -117.629816, + 33.686798 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138953334, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.630908, + 33.687309 + ], + [ + -117.630864, + 33.687307 + ], + [ + -117.630814, + 33.687302 + ], + [ + -117.630755, + 33.687298 + ], + [ + -117.630716, + 33.687299 + ], + [ + -117.630695, + 33.687301 + ], + [ + -117.630641, + 33.687309 + ], + [ + -117.630641, + 33.687331 + ], + [ + -117.630672, + 33.687354 + ], + [ + -117.630661, + 33.687388 + ], + [ + -117.630624, + 33.687397 + ], + [ + -117.630592, + 33.687376 + ], + [ + -117.630605, + 33.687339 + ], + [ + -117.630597, + 33.687326 + ], + [ + -117.630516, + 33.687355 + ], + [ + -117.63047, + 33.687383 + ], + [ + -117.630387, + 33.687431 + ], + [ + -117.630427, + 33.687446 + ], + [ + -117.630498, + 33.687428 + ], + [ + -117.630588, + 33.687413 + ], + [ + -117.630649, + 33.687402 + ], + [ + -117.630731, + 33.687383 + ], + [ + -117.6308, + 33.687366 + ], + [ + -117.630855, + 33.687351 + ], + [ + -117.630886, + 33.687337 + ], + [ + -117.630908, + 33.687309 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138953345, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.629818, + 33.686769 + ], + [ + -117.629792, + 33.686728 + ], + [ + -117.629828, + 33.686708 + ], + [ + -117.629784, + 33.686644 + ], + [ + -117.629749, + 33.686659 + ], + [ + -117.62972, + 33.686614 + ], + [ + -117.629552, + 33.686688 + ], + [ + -117.629582, + 33.686737 + ], + [ + -117.629497, + 33.686774 + ], + [ + -117.629472, + 33.686711 + ], + [ + -117.629485, + 33.686673 + ], + [ + -117.629646, + 33.686602 + ], + [ + -117.629842, + 33.686477 + ], + [ + -117.629868, + 33.686466 + ], + [ + -117.629981, + 33.686538 + ], + [ + -117.630038, + 33.686595 + ], + [ + -117.630084, + 33.686656 + ], + [ + -117.630113, + 33.686685 + ], + [ + -117.630116, + 33.686702 + ], + [ + -117.630104, + 33.686717 + ], + [ + -117.630079, + 33.68675 + ], + [ + -117.630066, + 33.686753 + ], + [ + -117.630042, + 33.68674 + ], + [ + -117.630024, + 33.686703 + ], + [ + -117.629978, + 33.686701 + ], + [ + -117.629956, + 33.686735 + ], + [ + -117.629931, + 33.686748 + ], + [ + -117.629951, + 33.686776 + ], + [ + -117.629978, + 33.686761 + ], + [ + -117.630021, + 33.686763 + ], + [ + -117.630044, + 33.686777 + ], + [ + -117.630047, + 33.686792 + ], + [ + -117.630036, + 33.68681 + ], + [ + -117.630023, + 33.686829 + ], + [ + -117.63001, + 33.686839 + ], + [ + -117.629988, + 33.686835 + ], + [ + -117.629968, + 33.686824 + ], + [ + -117.629928, + 33.686818 + ], + [ + -117.6299, + 33.686819 + ], + [ + -117.629867, + 33.686822 + ], + [ + -117.629852, + 33.686817 + ], + [ + -117.629839, + 33.686794 + ], + [ + -117.629818, + 33.686769 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 138953347, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.630949, + 33.687167 + ], + [ + -117.63105, + 33.687203 + ], + [ + -117.631082, + 33.687204 + ], + [ + -117.631105, + 33.687201 + ], + [ + -117.631137, + 33.687188 + ], + [ + -117.63116, + 33.687165 + ], + [ + -117.631176, + 33.687138 + ], + [ + -117.631177, + 33.687108 + ], + [ + -117.63117, + 33.687079 + ], + [ + -117.63115, + 33.68706 + ], + [ + -117.631117, + 33.687042 + ], + [ + -117.631069, + 33.687026 + ], + [ + -117.631044, + 33.687016 + ], + [ + -117.631081, + 33.686934 + ], + [ + -117.631129, + 33.686981 + ], + [ + -117.631191, + 33.687068 + ], + [ + -117.631207, + 33.687116 + ], + [ + -117.6312, + 33.687154 + ], + [ + -117.631181, + 33.687185 + ], + [ + -117.631143, + 33.687216 + ], + [ + -117.631099, + 33.687244 + ], + [ + -117.631042, + 33.687269 + ], + [ + -117.630972, + 33.687283 + ], + [ + -117.630912, + 33.687287 + ], + [ + -117.630856, + 33.687282 + ], + [ + -117.63079, + 33.687275 + ], + [ + -117.630719, + 33.687274 + ], + [ + -117.630652, + 33.687286 + ], + [ + -117.630567, + 33.687308 + ], + [ + -117.630471, + 33.687349 + ], + [ + -117.630396, + 33.687394 + ], + [ + -117.630346, + 33.687419 + ], + [ + -117.630282, + 33.68744 + ], + [ + -117.630212, + 33.687445 + ], + [ + -117.630134, + 33.687445 + ], + [ + -117.630074, + 33.687437 + ], + [ + -117.630021, + 33.687422 + ], + [ + -117.629985, + 33.687394 + ], + [ + -117.629961, + 33.687362 + ], + [ + -117.629943, + 33.687332 + ], + [ + -117.629943, + 33.687311 + ], + [ + -117.629947, + 33.687293 + ], + [ + -117.629979, + 33.687262 + ], + [ + -117.630023, + 33.68722 + ], + [ + -117.630048, + 33.687193 + ], + [ + -117.630069, + 33.687166 + ], + [ + -117.630086, + 33.687132 + ], + [ + -117.630099, + 33.6871 + ], + [ + -117.630108, + 33.687058 + ], + [ + -117.630111, + 33.687017 + ], + [ + -117.630097, + 33.686967 + ], + [ + -117.630072, + 33.686921 + ], + [ + -117.630052, + 33.686883 + ], + [ + -117.630051, + 33.686857 + ], + [ + -117.630062, + 33.686823 + ], + [ + -117.63009, + 33.686785 + ], + [ + -117.630111, + 33.686755 + ], + [ + -117.630141, + 33.686726 + ], + [ + -117.630159, + 33.686717 + ], + [ + -117.630198, + 33.686728 + ], + [ + -117.630292, + 33.686754 + ], + [ + -117.630383, + 33.686754 + ], + [ + -117.630452, + 33.686741 + ], + [ + -117.630512, + 33.686721 + ], + [ + -117.630588, + 33.686695 + ], + [ + -117.630672, + 33.686673 + ], + [ + -117.630751, + 33.686661 + ], + [ + -117.630822, + 33.686656 + ], + [ + -117.630893, + 33.686658 + ], + [ + -117.630971, + 33.686689 + ], + [ + -117.631025, + 33.686754 + ], + [ + -117.631046, + 33.686805 + ], + [ + -117.631061, + 33.686881 + ], + [ + -117.631058, + 33.686936 + ], + [ + -117.631022, + 33.687008 + ], + [ + -117.630949, + 33.687167 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 139059033, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.770246, + 33.791622 + ], + [ + -117.76958, + 33.790518 + ], + [ + -117.769409, + 33.790559 + ], + [ + -117.768333, + 33.790971 + ], + [ + -117.76832, + 33.790945 + ], + [ + -117.767637, + 33.791212 + ], + [ + -117.767397, + 33.791258 + ], + [ + -117.767349, + 33.792224 + ], + [ + -117.767667, + 33.792239 + ], + [ + -117.768653, + 33.792148 + ], + [ + -117.76873, + 33.792323 + ], + [ + -117.769999, + 33.792166 + ], + [ + -117.770352, + 33.793104 + ], + [ + -117.77077, + 33.793818 + ], + [ + -117.77096, + 33.794062 + ], + [ + -117.771111, + 33.794223 + ], + [ + -117.771228, + 33.794304 + ], + [ + -117.771179, + 33.794504 + ], + [ + -117.77112, + 33.794582 + ], + [ + -117.770882, + 33.794722 + ], + [ + -117.771467, + 33.794906 + ], + [ + -117.772075, + 33.794134 + ], + [ + -117.771625, + 33.794365 + ], + [ + -117.771377, + 33.794154 + ], + [ + -117.771299, + 33.793997 + ], + [ + -117.771132, + 33.79378 + ], + [ + -117.770985, + 33.79358 + ], + [ + -117.770822, + 33.793312 + ], + [ + -117.770729, + 33.793139 + ], + [ + -117.770628, + 33.792898 + ], + [ + -117.770596, + 33.792669 + ], + [ + -117.77065, + 33.792452 + ], + [ + -117.770396, + 33.792398 + ], + [ + -117.770293, + 33.79215 + ], + [ + -117.7704, + 33.791724 + ], + [ + -117.770246, + 33.791622 + ] + ] + ] + }, + "properties": { + "name": "Santiago Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 139073151, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.826984, + 33.891119 + ], + [ + -117.826839, + 33.890992 + ], + [ + -117.826817, + 33.891009 + ], + [ + -117.826793, + 33.890988 + ], + [ + -117.826673, + 33.891082 + ], + [ + -117.826733, + 33.891134 + ], + [ + -117.826689, + 33.891169 + ], + [ + -117.826784, + 33.891252 + ], + [ + -117.82681, + 33.891231 + ], + [ + -117.826828, + 33.891247 + ], + [ + -117.82689, + 33.891198 + ], + [ + -117.826911, + 33.891216 + ], + [ + -117.826967, + 33.891172 + ], + [ + -117.826943, + 33.891151 + ], + [ + -117.826984, + 33.891119 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 139503005, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.836128, + 33.836681 + ], + [ + -117.836057, + 33.836901 + ], + [ + -117.835982, + 33.837118 + ], + [ + -117.835846, + 33.837454 + ], + [ + -117.835752, + 33.837659 + ], + [ + -117.835654, + 33.837864 + ], + [ + -117.835436, + 33.838269 + ], + [ + -117.835431, + 33.838289 + ], + [ + -117.835432, + 33.838304 + ], + [ + -117.83544, + 33.838318 + ], + [ + -117.835455, + 33.838331 + ], + [ + -117.835467, + 33.83834 + ], + [ + -117.835457, + 33.838362 + ], + [ + -117.835508, + 33.83839 + ], + [ + -117.835565, + 33.838427 + ], + [ + -117.835606, + 33.838462 + ], + [ + -117.835696, + 33.838555 + ], + [ + -117.835748, + 33.838617 + ], + [ + -117.835809, + 33.838683 + ], + [ + -117.835858, + 33.838726 + ], + [ + -117.835905, + 33.838759 + ], + [ + -117.835958, + 33.83879 + ], + [ + -117.836016, + 33.838817 + ], + [ + -117.836071, + 33.838837 + ], + [ + -117.836116, + 33.838849 + ], + [ + -117.836171, + 33.838858 + ], + [ + -117.836214, + 33.838861 + ], + [ + -117.836257, + 33.838862 + ], + [ + -117.836764, + 33.838855 + ], + [ + -117.836847, + 33.838856 + ], + [ + -117.836934, + 33.838862 + ], + [ + -117.83702, + 33.83887 + ], + [ + -117.837139, + 33.838885 + ], + [ + -117.837285, + 33.838916 + ], + [ + -117.837418, + 33.838949 + ], + [ + -117.837488, + 33.838969 + ], + [ + -117.837547, + 33.838984 + ], + [ + -117.837594, + 33.838993 + ], + [ + -117.837693, + 33.839007 + ], + [ + -117.837782, + 33.839011 + ], + [ + -117.83786, + 33.839015 + ], + [ + -117.837933, + 33.839013 + ], + [ + -117.838001, + 33.839008 + ], + [ + -117.838088, + 33.838996 + ], + [ + -117.83819, + 33.838974 + ], + [ + -117.838271, + 33.838954 + ], + [ + -117.838383, + 33.838921 + ], + [ + -117.838433, + 33.838907 + ], + [ + -117.838485, + 33.838895 + ], + [ + -117.838485, + 33.838877 + ], + [ + -117.838484, + 33.838698 + ], + [ + -117.838485, + 33.838418 + ], + [ + -117.838468, + 33.837952 + ], + [ + -117.838706, + 33.837958 + ], + [ + -117.838707, + 33.837942 + ], + [ + -117.838687, + 33.837901 + ], + [ + -117.838693, + 33.837415 + ], + [ + -117.838856, + 33.837414 + ], + [ + -117.838859, + 33.836969 + ], + [ + -117.839021, + 33.836852 + ], + [ + -117.839024, + 33.836552 + ], + [ + -117.839442, + 33.836509 + ], + [ + -117.839451, + 33.836071 + ], + [ + -117.839146, + 33.836068 + ], + [ + -117.839292, + 33.8354 + ], + [ + -117.839327, + 33.835355 + ], + [ + -117.839267, + 33.835208 + ], + [ + -117.839178, + 33.83517 + ], + [ + -117.839067, + 33.835136 + ], + [ + -117.838957, + 33.835112 + ], + [ + -117.838793, + 33.835087 + ], + [ + -117.838723, + 33.835081 + ], + [ + -117.838648, + 33.835079 + ], + [ + -117.838514, + 33.835079 + ], + [ + -117.837981, + 33.835078 + ], + [ + -117.837863, + 33.835083 + ], + [ + -117.837807, + 33.835087 + ], + [ + -117.837762, + 33.835092 + ], + [ + -117.837757, + 33.835095 + ], + [ + -117.837753, + 33.835099 + ], + [ + -117.837744, + 33.835114 + ], + [ + -117.837754, + 33.835114 + ], + [ + -117.837761, + 33.836668 + ], + [ + -117.836128, + 33.836681 + ] + ] + ] + }, + "properties": { + "name": "Eisenhower Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144662670, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.008773, + 33.81414 + ], + [ + -118.008761, + 33.813644 + ], + [ + -118.007261, + 33.813658 + ], + [ + -118.007258, + 33.813258 + ], + [ + -118.007174, + 33.81326 + ], + [ + -118.007088, + 33.813261 + ], + [ + -118.007085, + 33.813659 + ], + [ + -118.006375, + 33.813671 + ], + [ + -118.006347, + 33.813672 + ], + [ + -118.00797, + 33.814652 + ], + [ + -118.008404, + 33.814048 + ], + [ + -118.008438, + 33.814012 + ], + [ + -118.00849, + 33.814002 + ], + [ + -118.008537, + 33.814007 + ], + [ + -118.008573, + 33.814028 + ], + [ + -118.008773, + 33.81414 + ] + ] + ] + }, + "properties": { + "name": "Hansen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144663529, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.999526, + 33.824685 + ], + [ + -117.998554, + 33.824604 + ], + [ + -117.997734, + 33.824612 + ], + [ + -117.997732, + 33.82443 + ], + [ + -117.997706, + 33.824419 + ], + [ + -117.997704, + 33.824092 + ], + [ + -117.997659, + 33.824049 + ], + [ + -117.997169, + 33.824051 + ], + [ + -117.99709, + 33.824096 + ], + [ + -117.997094, + 33.824388 + ], + [ + -117.99709, + 33.824396 + ], + [ + -117.997083, + 33.824406 + ], + [ + -117.997071, + 33.824414 + ], + [ + -117.997061, + 33.824424 + ], + [ + -117.997058, + 33.824437 + ], + [ + -117.997057, + 33.824507 + ], + [ + -117.997059, + 33.824621 + ], + [ + -117.996838, + 33.824618 + ], + [ + -117.996811, + 33.824589 + ], + [ + -117.996724, + 33.821168 + ], + [ + -117.997619, + 33.821134 + ], + [ + -117.997704, + 33.821024 + ], + [ + -117.999443, + 33.820999 + ], + [ + -117.999437, + 33.82121 + ], + [ + -117.999472, + 33.821257 + ], + [ + -117.999487, + 33.821303 + ], + [ + -117.99952, + 33.822364 + ], + [ + -117.999526, + 33.824593 + ], + [ + -117.999526, + 33.824685 + ] + ] + ] + }, + "properties": { + "name": "Twila Reid Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144663970, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.991242, + 33.828438 + ], + [ + -117.987532, + 33.828466 + ], + [ + -117.987522, + 33.829904 + ], + [ + -117.987835, + 33.829874 + ], + [ + -117.988046, + 33.829849 + ], + [ + -117.988291, + 33.829814 + ], + [ + -117.988704, + 33.829709 + ], + [ + -117.98898, + 33.829624 + ], + [ + -117.989194, + 33.829546 + ], + [ + -117.98939, + 33.829457 + ], + [ + -117.989683, + 33.829317 + ], + [ + -117.989972, + 33.829159 + ], + [ + -117.991247, + 33.828483 + ], + [ + -117.991242, + 33.828438 + ] + ] + ] + }, + "properties": { + "name": "Schweitzer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144666437, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.981203, + 33.828413 + ], + [ + -117.981165, + 33.824985 + ], + [ + -117.980367, + 33.824995 + ], + [ + -117.980305, + 33.82497 + ], + [ + -117.979189, + 33.824979 + ], + [ + -117.978874, + 33.824982 + ], + [ + -117.978382, + 33.824987 + ], + [ + -117.978385, + 33.825225 + ], + [ + -117.97827, + 33.825226 + ], + [ + -117.978272, + 33.82539 + ], + [ + -117.978236, + 33.82539 + ], + [ + -117.978239, + 33.825593 + ], + [ + -117.978239, + 33.825609 + ], + [ + -117.97811, + 33.825611 + ], + [ + -117.978112, + 33.825749 + ], + [ + -117.97795, + 33.82575 + ], + [ + -117.977946, + 33.82674 + ], + [ + -117.978137, + 33.826738 + ], + [ + -117.978137, + 33.827181 + ], + [ + -117.978135, + 33.828443 + ], + [ + -117.97879, + 33.828436 + ], + [ + -117.981203, + 33.828413 + ] + ] + ] + }, + "properties": { + "name": "Maxwell Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144667021, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.977693, + 33.841243 + ], + [ + -117.978274, + 33.841249 + ], + [ + -117.978294, + 33.842252 + ], + [ + -117.976247, + 33.842277 + ], + [ + -117.976229, + 33.841323 + ], + [ + -117.977583, + 33.841325 + ], + [ + -117.977693, + 33.841243 + ] + ] + ] + }, + "properties": { + "name": "Peter Marshall Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144667400, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.966219, + 33.841951 + ], + [ + -117.966221, + 33.842495 + ], + [ + -117.966326, + 33.842493 + ], + [ + -117.966325, + 33.842955 + ], + [ + -117.966323, + 33.843357 + ], + [ + -117.963791, + 33.843402 + ], + [ + -117.961336, + 33.843432 + ], + [ + -117.961243, + 33.839901 + ], + [ + -117.96292, + 33.839877 + ], + [ + -117.962972, + 33.841396 + ], + [ + -117.963052, + 33.841592 + ], + [ + -117.963165, + 33.841765 + ], + [ + -117.963317, + 33.841896 + ], + [ + -117.963524, + 33.842006 + ], + [ + -117.963777, + 33.842077 + ], + [ + -117.964077, + 33.842082 + ], + [ + -117.965643, + 33.842064 + ], + [ + -117.965831, + 33.842019 + ], + [ + -117.965976, + 33.841961 + ], + [ + -117.966219, + 33.841951 + ] + ] + ] + }, + "properties": { + "name": "Brookhurst Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144667518, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.953717, + 33.849125 + ], + [ + -117.953717, + 33.848049 + ], + [ + -117.955448, + 33.848034 + ], + [ + -117.955431, + 33.847077 + ], + [ + -117.951893, + 33.847131 + ], + [ + -117.951888, + 33.847385 + ], + [ + -117.951855, + 33.847601 + ], + [ + -117.951813, + 33.847755 + ], + [ + -117.951729, + 33.84794 + ], + [ + -117.951598, + 33.848133 + ], + [ + -117.951464, + 33.848312 + ], + [ + -117.951332, + 33.848436 + ], + [ + -117.951214, + 33.848548 + ], + [ + -117.951775, + 33.849013 + ], + [ + -117.951955, + 33.849091 + ], + [ + -117.952075, + 33.849118 + ], + [ + -117.952196, + 33.849134 + ], + [ + -117.952357, + 33.84914 + ], + [ + -117.953717, + 33.849125 + ] + ] + ] + }, + "properties": { + "name": "John Marshall Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144667638, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.952408, + 33.822356 + ], + [ + -117.951849, + 33.822364 + ], + [ + -117.951825, + 33.822344 + ], + [ + -117.95067, + 33.822343 + ], + [ + -117.95067, + 33.822287 + ], + [ + -117.950235, + 33.822289 + ], + [ + -117.950223, + 33.821501 + ], + [ + -117.952365, + 33.821472 + ], + [ + -117.952392, + 33.821471 + ], + [ + -117.952408, + 33.822356 + ] + ] + ] + }, + "properties": { + "name": "Barton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144668246, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.939251, + 33.815049 + ], + [ + -117.939258, + 33.814257 + ], + [ + -117.936527, + 33.81425 + ], + [ + -117.936534, + 33.815686 + ], + [ + -117.937101, + 33.815677 + ], + [ + -117.937093, + 33.815067 + ], + [ + -117.939251, + 33.815049 + ] + ] + ] + }, + "properties": { + "name": "Palm Lane Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144668359, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.934577, + 33.806877 + ], + [ + -117.932796, + 33.806892 + ], + [ + -117.932804, + 33.807681 + ], + [ + -117.932847, + 33.807681 + ], + [ + -117.933662, + 33.807673 + ], + [ + -117.933667, + 33.807476 + ], + [ + -117.933692, + 33.807436 + ], + [ + -117.933734, + 33.807405 + ], + [ + -117.933783, + 33.807389 + ], + [ + -117.933842, + 33.807398 + ], + [ + -117.934003, + 33.807425 + ], + [ + -117.934043, + 33.807416 + ], + [ + -117.934064, + 33.807407 + ], + [ + -117.934094, + 33.807409 + ], + [ + -117.934131, + 33.807409 + ], + [ + -117.934169, + 33.807421 + ], + [ + -117.934209, + 33.807443 + ], + [ + -117.934263, + 33.807385 + ], + [ + -117.934341, + 33.807291 + ], + [ + -117.934424, + 33.807175 + ], + [ + -117.934467, + 33.807111 + ], + [ + -117.934526, + 33.806999 + ], + [ + -117.934577, + 33.806877 + ] + ] + ] + }, + "properties": { + "name": "Energy Field Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144668629, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.934758, + 33.79919 + ], + [ + -117.934408, + 33.799283 + ], + [ + -117.93441, + 33.799586 + ], + [ + -117.932803, + 33.799612 + ], + [ + -117.932819, + 33.801324 + ], + [ + -117.932898, + 33.801323 + ], + [ + -117.932919, + 33.801305 + ], + [ + -117.933232, + 33.801042 + ], + [ + -117.933868, + 33.801562 + ], + [ + -117.933916, + 33.801521 + ], + [ + -117.934028, + 33.801614 + ], + [ + -117.933936, + 33.801695 + ], + [ + -117.934048, + 33.801792 + ], + [ + -117.934005, + 33.801826 + ], + [ + -117.934162, + 33.801968 + ], + [ + -117.934134, + 33.801989 + ], + [ + -117.934221, + 33.802064 + ], + [ + -117.934075, + 33.802186 + ], + [ + -117.93418, + 33.80227 + ], + [ + -117.934748, + 33.802281 + ], + [ + -117.934852, + 33.801852 + ], + [ + -117.935096, + 33.801318 + ], + [ + -117.934855, + 33.801199 + ], + [ + -117.934855, + 33.800988 + ], + [ + -117.934852, + 33.800729 + ], + [ + -117.934838, + 33.799583 + ], + [ + -117.934663, + 33.799586 + ], + [ + -117.934908, + 33.799278 + ], + [ + -117.934758, + 33.79919 + ] + ] + ] + }, + "properties": { + "name": "Stoddard Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144669353, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.906229, + 33.794532 + ], + [ + -117.905151, + 33.794536 + ], + [ + -117.905153, + 33.794592 + ], + [ + -117.905002, + 33.794595 + ], + [ + -117.905014, + 33.795307 + ], + [ + -117.904899, + 33.795308 + ], + [ + -117.904902, + 33.795458 + ], + [ + -117.903803, + 33.795481 + ], + [ + -117.903809, + 33.795744 + ], + [ + -117.903743, + 33.795745 + ], + [ + -117.903746, + 33.796048 + ], + [ + -117.906266, + 33.796052 + ], + [ + -117.906229, + 33.794532 + ] + ] + ] + }, + "properties": { + "name": "Ponderosa Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144669604, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.911062, + 33.822793 + ], + [ + -117.91072, + 33.821795 + ], + [ + -117.910641, + 33.821813 + ], + [ + -117.909587, + 33.822051 + ], + [ + -117.909879, + 33.822914 + ], + [ + -117.909931, + 33.823057 + ], + [ + -117.911062, + 33.822793 + ] + ] + ] + }, + "properties": { + "name": "Walnut Grove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144669847, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.892893, + 33.82581 + ], + [ + -117.891613, + 33.826097 + ], + [ + -117.891631, + 33.826152 + ], + [ + -117.89138, + 33.826217 + ], + [ + -117.891487, + 33.826532 + ], + [ + -117.891431, + 33.826536 + ], + [ + -117.891696, + 33.827269 + ], + [ + -117.8894, + 33.827813 + ], + [ + -117.889402, + 33.82658 + ], + [ + -117.889404, + 33.825742 + ], + [ + -117.889405, + 33.824726 + ], + [ + -117.889406, + 33.824497 + ], + [ + -117.8929, + 33.823684 + ], + [ + -117.89318, + 33.824502 + ], + [ + -117.892502, + 33.824654 + ], + [ + -117.892893, + 33.82581 + ] + ] + ] + }, + "properties": { + "name": "Boysen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144670132, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.91575, + 33.831037 + ], + [ + -117.914665, + 33.831296 + ], + [ + -117.914798, + 33.831708 + ], + [ + -117.91589, + 33.83144 + ], + [ + -117.91575, + 33.831037 + ] + ] + ] + }, + "properties": { + "name": "Little Peoples Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144670389, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.906679, + 33.836328 + ], + [ + -117.906253, + 33.836415 + ], + [ + -117.905823, + 33.835119 + ], + [ + -117.906244, + 33.835018 + ], + [ + -117.906679, + 33.836328 + ] + ] + ] + }, + "properties": { + "name": "Citrus Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144670550, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.912647, + 33.838072 + ], + [ + -117.912378, + 33.837274 + ], + [ + -117.911618, + 33.83745 + ], + [ + -117.911887, + 33.838248 + ], + [ + -117.912647, + 33.838072 + ] + ] + ] + }, + "properties": { + "name": "George Washington Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144670641, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.935068, + 33.843393 + ], + [ + -117.935051, + 33.842199 + ], + [ + -117.933791, + 33.842288 + ], + [ + -117.933732, + 33.842332 + ], + [ + -117.933635, + 33.842359 + ], + [ + -117.933564, + 33.84234 + ], + [ + -117.933484, + 33.8423 + ], + [ + -117.933488, + 33.844175 + ], + [ + -117.933489, + 33.844273 + ], + [ + -117.933489, + 33.844448 + ], + [ + -117.933796, + 33.844181 + ], + [ + -117.934253, + 33.843883 + ], + [ + -117.934427, + 33.843779 + ], + [ + -117.934621, + 33.843663 + ], + [ + -117.935068, + 33.843393 + ] + ] + ] + }, + "properties": { + "name": "Sage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144670896, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.915954, + 33.84892 + ], + [ + -117.915954, + 33.848748 + ], + [ + -117.915507, + 33.848746 + ], + [ + -117.915501, + 33.848643 + ], + [ + -117.915455, + 33.848668 + ], + [ + -117.915434, + 33.848673 + ], + [ + -117.915377, + 33.848686 + ], + [ + -117.914897, + 33.848675 + ], + [ + -117.914895, + 33.849055 + ], + [ + -117.915163, + 33.849055 + ], + [ + -117.915187, + 33.849 + ], + [ + -117.915219, + 33.848969 + ], + [ + -117.915284, + 33.848933 + ], + [ + -117.915337, + 33.848917 + ], + [ + -117.915393, + 33.84892 + ], + [ + -117.915445, + 33.848933 + ], + [ + -117.915498, + 33.848973 + ], + [ + -117.915517, + 33.849013 + ], + [ + -117.915538, + 33.849035 + ], + [ + -117.915537, + 33.848924 + ], + [ + -117.915954, + 33.84892 + ] + ] + ] + }, + "properties": { + "name": "Julianna Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144671034, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.893672, + 33.849075 + ], + [ + -117.893664, + 33.850479 + ], + [ + -117.895808, + 33.850487 + ], + [ + -117.895813, + 33.849442 + ], + [ + -117.895815, + 33.849083 + ], + [ + -117.893672, + 33.849075 + ] + ] + ] + }, + "properties": { + "name": "Edison Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144671075, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.882695, + 33.82904 + ], + [ + -117.88064, + 33.829014 + ], + [ + -117.880651, + 33.8272 + ], + [ + -117.882705, + 33.827227 + ], + [ + -117.882689, + 33.827441 + ], + [ + -117.882614, + 33.827467 + ], + [ + -117.882554, + 33.827533 + ], + [ + -117.882565, + 33.827604 + ], + [ + -117.882608, + 33.827676 + ], + [ + -117.88263, + 33.828497 + ], + [ + -117.88257, + 33.828576 + ], + [ + -117.882571, + 33.828644 + ], + [ + -117.882608, + 33.828714 + ], + [ + -117.882672, + 33.828736 + ], + [ + -117.882695, + 33.82904 + ] + ] + ] + }, + "properties": { + "name": "Juarez Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144671264, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.869426, + 33.842781 + ], + [ + -117.869426, + 33.842753 + ], + [ + -117.869428, + 33.842507 + ], + [ + -117.86939, + 33.842483 + ], + [ + -117.869351, + 33.842431 + ], + [ + -117.869332, + 33.84238 + ], + [ + -117.86932, + 33.842338 + ], + [ + -117.869321, + 33.842295 + ], + [ + -117.869341, + 33.842207 + ], + [ + -117.869355, + 33.842146 + ], + [ + -117.869357, + 33.84196 + ], + [ + -117.869337, + 33.841961 + ], + [ + -117.869311, + 33.841938 + ], + [ + -117.869308, + 33.841924 + ], + [ + -117.867522, + 33.841929 + ], + [ + -117.8675, + 33.841937 + ], + [ + -117.867486, + 33.84195 + ], + [ + -117.867477, + 33.841966 + ], + [ + -117.867471, + 33.842729 + ], + [ + -117.867471, + 33.842808 + ], + [ + -117.867453, + 33.842936 + ], + [ + -117.867424, + 33.84305 + ], + [ + -117.86737, + 33.843172 + ], + [ + -117.867312, + 33.843306 + ], + [ + -117.867291, + 33.843383 + ], + [ + -117.867275, + 33.843509 + ], + [ + -117.867273, + 33.844377 + ], + [ + -117.8685, + 33.844365 + ], + [ + -117.868499, + 33.844254 + ], + [ + -117.868675, + 33.844255 + ], + [ + -117.868675, + 33.844197 + ], + [ + -117.868722, + 33.844197 + ], + [ + -117.868718, + 33.842814 + ], + [ + -117.869172, + 33.842815 + ], + [ + -117.869173, + 33.842781 + ], + [ + -117.869426, + 33.842781 + ] + ] + ] + }, + "properties": { + "name": "Rio Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144674260, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.806684, + 33.854007 + ], + [ + -117.806683, + 33.852978 + ], + [ + -117.806417, + 33.852979 + ], + [ + -117.804997, + 33.852985 + ], + [ + -117.804718, + 33.852932 + ], + [ + -117.804712, + 33.852429 + ], + [ + -117.80456, + 33.852286 + ], + [ + -117.804556, + 33.851548 + ], + [ + -117.804554, + 33.851329 + ], + [ + -117.803402, + 33.851601 + ], + [ + -117.803264, + 33.851641 + ], + [ + -117.803165, + 33.85168 + ], + [ + -117.803061, + 33.851736 + ], + [ + -117.802982, + 33.851787 + ], + [ + -117.802885, + 33.851859 + ], + [ + -117.802796, + 33.851916 + ], + [ + -117.802643, + 33.851991 + ], + [ + -117.802552, + 33.852026 + ], + [ + -117.80245, + 33.852055 + ], + [ + -117.802352, + 33.852076 + ], + [ + -117.802323, + 33.852099 + ], + [ + -117.802319, + 33.852117 + ], + [ + -117.802302, + 33.852117 + ], + [ + -117.802311, + 33.853509 + ], + [ + -117.802314, + 33.853673 + ], + [ + -117.802311, + 33.854022 + ], + [ + -117.806684, + 33.854007 + ] + ] + ] + }, + "properties": { + "name": "Peralta Canyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144674613, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.796006, + 33.849087 + ], + [ + -117.796301, + 33.848668 + ], + [ + -117.796068, + 33.848205 + ], + [ + -117.796011, + 33.848008 + ], + [ + -117.796251, + 33.847118 + ], + [ + -117.796365, + 33.846872 + ], + [ + -117.796859, + 33.846431 + ], + [ + -117.796966, + 33.846213 + ], + [ + -117.79688, + 33.845825 + ], + [ + -117.796907, + 33.845442 + ], + [ + -117.796671, + 33.845505 + ], + [ + -117.796358, + 33.845207 + ], + [ + -117.796076, + 33.845202 + ], + [ + -117.795827, + 33.845015 + ], + [ + -117.795628, + 33.845136 + ], + [ + -117.795389, + 33.845202 + ], + [ + -117.795194, + 33.845483 + ], + [ + -117.794997, + 33.845531 + ], + [ + -117.794123, + 33.845393 + ], + [ + -117.794042, + 33.846449 + ], + [ + -117.794375, + 33.846494 + ], + [ + -117.794652, + 33.846927 + ], + [ + -117.79467, + 33.847304 + ], + [ + -117.794488, + 33.847665 + ], + [ + -117.79452, + 33.8482 + ], + [ + -117.794394, + 33.848513 + ], + [ + -117.794343, + 33.848766 + ], + [ + -117.794289, + 33.848948 + ], + [ + -117.794187, + 33.849145 + ], + [ + -117.794166, + 33.849185 + ], + [ + -117.794353, + 33.849403 + ], + [ + -117.794874, + 33.849234 + ], + [ + -117.795221, + 33.849199 + ], + [ + -117.795478, + 33.849203 + ], + [ + -117.795671, + 33.84919 + ], + [ + -117.795907, + 33.849137 + ], + [ + -117.796006, + 33.849087 + ] + ] + ] + }, + "properties": { + "name": "Pelanconi Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144674907, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.790203, + 33.844839 + ], + [ + -117.789134, + 33.8446 + ], + [ + -117.78907, + 33.844583 + ], + [ + -117.789059, + 33.844614 + ], + [ + -117.788884, + 33.844573 + ], + [ + -117.788689, + 33.844618 + ], + [ + -117.788176, + 33.8446 + ], + [ + -117.78786, + 33.844494 + ], + [ + -117.787658, + 33.844447 + ], + [ + -117.787607, + 33.845536 + ], + [ + -117.787208, + 33.845565 + ], + [ + -117.786859, + 33.845681 + ], + [ + -117.786685, + 33.845551 + ], + [ + -117.786519, + 33.845531 + ], + [ + -117.786254, + 33.845586 + ], + [ + -117.786261, + 33.845462 + ], + [ + -117.786312, + 33.845315 + ], + [ + -117.786393, + 33.845186 + ], + [ + -117.786508, + 33.844999 + ], + [ + -117.786554, + 33.844816 + ], + [ + -117.78657, + 33.844672 + ], + [ + -117.786528, + 33.844479 + ], + [ + -117.786496, + 33.844417 + ], + [ + -117.786395, + 33.844226 + ], + [ + -117.786528, + 33.844162 + ], + [ + -117.786717, + 33.844116 + ], + [ + -117.78683, + 33.844088 + ], + [ + -117.787098, + 33.844061 + ], + [ + -117.787417, + 33.844066 + ], + [ + -117.787619, + 33.844107 + ], + [ + -117.788029, + 33.844179 + ], + [ + -117.788343, + 33.844217 + ], + [ + -117.788646, + 33.844204 + ], + [ + -117.788882, + 33.844168 + ], + [ + -117.789255, + 33.844092 + ], + [ + -117.789442, + 33.844086 + ], + [ + -117.790132, + 33.843901 + ], + [ + -117.790226, + 33.843916 + ], + [ + -117.790328, + 33.84395 + ], + [ + -117.790345, + 33.843963 + ], + [ + -117.790395, + 33.843999 + ], + [ + -117.790422, + 33.844098 + ], + [ + -117.790428, + 33.844187 + ], + [ + -117.790203, + 33.844839 + ] + ] + ] + }, + "properties": { + "name": "Imperial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144675118, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.77575, + 33.858518 + ], + [ + -117.774902, + 33.857342 + ], + [ + -117.774698, + 33.857319 + ], + [ + -117.774618, + 33.857221 + ], + [ + -117.774401, + 33.856848 + ], + [ + -117.774412, + 33.856416 + ], + [ + -117.774275, + 33.856201 + ], + [ + -117.772921, + 33.856799 + ], + [ + -117.773135, + 33.857049 + ], + [ + -117.773019, + 33.857408 + ], + [ + -117.773067, + 33.857555 + ], + [ + -117.77384, + 33.858647 + ], + [ + -117.773851, + 33.858736 + ], + [ + -117.774081, + 33.859061 + ], + [ + -117.774371, + 33.858843 + ], + [ + -117.77575, + 33.858518 + ] + ] + ] + }, + "properties": { + "name": "Eucalyptus Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144681470, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.769339, + 33.839837 + ], + [ + -117.769396, + 33.839513 + ], + [ + -117.769114, + 33.83855 + ], + [ + -117.769005, + 33.838252 + ], + [ + -117.768095, + 33.838153 + ], + [ + -117.767494, + 33.838554 + ], + [ + -117.767138, + 33.838648 + ], + [ + -117.766682, + 33.838862 + ], + [ + -117.766555, + 33.839659 + ], + [ + -117.767245, + 33.839602 + ], + [ + -117.767841, + 33.83954 + ], + [ + -117.768291, + 33.839557 + ], + [ + -117.768812, + 33.839691 + ], + [ + -117.769339, + 33.839837 + ] + ] + ] + }, + "properties": { + "name": "Oak Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144681519, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.747034, + 33.864616 + ], + [ + -117.746744, + 33.863814 + ], + [ + -117.746179, + 33.863998 + ], + [ + -117.74597, + 33.864149 + ], + [ + -117.745712, + 33.86447 + ], + [ + -117.7461, + 33.86466 + ], + [ + -117.746353, + 33.864705 + ], + [ + -117.746549, + 33.864697 + ], + [ + -117.747034, + 33.864616 + ] + ] + ] + }, + "properties": { + "name": "Roosevelt Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144681520, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.744095, + 33.86379 + ], + [ + -117.744609, + 33.862808 + ], + [ + -117.744867, + 33.862611 + ], + [ + -117.745062, + 33.862546 + ], + [ + -117.744974, + 33.862373 + ], + [ + -117.744865, + 33.862255 + ], + [ + -117.743894, + 33.861909 + ], + [ + -117.74347, + 33.861207 + ], + [ + -117.742255, + 33.861196 + ], + [ + -117.742542, + 33.86225 + ], + [ + -117.742665, + 33.862609 + ], + [ + -117.743032, + 33.862631 + ], + [ + -117.743121, + 33.8628 + ], + [ + -117.743049, + 33.862952 + ], + [ + -117.743067, + 33.863225 + ], + [ + -117.742969, + 33.863548 + ], + [ + -117.744095, + 33.86379 + ] + ] + ] + }, + "properties": { + "name": "Sycamore Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144681686, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.733001, + 33.859253 + ], + [ + -117.731904, + 33.858019 + ], + [ + -117.731626, + 33.857814 + ], + [ + -117.731359, + 33.857827 + ], + [ + -117.730748, + 33.858513 + ], + [ + -117.730172, + 33.858915 + ], + [ + -117.728988, + 33.859208 + ], + [ + -117.728122, + 33.859459 + ], + [ + -117.728687, + 33.860023 + ], + [ + -117.72922, + 33.860493 + ], + [ + -117.729986, + 33.860937 + ], + [ + -117.730795, + 33.861198 + ], + [ + -117.731241, + 33.86132 + ], + [ + -117.731574, + 33.861337 + ], + [ + -117.731681, + 33.860224 + ], + [ + -117.731488, + 33.859859 + ], + [ + -117.733001, + 33.859253 + ] + ] + ] + }, + "properties": { + "name": "Toyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144681736, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.742329, + 33.845454 + ], + [ + -117.74234, + 33.845589 + ], + [ + -117.742532, + 33.845541 + ], + [ + -117.74278, + 33.845462 + ], + [ + -117.742985, + 33.845372 + ], + [ + -117.743226, + 33.845231 + ], + [ + -117.743425, + 33.845069 + ], + [ + -117.743578, + 33.844912 + ], + [ + -117.743698, + 33.844749 + ], + [ + -117.743819, + 33.844501 + ], + [ + -117.743876, + 33.844314 + ], + [ + -117.743917, + 33.843942 + ], + [ + -117.743909, + 33.843909 + ], + [ + -117.743886, + 33.843875 + ], + [ + -117.743848, + 33.843849 + ], + [ + -117.743391, + 33.843796 + ], + [ + -117.743117, + 33.843745 + ], + [ + -117.742791, + 33.843651 + ], + [ + -117.742565, + 33.843557 + ], + [ + -117.742268, + 33.843399 + ], + [ + -117.742006, + 33.843212 + ], + [ + -117.741935, + 33.843198 + ], + [ + -117.741863, + 33.843226 + ], + [ + -117.741384, + 33.843521 + ], + [ + -117.741116, + 33.843698 + ], + [ + -117.740915, + 33.843844 + ], + [ + -117.741046, + 33.843927 + ], + [ + -117.741968, + 33.844512 + ], + [ + -117.742026, + 33.844456 + ], + [ + -117.742256, + 33.844576 + ], + [ + -117.742445, + 33.845062 + ], + [ + -117.74228, + 33.845248 + ], + [ + -117.742324, + 33.845297 + ], + [ + -117.742344, + 33.845341 + ], + [ + -117.742343, + 33.845394 + ], + [ + -117.742329, + 33.845454 + ] + ] + ] + }, + "properties": { + "name": "Canyon Rim Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682008, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.805619, + 33.833532 + ], + [ + -117.805667, + 33.833444 + ], + [ + -117.805651, + 33.833372 + ], + [ + -117.805383, + 33.833203 + ], + [ + -117.804884, + 33.832837 + ], + [ + -117.804423, + 33.8329 + ], + [ + -117.804777, + 33.833662 + ], + [ + -117.805066, + 33.833965 + ], + [ + -117.805619, + 33.833532 + ] + ] + ] + }, + "properties": { + "name": "Belmont Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682043, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.871637, + 33.793112 + ], + [ + -117.870934, + 33.793915 + ], + [ + -117.87076, + 33.794138 + ], + [ + -117.870625, + 33.794353 + ], + [ + -117.870512, + 33.794598 + ], + [ + -117.870435, + 33.794874 + ], + [ + -117.870342, + 33.794869 + ], + [ + -117.868399, + 33.794854 + ], + [ + -117.868025, + 33.79486 + ], + [ + -117.867842, + 33.794877 + ], + [ + -117.867696, + 33.794903 + ], + [ + -117.867556, + 33.794938 + ], + [ + -117.867415, + 33.794982 + ], + [ + -117.86725, + 33.79503 + ], + [ + -117.867095, + 33.795061 + ], + [ + -117.866939, + 33.795081 + ], + [ + -117.86679, + 33.795088 + ], + [ + -117.866747, + 33.795084 + ], + [ + -117.866705, + 33.795068 + ], + [ + -117.866683, + 33.79504 + ], + [ + -117.866674, + 33.795015 + ], + [ + -117.866671, + 33.79314 + ], + [ + -117.866681, + 33.793107 + ], + [ + -117.8667, + 33.793085 + ], + [ + -117.866733, + 33.79307 + ], + [ + -117.866771, + 33.793062 + ], + [ + -117.871529, + 33.793084 + ], + [ + -117.871637, + 33.793112 + ] + ] + ] + }, + "properties": { + "name": "El Camino Real Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682099, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.767011, + 33.828312 + ], + [ + -117.765845, + 33.828138 + ], + [ + -117.764035, + 33.82791 + ], + [ + -117.763979, + 33.828229 + ], + [ + -117.763741, + 33.828199 + ], + [ + -117.76283, + 33.82859 + ], + [ + -117.762892, + 33.828674 + ], + [ + -117.762881, + 33.82869 + ], + [ + -117.762856, + 33.828732 + ], + [ + -117.762853, + 33.828753 + ], + [ + -117.762858, + 33.828771 + ], + [ + -117.76288, + 33.828811 + ], + [ + -117.76289, + 33.828868 + ], + [ + -117.762944, + 33.828928 + ], + [ + -117.763067, + 33.828942 + ], + [ + -117.763388, + 33.828775 + ], + [ + -117.763452, + 33.828761 + ], + [ + -117.763512, + 33.828757 + ], + [ + -117.76377, + 33.828654 + ], + [ + -117.763995, + 33.828578 + ], + [ + -117.764048, + 33.828538 + ], + [ + -117.764246, + 33.828483 + ], + [ + -117.764304, + 33.828482 + ], + [ + -117.764388, + 33.828468 + ], + [ + -117.764741, + 33.828397 + ], + [ + -117.765048, + 33.828352 + ], + [ + -117.765331, + 33.828327 + ], + [ + -117.76584, + 33.828316 + ], + [ + -117.766051, + 33.828317 + ], + [ + -117.766112, + 33.828292 + ], + [ + -117.766309, + 33.82829 + ], + [ + -117.766376, + 33.828316 + ], + [ + -117.767011, + 33.828312 + ] + ] + ] + }, + "properties": { + "name": "Fred Barrera Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682107, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.823426, + 33.791567 + ], + [ + -117.823375, + 33.79156 + ], + [ + -117.822462, + 33.79147 + ], + [ + -117.82246, + 33.791498 + ], + [ + -117.822467, + 33.791538 + ], + [ + -117.822507, + 33.79159 + ], + [ + -117.822518, + 33.791637 + ], + [ + -117.822512, + 33.79167 + ], + [ + -117.822492, + 33.791706 + ], + [ + -117.822463, + 33.791739 + ], + [ + -117.822421, + 33.791763 + ], + [ + -117.822388, + 33.791772 + ], + [ + -117.822319, + 33.791768 + ], + [ + -117.822267, + 33.79177 + ], + [ + -117.822189, + 33.791629 + ], + [ + -117.82223, + 33.7916 + ], + [ + -117.822271, + 33.791561 + ], + [ + -117.822305, + 33.791528 + ], + [ + -117.822321, + 33.791503 + ], + [ + -117.822324, + 33.791472 + ], + [ + -117.818479, + 33.79147 + ], + [ + -117.81848, + 33.791646 + ], + [ + -117.818473, + 33.793335 + ], + [ + -117.818473, + 33.793394 + ], + [ + -117.818712, + 33.793393 + ], + [ + -117.818892, + 33.793564 + ], + [ + -117.819113, + 33.793534 + ], + [ + -117.819212, + 33.793312 + ], + [ + -117.819375, + 33.793149 + ], + [ + -117.819514, + 33.79314 + ], + [ + -117.819617, + 33.793208 + ], + [ + -117.819754, + 33.793413 + ], + [ + -117.819855, + 33.793482 + ], + [ + -117.820157, + 33.793507 + ], + [ + -117.820426, + 33.7937 + ], + [ + -117.819241, + 33.794865 + ], + [ + -117.819022, + 33.795088 + ], + [ + -117.819205, + 33.795119 + ], + [ + -117.819381, + 33.795135 + ], + [ + -117.819422, + 33.795134 + ], + [ + -117.819458, + 33.795125 + ], + [ + -117.819506, + 33.795111 + ], + [ + -117.819557, + 33.795111 + ], + [ + -117.819598, + 33.795117 + ], + [ + -117.819646, + 33.795125 + ], + [ + -117.819689, + 33.795152 + ], + [ + -117.819713, + 33.795185 + ], + [ + -117.820144, + 33.795198 + ], + [ + -117.82025, + 33.795193 + ], + [ + -117.820548, + 33.795144 + ], + [ + -117.82055, + 33.795087 + ], + [ + -117.821255, + 33.795082 + ], + [ + -117.821283, + 33.795081 + ], + [ + -117.821309, + 33.795078 + ], + [ + -117.821336, + 33.795066 + ], + [ + -117.821354, + 33.795054 + ], + [ + -117.821845, + 33.794692 + ], + [ + -117.821973, + 33.794622 + ], + [ + -117.822201, + 33.794427 + ], + [ + -117.822229, + 33.794368 + ], + [ + -117.822237, + 33.794297 + ], + [ + -117.822252, + 33.794238 + ], + [ + -117.822251, + 33.794201 + ], + [ + -117.822235, + 33.794156 + ], + [ + -117.822261, + 33.794106 + ], + [ + -117.822295, + 33.794039 + ], + [ + -117.822324, + 33.793994 + ], + [ + -117.822352, + 33.793946 + ], + [ + -117.822366, + 33.793922 + ], + [ + -117.822388, + 33.793887 + ], + [ + -117.8224, + 33.793842 + ], + [ + -117.822394, + 33.793788 + ], + [ + -117.822585, + 33.793394 + ], + [ + -117.822715, + 33.79301 + ], + [ + -117.823124, + 33.792383 + ], + [ + -117.82342, + 33.792139 + ], + [ + -117.823508, + 33.792082 + ], + [ + -117.823551, + 33.792048 + ], + [ + -117.823569, + 33.792016 + ], + [ + -117.82357, + 33.791972 + ], + [ + -117.823513, + 33.791764 + ], + [ + -117.823472, + 33.791634 + ], + [ + -117.823458, + 33.791592 + ], + [ + -117.823447, + 33.791575 + ], + [ + -117.823426, + 33.791567 + ] + ] + ] + }, + "properties": { + "name": "Grijalva Park at Santiago Creek", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682108, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.830201, + 33.802123 + ], + [ + -117.830214, + 33.800499 + ], + [ + -117.830216, + 33.800225 + ], + [ + -117.830217, + 33.800057 + ], + [ + -117.830227, + 33.79869 + ], + [ + -117.830881, + 33.798685 + ], + [ + -117.831243, + 33.802064 + ], + [ + -117.831198, + 33.802089 + ], + [ + -117.830201, + 33.802123 + ] + ] + ] + }, + "properties": { + "name": "Handy Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682154, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.852993, + 33.778582 + ], + [ + -117.852157, + 33.778578 + ], + [ + -117.852156, + 33.778669 + ], + [ + -117.851977, + 33.77867 + ], + [ + -117.85192, + 33.778627 + ], + [ + -117.85182, + 33.778624 + ], + [ + -117.85174, + 33.778574 + ], + [ + -117.851504, + 33.778326 + ], + [ + -117.850952, + 33.778333 + ], + [ + -117.850882, + 33.778222 + ], + [ + -117.850489, + 33.778332 + ], + [ + -117.850371, + 33.778376 + ], + [ + -117.849939, + 33.778661 + ], + [ + -117.849811, + 33.778534 + ], + [ + -117.848875, + 33.779216 + ], + [ + -117.848704, + 33.779345 + ], + [ + -117.84873, + 33.777141 + ], + [ + -117.84855, + 33.776969 + ], + [ + -117.848044, + 33.776943 + ], + [ + -117.846625, + 33.776923 + ], + [ + -117.846613, + 33.775988 + ], + [ + -117.848024, + 33.775645 + ], + [ + -117.848453, + 33.775585 + ], + [ + -117.849639, + 33.775587 + ], + [ + -117.850543, + 33.775654 + ], + [ + -117.850629, + 33.775672 + ], + [ + -117.852276, + 33.776207 + ], + [ + -117.852973, + 33.776309 + ], + [ + -117.853024, + 33.776599 + ], + [ + -117.853008, + 33.777777 + ], + [ + -117.853004, + 33.777983 + ], + [ + -117.852993, + 33.778582 + ] + ] + ] + }, + "properties": { + "name": "Hart Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682270, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.855171, + 33.797965 + ], + [ + -117.854819, + 33.797968 + ], + [ + -117.854786, + 33.797964 + ], + [ + -117.854764, + 33.797953 + ], + [ + -117.854754, + 33.797937 + ], + [ + -117.854752, + 33.797838 + ], + [ + -117.854311, + 33.797838 + ], + [ + -117.854309, + 33.797305 + ], + [ + -117.854455, + 33.797305 + ], + [ + -117.854457, + 33.796727 + ], + [ + -117.854262, + 33.796727 + ], + [ + -117.85426, + 33.796942 + ], + [ + -117.85423, + 33.796975 + ], + [ + -117.854177, + 33.796998 + ], + [ + -117.854119, + 33.797004 + ], + [ + -117.853795, + 33.797001 + ], + [ + -117.853793, + 33.797301 + ], + [ + -117.853649, + 33.797301 + ], + [ + -117.853647, + 33.797717 + ], + [ + -117.853751, + 33.797718 + ], + [ + -117.853753, + 33.798747 + ], + [ + -117.85517, + 33.79875 + ], + [ + -117.855171, + 33.797965 + ] + ] + ] + }, + "properties": { + "name": "Killefer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682275, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.81403, + 33.781661 + ], + [ + -117.81403, + 33.780581 + ], + [ + -117.812895, + 33.780577 + ], + [ + -117.812992, + 33.780871 + ], + [ + -117.813102, + 33.780993 + ], + [ + -117.813472, + 33.781383 + ], + [ + -117.813571, + 33.781453 + ], + [ + -117.81403, + 33.781661 + ] + ] + ] + }, + "properties": { + "name": "La Veta Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682373, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818259, + 33.783354 + ], + [ + -117.817756, + 33.783353 + ], + [ + -117.817757, + 33.782901 + ], + [ + -117.816521, + 33.782899 + ], + [ + -117.816521, + 33.78301 + ], + [ + -117.816081, + 33.783009 + ], + [ + -117.816079, + 33.784053 + ], + [ + -117.814044, + 33.784042 + ], + [ + -117.814044, + 33.781801 + ], + [ + -117.814283, + 33.78185 + ], + [ + -117.814531, + 33.781875 + ], + [ + -117.814837, + 33.781889 + ], + [ + -117.815604, + 33.781888 + ], + [ + -117.818254, + 33.781885 + ], + [ + -117.818259, + 33.783354 + ] + ] + ] + }, + "properties": { + "name": "McPherson Athletic Facility", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682377, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.852319, + 33.836852 + ], + [ + -117.852301, + 33.836852 + ], + [ + -117.85166, + 33.836177 + ], + [ + -117.850813, + 33.836714 + ], + [ + -117.850223, + 33.837087 + ], + [ + -117.850125, + 33.837149 + ], + [ + -117.851038, + 33.838152 + ], + [ + -117.852178, + 33.838182 + ], + [ + -117.852269, + 33.838184 + ], + [ + -117.852302, + 33.837309 + ], + [ + -117.852313, + 33.837004 + ], + [ + -117.852319, + 33.836852 + ] + ] + ] + }, + "properties": { + "name": "Olive Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682432, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.781705, + 33.829156 + ], + [ + -117.78176, + 33.829 + ], + [ + -117.781728, + 33.828728 + ], + [ + -117.781565, + 33.828626 + ], + [ + -117.7813, + 33.828403 + ], + [ + -117.781198, + 33.828249 + ], + [ + -117.780938, + 33.828009 + ], + [ + -117.780642, + 33.828229 + ], + [ + -117.780541, + 33.828323 + ], + [ + -117.780493, + 33.82836 + ], + [ + -117.780432, + 33.828377 + ], + [ + -117.780381, + 33.828377 + ], + [ + -117.780338, + 33.828364 + ], + [ + -117.780256, + 33.828316 + ], + [ + -117.780155, + 33.828249 + ], + [ + -117.779468, + 33.827907 + ], + [ + -117.779307, + 33.827807 + ], + [ + -117.779158, + 33.827706 + ], + [ + -117.779035, + 33.82781 + ], + [ + -117.77951, + 33.828604 + ], + [ + -117.77965, + 33.828733 + ], + [ + -117.781596, + 33.829187 + ], + [ + -117.78163, + 33.829191 + ], + [ + -117.781673, + 33.82918 + ], + [ + -117.781705, + 33.829156 + ] + ] + ] + }, + "properties": { + "name": "Serrano Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682561, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.851386, + 33.820652 + ], + [ + -117.851301, + 33.820705 + ], + [ + -117.85104, + 33.820706 + ], + [ + -117.850985, + 33.820723 + ], + [ + -117.849326, + 33.82073 + ], + [ + -117.849326, + 33.820716 + ], + [ + -117.849186, + 33.820717 + ], + [ + -117.849115, + 33.820676 + ], + [ + -117.849104, + 33.819702 + ], + [ + -117.849735, + 33.819694 + ], + [ + -117.849732, + 33.819397 + ], + [ + -117.851805, + 33.819385 + ], + [ + -117.851386, + 33.820652 + ] + ] + ] + }, + "properties": { + "name": "Shaffer Park Renovation", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144682573, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.829552, + 33.785986 + ], + [ + -117.829247, + 33.785984 + ], + [ + -117.827209, + 33.785978 + ], + [ + -117.827214, + 33.787546 + ], + [ + -117.827294, + 33.787609 + ], + [ + -117.828836, + 33.787595 + ], + [ + -117.829021, + 33.787047 + ], + [ + -117.829552, + 33.785986 + ] + ] + ] + }, + "properties": { + "name": "Yorba Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144683108, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.011001, + 33.789694 + ], + [ + -118.009104, + 33.789687 + ], + [ + -118.00911, + 33.790588 + ], + [ + -118.008956, + 33.79059 + ], + [ + -118.00895, + 33.791085 + ], + [ + -118.008845, + 33.791086 + ], + [ + -118.007712, + 33.791089 + ], + [ + -118.007704, + 33.788406 + ], + [ + -118.010763, + 33.788392 + ], + [ + -118.010766, + 33.788798 + ], + [ + -118.010994, + 33.788796 + ], + [ + -118.011001, + 33.789694 + ] + ] + ] + }, + "properties": { + "name": "Chapman Sports Complex", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144683114, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.034813, + 33.78909 + ], + [ + -118.033324, + 33.788923 + ], + [ + -118.033347, + 33.788559 + ], + [ + -118.03335, + 33.788508 + ], + [ + -118.033346, + 33.78837 + ], + [ + -118.033338, + 33.788136 + ], + [ + -118.033317, + 33.787904 + ], + [ + -118.034792, + 33.787726 + ], + [ + -118.034867, + 33.78831 + ], + [ + -118.034867, + 33.788693 + ], + [ + -118.034813, + 33.78909 + ] + ] + ] + }, + "properties": { + "name": "Eastgate Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144683380, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.027174, + 33.778523 + ], + [ + -118.02718, + 33.77608 + ], + [ + -118.027085, + 33.776079 + ], + [ + -118.024052, + 33.776066 + ], + [ + -118.024054, + 33.77623 + ], + [ + -118.024062, + 33.777109 + ], + [ + -118.025983, + 33.777132 + ], + [ + -118.026123, + 33.777203 + ], + [ + -118.026182, + 33.777293 + ], + [ + -118.026184, + 33.777384 + ], + [ + -118.026139, + 33.77748 + ], + [ + -118.026268, + 33.777614 + ], + [ + -118.026184, + 33.777705 + ], + [ + -118.026184, + 33.778517 + ], + [ + -118.026638, + 33.77852 + ], + [ + -118.027174, + 33.778523 + ] + ] + ] + }, + "properties": { + "name": "Edgar Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144683392, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.954527, + 33.793523 + ], + [ + -117.954184, + 33.793524 + ], + [ + -117.953668, + 33.793526 + ], + [ + -117.953649, + 33.792241 + ], + [ + -117.954509, + 33.79224 + ], + [ + -117.954527, + 33.793523 + ] + ] + ] + }, + "properties": { + "name": "Faylane Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144683456, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.968521, + 33.765513 + ], + [ + -117.965841, + 33.765537 + ], + [ + -117.965839, + 33.765537 + ], + [ + -117.965836, + 33.764995 + ], + [ + -117.96583, + 33.763815 + ], + [ + -117.965829, + 33.763529 + ], + [ + -117.965817, + 33.762552 + ], + [ + -117.965808, + 33.761787 + ], + [ + -117.965805, + 33.761578 + ], + [ + -117.965803, + 33.761382 + ], + [ + -117.965799, + 33.76107 + ], + [ + -117.965788, + 33.76019 + ], + [ + -117.965781, + 33.759608 + ], + [ + -117.965769, + 33.759499 + ], + [ + -117.965872, + 33.759499 + ], + [ + -117.967777, + 33.759499 + ], + [ + -117.968336, + 33.759499 + ], + [ + -117.968463, + 33.759498 + ], + [ + -117.968487, + 33.761291 + ], + [ + -117.968521, + 33.765513 + ] + ] + ] + }, + "properties": { + "name": "Garden Grove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144683473, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.971804, + 33.791311 + ], + [ + -117.971125, + 33.791317 + ], + [ + -117.971122, + 33.792034 + ], + [ + -117.971121, + 33.792148 + ], + [ + -117.971395, + 33.792319 + ], + [ + -117.971529, + 33.792271 + ], + [ + -117.971835, + 33.792492 + ], + [ + -117.971804, + 33.791311 + ] + ] + ] + }, + "properties": { + "name": "Gutosky Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144683513, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.974239, + 33.788353 + ], + [ + -117.974211, + 33.786637 + ], + [ + -117.973807, + 33.786642 + ], + [ + -117.973799, + 33.786151 + ], + [ + -117.971757, + 33.786175 + ], + [ + -117.971798, + 33.788357 + ], + [ + -117.974239, + 33.788353 + ] + ] + ] + }, + "properties": { + "name": "Hare School Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144683619, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.975294, + 33.795871 + ], + [ + -117.97475, + 33.796177 + ], + [ + -117.974126, + 33.796489 + ], + [ + -117.974143, + 33.797813 + ], + [ + -117.975054, + 33.797826 + ], + [ + -117.975444, + 33.797891 + ], + [ + -117.97537, + 33.795924 + ], + [ + -117.975294, + 33.795871 + ] + ] + ] + }, + "properties": { + "name": "Magnolia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144683627, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.940351, + 33.777297 + ], + [ + -117.940357, + 33.776855 + ], + [ + -117.939453, + 33.776861 + ], + [ + -117.939454, + 33.777086 + ], + [ + -117.939455, + 33.777105 + ], + [ + -117.93954, + 33.777106 + ], + [ + -117.939545, + 33.77723 + ], + [ + -117.939554, + 33.777724 + ], + [ + -117.939666, + 33.777725 + ], + [ + -117.939667, + 33.777824 + ], + [ + -117.939671, + 33.778199 + ], + [ + -117.939491, + 33.778204 + ], + [ + -117.940361, + 33.778911 + ], + [ + -117.940586, + 33.779161 + ], + [ + -117.940688, + 33.779292 + ], + [ + -117.940786, + 33.779307 + ], + [ + -117.9409, + 33.779284 + ], + [ + -117.941031, + 33.779035 + ], + [ + -117.941021, + 33.778127 + ], + [ + -117.940983, + 33.776951 + ], + [ + -117.940911, + 33.777004 + ], + [ + -117.940883, + 33.777025 + ], + [ + -117.940725, + 33.77715 + ], + [ + -117.940536, + 33.777298 + ], + [ + -117.940351, + 33.777297 + ] + ] + ] + }, + "properties": { + "name": "Village Green Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144683656, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.039491, + 33.780235 + ], + [ + -118.039486, + 33.780115 + ], + [ + -118.039561, + 33.779259 + ], + [ + -118.039529, + 33.779223 + ], + [ + -118.039019, + 33.779156 + ], + [ + -118.038783, + 33.779161 + ], + [ + -118.038613, + 33.779221 + ], + [ + -118.03845, + 33.779308 + ], + [ + -118.038311, + 33.779424 + ], + [ + -118.03695, + 33.780603 + ], + [ + -118.037276, + 33.781149 + ], + [ + -118.039491, + 33.780235 + ] + ] + ] + }, + "properties": { + "name": "Westgrove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144683765, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.933326, + 33.762405 + ], + [ + -117.931672, + 33.762418 + ], + [ + -117.931667, + 33.762043 + ], + [ + -117.931911, + 33.762042 + ], + [ + -117.931904, + 33.761421 + ], + [ + -117.932409, + 33.761418 + ], + [ + -117.93241, + 33.761503 + ], + [ + -117.933315, + 33.761496 + ], + [ + -117.933326, + 33.762405 + ] + ] + ] + }, + "properties": { + "name": "Woodbury Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144684139, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.935094, + 33.739825 + ], + [ + -117.934059, + 33.739834 + ], + [ + -117.933968, + 33.739928 + ], + [ + -117.933874, + 33.739945 + ], + [ + -117.933024, + 33.739941 + ], + [ + -117.932828, + 33.739887 + ], + [ + -117.932659, + 33.739816 + ], + [ + -117.932521, + 33.73982 + ], + [ + -117.932508, + 33.741435 + ], + [ + -117.933061, + 33.741417 + ], + [ + -117.933086, + 33.741818 + ], + [ + -117.933362, + 33.741814 + ], + [ + -117.9336, + 33.741354 + ], + [ + -117.933869, + 33.740944 + ], + [ + -117.934236, + 33.740534 + ], + [ + -117.934552, + 33.740195 + ], + [ + -117.93477, + 33.740039 + ], + [ + -117.935094, + 33.739825 + ] + ] + ] + }, + "properties": { + "name": "Heritage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144684367, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.918937, + 33.74433 + ], + [ + -117.91898, + 33.744143 + ], + [ + -117.918969, + 33.742541 + ], + [ + -117.91791, + 33.742557 + ], + [ + -117.917913, + 33.742608 + ], + [ + -117.917424, + 33.742604 + ], + [ + -117.917431, + 33.742751 + ], + [ + -117.917908, + 33.742747 + ], + [ + -117.91795, + 33.744339 + ], + [ + -117.918856, + 33.744312 + ], + [ + -117.918937, + 33.74433 + ] + ] + ] + }, + "properties": { + "name": "Santa Anita Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144685058, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.899237, + 33.763938 + ], + [ + -117.899343, + 33.763141 + ], + [ + -117.899491, + 33.762617 + ], + [ + -117.899598, + 33.762242 + ], + [ + -117.899769, + 33.761892 + ], + [ + -117.90022, + 33.761345 + ], + [ + -117.900047, + 33.761243 + ], + [ + -117.89909, + 33.762405 + ], + [ + -117.898927, + 33.762606 + ], + [ + -117.898844, + 33.762769 + ], + [ + -117.898827, + 33.762961 + ], + [ + -117.898733, + 33.763211 + ], + [ + -117.898563, + 33.763361 + ], + [ + -117.898566, + 33.763645 + ], + [ + -117.898583, + 33.763691 + ], + [ + -117.89856, + 33.763904 + ], + [ + -117.898745, + 33.763946 + ], + [ + -117.899237, + 33.763938 + ] + ] + ] + }, + "properties": { + "name": "Edna Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144685325, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.897055, + 33.762354 + ], + [ + -117.89701, + 33.762409 + ], + [ + -117.896712, + 33.762621 + ], + [ + -117.894639, + 33.764124 + ], + [ + -117.893676, + 33.764811 + ], + [ + -117.893381, + 33.76465 + ], + [ + -117.895253, + 33.762501 + ], + [ + -117.896106, + 33.761658 + ], + [ + -117.896235, + 33.761573 + ], + [ + -117.896814, + 33.76139 + ], + [ + -117.896353, + 33.76209 + ], + [ + -117.897055, + 33.762354 + ] + ] + ] + }, + "properties": { + "name": "Riverview Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144685522, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.895301, + 33.753358 + ], + [ + -117.895291, + 33.752537 + ], + [ + -117.895489, + 33.75247 + ], + [ + -117.895602, + 33.752403 + ], + [ + -117.895591, + 33.751592 + ], + [ + -117.893531, + 33.751579 + ], + [ + -117.893542, + 33.751895 + ], + [ + -117.89363, + 33.751893 + ], + [ + -117.893638, + 33.75253 + ], + [ + -117.893147, + 33.752531 + ], + [ + -117.893148, + 33.752568 + ], + [ + -117.89315, + 33.752673 + ], + [ + -117.893633, + 33.752667 + ], + [ + -117.893614, + 33.753362 + ], + [ + -117.895301, + 33.753358 + ] + ] + ] + }, + "properties": { + "name": "El Salvador Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144685999, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.899243, + 33.738002 + ], + [ + -117.898302, + 33.738006 + ], + [ + -117.898258, + 33.737972 + ], + [ + -117.898262, + 33.736904 + ], + [ + -117.898099, + 33.736906 + ], + [ + -117.896733, + 33.736912 + ], + [ + -117.896736, + 33.737027 + ], + [ + -117.896535, + 33.737023 + ], + [ + -117.89653, + 33.737108 + ], + [ + -117.896049, + 33.737113 + ], + [ + -117.896068, + 33.734591 + ], + [ + -117.89922, + 33.734588 + ], + [ + -117.899243, + 33.738002 + ] + ] + ] + }, + "properties": { + "name": "Jerome Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144686123, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.910064, + 33.731554 + ], + [ + -117.909069, + 33.7315 + ], + [ + -117.908272, + 33.731514 + ], + [ + -117.907583, + 33.731563 + ], + [ + -117.907183, + 33.730068 + ], + [ + -117.910493, + 33.730082 + ], + [ + -117.910064, + 33.731554 + ] + ] + ] + }, + "properties": { + "name": "Windsor Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144686934, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.897879, + 33.717072 + ], + [ + -117.896786, + 33.717081 + ], + [ + -117.896785, + 33.71695 + ], + [ + -117.896216, + 33.716955 + ], + [ + -117.8962, + 33.715611 + ], + [ + -117.897862, + 33.715597 + ], + [ + -117.897879, + 33.717072 + ] + ] + ] + }, + "properties": { + "name": "Adams Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144687095, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.895398, + 33.709495 + ], + [ + -117.893322, + 33.709509 + ], + [ + -117.893322, + 33.709541 + ], + [ + -117.893343, + 33.711627 + ], + [ + -117.891178, + 33.711641 + ], + [ + -117.89116, + 33.707513 + ], + [ + -117.895328, + 33.707486 + ], + [ + -117.895398, + 33.709495 + ] + ] + ] + }, + "properties": { + "name": "Carl Thornton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144687598, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.88046, + 33.699373 + ], + [ + -117.879952, + 33.699371 + ], + [ + -117.87995, + 33.699864 + ], + [ + -117.878757, + 33.699868 + ], + [ + -117.878784, + 33.697325 + ], + [ + -117.880479, + 33.697333 + ], + [ + -117.88046, + 33.699373 + ] + ] + ] + }, + "properties": { + "name": "Bomo Koral Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144687853, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.873221, + 33.699868 + ], + [ + -117.872937, + 33.699708 + ], + [ + -117.8728, + 33.699497 + ], + [ + -117.872717, + 33.699154 + ], + [ + -117.872663, + 33.699007 + ], + [ + -117.87254, + 33.698815 + ], + [ + -117.872502, + 33.698672 + ], + [ + -117.872524, + 33.698556 + ], + [ + -117.872618, + 33.698453 + ], + [ + -117.87254, + 33.698427 + ], + [ + -117.872417, + 33.698485 + ], + [ + -117.872154, + 33.698489 + ], + [ + -117.872154, + 33.698222 + ], + [ + -117.872438, + 33.697954 + ], + [ + -117.87246, + 33.697682 + ], + [ + -117.872449, + 33.697449 + ], + [ + -117.872513, + 33.697325 + ], + [ + -117.872673, + 33.697208 + ], + [ + -117.872663, + 33.697097 + ], + [ + -117.872658, + 33.696793 + ], + [ + -117.872411, + 33.696793 + ], + [ + -117.872245, + 33.696767 + ], + [ + -117.872197, + 33.696865 + ], + [ + -117.872041, + 33.697115 + ], + [ + -117.871832, + 33.697333 + ], + [ + -117.871588, + 33.697543 + ], + [ + -117.871462, + 33.697699 + ], + [ + -117.871403, + 33.697815 + ], + [ + -117.871381, + 33.698025 + ], + [ + -117.871389, + 33.698333 + ], + [ + -117.871448, + 33.698453 + ], + [ + -117.871539, + 33.698578 + ], + [ + -117.871647, + 33.698797 + ], + [ + -117.871751, + 33.699047 + ], + [ + -117.871789, + 33.699311 + ], + [ + -117.871792, + 33.699872 + ], + [ + -117.872985, + 33.699868 + ], + [ + -117.873221, + 33.699868 + ] + ] + ] + }, + "properties": { + "name": "Sandpointe Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144688101, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.875163, + 33.704996 + ], + [ + -117.875169, + 33.704309 + ], + [ + -117.875112, + 33.704242 + ], + [ + -117.874798, + 33.704211 + ], + [ + -117.874739, + 33.704139 + ], + [ + -117.874753, + 33.703272 + ], + [ + -117.874761, + 33.702742 + ], + [ + -117.874605, + 33.702707 + ], + [ + -117.873307, + 33.702702 + ], + [ + -117.87331, + 33.704063 + ], + [ + -117.873173, + 33.704108 + ], + [ + -117.873178, + 33.704215 + ], + [ + -117.873339, + 33.704296 + ], + [ + -117.873318, + 33.704831 + ], + [ + -117.873189, + 33.704894 + ], + [ + -117.873194, + 33.704965 + ], + [ + -117.873245, + 33.705005 + ], + [ + -117.873259, + 33.705344 + ], + [ + -117.875163, + 33.705367 + ], + [ + -117.875163, + 33.704996 + ] + ] + ] + }, + "properties": { + "name": "Lillie King Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144688186, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.880175, + 33.719732 + ], + [ + -117.8802, + 33.718084 + ], + [ + -117.876748, + 33.718048 + ], + [ + -117.876709, + 33.718079 + ], + [ + -117.876708, + 33.719706 + ], + [ + -117.876751, + 33.719721 + ], + [ + -117.880175, + 33.719732 + ] + ] + ] + }, + "properties": { + "name": "Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144688386, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.861806, + 33.715287 + ], + [ + -117.861581, + 33.715496 + ], + [ + -117.86135, + 33.715496 + ], + [ + -117.861339, + 33.715902 + ], + [ + -117.8594, + 33.715888 + ], + [ + -117.859386, + 33.714796 + ], + [ + -117.860336, + 33.714782 + ], + [ + -117.860331, + 33.713912 + ], + [ + -117.86231, + 33.713926 + ], + [ + -117.862294, + 33.714372 + ], + [ + -117.861827, + 33.714358 + ], + [ + -117.861806, + 33.715287 + ] + ] + ] + }, + "properties": { + "name": "Delhi Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144688671, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.872333, + 33.746346 + ], + [ + -117.870872, + 33.746357 + ], + [ + -117.87088, + 33.74706 + ], + [ + -117.872339, + 33.747047 + ], + [ + -117.872333, + 33.746346 + ] + ] + ] + }, + "properties": { + "name": "Birch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144688801, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.877562, + 33.747031 + ], + [ + -117.876578, + 33.747025 + ], + [ + -117.876585, + 33.746313 + ], + [ + -117.877568, + 33.74632 + ], + [ + -117.877562, + 33.747031 + ] + ] + ] + }, + "properties": { + "name": "Angels Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144689328, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.857954, + 33.754326 + ], + [ + -117.85754, + 33.754329 + ], + [ + -117.857535, + 33.75392 + ], + [ + -117.85795, + 33.753917 + ], + [ + -117.857954, + 33.754326 + ] + ] + ] + }, + "properties": { + "name": "Chepa's Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144689425, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.847367, + 33.752004 + ], + [ + -117.84737, + 33.75163 + ], + [ + -117.847231, + 33.751609 + ], + [ + -117.84715, + 33.75157 + ], + [ + -117.846362, + 33.750947 + ], + [ + -117.846362, + 33.750856 + ], + [ + -117.8459, + 33.750856 + ], + [ + -117.847367, + 33.752004 + ] + ] + ] + }, + "properties": { + "name": "Saddleback View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144689623, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.843678, + 33.742117 + ], + [ + -117.843657, + 33.74209 + ], + [ + -117.84034, + 33.742119 + ], + [ + -117.840341, + 33.742879 + ], + [ + -117.840777, + 33.743162 + ], + [ + -117.841046, + 33.743367 + ], + [ + -117.841308, + 33.74359 + ], + [ + -117.841598, + 33.743862 + ], + [ + -117.842137, + 33.74445 + ], + [ + -117.842464, + 33.744861 + ], + [ + -117.842722, + 33.745191 + ], + [ + -117.842912, + 33.745401 + ], + [ + -117.843666, + 33.7454 + ], + [ + -117.843678, + 33.742117 + ] + ] + ] + }, + "properties": { + "name": "Santa Ana Zoo at Prentice Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144689809, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.840573, + 33.752729 + ], + [ + -117.840573, + 33.751266 + ], + [ + -117.840493, + 33.751008 + ], + [ + -117.840482, + 33.750673 + ], + [ + -117.839002, + 33.750682 + ], + [ + -117.839034, + 33.752426 + ], + [ + -117.83957, + 33.752417 + ], + [ + -117.839576, + 33.752743 + ], + [ + -117.840573, + 33.752729 + ] + ] + ] + }, + "properties": { + "name": "Cabrillo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144689917, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.843773, + 33.75724 + ], + [ + -117.843741, + 33.75724 + ], + [ + -117.843449, + 33.757233 + ], + [ + -117.843443, + 33.757086 + ], + [ + -117.843631, + 33.757017 + ], + [ + -117.843363, + 33.756326 + ], + [ + -117.84358, + 33.755817 + ], + [ + -117.843639, + 33.755688 + ], + [ + -117.843519, + 33.755427 + ], + [ + -117.843446, + 33.755267 + ], + [ + -117.843636, + 33.755193 + ], + [ + -117.843355, + 33.754522 + ], + [ + -117.843639, + 33.753851 + ], + [ + -117.842354, + 33.753447 + ], + [ + -117.842352, + 33.753184 + ], + [ + -117.842349, + 33.753162 + ], + [ + -117.841689, + 33.753157 + ], + [ + -117.84167, + 33.752852 + ], + [ + -117.843757, + 33.752867 + ], + [ + -117.843773, + 33.75724 + ] + ] + ] + }, + "properties": { + "name": "Mabury Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144690182, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.844521, + 33.767082 + ], + [ + -117.844523, + 33.764682 + ], + [ + -117.844256, + 33.764677 + ], + [ + -117.844119, + 33.764619 + ], + [ + -117.844055, + 33.764521 + ], + [ + -117.844039, + 33.764472 + ], + [ + -117.843215, + 33.764476 + ], + [ + -117.843299, + 33.764548 + ], + [ + -117.843304, + 33.764637 + ], + [ + -117.843242, + 33.764699 + ], + [ + -117.843151, + 33.764722 + ], + [ + -117.843148, + 33.767081 + ], + [ + -117.844521, + 33.767082 + ] + ] + ] + }, + "properties": { + "name": "Portola Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144690737, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.875907, + 33.771628 + ], + [ + -117.875924, + 33.771114 + ], + [ + -117.875923, + 33.771071 + ], + [ + -117.875944, + 33.771009 + ], + [ + -117.875826, + 33.771041 + ], + [ + -117.875666, + 33.771081 + ], + [ + -117.875579, + 33.771106 + ], + [ + -117.875239, + 33.771133 + ], + [ + -117.874114, + 33.771377 + ], + [ + -117.874164, + 33.771438 + ], + [ + -117.874318, + 33.771468 + ], + [ + -117.874532, + 33.771493 + ], + [ + -117.874926, + 33.771525 + ], + [ + -117.875105, + 33.771545 + ], + [ + -117.875302, + 33.771574 + ], + [ + -117.875485, + 33.771585 + ], + [ + -117.875907, + 33.771628 + ] + ] + ] + }, + "properties": { + "name": "Fisher Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144690842, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.880307, + 33.775967 + ], + [ + -117.880307, + 33.775923 + ], + [ + -117.880308, + 33.775765 + ], + [ + -117.880309, + 33.775477 + ], + [ + -117.880309, + 33.775231 + ], + [ + -117.880309, + 33.775183 + ], + [ + -117.88031, + 33.77461 + ], + [ + -117.880311, + 33.774567 + ], + [ + -117.880311, + 33.774526 + ], + [ + -117.879203, + 33.774516 + ], + [ + -117.879196, + 33.774925 + ], + [ + -117.878823, + 33.774932 + ], + [ + -117.878799, + 33.774932 + ], + [ + -117.87879, + 33.774967 + ], + [ + -117.878676, + 33.775303 + ], + [ + -117.878686, + 33.775963 + ], + [ + -117.880307, + 33.775967 + ] + ] + ] + }, + "properties": { + "name": "Morrison Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144690998, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.877668, + 33.778378 + ], + [ + -117.877666, + 33.778222 + ], + [ + -117.876743, + 33.777303 + ], + [ + -117.876727, + 33.77727 + ], + [ + -117.87622, + 33.777346 + ], + [ + -117.87722, + 33.778271 + ], + [ + -117.877668, + 33.778378 + ] + ] + ] + }, + "properties": { + "name": "William Eldridge Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144849374, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.955304, + 33.873076 + ], + [ + -117.955157, + 33.872736 + ], + [ + -117.955147, + 33.872631 + ], + [ + -117.95515, + 33.872101 + ], + [ + -117.954693, + 33.872103 + ], + [ + -117.954696, + 33.871925 + ], + [ + -117.954318, + 33.871933 + ], + [ + -117.954306, + 33.871982 + ], + [ + -117.954256, + 33.872028 + ], + [ + -117.954256, + 33.87232 + ], + [ + -117.954197, + 33.872322 + ], + [ + -117.954202, + 33.873286 + ], + [ + -117.954779, + 33.873238 + ], + [ + -117.955304, + 33.873076 + ] + ] + ] + }, + "properties": { + "name": "Adlena Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144849635, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.926731, + 33.887535 + ], + [ + -117.926291, + 33.886342 + ], + [ + -117.926114, + 33.88638 + ], + [ + -117.925964, + 33.886052 + ], + [ + -117.924885, + 33.886585 + ], + [ + -117.924577, + 33.886729 + ], + [ + -117.924159, + 33.886616 + ], + [ + -117.922855, + 33.886693 + ], + [ + -117.922964, + 33.887547 + ], + [ + -117.922654, + 33.887704 + ], + [ + -117.922638, + 33.888061 + ], + [ + -117.922594, + 33.888905 + ], + [ + -117.922578, + 33.88903 + ], + [ + -117.922363, + 33.889088 + ], + [ + -117.922487, + 33.889449 + ], + [ + -117.922127, + 33.889533 + ], + [ + -117.922422, + 33.890059 + ], + [ + -117.922272, + 33.890148 + ], + [ + -117.92216, + 33.890183 + ], + [ + -117.922111, + 33.890286 + ], + [ + -117.922042, + 33.890713 + ], + [ + -117.922583, + 33.890727 + ], + [ + -117.922654, + 33.891401 + ], + [ + -117.922927, + 33.891657 + ], + [ + -117.922569, + 33.89226 + ], + [ + -117.921893, + 33.891877 + ], + [ + -117.921479, + 33.892312 + ], + [ + -117.921807, + 33.892463 + ], + [ + -117.921909, + 33.892545 + ], + [ + -117.921966, + 33.892646 + ], + [ + -117.921886, + 33.893322 + ], + [ + -117.921822, + 33.893866 + ], + [ + -117.922165, + 33.893848 + ], + [ + -117.922444, + 33.893866 + ], + [ + -117.922578, + 33.893986 + ], + [ + -117.922616, + 33.89416 + ], + [ + -117.922578, + 33.894391 + ], + [ + -117.921193, + 33.894822 + ], + [ + -117.920271, + 33.895108 + ], + [ + -117.920407, + 33.895593 + ], + [ + -117.920444, + 33.895622 + ], + [ + -117.920449, + 33.895652 + ], + [ + -117.920514, + 33.895671 + ], + [ + -117.921039, + 33.895728 + ], + [ + -117.921624, + 33.895732 + ], + [ + -117.921715, + 33.895701 + ], + [ + -117.92179, + 33.895665 + ], + [ + -117.92186, + 33.895658 + ], + [ + -117.92201, + 33.89572 + ], + [ + -117.922701, + 33.895683 + ], + [ + -117.922764, + 33.895688 + ], + [ + -117.922873, + 33.895696 + ], + [ + -117.923915, + 33.89637 + ], + [ + -117.924005, + 33.896809 + ], + [ + -117.924527, + 33.897225 + ], + [ + -117.924836, + 33.896867 + ], + [ + -117.925083, + 33.896609 + ], + [ + -117.925416, + 33.896355 + ], + [ + -117.92585, + 33.89607 + ], + [ + -117.926168, + 33.89592 + ], + [ + -117.925895, + 33.895383 + ], + [ + -117.925528, + 33.894513 + ], + [ + -117.925519, + 33.894473 + ], + [ + -117.925476, + 33.89389 + ], + [ + -117.925487, + 33.892674 + ], + [ + -117.925593, + 33.892379 + ], + [ + -117.925807, + 33.892196 + ], + [ + -117.926167, + 33.892072 + ], + [ + -117.926383, + 33.892015 + ], + [ + -117.926671, + 33.892748 + ], + [ + -117.926732, + 33.892915 + ], + [ + -117.926824, + 33.89315 + ], + [ + -117.926838, + 33.893386 + ], + [ + -117.926922, + 33.893383 + ], + [ + -117.926962, + 33.892077 + ], + [ + -117.927026, + 33.891392 + ], + [ + -117.926957, + 33.891071 + ], + [ + -117.926876, + 33.890746 + ], + [ + -117.926898, + 33.89059 + ], + [ + -117.927032, + 33.890274 + ], + [ + -117.927466, + 33.889481 + ], + [ + -117.927337, + 33.889128 + ], + [ + -117.927317, + 33.889134 + ], + [ + -117.926941, + 33.888112 + ], + [ + -117.926785, + 33.887687 + ], + [ + -117.926731, + 33.887535 + ] + ] + ] + }, + "properties": { + "name": "Brea Dam Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144849682, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.886192, + 33.870033 + ], + [ + -117.886171, + 33.868625 + ], + [ + -117.884798, + 33.868652 + ], + [ + -117.884818, + 33.870548 + ], + [ + -117.884839, + 33.870672 + ], + [ + -117.88491, + 33.870803 + ], + [ + -117.884973, + 33.870824 + ], + [ + -117.88506, + 33.870754 + ], + [ + -117.885263, + 33.870583 + ], + [ + -117.885576, + 33.870371 + ], + [ + -117.885817, + 33.870224 + ], + [ + -117.886032, + 33.870113 + ], + [ + -117.886192, + 33.870033 + ] + ] + ] + }, + "properties": { + "name": "Chapman Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144849712, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.923181, + 33.872888 + ], + [ + -117.923181, + 33.872428 + ], + [ + -117.92267, + 33.872428 + ], + [ + -117.922671, + 33.873032 + ], + [ + -117.923182, + 33.873031 + ], + [ + -117.923181, + 33.872888 + ] + ] + ] + }, + "properties": { + "name": "Downtown Plaza", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144849765, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.952985, + 33.889722 + ], + [ + -117.952518, + 33.890033 + ], + [ + -117.951207, + 33.890041 + ], + [ + -117.950989, + 33.890042 + ], + [ + -117.95181, + 33.889058 + ], + [ + -117.951719, + 33.888773 + ], + [ + -117.951396, + 33.88883 + ], + [ + -117.951322, + 33.888747 + ], + [ + -117.951578, + 33.888549 + ], + [ + -117.951288, + 33.888273 + ], + [ + -117.951252, + 33.88786 + ], + [ + -117.950995, + 33.88758 + ], + [ + -117.950995, + 33.887411 + ], + [ + -117.950844, + 33.887081 + ], + [ + -117.950743, + 33.886636 + ], + [ + -117.950759, + 33.886457 + ], + [ + -117.95093, + 33.886636 + ], + [ + -117.951145, + 33.886849 + ], + [ + -117.951283, + 33.88704 + ], + [ + -117.951696, + 33.887846 + ], + [ + -117.951986, + 33.888576 + ], + [ + -117.952308, + 33.889043 + ], + [ + -117.952566, + 33.889348 + ], + [ + -117.952985, + 33.889722 + ] + ] + ] + }, + "properties": { + "name": "Edward H. White II Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144849900, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.972612, + 33.884131 + ], + [ + -117.972784, + 33.88353 + ], + [ + -117.972313, + 33.8831 + ], + [ + -117.972474, + 33.882717 + ], + [ + -117.972617, + 33.882536 + ], + [ + -117.972968, + 33.882447 + ], + [ + -117.972919, + 33.882272 + ], + [ + -117.972346, + 33.882522 + ], + [ + -117.972359, + 33.882134 + ], + [ + -117.972407, + 33.882078 + ], + [ + -117.972393, + 33.881468 + ], + [ + -117.972316, + 33.881355 + ], + [ + -117.972254, + 33.880515 + ], + [ + -117.971706, + 33.880513 + ], + [ + -117.971746, + 33.881235 + ], + [ + -117.971626, + 33.881428 + ], + [ + -117.971481, + 33.881561 + ], + [ + -117.971223, + 33.881679 + ], + [ + -117.970077, + 33.881804 + ], + [ + -117.970089, + 33.881985 + ], + [ + -117.970758, + 33.881956 + ], + [ + -117.970992, + 33.882063 + ], + [ + -117.971178, + 33.882208 + ], + [ + -117.971266, + 33.882359 + ], + [ + -117.971323, + 33.883414 + ], + [ + -117.971412, + 33.88376 + ], + [ + -117.971535, + 33.884011 + ], + [ + -117.971841, + 33.884397 + ], + [ + -117.971957, + 33.884314 + ], + [ + -117.97192, + 33.884221 + ], + [ + -117.972034, + 33.884142 + ], + [ + -117.972612, + 33.884131 + ] + ] + ] + }, + "properties": { + "name": "Emery Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144849939, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.952381, + 33.878504 + ], + [ + -117.952108, + 33.877671 + ], + [ + -117.950778, + 33.877659 + ], + [ + -117.950776, + 33.877221 + ], + [ + -117.951823, + 33.877228 + ], + [ + -117.951964, + 33.877286 + ], + [ + -117.952184, + 33.87724 + ], + [ + -117.95321, + 33.877262 + ], + [ + -117.953032, + 33.877432 + ], + [ + -117.952942, + 33.877634 + ], + [ + -117.952926, + 33.878215 + ], + [ + -117.952381, + 33.878504 + ] + ] + ] + }, + "properties": { + "name": "Fern Drive Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144849951, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.933023, + 33.87372 + ], + [ + -117.933013, + 33.872371 + ], + [ + -117.931981, + 33.872376 + ], + [ + -117.931991, + 33.873725 + ], + [ + -117.933023, + 33.87372 + ] + ] + ] + }, + "properties": { + "name": "Ford Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144850059, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.967363, + 33.856665 + ], + [ + -117.966391, + 33.856673 + ], + [ + -117.966438, + 33.857819 + ], + [ + -117.966229, + 33.857819 + ], + [ + -117.966175, + 33.857879 + ], + [ + -117.966175, + 33.858168 + ], + [ + -117.965296, + 33.858167 + ], + [ + -117.965308, + 33.859065 + ], + [ + -117.965309, + 33.859144 + ], + [ + -117.966452, + 33.859143 + ], + [ + -117.966429, + 33.858246 + ], + [ + -117.966511, + 33.858163 + ], + [ + -117.967382, + 33.858164 + ], + [ + -117.967363, + 33.856665 + ] + ] + ] + }, + "properties": { + "name": "Gilbert Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144850146, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.879256, + 33.900822 + ], + [ + -117.876794, + 33.90088 + ], + [ + -117.876798, + 33.901774 + ], + [ + -117.87652, + 33.90202 + ], + [ + -117.87602, + 33.902242 + ], + [ + -117.875517, + 33.902261 + ], + [ + -117.874702, + 33.902986 + ], + [ + -117.874804, + 33.903512 + ], + [ + -117.876744, + 33.903488 + ], + [ + -117.876752, + 33.903147 + ], + [ + -117.876633, + 33.903123 + ], + [ + -117.876594, + 33.903042 + ], + [ + -117.876633, + 33.902968 + ], + [ + -117.876754, + 33.902925 + ], + [ + -117.876762, + 33.902719 + ], + [ + -117.878268, + 33.902727 + ], + [ + -117.878854, + 33.901962 + ], + [ + -117.880129, + 33.901289 + ], + [ + -117.880136, + 33.901214 + ], + [ + -117.879176, + 33.901446 + ], + [ + -117.87872, + 33.901522 + ], + [ + -117.878655, + 33.90153 + ], + [ + -117.878536, + 33.901578 + ], + [ + -117.878466, + 33.90168 + ], + [ + -117.878446, + 33.901784 + ], + [ + -117.878402, + 33.901836 + ], + [ + -117.87836, + 33.901869 + ], + [ + -117.878096, + 33.902179 + ], + [ + -117.877727, + 33.901784 + ], + [ + -117.878039, + 33.901388 + ], + [ + -117.878221, + 33.901232 + ], + [ + -117.878521, + 33.901107 + ], + [ + -117.878906, + 33.901075 + ], + [ + -117.879089, + 33.900973 + ], + [ + -117.879256, + 33.900822 + ] + ] + ] + }, + "properties": { + "name": "Gilman Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144850340, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.941875, + 33.881557 + ], + [ + -117.94131, + 33.881565 + ], + [ + -117.941173, + 33.881676 + ], + [ + -117.940883, + 33.882004 + ], + [ + -117.940536, + 33.88215 + ], + [ + -117.940125, + 33.882234 + ], + [ + -117.939601, + 33.882193 + ], + [ + -117.939169, + 33.882319 + ], + [ + -117.938518, + 33.88244 + ], + [ + -117.938322, + 33.882354 + ], + [ + -117.938066, + 33.882559 + ], + [ + -117.937365, + 33.882429 + ], + [ + -117.936682, + 33.882138 + ], + [ + -117.936006, + 33.881804 + ], + [ + -117.935685, + 33.881795 + ], + [ + -117.936382, + 33.882142 + ], + [ + -117.936918, + 33.882432 + ], + [ + -117.937404, + 33.882733 + ], + [ + -117.937265, + 33.883026 + ], + [ + -117.936971, + 33.883292 + ], + [ + -117.936259, + 33.883247 + ], + [ + -117.935777, + 33.883351 + ], + [ + -117.93547, + 33.883407 + ], + [ + -117.935478, + 33.88353 + ], + [ + -117.935905, + 33.883607 + ], + [ + -117.935969, + 33.883685 + ], + [ + -117.935801, + 33.883874 + ], + [ + -117.935548, + 33.883975 + ], + [ + -117.935445, + 33.884064 + ], + [ + -117.935456, + 33.884129 + ], + [ + -117.935218, + 33.884213 + ], + [ + -117.934744, + 33.884771 + ], + [ + -117.93431, + 33.885147 + ], + [ + -117.933957, + 33.885567 + ], + [ + -117.933464, + 33.886035 + ], + [ + -117.933266, + 33.886181 + ], + [ + -117.933092, + 33.886309 + ], + [ + -117.932772, + 33.886515 + ], + [ + -117.932497, + 33.886594 + ], + [ + -117.932434, + 33.886867 + ], + [ + -117.932406, + 33.887 + ], + [ + -117.932291, + 33.887842 + ], + [ + -117.932222, + 33.888269 + ], + [ + -117.932156, + 33.888651 + ], + [ + -117.931984, + 33.888986 + ], + [ + -117.9319, + 33.889085 + ], + [ + -117.932086, + 33.889162 + ], + [ + -117.932466, + 33.88854 + ], + [ + -117.932524, + 33.888363 + ], + [ + -117.932538, + 33.888015 + ], + [ + -117.932707, + 33.887164 + ], + [ + -117.932952, + 33.886701 + ], + [ + -117.933693, + 33.886254 + ], + [ + -117.934047, + 33.886456 + ], + [ + -117.934339, + 33.886696 + ], + [ + -117.93456, + 33.886956 + ], + [ + -117.934612, + 33.886622 + ], + [ + -117.934177, + 33.886141 + ], + [ + -117.934279, + 33.885943 + ], + [ + -117.934231, + 33.885825 + ], + [ + -117.934817, + 33.885231 + ], + [ + -117.935471, + 33.884506 + ], + [ + -117.93612, + 33.883905 + ], + [ + -117.936278, + 33.883848 + ], + [ + -117.936468, + 33.883879 + ], + [ + -117.936768, + 33.884048 + ], + [ + -117.936901, + 33.884051 + ], + [ + -117.93707, + 33.883718 + ], + [ + -117.93778, + 33.883452 + ], + [ + -117.938158, + 33.882953 + ], + [ + -117.938581, + 33.882743 + ], + [ + -117.938939, + 33.882698 + ], + [ + -117.939324, + 33.882706 + ], + [ + -117.93961, + 33.88275 + ], + [ + -117.940068, + 33.882835 + ], + [ + -117.940705, + 33.882665 + ], + [ + -117.940686, + 33.882609 + ], + [ + -117.941197, + 33.882254 + ], + [ + -117.941349, + 33.8822 + ], + [ + -117.941508, + 33.882214 + ], + [ + -117.941752, + 33.882289 + ], + [ + -117.941875, + 33.881557 + ] + ] + ] + }, + "properties": { + "name": "Hiltscher Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144850452, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.940583, + 33.900716 + ], + [ + -117.939932, + 33.900398 + ], + [ + -117.93947, + 33.901324 + ], + [ + -117.939263, + 33.901855 + ], + [ + -117.939317, + 33.902416 + ], + [ + -117.938405, + 33.904215 + ], + [ + -117.938265, + 33.904571 + ], + [ + -117.938233, + 33.905426 + ], + [ + -117.937664, + 33.905729 + ], + [ + -117.937439, + 33.906174 + ], + [ + -117.937647, + 33.906329 + ], + [ + -117.937599, + 33.906541 + ], + [ + -117.936814, + 33.907501 + ], + [ + -117.936645, + 33.907662 + ], + [ + -117.936151, + 33.907722 + ], + [ + -117.935784, + 33.907501 + ], + [ + -117.935696, + 33.907562 + ], + [ + -117.935883, + 33.907832 + ], + [ + -117.935572, + 33.90811 + ], + [ + -117.935156, + 33.908283 + ], + [ + -117.934524, + 33.908704 + ], + [ + -117.934318, + 33.908737 + ], + [ + -117.934238, + 33.908805 + ], + [ + -117.934132, + 33.908982 + ], + [ + -117.933908, + 33.909019 + ], + [ + -117.934059, + 33.909593 + ], + [ + -117.934183, + 33.909768 + ], + [ + -117.934314, + 33.909909 + ], + [ + -117.93439, + 33.910059 + ], + [ + -117.934486, + 33.910064 + ], + [ + -117.934516, + 33.909867 + ], + [ + -117.934652, + 33.909613 + ], + [ + -117.935368, + 33.908943 + ], + [ + -117.935876, + 33.908728 + ], + [ + -117.936466, + 33.90879 + ], + [ + -117.936248, + 33.909603 + ], + [ + -117.936438, + 33.909562 + ], + [ + -117.93654, + 33.909405 + ], + [ + -117.936603, + 33.909068 + ], + [ + -117.936708, + 33.908806 + ], + [ + -117.936796, + 33.908572 + ], + [ + -117.936903, + 33.908431 + ], + [ + -117.937101, + 33.908307 + ], + [ + -117.937593, + 33.908167 + ], + [ + -117.937673, + 33.908115 + ], + [ + -117.937723, + 33.908046 + ], + [ + -117.937751, + 33.907784 + ], + [ + -117.937735, + 33.907518 + ], + [ + -117.937833, + 33.907137 + ], + [ + -117.938125, + 33.906843 + ], + [ + -117.938329, + 33.906598 + ], + [ + -117.93853, + 33.905852 + ], + [ + -117.93871, + 33.905525 + ], + [ + -117.939091, + 33.905043 + ], + [ + -117.940797, + 33.904037 + ], + [ + -117.940314, + 33.903173 + ], + [ + -117.940164, + 33.902514 + ], + [ + -117.940157, + 33.902108 + ], + [ + -117.940239, + 33.901579 + ], + [ + -117.940347, + 33.901232 + ], + [ + -117.940583, + 33.900716 + ] + ] + ] + }, + "properties": { + "name": "Laguna Lake Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144850506, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921027, + 33.864253 + ], + [ + -117.92004, + 33.864253 + ], + [ + -117.920045, + 33.863889 + ], + [ + -117.920039, + 33.863187 + ], + [ + -117.921029, + 33.863177 + ], + [ + -117.921027, + 33.864253 + ] + ] + ] + }, + "properties": { + "name": "Lemon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144850621, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.945507, + 33.877001 + ], + [ + -117.945506, + 33.875306 + ], + [ + -117.943125, + 33.87515 + ], + [ + -117.943082, + 33.87523 + ], + [ + -117.943389, + 33.875977 + ], + [ + -117.943468, + 33.876312 + ], + [ + -117.943515, + 33.876494 + ], + [ + -117.943655, + 33.876832 + ], + [ + -117.943903, + 33.876855 + ], + [ + -117.945507, + 33.877001 + ] + ] + ] + }, + "properties": { + "name": "Muckenthaler Cultural Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144850634, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.943377, + 33.862906 + ], + [ + -117.94338, + 33.862491 + ], + [ + -117.943181, + 33.862489 + ], + [ + -117.94318, + 33.861862 + ], + [ + -117.943354, + 33.861862 + ], + [ + -117.943369, + 33.861634 + ], + [ + -117.94328, + 33.861616 + ], + [ + -117.943004, + 33.861382 + ], + [ + -117.942433, + 33.861834 + ], + [ + -117.942216, + 33.861914 + ], + [ + -117.94199, + 33.86193 + ], + [ + -117.94199, + 33.862665 + ], + [ + -117.94256, + 33.862655 + ], + [ + -117.942575, + 33.862966 + ], + [ + -117.942865, + 33.862966 + ], + [ + -117.94289, + 33.862935 + ], + [ + -117.942963, + 33.862918 + ], + [ + -117.943038, + 33.862904 + ], + [ + -117.943377, + 33.862906 + ] + ] + ] + }, + "properties": { + "name": "Nicholas Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144850653, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.968757, + 33.862296 + ], + [ + -117.968751, + 33.86191 + ], + [ + -117.968113, + 33.861917 + ], + [ + -117.968119, + 33.862304 + ], + [ + -117.968757, + 33.862296 + ] + ] + ] + }, + "properties": { + "name": "Olive Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144850730, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.95899, + 33.856981 + ], + [ + -117.956816, + 33.857007 + ], + [ + -117.95683, + 33.856503 + ], + [ + -117.956855, + 33.856342 + ], + [ + -117.956901, + 33.856197 + ], + [ + -117.957042, + 33.856207 + ], + [ + -117.957423, + 33.856227 + ], + [ + -117.957701, + 33.856247 + ], + [ + -117.957957, + 33.856248 + ], + [ + -117.958957, + 33.856238 + ], + [ + -117.95899, + 33.856981 + ] + ] + ] + }, + "properties": { + "name": "Orangethorpe Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144850857, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.930666, + 33.864932 + ], + [ + -117.929931, + 33.86493 + ], + [ + -117.929938, + 33.864653 + ], + [ + -117.929961, + 33.864529 + ], + [ + -117.929952, + 33.864467 + ], + [ + -117.929883, + 33.864396 + ], + [ + -117.9298, + 33.864371 + ], + [ + -117.929671, + 33.864387 + ], + [ + -117.929534, + 33.864398 + ], + [ + -117.92878, + 33.864405 + ], + [ + -117.928763, + 33.863492 + ], + [ + -117.929875, + 33.86348 + ], + [ + -117.929875, + 33.863053 + ], + [ + -117.930681, + 33.863058 + ], + [ + -117.930666, + 33.864932 + ] + ] + ] + }, + "properties": { + "name": "Richman Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144851006, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.901052, + 33.90122 + ], + [ + -117.900911, + 33.901256 + ], + [ + -117.900675, + 33.901315 + ], + [ + -117.899979, + 33.900667 + ], + [ + -117.899598, + 33.90036 + ], + [ + -117.899284, + 33.900507 + ], + [ + -117.898643, + 33.900649 + ], + [ + -117.898515, + 33.900653 + ], + [ + -117.89852, + 33.900549 + ], + [ + -117.898405, + 33.90055 + ], + [ + -117.898414, + 33.899776 + ], + [ + -117.898415, + 33.899639 + ], + [ + -117.899817, + 33.899744 + ], + [ + -117.90098, + 33.899741 + ], + [ + -117.901052, + 33.90122 + ] + ] + ] + }, + "properties": { + "name": "Rolling Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144852038, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.953237, + 33.897443 + ], + [ + -117.953343, + 33.897246 + ], + [ + -117.953409, + 33.896953 + ], + [ + -117.953393, + 33.896699 + ], + [ + -117.952667, + 33.897393 + ], + [ + -117.951868, + 33.897998 + ], + [ + -117.951406, + 33.898328 + ], + [ + -117.95094, + 33.898475 + ], + [ + -117.950844, + 33.898512 + ], + [ + -117.950678, + 33.897928 + ], + [ + -117.950844, + 33.897853 + ], + [ + -117.950683, + 33.897576 + ], + [ + -117.951354, + 33.897105 + ], + [ + -117.951821, + 33.896646 + ], + [ + -117.95218, + 33.89604 + ], + [ + -117.952363, + 33.895475 + ], + [ + -117.952384, + 33.895252 + ], + [ + -117.952808, + 33.895292 + ], + [ + -117.952831, + 33.89511 + ], + [ + -117.952438, + 33.895079 + ], + [ + -117.952309, + 33.894348 + ], + [ + -117.952121, + 33.893952 + ], + [ + -117.951751, + 33.893338 + ], + [ + -117.951687, + 33.893066 + ], + [ + -117.951686, + 33.892735 + ], + [ + -117.950866, + 33.892722 + ], + [ + -117.950767, + 33.892729 + ], + [ + -117.950501, + 33.892739 + ], + [ + -117.950641, + 33.893827 + ], + [ + -117.950248, + 33.893832 + ], + [ + -117.950246, + 33.893847 + ], + [ + -117.950243, + 33.893872 + ], + [ + -117.950234, + 33.89391 + ], + [ + -117.950548, + 33.893951 + ], + [ + -117.950757, + 33.894302 + ], + [ + -117.951611, + 33.894255 + ], + [ + -117.951724, + 33.894424 + ], + [ + -117.951578, + 33.89465 + ], + [ + -117.951723, + 33.894948 + ], + [ + -117.951798, + 33.895086 + ], + [ + -117.951912, + 33.895412 + ], + [ + -117.951923, + 33.89564 + ], + [ + -117.951873, + 33.895888 + ], + [ + -117.951756, + 33.896076 + ], + [ + -117.951642, + 33.896239 + ], + [ + -117.951535, + 33.896364 + ], + [ + -117.951433, + 33.896413 + ], + [ + -117.951338, + 33.896419 + ], + [ + -117.951311, + 33.896664 + ], + [ + -117.950753, + 33.897154 + ], + [ + -117.950523, + 33.897198 + ], + [ + -117.950528, + 33.897283 + ], + [ + -117.950463, + 33.897349 + ], + [ + -117.950371, + 33.89737 + ], + [ + -117.950544, + 33.897995 + ], + [ + -117.950521, + 33.898145 + ], + [ + -117.950688, + 33.898608 + ], + [ + -117.950832, + 33.898653 + ], + [ + -117.951471, + 33.898555 + ], + [ + -117.951783, + 33.898445 + ], + [ + -117.95198, + 33.898274 + ], + [ + -117.952198, + 33.898083 + ], + [ + -117.952662, + 33.89764 + ], + [ + -117.952963, + 33.897367 + ], + [ + -117.953237, + 33.897443 + ] + ] + ] + }, + "properties": { + "name": "Virgil 'Gus' Grissom Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 144852053, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.957319, + 33.895689 + ], + [ + -117.957142, + 33.895555 + ], + [ + -117.956193, + 33.895528 + ], + [ + -117.955715, + 33.89568 + ], + [ + -117.95536, + 33.896293 + ], + [ + -117.954487, + 33.89653 + ], + [ + -117.95372, + 33.896486 + ], + [ + -117.953633, + 33.896836 + ], + [ + -117.953532, + 33.897198 + ], + [ + -117.953429, + 33.897415 + ], + [ + -117.953268, + 33.897651 + ], + [ + -117.953187, + 33.89774 + ], + [ + -117.953688, + 33.897893 + ], + [ + -117.953865, + 33.897764 + ], + [ + -117.954035, + 33.897793 + ], + [ + -117.954239, + 33.897624 + ], + [ + -117.955136, + 33.898066 + ], + [ + -117.955329, + 33.897848 + ], + [ + -117.955414, + 33.897655 + ], + [ + -117.955521, + 33.897397 + ], + [ + -117.955671, + 33.897072 + ], + [ + -117.956116, + 33.89644 + ], + [ + -117.956423, + 33.896098 + ], + [ + -117.956803, + 33.895834 + ], + [ + -117.957103, + 33.895723 + ], + [ + -117.957319, + 33.895689 + ] + ] + ] + }, + "properties": { + "name": "West Coyote Hills Tree Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 147393911, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.916563, + 33.875219 + ], + [ + -117.916295, + 33.875217 + ], + [ + -117.9163, + 33.875391 + ], + [ + -117.916376, + 33.875498 + ], + [ + -117.916598, + 33.875491 + ], + [ + -117.916601, + 33.875264 + ], + [ + -117.916563, + 33.875219 + ] + ] + ] + }, + "properties": { + "name": "Sport Court", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 149842236, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.859566, + 33.837163 + ], + [ + -117.859455, + 33.837311 + ], + [ + -117.858055, + 33.837576 + ], + [ + -117.858826, + 33.839072 + ], + [ + -117.858334, + 33.839496 + ], + [ + -117.858255, + 33.839334 + ], + [ + -117.858182, + 33.839173 + ], + [ + -117.858018, + 33.838966 + ], + [ + -117.857725, + 33.838392 + ], + [ + -117.85769, + 33.838285 + ], + [ + -117.857571, + 33.838032 + ], + [ + -117.857529, + 33.837875 + ], + [ + -117.856798, + 33.837992 + ], + [ + -117.856754, + 33.837952 + ], + [ + -117.856746, + 33.837899 + ], + [ + -117.856722, + 33.837845 + ], + [ + -117.856643, + 33.837705 + ], + [ + -117.856351, + 33.836587 + ], + [ + -117.856347, + 33.836551 + ], + [ + -117.856359, + 33.836526 + ], + [ + -117.856386, + 33.836505 + ], + [ + -117.856419, + 33.836493 + ], + [ + -117.857495, + 33.836378 + ], + [ + -117.858473, + 33.836243 + ], + [ + -117.858548, + 33.836225 + ], + [ + -117.858622, + 33.836184 + ], + [ + -117.858728, + 33.836124 + ], + [ + -117.859263, + 33.836051 + ], + [ + -117.859566, + 33.837163 + ] + ] + ] + }, + "properties": { + "name": "Steve Ambriz Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 149981494, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.902978, + 33.913548 + ], + [ + -117.902854, + 33.913773 + ], + [ + -117.903004, + 33.91383 + ], + [ + -117.903128, + 33.913606 + ], + [ + -117.902978, + 33.913548 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 155592685, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.938247, + 33.777368 + ], + [ + -117.937932, + 33.776709 + ], + [ + -117.937808, + 33.7761 + ], + [ + -117.937101, + 33.776109 + ], + [ + -117.93713, + 33.776939 + ], + [ + -117.93669, + 33.776944 + ], + [ + -117.936568, + 33.776886 + ], + [ + -117.934481, + 33.776902 + ], + [ + -117.934434, + 33.777056 + ], + [ + -117.934239, + 33.777084 + ], + [ + -117.934247, + 33.777351 + ], + [ + -117.935179, + 33.777323 + ], + [ + -117.935177, + 33.777095 + ], + [ + -117.935793, + 33.777089 + ], + [ + -117.935795, + 33.777346 + ], + [ + -117.936022, + 33.777336 + ], + [ + -117.936107, + 33.777333 + ], + [ + -117.936107, + 33.777163 + ], + [ + -117.937013, + 33.777149 + ], + [ + -117.937063, + 33.777212 + ], + [ + -117.937628, + 33.777207 + ], + [ + -117.937631, + 33.777436 + ], + [ + -117.937386, + 33.777437 + ], + [ + -117.937391, + 33.777723 + ], + [ + -117.937761, + 33.777612 + ], + [ + -117.938247, + 33.777368 + ] + ] + ] + }, + "properties": { + "name": "Community Center Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 155676257, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.865483, + 33.888865 + ], + [ + -117.864898, + 33.888758 + ], + [ + -117.864963, + 33.888564 + ], + [ + -117.864386, + 33.888439 + ], + [ + -117.864359, + 33.8885 + ], + [ + -117.863718, + 33.888515 + ], + [ + -117.863708, + 33.888842 + ], + [ + -117.865303, + 33.88933 + ], + [ + -117.865483, + 33.888865 + ] + ] + ] + }, + "properties": { + "name": "Bradford Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 155730844, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.951233, + 33.725248 + ], + [ + -117.951192, + 33.725295 + ], + [ + -117.951136, + 33.72532 + ], + [ + -117.95108, + 33.72532 + ], + [ + -117.951015, + 33.725298 + ], + [ + -117.950978, + 33.725251 + ], + [ + -117.950972, + 33.725199 + ], + [ + -117.951002, + 33.72515 + ], + [ + -117.951039, + 33.725117 + ], + [ + -117.951101, + 33.725108 + ], + [ + -117.951163, + 33.725117 + ], + [ + -117.951208, + 33.725148 + ], + [ + -117.951233, + 33.725199 + ], + [ + -117.951233, + 33.725248 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 155940005, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.953835, + 33.653683 + ], + [ + -117.955542, + 33.653684 + ], + [ + -117.95925, + 33.653669 + ], + [ + -117.959475, + 33.653671 + ], + [ + -117.962174, + 33.653655 + ], + [ + -117.962184, + 33.65437 + ], + [ + -117.962141, + 33.654415 + ], + [ + -117.962088, + 33.654423 + ], + [ + -117.961717, + 33.65443 + ], + [ + -117.961712, + 33.654147 + ], + [ + -117.960852, + 33.654151 + ], + [ + -117.959132, + 33.65416 + ], + [ + -117.959068, + 33.65416 + ], + [ + -117.957189, + 33.65417 + ], + [ + -117.953843, + 33.654187 + ], + [ + -117.953835, + 33.653683 + ] + ] + ] + }, + "properties": { + "name": "Gisler Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 157355652, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.916156, + 33.804595 + ], + [ + -117.916093, + 33.804605 + ], + [ + -117.915991, + 33.804636 + ], + [ + -117.915894, + 33.804685 + ], + [ + -117.915829, + 33.804726 + ], + [ + -117.91581, + 33.804749 + ], + [ + -117.915813, + 33.804735 + ], + [ + -117.915823, + 33.804682 + ], + [ + -117.915807, + 33.804651 + ], + [ + -117.915767, + 33.804619 + ], + [ + -117.915713, + 33.804622 + ], + [ + -117.915665, + 33.804646 + ], + [ + -117.915638, + 33.804679 + ], + [ + -117.915641, + 33.804708 + ], + [ + -117.91567, + 33.804753 + ], + [ + -117.915711, + 33.804766 + ], + [ + -117.915769, + 33.804766 + ], + [ + -117.915791, + 33.804778 + ], + [ + -117.915764, + 33.804798 + ], + [ + -117.91571, + 33.804875 + ], + [ + -117.915676, + 33.804945 + ], + [ + -117.915645, + 33.805048 + ], + [ + -117.915637, + 33.805151 + ], + [ + -117.915648, + 33.805261 + ], + [ + -117.915649, + 33.805315 + ], + [ + -117.915706, + 33.805967 + ], + [ + -117.915724, + 33.806226 + ], + [ + -117.915725, + 33.806276 + ], + [ + -117.915683, + 33.806273 + ], + [ + -117.915662, + 33.80628 + ], + [ + -117.915622, + 33.806303 + ], + [ + -117.915605, + 33.806347 + ], + [ + -117.91562, + 33.806391 + ], + [ + -117.915672, + 33.806418 + ], + [ + -117.915711, + 33.806415 + ], + [ + -117.915741, + 33.806402 + ], + [ + -117.915758, + 33.806623 + ], + [ + -117.91574, + 33.806683 + ], + [ + -117.915708, + 33.806728 + ], + [ + -117.915654, + 33.806767 + ], + [ + -117.91557, + 33.806698 + ], + [ + -117.915556, + 33.806684 + ], + [ + -117.915552, + 33.806665 + ], + [ + -117.915539, + 33.806319 + ], + [ + -117.915539, + 33.805862 + ], + [ + -117.915531, + 33.805353 + ], + [ + -117.915541, + 33.804918 + ], + [ + -117.915523, + 33.804951 + ], + [ + -117.915516, + 33.805046 + ], + [ + -117.915518, + 33.805889 + ], + [ + -117.915527, + 33.806492 + ], + [ + -117.915524, + 33.806717 + ], + [ + -117.91554, + 33.806739 + ], + [ + -117.915581, + 33.806765 + ], + [ + -117.915589, + 33.806793 + ], + [ + -117.915591, + 33.80682 + ], + [ + -117.915643, + 33.806812 + ], + [ + -117.915676, + 33.806794 + ], + [ + -117.91574, + 33.806774 + ], + [ + -117.915776, + 33.806732 + ], + [ + -117.91581, + 33.806679 + ], + [ + -117.915826, + 33.806641 + ], + [ + -117.915832, + 33.806596 + ], + [ + -117.915761, + 33.806057 + ], + [ + -117.915718, + 33.805569 + ], + [ + -117.915689, + 33.805247 + ], + [ + -117.915682, + 33.805104 + ], + [ + -117.915691, + 33.805035 + ], + [ + -117.915714, + 33.804958 + ], + [ + -117.915746, + 33.804895 + ], + [ + -117.915799, + 33.804823 + ], + [ + -117.91578, + 33.804807 + ], + [ + -117.915834, + 33.804763 + ], + [ + -117.915861, + 33.804766 + ], + [ + -117.915923, + 33.804714 + ], + [ + -117.916007, + 33.804677 + ], + [ + -117.916083, + 33.80465 + ], + [ + -117.916152, + 33.804631 + ], + [ + -117.916224, + 33.80462 + ], + [ + -117.916223, + 33.804595 + ], + [ + -117.916156, + 33.804595 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 158443196, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.75848, + 33.798184 + ], + [ + -117.758467, + 33.79821 + ], + [ + -117.758448, + 33.798244 + ], + [ + -117.75841, + 33.79827 + ], + [ + -117.758188, + 33.798237 + ], + [ + -117.758148, + 33.798214 + ], + [ + -117.758123, + 33.798183 + ], + [ + -117.75811, + 33.798147 + ], + [ + -117.75812, + 33.798098 + ], + [ + -117.758192, + 33.798068 + ], + [ + -117.758216, + 33.798034 + ], + [ + -117.758224, + 33.79797 + ], + [ + -117.758237, + 33.797929 + ], + [ + -117.758315, + 33.797904 + ], + [ + -117.758391, + 33.797915 + ], + [ + -117.75845, + 33.797964 + ], + [ + -117.758476, + 33.798011 + ], + [ + -117.758455, + 33.798065 + ], + [ + -117.758446, + 33.79809 + ], + [ + -117.758475, + 33.798148 + ], + [ + -117.75848, + 33.798184 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 158443204, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.743808, + 33.794112 + ], + [ + -117.743759, + 33.794218 + ], + [ + -117.74357, + 33.794158 + ], + [ + -117.743619, + 33.794052 + ], + [ + -117.743808, + 33.794112 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 158449293, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.747391, + 33.793877 + ], + [ + -117.747592, + 33.793943 + ], + [ + -117.747539, + 33.794055 + ], + [ + -117.747338, + 33.793989 + ], + [ + -117.747391, + 33.793877 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 158594711, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.93741, + 33.730797 + ], + [ + -117.937275, + 33.7165 + ], + [ + -117.954359, + 33.716427 + ], + [ + -117.954489, + 33.730331 + ], + [ + -117.93741, + 33.730797 + ] + ] + ] + }, + "properties": { + "name": "Mile Square Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 158613364, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.907483, + 33.668742 + ], + [ + -117.907429, + 33.663959 + ], + [ + -117.89894, + 33.66406 + ], + [ + -117.898078, + 33.663814 + ], + [ + -117.897867, + 33.663885 + ], + [ + -117.897334, + 33.664419 + ], + [ + -117.897221, + 33.664474 + ], + [ + -117.894948, + 33.666834 + ], + [ + -117.894803, + 33.666896 + ], + [ + -117.893952, + 33.667678 + ], + [ + -117.892909, + 33.668774 + ], + [ + -117.892914, + 33.668921 + ], + [ + -117.905213, + 33.668766 + ], + [ + -117.907483, + 33.668742 + ] + ] + ] + }, + "properties": { + "name": "Orange County Fair Ground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 159706685, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.00542, + 33.708196 + ], + [ + -118.005405, + 33.707554 + ], + [ + -118.005628, + 33.707385 + ], + [ + -118.006319, + 33.707379 + ], + [ + -118.006315, + 33.704682 + ], + [ + -118.006601, + 33.704676 + ], + [ + -118.010789, + 33.704584 + ], + [ + -118.010736, + 33.701152 + ], + [ + -118.010722, + 33.700264 + ], + [ + -118.011191, + 33.699924 + ], + [ + -118.012596, + 33.699112 + ], + [ + -118.012827, + 33.699133 + ], + [ + -118.014962, + 33.699147 + ], + [ + -118.014916, + 33.697471 + ], + [ + -118.012036, + 33.697334 + ], + [ + -118.006543, + 33.697414 + ], + [ + -118.006268, + 33.697418 + ], + [ + -118.006147, + 33.695702 + ], + [ + -118.004268, + 33.695655 + ], + [ + -118.004128, + 33.695653 + ], + [ + -118.004085, + 33.698246 + ], + [ + -118.003445, + 33.699111 + ], + [ + -117.999939, + 33.699302 + ], + [ + -117.99997, + 33.701041 + ], + [ + -118.002261, + 33.701013 + ], + [ + -118.002471, + 33.701208 + ], + [ + -118.002498, + 33.702597 + ], + [ + -118.001359, + 33.702603 + ], + [ + -118.001359, + 33.703423 + ], + [ + -118.001694, + 33.703405 + ], + [ + -118.001947, + 33.703041 + ], + [ + -118.002209, + 33.703064 + ], + [ + -118.002252, + 33.703689 + ], + [ + -118.001157, + 33.703707 + ], + [ + -118.000846, + 33.703938 + ], + [ + -118.000012, + 33.703947 + ], + [ + -118.000089, + 33.706544 + ], + [ + -118.000941, + 33.70643 + ], + [ + -118.001068, + 33.706137 + ], + [ + -118.001771, + 33.706126 + ], + [ + -118.001981, + 33.706287 + ], + [ + -118.001997, + 33.707116 + ], + [ + -118.004184, + 33.707112 + ], + [ + -118.004211, + 33.708208 + ], + [ + -118.004379, + 33.708207 + ], + [ + -118.004365, + 33.707231 + ], + [ + -118.004762, + 33.707228 + ], + [ + -118.004776, + 33.708203 + ], + [ + -118.00542, + 33.708196 + ] + ] + ] + }, + "properties": { + "name": "Huntington Central Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 161244789, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.915212, + 33.90795 + ], + [ + -117.915341, + 33.907819 + ], + [ + -117.915341, + 33.90794 + ], + [ + -117.915322, + 33.908184 + ], + [ + -117.915352, + 33.908306 + ], + [ + -117.915483, + 33.908741 + ], + [ + -117.915204, + 33.908702 + ], + [ + -117.915043, + 33.908775 + ], + [ + -117.914863, + 33.908884 + ], + [ + -117.914806, + 33.909015 + ], + [ + -117.914811, + 33.909238 + ], + [ + -117.914672, + 33.909376 + ], + [ + -117.914353, + 33.909568 + ], + [ + -117.914189, + 33.909638 + ], + [ + -117.913749, + 33.909598 + ], + [ + -117.913223, + 33.909643 + ], + [ + -117.913143, + 33.909896 + ], + [ + -117.913218, + 33.910297 + ], + [ + -117.913116, + 33.910528 + ], + [ + -117.912902, + 33.910769 + ], + [ + -117.912349, + 33.91092 + ], + [ + -117.912204, + 33.910956 + ], + [ + -117.912121, + 33.910806 + ], + [ + -117.911802, + 33.910907 + ], + [ + -117.911169, + 33.911263 + ], + [ + -117.910646, + 33.911644 + ], + [ + -117.910353, + 33.911842 + ], + [ + -117.909849, + 33.912211 + ], + [ + -117.909541, + 33.91249 + ], + [ + -117.909235, + 33.912775 + ], + [ + -117.909098, + 33.912906 + ], + [ + -117.90876, + 33.912901 + ], + [ + -117.908208, + 33.913093 + ], + [ + -117.907682, + 33.913164 + ], + [ + -117.907596, + 33.913017 + ], + [ + -117.907451, + 33.912937 + ], + [ + -117.907264, + 33.912964 + ], + [ + -117.907011, + 33.913124 + ], + [ + -117.906067, + 33.913676 + ], + [ + -117.904863, + 33.913237 + ], + [ + -117.905379, + 33.912296 + ], + [ + -117.905805, + 33.912487 + ], + [ + -117.906931, + 33.911699 + ], + [ + -117.906958, + 33.910965 + ], + [ + -117.907741, + 33.911241 + ], + [ + -117.90787, + 33.911223 + ], + [ + -117.907924, + 33.911161 + ], + [ + -117.90824, + 33.911361 + ], + [ + -117.908492, + 33.911147 + ], + [ + -117.908986, + 33.911254 + ], + [ + -117.909849, + 33.911063 + ], + [ + -117.910643, + 33.910488 + ], + [ + -117.911421, + 33.909803 + ], + [ + -117.911687, + 33.90927 + ], + [ + -117.911987, + 33.908874 + ], + [ + -117.912862, + 33.908491 + ], + [ + -117.913223, + 33.908375 + ], + [ + -117.914963, + 33.908347 + ], + [ + -117.91513, + 33.908113 + ], + [ + -117.915212, + 33.90795 + ] + ] + ] + }, + "properties": { + "name": "Brea Creek Municipal Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 161256808, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.915429, + 33.904494 + ], + [ + -117.915114, + 33.904072 + ], + [ + -117.914331, + 33.903692 + ], + [ + -117.914221, + 33.903706 + ], + [ + -117.914066, + 33.904004 + ], + [ + -117.913944, + 33.90395 + ], + [ + -117.914154, + 33.903605 + ], + [ + -117.91428, + 33.903605 + ], + [ + -117.914718, + 33.903772 + ], + [ + -117.915603, + 33.903878 + ], + [ + -117.915672, + 33.903019 + ], + [ + -117.915695, + 33.902983 + ], + [ + -117.915874, + 33.903 + ], + [ + -117.916104, + 33.903027 + ], + [ + -117.916636, + 33.90304 + ], + [ + -117.917022, + 33.902995 + ], + [ + -117.917327, + 33.902924 + ], + [ + -117.917622, + 33.902831 + ], + [ + -117.9178, + 33.902706 + ], + [ + -117.918019, + 33.902662 + ], + [ + -117.918127, + 33.90255 + ], + [ + -117.918374, + 33.902555 + ], + [ + -117.918416, + 33.902755 + ], + [ + -117.918589, + 33.902951 + ], + [ + -117.918911, + 33.902978 + ], + [ + -117.919446, + 33.903031 + ], + [ + -117.919977, + 33.90304 + ], + [ + -117.919977, + 33.902979 + ], + [ + -117.921281, + 33.903187 + ], + [ + -117.921536, + 33.903095 + ], + [ + -117.922249, + 33.902957 + ], + [ + -117.922512, + 33.902868 + ], + [ + -117.922904, + 33.902819 + ], + [ + -117.923287, + 33.902826 + ], + [ + -117.923636, + 33.903062 + ], + [ + -117.923813, + 33.903156 + ], + [ + -117.924751, + 33.902283 + ], + [ + -117.925342, + 33.901936 + ], + [ + -117.924864, + 33.901268 + ], + [ + -117.924333, + 33.900934 + ], + [ + -117.924513, + 33.900793 + ], + [ + -117.924923, + 33.900596 + ], + [ + -117.925336, + 33.900582 + ], + [ + -117.925942, + 33.90048 + ], + [ + -117.926374, + 33.900468 + ], + [ + -117.926554, + 33.900231 + ], + [ + -117.926581, + 33.900017 + ], + [ + -117.926999, + 33.899438 + ], + [ + -117.926814, + 33.899034 + ], + [ + -117.926318, + 33.898476 + ], + [ + -117.925897, + 33.897551 + ], + [ + -117.925527, + 33.897267 + ], + [ + -117.92547, + 33.897125 + ], + [ + -117.925436, + 33.897039 + ], + [ + -117.925457, + 33.896839 + ], + [ + -117.925653, + 33.896611 + ], + [ + -117.925803, + 33.896459 + ], + [ + -117.926522, + 33.896223 + ], + [ + -117.926661, + 33.896521 + ], + [ + -117.92679, + 33.896579 + ], + [ + -117.927195, + 33.896763 + ], + [ + -117.92786, + 33.897102 + ], + [ + -117.928434, + 33.898041 + ], + [ + -117.928526, + 33.898308 + ], + [ + -117.928464, + 33.899028 + ], + [ + -117.928247, + 33.899346 + ], + [ + -117.928018, + 33.899995 + ], + [ + -117.927949, + 33.900391 + ], + [ + -117.928037, + 33.900668 + ], + [ + -117.92789, + 33.901215 + ], + [ + -117.927954, + 33.901455 + ], + [ + -117.928107, + 33.902253 + ], + [ + -117.927976, + 33.902532 + ], + [ + -117.927761, + 33.902898 + ], + [ + -117.927514, + 33.903637 + ], + [ + -117.927399, + 33.904421 + ], + [ + -117.926881, + 33.9069 + ], + [ + -117.926828, + 33.907092 + ], + [ + -117.926584, + 33.907088 + ], + [ + -117.92639, + 33.906676 + ], + [ + -117.926708, + 33.906289 + ], + [ + -117.926909, + 33.906177 + ], + [ + -117.926967, + 33.905914 + ], + [ + -117.926693, + 33.905088 + ], + [ + -117.926618, + 33.905133 + ], + [ + -117.926227, + 33.905266 + ], + [ + -117.925803, + 33.905467 + ], + [ + -117.925519, + 33.905182 + ], + [ + -117.925234, + 33.904977 + ], + [ + -117.924837, + 33.904679 + ], + [ + -117.923627, + 33.905026 + ], + [ + -117.922887, + 33.90536 + ], + [ + -117.921715, + 33.90589 + ], + [ + -117.921495, + 33.905778 + ], + [ + -117.922756, + 33.904634 + ], + [ + -117.922753, + 33.904484 + ], + [ + -117.922665, + 33.904291 + ], + [ + -117.922552, + 33.904082 + ], + [ + -117.922343, + 33.904006 + ], + [ + -117.922236, + 33.903957 + ], + [ + -117.92171, + 33.904051 + ], + [ + -117.920884, + 33.904251 + ], + [ + -117.920744, + 33.904305 + ], + [ + -117.918454, + 33.903726 + ], + [ + -117.917864, + 33.903886 + ], + [ + -117.916903, + 33.904207 + ], + [ + -117.916582, + 33.904576 + ], + [ + -117.916742, + 33.905102 + ], + [ + -117.917057, + 33.905379 + ], + [ + -117.917161, + 33.905627 + ], + [ + -117.916555, + 33.906005 + ], + [ + -117.916524, + 33.90603 + ], + [ + -117.91634, + 33.906179 + ], + [ + -117.915975, + 33.906526 + ], + [ + -117.915927, + 33.906851 + ], + [ + -117.915967, + 33.907142 + ], + [ + -117.916233, + 33.907319 + ], + [ + -117.916617, + 33.907534 + ], + [ + -117.916823, + 33.907777 + ], + [ + -117.917086, + 33.908049 + ], + [ + -117.91729, + 33.90853 + ], + [ + -117.917349, + 33.908823 + ], + [ + -117.917338, + 33.908984 + ], + [ + -117.916995, + 33.909193 + ], + [ + -117.916429, + 33.90923 + ], + [ + -117.915609, + 33.909058 + ], + [ + -117.915561, + 33.908907 + ], + [ + -117.915483, + 33.908741 + ], + [ + -117.915352, + 33.908306 + ], + [ + -117.915322, + 33.908184 + ], + [ + -117.915533, + 33.907871 + ], + [ + -117.915587, + 33.907765 + ], + [ + -117.915662, + 33.907267 + ], + [ + -117.915614, + 33.90691 + ], + [ + -117.915498, + 33.906664 + ], + [ + -117.915337, + 33.906277 + ], + [ + -117.915213, + 33.90605 + ], + [ + -117.915029, + 33.905869 + ], + [ + -117.915267, + 33.905551 + ], + [ + -117.915517, + 33.905174 + ], + [ + -117.915447, + 33.904911 + ], + [ + -117.915396, + 33.90471 + ], + [ + -117.915429, + 33.904494 + ] + ] + ] + }, + "properties": { + "name": "Fullerton Municipal Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 162921757, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.944063, + 33.727144 + ], + [ + -117.943966, + 33.727144 + ], + [ + -117.943724, + 33.727184 + ], + [ + -117.943553, + 33.727258 + ], + [ + -117.943422, + 33.72736 + ], + [ + -117.943314, + 33.727485 + ], + [ + -117.943276, + 33.727599 + ], + [ + -117.943266, + 33.727748 + ], + [ + -117.943266, + 33.727874 + ], + [ + -117.943274, + 33.727975 + ], + [ + -117.943335, + 33.728274 + ], + [ + -117.943368, + 33.728458 + ], + [ + -117.943381, + 33.728621 + ], + [ + -117.943381, + 33.728763 + ], + [ + -117.943374, + 33.728872 + ], + [ + -117.943303, + 33.729038 + ], + [ + -117.943305, + 33.729192 + ], + [ + -117.943358, + 33.729395 + ], + [ + -117.943437, + 33.729526 + ], + [ + -117.943533, + 33.729609 + ], + [ + -117.943678, + 33.729689 + ], + [ + -117.943805, + 33.729739 + ], + [ + -117.943949, + 33.72977 + ], + [ + -117.944072, + 33.729781 + ], + [ + -117.944255, + 33.729767 + ], + [ + -117.944498, + 33.729701 + ], + [ + -117.944713, + 33.729602 + ], + [ + -117.944881, + 33.729561 + ], + [ + -117.94509, + 33.729528 + ], + [ + -117.94534, + 33.729526 + ], + [ + -117.945783, + 33.729578 + ], + [ + -117.946083, + 33.729628 + ], + [ + -117.946285, + 33.729704 + ], + [ + -117.946426, + 33.729767 + ], + [ + -117.94668, + 33.730237 + ], + [ + -117.946971, + 33.730337 + ], + [ + -117.947236, + 33.730374 + ], + [ + -117.947548, + 33.730342 + ], + [ + -117.947807, + 33.730313 + ], + [ + -117.94827, + 33.730266 + ], + [ + -117.948791, + 33.730213 + ], + [ + -117.949177, + 33.730217 + ], + [ + -117.949559, + 33.730293 + ], + [ + -117.949966, + 33.730301 + ], + [ + -117.950287, + 33.730269 + ], + [ + -117.950534, + 33.730225 + ], + [ + -117.950808, + 33.730213 + ], + [ + -117.951067, + 33.730222 + ], + [ + -117.951258, + 33.730247 + ], + [ + -117.951529, + 33.73024 + ], + [ + -117.95185, + 33.7302 + ], + [ + -117.952174, + 33.730173 + ], + [ + -117.952557, + 33.730203 + ], + [ + -117.952892, + 33.73021 + ], + [ + -117.953195, + 33.730183 + ], + [ + -117.953531, + 33.730166 + ], + [ + -117.953781, + 33.730171 + ], + [ + -117.954046, + 33.730107 + ], + [ + -117.954164, + 33.730002 + ], + [ + -117.954255, + 33.729897 + ], + [ + -117.954311, + 33.72974 + ], + [ + -117.954282, + 33.72963 + ], + [ + -117.954244, + 33.729483 + ], + [ + -117.954238, + 33.729275 + ], + [ + -117.954282, + 33.729027 + ], + [ + -117.954317, + 33.728809 + ], + [ + -117.954326, + 33.728677 + ], + [ + -117.95427, + 33.728437 + ], + [ + -117.954267, + 33.72818 + ], + [ + -117.954288, + 33.728041 + ], + [ + -117.954317, + 33.727832 + ], + [ + -117.954314, + 33.727693 + ], + [ + -117.952059, + 33.727703 + ], + [ + -117.950042, + 33.72772 + ], + [ + -117.949836, + 33.727742 + ], + [ + -117.949621, + 33.727796 + ], + [ + -117.94948, + 33.727891 + ], + [ + -117.94925, + 33.728068 + ], + [ + -117.949026, + 33.728293 + ], + [ + -117.948767, + 33.728494 + ], + [ + -117.948626, + 33.72856 + ], + [ + -117.94842, + 33.728579 + ], + [ + -117.944263, + 33.727179 + ], + [ + -117.944063, + 33.727144 + ] + ] + ] + }, + "properties": { + "name": "David L. Baker Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 162921758, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.943962, + 33.718749 + ], + [ + -117.943388, + 33.717346 + ], + [ + -117.944088, + 33.717138 + ], + [ + -117.944077, + 33.716577 + ], + [ + -117.944459, + 33.716557 + ], + [ + -117.945699, + 33.716525 + ], + [ + -117.946102, + 33.716547 + ], + [ + -117.94849, + 33.716533 + ], + [ + -117.954134, + 33.716501 + ], + [ + -117.954146, + 33.717742 + ], + [ + -117.953989, + 33.717939 + ], + [ + -117.953996, + 33.718791 + ], + [ + -117.954003, + 33.719244 + ], + [ + -117.954009, + 33.719923 + ], + [ + -117.953941, + 33.720432 + ], + [ + -117.953875, + 33.720961 + ], + [ + -117.953797, + 33.721509 + ], + [ + -117.953542, + 33.721808 + ], + [ + -117.95329, + 33.722131 + ], + [ + -117.952841, + 33.722676 + ], + [ + -117.952411, + 33.723184 + ], + [ + -117.952284, + 33.723255 + ], + [ + -117.951424, + 33.723686 + ], + [ + -117.951269, + 33.723743 + ], + [ + -117.951031, + 33.723867 + ], + [ + -117.950792, + 33.724011 + ], + [ + -117.950503, + 33.724157 + ], + [ + -117.949443, + 33.724165 + ], + [ + -117.94867, + 33.724695 + ], + [ + -117.947785, + 33.724706 + ], + [ + -117.947505, + 33.724913 + ], + [ + -117.946831, + 33.72492 + ], + [ + -117.946847, + 33.727545 + ], + [ + -117.947014, + 33.727758 + ], + [ + -117.94696, + 33.727904 + ], + [ + -117.94367, + 33.726808 + ], + [ + -117.943564, + 33.726738 + ], + [ + -117.943568, + 33.726661 + ], + [ + -117.943533, + 33.726576 + ], + [ + -117.943472, + 33.726482 + ], + [ + -117.943339, + 33.726311 + ], + [ + -117.943187, + 33.726222 + ], + [ + -117.943037, + 33.72617 + ], + [ + -117.94269, + 33.726094 + ], + [ + -117.942504, + 33.726046 + ], + [ + -117.942319, + 33.725952 + ], + [ + -117.942207, + 33.725866 + ], + [ + -117.942061, + 33.725732 + ], + [ + -117.941925, + 33.725599 + ], + [ + -117.941613, + 33.725419 + ], + [ + -117.941255, + 33.725274 + ], + [ + -117.941095, + 33.725192 + ], + [ + -117.941014, + 33.725087 + ], + [ + -117.940955, + 33.72491 + ], + [ + -117.940918, + 33.724766 + ], + [ + -117.940853, + 33.724654 + ], + [ + -117.940787, + 33.72459 + ], + [ + -117.940645, + 33.724532 + ], + [ + -117.941413, + 33.723849 + ], + [ + -117.941501, + 33.723255 + ], + [ + -117.94144, + 33.722248 + ], + [ + -117.941153, + 33.721985 + ], + [ + -117.940903, + 33.721703 + ], + [ + -117.940858, + 33.721324 + ], + [ + -117.941838, + 33.719885 + ], + [ + -117.943133, + 33.719047 + ], + [ + -117.943558, + 33.718844 + ], + [ + -117.943962, + 33.718749 + ] + ] + ] + }, + "properties": { + "name": "Mile Square Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 162932525, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.954103, + 33.724049 + ], + [ + -117.954098, + 33.723812 + ], + [ + -117.953936, + 33.723814 + ], + [ + -117.95394, + 33.724052 + ], + [ + -117.954103, + 33.724049 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 162935414, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.950075, + 33.666277 + ], + [ + -117.950523, + 33.666195 + ], + [ + -117.951453, + 33.665931 + ], + [ + -117.951685, + 33.665888 + ], + [ + -117.952221, + 33.665827 + ], + [ + -117.95265, + 33.665808 + ], + [ + -117.952632, + 33.664423 + ], + [ + -117.949744, + 33.664433 + ], + [ + -117.949616, + 33.664389 + ], + [ + -117.949495, + 33.664385 + ], + [ + -117.94914, + 33.664409 + ], + [ + -117.949046, + 33.664616 + ], + [ + -117.948983, + 33.664844 + ], + [ + -117.948839, + 33.665018 + ], + [ + -117.948722, + 33.665118 + ], + [ + -117.948779, + 33.665262 + ], + [ + -117.948836, + 33.665329 + ], + [ + -117.949221, + 33.665453 + ], + [ + -117.949577, + 33.66549 + ], + [ + -117.950011, + 33.665489 + ], + [ + -117.950117, + 33.665571 + ], + [ + -117.950166, + 33.665678 + ], + [ + -117.950131, + 33.665993 + ], + [ + -117.950075, + 33.666277 + ] + ] + ] + }, + "properties": { + "name": "LeBard Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 162935416, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.893676, + 33.764811 + ], + [ + -117.894639, + 33.764124 + ], + [ + -117.896712, + 33.762621 + ], + [ + -117.89701, + 33.762409 + ], + [ + -117.897477, + 33.762545 + ], + [ + -117.897696, + 33.762335 + ], + [ + -117.898754, + 33.76293 + ], + [ + -117.898648, + 33.7632 + ], + [ + -117.898539, + 33.763297 + ], + [ + -117.898364, + 33.763433 + ], + [ + -117.898182, + 33.763522 + ], + [ + -117.897997, + 33.763787 + ], + [ + -117.897783, + 33.763912 + ], + [ + -117.896967, + 33.764829 + ], + [ + -117.895902, + 33.766058 + ], + [ + -117.895676, + 33.766431 + ], + [ + -117.895462, + 33.766977 + ], + [ + -117.894908, + 33.767814 + ], + [ + -117.894188, + 33.768628 + ], + [ + -117.893896, + 33.76893 + ], + [ + -117.893298, + 33.769472 + ], + [ + -117.892853, + 33.769893 + ], + [ + -117.892607, + 33.769977 + ], + [ + -117.891549, + 33.771229 + ], + [ + -117.891457, + 33.771511 + ], + [ + -117.890756, + 33.772258 + ], + [ + -117.890447, + 33.772763 + ], + [ + -117.890376, + 33.773316 + ], + [ + -117.890288, + 33.773465 + ], + [ + -117.890233, + 33.773543 + ], + [ + -117.889963, + 33.773658 + ], + [ + -117.889575, + 33.774165 + ], + [ + -117.889387, + 33.774836 + ], + [ + -117.889141, + 33.775416 + ], + [ + -117.888592, + 33.776467 + ], + [ + -117.888111, + 33.777543 + ], + [ + -117.887759, + 33.778267 + ], + [ + -117.887705, + 33.778396 + ], + [ + -117.887639, + 33.77846 + ], + [ + -117.887574, + 33.778491 + ], + [ + -117.887379, + 33.7785 + ], + [ + -117.887215, + 33.778468 + ], + [ + -117.88623, + 33.778074 + ], + [ + -117.886141, + 33.778131 + ], + [ + -117.886081, + 33.778263 + ], + [ + -117.885795, + 33.778179 + ], + [ + -117.886207, + 33.777355 + ], + [ + -117.886554, + 33.776679 + ], + [ + -117.886975, + 33.775894 + ], + [ + -117.887122, + 33.775615 + ], + [ + -117.887429, + 33.774572 + ], + [ + -117.887784, + 33.773658 + ], + [ + -117.888079, + 33.773718 + ], + [ + -117.888259, + 33.773461 + ], + [ + -117.888541, + 33.772796 + ], + [ + -117.888802, + 33.772494 + ], + [ + -117.888993, + 33.772268 + ], + [ + -117.889284, + 33.77179 + ], + [ + -117.889578, + 33.771309 + ], + [ + -117.889854, + 33.770802 + ], + [ + -117.890068, + 33.770381 + ], + [ + -117.890174, + 33.769921 + ], + [ + -117.890101, + 33.769461 + ], + [ + -117.890304, + 33.769125 + ], + [ + -117.890862, + 33.768279 + ], + [ + -117.891452, + 33.767474 + ], + [ + -117.891912, + 33.766806 + ], + [ + -117.892038, + 33.766595 + ], + [ + -117.892299, + 33.766668 + ], + [ + -117.892547, + 33.766215 + ], + [ + -117.89234, + 33.766117 + ], + [ + -117.892412, + 33.76597 + ], + [ + -117.892795, + 33.765357 + ], + [ + -117.892949, + 33.765136 + ], + [ + -117.893306, + 33.764738 + ], + [ + -117.893381, + 33.76465 + ], + [ + -117.893676, + 33.764811 + ] + ] + ] + }, + "properties": { + "name": "Riverview Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328009, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.034275, + 33.828104 + ], + [ + -118.034282, + 33.828648 + ], + [ + -118.033291, + 33.828655 + ], + [ + -118.033285, + 33.828112 + ], + [ + -118.033446, + 33.828111 + ], + [ + -118.034139, + 33.828105 + ], + [ + -118.034275, + 33.828104 + ] + ] + ] + }, + "properties": { + "name": "Rosen/Acacia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328011, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.613081, + 33.623476 + ], + [ + -117.613635, + 33.623483 + ], + [ + -117.613949, + 33.623446 + ], + [ + -117.614823, + 33.624865 + ], + [ + -117.614946, + 33.624937 + ], + [ + -117.614672, + 33.62518 + ], + [ + -117.614348, + 33.62538 + ], + [ + -117.61362, + 33.625652 + ], + [ + -117.613468, + 33.62595 + ], + [ + -117.612733, + 33.62544 + ], + [ + -117.612587, + 33.625338 + ], + [ + -117.612849, + 33.624774 + ], + [ + -117.612947, + 33.624453 + ], + [ + -117.613037, + 33.624079 + ], + [ + -117.613082, + 33.623749 + ], + [ + -117.613081, + 33.623476 + ] + ] + ] + }, + "properties": { + "name": "Arroyo Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328012, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.651307, + 33.578949 + ], + [ + -117.652188, + 33.577785 + ], + [ + -117.652927, + 33.578035 + ], + [ + -117.653446, + 33.578192 + ], + [ + -117.652649, + 33.579586 + ], + [ + -117.651307, + 33.578949 + ] + ] + ] + }, + "properties": { + "name": "Barbadnes Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328013, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.873486, + 33.597569 + ], + [ + -117.871867, + 33.596716 + ], + [ + -117.872061, + 33.596507 + ], + [ + -117.87229, + 33.596616 + ], + [ + -117.872866, + 33.596923 + ], + [ + -117.874511, + 33.597844 + ], + [ + -117.875402, + 33.598267 + ], + [ + -117.876043, + 33.598736 + ], + [ + -117.875884, + 33.598855 + ], + [ + -117.875133, + 33.598458 + ], + [ + -117.873486, + 33.597569 + ] + ] + ] + }, + "properties": { + "name": "Bayside Dr Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328015, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.016351, + 33.820111 + ], + [ + -118.017394, + 33.820803 + ], + [ + -118.016604, + 33.820812 + ], + [ + -118.016623, + 33.820745 + ], + [ + -118.016579, + 33.820692 + ], + [ + -118.016565, + 33.820675 + ], + [ + -118.016493, + 33.820665 + ], + [ + -118.016428, + 33.820699 + ], + [ + -118.016398, + 33.82076 + ], + [ + -118.016433, + 33.820814 + ], + [ + -118.014267, + 33.820844 + ], + [ + -118.016351, + 33.820111 + ] + ] + ] + }, + "properties": { + "name": "Beat Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328021, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.877739, + 33.599955 + ], + [ + -117.878008, + 33.599999 + ], + [ + -117.878211, + 33.599972 + ], + [ + -117.878491, + 33.600274 + ], + [ + -117.878019, + 33.60075 + ], + [ + -117.877495, + 33.601249 + ], + [ + -117.876904, + 33.600811 + ], + [ + -117.877006, + 33.600501 + ], + [ + -117.877331, + 33.600217 + ], + [ + -117.877317, + 33.599976 + ], + [ + -117.8766, + 33.599503 + ], + [ + -117.875863, + 33.598955 + ], + [ + -117.876092, + 33.598836 + ], + [ + -117.876445, + 33.599202 + ], + [ + -117.87679, + 33.599459 + ], + [ + -117.877739, + 33.599955 + ] + ] + ] + }, + "properties": { + "name": "Begonia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328023, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.041872, + 33.860118 + ], + [ + -118.041899, + 33.861456 + ], + [ + -118.042223, + 33.861459 + ], + [ + -118.042224, + 33.861478 + ], + [ + -118.042212, + 33.861545 + ], + [ + -118.042231, + 33.8616 + ], + [ + -118.042188, + 33.861627 + ], + [ + -118.042082, + 33.861773 + ], + [ + -118.040803, + 33.86124 + ], + [ + -118.04072, + 33.8612 + ], + [ + -118.040696, + 33.861184 + ], + [ + -118.041091, + 33.860825 + ], + [ + -118.041484, + 33.86047 + ], + [ + -118.041649, + 33.86032 + ], + [ + -118.041872, + 33.860118 + ] + ] + ] + }, + "properties": { + "name": "Bettencourt Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328024, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.036024, + 33.764461 + ], + [ + -118.033929, + 33.764447 + ], + [ + -118.03394, + 33.763552 + ], + [ + -118.036029, + 33.763556 + ], + [ + -118.036024, + 33.764461 + ] + ] + ] + }, + "properties": { + "name": "Bolsa Chica Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328025, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.02813, + 33.704421 + ], + [ + -118.028141, + 33.703997 + ], + [ + -118.028295, + 33.703899 + ], + [ + -118.02912, + 33.70384 + ], + [ + -118.029605, + 33.703923 + ], + [ + -118.02988, + 33.704005 + ], + [ + -118.03019, + 33.704195 + ], + [ + -118.03042, + 33.704355 + ], + [ + -118.030252, + 33.704602 + ], + [ + -118.02972, + 33.70439 + ], + [ + -118.02919, + 33.704398 + ], + [ + -118.02813, + 33.704421 + ] + ] + ] + }, + "properties": { + "name": "Bolsa View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328026, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.024266, + 33.855612 + ], + [ + -118.024257, + 33.855457 + ], + [ + -118.024256, + 33.855284 + ], + [ + -118.024361, + 33.855278 + ], + [ + -118.024426, + 33.855161 + ], + [ + -118.025152, + 33.855156 + ], + [ + -118.025261, + 33.85502 + ], + [ + -118.026548, + 33.855034 + ], + [ + -118.026567, + 33.855479 + ], + [ + -118.026747, + 33.855517 + ], + [ + -118.026742, + 33.855825 + ], + [ + -118.024266, + 33.855612 + ] + ] + ] + }, + "properties": { + "name": "Brenner Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328027, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.805605, + 33.643771 + ], + [ + -117.805668, + 33.643653 + ], + [ + -117.805745, + 33.64354 + ], + [ + -117.805853, + 33.64342 + ], + [ + -117.80645, + 33.642849 + ], + [ + -117.807354, + 33.64339 + ], + [ + -117.806907, + 33.643879 + ], + [ + -117.806754, + 33.644021 + ], + [ + -117.806613, + 33.644075 + ], + [ + -117.806349, + 33.644154 + ], + [ + -117.80612, + 33.644204 + ], + [ + -117.805697, + 33.644262 + ], + [ + -117.805582, + 33.643977 + ], + [ + -117.805605, + 33.643771 + ] + ] + ] + }, + "properties": { + "name": "Canyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328028, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.023942, + 33.722623 + ], + [ + -118.021907, + 33.72263 + ], + [ + -118.021874, + 33.720521 + ], + [ + -118.023903, + 33.720513 + ], + [ + -118.023942, + 33.722623 + ] + ] + ] + }, + "properties": { + "name": "Carr Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328032, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.022281, + 33.74786 + ], + [ + -118.020911, + 33.747863 + ], + [ + -118.020908, + 33.746991 + ], + [ + -118.022279, + 33.746988 + ], + [ + -118.022281, + 33.74786 + ] + ] + ] + }, + "properties": { + "name": "Clegg Stacy Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328034, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.717004, + 33.537079 + ], + [ + -117.716918, + 33.53698 + ], + [ + -117.716837, + 33.536797 + ], + [ + -117.71697, + 33.536645 + ], + [ + -117.717201, + 33.536673 + ], + [ + -117.717326, + 33.536677 + ], + [ + -117.717462, + 33.53664 + ], + [ + -117.717622, + 33.536552 + ], + [ + -117.717858, + 33.536409 + ], + [ + -117.717935, + 33.536298 + ], + [ + -117.718014, + 33.536161 + ], + [ + -117.7182, + 33.536086 + ], + [ + -117.718358, + 33.536054 + ], + [ + -117.718513, + 33.536058 + ], + [ + -117.718746, + 33.536132 + ], + [ + -117.718838, + 33.53638 + ], + [ + -117.718847, + 33.536462 + ], + [ + -117.71884, + 33.536534 + ], + [ + -117.718775, + 33.536605 + ], + [ + -117.718689, + 33.53694 + ], + [ + -117.718598, + 33.537307 + ], + [ + -117.718285, + 33.537315 + ], + [ + -117.71807, + 33.537345 + ], + [ + -117.717945, + 33.53738 + ], + [ + -117.717592, + 33.53756 + ], + [ + -117.717416, + 33.537704 + ], + [ + -117.71722, + 33.537815 + ], + [ + -117.717148, + 33.537723 + ], + [ + -117.717102, + 33.537593 + ], + [ + -117.717054, + 33.537114 + ], + [ + -117.717004, + 33.537079 + ] + ] + ] + }, + "properties": { + "name": "Clipper Cove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328039, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.656776, + 33.572896 + ], + [ + -117.656194, + 33.572946 + ], + [ + -117.655974, + 33.572988 + ], + [ + -117.655693, + 33.572295 + ], + [ + -117.655303, + 33.571693 + ], + [ + -117.654832, + 33.57126 + ], + [ + -117.655116, + 33.570894 + ], + [ + -117.656112, + 33.57068 + ], + [ + -117.65619, + 33.569641 + ], + [ + -117.655348, + 33.568203 + ], + [ + -117.65513, + 33.568196 + ], + [ + -117.655112, + 33.568136 + ], + [ + -117.655072, + 33.568098 + ], + [ + -117.655228, + 33.568004 + ], + [ + -117.654948, + 33.567509 + ], + [ + -117.654947, + 33.567393 + ], + [ + -117.654937, + 33.566698 + ], + [ + -117.654848, + 33.566622 + ], + [ + -117.654855, + 33.566573 + ], + [ + -117.654866, + 33.566494 + ], + [ + -117.655007, + 33.566429 + ], + [ + -117.655071, + 33.565892 + ], + [ + -117.655003, + 33.565823 + ], + [ + -117.655007, + 33.565767 + ], + [ + -117.655016, + 33.565668 + ], + [ + -117.655089, + 33.56566 + ], + [ + -117.655228, + 33.564976 + ], + [ + -117.655073, + 33.564695 + ], + [ + -117.654825, + 33.564547 + ], + [ + -117.654503, + 33.56438 + ], + [ + -117.654826, + 33.564078 + ], + [ + -117.654866, + 33.564015 + ], + [ + -117.65493, + 33.56382 + ], + [ + -117.654998, + 33.563552 + ], + [ + -117.655094, + 33.563574 + ], + [ + -117.655068, + 33.56396 + ], + [ + -117.6552, + 33.564122 + ], + [ + -117.655357, + 33.564096 + ], + [ + -117.655412, + 33.56446 + ], + [ + -117.655488, + 33.564917 + ], + [ + -117.655337, + 33.565659 + ], + [ + -117.655377, + 33.565692 + ], + [ + -117.655336, + 33.566092 + ], + [ + -117.655317, + 33.566379 + ], + [ + -117.655267, + 33.566798 + ], + [ + -117.655305, + 33.567184 + ], + [ + -117.655307, + 33.567198 + ], + [ + -117.655325, + 33.567384 + ], + [ + -117.655493, + 33.56791 + ], + [ + -117.655712, + 33.568372 + ], + [ + -117.656043, + 33.568255 + ], + [ + -117.656634, + 33.568221 + ], + [ + -117.656632, + 33.568403 + ], + [ + -117.656216, + 33.568402 + ], + [ + -117.656255, + 33.568853 + ], + [ + -117.656454, + 33.569179 + ], + [ + -117.656398, + 33.569633 + ], + [ + -117.656538, + 33.569724 + ], + [ + -117.656384, + 33.570299 + ], + [ + -117.65632, + 33.570589 + ], + [ + -117.656402, + 33.57097 + ], + [ + -117.656366, + 33.571087 + ], + [ + -117.6565, + 33.571235 + ], + [ + -117.656705, + 33.571125 + ], + [ + -117.656649, + 33.571772 + ], + [ + -117.656776, + 33.572896 + ] + ] + ] + }, + "properties": { + "name": "Cordova Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328041, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.664069, + 33.544718 + ], + [ + -117.663731, + 33.544596 + ], + [ + -117.663785, + 33.544486 + ], + [ + -117.664175, + 33.544636 + ], + [ + -117.664552, + 33.545208 + ], + [ + -117.664869, + 33.545033 + ], + [ + -117.665098, + 33.545265 + ], + [ + -117.665147, + 33.54534 + ], + [ + -117.664889, + 33.545612 + ], + [ + -117.664604, + 33.54543 + ], + [ + -117.664494, + 33.545537 + ], + [ + -117.664236, + 33.545653 + ], + [ + -117.663839, + 33.545657 + ], + [ + -117.663838, + 33.545932 + ], + [ + -117.663667, + 33.545932 + ], + [ + -117.663657, + 33.54554 + ], + [ + -117.664069, + 33.544718 + ] + ] + ] + }, + "properties": { + "name": "Coronado Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328048, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.039266, + 33.839014 + ], + [ + -118.039273, + 33.836264 + ], + [ + -118.039332, + 33.836264 + ], + [ + -118.040234, + 33.836266 + ], + [ + -118.041407, + 33.836268 + ], + [ + -118.041404, + 33.837186 + ], + [ + -118.041399, + 33.839018 + ], + [ + -118.039266, + 33.839014 + ] + ] + ] + }, + "properties": { + "name": "Cypress Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328051, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.043046, + 33.81706 + ], + [ + -118.043836, + 33.81705 + ], + [ + -118.043849, + 33.817748 + ], + [ + -118.043855, + 33.818023 + ], + [ + -118.043508, + 33.818028 + ], + [ + -118.043065, + 33.818033 + ], + [ + -118.043046, + 33.81706 + ] + ] + ] + }, + "properties": { + "name": "Daryl Essex Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328053, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.668608, + 33.60812 + ], + [ + -117.668998, + 33.60812 + ], + [ + -117.669654, + 33.608223 + ], + [ + -117.669544, + 33.608614 + ], + [ + -117.669182, + 33.608584 + ], + [ + -117.669008, + 33.608802 + ], + [ + -117.668487, + 33.610873 + ], + [ + -117.667826, + 33.610837 + ], + [ + -117.668073, + 33.609664 + ], + [ + -117.66814, + 33.609364 + ], + [ + -117.668378, + 33.608193 + ], + [ + -117.668428, + 33.608133 + ], + [ + -117.668478, + 33.608113 + ], + [ + -117.668608, + 33.60812 + ] + ] + ] + }, + "properties": { + "name": "El Dorado Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328054, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.028745, + 33.850038 + ], + [ + -118.031219, + 33.850025 + ], + [ + -118.037146, + 33.849993 + ], + [ + -118.037433, + 33.849983 + ], + [ + -118.039473, + 33.849972 + ], + [ + -118.054603, + 33.849855 + ], + [ + -118.054618, + 33.849168 + ], + [ + -118.054878, + 33.849174 + ], + [ + -118.054939, + 33.84995 + ], + [ + -118.054426, + 33.850311 + ], + [ + -118.037189, + 33.850453 + ], + [ + -118.02871, + 33.850522 + ], + [ + -118.028745, + 33.850038 + ] + ] + ] + }, + "properties": { + "name": "El Rancho Verde Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328062, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.045597, + 33.827963 + ], + [ + -118.043566, + 33.827979 + ], + [ + -118.043532, + 33.827979 + ], + [ + -118.04353, + 33.82756 + ], + [ + -118.043524, + 33.826822 + ], + [ + -118.043586, + 33.826798 + ], + [ + -118.043724, + 33.826744 + ], + [ + -118.043718, + 33.827045 + ], + [ + -118.045586, + 33.827027 + ], + [ + -118.045597, + 33.827963 + ] + ] + ] + }, + "properties": { + "name": "Evergreen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328066, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.669747, + 33.568716 + ], + [ + -117.670198, + 33.569071 + ], + [ + -117.669603, + 33.569336 + ], + [ + -117.66864, + 33.569114 + ], + [ + -117.668014, + 33.5689 + ], + [ + -117.668136, + 33.568803 + ], + [ + -117.66824, + 33.568729 + ], + [ + -117.668436, + 33.568628 + ], + [ + -117.668652, + 33.568553 + ], + [ + -117.668848, + 33.568517 + ], + [ + -117.669082, + 33.568512 + ], + [ + -117.669324, + 33.568543 + ], + [ + -117.669564, + 33.568623 + ], + [ + -117.669747, + 33.568716 + ] + ] + ] + }, + "properties": { + "name": "Granada Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328067, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.043874, + 33.728679 + ], + [ + -118.04488, + 33.728678 + ], + [ + -118.044886, + 33.72973 + ], + [ + -118.043875, + 33.72973 + ], + [ + -118.043874, + 33.728679 + ] + ] + ] + }, + "properties": { + "name": "Haven View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328071, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.016597, + 33.708008 + ], + [ + -118.016592, + 33.705568 + ], + [ + -118.017203, + 33.705567 + ], + [ + -118.017209, + 33.708007 + ], + [ + -118.016597, + 33.708008 + ] + ] + ] + }, + "properties": { + "name": "Hope View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328076, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.023163, + 33.761444 + ], + [ + -118.023141, + 33.760678 + ], + [ + -118.024364, + 33.76168 + ], + [ + -118.02447, + 33.761887 + ], + [ + -118.024513, + 33.762302 + ], + [ + -118.024105, + 33.761969 + ], + [ + -118.023873, + 33.761767 + ], + [ + -118.023781, + 33.761688 + ], + [ + -118.023576, + 33.761519 + ], + [ + -118.023408, + 33.761453 + ], + [ + -118.023163, + 33.761444 + ] + ] + ] + }, + "properties": { + "name": "Indian Village Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328077, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.634823, + 33.600372 + ], + [ + -117.635638, + 33.599777 + ], + [ + -117.63533, + 33.59952 + ], + [ + -117.635739, + 33.599124 + ], + [ + -117.636279, + 33.599025 + ], + [ + -117.63666, + 33.598311 + ], + [ + -117.637007, + 33.598186 + ], + [ + -117.637541, + 33.597485 + ], + [ + -117.638564, + 33.597804 + ], + [ + -117.638605, + 33.597817 + ], + [ + -117.638407, + 33.598246 + ], + [ + -117.637888, + 33.599379 + ], + [ + -117.637025, + 33.600412 + ], + [ + -117.635803, + 33.601318 + ], + [ + -117.634823, + 33.600372 + ] + ] + ] + }, + "properties": { + "name": "James G Gilleran Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328078, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.660141, + 33.577971 + ], + [ + -117.660209, + 33.577695 + ], + [ + -117.660587, + 33.57769 + ], + [ + -117.660544, + 33.577151 + ], + [ + -117.660659, + 33.576552 + ], + [ + -117.66106, + 33.575979 + ], + [ + -117.661242, + 33.575487 + ], + [ + -117.661612, + 33.57534 + ], + [ + -117.66166, + 33.575538 + ], + [ + -117.661827, + 33.575593 + ], + [ + -117.661134, + 33.576818 + ], + [ + -117.661134, + 33.577145 + ], + [ + -117.660991, + 33.577187 + ], + [ + -117.660911, + 33.577253 + ], + [ + -117.660904, + 33.577375 + ], + [ + -117.660989, + 33.577635 + ], + [ + -117.661165, + 33.577917 + ], + [ + -117.661467, + 33.578426 + ], + [ + -117.661505, + 33.578686 + ], + [ + -117.659967, + 33.579085 + ], + [ + -117.6592, + 33.579257 + ], + [ + -117.659207, + 33.579516 + ], + [ + -117.6587, + 33.579525 + ], + [ + -117.658675, + 33.579264 + ], + [ + -117.658691, + 33.578955 + ], + [ + -117.659516, + 33.578853 + ], + [ + -117.66017, + 33.578482 + ], + [ + -117.660385, + 33.578262 + ], + [ + -117.660453, + 33.578116 + ], + [ + -117.660141, + 33.577971 + ] + ] + ] + }, + "properties": { + "name": "La Mancha Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328083, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.01889, + 33.713487 + ], + [ + -118.01881, + 33.713477 + ], + [ + -118.01874, + 33.713437 + ], + [ + -118.01871, + 33.713367 + ], + [ + -118.0187, + 33.713247 + ], + [ + -118.018702, + 33.712925 + ], + [ + -118.01885, + 33.712829 + ], + [ + -118.018837, + 33.712235 + ], + [ + -118.019242, + 33.712198 + ], + [ + -118.019591, + 33.712197 + ], + [ + -118.019825, + 33.712196 + ], + [ + -118.01984, + 33.713795 + ], + [ + -118.019589, + 33.7138 + ], + [ + -118.019429, + 33.713779 + ], + [ + -118.019295, + 33.713709 + ], + [ + -118.019127, + 33.713561 + ], + [ + -118.018984, + 33.713506 + ], + [ + -118.01889, + 33.713487 + ] + ] + ] + }, + "properties": { + "name": "Lark View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328086, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.026264, + 33.816975 + ], + [ + -118.025844, + 33.816979 + ], + [ + -118.025074, + 33.816984 + ], + [ + -118.02506, + 33.815259 + ], + [ + -118.026249, + 33.815257 + ], + [ + -118.026257, + 33.816136 + ], + [ + -118.026264, + 33.816975 + ] + ] + ] + }, + "properties": { + "name": "Larwin Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328089, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.665121, + 33.593802 + ], + [ + -117.665861, + 33.59429 + ], + [ + -117.664751, + 33.595163 + ], + [ + -117.664505, + 33.594843 + ], + [ + -117.664408, + 33.594135 + ], + [ + -117.664128, + 33.593941 + ], + [ + -117.664216, + 33.593834 + ], + [ + -117.664356, + 33.593925 + ], + [ + -117.664589, + 33.593516 + ], + [ + -117.664701, + 33.593572 + ], + [ + -117.665121, + 33.593802 + ] + ] + ] + }, + "properties": { + "name": "Linda Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328092, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.669691, + 33.582903 + ], + [ + -117.669094, + 33.582884 + ], + [ + -117.66836, + 33.582686 + ], + [ + -117.668307, + 33.582635 + ], + [ + -117.668272, + 33.582561 + ], + [ + -117.668245, + 33.582483 + ], + [ + -117.668267, + 33.582393 + ], + [ + -117.668416, + 33.582281 + ], + [ + -117.668524, + 33.582215 + ], + [ + -117.669368, + 33.581814 + ], + [ + -117.669691, + 33.582903 + ] + ] + ] + }, + "properties": { + "name": "Madrid Fore Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328093, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.669065, + 33.603905 + ], + [ + -117.66955, + 33.603377 + ], + [ + -117.670261, + 33.602112 + ], + [ + -117.671332, + 33.602199 + ], + [ + -117.671359, + 33.603927 + ], + [ + -117.670748, + 33.60413 + ], + [ + -117.670345, + 33.604483 + ], + [ + -117.669065, + 33.603905 + ] + ] + ] + }, + "properties": { + "name": "Marguerite Oniell Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328104, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.647023, + 33.579392 + ], + [ + -117.646886, + 33.578948 + ], + [ + -117.647425, + 33.578961 + ], + [ + -117.648002, + 33.578883 + ], + [ + -117.648282, + 33.578813 + ], + [ + -117.648782, + 33.578558 + ], + [ + -117.649314, + 33.579288 + ], + [ + -117.647608, + 33.580295 + ], + [ + -117.647218, + 33.579735 + ], + [ + -117.647023, + 33.579392 + ] + ] + ] + }, + "properties": { + "name": "Napoli Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328105, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.703817, + 33.557899 + ], + [ + -117.703932, + 33.557899 + ], + [ + -117.705605, + 33.557892 + ], + [ + -117.705602, + 33.558007 + ], + [ + -117.705587, + 33.558172 + ], + [ + -117.705559, + 33.558336 + ], + [ + -117.705472, + 33.558665 + ], + [ + -117.704477, + 33.558497 + ], + [ + -117.704032, + 33.558518 + ], + [ + -117.703817, + 33.557899 + ] + ] + ] + }, + "properties": { + "name": "Niguel Heights Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328106, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.034683, + 33.82427 + ], + [ + -118.032564, + 33.824303 + ], + [ + -118.032547, + 33.823589 + ], + [ + -118.032531, + 33.822886 + ], + [ + -118.032523, + 33.822538 + ], + [ + -118.03252, + 33.820229 + ], + [ + -118.034323, + 33.820223 + ], + [ + -118.03433, + 33.820625 + ], + [ + -118.03461, + 33.820622 + ], + [ + -118.034659, + 33.823059 + ], + [ + -118.034666, + 33.823416 + ], + [ + -118.034673, + 33.8238 + ], + [ + -118.034683, + 33.82427 + ] + ] + ] + }, + "properties": { + "name": "Oak Knoll Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328111, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.643889, + 33.609016 + ], + [ + -117.645615, + 33.608007 + ], + [ + -117.646141, + 33.607437 + ], + [ + -117.646338, + 33.607092 + ], + [ + -117.646349, + 33.606697 + ], + [ + -117.647183, + 33.606132 + ], + [ + -117.647508, + 33.605856 + ], + [ + -117.649228, + 33.603859 + ], + [ + -117.64857, + 33.603416 + ], + [ + -117.648808, + 33.603121 + ], + [ + -117.648666, + 33.602598 + ], + [ + -117.648722, + 33.602566 + ], + [ + -117.648909, + 33.602772 + ], + [ + -117.649165, + 33.602455 + ], + [ + -117.649325, + 33.602305 + ], + [ + -117.650271, + 33.601608 + ], + [ + -117.650661, + 33.601289 + ], + [ + -117.650671, + 33.601239 + ], + [ + -117.650651, + 33.601168 + ], + [ + -117.650601, + 33.601098 + ], + [ + -117.650407, + 33.600938 + ], + [ + -117.649663, + 33.600314 + ], + [ + -117.649551, + 33.600028 + ], + [ + -117.650184, + 33.59931 + ], + [ + -117.650238, + 33.599192 + ], + [ + -117.650308, + 33.598952 + ], + [ + -117.650318, + 33.598642 + ], + [ + -117.650288, + 33.598242 + ], + [ + -117.650198, + 33.597812 + ], + [ + -117.650468, + 33.597792 + ], + [ + -117.650676, + 33.597751 + ], + [ + -117.651186, + 33.597621 + ], + [ + -117.651666, + 33.597451 + ], + [ + -117.651766, + 33.597421 + ], + [ + -117.652366, + 33.597201 + ], + [ + -117.653036, + 33.597001 + ], + [ + -117.653666, + 33.596791 + ], + [ + -117.654126, + 33.596661 + ], + [ + -117.6547, + 33.596526 + ], + [ + -117.6556, + 33.596487 + ], + [ + -117.655889, + 33.596486 + ], + [ + -117.655786, + 33.597626 + ], + [ + -117.655633, + 33.597999 + ], + [ + -117.655476, + 33.598191 + ], + [ + -117.655332, + 33.59828 + ], + [ + -117.654821, + 33.599286 + ], + [ + -117.654133, + 33.599889 + ], + [ + -117.653806, + 33.601586 + ], + [ + -117.652969, + 33.60238 + ], + [ + -117.652237, + 33.603234 + ], + [ + -117.651839, + 33.603544 + ], + [ + -117.650348, + 33.604943 + ], + [ + -117.649987, + 33.605606 + ], + [ + -117.649941, + 33.606072 + ], + [ + -117.650282, + 33.60611 + ], + [ + -117.650269, + 33.607088 + ], + [ + -117.650324, + 33.607752 + ], + [ + -117.649103, + 33.607704 + ], + [ + -117.648539, + 33.606298 + ], + [ + -117.648298, + 33.606315 + ], + [ + -117.647755, + 33.606452 + ], + [ + -117.647554, + 33.606695 + ], + [ + -117.647651, + 33.606947 + ], + [ + -117.64673, + 33.607135 + ], + [ + -117.646907, + 33.607582 + ], + [ + -117.647037, + 33.60789 + ], + [ + -117.647058, + 33.60794 + ], + [ + -117.646737, + 33.60804 + ], + [ + -117.646357, + 33.6082 + ], + [ + -117.645617, + 33.60863 + ], + [ + -117.645207, + 33.6089 + ], + [ + -117.644687, + 33.60922 + ], + [ + -117.644297, + 33.60949 + ], + [ + -117.643889, + 33.609016 + ] + ] + ] + }, + "properties": { + "name": "Oso Viejo Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328115, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.863198, + 33.608752 + ], + [ + -117.863803, + 33.608131 + ], + [ + -117.864381, + 33.60811 + ], + [ + -117.865222, + 33.608824 + ], + [ + -117.86413, + 33.609503 + ], + [ + -117.863198, + 33.608752 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328116, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.031101, + 33.732326 + ], + [ + -118.031087, + 33.730264 + ], + [ + -118.032539, + 33.730267 + ], + [ + -118.032538, + 33.732332 + ], + [ + -118.031101, + 33.732326 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328123, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.024029, + 33.821123 + ], + [ + -118.02482, + 33.821115 + ], + [ + -118.024839, + 33.822298 + ], + [ + -118.024048, + 33.822306 + ], + [ + -118.024029, + 33.821123 + ] + ] + ] + }, + "properties": { + "name": "Pinewood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328125, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.657958, + 33.600655 + ], + [ + -117.658631, + 33.600823 + ], + [ + -117.658038, + 33.602471 + ], + [ + -117.657365, + 33.602303 + ], + [ + -117.657958, + 33.600655 + ] + ] + ] + }, + "properties": { + "name": "Preciados Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328127, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.041646, + 33.862187 + ], + [ + -118.041596, + 33.862357 + ], + [ + -118.041593, + 33.862633 + ], + [ + -118.041406, + 33.862636 + ], + [ + -118.041399, + 33.862342 + ], + [ + -118.039224, + 33.862365 + ], + [ + -118.040126, + 33.861571 + ], + [ + -118.041646, + 33.862187 + ] + ] + ] + }, + "properties": { + "name": "Rainbow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328131, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.632793, + 33.607953 + ], + [ + -117.632435, + 33.607769 + ], + [ + -117.632394, + 33.607799 + ], + [ + -117.632247, + 33.607723 + ], + [ + -117.63214, + 33.607613 + ], + [ + -117.632092, + 33.607412 + ], + [ + -117.632154, + 33.607163 + ], + [ + -117.632366, + 33.606608 + ], + [ + -117.632719, + 33.605922 + ], + [ + -117.632889, + 33.605714 + ], + [ + -117.633106, + 33.605449 + ], + [ + -117.633363, + 33.605236 + ], + [ + -117.63358, + 33.60506 + ], + [ + -117.633993, + 33.605057 + ], + [ + -117.63399, + 33.605339 + ], + [ + -117.633979, + 33.605625 + ], + [ + -117.633906, + 33.606064 + ], + [ + -117.633761, + 33.606497 + ], + [ + -117.633626, + 33.606793 + ], + [ + -117.633439, + 33.607088 + ], + [ + -117.633132, + 33.607563 + ], + [ + -117.632793, + 33.607953 + ] + ] + ] + }, + "properties": { + "name": "Robert A Curtis Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328143, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.020773, + 33.740852 + ], + [ + -118.020784, + 33.741857 + ], + [ + -118.019947, + 33.741864 + ], + [ + -118.019936, + 33.740859 + ], + [ + -118.020773, + 33.740852 + ] + ] + ] + }, + "properties": { + "name": "Schroeder Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328153, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.900431, + 33.643974 + ], + [ + -117.899512, + 33.643358 + ], + [ + -117.90025, + 33.642595 + ], + [ + -117.901169, + 33.643212 + ], + [ + -117.900431, + 33.643974 + ] + ] + ] + }, + "properties": { + "name": "Tustin Ave Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328154, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.661671, + 33.613295 + ], + [ + -117.661961, + 33.61283 + ], + [ + -117.662256, + 33.612388 + ], + [ + -117.662569, + 33.612539 + ], + [ + -117.662722, + 33.61342 + ], + [ + -117.66208, + 33.613504 + ], + [ + -117.661912, + 33.613381 + ], + [ + -117.661671, + 33.613295 + ] + ] + ] + }, + "properties": { + "name": "Valyermo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328158, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.037948, + 33.757087 + ], + [ + -118.038172, + 33.757313 + ], + [ + -118.038058, + 33.75738 + ], + [ + -118.037998, + 33.757629 + ], + [ + -118.038046, + 33.757779 + ], + [ + -118.037772, + 33.758181 + ], + [ + -118.036865, + 33.758176 + ], + [ + -118.03687, + 33.757517 + ], + [ + -118.037426, + 33.757127 + ], + [ + -118.037948, + 33.757087 + ] + ] + ] + }, + "properties": { + "name": "Westminister Village Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328160, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.04438, + 33.72101 + ], + [ + -118.044376, + 33.720764 + ], + [ + -118.044747, + 33.720761 + ], + [ + -118.044726, + 33.719167 + ], + [ + -118.045379, + 33.719161 + ], + [ + -118.045383, + 33.719418 + ], + [ + -118.045729, + 33.719415 + ], + [ + -118.045751, + 33.720998 + ], + [ + -118.04438, + 33.72101 + ] + ] + ] + }, + "properties": { + "name": "Wieder Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328162, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.631869, + 33.609715 + ], + [ + -117.631211, + 33.611778 + ], + [ + -117.631172, + 33.61277 + ], + [ + -117.629908, + 33.612148 + ], + [ + -117.630364, + 33.610343 + ], + [ + -117.630306, + 33.609893 + ], + [ + -117.630364, + 33.609436 + ], + [ + -117.631869, + 33.609715 + ] + ] + ] + }, + "properties": { + "name": "William M Beebe Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163328167, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.703401, + 33.552342 + ], + [ + -117.703634, + 33.552557 + ], + [ + -117.703692, + 33.552536 + ], + [ + -117.704029, + 33.552865 + ], + [ + -117.704158, + 33.552811 + ], + [ + -117.70433, + 33.552977 + ], + [ + -117.704392, + 33.552981 + ], + [ + -117.70455, + 33.553115 + ], + [ + -117.704669, + 33.553046 + ], + [ + -117.704913, + 33.553329 + ], + [ + -117.70486, + 33.553399 + ], + [ + -117.704817, + 33.553481 + ], + [ + -117.704713, + 33.55348 + ], + [ + -117.70462, + 33.553481 + ], + [ + -117.704172, + 33.553374 + ], + [ + -117.703835, + 33.553298 + ], + [ + -117.703323, + 33.553263 + ], + [ + -117.703042, + 33.553263 + ], + [ + -117.702824, + 33.552958 + ], + [ + -117.702292, + 33.553119 + ], + [ + -117.702324, + 33.553194 + ], + [ + -117.702064, + 33.553273 + ], + [ + -117.701769, + 33.553001 + ], + [ + -117.701928, + 33.552925 + ], + [ + -117.702076, + 33.552841 + ], + [ + -117.702185, + 33.552764 + ], + [ + -117.702328, + 33.552638 + ], + [ + -117.702454, + 33.552515 + ], + [ + -117.702578, + 33.552364 + ], + [ + -117.702669, + 33.552217 + ], + [ + -117.70278, + 33.552003 + ], + [ + -117.702926, + 33.55182 + ], + [ + -117.703401, + 33.552342 + ] + ] + ] + }, + "properties": { + "name": "Yosemite Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975882, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.616812, + 33.658158 + ], + [ + -117.617161, + 33.658359 + ], + [ + -117.617583, + 33.658551 + ], + [ + -117.618423, + 33.658792 + ], + [ + -117.619094, + 33.65891 + ], + [ + -117.619083, + 33.659168 + ], + [ + -117.618992, + 33.659704 + ], + [ + -117.618916, + 33.65989 + ], + [ + -117.618878, + 33.660018 + ], + [ + -117.61871, + 33.660251 + ], + [ + -117.618458, + 33.660449 + ], + [ + -117.6181, + 33.66064 + ], + [ + -117.617802, + 33.660781 + ], + [ + -117.617718, + 33.660812 + ], + [ + -117.617627, + 33.660831 + ], + [ + -117.617398, + 33.660861 + ], + [ + -117.617009, + 33.660869 + ], + [ + -117.616787, + 33.66088 + ], + [ + -117.616721, + 33.660845 + ], + [ + -117.616724, + 33.660054 + ], + [ + -117.616508, + 33.659691 + ], + [ + -117.616633, + 33.659426 + ], + [ + -117.616369, + 33.658977 + ], + [ + -117.616812, + 33.658158 + ] + ] + ] + }, + "properties": { + "name": "Altisima Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975883, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.811226, + 33.680884 + ], + [ + -117.810633, + 33.681496 + ], + [ + -117.810132, + 33.682015 + ], + [ + -117.809826, + 33.681603 + ], + [ + -117.80895, + 33.680975 + ], + [ + -117.808563, + 33.680957 + ], + [ + -117.808201, + 33.680705 + ], + [ + -117.809358, + 33.679367 + ], + [ + -117.809435, + 33.679343 + ], + [ + -117.809522, + 33.679357 + ], + [ + -117.810354, + 33.680179 + ], + [ + -117.81076, + 33.680534 + ], + [ + -117.811226, + 33.680884 + ] + ] + ] + }, + "properties": { + "name": "Alton Athletic Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975884, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.663901, + 33.685967 + ], + [ + -117.664187, + 33.686152 + ], + [ + -117.664073, + 33.686559 + ], + [ + -117.664071, + 33.687152 + ], + [ + -117.663423, + 33.68705 + ], + [ + -117.66247, + 33.687034 + ], + [ + -117.662579, + 33.68698 + ], + [ + -117.662949, + 33.68677 + ], + [ + -117.663318, + 33.686492 + ], + [ + -117.663901, + 33.685967 + ] + ] + ] + }, + "properties": { + "name": "Alton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975885, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.798486, + 33.687309 + ], + [ + -117.798452, + 33.687003 + ], + [ + -117.79846, + 33.686951 + ], + [ + -117.798467, + 33.686922 + ], + [ + -117.79847, + 33.686895 + ], + [ + -117.798471, + 33.686865 + ], + [ + -117.798469, + 33.686831 + ], + [ + -117.798445, + 33.686631 + ], + [ + -117.798427, + 33.686462 + ], + [ + -117.798418, + 33.686419 + ], + [ + -117.79841, + 33.686397 + ], + [ + -117.798401, + 33.686376 + ], + [ + -117.798382, + 33.686343 + ], + [ + -117.798366, + 33.686307 + ], + [ + -117.79836, + 33.686269 + ], + [ + -117.798748, + 33.686247 + ], + [ + -117.798737, + 33.685959 + ], + [ + -117.798783, + 33.685958 + ], + [ + -117.798828, + 33.685961 + ], + [ + -117.798885, + 33.685972 + ], + [ + -117.798947, + 33.685991 + ], + [ + -117.798833, + 33.686246 + ], + [ + -117.799875, + 33.686972 + ], + [ + -117.799768, + 33.687032 + ], + [ + -117.799579, + 33.687114 + ], + [ + -117.799304, + 33.68719 + ], + [ + -117.799062, + 33.687238 + ], + [ + -117.79881, + 33.687283 + ], + [ + -117.798486, + 33.687309 + ] + ] + ] + }, + "properties": { + "name": "Arrowhead Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975886, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.787256, + 33.679401 + ], + [ + -117.787822, + 33.679772 + ], + [ + -117.786962, + 33.68068 + ], + [ + -117.786396, + 33.68031 + ], + [ + -117.787256, + 33.679401 + ] + ] + ] + }, + "properties": { + "name": "Ashwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975888, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.658434, + 33.632241 + ], + [ + -117.658074, + 33.632334 + ], + [ + -117.657931, + 33.632386 + ], + [ + -117.657851, + 33.632429 + ], + [ + -117.657262, + 33.632239 + ], + [ + -117.657439, + 33.631462 + ], + [ + -117.657182, + 33.630851 + ], + [ + -117.658301, + 33.630921 + ], + [ + -117.658281, + 33.631612 + ], + [ + -117.658327, + 33.63198 + ], + [ + -117.658434, + 33.632241 + ] + ] + ] + }, + "properties": { + "name": "Barcelona Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975889, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.679304, + 33.608551 + ], + [ + -117.679072, + 33.608168 + ], + [ + -117.67931, + 33.608045 + ], + [ + -117.679507, + 33.608078 + ], + [ + -117.679557, + 33.607956 + ], + [ + -117.679567, + 33.607889 + ], + [ + -117.679527, + 33.607828 + ], + [ + -117.679423, + 33.607371 + ], + [ + -117.6796, + 33.607347 + ], + [ + -117.680787, + 33.608753 + ], + [ + -117.68064, + 33.608863 + ], + [ + -117.68053, + 33.60891 + ], + [ + -117.680456, + 33.608903 + ], + [ + -117.68039, + 33.608843 + ], + [ + -117.68032, + 33.60879 + ], + [ + -117.68024, + 33.608763 + ], + [ + -117.680162, + 33.608757 + ], + [ + -117.680042, + 33.608783 + ], + [ + -117.679987, + 33.608871 + ], + [ + -117.679963, + 33.608998 + ], + [ + -117.679943, + 33.609115 + ], + [ + -117.680061, + 33.609406 + ], + [ + -117.681057, + 33.610634 + ], + [ + -117.680943, + 33.611128 + ], + [ + -117.680815, + 33.611201 + ], + [ + -117.680811, + 33.611328 + ], + [ + -117.680612, + 33.611437 + ], + [ + -117.680387, + 33.610881 + ], + [ + -117.680067, + 33.610288 + ], + [ + -117.679899, + 33.609721 + ], + [ + -117.679582, + 33.609164 + ], + [ + -117.679538, + 33.608763 + ], + [ + -117.679304, + 33.608551 + ] + ] + ] + }, + "properties": { + "name": "Bart Spendlove Memorial Pk", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975890, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.803776, + 33.683269 + ], + [ + -117.803121, + 33.683947 + ], + [ + -117.802325, + 33.683425 + ], + [ + -117.802996, + 33.682727 + ], + [ + -117.803776, + 33.683269 + ] + ] + ] + }, + "properties": { + "name": "Birdsong Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975891, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.800845, + 33.689735 + ], + [ + -117.800774, + 33.689114 + ], + [ + -117.800782, + 33.689078 + ], + [ + -117.800801, + 33.689042 + ], + [ + -117.800864, + 33.689013 + ], + [ + -117.801134, + 33.688914 + ], + [ + -117.801603, + 33.689246 + ], + [ + -117.801151, + 33.689698 + ], + [ + -117.800845, + 33.689735 + ] + ] + ] + }, + "properties": { + "name": "Bluejay Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975892, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.795763, + 33.669613 + ], + [ + -117.796643, + 33.669827 + ], + [ + -117.796332, + 33.670715 + ], + [ + -117.795451, + 33.670502 + ], + [ + -117.795763, + 33.669613 + ] + ] + ] + }, + "properties": { + "name": "Briarglen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975893, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.658316, + 33.617624 + ], + [ + -117.657595, + 33.617803 + ], + [ + -117.65733, + 33.616492 + ], + [ + -117.65916, + 33.616208 + ], + [ + -117.659236, + 33.61651 + ], + [ + -117.65926, + 33.616844 + ], + [ + -117.659036, + 33.617672 + ], + [ + -117.658316, + 33.617624 + ] + ] + ] + }, + "properties": { + "name": "Castille Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975894, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.709769, + 33.617219 + ], + [ + -117.709529, + 33.617354 + ], + [ + -117.709459, + 33.617244 + ], + [ + -117.709436, + 33.617209 + ], + [ + -117.709412, + 33.617181 + ], + [ + -117.709395, + 33.617168 + ], + [ + -117.709371, + 33.617157 + ], + [ + -117.70935, + 33.617151 + ], + [ + -117.709329, + 33.617147 + ], + [ + -117.709309, + 33.617143 + ], + [ + -117.709266, + 33.617141 + ], + [ + -117.709182, + 33.617045 + ], + [ + -117.709165, + 33.617025 + ], + [ + -117.70919, + 33.617027 + ], + [ + -117.709218, + 33.617027 + ], + [ + -117.709254, + 33.61702 + ], + [ + -117.709285, + 33.61701 + ], + [ + -117.709317, + 33.61699 + ], + [ + -117.709479, + 33.616882 + ], + [ + -117.709769, + 33.617219 + ] + ] + ] + }, + "properties": { + "name": "Cavanaugh Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975895, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.663142, + 33.616329 + ], + [ + -117.664114, + 33.617164 + ], + [ + -117.664361, + 33.617474 + ], + [ + -117.664266, + 33.617573 + ], + [ + -117.664114, + 33.617353 + ], + [ + -117.663714, + 33.617507 + ], + [ + -117.663866, + 33.617812 + ], + [ + -117.66383, + 33.617923 + ], + [ + -117.663182, + 33.617524 + ], + [ + -117.663233, + 33.617247 + ], + [ + -117.662888, + 33.617197 + ], + [ + -117.662834, + 33.617086 + ], + [ + -117.662876, + 33.616985 + ], + [ + -117.662691, + 33.616433 + ], + [ + -117.663142, + 33.616329 + ] + ] + ] + }, + "properties": { + "name": "Christopher Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975896, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.811494, + 33.667517 + ], + [ + -117.811447, + 33.667466 + ], + [ + -117.811357, + 33.667417 + ], + [ + -117.811008, + 33.667337 + ], + [ + -117.810627, + 33.667269 + ], + [ + -117.810802, + 33.666442 + ], + [ + -117.811896, + 33.666643 + ], + [ + -117.811577, + 33.667447 + ], + [ + -117.811571, + 33.667523 + ], + [ + -117.811494, + 33.667517 + ] + ] + ] + }, + "properties": { + "name": "Clearbrook Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975897, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.661674, + 33.628569 + ], + [ + -117.662138, + 33.627599 + ], + [ + -117.661285, + 33.62647 + ], + [ + -117.660984, + 33.626613 + ], + [ + -117.660727, + 33.626368 + ], + [ + -117.659677, + 33.626847 + ], + [ + -117.659534, + 33.626507 + ], + [ + -117.65964, + 33.62631 + ], + [ + -117.658536, + 33.625244 + ], + [ + -117.658105, + 33.625327 + ], + [ + -117.657973, + 33.625196 + ], + [ + -117.658989, + 33.62439 + ], + [ + -117.658731, + 33.624125 + ], + [ + -117.658894, + 33.624018 + ], + [ + -117.659206, + 33.623793 + ], + [ + -117.65963, + 33.623579 + ], + [ + -117.65977, + 33.623502 + ], + [ + -117.65983, + 33.623502 + ], + [ + -117.65986, + 33.623512 + ], + [ + -117.6599, + 33.623582 + ], + [ + -117.660089, + 33.624023 + ], + [ + -117.660139, + 33.624123 + ], + [ + -117.660199, + 33.624163 + ], + [ + -117.660239, + 33.624173 + ], + [ + -117.660279, + 33.624173 + ], + [ + -117.660774, + 33.624047 + ], + [ + -117.66113, + 33.62509 + ], + [ + -117.66122, + 33.62539 + ], + [ + -117.661344, + 33.62574 + ], + [ + -117.661595, + 33.626193 + ], + [ + -117.661861, + 33.626573 + ], + [ + -117.662178, + 33.626961 + ], + [ + -117.662538, + 33.627306 + ], + [ + -117.662847, + 33.627573 + ], + [ + -117.662559, + 33.627869 + ], + [ + -117.662425, + 33.628023 + ], + [ + -117.662209, + 33.62825 + ], + [ + -117.661891, + 33.628568 + ], + [ + -117.661706, + 33.628692 + ], + [ + -117.661455, + 33.62876 + ], + [ + -117.661335, + 33.628708 + ], + [ + -117.661674, + 33.628569 + ] + ] + ] + }, + "properties": { + "name": "Colinas Park Open Space", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975899, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.786805, + 33.676676 + ], + [ + -117.787094, + 33.67673 + ], + [ + -117.787873, + 33.676634 + ], + [ + -117.788166, + 33.67667 + ], + [ + -117.788325, + 33.676741 + ], + [ + -117.787526, + 33.677514 + ], + [ + -117.786569, + 33.676877 + ], + [ + -117.786805, + 33.676676 + ] + ] + ] + }, + "properties": { + "name": "Crestbrook Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975900, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.674813, + 33.636363 + ], + [ + -117.675063, + 33.636559 + ], + [ + -117.675616, + 33.636121 + ], + [ + -117.675698, + 33.636186 + ], + [ + -117.675708, + 33.636194 + ], + [ + -117.675748, + 33.636229 + ], + [ + -117.675219, + 33.636654 + ], + [ + -117.675181, + 33.636685 + ], + [ + -117.676592, + 33.637978 + ], + [ + -117.676678, + 33.638035 + ], + [ + -117.676776, + 33.638082 + ], + [ + -117.676857, + 33.638114 + ], + [ + -117.676944, + 33.638137 + ], + [ + -117.676988, + 33.638347 + ], + [ + -117.676639, + 33.6384 + ], + [ + -117.67612, + 33.63844 + ], + [ + -117.675486, + 33.638432 + ], + [ + -117.67547, + 33.637825 + ], + [ + -117.675059, + 33.63703 + ], + [ + -117.674641, + 33.637141 + ], + [ + -117.674344, + 33.636877 + ], + [ + -117.674258, + 33.636802 + ], + [ + -117.674813, + 33.636363 + ] + ] + ] + }, + "properties": { + "name": "Darrin Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975901, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.682744, + 33.603935 + ], + [ + -117.681734, + 33.603716 + ], + [ + -117.681523, + 33.602856 + ], + [ + -117.682926, + 33.603341 + ], + [ + -117.682744, + 33.603935 + ] + ] + ] + }, + "properties": { + "name": "Doria Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975902, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.81501, + 33.669214 + ], + [ + -117.814293, + 33.66979 + ], + [ + -117.8141, + 33.669589 + ], + [ + -117.814031, + 33.669474 + ], + [ + -117.813727, + 33.669185 + ], + [ + -117.813714, + 33.669127 + ], + [ + -117.814338, + 33.66864 + ], + [ + -117.81501, + 33.669214 + ] + ] + ] + }, + "properties": { + "name": "Echo Run Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975903, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.811629, + 33.759908 + ], + [ + -117.811685, + 33.759918 + ], + [ + -117.811775, + 33.759995 + ], + [ + -117.811758, + 33.760241 + ], + [ + -117.810834, + 33.773378 + ], + [ + -117.810797, + 33.773402 + ], + [ + -117.810706, + 33.773401 + ], + [ + -117.811629, + 33.759908 + ] + ] + ] + }, + "properties": { + "name": "Esplanade Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975904, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.782804, + 33.680106 + ], + [ + -117.782087, + 33.679626 + ], + [ + -117.782734, + 33.678973 + ], + [ + -117.782867, + 33.679068 + ], + [ + -117.782958, + 33.67916 + ], + [ + -117.782987, + 33.679184 + ], + [ + -117.783006, + 33.679196 + ], + [ + -117.783024, + 33.679206 + ], + [ + -117.783047, + 33.679215 + ], + [ + -117.783068, + 33.679221 + ], + [ + -117.783091, + 33.679225 + ], + [ + -117.783439, + 33.679466 + ], + [ + -117.782804, + 33.680106 + ] + ] + ] + }, + "properties": { + "name": "Fallbrook Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975905, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.79089, + 33.678516 + ], + [ + -117.790817, + 33.678378 + ], + [ + -117.790757, + 33.678298 + ], + [ + -117.79084, + 33.678218 + ], + [ + -117.790892, + 33.678278 + ], + [ + -117.790961, + 33.678295 + ], + [ + -117.791002, + 33.678296 + ], + [ + -117.791079, + 33.678249 + ], + [ + -117.791148, + 33.678115 + ], + [ + -117.791366, + 33.677879 + ], + [ + -117.792223, + 33.678349 + ], + [ + -117.79155, + 33.67904 + ], + [ + -117.791067, + 33.678692 + ], + [ + -117.790982, + 33.678621 + ], + [ + -117.79089, + 33.678516 + ] + ] + ] + }, + "properties": { + "name": "Firwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975906, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.635582, + 33.641839 + ], + [ + -117.63574, + 33.64176 + ], + [ + -117.63603, + 33.6416 + ], + [ + -117.63636, + 33.64138 + ], + [ + -117.637315, + 33.640556 + ], + [ + -117.637304, + 33.641299 + ], + [ + -117.63721, + 33.642123 + ], + [ + -117.637344, + 33.642449 + ], + [ + -117.637219, + 33.642823 + ], + [ + -117.637183, + 33.642832 + ], + [ + -117.637158, + 33.642848 + ], + [ + -117.637138, + 33.642868 + ], + [ + -117.637123, + 33.642891 + ], + [ + -117.637116, + 33.642907 + ], + [ + -117.63711, + 33.64293 + ], + [ + -117.637111, + 33.642954 + ], + [ + -117.637114, + 33.642974 + ], + [ + -117.637121, + 33.642994 + ], + [ + -117.637134, + 33.643013 + ], + [ + -117.637147, + 33.643027 + ], + [ + -117.637047, + 33.643118 + ], + [ + -117.637001, + 33.64323 + ], + [ + -117.636978, + 33.643305 + ], + [ + -117.636882, + 33.644205 + ], + [ + -117.636865, + 33.644782 + ], + [ + -117.636957, + 33.644878 + ], + [ + -117.636941, + 33.644906 + ], + [ + -117.636933, + 33.64495 + ], + [ + -117.636938, + 33.644984 + ], + [ + -117.636946, + 33.64503 + ], + [ + -117.636964, + 33.645097 + ], + [ + -117.637088, + 33.645333 + ], + [ + -117.637175, + 33.645561 + ], + [ + -117.63718, + 33.645679 + ], + [ + -117.637157, + 33.645817 + ], + [ + -117.637026, + 33.646118 + ], + [ + -117.636996, + 33.646287 + ], + [ + -117.636988, + 33.646431 + ], + [ + -117.636992, + 33.646692 + ], + [ + -117.636498, + 33.646821 + ], + [ + -117.636473, + 33.647164 + ], + [ + -117.636381, + 33.648043 + ], + [ + -117.63611, + 33.650005 + ], + [ + -117.637131, + 33.650333 + ], + [ + -117.638155, + 33.650598 + ], + [ + -117.637987, + 33.650711 + ], + [ + -117.63475, + 33.650017 + ], + [ + -117.634868, + 33.649689 + ], + [ + -117.634852, + 33.649225 + ], + [ + -117.635003, + 33.648666 + ], + [ + -117.635067, + 33.648417 + ], + [ + -117.635335, + 33.64815 + ], + [ + -117.635601, + 33.64793 + ], + [ + -117.635763, + 33.64768 + ], + [ + -117.635812, + 33.647362 + ], + [ + -117.635554, + 33.646824 + ], + [ + -117.635949, + 33.646628 + ], + [ + -117.635922, + 33.646363 + ], + [ + -117.635847, + 33.645995 + ], + [ + -117.635875, + 33.645622 + ], + [ + -117.636112, + 33.645185 + ], + [ + -117.636186, + 33.644805 + ], + [ + -117.635906, + 33.64401 + ], + [ + -117.636055, + 33.643656 + ], + [ + -117.636537, + 33.642367 + ], + [ + -117.636432, + 33.642123 + ], + [ + -117.636214, + 33.641973 + ], + [ + -117.635582, + 33.641839 + ] + ] + ] + }, + "properties": { + "name": "Flamenco Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975907, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.648901, + 33.678344 + ], + [ + -117.648911, + 33.678307 + ], + [ + -117.649029, + 33.678235 + ], + [ + -117.649107, + 33.677853 + ], + [ + -117.649108, + 33.677792 + ], + [ + -117.64901, + 33.677715 + ], + [ + -117.648972, + 33.677654 + ], + [ + -117.649023, + 33.677483 + ], + [ + -117.649045, + 33.677219 + ], + [ + -117.64914, + 33.677202 + ], + [ + -117.64999, + 33.677211 + ], + [ + -117.650065, + 33.67748 + ], + [ + -117.650201, + 33.677765 + ], + [ + -117.650451, + 33.678114 + ], + [ + -117.650655, + 33.678303 + ], + [ + -117.650923, + 33.678459 + ], + [ + -117.651225, + 33.678616 + ], + [ + -117.6516, + 33.678751 + ], + [ + -117.65179, + 33.67879 + ], + [ + -117.651997, + 33.678818 + ], + [ + -117.652348, + 33.678839 + ], + [ + -117.652401, + 33.678843 + ], + [ + -117.652449, + 33.678854 + ], + [ + -117.652456, + 33.679435 + ], + [ + -117.652378, + 33.679491 + ], + [ + -117.652366, + 33.679523 + ], + [ + -117.652394, + 33.679543 + ], + [ + -117.652411, + 33.679556 + ], + [ + -117.65244, + 33.679578 + ], + [ + -117.652518, + 33.679677 + ], + [ + -117.652636, + 33.679859 + ], + [ + -117.65211, + 33.680008 + ], + [ + -117.652036, + 33.679928 + ], + [ + -117.651955, + 33.679839 + ], + [ + -117.64989, + 33.679489 + ], + [ + -117.649299, + 33.679404 + ], + [ + -117.649097, + 33.679392 + ], + [ + -117.649062, + 33.679088 + ], + [ + -117.649196, + 33.679046 + ], + [ + -117.649244, + 33.678765 + ], + [ + -117.649231, + 33.678701 + ], + [ + -117.649089, + 33.678599 + ], + [ + -117.648968, + 33.678494 + ], + [ + -117.648901, + 33.678344 + ] + ] + ] + }, + "properties": { + "name": "Foothill Ranch Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975908, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.813665, + 33.759795 + ], + [ + -117.813652, + 33.759105 + ], + [ + -117.814181, + 33.759834 + ], + [ + -117.813665, + 33.759795 + ] + ] + ] + }, + "properties": { + "name": "Holderman Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975910, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.679501, + 33.592201 + ], + [ + -117.680093, + 33.593027 + ], + [ + -117.678934, + 33.593583 + ], + [ + -117.678615, + 33.593013 + ], + [ + -117.678382, + 33.592088 + ], + [ + -117.678671, + 33.592102 + ], + [ + -117.679081, + 33.59232 + ], + [ + -117.679501, + 33.592201 + ] + ] + ] + }, + "properties": { + "name": "Knotty Pine Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975911, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.7948, + 33.686034 + ], + [ + -117.794226, + 33.685638 + ], + [ + -117.794737, + 33.685127 + ], + [ + -117.795311, + 33.685524 + ], + [ + -117.7948, + 33.686034 + ] + ] + ] + }, + "properties": { + "name": "Lemongrass Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975912, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.681249, + 33.596131 + ], + [ + -117.682135, + 33.59572 + ], + [ + -117.682405, + 33.59605 + ], + [ + -117.682689, + 33.596541 + ], + [ + -117.681459, + 33.59702 + ], + [ + -117.681214, + 33.596563 + ], + [ + -117.681415, + 33.596492 + ], + [ + -117.681249, + 33.596131 + ] + ] + ] + }, + "properties": { + "name": "Mackenzie Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975913, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.698509, + 33.581815 + ], + [ + -117.69869, + 33.582027 + ], + [ + -117.698976, + 33.582165 + ], + [ + -117.698943, + 33.582445 + ], + [ + -117.698895, + 33.582606 + ], + [ + -117.698339, + 33.583225 + ], + [ + -117.698171, + 33.583042 + ], + [ + -117.698093, + 33.58292 + ], + [ + -117.698043, + 33.58287 + ], + [ + -117.697978, + 33.582833 + ], + [ + -117.697875, + 33.582825 + ], + [ + -117.697683, + 33.582516 + ], + [ + -117.697845, + 33.581764 + ], + [ + -117.698187, + 33.581831 + ], + [ + -117.698364, + 33.581748 + ], + [ + -117.698439, + 33.581792 + ], + [ + -117.698509, + 33.581815 + ] + ] + ] + }, + "properties": { + "name": "Mandeville Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975914, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.625325, + 33.645465 + ], + [ + -117.625838, + 33.64535 + ], + [ + -117.626469, + 33.645212 + ], + [ + -117.627141, + 33.645072 + ], + [ + -117.627396, + 33.645002 + ], + [ + -117.627501, + 33.645038 + ], + [ + -117.6277, + 33.645671 + ], + [ + -117.627371, + 33.645788 + ], + [ + -117.6275, + 33.646056 + ], + [ + -117.627789, + 33.646383 + ], + [ + -117.627963, + 33.646579 + ], + [ + -117.628056, + 33.646816 + ], + [ + -117.627979, + 33.647092 + ], + [ + -117.627821, + 33.647303 + ], + [ + -117.627649, + 33.647446 + ], + [ + -117.627413, + 33.647312 + ], + [ + -117.626985, + 33.647072 + ], + [ + -117.626495, + 33.646722 + ], + [ + -117.626122, + 33.646408 + ], + [ + -117.625862, + 33.646152 + ], + [ + -117.625643, + 33.645927 + ], + [ + -117.625325, + 33.645465 + ] + ] + ] + }, + "properties": { + "name": "Melinda Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975915, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.640928, + 33.642063 + ], + [ + -117.640058, + 33.641615 + ], + [ + -117.639878, + 33.641714 + ], + [ + -117.639738, + 33.641966 + ], + [ + -117.639906, + 33.642734 + ], + [ + -117.639913, + 33.643608 + ], + [ + -117.639669, + 33.644602 + ], + [ + -117.639715, + 33.6454 + ], + [ + -117.640005, + 33.645712 + ], + [ + -117.639834, + 33.645884 + ], + [ + -117.639711, + 33.645997 + ], + [ + -117.639558, + 33.646095 + ], + [ + -117.639382, + 33.646195 + ], + [ + -117.639179, + 33.646273 + ], + [ + -117.638876, + 33.646363 + ], + [ + -117.638841, + 33.645524 + ], + [ + -117.638749, + 33.644591 + ], + [ + -117.638771, + 33.644187 + ], + [ + -117.63882, + 33.643968 + ], + [ + -117.638862, + 33.643839 + ], + [ + -117.638923, + 33.643638 + ], + [ + -117.638943, + 33.643512 + ], + [ + -117.638951, + 33.64327 + ], + [ + -117.63893, + 33.643135 + ], + [ + -117.638867, + 33.642882 + ], + [ + -117.638834, + 33.642766 + ], + [ + -117.638775, + 33.642625 + ], + [ + -117.638752, + 33.642489 + ], + [ + -117.638744, + 33.642356 + ], + [ + -117.63875, + 33.642255 + ], + [ + -117.638777, + 33.642152 + ], + [ + -117.638812, + 33.642059 + ], + [ + -117.638895, + 33.641911 + ], + [ + -117.638972, + 33.641717 + ], + [ + -117.638913, + 33.641533 + ], + [ + -117.638784, + 33.641325 + ], + [ + -117.638781, + 33.641181 + ], + [ + -117.638781, + 33.64117 + ], + [ + -117.638771, + 33.641071 + ], + [ + -117.638737, + 33.640947 + ], + [ + -117.638705, + 33.640815 + ], + [ + -117.638639, + 33.640687 + ], + [ + -117.638524, + 33.640547 + ], + [ + -117.638401, + 33.640425 + ], + [ + -117.638285, + 33.640315 + ], + [ + -117.638158, + 33.64022 + ], + [ + -117.637985, + 33.640124 + ], + [ + -117.637728, + 33.640015 + ], + [ + -117.637704, + 33.639948 + ], + [ + -117.638085, + 33.639213 + ], + [ + -117.638379, + 33.638666 + ], + [ + -117.638643, + 33.638253 + ], + [ + -117.638821, + 33.63794 + ], + [ + -117.638958, + 33.637916 + ], + [ + -117.639129, + 33.638019 + ], + [ + -117.639224, + 33.638076 + ], + [ + -117.639492, + 33.638217 + ], + [ + -117.639722, + 33.638326 + ], + [ + -117.640128, + 33.638495 + ], + [ + -117.640501, + 33.63863 + ], + [ + -117.640909, + 33.638766 + ], + [ + -117.641104, + 33.638834 + ], + [ + -117.64129, + 33.638913 + ], + [ + -117.641487, + 33.639011 + ], + [ + -117.641654, + 33.639115 + ], + [ + -117.641815, + 33.639225 + ], + [ + -117.641959, + 33.63934 + ], + [ + -117.642148, + 33.639513 + ], + [ + -117.64229, + 33.639676 + ], + [ + -117.642555, + 33.639976 + ], + [ + -117.642944, + 33.640391 + ], + [ + -117.643032, + 33.640465 + ], + [ + -117.643135, + 33.64055 + ], + [ + -117.642529, + 33.64112 + ], + [ + -117.642017, + 33.642018 + ], + [ + -117.641681, + 33.642187 + ], + [ + -117.640928, + 33.642063 + ] + ] + ] + }, + "properties": { + "name": "Marty Russo Youth Athletic Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975916, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.668195, + 33.645028 + ], + [ + -117.668003, + 33.645026 + ], + [ + -117.667775, + 33.645068 + ], + [ + -117.667405, + 33.644364 + ], + [ + -117.667164, + 33.644206 + ], + [ + -117.666839, + 33.644246 + ], + [ + -117.666751, + 33.644045 + ], + [ + -117.66686, + 33.644003 + ], + [ + -117.667522, + 33.643733 + ], + [ + -117.667714, + 33.643661 + ], + [ + -117.667957, + 33.643595 + ], + [ + -117.668194, + 33.643584 + ], + [ + -117.668274, + 33.643292 + ], + [ + -117.668286, + 33.643253 + ], + [ + -117.668625, + 33.643616 + ], + [ + -117.668798, + 33.643756 + ], + [ + -117.669, + 33.64388 + ], + [ + -117.669018, + 33.643902 + ], + [ + -117.668941, + 33.644163 + ], + [ + -117.668531, + 33.644078 + ], + [ + -117.668195, + 33.645028 + ] + ] + ] + }, + "properties": { + "name": "Montbury Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975917, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.795865, + 33.679707 + ], + [ + -117.795566, + 33.679523 + ], + [ + -117.795526, + 33.679356 + ], + [ + -117.795552, + 33.67933 + ], + [ + -117.795863, + 33.679556 + ], + [ + -117.79631, + 33.679561 + ], + [ + -117.796253, + 33.679704 + ], + [ + -117.796135, + 33.679867 + ], + [ + -117.795946, + 33.680033 + ], + [ + -117.795796, + 33.680097 + ], + [ + -117.795592, + 33.680173 + ], + [ + -117.795492, + 33.680315 + ], + [ + -117.795436, + 33.680522 + ], + [ + -117.795415, + 33.68063 + ], + [ + -117.795384, + 33.680743 + ], + [ + -117.795279, + 33.680907 + ], + [ + -117.795165, + 33.681001 + ], + [ + -117.795058, + 33.681057 + ], + [ + -117.794949, + 33.681125 + ], + [ + -117.794803, + 33.681187 + ], + [ + -117.794574, + 33.681411 + ], + [ + -117.794518, + 33.681388 + ], + [ + -117.794475, + 33.681445 + ], + [ + -117.794263, + 33.681309 + ], + [ + -117.794323, + 33.681207 + ], + [ + -117.793994, + 33.680916 + ], + [ + -117.793822, + 33.680947 + ], + [ + -117.793759, + 33.680928 + ], + [ + -117.793716, + 33.68079 + ], + [ + -117.793388, + 33.680553 + ], + [ + -117.793417, + 33.68052 + ], + [ + -117.793298, + 33.680446 + ], + [ + -117.793373, + 33.680456 + ], + [ + -117.793444, + 33.68045 + ], + [ + -117.793524, + 33.68042 + ], + [ + -117.793787, + 33.680158 + ], + [ + -117.794046, + 33.680317 + ], + [ + -117.794438, + 33.679933 + ], + [ + -117.795002, + 33.680298 + ], + [ + -117.795322, + 33.680256 + ], + [ + -117.795865, + 33.679707 + ] + ] + ] + }, + "properties": { + "name": "North Lake Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975918, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.668311, + 33.638243 + ], + [ + -117.668096, + 33.638059 + ], + [ + -117.668805, + 33.637437 + ], + [ + -117.66912, + 33.637658 + ], + [ + -117.669083, + 33.637701 + ], + [ + -117.669071, + 33.63775 + ], + [ + -117.669074, + 33.637803 + ], + [ + -117.669098, + 33.637853 + ], + [ + -117.668869, + 33.63803 + ], + [ + -117.669842, + 33.638857 + ], + [ + -117.669674, + 33.638997 + ], + [ + -117.668669, + 33.63818 + ], + [ + -117.668446, + 33.638348 + ], + [ + -117.668414, + 33.638321 + ], + [ + -117.668396, + 33.63831 + ], + [ + -117.668376, + 33.638303 + ], + [ + -117.668306, + 33.638292 + ], + [ + -117.668311, + 33.638243 + ] + ] + ] + }, + "properties": { + "name": "Pebble Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975919, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.783058, + 33.676661 + ], + [ + -117.78371, + 33.675964 + ], + [ + -117.784452, + 33.676499 + ], + [ + -117.783791, + 33.677131 + ], + [ + -117.783058, + 33.676661 + ] + ] + ] + }, + "properties": { + "name": "Peppergrass Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975921, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.638998, + 33.651632 + ], + [ + -117.638909, + 33.651832 + ], + [ + -117.638744, + 33.652095 + ], + [ + -117.638459, + 33.652409 + ], + [ + -117.638302, + 33.652671 + ], + [ + -117.638189, + 33.653049 + ], + [ + -117.637946, + 33.653108 + ], + [ + -117.63769, + 33.653222 + ], + [ + -117.637406, + 33.653492 + ], + [ + -117.637146, + 33.653763 + ], + [ + -117.636612, + 33.655015 + ], + [ + -117.636583, + 33.655475 + ], + [ + -117.636665, + 33.655949 + ], + [ + -117.63683, + 33.656768 + ], + [ + -117.637023, + 33.65682 + ], + [ + -117.637007, + 33.657562 + ], + [ + -117.637004, + 33.657619 + ], + [ + -117.636774, + 33.65764 + ], + [ + -117.636509, + 33.657624 + ], + [ + -117.635874, + 33.657566 + ], + [ + -117.635182, + 33.657409 + ], + [ + -117.634123, + 33.656965 + ], + [ + -117.634, + 33.656876 + ], + [ + -117.633451, + 33.656483 + ], + [ + -117.633837, + 33.656198 + ], + [ + -117.634927, + 33.655457 + ], + [ + -117.635131, + 33.655271 + ], + [ + -117.635287, + 33.655051 + ], + [ + -117.635406, + 33.654744 + ], + [ + -117.635467, + 33.654411 + ], + [ + -117.635439, + 33.654023 + ], + [ + -117.635246, + 33.653685 + ], + [ + -117.635335, + 33.653252 + ], + [ + -117.63508, + 33.652062 + ], + [ + -117.635152, + 33.652018 + ], + [ + -117.63518, + 33.651964 + ], + [ + -117.635198, + 33.651822 + ], + [ + -117.635204, + 33.651707 + ], + [ + -117.635115, + 33.65161 + ], + [ + -117.633708, + 33.65155 + ], + [ + -117.63392, + 33.651376 + ], + [ + -117.634183, + 33.651049 + ], + [ + -117.634313, + 33.650747 + ], + [ + -117.63442, + 33.650405 + ], + [ + -117.63451, + 33.650369 + ], + [ + -117.63704, + 33.6509 + ], + [ + -117.63763, + 33.651035 + ], + [ + -117.6383, + 33.651139 + ], + [ + -117.638943, + 33.651178 + ], + [ + -117.639009, + 33.651217 + ], + [ + -117.638999, + 33.651569 + ], + [ + -117.638998, + 33.651632 + ] + ] + ] + }, + "properties": { + "name": "Pinecrest Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975923, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.670187, + 33.6492 + ], + [ + -117.670373, + 33.648877 + ], + [ + -117.670858, + 33.648033 + ], + [ + -117.670998, + 33.647523 + ], + [ + -117.671087, + 33.646524 + ], + [ + -117.672051, + 33.646315 + ], + [ + -117.672348, + 33.646726 + ], + [ + -117.672403, + 33.646847 + ], + [ + -117.672333, + 33.647114 + ], + [ + -117.67224, + 33.647305 + ], + [ + -117.67224, + 33.647596 + ], + [ + -117.672414, + 33.64847 + ], + [ + -117.672403, + 33.648689 + ], + [ + -117.672244, + 33.648915 + ], + [ + -117.671945, + 33.649262 + ], + [ + -117.671801, + 33.649543 + ], + [ + -117.671748, + 33.649893 + ], + [ + -117.671738, + 33.65012 + ], + [ + -117.671403, + 33.650511 + ], + [ + -117.671236, + 33.650853 + ], + [ + -117.671187, + 33.651181 + ], + [ + -117.671088, + 33.651636 + ], + [ + -117.671189, + 33.652138 + ], + [ + -117.671149, + 33.652514 + ], + [ + -117.671051, + 33.652517 + ], + [ + -117.670562, + 33.652355 + ], + [ + -117.670852, + 33.651876 + ], + [ + -117.670773, + 33.651619 + ], + [ + -117.670585, + 33.651531 + ], + [ + -117.670447, + 33.651367 + ], + [ + -117.670382, + 33.651224 + ], + [ + -117.670342, + 33.651085 + ], + [ + -117.670357, + 33.650984 + ], + [ + -117.670509, + 33.650673 + ], + [ + -117.670708, + 33.650323 + ], + [ + -117.671098, + 33.650261 + ], + [ + -117.671288, + 33.650059 + ], + [ + -117.671318, + 33.649784 + ], + [ + -117.67117, + 33.649656 + ], + [ + -117.670697, + 33.649416 + ], + [ + -117.670187, + 33.6492 + ] + ] + ] + }, + "properties": { + "name": "Pittsford Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975924, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.958829, + 33.716319 + ], + [ + -117.959263, + 33.716313 + ], + [ + -117.959369, + 33.716624 + ], + [ + -117.959377, + 33.717858 + ], + [ + -117.958855, + 33.717857 + ], + [ + -117.958829, + 33.716319 + ] + ] + ] + }, + "properties": { + "name": "Plavan Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975925, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.807446, + 33.690432 + ], + [ + -117.8072, + 33.690258 + ], + [ + -117.807018, + 33.690132 + ], + [ + -117.806979, + 33.690121 + ], + [ + -117.806933, + 33.690121 + ], + [ + -117.806123, + 33.68961 + ], + [ + -117.806257, + 33.689469 + ], + [ + -117.806664, + 33.689516 + ], + [ + -117.807284, + 33.689541 + ], + [ + -117.80818, + 33.689572 + ], + [ + -117.808489, + 33.689586 + ], + [ + -117.808699, + 33.689611 + ], + [ + -117.80901, + 33.689653 + ], + [ + -117.809252, + 33.689704 + ], + [ + -117.809475, + 33.689759 + ], + [ + -117.809779, + 33.689853 + ], + [ + -117.81, + 33.689925 + ], + [ + -117.810219, + 33.690021 + ], + [ + -117.810291, + 33.690059 + ], + [ + -117.810317, + 33.690102 + ], + [ + -117.810317, + 33.690148 + ], + [ + -117.810281, + 33.690198 + ], + [ + -117.81013, + 33.690393 + ], + [ + -117.809985, + 33.690552 + ], + [ + -117.809793, + 33.690725 + ], + [ + -117.809488, + 33.690938 + ], + [ + -117.808714, + 33.690393 + ], + [ + -117.808176, + 33.690937 + ], + [ + -117.807446, + 33.690432 + ] + ] + ] + }, + "properties": { + "name": "Plaza Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975926, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.680433, + 33.632458 + ], + [ + -117.680553, + 33.632358 + ], + [ + -117.680643, + 33.632247 + ], + [ + -117.680718, + 33.632122 + ], + [ + -117.680761, + 33.631999 + ], + [ + -117.680791, + 33.631828 + ], + [ + -117.680792, + 33.631753 + ], + [ + -117.680782, + 33.631678 + ], + [ + -117.680739, + 33.631504 + ], + [ + -117.680684, + 33.631394 + ], + [ + -117.680599, + 33.631272 + ], + [ + -117.680533, + 33.631202 + ], + [ + -117.680458, + 33.631133 + ], + [ + -117.680237, + 33.630947 + ], + [ + -117.680183, + 33.63089 + ], + [ + -117.68014, + 33.630832 + ], + [ + -117.680113, + 33.630788 + ], + [ + -117.680094, + 33.630743 + ], + [ + -117.680073, + 33.630696 + ], + [ + -117.680058, + 33.630642 + ], + [ + -117.68005, + 33.630529 + ], + [ + -117.680058, + 33.630422 + ], + [ + -117.680845, + 33.631114 + ], + [ + -117.681172, + 33.631409 + ], + [ + -117.681318, + 33.631495 + ], + [ + -117.681347, + 33.631493 + ], + [ + -117.681346, + 33.63152 + ], + [ + -117.681349, + 33.631545 + ], + [ + -117.681358, + 33.631568 + ], + [ + -117.681372, + 33.63159 + ], + [ + -117.681394, + 33.631609 + ], + [ + -117.681417, + 33.631619 + ], + [ + -117.681444, + 33.631626 + ], + [ + -117.681434, + 33.631701 + ], + [ + -117.681764, + 33.631976 + ], + [ + -117.681938, + 33.632001 + ], + [ + -117.681953, + 33.632036 + ], + [ + -117.68197, + 33.632058 + ], + [ + -117.681987, + 33.632078 + ], + [ + -117.68202, + 33.632093 + ], + [ + -117.681987, + 33.63217 + ], + [ + -117.682219, + 33.632355 + ], + [ + -117.681783, + 33.632691 + ], + [ + -117.681375, + 33.632833 + ], + [ + -117.681175, + 33.633032 + ], + [ + -117.68115, + 33.633309 + ], + [ + -117.681189, + 33.633354 + ], + [ + -117.681199, + 33.633426 + ], + [ + -117.681044, + 33.63344 + ], + [ + -117.68104, + 33.633418 + ], + [ + -117.681031, + 33.633397 + ], + [ + -117.681018, + 33.633377 + ], + [ + -117.680887, + 33.633233 + ], + [ + -117.680604, + 33.632745 + ], + [ + -117.680532, + 33.632634 + ], + [ + -117.680427, + 33.632516 + ], + [ + -117.680433, + 33.632458 + ] + ] + ] + }, + "properties": { + "name": "Cherry Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975927, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.685511, + 33.635399 + ], + [ + -117.685273, + 33.635089 + ], + [ + -117.685044, + 33.634904 + ], + [ + -117.684799, + 33.635026 + ], + [ + -117.684743, + 33.634988 + ], + [ + -117.684837, + 33.634889 + ], + [ + -117.68492, + 33.634803 + ], + [ + -117.684464, + 33.634417 + ], + [ + -117.684465, + 33.63438 + ], + [ + -117.684453, + 33.634344 + ], + [ + -117.684428, + 33.634309 + ], + [ + -117.684395, + 33.634277 + ], + [ + -117.684497, + 33.634144 + ], + [ + -117.684654, + 33.634075 + ], + [ + -117.684678, + 33.634108 + ], + [ + -117.68472, + 33.634135 + ], + [ + -117.68476, + 33.63415 + ], + [ + -117.684808, + 33.634158 + ], + [ + -117.685225, + 33.634521 + ], + [ + -117.685469, + 33.634394 + ], + [ + -117.685509, + 33.634434 + ], + [ + -117.685343, + 33.634605 + ], + [ + -117.685596, + 33.634845 + ], + [ + -117.685948, + 33.635045 + ], + [ + -117.685511, + 33.635399 + ] + ] + ] + }, + "properties": { + "name": "Ranchwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975929, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.677899, + 33.644565 + ], + [ + -117.679189, + 33.643903 + ], + [ + -117.679417, + 33.643785 + ], + [ + -117.680431, + 33.644533 + ], + [ + -117.68006, + 33.645907 + ], + [ + -117.679897, + 33.645866 + ], + [ + -117.679733, + 33.645811 + ], + [ + -117.679677, + 33.645782 + ], + [ + -117.679559, + 33.645719 + ], + [ + -117.679342, + 33.645581 + ], + [ + -117.678727, + 33.645236 + ], + [ + -117.678564, + 33.645169 + ], + [ + -117.678419, + 33.645124 + ], + [ + -117.67828, + 33.645106 + ], + [ + -117.678173, + 33.645102 + ], + [ + -117.678079, + 33.645097 + ], + [ + -117.678032, + 33.645074 + ], + [ + -117.678002, + 33.645018 + ], + [ + -117.677899, + 33.644565 + ] + ] + ] + }, + "properties": { + "name": "Rimgate Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975930, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.82224, + 33.676738 + ], + [ + -117.821586, + 33.677208 + ], + [ + -117.821256, + 33.676865 + ], + [ + -117.821, + 33.676698 + ], + [ + -117.819852, + 33.676293 + ], + [ + -117.820327, + 33.675452 + ], + [ + -117.82224, + 33.676738 + ] + ] + ] + }, + "properties": { + "name": "San Leandro", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975931, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.703145, + 33.649246 + ], + [ + -117.703502, + 33.649458 + ], + [ + -117.704052, + 33.649041 + ], + [ + -117.704487, + 33.649709 + ], + [ + -117.704874, + 33.649828 + ], + [ + -117.705153, + 33.649758 + ], + [ + -117.705331, + 33.649651 + ], + [ + -117.705424, + 33.649529 + ], + [ + -117.705487, + 33.649414 + ], + [ + -117.705533, + 33.649284 + ], + [ + -117.705737, + 33.649369 + ], + [ + -117.706193, + 33.649559 + ], + [ + -117.706919, + 33.649989 + ], + [ + -117.706949, + 33.650086 + ], + [ + -117.70621, + 33.650976 + ], + [ + -117.706061, + 33.651139 + ], + [ + -117.705117, + 33.65067 + ], + [ + -117.705004, + 33.650639 + ], + [ + -117.704844, + 33.650627 + ], + [ + -117.704684, + 33.650644 + ], + [ + -117.704605, + 33.650385 + ], + [ + -117.704153, + 33.650498 + ], + [ + -117.703883, + 33.650595 + ], + [ + -117.703451, + 33.650423 + ], + [ + -117.702864, + 33.650022 + ], + [ + -117.702057, + 33.649295 + ], + [ + -117.701645, + 33.649145 + ], + [ + -117.700756, + 33.648956 + ], + [ + -117.699806, + 33.64879 + ], + [ + -117.699483, + 33.648807 + ], + [ + -117.699187, + 33.648807 + ], + [ + -117.698888, + 33.64888 + ], + [ + -117.698536, + 33.649116 + ], + [ + -117.698268, + 33.649232 + ], + [ + -117.697991, + 33.64927 + ], + [ + -117.69758, + 33.649342 + ], + [ + -117.697138, + 33.649403 + ], + [ + -117.696858, + 33.649433 + ], + [ + -117.696562, + 33.649294 + ], + [ + -117.696025, + 33.649056 + ], + [ + -117.695427, + 33.648983 + ], + [ + -117.69425, + 33.648908 + ], + [ + -117.693928, + 33.64893 + ], + [ + -117.693606, + 33.648998 + ], + [ + -117.693388, + 33.64901 + ], + [ + -117.693288, + 33.649 + ], + [ + -117.692753, + 33.648877 + ], + [ + -117.692319, + 33.648706 + ], + [ + -117.691887, + 33.648535 + ], + [ + -117.691365, + 33.648314 + ], + [ + -117.691088, + 33.648245 + ], + [ + -117.690831, + 33.648312 + ], + [ + -117.690326, + 33.648683 + ], + [ + -117.689703, + 33.649423 + ], + [ + -117.689522, + 33.649696 + ], + [ + -117.688929, + 33.649411 + ], + [ + -117.689406, + 33.649022 + ], + [ + -117.689727, + 33.648546 + ], + [ + -117.690583, + 33.648088 + ], + [ + -117.690974, + 33.647927 + ], + [ + -117.691497, + 33.647835 + ], + [ + -117.691852, + 33.647602 + ], + [ + -117.692018, + 33.647527 + ], + [ + -117.691789, + 33.64746 + ], + [ + -117.691775, + 33.647364 + ], + [ + -117.692577, + 33.647458 + ], + [ + -117.692902, + 33.647497 + ], + [ + -117.693259, + 33.647551 + ], + [ + -117.693747, + 33.647668 + ], + [ + -117.694265, + 33.647828 + ], + [ + -117.69475, + 33.647977 + ], + [ + -117.695233, + 33.648103 + ], + [ + -117.695502, + 33.648148 + ], + [ + -117.69572, + 33.648165 + ], + [ + -117.695935, + 33.648164 + ], + [ + -117.696162, + 33.648153 + ], + [ + -117.696235, + 33.648145 + ], + [ + -117.696384, + 33.648128 + ], + [ + -117.696426, + 33.648118 + ], + [ + -117.696616, + 33.648076 + ], + [ + -117.696823, + 33.648022 + ], + [ + -117.69724, + 33.647898 + ], + [ + -117.697642, + 33.647765 + ], + [ + -117.697797, + 33.647718 + ], + [ + -117.697889, + 33.647689 + ], + [ + -117.697989, + 33.647664 + ], + [ + -117.69821, + 33.64762 + ], + [ + -117.698411, + 33.647592 + ], + [ + -117.698538, + 33.647582 + ], + [ + -117.698658, + 33.647576 + ], + [ + -117.698769, + 33.647569 + ], + [ + -117.698918, + 33.647578 + ], + [ + -117.699074, + 33.647593 + ], + [ + -117.699158, + 33.647605 + ], + [ + -117.699231, + 33.647617 + ], + [ + -117.699337, + 33.647638 + ], + [ + -117.699378, + 33.647645 + ], + [ + -117.699445, + 33.647662 + ], + [ + -117.6995, + 33.647678 + ], + [ + -117.699623, + 33.647717 + ], + [ + -117.699867, + 33.647788 + ], + [ + -117.700089, + 33.647851 + ], + [ + -117.700295, + 33.647898 + ], + [ + -117.70044, + 33.647921 + ], + [ + -117.70059, + 33.64794 + ], + [ + -117.700689, + 33.647939 + ], + [ + -117.700753, + 33.647938 + ], + [ + -117.700915, + 33.647933 + ], + [ + -117.701006, + 33.648118 + ], + [ + -117.701147, + 33.648173 + ], + [ + -117.701969, + 33.648402 + ], + [ + -117.702593, + 33.648726 + ], + [ + -117.703145, + 33.649246 + ] + ] + ] + }, + "properties": { + "name": "Serrano Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975932, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.66522, + 33.630872 + ], + [ + -117.665667, + 33.63022 + ], + [ + -117.665744, + 33.630351 + ], + [ + -117.665957, + 33.630497 + ], + [ + -117.665873, + 33.630863 + ], + [ + -117.665818, + 33.630878 + ], + [ + -117.665768, + 33.630908 + ], + [ + -117.665712, + 33.63101 + ], + [ + -117.66522, + 33.630872 + ] + ] + ] + }, + "properties": { + "name": "Seville Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975933, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.791056, + 33.685505 + ], + [ + -117.791091, + 33.685501 + ], + [ + -117.791352, + 33.685673 + ], + [ + -117.79158, + 33.685823 + ], + [ + -117.791348, + 33.686068 + ], + [ + -117.791548, + 33.686251 + ], + [ + -117.791458, + 33.686593 + ], + [ + -117.791229, + 33.686565 + ], + [ + -117.791053, + 33.68665 + ], + [ + -117.791046, + 33.686614 + ], + [ + -117.791034, + 33.686587 + ], + [ + -117.791023, + 33.686558 + ], + [ + -117.791006, + 33.686531 + ], + [ + -117.790966, + 33.686481 + ], + [ + -117.79094, + 33.686457 + ], + [ + -117.790911, + 33.686435 + ], + [ + -117.790849, + 33.686393 + ], + [ + -117.790829, + 33.686379 + ], + [ + -117.790548, + 33.686181 + ], + [ + -117.790517, + 33.686157 + ], + [ + -117.790505, + 33.686136 + ], + [ + -117.790498, + 33.68612 + ], + [ + -117.790494, + 33.686101 + ], + [ + -117.790495, + 33.68608 + ], + [ + -117.790501, + 33.686053 + ], + [ + -117.790528, + 33.686016 + ], + [ + -117.790555, + 33.685987 + ], + [ + -117.791056, + 33.685505 + ] + ] + ] + }, + "properties": { + "name": "Shorebird Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975934, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.806136, + 33.674822 + ], + [ + -117.806973, + 33.673994 + ], + [ + -117.807113, + 33.674149 + ], + [ + -117.807266, + 33.67442 + ], + [ + -117.807428, + 33.674588 + ], + [ + -117.807426, + 33.674665 + ], + [ + -117.806772, + 33.675294 + ], + [ + -117.806136, + 33.674822 + ] + ] + ] + }, + "properties": { + "name": "Smokestone Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975935, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.620961, + 33.647322 + ], + [ + -117.620887, + 33.648277 + ], + [ + -117.620692, + 33.64902 + ], + [ + -117.620094, + 33.649025 + ], + [ + -117.619865, + 33.649246 + ], + [ + -117.619886, + 33.649754 + ], + [ + -117.618531, + 33.650163 + ], + [ + -117.618548, + 33.649395 + ], + [ + -117.618508, + 33.648957 + ], + [ + -117.618434, + 33.648694 + ], + [ + -117.618394, + 33.648493 + ], + [ + -117.618358, + 33.647838 + ], + [ + -117.618731, + 33.647839 + ], + [ + -117.619091, + 33.647818 + ], + [ + -117.619372, + 33.647788 + ], + [ + -117.619666, + 33.647741 + ], + [ + -117.619981, + 33.647675 + ], + [ + -117.620219, + 33.647609 + ], + [ + -117.620441, + 33.647534 + ], + [ + -117.620755, + 33.647413 + ], + [ + -117.620961, + 33.647322 + ] + ] + ] + }, + "properties": { + "name": "Solano Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975936, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.804445, + 33.667975 + ], + [ + -117.804657, + 33.667728 + ], + [ + -117.806226, + 33.667899 + ], + [ + -117.806153, + 33.668369 + ], + [ + -117.806292, + 33.668397 + ], + [ + -117.80614, + 33.669478 + ], + [ + -117.805565, + 33.669412 + ], + [ + -117.805865, + 33.669193 + ], + [ + -117.805959, + 33.669076 + ], + [ + -117.806017, + 33.669006 + ], + [ + -117.80609, + 33.668831 + ], + [ + -117.806101, + 33.668685 + ], + [ + -117.806078, + 33.668621 + ], + [ + -117.805858, + 33.668159 + ], + [ + -117.805807, + 33.668097 + ], + [ + -117.805731, + 33.668059 + ], + [ + -117.805651, + 33.66804 + ], + [ + -117.80546, + 33.668024 + ], + [ + -117.805364, + 33.667999 + ], + [ + -117.805256, + 33.66799 + ], + [ + -117.805005, + 33.667986 + ], + [ + -117.804822, + 33.668011 + ], + [ + -117.804717, + 33.668079 + ], + [ + -117.804649, + 33.668214 + ], + [ + -117.804631, + 33.66827 + ], + [ + -117.804586, + 33.668306 + ], + [ + -117.804459, + 33.668358 + ], + [ + -117.804433, + 33.668405 + ], + [ + -117.804434, + 33.668436 + ], + [ + -117.804435, + 33.668466 + ], + [ + -117.804422, + 33.66853 + ], + [ + -117.804324, + 33.668651 + ], + [ + -117.804068, + 33.668797 + ], + [ + -117.803979, + 33.668886 + ], + [ + -117.803906, + 33.669066 + ], + [ + -117.8039, + 33.669418 + ], + [ + -117.804024, + 33.669785 + ], + [ + -117.804116, + 33.669991 + ], + [ + -117.804182, + 33.6701 + ], + [ + -117.804178, + 33.67031 + ], + [ + -117.804144, + 33.670428 + ], + [ + -117.804111, + 33.670474 + ], + [ + -117.804054, + 33.670523 + ], + [ + -117.803974, + 33.670572 + ], + [ + -117.803821, + 33.670627 + ], + [ + -117.803589, + 33.670689 + ], + [ + -117.803498, + 33.670765 + ], + [ + -117.803441, + 33.670869 + ], + [ + -117.803443, + 33.670937 + ], + [ + -117.803457, + 33.670994 + ], + [ + -117.803605, + 33.671188 + ], + [ + -117.803641, + 33.671241 + ], + [ + -117.803658, + 33.671304 + ], + [ + -117.803651, + 33.671452 + ], + [ + -117.803626, + 33.671532 + ], + [ + -117.803565, + 33.671631 + ], + [ + -117.803458, + 33.67157 + ], + [ + -117.803571, + 33.671465 + ], + [ + -117.803464, + 33.671221 + ], + [ + -117.803431, + 33.671229 + ], + [ + -117.803195, + 33.670866 + ], + [ + -117.802827, + 33.670595 + ], + [ + -117.802523, + 33.670474 + ], + [ + -117.802345, + 33.670394 + ], + [ + -117.802178, + 33.670303 + ], + [ + -117.80258, + 33.669893 + ], + [ + -117.802704, + 33.669732 + ], + [ + -117.802777, + 33.669578 + ], + [ + -117.802797, + 33.669489 + ], + [ + -117.802797, + 33.669383 + ], + [ + -117.802814, + 33.669302 + ], + [ + -117.80307, + 33.669326 + ], + [ + -117.804445, + 33.667975 + ] + ] + ] + }, + "properties": { + "name": "South Lake Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975937, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.792029, + 33.667689 + ], + [ + -117.791388, + 33.667165 + ], + [ + -117.791766, + 33.666801 + ], + [ + -117.792003, + 33.666998 + ], + [ + -117.792159, + 33.667018 + ], + [ + -117.792425, + 33.667274 + ], + [ + -117.792029, + 33.667689 + ] + ] + ] + }, + "properties": { + "name": "Springbrook Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975939, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.799144, + 33.690173 + ], + [ + -117.799213, + 33.690956 + ], + [ + -117.798151, + 33.691043 + ], + [ + -117.798022, + 33.690137 + ], + [ + -117.798579, + 33.690091 + ], + [ + -117.798694, + 33.690083 + ], + [ + -117.798749, + 33.690085 + ], + [ + -117.7988, + 33.690093 + ], + [ + -117.798867, + 33.690109 + ], + [ + -117.798927, + 33.69013 + ], + [ + -117.798994, + 33.69015 + ], + [ + -117.799038, + 33.69016 + ], + [ + -117.799088, + 33.690168 + ], + [ + -117.799144, + 33.690173 + ] + ] + ] + }, + "properties": { + "name": "Stone Creek Swim Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975940, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.666788, + 33.642702 + ], + [ + -117.666784, + 33.642773 + ], + [ + -117.666579, + 33.642779 + ], + [ + -117.666392, + 33.642815 + ], + [ + -117.666098, + 33.64306 + ], + [ + -117.665856, + 33.642848 + ], + [ + -117.66594, + 33.642792 + ], + [ + -117.666014, + 33.642725 + ], + [ + -117.666087, + 33.64264 + ], + [ + -117.666136, + 33.64257 + ], + [ + -117.666175, + 33.642491 + ], + [ + -117.666238, + 33.642323 + ], + [ + -117.666837, + 33.64248 + ], + [ + -117.666795, + 33.642502 + ], + [ + -117.666744, + 33.642643 + ], + [ + -117.666751, + 33.642678 + ], + [ + -117.666788, + 33.642702 + ] + ] + ] + }, + "properties": { + "name": "Sundowners Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975941, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.815688, + 33.672899 + ], + [ + -117.815683, + 33.672783 + ], + [ + -117.816477, + 33.672739 + ], + [ + -117.817466, + 33.673398 + ], + [ + -117.817061, + 33.673813 + ], + [ + -117.815688, + 33.672899 + ] + ] + ] + }, + "properties": { + "name": "Timber Run Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975942, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.656677, + 33.653776 + ], + [ + -117.656777, + 33.653587 + ], + [ + -117.657099, + 33.653329 + ], + [ + -117.657326, + 33.652978 + ], + [ + -117.656761, + 33.6528 + ], + [ + -117.656512, + 33.652638 + ], + [ + -117.65677, + 33.652136 + ], + [ + -117.657207, + 33.652012 + ], + [ + -117.658241, + 33.652293 + ], + [ + -117.657936, + 33.65321 + ], + [ + -117.657537, + 33.654097 + ], + [ + -117.656677, + 33.653776 + ] + ] + ] + }, + "properties": { + "name": "Vintage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975943, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.623306, + 33.679269 + ], + [ + -117.622792, + 33.679598 + ], + [ + -117.622634, + 33.679679 + ], + [ + -117.62203, + 33.67947 + ], + [ + -117.62224, + 33.67899 + ], + [ + -117.62242, + 33.67861 + ], + [ + -117.622559, + 33.678169 + ], + [ + -117.622681, + 33.677769 + ], + [ + -117.622749, + 33.677299 + ], + [ + -117.622849, + 33.67635 + ], + [ + -117.622932, + 33.675701 + ], + [ + -117.623032, + 33.67524 + ], + [ + -117.623199, + 33.674801 + ], + [ + -117.623444, + 33.674255 + ], + [ + -117.623878, + 33.673382 + ], + [ + -117.623947, + 33.67326 + ], + [ + -117.624046, + 33.67305 + ], + [ + -117.624242, + 33.672657 + ], + [ + -117.625631, + 33.673808 + ], + [ + -117.625054, + 33.675654 + ], + [ + -117.624278, + 33.677794 + ], + [ + -117.624269, + 33.677884 + ], + [ + -117.623915, + 33.678616 + ], + [ + -117.623306, + 33.679269 + ] + ] + ] + }, + "properties": { + "name": "Whiting Ranch Wilderenss Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975944, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.787587, + 33.683523 + ], + [ + -117.787056, + 33.684033 + ], + [ + -117.786254, + 33.683464 + ], + [ + -117.786739, + 33.682968 + ], + [ + -117.786859, + 33.682994 + ], + [ + -117.786935, + 33.683019 + ], + [ + -117.787002, + 33.683042 + ], + [ + -117.787064, + 33.68307 + ], + [ + -117.787127, + 33.683102 + ], + [ + -117.787212, + 33.683165 + ], + [ + -117.787578, + 33.683416 + ], + [ + -117.787606, + 33.683438 + ], + [ + -117.787616, + 33.683462 + ], + [ + -117.787617, + 33.683479 + ], + [ + -117.787612, + 33.683495 + ], + [ + -117.7876, + 33.683508 + ], + [ + -117.787587, + 33.683523 + ] + ] + ] + }, + "properties": { + "name": "Wildwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975945, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.802603, + 33.666407 + ], + [ + -117.802458, + 33.666488 + ], + [ + -117.8023, + 33.666587 + ], + [ + -117.802078, + 33.66677 + ], + [ + -117.802146, + 33.666553 + ], + [ + -117.802381, + 33.665456 + ], + [ + -117.80301, + 33.665552 + ], + [ + -117.802929, + 33.666017 + ], + [ + -117.80286, + 33.666213 + ], + [ + -117.80283, + 33.666259 + ], + [ + -117.802789, + 33.666294 + ], + [ + -117.802603, + 33.666407 + ] + ] + ] + }, + "properties": { + "name": "Wintermist", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 164975946, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.803853, + 33.686619 + ], + [ + -117.803829, + 33.686585 + ], + [ + -117.803827, + 33.686558 + ], + [ + -117.803839, + 33.686532 + ], + [ + -117.80386, + 33.686496 + ], + [ + -117.803889, + 33.686451 + ], + [ + -117.803929, + 33.686398 + ], + [ + -117.804021, + 33.686302 + ], + [ + -117.804329, + 33.686096 + ], + [ + -117.804339, + 33.686092 + ], + [ + -117.804347, + 33.686091 + ], + [ + -117.804356, + 33.686092 + ], + [ + -117.804365, + 33.686094 + ], + [ + -117.804374, + 33.6861 + ], + [ + -117.804383, + 33.686113 + ], + [ + -117.804418, + 33.686152 + ], + [ + -117.805299, + 33.68676 + ], + [ + -117.804767, + 33.687254 + ], + [ + -117.804685, + 33.687203 + ], + [ + -117.804692, + 33.687193 + ], + [ + -117.804698, + 33.687181 + ], + [ + -117.804702, + 33.68717 + ], + [ + -117.804705, + 33.687159 + ], + [ + -117.804706, + 33.687147 + ], + [ + -117.804705, + 33.687135 + ], + [ + -117.8047, + 33.687113 + ], + [ + -117.804692, + 33.687099 + ], + [ + -117.804679, + 33.687085 + ], + [ + -117.804667, + 33.687074 + ], + [ + -117.804653, + 33.687064 + ], + [ + -117.804635, + 33.687056 + ], + [ + -117.804613, + 33.68705 + ], + [ + -117.804586, + 33.687048 + ], + [ + -117.80456, + 33.687047 + ], + [ + -117.804543, + 33.687046 + ], + [ + -117.804524, + 33.687044 + ], + [ + -117.804505, + 33.687039 + ], + [ + -117.804466, + 33.687027 + ], + [ + -117.80443, + 33.68701 + ], + [ + -117.804393, + 33.686988 + ], + [ + -117.803853, + 33.686619 + ] + ] + ] + }, + "properties": { + "name": "Woodpine Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 165339508, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.940544, + 33.725765 + ], + [ + -117.942245, + 33.726321 + ], + [ + -117.94261, + 33.726206 + ], + [ + -117.942765, + 33.726212 + ], + [ + -117.943046, + 33.726296 + ], + [ + -117.943184, + 33.726395 + ], + [ + -117.94333, + 33.726548 + ], + [ + -117.943399, + 33.726692 + ], + [ + -117.943406, + 33.726751 + ], + [ + -117.943189, + 33.727284 + ], + [ + -117.943083, + 33.727632 + ], + [ + -117.943081, + 33.727911 + ], + [ + -117.943081, + 33.727985 + ], + [ + -117.942891, + 33.728172 + ], + [ + -117.942639, + 33.728155 + ], + [ + -117.942373, + 33.728022 + ], + [ + -117.942139, + 33.727993 + ], + [ + -117.94194, + 33.727932 + ], + [ + -117.94179, + 33.727859 + ], + [ + -117.941462, + 33.727914 + ], + [ + -117.940711, + 33.727599 + ], + [ + -117.940347, + 33.727293 + ], + [ + -117.939981, + 33.727155 + ], + [ + -117.939546, + 33.727055 + ], + [ + -117.939598, + 33.726881 + ], + [ + -117.939538, + 33.726863 + ], + [ + -117.939583, + 33.726693 + ], + [ + -117.939815, + 33.72641 + ], + [ + -117.939677, + 33.72631 + ], + [ + -117.940278, + 33.725756 + ], + [ + -117.940544, + 33.725765 + ] + ] + ] + }, + "properties": { + "name": "Nature Area", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 165773298, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.882147, + 33.59588 + ], + [ + -117.882144, + 33.595869 + ], + [ + -117.882047, + 33.59547 + ], + [ + -117.882149, + 33.595452 + ], + [ + -117.882077, + 33.595256 + ], + [ + -117.881913, + 33.595272 + ], + [ + -117.8819, + 33.595223 + ], + [ + -117.881864, + 33.595084 + ], + [ + -117.881765, + 33.595083 + ], + [ + -117.88194, + 33.595723 + ], + [ + -117.881922, + 33.595786 + ], + [ + -117.881889, + 33.595816 + ], + [ + -117.881805, + 33.595849 + ], + [ + -117.881801, + 33.595888 + ], + [ + -117.8818, + 33.59595 + ], + [ + -117.882119, + 33.595886 + ], + [ + -117.882147, + 33.59588 + ] + ] + ] + }, + "properties": { + "name": "Jetty View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166296047, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921177, + 33.639892 + ], + [ + -117.92321, + 33.639884 + ], + [ + -117.923246, + 33.642453 + ], + [ + -117.921176, + 33.642485 + ], + [ + -117.921186, + 33.640775 + ], + [ + -117.921177, + 33.639892 + ] + ] + ] + }, + "properties": { + "name": "Lions Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166298976, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.942851, + 33.650529 + ], + [ + -117.942938, + 33.650092 + ], + [ + -117.942965, + 33.649639 + ], + [ + -117.942738, + 33.649343 + ], + [ + -117.942201, + 33.64908 + ], + [ + -117.942461, + 33.648796 + ], + [ + -117.942459, + 33.648562 + ], + [ + -117.942381, + 33.648319 + ], + [ + -117.942238, + 33.648132 + ], + [ + -117.941983, + 33.648055 + ], + [ + -117.941209, + 33.648268 + ], + [ + -117.939186, + 33.648269 + ], + [ + -117.939327, + 33.64783 + ], + [ + -117.939975, + 33.647201 + ], + [ + -117.939782, + 33.646879 + ], + [ + -117.939605, + 33.646758 + ], + [ + -117.939285, + 33.646783 + ], + [ + -117.939054, + 33.646824 + ], + [ + -117.938826, + 33.646898 + ], + [ + -117.938601, + 33.647084 + ], + [ + -117.938374, + 33.647348 + ], + [ + -117.938272, + 33.647316 + ], + [ + -117.938107, + 33.64799 + ], + [ + -117.936439, + 33.647771 + ], + [ + -117.936444, + 33.64734 + ], + [ + -117.937376, + 33.647328 + ], + [ + -117.937446, + 33.646632 + ], + [ + -117.938178, + 33.646638 + ], + [ + -117.938202, + 33.645872 + ], + [ + -117.939373, + 33.645873 + ], + [ + -117.939364, + 33.645316 + ], + [ + -117.938848, + 33.644087 + ], + [ + -117.939765, + 33.64409 + ], + [ + -117.93983, + 33.644942 + ], + [ + -117.940055, + 33.645529 + ], + [ + -117.940356, + 33.645726 + ], + [ + -117.940985, + 33.645548 + ], + [ + -117.941733, + 33.645571 + ], + [ + -117.941735, + 33.647199 + ], + [ + -117.941752, + 33.647835 + ], + [ + -117.942785, + 33.647838 + ], + [ + -117.943881, + 33.64783 + ], + [ + -117.943928, + 33.650509 + ], + [ + -117.942851, + 33.650529 + ] + ] + ] + }, + "properties": { + "name": "Canyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166299462, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.944722, + 33.677784 + ], + [ + -117.945184, + 33.676151 + ], + [ + -117.945758, + 33.676284 + ], + [ + -117.946341, + 33.676159 + ], + [ + -117.946311, + 33.676615 + ], + [ + -117.946255, + 33.676827 + ], + [ + -117.9463, + 33.678108 + ], + [ + -117.945319, + 33.678116 + ], + [ + -117.945399, + 33.677924 + ], + [ + -117.944722, + 33.677784 + ] + ] + ] + }, + "properties": { + "name": "Arevalos Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166300166, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.9244, + 33.683371 + ], + [ + -117.92438, + 33.68231 + ], + [ + -117.924455, + 33.682303 + ], + [ + -117.924447, + 33.681945 + ], + [ + -117.925365, + 33.681949 + ], + [ + -117.925366, + 33.683443 + ], + [ + -117.925005, + 33.683449 + ], + [ + -117.924909, + 33.683371 + ], + [ + -117.9248, + 33.68336 + ], + [ + -117.9244, + 33.683371 + ] + ] + ] + }, + "properties": { + "name": "Smallwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166300928, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.908042, + 33.68692 + ], + [ + -117.910343, + 33.686916 + ], + [ + -117.910969, + 33.687033 + ], + [ + -117.912344, + 33.687033 + ], + [ + -117.912328, + 33.68753 + ], + [ + -117.911045, + 33.687497 + ], + [ + -117.909435, + 33.687357 + ], + [ + -117.908085, + 33.687247 + ], + [ + -117.908042, + 33.68692 + ] + ] + ] + }, + "properties": { + "name": "Gisler Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166300936, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.898674, + 33.690559 + ], + [ + -117.898793, + 33.690556 + ], + [ + -117.900662, + 33.690566 + ], + [ + -117.90089, + 33.690567 + ], + [ + -117.900898, + 33.691969 + ], + [ + -117.900846, + 33.6924 + ], + [ + -117.898785, + 33.692396 + ], + [ + -117.898787, + 33.6929 + ], + [ + -117.898679, + 33.692898 + ], + [ + -117.898674, + 33.690559 + ] + ] + ] + }, + "properties": { + "name": "Wakeham Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301044, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.905052, + 33.694072 + ], + [ + -117.905105, + 33.694017 + ], + [ + -117.905119, + 33.693962 + ], + [ + -117.905134, + 33.693167 + ], + [ + -117.905165, + 33.692999 + ], + [ + -117.905403, + 33.693042 + ], + [ + -117.906033, + 33.693041 + ], + [ + -117.906077, + 33.693056 + ], + [ + -117.906101, + 33.693082 + ], + [ + -117.9062, + 33.693341 + ], + [ + -117.906294, + 33.693663 + ], + [ + -117.906296, + 33.693679 + ], + [ + -117.906303, + 33.693838 + ], + [ + -117.906294, + 33.694 + ], + [ + -117.906262, + 33.694145 + ], + [ + -117.906184, + 33.694311 + ], + [ + -117.905999, + 33.694506 + ], + [ + -117.905849, + 33.6946 + ], + [ + -117.905538, + 33.694695 + ], + [ + -117.905249, + 33.694699 + ], + [ + -117.905249, + 33.694687 + ], + [ + -117.90524, + 33.694383 + ], + [ + -117.905069, + 33.694401 + ], + [ + -117.905052, + 33.694072 + ] + ] + ] + }, + "properties": { + "name": "Wimbledon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301106, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.901765, + 33.699829 + ], + [ + -117.900095, + 33.699827 + ], + [ + -117.900099, + 33.698301 + ], + [ + -117.901769, + 33.698304 + ], + [ + -117.901765, + 33.699829 + ] + ] + ] + }, + "properties": { + "name": "Griset Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301184, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.780817, + 33.695134 + ], + [ + -117.780518, + 33.695627 + ], + [ + -117.780119, + 33.696103 + ], + [ + -117.779669, + 33.696564 + ], + [ + -117.779075, + 33.696178 + ], + [ + -117.780132, + 33.694921 + ], + [ + -117.780817, + 33.695134 + ] + ] + ] + }, + "properties": { + "name": "Presley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301191, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.785322, + 33.701363 + ], + [ + -117.785697, + 33.700988 + ], + [ + -117.785715, + 33.700907 + ], + [ + -117.78623, + 33.700389 + ], + [ + -117.786255, + 33.700343 + ], + [ + -117.786313, + 33.700293 + ], + [ + -117.786346, + 33.700314 + ], + [ + -117.786551, + 33.700108 + ], + [ + -117.78657, + 33.700122 + ], + [ + -117.786789, + 33.699902 + ], + [ + -117.787089, + 33.700099 + ], + [ + -117.787134, + 33.700112 + ], + [ + -117.787162, + 33.700111 + ], + [ + -117.787186, + 33.700107 + ], + [ + -117.787201, + 33.7001 + ], + [ + -117.787225, + 33.700088 + ], + [ + -117.787721, + 33.69959 + ], + [ + -117.787731, + 33.699571 + ], + [ + -117.787737, + 33.699554 + ], + [ + -117.787739, + 33.699535 + ], + [ + -117.788207, + 33.699045 + ], + [ + -117.7884, + 33.699183 + ], + [ + -117.787306, + 33.700243 + ], + [ + -117.787533, + 33.700417 + ], + [ + -117.787082, + 33.700856 + ], + [ + -117.787056, + 33.700857 + ], + [ + -117.787032, + 33.70086 + ], + [ + -117.787014, + 33.700863 + ], + [ + -117.786997, + 33.700868 + ], + [ + -117.786983, + 33.700874 + ], + [ + -117.786971, + 33.700885 + ], + [ + -117.786476, + 33.701413 + ], + [ + -117.786336, + 33.701458 + ], + [ + -117.785934, + 33.70187 + ], + [ + -117.785918, + 33.701847 + ], + [ + -117.785908, + 33.701826 + ], + [ + -117.785891, + 33.701792 + ], + [ + -117.785874, + 33.701752 + ], + [ + -117.78586, + 33.701727 + ], + [ + -117.785839, + 33.701704 + ], + [ + -117.785807, + 33.701685 + ], + [ + -117.78578, + 33.701675 + ], + [ + -117.785754, + 33.70167 + ], + [ + -117.785726, + 33.701672 + ], + [ + -117.785704, + 33.701675 + ], + [ + -117.785675, + 33.701684 + ], + [ + -117.785651, + 33.701695 + ], + [ + -117.785631, + 33.701714 + ], + [ + -117.785613, + 33.701742 + ], + [ + -117.785605, + 33.701763 + ], + [ + -117.785602, + 33.701783 + ], + [ + -117.785603, + 33.701805 + ], + [ + -117.785608, + 33.701828 + ], + [ + -117.785144, + 33.702297 + ], + [ + -117.784818, + 33.702067 + ], + [ + -117.78528, + 33.701604 + ], + [ + -117.785311, + 33.701605 + ], + [ + -117.785334, + 33.701602 + ], + [ + -117.785357, + 33.701597 + ], + [ + -117.785373, + 33.701589 + ], + [ + -117.785389, + 33.70158 + ], + [ + -117.785404, + 33.701569 + ], + [ + -117.785431, + 33.70154 + ], + [ + -117.785442, + 33.701514 + ], + [ + -117.785445, + 33.701487 + ], + [ + -117.785443, + 33.701457 + ], + [ + -117.785434, + 33.701432 + ], + [ + -117.785416, + 33.701408 + ], + [ + -117.785389, + 33.701386 + ], + [ + -117.785356, + 33.701373 + ], + [ + -117.785322, + 33.701363 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301249, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.772465, + 33.701059 + ], + [ + -117.773401, + 33.70012 + ], + [ + -117.773439, + 33.700102 + ], + [ + -117.773612, + 33.700055 + ], + [ + -117.773701, + 33.700013 + ], + [ + -117.77376, + 33.699961 + ], + [ + -117.773797, + 33.699906 + ], + [ + -117.77382, + 33.69985 + ], + [ + -117.773824, + 33.699785 + ], + [ + -117.773802, + 33.699686 + ], + [ + -117.774144, + 33.699326 + ], + [ + -117.774975, + 33.700598 + ], + [ + -117.773657, + 33.701323 + ], + [ + -117.773369, + 33.701531 + ], + [ + -117.773284, + 33.701607 + ], + [ + -117.773155, + 33.701625 + ], + [ + -117.772475, + 33.701149 + ], + [ + -117.772465, + 33.701059 + ] + ] + ] + }, + "properties": { + "name": "Orchard Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301366, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.766739, + 33.701986 + ], + [ + -117.766981, + 33.702086 + ], + [ + -117.767088, + 33.702119 + ], + [ + -117.767187, + 33.702139 + ], + [ + -117.767308, + 33.702194 + ], + [ + -117.767369, + 33.702224 + ], + [ + -117.767428, + 33.702263 + ], + [ + -117.767498, + 33.702318 + ], + [ + -117.767559, + 33.702377 + ], + [ + -117.767639, + 33.702473 + ], + [ + -117.767698, + 33.702584 + ], + [ + -117.76712, + 33.702916 + ], + [ + -117.766897, + 33.703139 + ], + [ + -117.766838, + 33.703419 + ], + [ + -117.766523, + 33.703519 + ], + [ + -117.76634, + 33.703704 + ], + [ + -117.766328, + 33.703861 + ], + [ + -117.766369, + 33.703992 + ], + [ + -117.766566, + 33.70417 + ], + [ + -117.766665, + 33.704242 + ], + [ + -117.766449, + 33.704195 + ], + [ + -117.766175, + 33.704184 + ], + [ + -117.765915, + 33.704201 + ], + [ + -117.765633, + 33.704253 + ], + [ + -117.76544, + 33.704314 + ], + [ + -117.76525, + 33.704396 + ], + [ + -117.765137, + 33.704464 + ], + [ + -117.76503, + 33.704535 + ], + [ + -117.76501, + 33.704516 + ], + [ + -117.765051, + 33.704482 + ], + [ + -117.76535, + 33.704133 + ], + [ + -117.76589, + 33.703063 + ], + [ + -117.765951, + 33.702442 + ], + [ + -117.766062, + 33.702231 + ], + [ + -117.766224, + 33.702006 + ], + [ + -117.766525, + 33.702202 + ], + [ + -117.766739, + 33.701986 + ] + ] + ] + }, + "properties": { + "name": "Sycamore Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301461, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.770565, + 33.703342 + ], + [ + -117.771522, + 33.703985 + ], + [ + -117.771615, + 33.704068 + ], + [ + -117.771642, + 33.704144 + ], + [ + -117.771654, + 33.7042 + ], + [ + -117.771652, + 33.70426 + ], + [ + -117.771636, + 33.704417 + ], + [ + -117.771546, + 33.70523 + ], + [ + -117.771414, + 33.705663 + ], + [ + -117.771133, + 33.705589 + ], + [ + -117.7708, + 33.705531 + ], + [ + -117.77075, + 33.705473 + ], + [ + -117.770678, + 33.705453 + ], + [ + -117.7706, + 33.705459 + ], + [ + -117.770576, + 33.705478 + ], + [ + -117.770351, + 33.705259 + ], + [ + -117.770741, + 33.704857 + ], + [ + -117.770706, + 33.70464 + ], + [ + -117.769894, + 33.704019 + ], + [ + -117.770565, + 33.703342 + ] + ] + ] + }, + "properties": { + "name": "Coralwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301531, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.761196, + 33.707733 + ], + [ + -117.760759, + 33.708169 + ], + [ + -117.760628, + 33.708254 + ], + [ + -117.760516, + 33.708354 + ], + [ + -117.760263, + 33.708173 + ], + [ + -117.760224, + 33.708207 + ], + [ + -117.760182, + 33.708259 + ], + [ + -117.759494, + 33.707773 + ], + [ + -117.75973, + 33.707544 + ], + [ + -117.759685, + 33.707404 + ], + [ + -117.75976, + 33.707382 + ], + [ + -117.760142, + 33.707004 + ], + [ + -117.761196, + 33.707733 + ] + ] + ] + }, + "properties": { + "name": "Carrotwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301532, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.765387, + 33.706194 + ], + [ + -117.765573, + 33.706018 + ], + [ + -117.765603, + 33.705964 + ], + [ + -117.765613, + 33.705927 + ], + [ + -117.765614, + 33.705894 + ], + [ + -117.765613, + 33.705863 + ], + [ + -117.765598, + 33.705835 + ], + [ + -117.765782, + 33.705644 + ], + [ + -117.765837, + 33.705631 + ], + [ + -117.765892, + 33.705644 + ], + [ + -117.765949, + 33.705678 + ], + [ + -117.76724, + 33.706589 + ], + [ + -117.767052, + 33.706775 + ], + [ + -117.766988, + 33.706746 + ], + [ + -117.766953, + 33.70674 + ], + [ + -117.766916, + 33.706738 + ], + [ + -117.766842, + 33.706745 + ], + [ + -117.766784, + 33.706761 + ], + [ + -117.766737, + 33.706784 + ], + [ + -117.766701, + 33.706815 + ], + [ + -117.76667, + 33.70685 + ], + [ + -117.766638, + 33.706943 + ], + [ + -117.766615, + 33.707037 + ], + [ + -117.766609, + 33.707047 + ], + [ + -117.766596, + 33.707056 + ], + [ + -117.766577, + 33.707062 + ], + [ + -117.766549, + 33.707062 + ], + [ + -117.766519, + 33.70705 + ], + [ + -117.765386, + 33.706266 + ], + [ + -117.765376, + 33.706243 + ], + [ + -117.765375, + 33.706205 + ], + [ + -117.765387, + 33.706194 + ] + ] + ] + }, + "properties": { + "name": "Pepperwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301533, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.755551, + 33.705548 + ], + [ + -117.757088, + 33.703974 + ], + [ + -117.757629, + 33.70437 + ], + [ + -117.757068, + 33.704725 + ], + [ + -117.755771, + 33.705442 + ], + [ + -117.755551, + 33.705548 + ] + ] + ] + }, + "properties": { + "name": "Pinewood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301738, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.768647, + 33.715347 + ], + [ + -117.768713, + 33.715297 + ], + [ + -117.768802, + 33.715206 + ], + [ + -117.769347, + 33.714675 + ], + [ + -117.769415, + 33.714653 + ], + [ + -117.769491, + 33.714651 + ], + [ + -117.770433, + 33.715315 + ], + [ + -117.770543, + 33.71535 + ], + [ + -117.77071, + 33.715311 + ], + [ + -117.770967, + 33.715483 + ], + [ + -117.770231, + 33.716171 + ], + [ + -117.772113, + 33.717467 + ], + [ + -117.772779, + 33.717941 + ], + [ + -117.77261, + 33.718107 + ], + [ + -117.771942, + 33.717638 + ], + [ + -117.769632, + 33.71603 + ], + [ + -117.768647, + 33.715347 + ] + ] + ] + }, + "properties": { + "name": "Silkwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301769, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.779146, + 33.712997 + ], + [ + -117.778449, + 33.713694 + ], + [ + -117.778189, + 33.713514 + ], + [ + -117.778181, + 33.713493 + ], + [ + -117.77817, + 33.713475 + ], + [ + -117.778149, + 33.713452 + ], + [ + -117.778123, + 33.713435 + ], + [ + -117.778101, + 33.713423 + ], + [ + -117.778074, + 33.713416 + ], + [ + -117.778041, + 33.713411 + ], + [ + -117.778016, + 33.71341 + ], + [ + -117.777993, + 33.713409 + ], + [ + -117.777832, + 33.713296 + ], + [ + -117.778824, + 33.712296 + ], + [ + -117.778945, + 33.712385 + ], + [ + -117.778922, + 33.712404 + ], + [ + -117.778905, + 33.712425 + ], + [ + -117.778891, + 33.712458 + ], + [ + -117.778889, + 33.71249 + ], + [ + -117.778898, + 33.712523 + ], + [ + -117.778908, + 33.712544 + ], + [ + -117.778924, + 33.712566 + ], + [ + -117.778943, + 33.712583 + ], + [ + -117.778887, + 33.712817 + ], + [ + -117.779146, + 33.712997 + ] + ] + ] + }, + "properties": { + "name": "Racquet Club Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301835, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.932313, + 33.720051 + ], + [ + -117.933626, + 33.72003 + ], + [ + -117.933625, + 33.720342 + ], + [ + -117.933173, + 33.720518 + ], + [ + -117.932773, + 33.720844 + ], + [ + -117.932288, + 33.72135 + ], + [ + -117.932313, + 33.720051 + ] + ] + ] + }, + "properties": { + "name": "Stonecrest Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301872, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.930728, + 33.727389 + ], + [ + -117.931262, + 33.727404 + ], + [ + -117.931356, + 33.728075 + ], + [ + -117.931356, + 33.729112 + ], + [ + -117.93077, + 33.729119 + ], + [ + -117.930728, + 33.727389 + ] + ] + ] + }, + "properties": { + "name": "Monroe Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166301884, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.941341, + 33.709523 + ], + [ + -117.941345, + 33.70886 + ], + [ + -117.941339, + 33.70861 + ], + [ + -117.941282, + 33.706101 + ], + [ + -117.941255, + 33.704866 + ], + [ + -117.941689, + 33.704855 + ], + [ + -117.941906, + 33.70591 + ], + [ + -117.941753, + 33.705935 + ], + [ + -117.941661, + 33.706296 + ], + [ + -117.941851, + 33.706702 + ], + [ + -117.941906, + 33.707241 + ], + [ + -117.941777, + 33.707297 + ], + [ + -117.941739, + 33.707633 + ], + [ + -117.941747, + 33.707902 + ], + [ + -117.941841, + 33.709001 + ], + [ + -117.942015, + 33.709162 + ], + [ + -117.942286, + 33.709711 + ], + [ + -117.94229, + 33.710085 + ], + [ + -117.942261, + 33.710408 + ], + [ + -117.942739, + 33.7108 + ], + [ + -117.942975, + 33.711512 + ], + [ + -117.942919, + 33.712066 + ], + [ + -117.94321, + 33.712344 + ], + [ + -117.942331, + 33.713071 + ], + [ + -117.941909, + 33.712736 + ], + [ + -117.941628, + 33.712609 + ], + [ + -117.941411, + 33.712823 + ], + [ + -117.940584, + 33.7135 + ], + [ + -117.940231, + 33.713591 + ], + [ + -117.940153, + 33.713842 + ], + [ + -117.940082, + 33.714214 + ], + [ + -117.939685, + 33.714244 + ], + [ + -117.939539, + 33.714782 + ], + [ + -117.939613, + 33.715205 + ], + [ + -117.939081, + 33.715218 + ], + [ + -117.939085, + 33.715005 + ], + [ + -117.938939, + 33.7146 + ], + [ + -117.939489, + 33.71417 + ], + [ + -117.939442, + 33.713949 + ], + [ + -117.940008, + 33.713393 + ], + [ + -117.940252, + 33.713308 + ], + [ + -117.94052, + 33.713198 + ], + [ + -117.940618, + 33.712959 + ], + [ + -117.940815, + 33.71293 + ], + [ + -117.940893, + 33.712691 + ], + [ + -117.941182, + 33.71248 + ], + [ + -117.941608, + 33.711599 + ], + [ + -117.941761, + 33.711595 + ], + [ + -117.941744, + 33.711263 + ], + [ + -117.941673, + 33.710589 + ], + [ + -117.941549, + 33.710487 + ], + [ + -117.941497, + 33.709799 + ], + [ + -117.941341, + 33.709523 + ] + ] + ] + }, + "properties": { + "name": "Green Valley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166972722, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.792168, + 33.703096 + ], + [ + -117.792189, + 33.703111 + ], + [ + -117.792455, + 33.703295 + ], + [ + -117.792499, + 33.703336 + ], + [ + -117.792552, + 33.703391 + ], + [ + -117.79258, + 33.703418 + ], + [ + -117.792594, + 33.703431 + ], + [ + -117.792612, + 33.703443 + ], + [ + -117.792631, + 33.703454 + ], + [ + -117.79265, + 33.703464 + ], + [ + -117.792673, + 33.703474 + ], + [ + -117.792696, + 33.703481 + ], + [ + -117.79272, + 33.703484 + ], + [ + -117.792744, + 33.703486 + ], + [ + -117.79277, + 33.703486 + ], + [ + -117.792794, + 33.703483 + ], + [ + -117.792815, + 33.70348 + ], + [ + -117.792836, + 33.703473 + ], + [ + -117.792856, + 33.703465 + ], + [ + -117.792873, + 33.703456 + ], + [ + -117.792891, + 33.70344 + ], + [ + -117.792915, + 33.703417 + ], + [ + -117.792937, + 33.703386 + ], + [ + -117.793461, + 33.703751 + ], + [ + -117.793506, + 33.703751 + ], + [ + -117.793511, + 33.703768 + ], + [ + -117.793517, + 33.703781 + ], + [ + -117.793521, + 33.703791 + ], + [ + -117.793535, + 33.703813 + ], + [ + -117.79355, + 33.70383 + ], + [ + -117.793587, + 33.703854 + ], + [ + -117.793653, + 33.703889 + ], + [ + -117.793734, + 33.70393 + ], + [ + -117.793788, + 33.703961 + ], + [ + -117.793933, + 33.70406 + ], + [ + -117.794036, + 33.704164 + ], + [ + -117.794056, + 33.704183 + ], + [ + -117.794081, + 33.704204 + ], + [ + -117.79409, + 33.704211 + ], + [ + -117.7941, + 33.704217 + ], + [ + -117.794117, + 33.704225 + ], + [ + -117.794138, + 33.704231 + ], + [ + -117.794159, + 33.704234 + ], + [ + -117.794188, + 33.704237 + ], + [ + -117.794189, + 33.704258 + ], + [ + -117.794737, + 33.70464 + ], + [ + -117.794882, + 33.704614 + ], + [ + -117.794888, + 33.704641 + ], + [ + -117.794893, + 33.704655 + ], + [ + -117.794899, + 33.704667 + ], + [ + -117.794915, + 33.704684 + ], + [ + -117.794942, + 33.704705 + ], + [ + -117.794962, + 33.704717 + ], + [ + -117.794984, + 33.70473 + ], + [ + -117.79511, + 33.704793 + ], + [ + -117.795148, + 33.704815 + ], + [ + -117.796625, + 33.705843 + ], + [ + -117.79665, + 33.705865 + ], + [ + -117.796665, + 33.70589 + ], + [ + -117.79667, + 33.705913 + ], + [ + -117.79667, + 33.705934 + ], + [ + -117.796664, + 33.705956 + ], + [ + -117.796645, + 33.705985 + ], + [ + -117.796612, + 33.706026 + ], + [ + -117.796574, + 33.70607 + ], + [ + -117.796525, + 33.706121 + ], + [ + -117.796441, + 33.706189 + ], + [ + -117.796415, + 33.70621 + ], + [ + -117.796356, + 33.706256 + ], + [ + -117.794666, + 33.705075 + ], + [ + -117.794423, + 33.705314 + ], + [ + -117.794381, + 33.705283 + ], + [ + -117.793088, + 33.704353 + ], + [ + -117.793196, + 33.704245 + ], + [ + -117.79241, + 33.703699 + ], + [ + -117.791868, + 33.703324 + ], + [ + -117.791894, + 33.703298 + ], + [ + -117.792072, + 33.703117 + ], + [ + -117.792089, + 33.703105 + ], + [ + -117.792102, + 33.703097 + ], + [ + -117.79212, + 33.703091 + ], + [ + -117.792146, + 33.703093 + ], + [ + -117.792168, + 33.703096 + ] + ] + ] + }, + "properties": { + "name": "College Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166972754, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.811567, + 33.719189 + ], + [ + -117.812012, + 33.718749 + ], + [ + -117.812545, + 33.719126 + ], + [ + -117.812656, + 33.719119 + ], + [ + -117.812696, + 33.719134 + ], + [ + -117.812726, + 33.719145 + ], + [ + -117.812759, + 33.719148 + ], + [ + -117.812789, + 33.719148 + ], + [ + -117.812829, + 33.719137 + ], + [ + -117.81286, + 33.719121 + ], + [ + -117.813055, + 33.719257 + ], + [ + -117.813183, + 33.719139 + ], + [ + -117.813824, + 33.71959 + ], + [ + -117.813579, + 33.719841 + ], + [ + -117.813836, + 33.720028 + ], + [ + -117.813449, + 33.720437 + ], + [ + -117.813437, + 33.720444 + ], + [ + -117.813426, + 33.720448 + ], + [ + -117.813413, + 33.720451 + ], + [ + -117.813402, + 33.720453 + ], + [ + -117.813385, + 33.720452 + ], + [ + -117.813371, + 33.720448 + ], + [ + -117.813354, + 33.720441 + ], + [ + -117.813336, + 33.720429 + ], + [ + -117.812, + 33.719509 + ], + [ + -117.811768, + 33.719367 + ], + [ + -117.811604, + 33.719296 + ], + [ + -117.811578, + 33.719282 + ], + [ + -117.811561, + 33.71927 + ], + [ + -117.811551, + 33.719254 + ], + [ + -117.811548, + 33.719241 + ], + [ + -117.81155, + 33.719224 + ], + [ + -117.811555, + 33.719209 + ], + [ + -117.81156, + 33.719198 + ], + [ + -117.811567, + 33.719189 + ] + ] + ] + }, + "properties": { + "name": "Magnolia Tree Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166973043, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.817309, + 33.720518 + ], + [ + -117.817559, + 33.720693 + ], + [ + -117.817583, + 33.720817 + ], + [ + -117.818621, + 33.721542 + ], + [ + -117.818955, + 33.721505 + ], + [ + -117.819018, + 33.721436 + ], + [ + -117.819491, + 33.721759 + ], + [ + -117.819813, + 33.721737 + ], + [ + -117.820734, + 33.720811 + ], + [ + -117.820684, + 33.720641 + ], + [ + -117.820907, + 33.720437 + ], + [ + -117.821351, + 33.72075 + ], + [ + -117.821152, + 33.720946 + ], + [ + -117.82091, + 33.720949 + ], + [ + -117.820014, + 33.72189 + ], + [ + -117.82003, + 33.722138 + ], + [ + -117.82051, + 33.722472 + ], + [ + -117.820285, + 33.7227 + ], + [ + -117.820799, + 33.723064 + ], + [ + -117.820844, + 33.723025 + ], + [ + -117.820913, + 33.72302 + ], + [ + -117.821098, + 33.723145 + ], + [ + -117.821105, + 33.723195 + ], + [ + -117.821053, + 33.723246 + ], + [ + -117.821435, + 33.723503 + ], + [ + -117.821706, + 33.723484 + ], + [ + -117.8218, + 33.723387 + ], + [ + -117.822056, + 33.723567 + ], + [ + -117.821931, + 33.723696 + ], + [ + -117.821655, + 33.723983 + ], + [ + -117.821393, + 33.723795 + ], + [ + -117.821399, + 33.723584 + ], + [ + -117.820998, + 33.723304 + ], + [ + -117.82095, + 33.72335 + ], + [ + -117.820882, + 33.723351 + ], + [ + -117.820704, + 33.723227 + ], + [ + -117.8207, + 33.723171 + ], + [ + -117.820742, + 33.723128 + ], + [ + -117.820387, + 33.722889 + ], + [ + -117.820103, + 33.722908 + ], + [ + -117.820086, + 33.722897 + ], + [ + -117.819987, + 33.722993 + ], + [ + -117.819639, + 33.722747 + ], + [ + -117.819502, + 33.722652 + ], + [ + -117.819159, + 33.722697 + ], + [ + -117.818066, + 33.72382 + ], + [ + -117.818088, + 33.723836 + ], + [ + -117.818124, + 33.723975 + ], + [ + -117.817893, + 33.724203 + ], + [ + -117.817452, + 33.723887 + ], + [ + -117.817634, + 33.723703 + ], + [ + -117.817826, + 33.723633 + ], + [ + -117.817881, + 33.723672 + ], + [ + -117.818984, + 33.722564 + ], + [ + -117.818969, + 33.722286 + ], + [ + -117.818494, + 33.721958 + ], + [ + -117.818531, + 33.72192 + ], + [ + -117.818583, + 33.721865 + ], + [ + -117.818565, + 33.721584 + ], + [ + -117.817717, + 33.72102 + ], + [ + -117.817543, + 33.720904 + ], + [ + -117.817519, + 33.720927 + ], + [ + -117.8173, + 33.720946 + ], + [ + -117.817205, + 33.721042 + ], + [ + -117.816955, + 33.720863 + ], + [ + -117.817053, + 33.720767 + ], + [ + -117.817309, + 33.720518 + ] + ] + ] + }, + "properties": { + "name": "Tustin Centennial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166973369, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.793034, + 33.729819 + ], + [ + -117.794547, + 33.730865 + ], + [ + -117.793675, + 33.731243 + ], + [ + -117.793286, + 33.730897 + ], + [ + -117.79262, + 33.730609 + ], + [ + -117.793034, + 33.729819 + ] + ] + ] + }, + "properties": { + "name": "Laurel Glen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166973670, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.783218, + 33.735034 + ], + [ + -117.783061, + 33.734874 + ], + [ + -117.782885, + 33.734629 + ], + [ + -117.782523, + 33.733939 + ], + [ + -117.782648, + 33.733806 + ], + [ + -117.783315, + 33.73356 + ], + [ + -117.783982, + 33.733286 + ], + [ + -117.78433, + 33.733115 + ], + [ + -117.784641, + 33.732947 + ], + [ + -117.784883, + 33.732787 + ], + [ + -117.785198, + 33.732565 + ], + [ + -117.785471, + 33.732352 + ], + [ + -117.78583, + 33.732077 + ], + [ + -117.78586, + 33.732052 + ], + [ + -117.785901, + 33.732044 + ], + [ + -117.78597, + 33.732052 + ], + [ + -117.787116, + 33.732845 + ], + [ + -117.785738, + 33.733906 + ], + [ + -117.786238, + 33.734811 + ], + [ + -117.78632, + 33.734961 + ], + [ + -117.785268, + 33.735369 + ], + [ + -117.785106, + 33.735425 + ], + [ + -117.784934, + 33.735462 + ], + [ + -117.784717, + 33.735486 + ], + [ + -117.784507, + 33.735492 + ], + [ + -117.784305, + 33.735479 + ], + [ + -117.784105, + 33.735453 + ], + [ + -117.783876, + 33.735396 + ], + [ + -117.783659, + 33.735314 + ], + [ + -117.783422, + 33.735183 + ], + [ + -117.783218, + 33.735034 + ] + ] + ] + }, + "properties": { + "name": "Tustin Sports Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166973979, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.794018, + 33.734853 + ], + [ + -117.794927, + 33.733709 + ], + [ + -117.795111, + 33.733858 + ], + [ + -117.79532, + 33.733977 + ], + [ + -117.796024, + 33.734222 + ], + [ + -117.796094, + 33.734337 + ], + [ + -117.795509, + 33.735432 + ], + [ + -117.79539, + 33.735469 + ], + [ + -117.79514, + 33.735369 + ], + [ + -117.794605, + 33.735114 + ], + [ + -117.794563, + 33.735064 + ], + [ + -117.794509, + 33.735008 + ], + [ + -117.794432, + 33.734964 + ], + [ + -117.794353, + 33.734958 + ], + [ + -117.794282, + 33.734977 + ], + [ + -117.794018, + 33.734853 + ] + ] + ] + }, + "properties": { + "name": "Heritage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166974271, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.803138, + 33.730025 + ], + [ + -117.803239, + 33.729989 + ], + [ + -117.803333, + 33.729946 + ], + [ + -117.803468, + 33.729879 + ], + [ + -117.803623, + 33.729795 + ], + [ + -117.804073, + 33.729543 + ], + [ + -117.80416, + 33.729552 + ], + [ + -117.804252, + 33.729678 + ], + [ + -117.80433, + 33.729793 + ], + [ + -117.804391, + 33.729914 + ], + [ + -117.804431, + 33.730015 + ], + [ + -117.804466, + 33.730129 + ], + [ + -117.804489, + 33.730266 + ], + [ + -117.804495, + 33.730371 + ], + [ + -117.804493, + 33.730472 + ], + [ + -117.804488, + 33.730605 + ], + [ + -117.804444, + 33.730781 + ], + [ + -117.804415, + 33.730874 + ], + [ + -117.804372, + 33.73097 + ], + [ + -117.804327, + 33.731047 + ], + [ + -117.804268, + 33.731145 + ], + [ + -117.804193, + 33.731243 + ], + [ + -117.804162, + 33.731276 + ], + [ + -117.804124, + 33.731315 + ], + [ + -117.804033, + 33.731405 + ], + [ + -117.80391, + 33.731503 + ], + [ + -117.803795, + 33.73158 + ], + [ + -117.803658, + 33.731659 + ], + [ + -117.803515, + 33.73172 + ], + [ + -117.803335, + 33.731783 + ], + [ + -117.80326, + 33.731611 + ], + [ + -117.803446, + 33.731554 + ], + [ + -117.803524, + 33.731525 + ], + [ + -117.803597, + 33.731491 + ], + [ + -117.803653, + 33.731461 + ], + [ + -117.803808, + 33.73135 + ], + [ + -117.803138, + 33.730025 + ] + ] + ] + }, + "properties": { + "name": "Camino Real Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166974304, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818444, + 33.733262 + ], + [ + -117.818157, + 33.733065 + ], + [ + -117.817639, + 33.732706 + ], + [ + -117.818966, + 33.731386 + ], + [ + -117.819749, + 33.731934 + ], + [ + -117.819759, + 33.732003 + ], + [ + -117.819137, + 33.732626 + ], + [ + -117.819027, + 33.732703 + ], + [ + -117.818444, + 33.733262 + ] + ] + ] + }, + "properties": { + "name": "Frontier Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166974405, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.812212, + 33.739577 + ], + [ + -117.811562, + 33.740213 + ], + [ + -117.810152, + 33.739216 + ], + [ + -117.810099, + 33.73917 + ], + [ + -117.810066, + 33.739122 + ], + [ + -117.810079, + 33.739066 + ], + [ + -117.810115, + 33.739015 + ], + [ + -117.81065, + 33.738481 + ], + [ + -117.812212, + 33.739577 + ] + ] + ] + }, + "properties": { + "name": "Pine Tree Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166974509, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.824983, + 33.745578 + ], + [ + -117.824981, + 33.74434 + ], + [ + -117.825542, + 33.744344 + ], + [ + -117.826035, + 33.744347 + ], + [ + -117.826054, + 33.745179 + ], + [ + -117.825884, + 33.745585 + ], + [ + -117.824983, + 33.745578 + ] + ] + ] + }, + "properties": { + "name": "Pepper Tree Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166974836, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.775404, + 33.762483 + ], + [ + -117.777811, + 33.764151 + ], + [ + -117.777292, + 33.764775 + ], + [ + -117.776048, + 33.763976 + ], + [ + -117.774391, + 33.763385 + ], + [ + -117.775294, + 33.762481 + ], + [ + -117.775359, + 33.762474 + ], + [ + -117.775404, + 33.762483 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166977647, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.70058, + 33.878172 + ], + [ + -117.701947, + 33.878114 + ], + [ + -117.703006, + 33.877958 + ], + [ + -117.702977, + 33.878108 + ], + [ + -117.702657, + 33.878228 + ], + [ + -117.702367, + 33.878388 + ], + [ + -117.702117, + 33.878578 + ], + [ + -117.701887, + 33.878731 + ], + [ + -117.701377, + 33.878871 + ], + [ + -117.700921, + 33.878878 + ], + [ + -117.700347, + 33.878818 + ], + [ + -117.699988, + 33.878755 + ], + [ + -117.699547, + 33.878578 + ], + [ + -117.699257, + 33.878468 + ], + [ + -117.698859, + 33.878317 + ], + [ + -117.698333, + 33.878231 + ], + [ + -117.698345, + 33.878014 + ], + [ + -117.70058, + 33.878172 + ] + ] + ] + }, + "properties": { + "name": "Brush Canyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166978649, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.749529, + 33.882235 + ], + [ + -117.749152, + 33.885585 + ], + [ + -117.748144, + 33.886653 + ], + [ + -117.747633, + 33.886587 + ], + [ + -117.747123, + 33.886481 + ], + [ + -117.74671, + 33.886339 + ], + [ + -117.746601, + 33.88623 + ], + [ + -117.746347, + 33.886238 + ], + [ + -117.745878, + 33.886223 + ], + [ + -117.74596, + 33.885625 + ], + [ + -117.745962, + 33.885269 + ], + [ + -117.745749, + 33.884687 + ], + [ + -117.745699, + 33.884528 + ], + [ + -117.74572, + 33.884298 + ], + [ + -117.746451, + 33.883521 + ], + [ + -117.747012, + 33.883203 + ], + [ + -117.74715, + 33.882249 + ], + [ + -117.747324, + 33.88214 + ], + [ + -117.747378, + 33.882143 + ], + [ + -117.747385, + 33.882158 + ], + [ + -117.747406, + 33.882175 + ], + [ + -117.747525, + 33.882206 + ], + [ + -117.747541, + 33.882199 + ], + [ + -117.747555, + 33.882191 + ], + [ + -117.747626, + 33.882177 + ], + [ + -117.747753, + 33.882134 + ], + [ + -117.747847, + 33.882093 + ], + [ + -117.749529, + 33.882235 + ] + ] + ] + }, + "properties": { + "name": "East Side Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166978650, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.74785, + 33.88209 + ], + [ + -117.747972, + 33.882015 + ], + [ + -117.748053, + 33.881948 + ], + [ + -117.748115, + 33.881876 + ], + [ + -117.748412, + 33.881356 + ], + [ + -117.748669, + 33.880233 + ], + [ + -117.748972, + 33.880155 + ], + [ + -117.749017, + 33.880322 + ], + [ + -117.749247, + 33.880451 + ], + [ + -117.749488, + 33.880276 + ], + [ + -117.749687, + 33.880053 + ], + [ + -117.749712, + 33.87999 + ], + [ + -117.749894, + 33.879231 + ], + [ + -117.75002, + 33.879248 + ], + [ + -117.750021, + 33.879261 + ], + [ + -117.750025, + 33.879269 + ], + [ + -117.750031, + 33.879277 + ], + [ + -117.750038, + 33.879283 + ], + [ + -117.75005, + 33.879288 + ], + [ + -117.750067, + 33.879294 + ], + [ + -117.750123, + 33.879304 + ], + [ + -117.750134, + 33.879309 + ], + [ + -117.750143, + 33.879314 + ], + [ + -117.75015, + 33.87932 + ], + [ + -117.750157, + 33.879328 + ], + [ + -117.750164, + 33.87934 + ], + [ + -117.75017, + 33.879364 + ], + [ + -117.750055, + 33.879911 + ], + [ + -117.750049, + 33.880018 + ], + [ + -117.750053, + 33.880091 + ], + [ + -117.750073, + 33.880356 + ], + [ + -117.749753, + 33.880362 + ], + [ + -117.749693, + 33.880882 + ], + [ + -117.749703, + 33.881017 + ], + [ + -117.750004, + 33.881876 + ], + [ + -117.750231, + 33.882027 + ], + [ + -117.750085, + 33.882231 + ], + [ + -117.749996, + 33.882391 + ], + [ + -117.749528, + 33.882233 + ], + [ + -117.74785, + 33.88209 + ] + ] + ] + }, + "properties": { + "name": "Jean Woodard Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166978678, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.761922, + 33.879593 + ], + [ + -117.761827, + 33.879439 + ], + [ + -117.761713, + 33.879255 + ], + [ + -117.761749, + 33.878369 + ], + [ + -117.762317, + 33.878426 + ], + [ + -117.762436, + 33.879049 + ], + [ + -117.762669, + 33.879641 + ], + [ + -117.763197, + 33.879784 + ], + [ + -117.7642, + 33.879837 + ], + [ + -117.76463, + 33.879707 + ], + [ + -117.765087, + 33.879432 + ], + [ + -117.765549, + 33.879236 + ], + [ + -117.76559, + 33.88032 + ], + [ + -117.764883, + 33.880183 + ], + [ + -117.763071, + 33.880304 + ], + [ + -117.762855, + 33.88043 + ], + [ + -117.761922, + 33.879593 + ] + ] + ] + }, + "properties": { + "name": "Dominguez Trailside Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166978783, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.760704, + 33.882317 + ], + [ + -117.760994, + 33.882497 + ], + [ + -117.761208, + 33.882594 + ], + [ + -117.761344, + 33.882647 + ], + [ + -117.761314, + 33.882757 + ], + [ + -117.76131, + 33.883029 + ], + [ + -117.761318, + 33.883648 + ], + [ + -117.758303, + 33.883719 + ], + [ + -117.758296, + 33.88293 + ], + [ + -117.758725, + 33.882967 + ], + [ + -117.759099, + 33.882989 + ], + [ + -117.759457, + 33.882925 + ], + [ + -117.759762, + 33.882567 + ], + [ + -117.759533, + 33.882272 + ], + [ + -117.759924, + 33.882137 + ], + [ + -117.760204, + 33.882157 + ], + [ + -117.760464, + 33.882197 + ], + [ + -117.760704, + 33.882317 + ] + ] + ] + }, + "properties": { + "name": "Travis Ranch Youth Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166979216, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.766524, + 33.901915 + ], + [ + -117.766271, + 33.901787 + ], + [ + -117.765944, + 33.901724 + ], + [ + -117.765773, + 33.901744 + ], + [ + -117.765581, + 33.90177 + ], + [ + -117.765358, + 33.901841 + ], + [ + -117.765084, + 33.901884 + ], + [ + -117.764843, + 33.901854 + ], + [ + -117.764623, + 33.901814 + ], + [ + -117.764653, + 33.901654 + ], + [ + -117.764663, + 33.901404 + ], + [ + -117.764623, + 33.901094 + ], + [ + -117.764317, + 33.90028 + ], + [ + -117.764758, + 33.900168 + ], + [ + -117.764948, + 33.900794 + ], + [ + -117.765297, + 33.900866 + ], + [ + -117.765704, + 33.90086 + ], + [ + -117.766617, + 33.901073 + ], + [ + -117.767992, + 33.90158 + ], + [ + -117.767984, + 33.90171 + ], + [ + -117.767501, + 33.901611 + ], + [ + -117.767349, + 33.901729 + ], + [ + -117.766524, + 33.901915 + ] + ] + ] + }, + "properties": { + "name": "San Antonio Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166979545, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.784071, + 33.864517 + ], + [ + -117.784099, + 33.864838 + ], + [ + -117.784235, + 33.865066 + ], + [ + -117.784264, + 33.865814 + ], + [ + -117.784002, + 33.865783 + ], + [ + -117.78304, + 33.865452 + ], + [ + -117.783011, + 33.865137 + ], + [ + -117.783033, + 33.864873 + ], + [ + -117.782871, + 33.864871 + ], + [ + -117.782755, + 33.864407 + ], + [ + -117.783557, + 33.864195 + ], + [ + -117.784061, + 33.864175 + ], + [ + -117.784071, + 33.864517 + ] + ] + ] + }, + "properties": { + "name": "Woodgate Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166979656, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.776776, + 33.878845 + ], + [ + -117.77722, + 33.878907 + ], + [ + -117.778074, + 33.878595 + ], + [ + -117.778826, + 33.878703 + ], + [ + -117.77887, + 33.878836 + ], + [ + -117.778572, + 33.879064 + ], + [ + -117.778697, + 33.879339 + ], + [ + -117.778521, + 33.879531 + ], + [ + -117.778327, + 33.87972 + ], + [ + -117.778306, + 33.879962 + ], + [ + -117.777964, + 33.87985 + ], + [ + -117.777561, + 33.8798 + ], + [ + -117.777068, + 33.87988 + ], + [ + -117.776792, + 33.879532 + ], + [ + -117.776042, + 33.880014 + ], + [ + -117.775752, + 33.879735 + ], + [ + -117.776484, + 33.879214 + ], + [ + -117.776776, + 33.878845 + ] + ] + ] + }, + "properties": { + "name": "Shapell Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166979766, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.773022, + 33.883301 + ], + [ + -117.772962, + 33.881697 + ], + [ + -117.773393, + 33.881695 + ], + [ + -117.773728, + 33.882352 + ], + [ + -117.773867, + 33.882492 + ], + [ + -117.774055, + 33.882644 + ], + [ + -117.77427, + 33.882902 + ], + [ + -117.773022, + 33.883301 + ] + ] + ] + }, + "properties": { + "name": "Las Palomas Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166979924, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.793408, + 33.893022 + ], + [ + -117.79342, + 33.893251 + ], + [ + -117.793001, + 33.893383 + ], + [ + -117.792739, + 33.893436 + ], + [ + -117.792511, + 33.89352 + ], + [ + -117.792041, + 33.893535 + ], + [ + -117.791448, + 33.893679 + ], + [ + -117.790764, + 33.893685 + ], + [ + -117.790978, + 33.893403 + ], + [ + -117.791164, + 33.893044 + ], + [ + -117.793408, + 33.893022 + ] + ] + ] + }, + "properties": { + "name": "Fairmont Knolls Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166980014, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.79834, + 33.890059 + ], + [ + -117.798335, + 33.889923 + ], + [ + -117.798306, + 33.889045 + ], + [ + -117.798298, + 33.888812 + ], + [ + -117.798671, + 33.888803 + ], + [ + -117.799164, + 33.888792 + ], + [ + -117.800375, + 33.888763 + ], + [ + -117.800417, + 33.890011 + ], + [ + -117.79834, + 33.890059 + ] + ] + ] + }, + "properties": { + "name": "Jessamyn West Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166981349, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.806713, + 33.882157 + ], + [ + -117.806932, + 33.881437 + ], + [ + -117.806757, + 33.881073 + ], + [ + -117.806984, + 33.880623 + ], + [ + -117.808634, + 33.880648 + ], + [ + -117.808767, + 33.881112 + ], + [ + -117.807413, + 33.88209 + ], + [ + -117.80697, + 33.882276 + ], + [ + -117.806713, + 33.882157 + ] + ] + ] + }, + "properties": { + "name": "Buena Vista Equestrian Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166981544, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.826127, + 33.867235 + ], + [ + -117.826113, + 33.866565 + ], + [ + -117.828209, + 33.866673 + ], + [ + -117.828164, + 33.867407 + ], + [ + -117.826127, + 33.867235 + ] + ] + ] + }, + "properties": { + "name": "Parque De Los Ninos", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166981576, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.872199, + 33.860861 + ], + [ + -117.873832, + 33.859673 + ], + [ + -117.874222, + 33.860749 + ], + [ + -117.872337, + 33.861237 + ], + [ + -117.872199, + 33.860861 + ] + ] + ] + }, + "properties": { + "name": "Mcfadden Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166982179, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.876525, + 33.869725 + ], + [ + -117.876673, + 33.869191 + ], + [ + -117.877467, + 33.869345 + ], + [ + -117.877363, + 33.869725 + ], + [ + -117.876525, + 33.869725 + ] + ] + ] + }, + "properties": { + "name": "Santa Fe Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 166984744, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.953326, + 33.909287 + ], + [ + -117.953785, + 33.909373 + ], + [ + -117.954479, + 33.909281 + ], + [ + -117.955071, + 33.908912 + ], + [ + -117.955665, + 33.908648 + ], + [ + -117.956017, + 33.908362 + ], + [ + -117.956087, + 33.9081 + ], + [ + -117.956332, + 33.908115 + ], + [ + -117.956165, + 33.908784 + ], + [ + -117.956151, + 33.909062 + ], + [ + -117.956229, + 33.909337 + ], + [ + -117.956391, + 33.909589 + ], + [ + -117.956763, + 33.909841 + ], + [ + -117.957263, + 33.910011 + ], + [ + -117.958198, + 33.91008 + ], + [ + -117.958209, + 33.909768 + ], + [ + -117.958192, + 33.909527 + ], + [ + -117.957978, + 33.909072 + ], + [ + -117.957937, + 33.908756 + ], + [ + -117.957599, + 33.907857 + ], + [ + -117.958155, + 33.907673 + ], + [ + -117.958417, + 33.90837 + ], + [ + -117.958507, + 33.908889 + ], + [ + -117.958989, + 33.911942 + ], + [ + -117.959026, + 33.912258 + ], + [ + -117.95904, + 33.912575 + ], + [ + -117.959042, + 33.913115 + ], + [ + -117.958934, + 33.913111 + ], + [ + -117.958983, + 33.912687 + ], + [ + -117.958758, + 33.912337 + ], + [ + -117.958118, + 33.911961 + ], + [ + -117.957876, + 33.910917 + ], + [ + -117.953278, + 33.909409 + ], + [ + -117.953326, + 33.909287 + ] + ] + ] + }, + "properties": { + "name": "Vista Del Valle Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167006269, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.96626, + 33.643318 + ], + [ + -117.966269, + 33.644766 + ], + [ + -117.965677, + 33.644766 + ], + [ + -117.965677, + 33.643704 + ], + [ + -117.965097, + 33.643712 + ], + [ + -117.965109, + 33.64332 + ], + [ + -117.96626, + 33.643318 + ] + ] + ] + }, + "properties": { + "name": "Eader Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167006393, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.957863, + 33.646934 + ], + [ + -117.957848, + 33.645405 + ], + [ + -117.958117, + 33.645395 + ], + [ + -117.95835, + 33.645332 + ], + [ + -117.958701, + 33.645327 + ], + [ + -117.958724, + 33.646931 + ], + [ + -117.957863, + 33.646934 + ] + ] + ] + }, + "properties": { + "name": "Seeley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167006891, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.992607, + 33.659489 + ], + [ + -117.992598, + 33.658814 + ], + [ + -117.992866, + 33.658819 + ], + [ + -117.992861, + 33.659069 + ], + [ + -117.9937, + 33.659073 + ], + [ + -117.993767, + 33.659183 + ], + [ + -117.993912, + 33.659283 + ], + [ + -117.993566, + 33.659952 + ], + [ + -117.99355, + 33.660291 + ], + [ + -117.992907, + 33.660356 + ], + [ + -117.992877, + 33.66035 + ], + [ + -117.992853, + 33.66034 + ], + [ + -117.992832, + 33.660329 + ], + [ + -117.992814, + 33.660308 + ], + [ + -117.992753, + 33.66015 + ], + [ + -117.992637, + 33.659746 + ], + [ + -117.992607, + 33.659489 + ] + ] + ] + }, + "properties": { + "name": "Manning Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167007813, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.966546, + 33.66397 + ], + [ + -117.966555, + 33.664938 + ], + [ + -117.965765, + 33.664952 + ], + [ + -117.965896, + 33.663984 + ], + [ + -117.966546, + 33.66397 + ] + ] + ] + }, + "properties": { + "name": "Sowers Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167007933, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.975842, + 33.6665 + ], + [ + -117.974356, + 33.666281 + ], + [ + -117.974461, + 33.665786 + ], + [ + -117.97584, + 33.665797 + ], + [ + -117.975842, + 33.6665 + ] + ] + ] + }, + "properties": { + "name": "Moffett Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167007945, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.98253, + 33.668806 + ], + [ + -117.981624, + 33.6688 + ], + [ + -117.981614, + 33.667721 + ], + [ + -117.981856, + 33.667874 + ], + [ + -117.982659, + 33.667882 + ], + [ + -117.982667, + 33.668179 + ], + [ + -117.98253, + 33.668326 + ], + [ + -117.98253, + 33.668377 + ], + [ + -117.98253, + 33.668806 + ] + ] + ] + }, + "properties": { + "name": "Drew Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167008103, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.001183, + 33.667752 + ], + [ + -118.001096, + 33.667544 + ], + [ + -118.001528, + 33.667298 + ], + [ + -118.001771, + 33.667639 + ], + [ + -118.001858, + 33.667671 + ], + [ + -118.002021, + 33.667672 + ], + [ + -118.002243, + 33.667695 + ], + [ + -118.002381, + 33.667771 + ], + [ + -118.00249, + 33.667933 + ], + [ + -118.002503, + 33.668042 + ], + [ + -118.002476, + 33.668123 + ], + [ + -118.002385, + 33.668217 + ], + [ + -118.002275, + 33.668285 + ], + [ + -118.002119, + 33.668326 + ], + [ + -118.002017, + 33.668335 + ], + [ + -118.001868, + 33.668279 + ], + [ + -118.001761, + 33.668284 + ], + [ + -118.001596, + 33.668387 + ], + [ + -118.001354, + 33.668526 + ], + [ + -118.001056, + 33.668586 + ], + [ + -118.000842, + 33.668593 + ], + [ + -118.000577, + 33.667938 + ], + [ + -118.001183, + 33.667752 + ] + ] + ] + }, + "properties": { + "name": "Farquhar Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167008117, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.004172, + 33.675569 + ], + [ + -118.001815, + 33.675605 + ], + [ + -118.001816, + 33.675331 + ], + [ + -118.003788, + 33.673387 + ], + [ + -118.004454, + 33.673915 + ], + [ + -118.00448, + 33.674506 + ], + [ + -118.004166, + 33.674568 + ], + [ + -118.004172, + 33.675569 + ] + ] + ] + }, + "properties": { + "name": "Worthy Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167008137, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.993127, + 33.677125 + ], + [ + -117.995146, + 33.677125 + ], + [ + -117.995153, + 33.678297 + ], + [ + -117.993129, + 33.678315 + ], + [ + -117.993128, + 33.677865 + ], + [ + -117.993127, + 33.677125 + ] + ] + ] + }, + "properties": { + "name": "McCallen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167008299, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.971135, + 33.676394 + ], + [ + -117.969182, + 33.676409 + ], + [ + -117.969137, + 33.676408 + ], + [ + -117.969135, + 33.675977 + ], + [ + -117.968898, + 33.675981 + ], + [ + -117.968892, + 33.674727 + ], + [ + -117.970566, + 33.674717 + ], + [ + -117.971131, + 33.674716 + ], + [ + -117.971135, + 33.676394 + ] + ] + ] + }, + "properties": { + "name": "Wardlow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167008674, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.957945, + 33.677088 + ], + [ + -117.958282, + 33.677092 + ], + [ + -117.958282, + 33.677016 + ], + [ + -117.958613, + 33.67701 + ], + [ + -117.958753, + 33.67699 + ], + [ + -117.959373, + 33.676997 + ], + [ + -117.959415, + 33.677025 + ], + [ + -117.959447, + 33.677713 + ], + [ + -117.95875, + 33.677733 + ], + [ + -117.958182, + 33.677697 + ], + [ + -117.957992, + 33.677499 + ], + [ + -117.958012, + 33.677469 + ], + [ + -117.958013, + 33.677431 + ], + [ + -117.958004, + 33.677399 + ], + [ + -117.957964, + 33.677335 + ], + [ + -117.957945, + 33.677088 + ] + ] + ] + }, + "properties": { + "name": "Bushard Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167008759, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.977728, + 33.67625 + ], + [ + -117.977729, + 33.677104 + ], + [ + -117.977372, + 33.67711 + ], + [ + -117.977101, + 33.677075 + ], + [ + -117.977105, + 33.6767 + ], + [ + -117.975295, + 33.676573 + ], + [ + -117.975492, + 33.676257 + ], + [ + -117.977728, + 33.67625 + ] + ] + ] + }, + "properties": { + "name": "Newland Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167008935, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.987704, + 33.672338 + ], + [ + -117.987697, + 33.672595 + ], + [ + -117.986859, + 33.673874 + ], + [ + -117.986877, + 33.674161 + ], + [ + -117.986368, + 33.674292 + ], + [ + -117.986368, + 33.674679 + ], + [ + -117.986392, + 33.67468 + ], + [ + -117.986846, + 33.674689 + ], + [ + -117.986906, + 33.674682 + ], + [ + -117.986918, + 33.675969 + ], + [ + -117.986436, + 33.676834 + ], + [ + -117.986487, + 33.679328 + ], + [ + -117.985806, + 33.679339 + ], + [ + -117.98574, + 33.678677 + ], + [ + -117.985443, + 33.678255 + ], + [ + -117.984816, + 33.677846 + ], + [ + -117.984357, + 33.677253 + ], + [ + -117.984572, + 33.677008 + ], + [ + -117.984711, + 33.676746 + ], + [ + -117.984751, + 33.676516 + ], + [ + -117.984722, + 33.67624 + ], + [ + -117.984705, + 33.67604 + ], + [ + -117.984753, + 33.67583 + ], + [ + -117.985629, + 33.673948 + ], + [ + -117.985872, + 33.673312 + ], + [ + -117.985928, + 33.672362 + ], + [ + -117.987704, + 33.672338 + ] + ] + ] + }, + "properties": { + "name": "Bartlett Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167008964, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.977281, + 33.683641 + ], + [ + -117.973542, + 33.683667 + ], + [ + -117.973286, + 33.683669 + ], + [ + -117.971543, + 33.683682 + ], + [ + -117.971542, + 33.683152 + ], + [ + -117.975945, + 33.68311 + ], + [ + -117.975804, + 33.682766 + ], + [ + -117.975704, + 33.6827 + ], + [ + -117.975705, + 33.682468 + ], + [ + -117.97781, + 33.682408 + ], + [ + -117.977815, + 33.68261 + ], + [ + -117.977943, + 33.682734 + ], + [ + -117.977904, + 33.686495 + ], + [ + -117.977312, + 33.686497 + ], + [ + -117.977281, + 33.683641 + ] + ] + ] + }, + "properties": { + "name": "Lagenbeck Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167009031, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.967228, + 33.683693 + ], + [ + -117.967289, + 33.683139 + ], + [ + -117.968139, + 33.683153 + ], + [ + -117.970362, + 33.683129 + ], + [ + -117.97124, + 33.683143 + ], + [ + -117.971243, + 33.683673 + ], + [ + -117.967228, + 33.683693 + ] + ] + ] + }, + "properties": { + "name": "Talbert Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167009064, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.985134, + 33.685523 + ], + [ + -117.985035, + 33.685475 + ], + [ + -117.984803, + 33.685321 + ], + [ + -117.98463, + 33.68527 + ], + [ + -117.984457, + 33.68525 + ], + [ + -117.984433, + 33.684223 + ], + [ + -117.984437, + 33.684229 + ], + [ + -117.985114, + 33.684221 + ], + [ + -117.985134, + 33.685523 + ] + ] + ] + }, + "properties": { + "name": "Perry Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167009098, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.965057, + 33.691498 + ], + [ + -117.965032, + 33.689984 + ], + [ + -117.966099, + 33.689976 + ], + [ + -117.966213, + 33.690057 + ], + [ + -117.966241, + 33.690564 + ], + [ + -117.967054, + 33.69057 + ], + [ + -117.967066, + 33.691363 + ], + [ + -117.966633, + 33.691539 + ], + [ + -117.966552, + 33.691512 + ], + [ + -117.96538, + 33.691508 + ], + [ + -117.965057, + 33.691498 + ] + ] + ] + }, + "properties": { + "name": "Cordata Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167009110, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.984635, + 33.692144 + ], + [ + -117.985672, + 33.692141 + ], + [ + -117.985674, + 33.692597 + ], + [ + -117.985676, + 33.69293 + ], + [ + -117.984639, + 33.692933 + ], + [ + -117.984635, + 33.692144 + ] + ] + ] + }, + "properties": { + "name": "Helme Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167009408, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.978068, + 33.693924 + ], + [ + -117.977424, + 33.693916 + ], + [ + -117.977382, + 33.691984 + ], + [ + -117.977377, + 33.691728 + ], + [ + -117.977365, + 33.69121 + ], + [ + -117.976955, + 33.691212 + ], + [ + -117.976981, + 33.69042 + ], + [ + -117.978089, + 33.690398 + ], + [ + -117.978517, + 33.690457 + ], + [ + -117.978772, + 33.69058 + ], + [ + -117.978996, + 33.690718 + ], + [ + -117.979264, + 33.690934 + ], + [ + -117.978868, + 33.691276 + ], + [ + -117.978754, + 33.691304 + ], + [ + -117.97854, + 33.691316 + ], + [ + -117.978427, + 33.691386 + ], + [ + -117.978358, + 33.691521 + ], + [ + -117.978022, + 33.691527 + ], + [ + -117.978068, + 33.693924 + ] + ] + ] + }, + "properties": { + "name": "Harper Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167009464, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.949864, + 33.694567 + ], + [ + -117.949792, + 33.694601 + ], + [ + -117.94973, + 33.694669 + ], + [ + -117.94973, + 33.695225 + ], + [ + -117.94969, + 33.695286 + ], + [ + -117.949607, + 33.69531 + ], + [ + -117.949202, + 33.695315 + ], + [ + -117.948758, + 33.695315 + ], + [ + -117.948698, + 33.694244 + ], + [ + -117.949851, + 33.694241 + ], + [ + -117.949864, + 33.694567 + ] + ] + ] + }, + "properties": { + "name": "Ellis Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167009792, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.980398, + 33.698605 + ], + [ + -117.980352, + 33.696225 + ], + [ + -117.980949, + 33.696203 + ], + [ + -117.981229, + 33.695887 + ], + [ + -117.981339, + 33.695706 + ], + [ + -117.981521, + 33.695416 + ], + [ + -117.981423, + 33.6953 + ], + [ + -117.981711, + 33.695113 + ], + [ + -117.982076, + 33.695127 + ], + [ + -117.982395, + 33.694476 + ], + [ + -117.982387, + 33.694084 + ], + [ + -117.983159, + 33.694074 + ], + [ + -117.983136, + 33.694396 + ], + [ + -117.982483, + 33.694693 + ], + [ + -117.982406, + 33.695342 + ], + [ + -117.982022, + 33.695355 + ], + [ + -117.982015, + 33.696022 + ], + [ + -117.981847, + 33.696412 + ], + [ + -117.981603, + 33.696486 + ], + [ + -117.981286, + 33.696845 + ], + [ + -117.980901, + 33.696739 + ], + [ + -117.980556, + 33.697559 + ], + [ + -117.980491, + 33.698686 + ], + [ + -117.980398, + 33.698605 + ] + ] + ] + }, + "properties": { + "name": "Lambert Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 167009897, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.967877, + 33.69696 + ], + [ + -117.96849, + 33.696951 + ], + [ + -117.968728, + 33.697027 + ], + [ + -117.968739, + 33.697648 + ], + [ + -117.968835, + 33.69773 + ], + [ + -117.968848, + 33.698228 + ], + [ + -117.967829, + 33.698245 + ], + [ + -117.967877, + 33.69696 + ] + ] + ] + }, + "properties": { + "name": "Helm Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 168398281, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.766932, + 33.795749 + ], + [ + -117.766922, + 33.795737 + ], + [ + -117.766938, + 33.79573 + ], + [ + -117.766931, + 33.795719 + ], + [ + -117.76696, + 33.795704 + ], + [ + -117.766894, + 33.795593 + ], + [ + -117.766725, + 33.795663 + ], + [ + -117.766738, + 33.795687 + ], + [ + -117.76676, + 33.795677 + ], + [ + -117.766795, + 33.795732 + ], + [ + -117.766738, + 33.795757 + ], + [ + -117.766706, + 33.795705 + ], + [ + -117.76653, + 33.79578 + ], + [ + -117.766522, + 33.795767 + ], + [ + -117.766451, + 33.795653 + ], + [ + -117.766171, + 33.795711 + ], + [ + -117.766541, + 33.796323 + ], + [ + -117.766605, + 33.796295 + ], + [ + -117.766616, + 33.796269 + ], + [ + -117.766665, + 33.796152 + ], + [ + -117.766736, + 33.796126 + ], + [ + -117.766629, + 33.795948 + ], + [ + -117.766643, + 33.795942 + ], + [ + -117.766657, + 33.795909 + ], + [ + -117.766721, + 33.795886 + ], + [ + -117.766742, + 33.795891 + ], + [ + -117.766796, + 33.795867 + ], + [ + -117.766782, + 33.795846 + ], + [ + -117.766793, + 33.795842 + ], + [ + -117.766784, + 33.795821 + ], + [ + -117.766877, + 33.795789 + ], + [ + -117.766888, + 33.795777 + ], + [ + -117.766913, + 33.795781 + ], + [ + -117.766926, + 33.795777 + ], + [ + -117.766913, + 33.795757 + ], + [ + -117.766932, + 33.795749 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 168455543, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.767488, + 33.796025 + ], + [ + -117.767446, + 33.796141 + ], + [ + -117.767362, + 33.79621 + ], + [ + -117.767233, + 33.796205 + ], + [ + -117.767211, + 33.796166 + ], + [ + -117.767223, + 33.796162 + ], + [ + -117.76723, + 33.796158 + ], + [ + -117.767241, + 33.796152 + ], + [ + -117.767255, + 33.796156 + ], + [ + -117.76727, + 33.796161 + ], + [ + -117.767291, + 33.796166 + ], + [ + -117.767304, + 33.796169 + ], + [ + -117.767325, + 33.79616 + ], + [ + -117.767331, + 33.796145 + ], + [ + -117.767345, + 33.79612 + ], + [ + -117.767357, + 33.796103 + ], + [ + -117.76734, + 33.796075 + ], + [ + -117.767296, + 33.796061 + ], + [ + -117.767285, + 33.79604 + ], + [ + -117.767297, + 33.796013 + ], + [ + -117.767313, + 33.795992 + ], + [ + -117.767354, + 33.795986 + ], + [ + -117.767488, + 33.796025 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 168468694, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.843987, + 33.645191 + ], + [ + -117.844081, + 33.645319 + ], + [ + -117.844155, + 33.645454 + ], + [ + -117.844213, + 33.645606 + ], + [ + -117.844251, + 33.645783 + ], + [ + -117.844256, + 33.646014 + ], + [ + -117.84423, + 33.646172 + ], + [ + -117.844196, + 33.646286 + ], + [ + -117.84415, + 33.646396 + ], + [ + -117.844095, + 33.646498 + ], + [ + -117.844014, + 33.646615 + ], + [ + -117.843949, + 33.646692 + ], + [ + -117.843911, + 33.64673 + ], + [ + -117.843832, + 33.646807 + ], + [ + -117.843729, + 33.646889 + ], + [ + -117.8437, + 33.646909 + ], + [ + -117.843557, + 33.646997 + ], + [ + -117.843402, + 33.64707 + ], + [ + -117.843229, + 33.64713 + ], + [ + -117.843087, + 33.647166 + ], + [ + -117.842868, + 33.647197 + ], + [ + -117.842808, + 33.647201 + ], + [ + -117.842656, + 33.647202 + ], + [ + -117.84248, + 33.647187 + ], + [ + -117.842311, + 33.647157 + ], + [ + -117.842138, + 33.647108 + ], + [ + -117.842038, + 33.647071 + ], + [ + -117.841906, + 33.64701 + ], + [ + -117.841718, + 33.646895 + ], + [ + -117.841559, + 33.646764 + ], + [ + -117.841504, + 33.646709 + ], + [ + -117.841316, + 33.646451 + ], + [ + -117.841212, + 33.646187 + ], + [ + -117.841179, + 33.645951 + ], + [ + -117.841188, + 33.645776 + ], + [ + -117.841228, + 33.645595 + ], + [ + -117.841238, + 33.645566 + ], + [ + -117.841295, + 33.645429 + ], + [ + -117.84138, + 33.645285 + ], + [ + -117.841453, + 33.645189 + ], + [ + -117.84152, + 33.645114 + ], + [ + -117.841673, + 33.644978 + ], + [ + -117.841906, + 33.64483 + ], + [ + -117.842092, + 33.644748 + ], + [ + -117.842286, + 33.644689 + ], + [ + -117.842431, + 33.64466 + ], + [ + -117.84312, + 33.644681 + ], + [ + -117.8433, + 33.644732 + ], + [ + -117.843425, + 33.644785 + ], + [ + -117.843514, + 33.644821 + ], + [ + -117.843675, + 33.644914 + ], + [ + -117.843729, + 33.644952 + ], + [ + -117.843874, + 33.64507 + ], + [ + -117.843906, + 33.645102 + ], + [ + -117.843987, + 33.645191 + ] + ] + ] + }, + "properties": { + "name": "Aldrich Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 168888650, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.036035, + 33.719767 + ], + [ + -118.035907, + 33.719988 + ], + [ + -118.035852, + 33.720152 + ], + [ + -118.035817, + 33.720317 + ], + [ + -118.035808, + 33.720436 + ], + [ + -118.03584, + 33.7207 + ], + [ + -118.035834, + 33.720742 + ], + [ + -118.03577, + 33.720756 + ], + [ + -118.03533, + 33.720853 + ], + [ + -118.035242, + 33.720802 + ], + [ + -118.032878, + 33.720827 + ], + [ + -118.032858, + 33.720017 + ], + [ + -118.034933, + 33.719992 + ], + [ + -118.034933, + 33.719767 + ], + [ + -118.036035, + 33.719767 + ] + ] + ] + }, + "properties": { + "name": "Gibbs Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 169172253, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.940322, + 33.728896 + ], + [ + -117.940438, + 33.728899 + ], + [ + -117.94051, + 33.728842 + ], + [ + -117.940473, + 33.728735 + ], + [ + -117.940461, + 33.728723 + ], + [ + -117.940469, + 33.728701 + ], + [ + -117.940463, + 33.728659 + ], + [ + -117.940416, + 33.728619 + ], + [ + -117.940402, + 33.728607 + ], + [ + -117.940379, + 33.728606 + ], + [ + -117.940302, + 33.728648 + ], + [ + -117.940284, + 33.728691 + ], + [ + -117.940271, + 33.728689 + ], + [ + -117.940243, + 33.728665 + ], + [ + -117.940164, + 33.728654 + ], + [ + -117.940096, + 33.728706 + ], + [ + -117.940115, + 33.72879 + ], + [ + -117.940201, + 33.728826 + ], + [ + -117.940255, + 33.728797 + ], + [ + -117.940278, + 33.728807 + ], + [ + -117.940284, + 33.728857 + ], + [ + -117.940322, + 33.728896 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 169172896, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.940259, + 33.729648 + ], + [ + -117.940286, + 33.729562 + ], + [ + -117.940319, + 33.729538 + ], + [ + -117.940369, + 33.729561 + ], + [ + -117.940361, + 33.729582 + ], + [ + -117.940374, + 33.729592 + ], + [ + -117.940385, + 33.729617 + ], + [ + -117.940353, + 33.729669 + ], + [ + -117.940328, + 33.729672 + ], + [ + -117.940259, + 33.729648 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513715, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.011177, + 33.867114 + ], + [ + -118.011202, + 33.869071 + ], + [ + -118.008501, + 33.869085 + ], + [ + -118.0085, + 33.869043 + ], + [ + -118.008207, + 33.869046 + ], + [ + -118.008207, + 33.869066 + ], + [ + -118.007749, + 33.869071 + ], + [ + -118.007744, + 33.868466 + ], + [ + -118.008223, + 33.868464 + ], + [ + -118.008384, + 33.868335 + ], + [ + -118.008369, + 33.867163 + ], + [ + -118.008366, + 33.86713 + ], + [ + -118.008588, + 33.867129 + ], + [ + -118.011177, + 33.867114 + ] + ] + ] + }, + "properties": { + "name": "Bellis Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513719, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.855, + 33.902013 + ], + [ + -117.855032, + 33.903756 + ], + [ + -117.853949, + 33.903769 + ], + [ + -117.853934, + 33.902928 + ], + [ + -117.852837, + 33.902942 + ], + [ + -117.852821, + 33.90204 + ], + [ + -117.855, + 33.902013 + ] + ] + ] + }, + "properties": { + "name": "George J Koch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513720, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.01059, + 33.771196 + ], + [ + -118.010554, + 33.771236 + ], + [ + -118.010148, + 33.77124 + ], + [ + -118.010126, + 33.769907 + ], + [ + -118.010739, + 33.769913 + ], + [ + -118.010955, + 33.770084 + ], + [ + -118.01078, + 33.77026 + ], + [ + -118.010696, + 33.770392 + ], + [ + -118.010655, + 33.770481 + ], + [ + -118.010624, + 33.770559 + ], + [ + -118.010598, + 33.770657 + ], + [ + -118.01059, + 33.771196 + ] + ] + ] + }, + "properties": { + "name": "Golden West Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513731, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.834416, + 33.882735 + ], + [ + -117.834387, + 33.880855 + ], + [ + -117.834632, + 33.880862 + ], + [ + -117.834825, + 33.880652 + ], + [ + -117.834817, + 33.8804 + ], + [ + -117.835335, + 33.880425 + ], + [ + -117.835324, + 33.88071 + ], + [ + -117.835072, + 33.880718 + ], + [ + -117.834876, + 33.880881 + ], + [ + -117.834892, + 33.881907 + ], + [ + -117.834768, + 33.882196 + ], + [ + -117.834912, + 33.882341 + ], + [ + -117.834755, + 33.882486 + ], + [ + -117.834781, + 33.882734 + ], + [ + -117.835436, + 33.882726 + ], + [ + -117.835456, + 33.882995 + ], + [ + -117.835577, + 33.883097 + ], + [ + -117.835405, + 33.883448 + ], + [ + -117.835358, + 33.883782 + ], + [ + -117.835336, + 33.884115 + ], + [ + -117.834975, + 33.884118 + ], + [ + -117.834946, + 33.884301 + ], + [ + -117.833969, + 33.884191 + ], + [ + -117.833959, + 33.882746 + ], + [ + -117.834416, + 33.882735 + ] + ] + ] + }, + "properties": { + "name": "Parque De Los Vaqueros", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513733, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.011026, + 33.85069 + ], + [ + -118.006389, + 33.850716 + ], + [ + -118.006485, + 33.850102 + ], + [ + -118.006543, + 33.849765 + ], + [ + -118.006574, + 33.84948 + ], + [ + -118.006606, + 33.849191 + ], + [ + -118.006703, + 33.848595 + ], + [ + -118.006743, + 33.84858 + ], + [ + -118.007249, + 33.848571 + ], + [ + -118.009954, + 33.848526 + ], + [ + -118.009949, + 33.849345 + ], + [ + -118.010007, + 33.849376 + ], + [ + -118.010073, + 33.849373 + ], + [ + -118.010135, + 33.849339 + ], + [ + -118.010136, + 33.849397 + ], + [ + -118.010988, + 33.849368 + ], + [ + -118.011026, + 33.85069 + ] + ] + ] + }, + "properties": { + "name": "Peak Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513734, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.011214, + 33.792001 + ], + [ + -118.012342, + 33.791997 + ], + [ + -118.012345, + 33.792326 + ], + [ + -118.012284, + 33.792443 + ], + [ + -118.012283, + 33.792974 + ], + [ + -118.011768, + 33.792974 + ], + [ + -118.011675, + 33.792974 + ], + [ + -118.011254, + 33.792975 + ], + [ + -118.011214, + 33.792001 + ] + ] + ] + }, + "properties": { + "name": "Peppertree Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513737, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.855738, + 33.874193 + ], + [ + -117.855854, + 33.873922 + ], + [ + -117.85738, + 33.873956 + ], + [ + -117.857381, + 33.874318 + ], + [ + -117.857335, + 33.874313 + ], + [ + -117.857301, + 33.874276 + ], + [ + -117.857238, + 33.874233 + ], + [ + -117.857135, + 33.874247 + ], + [ + -117.857077, + 33.874287 + ], + [ + -117.857055, + 33.874346 + ], + [ + -117.857086, + 33.87442 + ], + [ + -117.85713, + 33.874454 + ], + [ + -117.857193, + 33.874471 + ], + [ + -117.857092, + 33.875034 + ], + [ + -117.856787, + 33.874989 + ], + [ + -117.85677, + 33.874927 + ], + [ + -117.856698, + 33.87484 + ], + [ + -117.856576, + 33.874805 + ], + [ + -117.8565, + 33.874819 + ], + [ + -117.856404, + 33.874838 + ], + [ + -117.855838, + 33.874811 + ], + [ + -117.855772, + 33.874777 + ], + [ + -117.855813, + 33.874497 + ], + [ + -117.8558, + 33.874292 + ], + [ + -117.855738, + 33.874193 + ] + ] + ] + }, + "properties": { + "name": "Richard Samp Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513739, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.991751, + 33.885582 + ], + [ + -117.991735, + 33.883059 + ], + [ + -117.991863, + 33.882991 + ], + [ + -117.992352, + 33.883419 + ], + [ + -117.992611, + 33.883774 + ], + [ + -117.992935, + 33.884634 + ], + [ + -117.993064, + 33.885081 + ], + [ + -117.993064, + 33.88547 + ], + [ + -117.992979, + 33.885878 + ], + [ + -117.991751, + 33.885582 + ] + ] + ] + }, + "properties": { + "name": "Smith-Murphy Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513742, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.867341, + 33.90007 + ], + [ + -117.868929, + 33.900048 + ], + [ + -117.868964, + 33.901846 + ], + [ + -117.867376, + 33.901867 + ], + [ + -117.867341, + 33.90007 + ] + ] + ] + }, + "properties": { + "name": "Tuffree Hill Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513743, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.828542, + 33.891825 + ], + [ + -117.828036, + 33.891996 + ], + [ + -117.827729, + 33.892027 + ], + [ + -117.82741, + 33.892092 + ], + [ + -117.827126, + 33.89228 + ], + [ + -117.826461, + 33.892942 + ], + [ + -117.826279, + 33.893102 + ], + [ + -117.826053, + 33.893222 + ], + [ + -117.825772, + 33.893276 + ], + [ + -117.825563, + 33.893267 + ], + [ + -117.825349, + 33.893222 + ], + [ + -117.825347, + 33.89286 + ], + [ + -117.825343, + 33.892099 + ], + [ + -117.825493, + 33.891828 + ], + [ + -117.825491, + 33.890281 + ], + [ + -117.828652, + 33.890293 + ], + [ + -117.828542, + 33.891825 + ] + ] + ] + }, + "properties": { + "name": "Valley View Sports Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513745, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.850561, + 33.893401 + ], + [ + -117.850552, + 33.892667 + ], + [ + -117.850651, + 33.892665 + ], + [ + -117.850753, + 33.892794 + ], + [ + -117.851449, + 33.892829 + ], + [ + -117.85151, + 33.892945 + ], + [ + -117.852744, + 33.892953 + ], + [ + -117.853089, + 33.892957 + ], + [ + -117.853097, + 33.893186 + ], + [ + -117.85303, + 33.893247 + ], + [ + -117.851251, + 33.893267 + ], + [ + -117.851186, + 33.893276 + ], + [ + -117.851122, + 33.893289 + ], + [ + -117.851027, + 33.893306 + ], + [ + -117.850809, + 33.893371 + ], + [ + -117.850727, + 33.893388 + ], + [ + -117.850651, + 33.893398 + ], + [ + -117.850561, + 33.893401 + ] + ] + ] + }, + "properties": { + "name": "Wagner Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170513746, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.816681, + 33.871082 + ], + [ + -117.816013, + 33.872586 + ], + [ + -117.815925, + 33.872786 + ], + [ + -117.814918, + 33.873143 + ], + [ + -117.814933, + 33.873508 + ], + [ + -117.813799, + 33.874359 + ], + [ + -117.8136, + 33.874712 + ], + [ + -117.813943, + 33.875444 + ], + [ + -117.813273, + 33.875256 + ], + [ + -117.813329, + 33.87568 + ], + [ + -117.813677, + 33.875717 + ], + [ + -117.813687, + 33.876212 + ], + [ + -117.812937, + 33.876451 + ], + [ + -117.812933, + 33.877489 + ], + [ + -117.812947, + 33.87778 + ], + [ + -117.813309, + 33.878044 + ], + [ + -117.81372, + 33.878016 + ], + [ + -117.813744, + 33.878595 + ], + [ + -117.81339, + 33.878601 + ], + [ + -117.8134, + 33.878927 + ], + [ + -117.814067, + 33.879206 + ], + [ + -117.814477, + 33.879823 + ], + [ + -117.814579, + 33.880165 + ], + [ + -117.814713, + 33.880355 + ], + [ + -117.814645, + 33.880391 + ], + [ + -117.814597, + 33.88039 + ], + [ + -117.814532, + 33.880389 + ], + [ + -117.814461, + 33.880011 + ], + [ + -117.813788, + 33.879539 + ], + [ + -117.81352, + 33.879408 + ], + [ + -117.812769, + 33.879517 + ], + [ + -117.812251, + 33.879677 + ], + [ + -117.810882, + 33.879793 + ], + [ + -117.810687, + 33.879824 + ], + [ + -117.810633, + 33.879737 + ], + [ + -117.811189, + 33.879441 + ], + [ + -117.811399, + 33.879195 + ], + [ + -117.811388, + 33.878504 + ], + [ + -117.810832, + 33.878806 + ], + [ + -117.810181, + 33.879003 + ], + [ + -117.809516, + 33.879247 + ], + [ + -117.809332, + 33.878978 + ], + [ + -117.809643, + 33.878817 + ], + [ + -117.809557, + 33.878529 + ], + [ + -117.80924, + 33.878552 + ], + [ + -117.80924, + 33.878236 + ], + [ + -117.810389, + 33.878455 + ], + [ + -117.810909, + 33.878151 + ], + [ + -117.810989, + 33.877667 + ], + [ + -117.81083, + 33.87713 + ], + [ + -117.811185, + 33.876983 + ], + [ + -117.810963, + 33.876278 + ], + [ + -117.811364, + 33.875865 + ], + [ + -117.811628, + 33.875269 + ], + [ + -117.811445, + 33.875197 + ], + [ + -117.810366, + 33.875297 + ], + [ + -117.810126, + 33.875429 + ], + [ + -117.809996, + 33.875178 + ], + [ + -117.809973, + 33.874973 + ], + [ + -117.810117, + 33.874833 + ], + [ + -117.811244, + 33.874677 + ], + [ + -117.811728, + 33.873944 + ], + [ + -117.811725, + 33.873577 + ], + [ + -117.812171, + 33.873463 + ], + [ + -117.812252, + 33.872859 + ], + [ + -117.812201, + 33.872672 + ], + [ + -117.811822, + 33.87277 + ], + [ + -117.811508, + 33.872992 + ], + [ + -117.810723, + 33.873044 + ], + [ + -117.810286, + 33.873485 + ], + [ + -117.809422, + 33.873914 + ], + [ + -117.808935, + 33.874488 + ], + [ + -117.808301, + 33.875312 + ], + [ + -117.807946, + 33.875141 + ], + [ + -117.809166, + 33.873583 + ], + [ + -117.809162, + 33.872617 + ], + [ + -117.810194, + 33.871129 + ], + [ + -117.816681, + 33.871082 + ] + ] + ] + }, + "properties": { + "name": "Yorba Linda Lakebed Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170809459, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.734476, + 33.70638 + ], + [ + -117.73439, + 33.706371 + ], + [ + -117.733909, + 33.706024 + ], + [ + -117.733891, + 33.705987 + ], + [ + -117.734976, + 33.704897 + ], + [ + -117.73553, + 33.705276 + ], + [ + -117.734476, + 33.70638 + ] + ] + ] + }, + "properties": { + "name": "Mockingbird Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 170817992, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.744376, + 33.584328 + ], + [ + -117.744316, + 33.584303 + ], + [ + -117.744244, + 33.584277 + ], + [ + -117.744223, + 33.584227 + ], + [ + -117.744252, + 33.584167 + ], + [ + -117.744314, + 33.584149 + ], + [ + -117.744394, + 33.58416 + ], + [ + -117.744459, + 33.58408 + ], + [ + -117.744528, + 33.58412 + ], + [ + -117.744547, + 33.584183 + ], + [ + -117.744523, + 33.584277 + ], + [ + -117.744502, + 33.58431 + ], + [ + -117.744461, + 33.584333 + ], + [ + -117.744376, + 33.584328 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 171427741, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.83863, + 33.657444 + ], + [ + -117.827937, + 33.657213 + ], + [ + -117.827917, + 33.656612 + ], + [ + -117.827884, + 33.656202 + ], + [ + -117.827748, + 33.655526 + ], + [ + -117.827537, + 33.654879 + ], + [ + -117.826929, + 33.653743 + ], + [ + -117.8292, + 33.652972 + ], + [ + -117.829703, + 33.652733 + ], + [ + -117.829958, + 33.652618 + ], + [ + -117.831134, + 33.653051 + ], + [ + -117.831752, + 33.654041 + ], + [ + -117.832137, + 33.654046 + ], + [ + -117.832356, + 33.653255 + ], + [ + -117.832938, + 33.652605 + ], + [ + -117.833258, + 33.652495 + ], + [ + -117.833484, + 33.652297 + ], + [ + -117.833615, + 33.652397 + ], + [ + -117.833644, + 33.652783 + ], + [ + -117.834074, + 33.653549 + ], + [ + -117.835004, + 33.653763 + ], + [ + -117.835458, + 33.65381 + ], + [ + -117.836313, + 33.6541 + ], + [ + -117.83669, + 33.653937 + ], + [ + -117.837013, + 33.654053 + ], + [ + -117.83719, + 33.654911 + ], + [ + -117.83866, + 33.655457 + ], + [ + -117.838939, + 33.655486 + ], + [ + -117.838754, + 33.656274 + ], + [ + -117.838678, + 33.656743 + ], + [ + -117.83863, + 33.657444 + ] + ] + ] + }, + "properties": { + "name": "William R. Mason Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 171430092, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.824731, + 33.68766 + ], + [ + -117.825334, + 33.687056 + ], + [ + -117.82501, + 33.686675 + ], + [ + -117.824641, + 33.686047 + ], + [ + -117.823554, + 33.686387 + ], + [ + -117.821734, + 33.686689 + ], + [ + -117.820693, + 33.687004 + ], + [ + -117.820127, + 33.687272 + ], + [ + -117.819632, + 33.687577 + ], + [ + -117.819089, + 33.688026 + ], + [ + -117.819123, + 33.688048 + ], + [ + -117.820448, + 33.688927 + ], + [ + -117.820981, + 33.68923 + ], + [ + -117.821472, + 33.689399 + ], + [ + -117.822057, + 33.689506 + ], + [ + -117.822473, + 33.689528 + ], + [ + -117.823258, + 33.689535 + ], + [ + -117.823795, + 33.689462 + ], + [ + -117.824211, + 33.689377 + ], + [ + -117.824601, + 33.689263 + ], + [ + -117.82504, + 33.689074 + ], + [ + -117.825425, + 33.688841 + ], + [ + -117.825849, + 33.688412 + ], + [ + -117.824731, + 33.68766 + ] + ] + ] + }, + "properties": { + "name": "Colonel Bill Barber Marine Corps Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 171470065, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.763451, + 33.690171 + ], + [ + -117.763422, + 33.690194 + ], + [ + -117.76223, + 33.691376 + ], + [ + -117.762153, + 33.691467 + ], + [ + -117.762255, + 33.691614 + ], + [ + -117.764133, + 33.692804 + ], + [ + -117.766121, + 33.690824 + ], + [ + -117.766156, + 33.69069 + ], + [ + -117.766014, + 33.690303 + ], + [ + -117.765889, + 33.69014 + ], + [ + -117.765799, + 33.690004 + ], + [ + -117.765721, + 33.689861 + ], + [ + -117.765349, + 33.689724 + ], + [ + -117.764333, + 33.690773 + ], + [ + -117.763451, + 33.690171 + ] + ] + ] + }, + "properties": { + "name": "Cypress Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 171532123, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.83482, + 33.657636 + ], + [ + -117.837886, + 33.65772 + ], + [ + -117.838652, + 33.657741 + ], + [ + -117.838572, + 33.659936 + ], + [ + -117.83847, + 33.660368 + ], + [ + -117.838341, + 33.660696 + ], + [ + -117.838115, + 33.661063 + ], + [ + -117.837854, + 33.661404 + ], + [ + -117.836743, + 33.662483 + ], + [ + -117.836358, + 33.66297 + ], + [ + -117.835929, + 33.663617 + ], + [ + -117.835582, + 33.664315 + ], + [ + -117.835077, + 33.66569 + ], + [ + -117.834792, + 33.668089 + ], + [ + -117.834181, + 33.669186 + ], + [ + -117.833341, + 33.669922 + ], + [ + -117.832847, + 33.670317 + ], + [ + -117.832494, + 33.670183 + ], + [ + -117.832157, + 33.670034 + ], + [ + -117.831389, + 33.669643 + ], + [ + -117.829222, + 33.667739 + ], + [ + -117.82846, + 33.66707 + ], + [ + -117.829425, + 33.666075 + ], + [ + -117.830469, + 33.666367 + ], + [ + -117.831005, + 33.664923 + ], + [ + -117.830985, + 33.664192 + ], + [ + -117.831405, + 33.663296 + ], + [ + -117.831515, + 33.663063 + ], + [ + -117.832638, + 33.66345 + ], + [ + -117.832776, + 33.66318 + ], + [ + -117.832728, + 33.662173 + ], + [ + -117.83213, + 33.661551 + ], + [ + -117.831825, + 33.661288 + ], + [ + -117.831551, + 33.661261 + ], + [ + -117.830944, + 33.661235 + ], + [ + -117.829695, + 33.660903 + ], + [ + -117.828213, + 33.660665 + ], + [ + -117.827877, + 33.660666 + ], + [ + -117.827933, + 33.659369 + ], + [ + -117.82852, + 33.659281 + ], + [ + -117.829028, + 33.659263 + ], + [ + -117.830815, + 33.659388 + ], + [ + -117.831686, + 33.65945 + ], + [ + -117.832442, + 33.659632 + ], + [ + -117.833427, + 33.659823 + ], + [ + -117.833569, + 33.659894 + ], + [ + -117.833704, + 33.660311 + ], + [ + -117.833783, + 33.660407 + ], + [ + -117.833906, + 33.660469 + ], + [ + -117.834113, + 33.66052 + ], + [ + -117.834552, + 33.66055 + ], + [ + -117.836554, + 33.659859 + ], + [ + -117.836588, + 33.659572 + ], + [ + -117.8365, + 33.659285 + ], + [ + -117.836031, + 33.658994 + ], + [ + -117.835774, + 33.658326 + ], + [ + -117.835291, + 33.658258 + ], + [ + -117.834944, + 33.658036 + ], + [ + -117.83482, + 33.657636 + ] + ] + ] + }, + "properties": { + "name": "Rancho Irvine Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 171535596, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.824644, + 33.671881 + ], + [ + -117.824419, + 33.672388 + ], + [ + -117.824336, + 33.672499 + ], + [ + -117.824274, + 33.672557 + ], + [ + -117.824171, + 33.672567 + ], + [ + -117.823941, + 33.673055 + ], + [ + -117.824077, + 33.673108 + ], + [ + -117.823655, + 33.673961 + ], + [ + -117.824162, + 33.674133 + ], + [ + -117.824583, + 33.673261 + ], + [ + -117.824693, + 33.673303 + ], + [ + -117.825309, + 33.672092 + ], + [ + -117.824644, + 33.671881 + ] + ] + ] + }, + "properties": { + "name": "Culverwood Wilderness Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 171554253, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.841629, + 33.65391 + ], + [ + -117.841846, + 33.654242 + ], + [ + -117.842373, + 33.654692 + ], + [ + -117.842915, + 33.65484 + ], + [ + -117.84312, + 33.654626 + ], + [ + -117.843144, + 33.654394 + ], + [ + -117.843087, + 33.654231 + ], + [ + -117.84252, + 33.653624 + ], + [ + -117.841629, + 33.65391 + ] + ] + ] + }, + "properties": { + "name": "Stanford Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 171554254, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.84207, + 33.655433 + ], + [ + -117.843296, + 33.655771 + ], + [ + -117.843008, + 33.655889 + ], + [ + -117.842769, + 33.656069 + ], + [ + -117.842704, + 33.656235 + ], + [ + -117.84262, + 33.656425 + ], + [ + -117.842465, + 33.656529 + ], + [ + -117.84221, + 33.656608 + ], + [ + -117.841863, + 33.656536 + ], + [ + -117.841561, + 33.656179 + ], + [ + -117.841711, + 33.655836 + ], + [ + -117.841878, + 33.655881 + ], + [ + -117.84207, + 33.655433 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 171558525, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.835883, + 33.638343 + ], + [ + -117.835768, + 33.638113 + ], + [ + -117.835528, + 33.637829 + ], + [ + -117.8355, + 33.637757 + ], + [ + -117.835403, + 33.637498 + ], + [ + -117.835239, + 33.63703 + ], + [ + -117.83473, + 33.637108 + ], + [ + -117.833807, + 33.637075 + ], + [ + -117.833799, + 33.637444 + ], + [ + -117.833827, + 33.637547 + ], + [ + -117.833899, + 33.637637 + ], + [ + -117.83438, + 33.637997 + ], + [ + -117.834431, + 33.638049 + ], + [ + -117.834707, + 33.63833 + ], + [ + -117.834865, + 33.638405 + ], + [ + -117.835062, + 33.638452 + ], + [ + -117.835285, + 33.638472 + ], + [ + -117.835607, + 33.638348 + ], + [ + -117.835883, + 33.638343 + ] + ] + ] + }, + "properties": { + "name": "Gabrielino Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 171558526, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.842094, + 33.635748 + ], + [ + -117.841995, + 33.635682 + ], + [ + -117.841864, + 33.635675 + ], + [ + -117.841514, + 33.635612 + ], + [ + -117.841355, + 33.635398 + ], + [ + -117.841185, + 33.635236 + ], + [ + -117.840958, + 33.63536 + ], + [ + -117.841136, + 33.635658 + ], + [ + -117.840767, + 33.635779 + ], + [ + -117.840878, + 33.636104 + ], + [ + -117.840943, + 33.636113 + ], + [ + -117.841163, + 33.636032 + ], + [ + -117.841364, + 33.636381 + ], + [ + -117.841374, + 33.636518 + ], + [ + -117.841536, + 33.636829 + ], + [ + -117.841555, + 33.637053 + ], + [ + -117.84149, + 33.637232 + ], + [ + -117.841567, + 33.637569 + ], + [ + -117.841529, + 33.637841 + ], + [ + -117.841374, + 33.637998 + ], + [ + -117.841205, + 33.638109 + ], + [ + -117.841035, + 33.63817 + ], + [ + -117.841048, + 33.6383 + ], + [ + -117.842069, + 33.638248 + ], + [ + -117.842059, + 33.637785 + ], + [ + -117.84222, + 33.637583 + ], + [ + -117.842617, + 33.637418 + ], + [ + -117.842845, + 33.63731 + ], + [ + -117.842964, + 33.63713 + ], + [ + -117.842418, + 33.637031 + ], + [ + -117.841924, + 33.636856 + ], + [ + -117.841743, + 33.636672 + ], + [ + -117.841628, + 33.636431 + ], + [ + -117.841644, + 33.636357 + ], + [ + -117.842061, + 33.636315 + ], + [ + -117.842226, + 33.636203 + ], + [ + -117.842275, + 33.636102 + ], + [ + -117.842311, + 33.635952 + ], + [ + -117.842094, + 33.635748 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 171558527, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.840716, + 33.639674 + ], + [ + -117.840625, + 33.639814 + ], + [ + -117.840303, + 33.639967 + ], + [ + -117.839972, + 33.639909 + ], + [ + -117.83986, + 33.639838 + ], + [ + -117.839643, + 33.639916 + ], + [ + -117.8396, + 33.640099 + ], + [ + -117.839562, + 33.640177 + ], + [ + -117.839698, + 33.640213 + ], + [ + -117.839813, + 33.640158 + ], + [ + -117.83994, + 33.640224 + ], + [ + -117.840062, + 33.640346 + ], + [ + -117.840063, + 33.640503 + ], + [ + -117.840036, + 33.640654 + ], + [ + -117.839968, + 33.640741 + ], + [ + -117.839808, + 33.640844 + ], + [ + -117.839711, + 33.640858 + ], + [ + -117.839846, + 33.640981 + ], + [ + -117.84002, + 33.640861 + ], + [ + -117.840142, + 33.640795 + ], + [ + -117.840205, + 33.640791 + ], + [ + -117.840298, + 33.641024 + ], + [ + -117.840286, + 33.641193 + ], + [ + -117.840228, + 33.641328 + ], + [ + -117.840176, + 33.64155 + ], + [ + -117.84003, + 33.64175 + ], + [ + -117.840016, + 33.642049 + ], + [ + -117.839936, + 33.642274 + ], + [ + -117.839793, + 33.642401 + ], + [ + -117.839619, + 33.642477 + ], + [ + -117.839456, + 33.642552 + ], + [ + -117.839321, + 33.642675 + ], + [ + -117.839317, + 33.642687 + ], + [ + -117.839896, + 33.642651 + ], + [ + -117.840435, + 33.642581 + ], + [ + -117.840876, + 33.642474 + ], + [ + -117.840629, + 33.64229 + ], + [ + -117.840439, + 33.642173 + ], + [ + -117.840274, + 33.641947 + ], + [ + -117.840236, + 33.641818 + ], + [ + -117.840405, + 33.641591 + ], + [ + -117.840419, + 33.641573 + ], + [ + -117.840461, + 33.641561 + ], + [ + -117.840517, + 33.641544 + ], + [ + -117.840643, + 33.641507 + ], + [ + -117.840683, + 33.641466 + ], + [ + -117.840661, + 33.641323 + ], + [ + -117.840546, + 33.641208 + ], + [ + -117.840572, + 33.641137 + ], + [ + -117.841122, + 33.640905 + ], + [ + -117.841306, + 33.640419 + ], + [ + -117.840953, + 33.640269 + ], + [ + -117.840865, + 33.63996 + ], + [ + -117.840905, + 33.639745 + ], + [ + -117.840716, + 33.639674 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 171560917, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.848822, + 33.646553 + ], + [ + -117.848116, + 33.646804 + ], + [ + -117.847602, + 33.647421 + ], + [ + -117.846948, + 33.648331 + ], + [ + -117.846629, + 33.648606 + ], + [ + -117.845851, + 33.648905 + ], + [ + -117.845971, + 33.649464 + ], + [ + -117.847289, + 33.6501 + ], + [ + -117.846787, + 33.651281 + ], + [ + -117.84683, + 33.651641 + ], + [ + -117.847016, + 33.651904 + ], + [ + -117.847396, + 33.652153 + ], + [ + -117.848026, + 33.652214 + ], + [ + -117.848818, + 33.651757 + ], + [ + -117.850947, + 33.651021 + ], + [ + -117.853266, + 33.65059 + ], + [ + -117.85289, + 33.649871 + ], + [ + -117.852766, + 33.64893 + ], + [ + -117.851922, + 33.648676 + ], + [ + -117.850984, + 33.647814 + ], + [ + -117.849888, + 33.647469 + ], + [ + -117.849413, + 33.647206 + ], + [ + -117.848999, + 33.646841 + ], + [ + -117.848822, + 33.646553 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036719, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.960867, + 33.73498 + ], + [ + -117.959542, + 33.735569 + ], + [ + -117.959299, + 33.735245 + ], + [ + -117.959423, + 33.735161 + ], + [ + -117.95951, + 33.73493 + ], + [ + -117.95951, + 33.73458 + ], + [ + -117.96073, + 33.73458 + ], + [ + -117.960867, + 33.73498 + ] + ] + ] + }, + "properties": { + "name": "Cloverdale Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036721, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.998578, + 33.737694 + ], + [ + -117.99906, + 33.737688 + ], + [ + -117.999072, + 33.737896 + ], + [ + -117.99927, + 33.738142 + ], + [ + -117.9996, + 33.738291 + ], + [ + -118.000016, + 33.738284 + ], + [ + -118.000028, + 33.73891 + ], + [ + -117.999608, + 33.738919 + ], + [ + -117.999085, + 33.739336 + ], + [ + -117.998593, + 33.738906 + ], + [ + -117.998578, + 33.737694 + ] + ] + ] + }, + "properties": { + "name": "College Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036724, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.011817, + 33.724805 + ], + [ + -118.011866, + 33.724772 + ], + [ + -118.012159, + 33.724768 + ], + [ + -118.012159, + 33.725031 + ], + [ + -118.013055, + 33.725034 + ], + [ + -118.013056, + 33.727505 + ], + [ + -118.012254, + 33.727507 + ], + [ + -118.012232, + 33.726409 + ], + [ + -118.011894, + 33.726406 + ], + [ + -118.011905, + 33.726242 + ], + [ + -118.011925, + 33.726168 + ], + [ + -118.011925, + 33.726099 + ], + [ + -118.011903, + 33.726043 + ], + [ + -118.011834, + 33.725983 + ], + [ + -118.011737, + 33.725948 + ], + [ + -118.011533, + 33.725979 + ], + [ + -118.011352, + 33.725987 + ], + [ + -118.011371, + 33.725781 + ], + [ + -118.011377, + 33.725653 + ], + [ + -118.011466, + 33.725438 + ], + [ + -118.01161, + 33.725267 + ], + [ + -118.011697, + 33.725149 + ], + [ + -118.011754, + 33.725068 + ], + [ + -118.011792, + 33.724972 + ], + [ + -118.011817, + 33.724805 + ] + ] + ] + }, + "properties": { + "name": "College View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036725, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.966864, + 33.740749 + ], + [ + -117.966864, + 33.740729 + ], + [ + -117.966856, + 33.740164 + ], + [ + -117.966855, + 33.740111 + ], + [ + -117.967845, + 33.740102 + ], + [ + -117.967844, + 33.740052 + ], + [ + -117.968245, + 33.740048 + ], + [ + -117.968255, + 33.740736 + ], + [ + -117.966864, + 33.740749 + ] + ] + ] + }, + "properties": { + "name": "Coronet Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036727, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.977575, + 33.701435 + ], + [ + -117.978157, + 33.701425 + ], + [ + -117.978172, + 33.703718 + ], + [ + -117.978209, + 33.706077 + ], + [ + -117.978295, + 33.71111 + ], + [ + -117.977706, + 33.711121 + ], + [ + -117.977615, + 33.708511 + ], + [ + -117.977612, + 33.706176 + ], + [ + -117.9776, + 33.705994 + ], + [ + -117.977571, + 33.703627 + ], + [ + -117.977575, + 33.701435 + ] + ] + ] + }, + "properties": { + "name": "Fulton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036728, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.011201, + 33.734167 + ], + [ + -118.011258, + 33.734119 + ], + [ + -118.012329, + 33.734112 + ], + [ + -118.012323, + 33.734761 + ], + [ + -118.013058, + 33.734754 + ], + [ + -118.01306, + 33.734922 + ], + [ + -118.01412, + 33.734913 + ], + [ + -118.014132, + 33.735814 + ], + [ + -118.011284, + 33.73584 + ], + [ + -118.011288, + 33.736123 + ], + [ + -118.01123, + 33.736123 + ], + [ + -118.011201, + 33.734167 + ] + ] + ] + }, + "properties": { + "name": "Glen View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036731, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.01306, + 33.712907 + ], + [ + -118.012502, + 33.712903 + ], + [ + -118.011859, + 33.712906 + ], + [ + -118.011763, + 33.712858 + ], + [ + -118.011713, + 33.712766 + ], + [ + -118.011716, + 33.712416 + ], + [ + -118.011712, + 33.71221 + ], + [ + -118.011657, + 33.712105 + ], + [ + -118.011617, + 33.712033 + ], + [ + -118.011646, + 33.711985 + ], + [ + -118.011775, + 33.711869 + ], + [ + -118.012139, + 33.711868 + ], + [ + -118.01228, + 33.711868 + ], + [ + -118.012296, + 33.711868 + ], + [ + -118.012287, + 33.711335 + ], + [ + -118.013049, + 33.711329 + ], + [ + -118.01306, + 33.712907 + ] + ] + ] + }, + "properties": { + "name": "Golden View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036732, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.009305, + 33.737142 + ], + [ + -118.009261, + 33.737198 + ], + [ + -118.00914, + 33.737239 + ], + [ + -118.009146, + 33.738683 + ], + [ + -118.008846, + 33.73871 + ], + [ + -118.008718, + 33.73877 + ], + [ + -118.008691, + 33.739319 + ], + [ + -118.007683, + 33.739342 + ], + [ + -118.007643, + 33.737331 + ], + [ + -118.007907, + 33.737318 + ], + [ + -118.007884, + 33.735537 + ], + [ + -118.007934, + 33.735539 + ], + [ + -118.007951, + 33.735872 + ], + [ + -118.009119, + 33.736047 + ], + [ + -118.009305, + 33.736865 + ], + [ + -118.009305, + 33.737142 + ] + ] + ] + }, + "properties": { + "name": "Greer Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036733, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.998964, + 33.76642 + ], + [ + -117.998923, + 33.762867 + ], + [ + -117.999427, + 33.762868 + ], + [ + -117.999461, + 33.766419 + ], + [ + -117.999169, + 33.76642 + ], + [ + -117.998964, + 33.76642 + ] + ] + ] + }, + "properties": { + "name": "Hoover Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036734, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.010987, + 33.718432 + ], + [ + -118.012688, + 33.718409 + ], + [ + -118.012696, + 33.719679 + ], + [ + -118.012325, + 33.719683 + ], + [ + -118.01233, + 33.72001 + ], + [ + -118.011942, + 33.720131 + ], + [ + -118.011024, + 33.720942 + ], + [ + -118.011019, + 33.7211 + ], + [ + -118.01059, + 33.72113 + ], + [ + -118.010467, + 33.721089 + ], + [ + -118.010172, + 33.721082 + ], + [ + -118.010152, + 33.719532 + ], + [ + -118.010483, + 33.719528 + ], + [ + -118.010582, + 33.719648 + ], + [ + -118.010988, + 33.719658 + ], + [ + -118.010987, + 33.718432 + ] + ] + ] + }, + "properties": { + "name": "Irby Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036737, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.956975, + 33.712624 + ], + [ + -117.957101, + 33.712317 + ], + [ + -117.957102, + 33.71221 + ], + [ + -117.958023, + 33.712074 + ], + [ + -117.957957, + 33.712199 + ], + [ + -117.957959, + 33.712489 + ], + [ + -117.958787, + 33.712495 + ], + [ + -117.958792, + 33.712879 + ], + [ + -117.958624, + 33.712885 + ], + [ + -117.958372, + 33.712914 + ], + [ + -117.957154, + 33.712952 + ], + [ + -117.957087, + 33.712937 + ], + [ + -117.957018, + 33.712878 + ], + [ + -117.957005, + 33.712805 + ], + [ + -117.957002, + 33.712707 + ], + [ + -117.956975, + 33.712624 + ] + ] + ] + }, + "properties": { + "name": "La Capilla Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036739, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.982153, + 33.709535 + ], + [ + -117.982221, + 33.709535 + ], + [ + -117.98222, + 33.70944 + ], + [ + -117.982869, + 33.709433 + ], + [ + -117.982873, + 33.70858 + ], + [ + -117.983377, + 33.708573 + ], + [ + -117.983441, + 33.708823 + ], + [ + -117.983472, + 33.710936 + ], + [ + -117.983269, + 33.711351 + ], + [ + -117.981546, + 33.711363 + ], + [ + -117.981546, + 33.710328 + ], + [ + -117.981764, + 33.710233 + ], + [ + -117.981761, + 33.710024 + ], + [ + -117.982158, + 33.710021 + ], + [ + -117.982153, + 33.709535 + ] + ] + ] + }, + "properties": { + "name": "Lake View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036740, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.996684, + 33.743528 + ], + [ + -117.996677, + 33.74263 + ], + [ + -117.998273, + 33.742621 + ], + [ + -117.99828, + 33.74352 + ], + [ + -117.996684, + 33.743528 + ] + ] + ] + }, + "properties": { + "name": "Land Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036741, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.985389, + 33.761654 + ], + [ + -117.983704, + 33.76167 + ], + [ + -117.983684, + 33.760279 + ], + [ + -117.984925, + 33.760267 + ], + [ + -117.984921, + 33.760033 + ], + [ + -117.985366, + 33.760029 + ], + [ + -117.985389, + 33.761654 + ] + ] + ] + }, + "properties": { + "name": "Liberty Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036742, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.002377, + 33.719204 + ], + [ + -118.002403, + 33.717654 + ], + [ + -118.006485, + 33.717627 + ], + [ + -118.006515, + 33.719158 + ], + [ + -118.004485, + 33.719193 + ], + [ + -118.002377, + 33.719204 + ] + ] + ] + }, + "properties": { + "name": "Murdy Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036743, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.958091, + 33.748572 + ], + [ + -117.959231, + 33.74856 + ], + [ + -117.959236, + 33.74928 + ], + [ + -117.958096, + 33.749281 + ], + [ + -117.958091, + 33.748572 + ] + ] + ] + }, + "properties": { + "name": "Newcastle Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036747, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.980627, + 33.733105 + ], + [ + -117.980633, + 33.734497 + ], + [ + -117.979355, + 33.734504 + ], + [ + -117.978525, + 33.734251 + ], + [ + -117.978124, + 33.734236 + ], + [ + -117.978066, + 33.730423 + ], + [ + -117.978691, + 33.730417 + ], + [ + -117.978691, + 33.731439 + ], + [ + -117.978703, + 33.732098 + ], + [ + -117.978736, + 33.73324 + ], + [ + -117.978907, + 33.73328 + ], + [ + -117.979096, + 33.733274 + ], + [ + -117.980045, + 33.733077 + ], + [ + -117.980627, + 33.733105 + ] + ] + ] + }, + "properties": { + "name": "Russel C Paris Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036749, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.985321, + 33.756369 + ], + [ + -117.984494, + 33.756386 + ], + [ + -117.984472, + 33.755671 + ], + [ + -117.985298, + 33.755653 + ], + [ + -117.985321, + 33.756369 + ] + ] + ] + }, + "properties": { + "name": "Sid Goldstein Freedom Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036750, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.00058, + 33.75682 + ], + [ + -118.001861, + 33.756816 + ], + [ + -118.00368, + 33.75681 + ], + [ + -118.00368, + 33.75785 + ], + [ + -118.00061, + 33.75786 + ], + [ + -118.00058, + 33.75682 + ] + ] + ] + }, + "properties": { + "name": "Sigler Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036751, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.968687, + 33.727142 + ], + [ + -117.968711, + 33.728029 + ], + [ + -117.967178, + 33.728059 + ], + [ + -117.967172, + 33.727167 + ], + [ + -117.968051, + 33.727145 + ], + [ + -117.968154, + 33.727097 + ], + [ + -117.968687, + 33.727142 + ] + ] + ] + }, + "properties": { + "name": "Vista View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172036753, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.977668, + 33.711297 + ], + [ + -117.9783, + 33.711293 + ], + [ + -117.97837, + 33.715644 + ], + [ + -117.977708, + 33.715657 + ], + [ + -117.977701, + 33.714481 + ], + [ + -117.977668, + 33.711297 + ] + ] + ] + }, + "properties": { + "name": "Westmont Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172072023, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.761202, + 33.796588 + ], + [ + -117.760714, + 33.796632 + ], + [ + -117.76044, + 33.79644 + ], + [ + -117.760031, + 33.795931 + ], + [ + -117.758382, + 33.795293 + ], + [ + -117.758026, + 33.793983 + ], + [ + -117.756684, + 33.793368 + ], + [ + -117.754475, + 33.793937 + ], + [ + -117.747555, + 33.789453 + ], + [ + -117.742773, + 33.792753 + ], + [ + -117.740839, + 33.793329 + ], + [ + -117.740091, + 33.794358 + ], + [ + -117.73993, + 33.796046 + ], + [ + -117.740644, + 33.796484 + ], + [ + -117.741508, + 33.79675 + ], + [ + -117.74306, + 33.796799 + ], + [ + -117.743588, + 33.796838 + ], + [ + -117.744661, + 33.797651 + ], + [ + -117.745276, + 33.79808 + ], + [ + -117.746113, + 33.798635 + ], + [ + -117.747017, + 33.799293 + ], + [ + -117.748687, + 33.800432 + ], + [ + -117.749582, + 33.799505 + ], + [ + -117.750564, + 33.800332 + ], + [ + -117.750789, + 33.80052 + ], + [ + -117.753147, + 33.801537 + ], + [ + -117.754028, + 33.801562 + ], + [ + -117.755035, + 33.801002 + ], + [ + -117.755277, + 33.801109 + ], + [ + -117.755493, + 33.801136 + ], + [ + -117.755452, + 33.801671 + ], + [ + -117.755425, + 33.802025 + ], + [ + -117.755817, + 33.802695 + ], + [ + -117.755944, + 33.802911 + ], + [ + -117.756547, + 33.803444 + ], + [ + -117.756905, + 33.803602 + ], + [ + -117.756861, + 33.806058 + ], + [ + -117.756859, + 33.80615 + ], + [ + -117.756976, + 33.807379 + ], + [ + -117.757637, + 33.808395 + ], + [ + -117.757899, + 33.808824 + ], + [ + -117.758701, + 33.808959 + ], + [ + -117.759663, + 33.808255 + ], + [ + -117.76023, + 33.807149 + ], + [ + -117.76106, + 33.804038 + ], + [ + -117.761695, + 33.801042 + ], + [ + -117.76276, + 33.799691 + ], + [ + -117.763227, + 33.79921 + ], + [ + -117.761202, + 33.796588 + ] + ] + ] + }, + "properties": { + "name": "Irvine Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172072027, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.758701, + 33.808959 + ], + [ + -117.757384, + 33.811337 + ], + [ + -117.756089, + 33.812442 + ], + [ + -117.744607, + 33.825676 + ], + [ + -117.736861, + 33.832823 + ], + [ + -117.741217, + 33.836085 + ], + [ + -117.743119, + 33.835388 + ], + [ + -117.742869, + 33.833946 + ], + [ + -117.744463, + 33.833167 + ], + [ + -117.744114, + 33.829864 + ], + [ + -117.744678, + 33.827934 + ], + [ + -117.745867, + 33.826946 + ], + [ + -117.747382, + 33.826205 + ], + [ + -117.751401, + 33.82664 + ], + [ + -117.76222, + 33.827019 + ], + [ + -117.763284, + 33.825538 + ], + [ + -117.766403, + 33.826081 + ], + [ + -117.76801, + 33.826065 + ], + [ + -117.769766, + 33.825088 + ], + [ + -117.775151, + 33.823476 + ], + [ + -117.777325, + 33.822319 + ], + [ + -117.776942, + 33.8217 + ], + [ + -117.776655, + 33.821158 + ], + [ + -117.776384, + 33.820643 + ], + [ + -117.774646, + 33.820799 + ], + [ + -117.7744, + 33.820336 + ], + [ + -117.77431, + 33.820017 + ], + [ + -117.775348, + 33.819026 + ], + [ + -117.774972, + 33.818073 + ], + [ + -117.773624, + 33.81807 + ], + [ + -117.770971, + 33.818182 + ], + [ + -117.769288, + 33.817316 + ], + [ + -117.76905, + 33.816783 + ], + [ + -117.769035, + 33.816354 + ], + [ + -117.76869, + 33.816472 + ], + [ + -117.768562, + 33.816138 + ], + [ + -117.76635, + 33.815616 + ], + [ + -117.76508, + 33.817059 + ], + [ + -117.762913, + 33.816485 + ], + [ + -117.763007, + 33.814576 + ], + [ + -117.766508, + 33.812526 + ], + [ + -117.765907, + 33.811385 + ], + [ + -117.7661, + 33.810449 + ], + [ + -117.76624, + 33.80962 + ], + [ + -117.76624, + 33.808256 + ], + [ + -117.766079, + 33.806687 + ], + [ + -117.765746, + 33.805279 + ], + [ + -117.765553, + 33.804271 + ], + [ + -117.765586, + 33.803513 + ], + [ + -117.765272, + 33.80208 + ], + [ + -117.765044, + 33.801283 + ], + [ + -117.765012, + 33.800634 + ], + [ + -117.7648, + 33.800229 + ], + [ + -117.764572, + 33.799594 + ], + [ + -117.764263, + 33.799229 + ], + [ + -117.763805, + 33.798849 + ], + [ + -117.763526, + 33.798806 + ], + [ + -117.763227, + 33.79921 + ], + [ + -117.76276, + 33.799691 + ], + [ + -117.761695, + 33.801042 + ], + [ + -117.76106, + 33.804038 + ], + [ + -117.76023, + 33.807149 + ], + [ + -117.759663, + 33.808255 + ], + [ + -117.758701, + 33.808959 + ] + ] + ] + }, + "properties": { + "name": "Santiago Oaks Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172093838, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.712878, + 33.550447 + ], + [ + -117.713047, + 33.55057 + ], + [ + -117.713298, + 33.550941 + ], + [ + -117.713817, + 33.551098 + ], + [ + -117.714513, + 33.551185 + ], + [ + -117.715037, + 33.551159 + ], + [ + -117.714835, + 33.550606 + ], + [ + -117.716364, + 33.550458 + ], + [ + -117.716971, + 33.550371 + ], + [ + -117.71707, + 33.550594 + ], + [ + -117.717509, + 33.551436 + ], + [ + -117.717841, + 33.552069 + ], + [ + -117.717909, + 33.55222 + ], + [ + -117.717932, + 33.55321 + ], + [ + -117.718061, + 33.553933 + ], + [ + -117.717831, + 33.555106 + ], + [ + -117.716078, + 33.554873 + ], + [ + -117.714876, + 33.554562 + ], + [ + -117.713953, + 33.554282 + ], + [ + -117.712734, + 33.553575 + ], + [ + -117.712718, + 33.553378 + ], + [ + -117.712265, + 33.55313 + ], + [ + -117.710648, + 33.553394 + ], + [ + -117.710613, + 33.553283 + ], + [ + -117.710502, + 33.553254 + ], + [ + -117.710415, + 33.553265 + ], + [ + -117.710129, + 33.553344 + ], + [ + -117.709555, + 33.553554 + ], + [ + -117.709391, + 33.553315 + ], + [ + -117.709045, + 33.552928 + ], + [ + -117.708877, + 33.552791 + ], + [ + -117.708632, + 33.55259 + ], + [ + -117.708404, + 33.552429 + ], + [ + -117.708122, + 33.552259 + ], + [ + -117.707867, + 33.552121 + ], + [ + -117.707506, + 33.551926 + ], + [ + -117.707133, + 33.551734 + ], + [ + -117.706811, + 33.551523 + ], + [ + -117.706582, + 33.551356 + ], + [ + -117.706318, + 33.551133 + ], + [ + -117.706081, + 33.550914 + ], + [ + -117.705864, + 33.550657 + ], + [ + -117.705658, + 33.550388 + ], + [ + -117.705521, + 33.55018 + ], + [ + -117.705392, + 33.549966 + ], + [ + -117.705223, + 33.549534 + ], + [ + -117.70504, + 33.549096 + ], + [ + -117.704914, + 33.548861 + ], + [ + -117.704788, + 33.54864 + ], + [ + -117.70466, + 33.548435 + ], + [ + -117.704523, + 33.548224 + ], + [ + -117.704357, + 33.548032 + ], + [ + -117.704231, + 33.547892 + ], + [ + -117.704078, + 33.547729 + ], + [ + -117.703908, + 33.547547 + ], + [ + -117.7037, + 33.54735 + ], + [ + -117.703541, + 33.547198 + ], + [ + -117.703383, + 33.547026 + ], + [ + -117.703203, + 33.546796 + ], + [ + -117.703042, + 33.546574 + ], + [ + -117.702938, + 33.546392 + ], + [ + -117.70283, + 33.546183 + ], + [ + -117.702718, + 33.545924 + ], + [ + -117.702626, + 33.545687 + ], + [ + -117.702563, + 33.545442 + ], + [ + -117.702517, + 33.545195 + ], + [ + -117.702508, + 33.544929 + ], + [ + -117.702504, + 33.544722 + ], + [ + -117.702511, + 33.544525 + ], + [ + -117.702541, + 33.544312 + ], + [ + -117.702573, + 33.5441 + ], + [ + -117.702613, + 33.543885 + ], + [ + -117.70267, + 33.543669 + ], + [ + -117.702742, + 33.543483 + ], + [ + -117.702873, + 33.543233 + ], + [ + -117.703174, + 33.542682 + ], + [ + -117.703244, + 33.542535 + ], + [ + -117.703305, + 33.542365 + ], + [ + -117.703369, + 33.542162 + ], + [ + -117.703415, + 33.541967 + ], + [ + -117.703441, + 33.541782 + ], + [ + -117.70345, + 33.541599 + ], + [ + -117.70385, + 33.541715 + ], + [ + -117.703777, + 33.541435 + ], + [ + -117.703736, + 33.541237 + ], + [ + -117.703756, + 33.54104 + ], + [ + -117.703877, + 33.540813 + ], + [ + -117.703989, + 33.540637 + ], + [ + -117.704135, + 33.54037 + ], + [ + -117.70412, + 33.539743 + ], + [ + -117.704207, + 33.539682 + ], + [ + -117.70524, + 33.540278 + ], + [ + -117.705508, + 33.540286 + ], + [ + -117.705762, + 33.540443 + ], + [ + -117.705743, + 33.540642 + ], + [ + -117.705438, + 33.541094 + ], + [ + -117.705806, + 33.542021 + ], + [ + -117.705894, + 33.543796 + ], + [ + -117.705912, + 33.544137 + ], + [ + -117.705985, + 33.544375 + ], + [ + -117.706144, + 33.544518 + ], + [ + -117.706366, + 33.544751 + ], + [ + -117.707625, + 33.545958 + ], + [ + -117.707953, + 33.54639 + ], + [ + -117.707944, + 33.546558 + ], + [ + -117.707941, + 33.546614 + ], + [ + -117.708755, + 33.547568 + ], + [ + -117.708928, + 33.547867 + ], + [ + -117.709193, + 33.548061 + ], + [ + -117.70958, + 33.548387 + ], + [ + -117.709681, + 33.548539 + ], + [ + -117.709692, + 33.548743 + ], + [ + -117.709549, + 33.549059 + ], + [ + -117.709345, + 33.549232 + ], + [ + -117.709144, + 33.549478 + ], + [ + -117.710055, + 33.549504 + ], + [ + -117.711152, + 33.549429 + ], + [ + -117.712878, + 33.550447 + ] + ] + ] + }, + "properties": { + "name": "Laguna Niguel Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172093839, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.712708, + 33.553869 + ], + [ + -117.712306, + 33.553917 + ], + [ + -117.71198, + 33.554224 + ], + [ + -117.711548, + 33.554121 + ], + [ + -117.7111, + 33.554257 + ], + [ + -117.711018, + 33.554333 + ], + [ + -117.710652, + 33.554384 + ], + [ + -117.710143, + 33.554236 + ], + [ + -117.710025, + 33.554259 + ], + [ + -117.709975, + 33.554087 + ], + [ + -117.710343, + 33.553606 + ], + [ + -117.710648, + 33.553394 + ], + [ + -117.712265, + 33.55313 + ], + [ + -117.712718, + 33.553378 + ], + [ + -117.712734, + 33.553575 + ], + [ + -117.712708, + 33.553869 + ] + ] + ] + }, + "properties": { + "name": "La Paz Sports Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172362300, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.685105, + 33.871209 + ], + [ + -117.685128, + 33.871166 + ], + [ + -117.686769, + 33.871822 + ], + [ + -117.686819, + 33.87173 + ], + [ + -117.686924, + 33.871538 + ], + [ + -117.685995, + 33.871166 + ], + [ + -117.684846, + 33.870697 + ], + [ + -117.684053, + 33.870395 + ], + [ + -117.683957, + 33.870271 + ], + [ + -117.684195, + 33.870303 + ], + [ + -117.684264, + 33.870287 + ], + [ + -117.684368, + 33.87022 + ], + [ + -117.685642, + 33.870604 + ], + [ + -117.686926, + 33.871 + ], + [ + -117.687449, + 33.871154 + ], + [ + -117.687363, + 33.871323 + ], + [ + -117.686349, + 33.871036 + ], + [ + -117.686307, + 33.871026 + ], + [ + -117.686274, + 33.871116 + ], + [ + -117.68708, + 33.87134 + ], + [ + -117.687126, + 33.871367 + ], + [ + -117.687136, + 33.871394 + ], + [ + -117.687129, + 33.871436 + ], + [ + -117.68681, + 33.87192 + ], + [ + -117.686503, + 33.872453 + ], + [ + -117.686405, + 33.872563 + ], + [ + -117.686367, + 33.872585 + ], + [ + -117.686326, + 33.872585 + ], + [ + -117.686295, + 33.872564 + ], + [ + -117.685275, + 33.871859 + ], + [ + -117.684758, + 33.87147 + ], + [ + -117.684739, + 33.871451 + ], + [ + -117.6844, + 33.871234 + ], + [ + -117.685896, + 33.871902 + ], + [ + -117.68656, + 33.872205 + ], + [ + -117.68666, + 33.872017 + ], + [ + -117.686702, + 33.871944 + ], + [ + -117.685105, + 33.871209 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172364848, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.735702, + 33.575547 + ], + [ + -117.735849, + 33.575373 + ], + [ + -117.736211, + 33.575576 + ], + [ + -117.736283, + 33.575614 + ], + [ + -117.736745, + 33.575965 + ], + [ + -117.736395, + 33.576458 + ], + [ + -117.735738, + 33.57618 + ], + [ + -117.735563, + 33.576083 + ], + [ + -117.73551, + 33.575916 + ], + [ + -117.735617, + 33.575708 + ], + [ + -117.735702, + 33.575547 + ] + ] + ] + }, + "properties": { + "name": "Acorn Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172577037, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.884986, + 33.882212 + ], + [ + -117.884929, + 33.88217 + ], + [ + -117.884888, + 33.882135 + ], + [ + -117.884834, + 33.882077 + ], + [ + -117.884805, + 33.882018 + ], + [ + -117.884796, + 33.881999 + ], + [ + -117.884785, + 33.88199 + ], + [ + -117.88477, + 33.881981 + ], + [ + -117.88475, + 33.881977 + ], + [ + -117.884726, + 33.881979 + ], + [ + -117.884709, + 33.881988 + ], + [ + -117.884687, + 33.88201 + ], + [ + -117.884616, + 33.882101 + ], + [ + -117.884593, + 33.882147 + ], + [ + -117.884575, + 33.882195 + ], + [ + -117.884567, + 33.882278 + ], + [ + -117.884572, + 33.882344 + ], + [ + -117.884582, + 33.882366 + ], + [ + -117.884597, + 33.882376 + ], + [ + -117.884615, + 33.882381 + ], + [ + -117.884637, + 33.882382 + ], + [ + -117.884964, + 33.882245 + ], + [ + -117.884987, + 33.882232 + ], + [ + -117.884992, + 33.882229 + ], + [ + -117.884994, + 33.882224 + ], + [ + -117.884992, + 33.882218 + ], + [ + -117.884986, + 33.882212 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172577038, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.884495, + 33.882096 + ], + [ + -117.884466, + 33.882048 + ], + [ + -117.884432, + 33.882005 + ], + [ + -117.884402, + 33.881984 + ], + [ + -117.884375, + 33.881972 + ], + [ + -117.884334, + 33.881963 + ], + [ + -117.884244, + 33.881952 + ], + [ + -117.884168, + 33.881951 + ], + [ + -117.884077, + 33.881958 + ], + [ + -117.883985, + 33.881974 + ], + [ + -117.88391, + 33.881996 + ], + [ + -117.883827, + 33.882032 + ], + [ + -117.883764, + 33.882078 + ], + [ + -117.883729, + 33.882113 + ], + [ + -117.883698, + 33.882156 + ], + [ + -117.883674, + 33.882204 + ], + [ + -117.883659, + 33.882253 + ], + [ + -117.883653, + 33.882316 + ], + [ + -117.88366, + 33.882391 + ], + [ + -117.883678, + 33.882458 + ], + [ + -117.883706, + 33.882512 + ], + [ + -117.883753, + 33.88256 + ], + [ + -117.883794, + 33.882587 + ], + [ + -117.883848, + 33.88261 + ], + [ + -117.883919, + 33.882625 + ], + [ + -117.883973, + 33.88263 + ], + [ + -117.884098, + 33.882629 + ], + [ + -117.884326, + 33.882624 + ], + [ + -117.884366, + 33.882585 + ], + [ + -117.884396, + 33.882539 + ], + [ + -117.884448, + 33.882414 + ], + [ + -117.884488, + 33.882302 + ], + [ + -117.884506, + 33.882217 + ], + [ + -117.88451, + 33.882156 + ], + [ + -117.884506, + 33.882118 + ], + [ + -117.884495, + 33.882096 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172579061, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.885434, + 33.882389 + ], + [ + -117.885605, + 33.882488 + ], + [ + -117.885687, + 33.882472 + ], + [ + -117.885704, + 33.882425 + ], + [ + -117.885704, + 33.882416 + ], + [ + -117.885697, + 33.882408 + ], + [ + -117.885684, + 33.882401 + ], + [ + -117.885656, + 33.8824 + ], + [ + -117.885557, + 33.882401 + ], + [ + -117.885493, + 33.882395 + ], + [ + -117.885434, + 33.882389 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172579071, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.886352, + 33.881499 + ], + [ + -117.886348, + 33.881283 + ], + [ + -117.885958, + 33.881107 + ], + [ + -117.885808, + 33.881109 + ], + [ + -117.885817, + 33.881523 + ], + [ + -117.885956, + 33.881523 + ], + [ + -117.886024, + 33.881503 + ], + [ + -117.886352, + 33.881499 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172587249, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.885632, + 33.88022 + ], + [ + -117.885642, + 33.880577 + ], + [ + -117.885601, + 33.880577 + ], + [ + -117.885602, + 33.880604 + ], + [ + -117.885466, + 33.880607 + ], + [ + -117.885464, + 33.880527 + ], + [ + -117.885509, + 33.880526 + ], + [ + -117.885501, + 33.880223 + ], + [ + -117.885632, + 33.88022 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172591625, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.888492, + 33.880121 + ], + [ + -117.888492, + 33.880138 + ], + [ + -117.888513, + 33.880139 + ], + [ + -117.888541, + 33.880144 + ], + [ + -117.888578, + 33.880155 + ], + [ + -117.888648, + 33.880176 + ], + [ + -117.888718, + 33.880193 + ], + [ + -117.888798, + 33.880207 + ], + [ + -117.888851, + 33.880214 + ], + [ + -117.888899, + 33.880213 + ], + [ + -117.8889, + 33.880117 + ], + [ + -117.888492, + 33.880121 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172592449, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.889307, + 33.880539 + ], + [ + -117.88954, + 33.88054 + ], + [ + -117.889548, + 33.880876 + ], + [ + -117.889544, + 33.880893 + ], + [ + -117.88953, + 33.880925 + ], + [ + -117.889519, + 33.88095 + ], + [ + -117.889515, + 33.880981 + ], + [ + -117.889521, + 33.881345 + ], + [ + -117.889462, + 33.881396 + ], + [ + -117.889183, + 33.881398 + ], + [ + -117.88913, + 33.881364 + ], + [ + -117.889105, + 33.881369 + ], + [ + -117.8891, + 33.881351 + ], + [ + -117.889104, + 33.881331 + ], + [ + -117.889125, + 33.881312 + ], + [ + -117.889153, + 33.881284 + ], + [ + -117.889179, + 33.881241 + ], + [ + -117.889187, + 33.881212 + ], + [ + -117.889182, + 33.881049 + ], + [ + -117.889306, + 33.88105 + ], + [ + -117.889326, + 33.881048 + ], + [ + -117.889354, + 33.88104 + ], + [ + -117.889377, + 33.881028 + ], + [ + -117.889396, + 33.881015 + ], + [ + -117.889411, + 33.880999 + ], + [ + -117.889422, + 33.880981 + ], + [ + -117.889429, + 33.880957 + ], + [ + -117.889422, + 33.880693 + ], + [ + -117.88931, + 33.880693 + ], + [ + -117.889307, + 33.880539 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172619738, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.011899, + 33.817093 + ], + [ + -118.011886, + 33.817061 + ], + [ + -118.010972, + 33.816506 + ], + [ + -118.010974, + 33.816754 + ], + [ + -118.011553, + 33.81709 + ], + [ + -118.011899, + 33.817093 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 177387153, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.863518, + 33.727043 + ], + [ + -117.86355, + 33.726288 + ], + [ + -117.863556, + 33.725446 + ], + [ + -117.863555, + 33.724619 + ], + [ + -117.863549, + 33.723894 + ], + [ + -117.863494, + 33.723892 + ], + [ + -117.86338, + 33.723889 + ], + [ + -117.863425, + 33.727037 + ], + [ + -117.863464, + 33.727039 + ], + [ + -117.863518, + 33.727043 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 177929075, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.835478, + 33.673376 + ], + [ + -117.835381, + 33.672654 + ], + [ + -117.835333, + 33.672306 + ], + [ + -117.835293, + 33.672018 + ], + [ + -117.835279, + 33.671916 + ], + [ + -117.835261, + 33.671785 + ], + [ + -117.835252, + 33.671524 + ], + [ + -117.835249, + 33.671393 + ], + [ + -117.835244, + 33.67122 + ], + [ + -117.835243, + 33.671194 + ], + [ + -117.835221, + 33.671142 + ], + [ + -117.835195, + 33.671054 + ], + [ + -117.835159, + 33.670881 + ], + [ + -117.835158, + 33.670875 + ], + [ + -117.835153, + 33.670832 + ], + [ + -117.83515, + 33.670807 + ], + [ + -117.835192, + 33.670798 + ], + [ + -117.835217, + 33.670795 + ], + [ + -117.835291, + 33.670779 + ], + [ + -117.835299, + 33.670832 + ], + [ + -117.835309, + 33.67088 + ], + [ + -117.835358, + 33.67088 + ], + [ + -117.835375, + 33.67088 + ], + [ + -117.835397, + 33.670877 + ], + [ + -117.835419, + 33.670818 + ], + [ + -117.83542, + 33.670791 + ], + [ + -117.835418, + 33.67077 + ], + [ + -117.835577, + 33.670762 + ], + [ + -117.83558, + 33.670817 + ], + [ + -117.835593, + 33.670993 + ], + [ + -117.83561, + 33.671013 + ], + [ + -117.83562, + 33.67112 + ], + [ + -117.83566, + 33.671504 + ], + [ + -117.835699, + 33.671948 + ], + [ + -117.835744, + 33.672328 + ], + [ + -117.835732, + 33.672351 + ], + [ + -117.835692, + 33.672371 + ], + [ + -117.835683, + 33.672392 + ], + [ + -117.835694, + 33.672419 + ], + [ + -117.835728, + 33.672432 + ], + [ + -117.835744, + 33.672448 + ], + [ + -117.835747, + 33.67247 + ], + [ + -117.835756, + 33.672758 + ], + [ + -117.835768, + 33.672776 + ], + [ + -117.83579, + 33.672786 + ], + [ + -117.835796, + 33.672812 + ], + [ + -117.835792, + 33.672845 + ], + [ + -117.835781, + 33.672884 + ], + [ + -117.835783, + 33.672987 + ], + [ + -117.835776, + 33.673195 + ], + [ + -117.835742, + 33.673415 + ], + [ + -117.835713, + 33.673523 + ], + [ + -117.83563, + 33.673497 + ], + [ + -117.835613, + 33.673492 + ], + [ + -117.835617, + 33.673434 + ], + [ + -117.835539, + 33.673434 + ], + [ + -117.835539, + 33.673464 + ], + [ + -117.835117, + 33.673327 + ], + [ + -117.834585, + 33.67315 + ], + [ + -117.833976, + 33.672939 + ], + [ + -117.833284, + 33.67271 + ], + [ + -117.832759, + 33.672531 + ], + [ + -117.832178, + 33.672334 + ], + [ + -117.832053, + 33.672292 + ], + [ + -117.832072, + 33.672249 + ], + [ + -117.832077, + 33.672239 + ], + [ + -117.832206, + 33.672282 + ], + [ + -117.832545, + 33.672395 + ], + [ + -117.832853, + 33.672494 + ], + [ + -117.832889, + 33.672526 + ], + [ + -117.833587, + 33.672757 + ], + [ + -117.833717, + 33.672785 + ], + [ + -117.833779, + 33.672809 + ], + [ + -117.833876, + 33.672853 + ], + [ + -117.834112, + 33.672919 + ], + [ + -117.834242, + 33.672959 + ], + [ + -117.834406, + 33.673024 + ], + [ + -117.834802, + 33.673154 + ], + [ + -117.835294, + 33.673317 + ], + [ + -117.835478, + 33.673376 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 178678768, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.864531, + 33.647825 + ], + [ + -117.863133, + 33.648824 + ], + [ + -117.862609, + 33.648284 + ], + [ + -117.862111, + 33.646757 + ], + [ + -117.862103, + 33.645798 + ], + [ + -117.862798, + 33.645795 + ], + [ + -117.863735, + 33.645628 + ], + [ + -117.86385, + 33.64599 + ], + [ + -117.863962, + 33.646745 + ], + [ + -117.864148, + 33.647172 + ], + [ + -117.864531, + 33.647825 + ] + ] + ] + }, + "properties": { + "name": "Bonita Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 179648560, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.819657, + 33.642161 + ], + [ + -117.82161, + 33.642357 + ], + [ + -117.821798, + 33.641585 + ], + [ + -117.820001, + 33.641187 + ], + [ + -117.819909, + 33.641165 + ], + [ + -117.819657, + 33.642161 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 182016453, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.920875, + 33.838487 + ], + [ + -117.92022, + 33.836478 + ], + [ + -117.916684, + 33.837276 + ], + [ + -117.917352, + 33.839296 + ], + [ + -117.920875, + 33.838487 + ] + ] + ] + }, + "properties": { + "name": "Pearson Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 184094366, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.851992, + 33.677446 + ], + [ + -117.852018, + 33.677394 + ], + [ + -117.852016, + 33.677367 + ], + [ + -117.85195, + 33.677311 + ], + [ + -117.851771, + 33.677487 + ], + [ + -117.851881, + 33.677565 + ], + [ + -117.851756, + 33.677693 + ], + [ + -117.85152, + 33.67754 + ], + [ + -117.851458, + 33.677599 + ], + [ + -117.851444, + 33.677612 + ], + [ + -117.851524, + 33.677661 + ], + [ + -117.851525, + 33.6777 + ], + [ + -117.851617, + 33.677758 + ], + [ + -117.851622, + 33.677801 + ], + [ + -117.851472, + 33.677956 + ], + [ + -117.851429, + 33.677961 + ], + [ + -117.851165, + 33.677779 + ], + [ + -117.851129, + 33.677785 + ], + [ + -117.850896, + 33.677613 + ], + [ + -117.850894, + 33.677569 + ], + [ + -117.851027, + 33.677424 + ], + [ + -117.850979, + 33.677391 + ], + [ + -117.850785, + 33.677588 + ], + [ + -117.850811, + 33.677867 + ], + [ + -117.850821, + 33.677978 + ], + [ + -117.850787, + 33.678003 + ], + [ + -117.850572, + 33.678012 + ], + [ + -117.850556, + 33.678032 + ], + [ + -117.850631, + 33.678082 + ], + [ + -117.85069, + 33.678105 + ], + [ + -117.850742, + 33.678116 + ], + [ + -117.850795, + 33.678123 + ], + [ + -117.850853, + 33.678115 + ], + [ + -117.851199, + 33.678045 + ], + [ + -117.851237, + 33.678037 + ], + [ + -117.851257, + 33.678043 + ], + [ + -117.851291, + 33.678043 + ], + [ + -117.85158, + 33.677979 + ], + [ + -117.85164, + 33.67795 + ], + [ + -117.851695, + 33.67791 + ], + [ + -117.851779, + 33.677786 + ], + [ + -117.851805, + 33.677745 + ], + [ + -117.851979, + 33.677468 + ], + [ + -117.851992, + 33.677446 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 184094635, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.851947, + 33.678321 + ], + [ + -117.851645, + 33.678851 + ], + [ + -117.85124, + 33.679479 + ], + [ + -117.851112, + 33.679684 + ], + [ + -117.850511, + 33.679417 + ], + [ + -117.84934, + 33.678896 + ], + [ + -117.848706, + 33.67862 + ], + [ + -117.848406, + 33.678464 + ], + [ + -117.847878, + 33.678184 + ], + [ + -117.847981, + 33.678139 + ], + [ + -117.848703, + 33.678496 + ], + [ + -117.849641, + 33.678924 + ], + [ + -117.85079, + 33.679434 + ], + [ + -117.850868, + 33.679465 + ], + [ + -117.850895, + 33.679433 + ], + [ + -117.850938, + 33.679453 + ], + [ + -117.851473, + 33.678741 + ], + [ + -117.851692, + 33.678461 + ], + [ + -117.851914, + 33.678315 + ], + [ + -117.851947, + 33.678321 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 184097821, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.932844, + 33.774688 + ], + [ + -117.933276, + 33.774684 + ], + [ + -117.933271, + 33.774356 + ], + [ + -117.93284, + 33.774361 + ], + [ + -117.932844, + 33.774688 + ] + ] + ] + }, + "properties": { + "name": "Garden Grove Community Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 184637294, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.773459, + 33.761046 + ], + [ + -117.772874, + 33.760186 + ], + [ + -117.771947, + 33.758571 + ], + [ + -117.771877, + 33.758553 + ], + [ + -117.771758, + 33.758592 + ], + [ + -117.771673, + 33.758593 + ], + [ + -117.771608, + 33.758534 + ], + [ + -117.771462, + 33.758265 + ], + [ + -117.771231, + 33.757858 + ], + [ + -117.770983, + 33.757432 + ], + [ + -117.770788, + 33.757019 + ], + [ + -117.770715, + 33.757044 + ], + [ + -117.770648, + 33.757085 + ], + [ + -117.770591, + 33.757142 + ], + [ + -117.770585, + 33.757295 + ], + [ + -117.770632, + 33.757454 + ], + [ + -117.77067, + 33.757559 + ], + [ + -117.770768, + 33.757678 + ], + [ + -117.770795, + 33.757766 + ], + [ + -117.770775, + 33.757823 + ], + [ + -117.770513, + 33.758134 + ], + [ + -117.770158, + 33.75841 + ], + [ + -117.769712, + 33.758196 + ], + [ + -117.769528, + 33.758422 + ], + [ + -117.769338, + 33.758629 + ], + [ + -117.769151, + 33.75873 + ], + [ + -117.768898, + 33.758808 + ], + [ + -117.768721, + 33.758907 + ], + [ + -117.768603, + 33.759037 + ], + [ + -117.76849, + 33.759211 + ], + [ + -117.76846, + 33.759372 + ], + [ + -117.768467, + 33.75957 + ], + [ + -117.768518, + 33.759778 + ], + [ + -117.768574, + 33.759925 + ], + [ + -117.76875, + 33.760218 + ], + [ + -117.768729, + 33.760412 + ], + [ + -117.768575, + 33.760621 + ], + [ + -117.768472, + 33.761169 + ], + [ + -117.768282, + 33.76151 + ], + [ + -117.767796, + 33.761889 + ], + [ + -117.767717, + 33.762125 + ], + [ + -117.767745, + 33.762633 + ], + [ + -117.76792, + 33.762886 + ], + [ + -117.767939, + 33.763412 + ], + [ + -117.767978, + 33.763915 + ], + [ + -117.767918, + 33.764137 + ], + [ + -117.767769, + 33.764251 + ], + [ + -117.767666, + 33.764272 + ], + [ + -117.767486, + 33.764298 + ], + [ + -117.767236, + 33.764289 + ], + [ + -117.766787, + 33.764117 + ], + [ + -117.766517, + 33.764366 + ], + [ + -117.766565, + 33.764482 + ], + [ + -117.766645, + 33.764854 + ], + [ + -117.766637, + 33.765022 + ], + [ + -117.766492, + 33.765736 + ], + [ + -117.766338, + 33.765941 + ], + [ + -117.765918, + 33.766157 + ], + [ + -117.765578, + 33.766255 + ], + [ + -117.765261, + 33.766299 + ], + [ + -117.765017, + 33.76629 + ], + [ + -117.764774, + 33.766418 + ], + [ + -117.764624, + 33.766504 + ], + [ + -117.76446, + 33.766518 + ], + [ + -117.764283, + 33.766496 + ], + [ + -117.764103, + 33.766498 + ], + [ + -117.763824, + 33.766583 + ], + [ + -117.762395, + 33.766401 + ], + [ + -117.762332, + 33.766887 + ], + [ + -117.762306, + 33.767036 + ], + [ + -117.762258, + 33.767213 + ], + [ + -117.762204, + 33.767348 + ], + [ + -117.763349, + 33.768175 + ], + [ + -117.763488, + 33.768493 + ], + [ + -117.763232, + 33.768885 + ], + [ + -117.762624, + 33.769868 + ], + [ + -117.762389, + 33.770258 + ], + [ + -117.762301, + 33.770354 + ], + [ + -117.762055, + 33.770493 + ], + [ + -117.762034, + 33.770579 + ], + [ + -117.762037, + 33.770696 + ], + [ + -117.762088, + 33.770866 + ], + [ + -117.762146, + 33.771003 + ], + [ + -117.762147, + 33.771087 + ], + [ + -117.762138, + 33.771133 + ], + [ + -117.762111, + 33.771213 + ], + [ + -117.762073, + 33.771265 + ], + [ + -117.761992, + 33.771311 + ], + [ + -117.761691, + 33.771779 + ], + [ + -117.761406, + 33.771925 + ], + [ + -117.761144, + 33.771941 + ], + [ + -117.760901, + 33.771901 + ], + [ + -117.760551, + 33.771905 + ], + [ + -117.760099, + 33.771876 + ], + [ + -117.759422, + 33.774478 + ], + [ + -117.759339, + 33.775542 + ], + [ + -117.759434, + 33.776651 + ], + [ + -117.759509, + 33.778354 + ], + [ + -117.758756, + 33.781441 + ], + [ + -117.7586, + 33.782181 + ], + [ + -117.75856, + 33.783138 + ], + [ + -117.758645, + 33.784393 + ], + [ + -117.758645, + 33.785015 + ], + [ + -117.762683, + 33.785103 + ], + [ + -117.762931, + 33.785121 + ], + [ + -117.763187, + 33.785159 + ], + [ + -117.763468, + 33.785216 + ], + [ + -117.763745, + 33.785292 + ], + [ + -117.764291, + 33.785509 + ], + [ + -117.764356, + 33.785519 + ], + [ + -117.764441, + 33.785501 + ], + [ + -117.764926, + 33.785078 + ], + [ + -117.767516, + 33.783464 + ], + [ + -117.768171, + 33.783181 + ], + [ + -117.768562, + 33.783114 + ], + [ + -117.769041, + 33.7831 + ], + [ + -117.769678, + 33.783202 + ], + [ + -117.77031, + 33.783434 + ], + [ + -117.770678, + 33.783657 + ], + [ + -117.770976, + 33.783629 + ], + [ + -117.771453, + 33.783157 + ], + [ + -117.762156, + 33.776769 + ], + [ + -117.762125, + 33.77647 + ], + [ + -117.762202, + 33.77623 + ], + [ + -117.763282, + 33.775597 + ], + [ + -117.763903, + 33.774576 + ], + [ + -117.763868, + 33.774148 + ], + [ + -117.764034, + 33.773413 + ], + [ + -117.764643, + 33.772557 + ], + [ + -117.764714, + 33.772169 + ], + [ + -117.764867, + 33.771401 + ], + [ + -117.765027, + 33.771263 + ], + [ + -117.765301, + 33.770519 + ], + [ + -117.766122, + 33.769804 + ], + [ + -117.766334, + 33.769651 + ], + [ + -117.766481, + 33.769592 + ], + [ + -117.766775, + 33.769557 + ], + [ + -117.76702, + 33.769537 + ], + [ + -117.767067, + 33.769522 + ], + [ + -117.767083, + 33.769483 + ], + [ + -117.767066, + 33.769301 + ], + [ + -117.767059, + 33.769183 + ], + [ + -117.767089, + 33.769135 + ], + [ + -117.767117, + 33.769107 + ], + [ + -117.767072, + 33.768627 + ], + [ + -117.767869, + 33.768372 + ], + [ + -117.768005, + 33.768211 + ], + [ + -117.768146, + 33.768072 + ], + [ + -117.768595, + 33.767589 + ], + [ + -117.768958, + 33.767113 + ], + [ + -117.769211, + 33.766677 + ], + [ + -117.769553, + 33.766414 + ], + [ + -117.769869, + 33.765997 + ], + [ + -117.770093, + 33.765861 + ], + [ + -117.770518, + 33.765738 + ], + [ + -117.770674, + 33.76573 + ], + [ + -117.770818, + 33.765752 + ], + [ + -117.770958, + 33.765834 + ], + [ + -117.771136, + 33.766073 + ], + [ + -117.771376, + 33.766177 + ], + [ + -117.771558, + 33.76617 + ], + [ + -117.771717, + 33.765888 + ], + [ + -117.774397, + 33.763215 + ], + [ + -117.773072, + 33.76306 + ], + [ + -117.772642, + 33.762985 + ], + [ + -117.772442, + 33.762757 + ], + [ + -117.772348, + 33.762524 + ], + [ + -117.772312, + 33.762233 + ], + [ + -117.772385, + 33.762053 + ], + [ + -117.773459, + 33.761046 + ] + ] + ] + }, + "properties": { + "name": "Peters Canyon Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324465, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.893077, + 33.884347 + ], + [ + -117.893612, + 33.884344 + ], + [ + -117.893696, + 33.884495 + ], + [ + -117.894877, + 33.884155 + ], + [ + -117.894953, + 33.88414 + ], + [ + -117.895124, + 33.884133 + ], + [ + -117.896179, + 33.884125 + ], + [ + -117.896267, + 33.884107 + ], + [ + -117.896297, + 33.884069 + ], + [ + -117.89627, + 33.883133 + ], + [ + -117.896281, + 33.882912 + ], + [ + -117.896349, + 33.882787 + ], + [ + -117.895314, + 33.882778 + ], + [ + -117.895, + 33.882741 + ], + [ + -117.894917, + 33.88286 + ], + [ + -117.894573, + 33.883051 + ], + [ + -117.89416, + 33.883202 + ], + [ + -117.893504, + 33.88359 + ], + [ + -117.89327, + 33.883877 + ], + [ + -117.893287, + 33.884017 + ], + [ + -117.892981, + 33.884253 + ], + [ + -117.893077, + 33.884347 + ] + ] + ] + }, + "properties": { + "name": "Acacia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324469, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.702674, + 33.602102 + ], + [ + -117.703784, + 33.601988 + ], + [ + -117.704295, + 33.601594 + ], + [ + -117.704641, + 33.601383 + ], + [ + -117.704966, + 33.60077 + ], + [ + -117.706306, + 33.600212 + ], + [ + -117.706845, + 33.600111 + ], + [ + -117.70751, + 33.599694 + ], + [ + -117.707785, + 33.600285 + ], + [ + -117.705834, + 33.601475 + ], + [ + -117.705405, + 33.601942 + ], + [ + -117.704724, + 33.602368 + ], + [ + -117.702932, + 33.603137 + ], + [ + -117.702674, + 33.602102 + ] + ] + ] + }, + "properties": { + "name": "Aliso Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324472, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.698271, + 33.600226 + ], + [ + -117.696701, + 33.601048 + ], + [ + -117.696771, + 33.600524 + ], + [ + -117.696542, + 33.600094 + ], + [ + -117.697008, + 33.599576 + ], + [ + -117.698271, + 33.600226 + ] + ] + ] + }, + "properties": { + "name": "Beckenham Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324475, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.984849, + 33.852218 + ], + [ + -117.983498, + 33.85222 + ], + [ + -117.981515, + 33.852236 + ], + [ + -117.980569, + 33.85225 + ], + [ + -117.980602, + 33.854087 + ], + [ + -117.984891, + 33.854026 + ], + [ + -117.984849, + 33.852218 + ] + ] + ] + }, + "properties": { + "name": "Boisseranc Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324476, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.855869, + 33.620296 + ], + [ + -117.855966, + 33.620349 + ], + [ + -117.856317, + 33.620541 + ], + [ + -117.856518, + 33.620283 + ], + [ + -117.857098, + 33.619845 + ], + [ + -117.857576, + 33.619308 + ], + [ + -117.857595, + 33.619104 + ], + [ + -117.857886, + 33.618731 + ], + [ + -117.858062, + 33.618649 + ], + [ + -117.858617, + 33.61815 + ], + [ + -117.858716, + 33.61801 + ], + [ + -117.859084, + 33.617658 + ], + [ + -117.858914, + 33.617495 + ], + [ + -117.859601, + 33.616871 + ], + [ + -117.860977, + 33.615807 + ], + [ + -117.861623, + 33.615539 + ], + [ + -117.862113, + 33.615293 + ], + [ + -117.862049, + 33.61518 + ], + [ + -117.862021, + 33.615133 + ], + [ + -117.861118, + 33.615388 + ], + [ + -117.860925, + 33.615516 + ], + [ + -117.86067, + 33.615487 + ], + [ + -117.860178, + 33.615885 + ], + [ + -117.860214, + 33.615969 + ], + [ + -117.860192, + 33.616129 + ], + [ + -117.859763, + 33.61648 + ], + [ + -117.859557, + 33.61648 + ], + [ + -117.857713, + 33.617985 + ], + [ + -117.857892, + 33.618139 + ], + [ + -117.857884, + 33.618198 + ], + [ + -117.857881, + 33.618228 + ], + [ + -117.857812, + 33.618308 + ], + [ + -117.857436, + 33.618745 + ], + [ + -117.857425, + 33.618898 + ], + [ + -117.857089, + 33.619264 + ], + [ + -117.856831, + 33.619264 + ], + [ + -117.8564, + 33.619754 + ], + [ + -117.856444, + 33.619926 + ], + [ + -117.856276, + 33.620164 + ], + [ + -117.856086, + 33.620065 + ], + [ + -117.855869, + 33.620296 + ] + ] + ] + }, + "properties": { + "name": "Buffalo Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324477, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.04623, + 33.81323 + ], + [ + -118.046218, + 33.813167 + ], + [ + -118.045913, + 33.813171 + ], + [ + -118.045916, + 33.81324 + ], + [ + -118.045911, + 33.814071 + ], + [ + -118.045777, + 33.814748 + ], + [ + -118.045811, + 33.814792 + ], + [ + -118.045847, + 33.814805 + ], + [ + -118.046645, + 33.814797 + ], + [ + -118.046645, + 33.814598 + ], + [ + -118.046645, + 33.813921 + ], + [ + -118.046499, + 33.813919 + ], + [ + -118.046453, + 33.813876 + ], + [ + -118.046431, + 33.813813 + ], + [ + -118.046473, + 33.813748 + ], + [ + -118.046547, + 33.813727 + ], + [ + -118.046609, + 33.813739 + ], + [ + -118.046645, + 33.813782 + ], + [ + -118.046645, + 33.813233 + ], + [ + -118.046541, + 33.81324 + ], + [ + -118.04647, + 33.813281 + ], + [ + -118.046437, + 33.813293 + ], + [ + -118.046402, + 33.813305 + ], + [ + -118.04634, + 33.813306 + ], + [ + -118.046283, + 33.813279 + ], + [ + -118.04623, + 33.81323 + ] + ] + ] + }, + "properties": { + "name": "Cedar Glen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324478, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.039444, + 33.848514 + ], + [ + -118.038671, + 33.848517 + ], + [ + -118.037407, + 33.848525 + ], + [ + -118.037433, + 33.849301 + ], + [ + -118.037433, + 33.849983 + ], + [ + -118.039473, + 33.849972 + ], + [ + -118.03946, + 33.849255 + ], + [ + -118.039444, + 33.848514 + ] + ] + ] + }, + "properties": { + "name": "Central Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324479, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.699023, + 33.602752 + ], + [ + -117.699194, + 33.602992 + ], + [ + -117.699667, + 33.60323 + ], + [ + -117.699543, + 33.603635 + ], + [ + -117.699165, + 33.6041 + ], + [ + -117.699123, + 33.604152 + ], + [ + -117.699103, + 33.604079 + ], + [ + -117.698837, + 33.603898 + ], + [ + -117.698663, + 33.603896 + ], + [ + -117.698367, + 33.603546 + ], + [ + -117.698221, + 33.603161 + ], + [ + -117.698205, + 33.602788 + ], + [ + -117.698754, + 33.602807 + ], + [ + -117.699023, + 33.602752 + ] + ] + ] + }, + "properties": { + "name": "Clarington Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324480, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921478, + 33.622814 + ], + [ + -117.921399, + 33.622845 + ], + [ + -117.921323, + 33.622903 + ], + [ + -117.921193, + 33.623028 + ], + [ + -117.921068, + 33.623173 + ], + [ + -117.921066, + 33.623218 + ], + [ + -117.921084, + 33.623251 + ], + [ + -117.92111, + 33.623275 + ], + [ + -117.92122, + 33.623322 + ], + [ + -117.921338, + 33.623357 + ], + [ + -117.92147, + 33.623383 + ], + [ + -117.921607, + 33.623392 + ], + [ + -117.921751, + 33.623387 + ], + [ + -117.921914, + 33.623364 + ], + [ + -117.92207, + 33.623341 + ], + [ + -117.922158, + 33.623317 + ], + [ + -117.922229, + 33.623278 + ], + [ + -117.922293, + 33.623218 + ], + [ + -117.922455, + 33.623057 + ], + [ + -117.922527, + 33.623005 + ], + [ + -117.922611, + 33.622974 + ], + [ + -117.922691, + 33.622964 + ], + [ + -117.922806, + 33.622978 + ], + [ + -117.922885, + 33.623005 + ], + [ + -117.922951, + 33.623044 + ], + [ + -117.923012, + 33.623103 + ], + [ + -117.923055, + 33.62317 + ], + [ + -117.923076, + 33.623248 + ], + [ + -117.923087, + 33.623343 + ], + [ + -117.923114, + 33.623412 + ], + [ + -117.923159, + 33.623475 + ], + [ + -117.92322, + 33.623525 + ], + [ + -117.923288, + 33.623557 + ], + [ + -117.923383, + 33.623581 + ], + [ + -117.923464, + 33.623585 + ], + [ + -117.923568, + 33.62357 + ], + [ + -117.923655, + 33.62354 + ], + [ + -117.923718, + 33.623498 + ], + [ + -117.923777, + 33.623442 + ], + [ + -117.923813, + 33.623355 + ], + [ + -117.923817, + 33.623038 + ], + [ + -117.923831, + 33.622759 + ], + [ + -117.923809, + 33.622741 + ], + [ + -117.923661, + 33.622712 + ], + [ + -117.92327, + 33.622127 + ], + [ + -117.923134, + 33.622305 + ], + [ + -117.923005, + 33.62245 + ], + [ + -117.922922, + 33.622517 + ], + [ + -117.922828, + 33.622589 + ], + [ + -117.922663, + 33.622673 + ], + [ + -117.922427, + 33.622767 + ], + [ + -117.922284, + 33.622805 + ], + [ + -117.922144, + 33.62283 + ], + [ + -117.922003, + 33.62284 + ], + [ + -117.921845, + 33.622841 + ], + [ + -117.921563, + 33.622809 + ], + [ + -117.921478, + 33.622814 + ] + ] + ] + }, + "properties": { + "name": "Cliff Drive Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324481, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.691823, + 33.597824 + ], + [ + -117.69267, + 33.598342 + ], + [ + -117.69194, + 33.599384 + ], + [ + -117.690855, + 33.599216 + ], + [ + -117.690849, + 33.599027 + ], + [ + -117.690832, + 33.598494 + ], + [ + -117.691384, + 33.59853 + ], + [ + -117.6915, + 33.598439 + ], + [ + -117.691537, + 33.598335 + ], + [ + -117.691601, + 33.598151 + ], + [ + -117.691823, + 33.597824 + ] + ] + ] + }, + "properties": { + "name": "Costeau Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324483, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.647341, + 33.646179 + ], + [ + -117.648047, + 33.646521 + ], + [ + -117.648041, + 33.646558 + ], + [ + -117.648042, + 33.646564 + ], + [ + -117.648045, + 33.646597 + ], + [ + -117.648071, + 33.646648 + ], + [ + -117.6481, + 33.646679 + ], + [ + -117.648137, + 33.646702 + ], + [ + -117.648277, + 33.646776 + ], + [ + -117.648443, + 33.646891 + ], + [ + -117.648565, + 33.646986 + ], + [ + -117.648614, + 33.647033 + ], + [ + -117.648658, + 33.647083 + ], + [ + -117.648723, + 33.647187 + ], + [ + -117.648763, + 33.647297 + ], + [ + -117.648802, + 33.647433 + ], + [ + -117.648856, + 33.64764 + ], + [ + -117.648855, + 33.647658 + ], + [ + -117.648848, + 33.647674 + ], + [ + -117.648833, + 33.647686 + ], + [ + -117.64867, + 33.647734 + ], + [ + -117.648545, + 33.647781 + ], + [ + -117.648402, + 33.64785 + ], + [ + -117.64823, + 33.647953 + ], + [ + -117.648088, + 33.64806 + ], + [ + -117.647995, + 33.648144 + ], + [ + -117.647939, + 33.648145 + ], + [ + -117.647859, + 33.648148 + ], + [ + -117.647708, + 33.648045 + ], + [ + -117.647607, + 33.647974 + ], + [ + -117.647489, + 33.64786 + ], + [ + -117.647409, + 33.647748 + ], + [ + -117.647255, + 33.647373 + ], + [ + -117.647239, + 33.647333 + ], + [ + -117.64721, + 33.647258 + ], + [ + -117.647175, + 33.647149 + ], + [ + -117.647152, + 33.647032 + ], + [ + -117.647143, + 33.646938 + ], + [ + -117.647142, + 33.646818 + ], + [ + -117.64715, + 33.646692 + ], + [ + -117.64717, + 33.646577 + ], + [ + -117.647202, + 33.646467 + ], + [ + -117.647237, + 33.64637 + ], + [ + -117.647312, + 33.646233 + ], + [ + -117.647341, + 33.646179 + ] + ] + ] + }, + "properties": { + "name": "Crucero Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324484, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.715031, + 33.693191 + ], + [ + -117.715831, + 33.693747 + ], + [ + -117.715754, + 33.693853 + ], + [ + -117.71569, + 33.693877 + ], + [ + -117.714766, + 33.69363 + ], + [ + -117.71474, + 33.693597 + ], + [ + -117.714814, + 33.693392 + ], + [ + -117.715031, + 33.693191 + ] + ] + ] + }, + "properties": { + "name": "Discovery Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324486, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.685482, + 33.622895 + ], + [ + -117.685474, + 33.623002 + ], + [ + -117.686251, + 33.623723 + ], + [ + -117.6869, + 33.624666 + ], + [ + -117.687741, + 33.624033 + ], + [ + -117.688112, + 33.623782 + ], + [ + -117.688669, + 33.623339 + ], + [ + -117.689181, + 33.622918 + ], + [ + -117.689486, + 33.622629 + ], + [ + -117.687422, + 33.62089 + ], + [ + -117.686724, + 33.621746 + ], + [ + -117.685482, + 33.622895 + ] + ] + ] + }, + "properties": { + "name": "El Toro Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324487, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.031232, + 33.79485 + ], + [ + -118.030907, + 33.79485 + ], + [ + -118.030907, + 33.795005 + ], + [ + -118.030512, + 33.795008 + ], + [ + -118.03036, + 33.794994 + ], + [ + -118.029766, + 33.794992 + ], + [ + -118.029764, + 33.795524 + ], + [ + -118.029771, + 33.795545 + ], + [ + -118.029787, + 33.795568 + ], + [ + -118.029817, + 33.795584 + ], + [ + -118.029845, + 33.795592 + ], + [ + -118.031213, + 33.795592 + ], + [ + -118.031217, + 33.795319 + ], + [ + -118.031299, + 33.795255 + ], + [ + -118.031228, + 33.79518 + ], + [ + -118.031232, + 33.79485 + ] + ] + ] + }, + "properties": { + "name": "Eucalyptus Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324488, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.891149, + 33.627501 + ], + [ + -117.890918, + 33.627073 + ], + [ + -117.890737, + 33.627237 + ], + [ + -117.890696, + 33.627425 + ], + [ + -117.89069, + 33.627611 + ], + [ + -117.890605, + 33.627805 + ], + [ + -117.890415, + 33.627965 + ], + [ + -117.890374, + 33.628162 + ], + [ + -117.890391, + 33.628343 + ], + [ + -117.890803, + 33.628242 + ], + [ + -117.8908, + 33.628068 + ], + [ + -117.890844, + 33.627913 + ], + [ + -117.890927, + 33.6278 + ], + [ + -117.891149, + 33.627501 + ] + ] + ] + }, + "properties": { + "name": "Galaxie View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324489, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.866995, + 33.600312 + ], + [ + -117.868505, + 33.601128 + ], + [ + -117.868155, + 33.601352 + ], + [ + -117.867998, + 33.601649 + ], + [ + -117.868542, + 33.601678 + ], + [ + -117.868817, + 33.601778 + ], + [ + -117.869397, + 33.601989 + ], + [ + -117.870749, + 33.602966 + ], + [ + -117.871239, + 33.602403 + ], + [ + -117.867485, + 33.599823 + ], + [ + -117.866995, + 33.600312 + ] + ] + ] + }, + "properties": { + "name": "Grant Howald Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324491, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.861901, + 33.613009 + ], + [ + -117.860385, + 33.613177 + ], + [ + -117.859795, + 33.613309 + ], + [ + -117.861263, + 33.614232 + ], + [ + -117.861788, + 33.614727 + ], + [ + -117.861966, + 33.615037 + ], + [ + -117.862021, + 33.615133 + ], + [ + -117.862049, + 33.61518 + ], + [ + -117.862113, + 33.615293 + ], + [ + -117.862452, + 33.615882 + ], + [ + -117.86295, + 33.615513 + ], + [ + -117.862182, + 33.614019 + ], + [ + -117.861771, + 33.613905 + ], + [ + -117.861672, + 33.613575 + ], + [ + -117.862015, + 33.613502 + ], + [ + -117.861901, + 33.613009 + ] + ] + ] + }, + "properties": { + "name": "Harbor View Nature Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324495, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.68976, + 33.646423 + ], + [ + -117.689129, + 33.646836 + ], + [ + -117.689086, + 33.646868 + ], + [ + -117.688826, + 33.647112 + ], + [ + -117.688722, + 33.647357 + ], + [ + -117.68858, + 33.647499 + ], + [ + -117.689326, + 33.64768 + ], + [ + -117.690023, + 33.647281 + ], + [ + -117.690551, + 33.647326 + ], + [ + -117.690976, + 33.647141 + ], + [ + -117.690645, + 33.647005 + ], + [ + -117.690287, + 33.646813 + ], + [ + -117.690001, + 33.646615 + ], + [ + -117.68976, + 33.646423 + ] + ] + ] + }, + "properties": { + "name": "Heritage Hill Historical Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324496, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.689774, + 33.640949 + ], + [ + -117.689495, + 33.641073 + ], + [ + -117.689282, + 33.641249 + ], + [ + -117.689126, + 33.641485 + ], + [ + -117.689193, + 33.641727 + ], + [ + -117.689224, + 33.641858 + ], + [ + -117.68924, + 33.64199 + ], + [ + -117.689265, + 33.642258 + ], + [ + -117.689283, + 33.642401 + ], + [ + -117.689259, + 33.642507 + ], + [ + -117.689534, + 33.642511 + ], + [ + -117.690041, + 33.64227 + ], + [ + -117.690548, + 33.642029 + ], + [ + -117.690143, + 33.641464 + ], + [ + -117.689774, + 33.640949 + ] + ] + ] + }, + "properties": { + "name": "Lake Forest Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324501, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.900389, + 33.650997 + ], + [ + -117.89903, + 33.652426 + ], + [ + -117.900176, + 33.65318 + ], + [ + -117.901158, + 33.652147 + ], + [ + -117.900462, + 33.651689 + ], + [ + -117.900838, + 33.651293 + ], + [ + -117.900389, + 33.650997 + ] + ] + ] + }, + "properties": { + "name": "Lindbergh School Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324502, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.722518, + 33.704372 + ], + [ + -117.722551, + 33.704411 + ], + [ + -117.722495, + 33.704677 + ], + [ + -117.722392, + 33.704866 + ], + [ + -117.722288, + 33.705002 + ], + [ + -117.722155, + 33.70512 + ], + [ + -117.722043, + 33.705193 + ], + [ + -117.721971, + 33.705233 + ], + [ + -117.721895, + 33.705264 + ], + [ + -117.721778, + 33.705306 + ], + [ + -117.721693, + 33.70533 + ], + [ + -117.721593, + 33.705346 + ], + [ + -117.721492, + 33.705356 + ], + [ + -117.721395, + 33.705359 + ], + [ + -117.721262, + 33.705352 + ], + [ + -117.721098, + 33.705327 + ], + [ + -117.720962, + 33.705292 + ], + [ + -117.720828, + 33.70524 + ], + [ + -117.720675, + 33.705151 + ], + [ + -117.720545, + 33.705051 + ], + [ + -117.720463, + 33.704964 + ], + [ + -117.720384, + 33.704862 + ], + [ + -117.720331, + 33.704761 + ], + [ + -117.720356, + 33.704707 + ], + [ + -117.72052, + 33.704666 + ], + [ + -117.720694, + 33.704632 + ], + [ + -117.722256, + 33.704378 + ], + [ + -117.722402, + 33.704372 + ], + [ + -117.722518, + 33.704372 + ] + ] + ] + }, + "properties": { + "name": "Lomas Valley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324504, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.650128, + 33.638613 + ], + [ + -117.650136, + 33.639131 + ], + [ + -117.650073, + 33.639291 + ], + [ + -117.65, + 33.639477 + ], + [ + -117.65016, + 33.63959 + ], + [ + -117.649907, + 33.639965 + ], + [ + -117.649829, + 33.640214 + ], + [ + -117.65061, + 33.640438 + ], + [ + -117.651573, + 33.640352 + ], + [ + -117.651404, + 33.63975 + ], + [ + -117.651257, + 33.63924 + ], + [ + -117.651188, + 33.639081 + ], + [ + -117.651066, + 33.638887 + ], + [ + -117.650719, + 33.638526 + ], + [ + -117.650327, + 33.638109 + ], + [ + -117.650174, + 33.63793 + ], + [ + -117.650047, + 33.637712 + ], + [ + -117.650128, + 33.638613 + ] + ] + ] + }, + "properties": { + "name": "Minaya Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324506, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.710877, + 33.628206 + ], + [ + -117.711414, + 33.628393 + ], + [ + -117.711407, + 33.628409 + ], + [ + -117.711407, + 33.628427 + ], + [ + -117.711411, + 33.628444 + ], + [ + -117.711413, + 33.628464 + ], + [ + -117.711422, + 33.628494 + ], + [ + -117.711445, + 33.628516 + ], + [ + -117.711464, + 33.628534 + ], + [ + -117.711516, + 33.62855 + ], + [ + -117.711595, + 33.628578 + ], + [ + -117.71186, + 33.628788 + ], + [ + -117.710668, + 33.629634 + ], + [ + -117.710304, + 33.629892 + ], + [ + -117.709397, + 33.628925 + ], + [ + -117.709548, + 33.628842 + ], + [ + -117.709663, + 33.628786 + ], + [ + -117.709798, + 33.628715 + ], + [ + -117.710054, + 33.628561 + ], + [ + -117.71032, + 33.628395 + ], + [ + -117.710391, + 33.628356 + ], + [ + -117.710465, + 33.628324 + ], + [ + -117.710539, + 33.628301 + ], + [ + -117.710734, + 33.628287 + ], + [ + -117.710773, + 33.628278 + ], + [ + -117.710802, + 33.628268 + ], + [ + -117.710828, + 33.628254 + ], + [ + -117.710852, + 33.628236 + ], + [ + -117.710868, + 33.628222 + ], + [ + -117.710877, + 33.628206 + ] + ] + ] + }, + "properties": { + "name": "Mountain View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324508, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.874654, + 33.602835 + ], + [ + -117.873925, + 33.60232 + ], + [ + -117.873632, + 33.602647 + ], + [ + -117.874366, + 33.60313 + ], + [ + -117.874654, + 33.602835 + ] + ] + ] + }, + "properties": { + "name": "Old School Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324509, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.851839, + 33.620747 + ], + [ + -117.851231, + 33.62047 + ], + [ + -117.850654, + 33.619948 + ], + [ + -117.851311, + 33.619708 + ], + [ + -117.851872, + 33.619255 + ], + [ + -117.852276, + 33.619223 + ], + [ + -117.852625, + 33.618836 + ], + [ + -117.852875, + 33.618287 + ], + [ + -117.852671, + 33.617946 + ], + [ + -117.851992, + 33.617525 + ], + [ + -117.85202, + 33.617015 + ], + [ + -117.853664, + 33.618114 + ], + [ + -117.852595, + 33.619716 + ], + [ + -117.851839, + 33.620747 + ] + ] + ] + }, + "properties": { + "name": "San Miguel Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324517, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.952762, + 33.643313 + ], + [ + -117.945108, + 33.643273 + ], + [ + -117.945114, + 33.643801 + ], + [ + -117.945152, + 33.644486 + ], + [ + -117.945245, + 33.645447 + ], + [ + -117.945272, + 33.645984 + ], + [ + -117.945278, + 33.646313 + ], + [ + -117.945279, + 33.647067 + ], + [ + -117.945279, + 33.647487 + ], + [ + -117.94529, + 33.647794 + ], + [ + -117.945395, + 33.648372 + ], + [ + -117.947354, + 33.648689 + ], + [ + -117.948053, + 33.649116 + ], + [ + -117.948481, + 33.649563 + ], + [ + -117.949405, + 33.64966 + ], + [ + -117.949716, + 33.650721 + ], + [ + -117.95047, + 33.650611 + ], + [ + -117.951387, + 33.64735 + ], + [ + -117.951613, + 33.646645 + ], + [ + -117.952025, + 33.645836 + ], + [ + -117.952762, + 33.643313 + ] + ] + ] + }, + "properties": { + "name": "Talbert Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324520, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.947337, + 33.652373 + ], + [ + -117.947475, + 33.6523 + ], + [ + -117.94881, + 33.652297 + ], + [ + -117.94887, + 33.651972 + ], + [ + -117.94934, + 33.651549 + ], + [ + -117.94942, + 33.651115 + ], + [ + -117.949349, + 33.650965 + ], + [ + -117.94859, + 33.651167 + ], + [ + -117.947865, + 33.651504 + ], + [ + -117.947323, + 33.651785 + ], + [ + -117.947326, + 33.65191 + ], + [ + -117.947334, + 33.652258 + ], + [ + -117.947337, + 33.652373 + ] + ] + ] + }, + "properties": { + "name": "Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324521, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.897515, + 33.623271 + ], + [ + -117.897196, + 33.623721 + ], + [ + -117.897105, + 33.623666 + ], + [ + -117.897152, + 33.623486 + ], + [ + -117.897179, + 33.623163 + ], + [ + -117.897259, + 33.622802 + ], + [ + -117.897418, + 33.622607 + ], + [ + -117.898457, + 33.621891 + ], + [ + -117.898771, + 33.621786 + ], + [ + -117.899218, + 33.621729 + ], + [ + -117.899529, + 33.622049 + ], + [ + -117.898847, + 33.622065 + ], + [ + -117.898034, + 33.622321 + ], + [ + -117.897391, + 33.622793 + ], + [ + -117.897515, + 33.623271 + ] + ] + ] + }, + "properties": { + "name": "Westcliff Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324522, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.658703, + 33.639393 + ], + [ + -117.659321, + 33.639884 + ], + [ + -117.6603, + 33.640221 + ], + [ + -117.661189, + 33.638906 + ], + [ + -117.662497, + 33.636303 + ], + [ + -117.661458, + 33.636189 + ], + [ + -117.660931, + 33.637035 + ], + [ + -117.659914, + 33.638156 + ], + [ + -117.658703, + 33.639393 + ] + ] + ] + }, + "properties": { + "name": "Wilderness Glen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324523, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.782174, + 33.694526 + ], + [ + -117.783368, + 33.695356 + ], + [ + -117.783477, + 33.695453 + ], + [ + -117.78321, + 33.695705 + ], + [ + -117.783152, + 33.695671 + ], + [ + -117.783141, + 33.695684 + ], + [ + -117.783124, + 33.695704 + ], + [ + -117.783188, + 33.695792 + ], + [ + -117.782952, + 33.69603 + ], + [ + -117.783029, + 33.696081 + ], + [ + -117.7828, + 33.696313 + ], + [ + -117.782875, + 33.696381 + ], + [ + -117.782933, + 33.696472 + ], + [ + -117.782961, + 33.69657 + ], + [ + -117.782972, + 33.69659 + ], + [ + -117.782989, + 33.696603 + ], + [ + -117.783009, + 33.696609 + ], + [ + -117.78306, + 33.696613 + ], + [ + -117.783136, + 33.696618 + ], + [ + -117.783627, + 33.696093 + ], + [ + -117.783781, + 33.696176 + ], + [ + -117.783793, + 33.696163 + ], + [ + -117.783805, + 33.696151 + ], + [ + -117.78368, + 33.696052 + ], + [ + -117.783931, + 33.695781 + ], + [ + -117.784594, + 33.696252 + ], + [ + -117.784687, + 33.696163 + ], + [ + -117.784675, + 33.696153 + ], + [ + -117.78466, + 33.696139 + ], + [ + -117.784649, + 33.696124 + ], + [ + -117.784642, + 33.696109 + ], + [ + -117.784638, + 33.696091 + ], + [ + -117.784548, + 33.696082 + ], + [ + -117.784033, + 33.695721 + ], + [ + -117.784121, + 33.695613 + ], + [ + -117.784107, + 33.695605 + ], + [ + -117.784094, + 33.695596 + ], + [ + -117.784015, + 33.69567 + ], + [ + -117.783383, + 33.695227 + ], + [ + -117.783474, + 33.695103 + ], + [ + -117.783465, + 33.695098 + ], + [ + -117.783458, + 33.695093 + ], + [ + -117.783452, + 33.695088 + ], + [ + -117.783329, + 33.695187 + ], + [ + -117.782697, + 33.694755 + ], + [ + -117.782796, + 33.694638 + ], + [ + -117.782776, + 33.69462 + ], + [ + -117.782653, + 33.694721 + ], + [ + -117.78234, + 33.694505 + ], + [ + -117.782361, + 33.694478 + ], + [ + -117.782092, + 33.694291 + ], + [ + -117.78202, + 33.694399 + ], + [ + -117.781987, + 33.694479 + ], + [ + -117.782174, + 33.694526 + ] + ] + ] + }, + "properties": { + "name": "Willows Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324527, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.821107, + 33.644668 + ], + [ + -117.821266, + 33.64535 + ], + [ + -117.820409, + 33.64556 + ], + [ + -117.820189, + 33.644764 + ], + [ + -117.821107, + 33.644668 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324530, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.828836, + 33.679937 + ], + [ + -117.828652, + 33.680069 + ], + [ + -117.827451, + 33.680926 + ], + [ + -117.827973, + 33.681339 + ], + [ + -117.828101, + 33.681436 + ], + [ + -117.82817, + 33.681469 + ], + [ + -117.828702, + 33.681719 + ], + [ + -117.828848, + 33.681788 + ], + [ + -117.828882, + 33.681804 + ], + [ + -117.82891, + 33.681816 + ], + [ + -117.829691, + 33.680389 + ], + [ + -117.829696, + 33.680347 + ], + [ + -117.829656, + 33.680306 + ], + [ + -117.82923, + 33.68016 + ], + [ + -117.829069, + 33.680087 + ], + [ + -117.828944, + 33.680021 + ], + [ + -117.828836, + 33.679937 + ] + ] + ] + }, + "properties": { + "name": "San Carlo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324531, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.810347, + 33.631049 + ], + [ + -117.810352, + 33.631424 + ], + [ + -117.810343, + 33.631829 + ], + [ + -117.810286, + 33.631874 + ], + [ + -117.810001, + 33.631853 + ], + [ + -117.809692, + 33.631859 + ], + [ + -117.809603, + 33.631845 + ], + [ + -117.80953, + 33.631791 + ], + [ + -117.809329, + 33.631271 + ], + [ + -117.809381, + 33.631193 + ], + [ + -117.809658, + 33.631082 + ], + [ + -117.809927, + 33.631 + ], + [ + -117.810239, + 33.630923 + ], + [ + -117.81031, + 33.630969 + ], + [ + -117.810347, + 33.631049 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324532, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.806723, + 33.631126 + ], + [ + -117.807702, + 33.63297 + ], + [ + -117.805882, + 33.633991 + ], + [ + -117.803948, + 33.63496 + ], + [ + -117.803893, + 33.634854 + ], + [ + -117.803448, + 33.633995 + ], + [ + -117.803047, + 33.632696 + ], + [ + -117.803943, + 33.632517 + ], + [ + -117.805058, + 33.632128 + ], + [ + -117.806384, + 33.631294 + ], + [ + -117.806723, + 33.631126 + ] + ] + ] + }, + "properties": { + "name": "Turtle Rock Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185324533, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.830126, + 33.680434 + ], + [ + -117.830046, + 33.680442 + ], + [ + -117.82998, + 33.680473 + ], + [ + -117.829711, + 33.681004 + ], + [ + -117.829405, + 33.681521 + ], + [ + -117.829534, + 33.681577 + ], + [ + -117.830302, + 33.682094 + ], + [ + -117.830984, + 33.681352 + ], + [ + -117.832274, + 33.682023 + ], + [ + -117.832506, + 33.681794 + ], + [ + -117.831035, + 33.681028 + ], + [ + -117.831005, + 33.680997 + ], + [ + -117.830991, + 33.680946 + ], + [ + -117.83099, + 33.680885 + ], + [ + -117.830871, + 33.680806 + ], + [ + -117.830126, + 33.680434 + ] + ] + ] + }, + "properties": { + "name": "San Marcos Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 185713510, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.878713, + 33.638758 + ], + [ + -117.878214, + 33.638897 + ], + [ + -117.877851, + 33.639117 + ], + [ + -117.877594, + 33.63937 + ], + [ + -117.877139, + 33.640105 + ], + [ + -117.877032, + 33.640373 + ], + [ + -117.877028, + 33.640631 + ], + [ + -117.877083, + 33.640893 + ], + [ + -117.877188, + 33.641114 + ], + [ + -117.877325, + 33.641284 + ], + [ + -117.877529, + 33.641446 + ], + [ + -117.878171, + 33.641754 + ], + [ + -117.878457, + 33.641562 + ], + [ + -117.878675, + 33.641627 + ], + [ + -117.879228, + 33.64062 + ], + [ + -117.881567, + 33.641527 + ], + [ + -117.881835, + 33.642403 + ], + [ + -117.882007, + 33.64227 + ], + [ + -117.882418, + 33.641574 + ], + [ + -117.882596, + 33.641327 + ], + [ + -117.879158, + 33.640113 + ], + [ + -117.878713, + 33.638758 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 187126851, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.883671, + 33.904525 + ], + [ + -117.883706, + 33.904561 + ], + [ + -117.88375, + 33.904592 + ], + [ + -117.883805, + 33.904616 + ], + [ + -117.88386, + 33.90462 + ], + [ + -117.883908, + 33.904614 + ], + [ + -117.883938, + 33.904597 + ], + [ + -117.883958, + 33.904564 + ], + [ + -117.883964, + 33.904526 + ], + [ + -117.883965, + 33.904489 + ], + [ + -117.883947, + 33.904452 + ], + [ + -117.883924, + 33.904432 + ], + [ + -117.883894, + 33.904416 + ], + [ + -117.883843, + 33.904398 + ], + [ + -117.883795, + 33.904387 + ], + [ + -117.883746, + 33.904385 + ], + [ + -117.8837, + 33.904391 + ], + [ + -117.883669, + 33.904407 + ], + [ + -117.88365, + 33.904433 + ], + [ + -117.883643, + 33.904461 + ], + [ + -117.883643, + 33.904481 + ], + [ + -117.883651, + 33.9045 + ], + [ + -117.883671, + 33.904525 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 187489206, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.007548, + 33.702564 + ], + [ + -118.00717, + 33.702545 + ], + [ + -118.006962, + 33.702586 + ], + [ + -118.006858, + 33.702702 + ], + [ + -118.006676, + 33.703222 + ], + [ + -118.006662, + 33.703405 + ], + [ + -118.006687, + 33.70458 + ], + [ + -118.010268, + 33.704552 + ], + [ + -118.010255, + 33.703554 + ], + [ + -118.009982, + 33.703041 + ], + [ + -118.009659, + 33.702894 + ], + [ + -118.007548, + 33.702564 + ] + ] + ] + }, + "properties": { + "name": "Shipley Nature Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 187489246, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.009475, + 33.698968 + ], + [ + -118.009415, + 33.698939 + ], + [ + -118.009346, + 33.698878 + ], + [ + -118.009295, + 33.698778 + ], + [ + -118.009389, + 33.69871 + ], + [ + -118.009494, + 33.698767 + ], + [ + -118.009582, + 33.698864 + ], + [ + -118.009475, + 33.698968 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 188427851, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.981035, + 33.810392 + ], + [ + -117.98108, + 33.815231 + ], + [ + -117.980874, + 33.815233 + ], + [ + -117.980735, + 33.815245 + ], + [ + -117.980572, + 33.815271 + ], + [ + -117.980427, + 33.815287 + ], + [ + -117.980207, + 33.815289 + ], + [ + -117.980163, + 33.8104 + ], + [ + -117.981035, + 33.810392 + ] + ] + ] + }, + "properties": { + "name": "Hollenbeck Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 188427852, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.984925, + 33.739233 + ], + [ + -117.984909, + 33.737577 + ], + [ + -117.983678, + 33.737615 + ], + [ + -117.98359, + 33.737684 + ], + [ + -117.983597, + 33.737772 + ], + [ + -117.983622, + 33.737868 + ], + [ + -117.98365, + 33.737954 + ], + [ + -117.983675, + 33.738106 + ], + [ + -117.983631, + 33.739202 + ], + [ + -117.98473, + 33.739207 + ], + [ + -117.984925, + 33.739233 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 188709109, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.898249, + 33.599924 + ], + [ + -117.898223, + 33.599934 + ], + [ + -117.898193, + 33.599957 + ], + [ + -117.898131, + 33.600044 + ], + [ + -117.897798, + 33.600562 + ], + [ + -117.897742, + 33.600538 + ], + [ + -117.897654, + 33.600674 + ], + [ + -117.89894, + 33.601077 + ], + [ + -117.899733, + 33.601333 + ], + [ + -117.899828, + 33.601102 + ], + [ + -117.899887, + 33.600987 + ], + [ + -117.899959, + 33.600789 + ], + [ + -117.899893, + 33.600763 + ], + [ + -117.899885, + 33.600757 + ], + [ + -117.899372, + 33.600569 + ], + [ + -117.899203, + 33.600242 + ], + [ + -117.898321, + 33.599936 + ], + [ + -117.898287, + 33.599925 + ], + [ + -117.898249, + 33.599924 + ] + ] + ] + }, + "properties": { + "name": "Peninsula Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 188709212, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.952909, + 33.628209 + ], + [ + -117.952893, + 33.628232 + ], + [ + -117.952898, + 33.628255 + ], + [ + -117.952944, + 33.628285 + ], + [ + -117.95303, + 33.628339 + ], + [ + -117.953071, + 33.628362 + ], + [ + -117.953111, + 33.628371 + ], + [ + -117.953155, + 33.628354 + ], + [ + -117.953161, + 33.628323 + ], + [ + -117.953152, + 33.628291 + ], + [ + -117.953141, + 33.628262 + ], + [ + -117.953082, + 33.628225 + ], + [ + -117.953009, + 33.628191 + ], + [ + -117.952909, + 33.628209 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 188709215, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.898199, + 33.605807 + ], + [ + -117.897919, + 33.60614 + ], + [ + -117.898139, + 33.606273 + ], + [ + -117.898409, + 33.605989 + ], + [ + -117.898199, + 33.605807 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 189617929, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.850326, + 33.777715 + ], + [ + -117.850144, + 33.77716 + ], + [ + -117.850032, + 33.777037 + ], + [ + -117.849956, + 33.776991 + ], + [ + -117.849836, + 33.776958 + ], + [ + -117.849393, + 33.776961 + ], + [ + -117.848916, + 33.777021 + ], + [ + -117.849105, + 33.777964 + ], + [ + -117.849247, + 33.778041 + ], + [ + -117.850326, + 33.777715 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 190314848, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.856351, + 33.775703 + ], + [ + -117.856057, + 33.776126 + ], + [ + -117.856927, + 33.776574 + ], + [ + -117.856987, + 33.776349 + ], + [ + -117.856643, + 33.775691 + ], + [ + -117.856351, + 33.775703 + ] + ] + ] + }, + "properties": { + "name": "Santiago Park Archery Range", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 190343819, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.80556, + 33.700165 + ], + [ + -117.805094, + 33.700624 + ], + [ + -117.806178, + 33.701385 + ], + [ + -117.806643, + 33.700926 + ], + [ + -117.80556, + 33.700165 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 190559892, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.966369, + 33.713534 + ], + [ + -117.966336, + 33.712775 + ], + [ + -117.966949, + 33.712758 + ], + [ + -117.966974, + 33.713156 + ], + [ + -117.966929, + 33.713517 + ], + [ + -117.966369, + 33.713534 + ] + ] + ] + }, + "properties": { + "name": "McDowell Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 190851642, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.879686, + 33.60689 + ], + [ + -117.879158, + 33.607414 + ], + [ + -117.879013, + 33.607475 + ], + [ + -117.881048, + 33.608971 + ], + [ + -117.88134, + 33.608374 + ], + [ + -117.881675, + 33.608011 + ], + [ + -117.881961, + 33.607949 + ], + [ + -117.882229, + 33.607845 + ], + [ + -117.882479, + 33.607824 + ], + [ + -117.882701, + 33.607857 + ], + [ + -117.881594, + 33.607477 + ], + [ + -117.881236, + 33.607306 + ], + [ + -117.879686, + 33.60689 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 191171268, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.795767, + 33.871502 + ], + [ + -117.795187, + 33.871344 + ], + [ + -117.794622, + 33.871315 + ], + [ + -117.794536, + 33.871618 + ], + [ + -117.79438, + 33.871765 + ], + [ + -117.794136, + 33.871761 + ], + [ + -117.794048, + 33.87169 + ], + [ + -117.793916, + 33.87169 + ], + [ + -117.793871, + 33.871814 + ], + [ + -117.79393, + 33.872438 + ], + [ + -117.793986, + 33.872476 + ], + [ + -117.795227, + 33.871891 + ], + [ + -117.795562, + 33.871686 + ], + [ + -117.795767, + 33.871502 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 191172910, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.914734, + 33.893479 + ], + [ + -117.914761, + 33.893207 + ], + [ + -117.914692, + 33.892656 + ], + [ + -117.914661, + 33.892572 + ], + [ + -117.914664, + 33.892408 + ], + [ + -117.91464, + 33.892331 + ], + [ + -117.914568, + 33.892266 + ], + [ + -117.914024, + 33.892237 + ], + [ + -117.913798, + 33.892239 + ], + [ + -117.913593, + 33.892272 + ], + [ + -117.913477, + 33.892261 + ], + [ + -117.913327, + 33.892239 + ], + [ + -117.912973, + 33.892273 + ], + [ + -117.912817, + 33.892283 + ], + [ + -117.912681, + 33.89227 + ], + [ + -117.912588, + 33.892282 + ], + [ + -117.912515, + 33.892304 + ], + [ + -117.91243, + 33.892358 + ], + [ + -117.912332, + 33.892366 + ], + [ + -117.912247, + 33.89234 + ], + [ + -117.9122, + 33.892314 + ], + [ + -117.91212, + 33.892275 + ], + [ + -117.912055, + 33.892255 + ], + [ + -117.911983, + 33.892251 + ], + [ + -117.911092, + 33.892269 + ], + [ + -117.910038, + 33.892278 + ], + [ + -117.909786, + 33.89228 + ], + [ + -117.909639, + 33.892308 + ], + [ + -117.909483, + 33.892337 + ], + [ + -117.907482, + 33.893562 + ], + [ + -117.907165, + 33.893906 + ], + [ + -117.907185, + 33.894158 + ], + [ + -117.907136, + 33.894361 + ], + [ + -117.906796, + 33.894578 + ], + [ + -117.906137, + 33.89489 + ], + [ + -117.905971, + 33.895012 + ], + [ + -117.90585, + 33.895247 + ], + [ + -117.90555, + 33.895442 + ], + [ + -117.905511, + 33.89558 + ], + [ + -117.905651, + 33.895775 + ], + [ + -117.906059, + 33.895727 + ], + [ + -117.906082, + 33.895903 + ], + [ + -117.906036, + 33.896003 + ], + [ + -117.905488, + 33.89619 + ], + [ + -117.905191, + 33.89635 + ], + [ + -117.9049, + 33.896593 + ], + [ + -117.904473, + 33.896282 + ], + [ + -117.903801, + 33.895372 + ], + [ + -117.902913, + 33.895293 + ], + [ + -117.902613, + 33.895318 + ], + [ + -117.902097, + 33.895453 + ], + [ + -117.901725, + 33.895629 + ], + [ + -117.901507, + 33.895624 + ], + [ + -117.901041, + 33.895593 + ], + [ + -117.900612, + 33.895911 + ], + [ + -117.900395, + 33.89621 + ], + [ + -117.900368, + 33.896455 + ], + [ + -117.900045, + 33.896666 + ], + [ + -117.899763, + 33.896742 + ], + [ + -117.899334, + 33.896493 + ], + [ + -117.898669, + 33.896428 + ], + [ + -117.897852, + 33.896321 + ], + [ + -117.897143, + 33.896717 + ], + [ + -117.896774, + 33.89679 + ], + [ + -117.896663, + 33.896748 + ], + [ + -117.896478, + 33.896353 + ], + [ + -117.896764, + 33.895855 + ], + [ + -117.897138, + 33.895376 + ], + [ + -117.897222, + 33.895148 + ], + [ + -117.897313, + 33.894898 + ], + [ + -117.897332, + 33.894642 + ], + [ + -117.897355, + 33.894327 + ], + [ + -117.897558, + 33.894009 + ], + [ + -117.897512, + 33.89381 + ], + [ + -117.897302, + 33.893446 + ], + [ + -117.897226, + 33.893315 + ], + [ + -117.897041, + 33.893139 + ], + [ + -117.896649, + 33.892787 + ], + [ + -117.896192, + 33.892507 + ], + [ + -117.895108, + 33.892469 + ], + [ + -117.893225, + 33.89248 + ], + [ + -117.892057, + 33.892465 + ], + [ + -117.891872, + 33.893204 + ], + [ + -117.891905, + 33.893752 + ], + [ + -117.892034, + 33.894599 + ], + [ + -117.89259, + 33.89486 + ], + [ + -117.892669, + 33.894897 + ], + [ + -117.892694, + 33.894909 + ], + [ + -117.893275, + 33.89515 + ], + [ + -117.893811, + 33.895361 + ], + [ + -117.894295, + 33.895568 + ], + [ + -117.894452, + 33.895591 + ], + [ + -117.894568, + 33.895511 + ], + [ + -117.894628, + 33.895396 + ], + [ + -117.894628, + 33.8953 + ], + [ + -117.894314, + 33.895066 + ], + [ + -117.894295, + 33.895055 + ], + [ + -117.893681, + 33.894687 + ], + [ + -117.893252, + 33.894296 + ], + [ + -117.893026, + 33.893833 + ], + [ + -117.892952, + 33.893204 + ], + [ + -117.892989, + 33.893086 + ], + [ + -117.893303, + 33.893158 + ], + [ + -117.893649, + 33.893227 + ], + [ + -117.894069, + 33.893277 + ], + [ + -117.894706, + 33.893315 + ], + [ + -117.895357, + 33.893319 + ], + [ + -117.895971, + 33.893331 + ], + [ + -117.896192, + 33.893377 + ], + [ + -117.896367, + 33.893469 + ], + [ + -117.896501, + 33.893649 + ], + [ + -117.896405, + 33.894123 + ], + [ + -117.896242, + 33.894547 + ], + [ + -117.896193, + 33.895077 + ], + [ + -117.89605, + 33.895472 + ], + [ + -117.895916, + 33.895589 + ], + [ + -117.895888, + 33.895671 + ], + [ + -117.895915, + 33.895761 + ], + [ + -117.895789, + 33.896031 + ], + [ + -117.895718, + 33.896101 + ], + [ + -117.89496, + 33.895848 + ], + [ + -117.894402, + 33.896146 + ], + [ + -117.894037, + 33.896047 + ], + [ + -117.893894, + 33.89615 + ], + [ + -117.893843, + 33.896242 + ], + [ + -117.893784, + 33.896588 + ], + [ + -117.893947, + 33.896869 + ], + [ + -117.894095, + 33.897038 + ], + [ + -117.894198, + 33.897556 + ], + [ + -117.894397, + 33.897717 + ], + [ + -117.894549, + 33.897805 + ], + [ + -117.895403, + 33.897794 + ], + [ + -117.8955, + 33.897958 + ], + [ + -117.895311, + 33.898265 + ], + [ + -117.895283, + 33.898525 + ], + [ + -117.895421, + 33.89864 + ], + [ + -117.895754, + 33.89874 + ], + [ + -117.896201, + 33.898778 + ], + [ + -117.896981, + 33.898954 + ], + [ + -117.89754, + 33.899062 + ], + [ + -117.898735, + 33.899238 + ], + [ + -117.899695, + 33.89931 + ], + [ + -117.900733, + 33.899333 + ], + [ + -117.901453, + 33.899341 + ], + [ + -117.90203, + 33.899326 + ], + [ + -117.905454, + 33.899245 + ], + [ + -117.907051, + 33.899238 + ], + [ + -117.90705, + 33.899153 + ], + [ + -117.906998, + 33.896248 + ], + [ + -117.907142, + 33.895912 + ], + [ + -117.909687, + 33.895834 + ], + [ + -117.91171, + 33.895772 + ], + [ + -117.912275, + 33.895561 + ], + [ + -117.913091, + 33.895315 + ], + [ + -117.912652, + 33.894698 + ], + [ + -117.911535, + 33.894564 + ], + [ + -117.910686, + 33.894415 + ], + [ + -117.910073, + 33.894235 + ], + [ + -117.910179, + 33.893943 + ], + [ + -117.91094, + 33.893541 + ], + [ + -117.911605, + 33.893591 + ], + [ + -117.912048, + 33.893652 + ], + [ + -117.913391, + 33.89361 + ], + [ + -117.914734, + 33.893479 + ] + ] + ] + }, + "properties": { + "name": "Coyote Hills Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 191501724, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.999563, + 33.688556 + ], + [ + -118.000105, + 33.689297 + ], + [ + -117.999109, + 33.690283 + ], + [ + -117.998226, + 33.689652 + ], + [ + -117.998934, + 33.688956 + ], + [ + -117.999176, + 33.688777 + ], + [ + -117.999307, + 33.688679 + ], + [ + -117.999563, + 33.688556 + ] + ] + ] + }, + "properties": { + "name": "Peter Green Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 191502013, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.007272, + 33.682887 + ], + [ + -118.007321, + 33.683404 + ], + [ + -118.007841, + 33.683416 + ], + [ + -118.008073, + 33.683466 + ], + [ + -118.009862, + 33.684422 + ], + [ + -118.009959, + 33.684544 + ], + [ + -118.010255, + 33.68464 + ], + [ + -118.010524, + 33.684687 + ], + [ + -118.010528, + 33.684846 + ], + [ + -118.011134, + 33.684973 + ], + [ + -118.01125, + 33.684933 + ], + [ + -118.011894, + 33.685157 + ], + [ + -118.011988, + 33.68521 + ], + [ + -118.012489, + 33.685138 + ], + [ + -118.012437, + 33.684712 + ], + [ + -118.011939, + 33.68469 + ], + [ + -118.011602, + 33.684643 + ], + [ + -118.011291, + 33.684587 + ], + [ + -118.01082, + 33.684394 + ], + [ + -118.010449, + 33.684173 + ], + [ + -118.009948, + 33.683762 + ], + [ + -118.009664, + 33.683529 + ], + [ + -118.009473, + 33.683382 + ], + [ + -118.009263, + 33.683239 + ], + [ + -118.009014, + 33.683111 + ], + [ + -118.008633, + 33.682964 + ], + [ + -118.008374, + 33.682896 + ], + [ + -118.008101, + 33.682854 + ], + [ + -118.007826, + 33.68284 + ], + [ + -118.007604, + 33.682845 + ], + [ + -118.007272, + 33.682887 + ] + ] + ] + }, + "properties": { + "name": "Discovery Well Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 191502014, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.000723, + 33.692433 + ], + [ + -118.001482, + 33.692746 + ], + [ + -118.001716, + 33.693089 + ], + [ + -118.002275, + 33.693407 + ], + [ + -118.002256, + 33.693691 + ], + [ + -118.003725, + 33.693692 + ], + [ + -118.003721, + 33.693372 + ], + [ + -118.003765, + 33.693297 + ], + [ + -118.003802, + 33.693268 + ], + [ + -118.003836, + 33.693244 + ], + [ + -118.003894, + 33.693227 + ], + [ + -118.004296, + 33.693202 + ], + [ + -118.004748, + 33.692508 + ], + [ + -118.005115, + 33.692217 + ], + [ + -118.005237, + 33.692022 + ], + [ + -118.005572, + 33.691957 + ], + [ + -118.005561, + 33.691435 + ], + [ + -118.005528, + 33.691379 + ], + [ + -118.005469, + 33.691348 + ], + [ + -118.005382, + 33.691321 + ], + [ + -118.004938, + 33.691279 + ], + [ + -118.004755, + 33.691542 + ], + [ + -118.004507, + 33.691667 + ], + [ + -118.004159, + 33.692221 + ], + [ + -118.003974, + 33.692379 + ], + [ + -118.003894, + 33.692493 + ], + [ + -118.003775, + 33.692578 + ], + [ + -118.00364, + 33.692624 + ], + [ + -118.003505, + 33.692634 + ], + [ + -118.003361, + 33.692608 + ], + [ + -118.003186, + 33.692518 + ], + [ + -118.003089, + 33.692424 + ], + [ + -118.002953, + 33.692215 + ], + [ + -118.002625, + 33.691938 + ], + [ + -118.002774, + 33.691656 + ], + [ + -118.002162, + 33.691412 + ], + [ + -118.002026, + 33.691393 + ], + [ + -118.001852, + 33.691395 + ], + [ + -118.001681, + 33.691426 + ], + [ + -118.001564, + 33.691477 + ], + [ + -118.001439, + 33.691553 + ], + [ + -118.001244, + 33.691744 + ], + [ + -118.000972, + 33.69205 + ], + [ + -118.000723, + 33.692433 + ] + ] + ] + }, + "properties": { + "name": "John Baca Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 194542885, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.789154, + 33.739678 + ], + [ + -117.788299, + 33.740545 + ], + [ + -117.788006, + 33.740259 + ], + [ + -117.787902, + 33.740082 + ], + [ + -117.787857, + 33.739898 + ], + [ + -117.787882, + 33.739692 + ], + [ + -117.787934, + 33.73954 + ], + [ + -117.788031, + 33.739399 + ], + [ + -117.788105, + 33.739325 + ], + [ + -117.788187, + 33.73929 + ], + [ + -117.788259, + 33.739292 + ], + [ + -117.788673, + 33.739505 + ], + [ + -117.789154, + 33.739678 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 194875792, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.024269, + 33.796071 + ], + [ + -118.024146, + 33.796127 + ], + [ + -118.024084, + 33.796343 + ], + [ + -118.024086, + 33.797097 + ], + [ + -118.023362, + 33.797098 + ], + [ + -118.023361, + 33.79627 + ], + [ + -118.023358, + 33.796254 + ], + [ + -118.02332, + 33.796184 + ], + [ + -118.022757, + 33.796112 + ], + [ + -118.022759, + 33.795789 + ], + [ + -118.022759, + 33.795754 + ], + [ + -118.022759, + 33.795754 + ], + [ + -118.024749, + 33.795786 + ], + [ + -118.024723, + 33.796066 + ], + [ + -118.024269, + 33.796071 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 194875793, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.019676, + 33.795559 + ], + [ + -118.019675, + 33.794485 + ], + [ + -118.018079, + 33.794486 + ], + [ + -118.01808, + 33.79556 + ], + [ + -118.019676, + 33.795559 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 194875794, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.017328, + 33.809813 + ], + [ + -118.017312, + 33.808818 + ], + [ + -118.016764, + 33.808824 + ], + [ + -118.016778, + 33.809692 + ], + [ + -118.01678, + 33.809819 + ], + [ + -118.017296, + 33.809814 + ], + [ + -118.017328, + 33.809813 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 194875795, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.024574, + 33.795607 + ], + [ + -118.024577, + 33.794573 + ], + [ + -118.024363, + 33.794513 + ], + [ + -118.023807, + 33.794766 + ], + [ + -118.023689, + 33.794733 + ], + [ + -118.023601, + 33.794791 + ], + [ + -118.024079, + 33.795611 + ], + [ + -118.024574, + 33.795607 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 195210913, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.81805, + 33.65985 + ], + [ + -117.817933, + 33.660145 + ], + [ + -117.817753, + 33.660425 + ], + [ + -117.81727, + 33.660759 + ], + [ + -117.817487, + 33.661144 + ], + [ + -117.817532, + 33.661409 + ], + [ + -117.817544, + 33.661808 + ], + [ + -117.819632, + 33.661663 + ], + [ + -117.820299, + 33.659658 + ], + [ + -117.819462, + 33.659616 + ], + [ + -117.819442, + 33.659855 + ], + [ + -117.81805, + 33.65985 + ] + ] + ] + }, + "properties": { + "name": "University Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 195210920, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.860889, + 33.625965 + ], + [ + -117.860809, + 33.626246 + ], + [ + -117.860828, + 33.626441 + ], + [ + -117.860749, + 33.626725 + ], + [ + -117.860677, + 33.626995 + ], + [ + -117.86043, + 33.627472 + ], + [ + -117.860288, + 33.627715 + ], + [ + -117.860157, + 33.62789 + ], + [ + -117.860442, + 33.627963 + ], + [ + -117.860699, + 33.628066 + ], + [ + -117.860841, + 33.628158 + ], + [ + -117.860877, + 33.628242 + ], + [ + -117.860863, + 33.62831 + ], + [ + -117.860832, + 33.628341 + ], + [ + -117.860911, + 33.628385 + ], + [ + -117.860884, + 33.628416 + ], + [ + -117.861551, + 33.628868 + ], + [ + -117.861598, + 33.628849 + ], + [ + -117.861662, + 33.628786 + ], + [ + -117.861757, + 33.628686 + ], + [ + -117.86181, + 33.628615 + ], + [ + -117.861816, + 33.628555 + ], + [ + -117.861633, + 33.628014 + ], + [ + -117.861551, + 33.627558 + ], + [ + -117.861447, + 33.62748 + ], + [ + -117.86148, + 33.62738 + ], + [ + -117.861474, + 33.627249 + ], + [ + -117.861339, + 33.626985 + ], + [ + -117.861275, + 33.626718 + ], + [ + -117.861285, + 33.626443 + ], + [ + -117.861229, + 33.626162 + ], + [ + -117.861157, + 33.626037 + ], + [ + -117.861108, + 33.625973 + ], + [ + -117.861085, + 33.625909 + ], + [ + -117.860947, + 33.625935 + ], + [ + -117.860889, + 33.625965 + ] + ] + ] + }, + "properties": { + "name": "Bonita Canyon Sports Park West", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 195210921, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.906245, + 33.62229 + ], + [ + -117.905589, + 33.621996 + ], + [ + -117.905189, + 33.621911 + ], + [ + -117.90446, + 33.622017 + ], + [ + -117.904526, + 33.622278 + ], + [ + -117.904438, + 33.622493 + ], + [ + -117.904256, + 33.622648 + ], + [ + -117.903852, + 33.622806 + ], + [ + -117.904194, + 33.622994 + ], + [ + -117.905079, + 33.623279 + ], + [ + -117.905167, + 33.623348 + ], + [ + -117.905221, + 33.623573 + ], + [ + -117.905466, + 33.623646 + ], + [ + -117.906245, + 33.62229 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 195210922, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.808842, + 33.660934 + ], + [ + -117.807887, + 33.660388 + ], + [ + -117.806753, + 33.65966 + ], + [ + -117.807014, + 33.659547 + ], + [ + -117.807204, + 33.659422 + ], + [ + -117.807606, + 33.659724 + ], + [ + -117.808066, + 33.659529 + ], + [ + -117.808365, + 33.659494 + ], + [ + -117.808646, + 33.659543 + ], + [ + -117.808829, + 33.659618 + ], + [ + -117.809013, + 33.659774 + ], + [ + -117.809277, + 33.66003 + ], + [ + -117.809528, + 33.660168 + ], + [ + -117.809801, + 33.660257 + ], + [ + -117.809682, + 33.660512 + ], + [ + -117.809499, + 33.660682 + ], + [ + -117.809286, + 33.660789 + ], + [ + -117.808842, + 33.660934 + ] + ] + ] + }, + "properties": { + "name": "Dave Robins Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 195210923, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.849445, + 33.627339 + ], + [ + -117.849701, + 33.628365 + ], + [ + -117.851085, + 33.628033 + ], + [ + -117.851878, + 33.627913 + ], + [ + -117.852627, + 33.627897 + ], + [ + -117.853391, + 33.627946 + ], + [ + -117.854085, + 33.628057 + ], + [ + -117.854878, + 33.628266 + ], + [ + -117.85679, + 33.628886 + ], + [ + -117.857671, + 33.627827 + ], + [ + -117.856375, + 33.627563 + ], + [ + -117.854655, + 33.627044 + ], + [ + -117.853682, + 33.626816 + ], + [ + -117.852913, + 33.626712 + ], + [ + -117.852036, + 33.62672 + ], + [ + -117.851169, + 33.626823 + ], + [ + -117.850307, + 33.627032 + ], + [ + -117.849445, + 33.627339 + ] + ] + ] + }, + "properties": { + "name": "Bonita Canyon Sports Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 195210924, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.789627, + 33.710466 + ], + [ + -117.788299, + 33.711775 + ], + [ + -117.788259, + 33.711842 + ], + [ + -117.788276, + 33.711895 + ], + [ + -117.78835, + 33.711941 + ], + [ + -117.790904, + 33.71131 + ], + [ + -117.789712, + 33.710458 + ], + [ + -117.78967, + 33.710449 + ], + [ + -117.789645, + 33.710452 + ], + [ + -117.789627, + 33.710466 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 195670183, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.973003, + 33.651936 + ], + [ + -117.973019, + 33.651918 + ], + [ + -117.97303, + 33.651893 + ], + [ + -117.973028, + 33.651872 + ], + [ + -117.973016, + 33.651844 + ], + [ + -117.972998, + 33.651824 + ], + [ + -117.972982, + 33.651814 + ], + [ + -117.972964, + 33.651801 + ], + [ + -117.972948, + 33.651786 + ], + [ + -117.972942, + 33.651771 + ], + [ + -117.972944, + 33.651754 + ], + [ + -117.972954, + 33.651741 + ], + [ + -117.972969, + 33.65173 + ], + [ + -117.972988, + 33.651722 + ], + [ + -117.973012, + 33.651717 + ], + [ + -117.973044, + 33.651713 + ], + [ + -117.973075, + 33.651705 + ], + [ + -117.9731, + 33.651693 + ], + [ + -117.973116, + 33.651678 + ], + [ + -117.973127, + 33.651663 + ], + [ + -117.973133, + 33.651648 + ], + [ + -117.973136, + 33.65163 + ], + [ + -117.973132, + 33.651611 + ], + [ + -117.973122, + 33.651593 + ], + [ + -117.973106, + 33.651579 + ], + [ + -117.973093, + 33.651568 + ], + [ + -117.973076, + 33.651561 + ], + [ + -117.973057, + 33.651555 + ], + [ + -117.973031, + 33.651552 + ], + [ + -117.973005, + 33.651555 + ], + [ + -117.972973, + 33.651567 + ], + [ + -117.972954, + 33.651578 + ], + [ + -117.972935, + 33.651589 + ], + [ + -117.972921, + 33.651599 + ], + [ + -117.972905, + 33.651609 + ], + [ + -117.972885, + 33.651614 + ], + [ + -117.972867, + 33.651615 + ], + [ + -117.972848, + 33.651611 + ], + [ + -117.972829, + 33.651598 + ], + [ + -117.97282, + 33.651583 + ], + [ + -117.972814, + 33.651564 + ], + [ + -117.972818, + 33.651548 + ], + [ + -117.972827, + 33.651531 + ], + [ + -117.972841, + 33.651519 + ], + [ + -117.972854, + 33.651513 + ], + [ + -117.972869, + 33.651508 + ], + [ + -117.97289, + 33.651508 + ], + [ + -117.972909, + 33.651508 + ], + [ + -117.972936, + 33.651508 + ], + [ + -117.972957, + 33.651508 + ], + [ + -117.972986, + 33.651501 + ], + [ + -117.973017, + 33.65149 + ], + [ + -117.973039, + 33.651475 + ], + [ + -117.973056, + 33.651454 + ], + [ + -117.973071, + 33.651428 + ], + [ + -117.97308, + 33.6514 + ], + [ + -117.973078, + 33.65138 + ], + [ + -117.973065, + 33.651355 + ], + [ + -117.973047, + 33.651337 + ], + [ + -117.973025, + 33.651324 + ], + [ + -117.972997, + 33.651315 + ], + [ + -117.972976, + 33.651315 + ], + [ + -117.972948, + 33.65132 + ], + [ + -117.972927, + 33.651332 + ], + [ + -117.972911, + 33.651347 + ], + [ + -117.9729, + 33.651367 + ], + [ + -117.972887, + 33.651387 + ], + [ + -117.972869, + 33.651401 + ], + [ + -117.972846, + 33.651408 + ], + [ + -117.972809, + 33.651407 + ], + [ + -117.972789, + 33.651402 + ], + [ + -117.972769, + 33.651395 + ], + [ + -117.972749, + 33.651386 + ], + [ + -117.972733, + 33.651375 + ], + [ + -117.972717, + 33.651355 + ], + [ + -117.972701, + 33.651336 + ], + [ + -117.972685, + 33.65132 + ], + [ + -117.972662, + 33.651307 + ], + [ + -117.972637, + 33.651297 + ], + [ + -117.97261, + 33.651296 + ], + [ + -117.972584, + 33.6513 + ], + [ + -117.972555, + 33.651314 + ], + [ + -117.972534, + 33.651333 + ], + [ + -117.972523, + 33.651348 + ], + [ + -117.972517, + 33.651369 + ], + [ + -117.972511, + 33.651396 + ], + [ + -117.972511, + 33.651415 + ], + [ + -117.972514, + 33.651434 + ], + [ + -117.972527, + 33.651463 + ], + [ + -117.97255, + 33.651484 + ], + [ + -117.972575, + 33.651498 + ], + [ + -117.972602, + 33.651511 + ], + [ + -117.972622, + 33.651512 + ], + [ + -117.97267, + 33.651515 + ], + [ + -117.972701, + 33.651515 + ], + [ + -117.972721, + 33.651517 + ], + [ + -117.972732, + 33.651523 + ], + [ + -117.972737, + 33.651532 + ], + [ + -117.972737, + 33.65154 + ], + [ + -117.972735, + 33.65155 + ], + [ + -117.972727, + 33.651559 + ], + [ + -117.972718, + 33.651567 + ], + [ + -117.972698, + 33.651575 + ], + [ + -117.972618, + 33.651601 + ], + [ + -117.97259, + 33.651614 + ], + [ + -117.972574, + 33.651625 + ], + [ + -117.972562, + 33.651642 + ], + [ + -117.972557, + 33.651658 + ], + [ + -117.972556, + 33.651679 + ], + [ + -117.972563, + 33.651702 + ], + [ + -117.972578, + 33.651727 + ], + [ + -117.972608, + 33.651757 + ], + [ + -117.972625, + 33.65177 + ], + [ + -117.972648, + 33.651778 + ], + [ + -117.972674, + 33.65178 + ], + [ + -117.972706, + 33.651776 + ], + [ + -117.972737, + 33.65177 + ], + [ + -117.972764, + 33.651769 + ], + [ + -117.972778, + 33.651769 + ], + [ + -117.972793, + 33.651774 + ], + [ + -117.972805, + 33.651783 + ], + [ + -117.97281, + 33.651795 + ], + [ + -117.972812, + 33.651812 + ], + [ + -117.972809, + 33.651832 + ], + [ + -117.9728, + 33.65185 + ], + [ + -117.972783, + 33.651873 + ], + [ + -117.972775, + 33.651888 + ], + [ + -117.97277, + 33.651911 + ], + [ + -117.972769, + 33.651933 + ], + [ + -117.972775, + 33.65195 + ], + [ + -117.972789, + 33.651967 + ], + [ + -117.972805, + 33.651976 + ], + [ + -117.972833, + 33.651984 + ], + [ + -117.972866, + 33.651984 + ], + [ + -117.972893, + 33.651978 + ], + [ + -117.972926, + 33.65197 + ], + [ + -117.972951, + 33.651962 + ], + [ + -117.97297, + 33.651953 + ], + [ + -117.973003, + 33.651936 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 195670317, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.974508, + 33.651983 + ], + [ + -117.973778, + 33.652006 + ], + [ + -117.973499, + 33.652009 + ], + [ + -117.973455, + 33.652044 + ], + [ + -117.973468, + 33.652738 + ], + [ + -117.973469, + 33.652856 + ], + [ + -117.974221, + 33.652667 + ], + [ + -117.974332, + 33.652528 + ], + [ + -117.974384, + 33.652464 + ], + [ + -117.974442, + 33.652351 + ], + [ + -117.974487, + 33.652243 + ], + [ + -117.974504, + 33.652137 + ], + [ + -117.97451, + 33.652049 + ], + [ + -117.974508, + 33.651983 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 195670606, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.973149, + 33.652743 + ], + [ + -117.97315, + 33.652744 + ], + [ + -117.972942, + 33.652745 + ], + [ + -117.972936, + 33.652414 + ], + [ + -117.973148, + 33.652411 + ], + [ + -117.973149, + 33.652743 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 195822590, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.804349, + 33.602873 + ], + [ + -117.804793, + 33.602957 + ], + [ + -117.80543, + 33.603247 + ], + [ + -117.805489, + 33.603731 + ], + [ + -117.804301, + 33.605968 + ], + [ + -117.803471, + 33.605722 + ], + [ + -117.802796, + 33.605669 + ], + [ + -117.802429, + 33.605682 + ], + [ + -117.802486, + 33.605401 + ], + [ + -117.802838, + 33.604982 + ], + [ + -117.803475, + 33.604444 + ], + [ + -117.803817, + 33.604095 + ], + [ + -117.804033, + 33.603662 + ], + [ + -117.804349, + 33.602873 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 195822593, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.828293, + 33.583466 + ], + [ + -117.827908, + 33.583149 + ], + [ + -117.827578, + 33.583387 + ], + [ + -117.827171, + 33.583522 + ], + [ + -117.826932, + 33.583582 + ], + [ + -117.827002, + 33.583972 + ], + [ + -117.826916, + 33.584422 + ], + [ + -117.827494, + 33.584191 + ], + [ + -117.828293, + 33.583466 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 197576657, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.906842, + 33.830268 + ], + [ + -117.905995, + 33.830462 + ], + [ + -117.905947, + 33.830469 + ], + [ + -117.905912, + 33.830464 + ], + [ + -117.905885, + 33.830426 + ], + [ + -117.905888, + 33.830377 + ], + [ + -117.905909, + 33.830337 + ], + [ + -117.905927, + 33.830292 + ], + [ + -117.905923, + 33.830253 + ], + [ + -117.905907, + 33.830219 + ], + [ + -117.905866, + 33.830197 + ], + [ + -117.905818, + 33.830166 + ], + [ + -117.905791, + 33.830119 + ], + [ + -117.905778, + 33.830061 + ], + [ + -117.905805, + 33.830039 + ], + [ + -117.906721, + 33.829833 + ], + [ + -117.906749, + 33.829831 + ], + [ + -117.90678, + 33.829869 + ], + [ + -117.906797, + 33.829963 + ], + [ + -117.906754, + 33.830003 + ], + [ + -117.906745, + 33.83004 + ], + [ + -117.906747, + 33.830078 + ], + [ + -117.906789, + 33.830117 + ], + [ + -117.906837, + 33.830137 + ], + [ + -117.90686, + 33.830172 + ], + [ + -117.906882, + 33.830232 + ], + [ + -117.906842, + 33.830268 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 198884984, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.920864, + 33.806176 + ], + [ + -117.920911, + 33.806167 + ], + [ + -117.920936, + 33.806161 + ], + [ + -117.920959, + 33.806148 + ], + [ + -117.920976, + 33.806135 + ], + [ + -117.920988, + 33.806123 + ], + [ + -117.921063, + 33.8061 + ], + [ + -117.921142, + 33.806089 + ], + [ + -117.921267, + 33.806078 + ], + [ + -117.921421, + 33.806068 + ], + [ + -117.9215, + 33.806066 + ], + [ + -117.921636, + 33.806076 + ], + [ + -117.921645, + 33.806077 + ], + [ + -117.921695, + 33.806084 + ], + [ + -117.921803, + 33.806103 + ], + [ + -117.921943, + 33.806127 + ], + [ + -117.922022, + 33.806143 + ], + [ + -117.922093, + 33.806155 + ], + [ + -117.922116, + 33.806158 + ], + [ + -117.922149, + 33.806163 + ], + [ + -117.922153, + 33.806132 + ], + [ + -117.922158, + 33.806098 + ], + [ + -117.922161, + 33.806074 + ], + [ + -117.922164, + 33.806053 + ], + [ + -117.92208, + 33.806024 + ], + [ + -117.922086, + 33.806006 + ], + [ + -117.922094, + 33.805972 + ], + [ + -117.922098, + 33.805934 + ], + [ + -117.922091, + 33.805899 + ], + [ + -117.92207, + 33.80586 + ], + [ + -117.922028, + 33.805824 + ], + [ + -117.92197, + 33.805792 + ], + [ + -117.921982, + 33.805763 + ], + [ + -117.921943, + 33.805749 + ], + [ + -117.921929, + 33.805778 + ], + [ + -117.921909, + 33.805771 + ], + [ + -117.921842, + 33.805749 + ], + [ + -117.921696, + 33.805716 + ], + [ + -117.921705, + 33.805693 + ], + [ + -117.921664, + 33.805683 + ], + [ + -117.921656, + 33.805706 + ], + [ + -117.921579, + 33.805685 + ], + [ + -117.921576, + 33.805669 + ], + [ + -117.921561, + 33.805655 + ], + [ + -117.921541, + 33.805647 + ], + [ + -117.921521, + 33.805643 + ], + [ + -117.921522, + 33.805628 + ], + [ + -117.921495, + 33.805627 + ], + [ + -117.921475, + 33.805621 + ], + [ + -117.921437, + 33.805616 + ], + [ + -117.9214, + 33.805615 + ], + [ + -117.921373, + 33.805617 + ], + [ + -117.921351, + 33.805626 + ], + [ + -117.921323, + 33.805625 + ], + [ + -117.921322, + 33.805642 + ], + [ + -117.921297, + 33.805643 + ], + [ + -117.921275, + 33.80565 + ], + [ + -117.921262, + 33.805673 + ], + [ + -117.921262, + 33.805696 + ], + [ + -117.921192, + 33.805711 + ], + [ + -117.921155, + 33.805721 + ], + [ + -117.921043, + 33.80575 + ], + [ + -117.920945, + 33.805781 + ], + [ + -117.920904, + 33.805792 + ], + [ + -117.920872, + 33.805786 + ], + [ + -117.920872, + 33.805804 + ], + [ + -117.920872, + 33.805815 + ], + [ + -117.920856, + 33.805813 + ], + [ + -117.920833, + 33.80581 + ], + [ + -117.920825, + 33.80581 + ], + [ + -117.92081, + 33.80581 + ], + [ + -117.920794, + 33.805812 + ], + [ + -117.920794, + 33.805795 + ], + [ + -117.920777, + 33.8058 + ], + [ + -117.920634, + 33.805904 + ], + [ + -117.920634, + 33.805904 + ], + [ + -117.920599, + 33.80594 + ], + [ + -117.920595, + 33.805988 + ], + [ + -117.920596, + 33.806044 + ], + [ + -117.920597, + 33.806084 + ], + [ + -117.920655, + 33.806081 + ], + [ + -117.920657, + 33.806089 + ], + [ + -117.920681, + 33.806119 + ], + [ + -117.920682, + 33.806121 + ], + [ + -117.920726, + 33.806154 + ], + [ + -117.920733, + 33.806156 + ], + [ + -117.920779, + 33.806174 + ], + [ + -117.920827, + 33.806179 + ], + [ + -117.920864, + 33.806176 + ] + ] + ] + }, + "properties": { + "name": "Paradise Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 203833065, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.871936, + 33.817781 + ], + [ + -117.871744, + 33.818287 + ], + [ + -117.871553, + 33.818236 + ], + [ + -117.871282, + 33.818175 + ], + [ + -117.871213, + 33.81818 + ], + [ + -117.871157, + 33.818221 + ], + [ + -117.870935, + 33.81885 + ], + [ + -117.87094, + 33.818926 + ], + [ + -117.871042, + 33.818985 + ], + [ + -117.871254, + 33.819031 + ], + [ + -117.871279, + 33.819063 + ], + [ + -117.871505, + 33.819141 + ], + [ + -117.871218, + 33.819985 + ], + [ + -117.871308, + 33.820304 + ], + [ + -117.873611, + 33.821025 + ], + [ + -117.874564, + 33.820054 + ], + [ + -117.874577, + 33.81893 + ], + [ + -117.874144, + 33.818538 + ], + [ + -117.871936, + 33.817781 + ] + ] + ] + }, + "properties": { + "name": "The Islands Golf Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 206082827, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921337, + 33.813226 + ], + [ + -117.921426, + 33.813336 + ], + [ + -117.921482, + 33.813303 + ], + [ + -117.921526, + 33.81324 + ], + [ + -117.921568, + 33.813134 + ], + [ + -117.921567, + 33.813078 + ], + [ + -117.921522, + 33.812971 + ], + [ + -117.921492, + 33.812903 + ], + [ + -117.921448, + 33.812841 + ], + [ + -117.921401, + 33.812821 + ], + [ + -117.921338, + 33.812794 + ], + [ + -117.921224, + 33.812761 + ], + [ + -117.921204, + 33.812773 + ], + [ + -117.921172, + 33.812785 + ], + [ + -117.921138, + 33.812771 + ], + [ + -117.921109, + 33.81275 + ], + [ + -117.920964, + 33.812744 + ], + [ + -117.921042, + 33.812794 + ], + [ + -117.921098, + 33.812823 + ], + [ + -117.921208, + 33.812816 + ], + [ + -117.921284, + 33.812825 + ], + [ + -117.921386, + 33.812862 + ], + [ + -117.92146, + 33.812939 + ], + [ + -117.921499, + 33.813084 + ], + [ + -117.921478, + 33.813142 + ], + [ + -117.921372, + 33.813199 + ], + [ + -117.921337, + 33.813226 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 206493241, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.885385, + 33.884749 + ], + [ + -117.885159, + 33.885081 + ], + [ + -117.884868, + 33.88514 + ], + [ + -117.884791, + 33.884911 + ], + [ + -117.884414, + 33.884928 + ], + [ + -117.884243, + 33.884988 + ], + [ + -117.884189, + 33.884953 + ], + [ + -117.884186, + 33.884884 + ], + [ + -117.884068, + 33.884884 + ], + [ + -117.88405, + 33.884619 + ], + [ + -117.884366, + 33.884619 + ], + [ + -117.884371, + 33.883997 + ], + [ + -117.884315, + 33.883955 + ], + [ + -117.884299, + 33.88367 + ], + [ + -117.885628, + 33.883654 + ], + [ + -117.886532, + 33.88365 + ], + [ + -117.886528, + 33.883673 + ], + [ + -117.886541, + 33.884641 + ], + [ + -117.886541, + 33.884663 + ], + [ + -117.885621, + 33.884671 + ], + [ + -117.885385, + 33.884749 + ] + ] + ] + }, + "properties": { + "name": "Athletic Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 206636191, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.878916, + 33.905687 + ], + [ + -117.878803, + 33.905779 + ], + [ + -117.878763, + 33.905776 + ], + [ + -117.878773, + 33.905799 + ], + [ + -117.878658, + 33.905892 + ], + [ + -117.87861, + 33.90589 + ], + [ + -117.878385, + 33.905678 + ], + [ + -117.878382, + 33.905647 + ], + [ + -117.878495, + 33.905565 + ], + [ + -117.878527, + 33.905558 + ], + [ + -117.878532, + 33.905536 + ], + [ + -117.878653, + 33.905449 + ], + [ + -117.87868, + 33.905451 + ], + [ + -117.878918, + 33.905658 + ], + [ + -117.878916, + 33.905687 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 206636194, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.878556, + 33.908712 + ], + [ + -117.878533, + 33.908727 + ], + [ + -117.878511, + 33.908733 + ], + [ + -117.878478, + 33.908733 + ], + [ + -117.878449, + 33.908722 + ], + [ + -117.878428, + 33.908706 + ], + [ + -117.87842, + 33.908694 + ], + [ + -117.878413, + 33.908668 + ], + [ + -117.878417, + 33.908643 + ], + [ + -117.878437, + 33.908617 + ], + [ + -117.878468, + 33.908601 + ], + [ + -117.8785, + 33.908597 + ], + [ + -117.87854, + 33.908608 + ], + [ + -117.878564, + 33.908628 + ], + [ + -117.878576, + 33.90865 + ], + [ + -117.878578, + 33.908664 + ], + [ + -117.878569, + 33.908697 + ], + [ + -117.878556, + 33.908712 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 206744146, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.020899, + 33.826438 + ], + [ + -118.020791, + 33.826451 + ], + [ + -118.020727, + 33.826491 + ], + [ + -118.020561, + 33.826514 + ], + [ + -118.020336, + 33.826467 + ], + [ + -118.019786, + 33.826427 + ], + [ + -118.019815, + 33.827603 + ], + [ + -118.019818, + 33.82763 + ], + [ + -118.01985, + 33.827666 + ], + [ + -118.019909, + 33.827695 + ], + [ + -118.019952, + 33.827701 + ], + [ + -118.019965, + 33.827703 + ], + [ + -118.020301, + 33.827699 + ], + [ + -118.020394, + 33.827715 + ], + [ + -118.02062, + 33.827755 + ], + [ + -118.020572, + 33.827481 + ], + [ + -118.02059, + 33.827445 + ], + [ + -118.020633, + 33.82736 + ], + [ + -118.020738, + 33.827222 + ], + [ + -118.020824, + 33.827149 + ], + [ + -118.020912, + 33.827109 + ], + [ + -118.020899, + 33.826438 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 206744148, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.021543, + 33.828175 + ], + [ + -118.021483, + 33.828114 + ], + [ + -118.02025, + 33.828131 + ], + [ + -118.020234, + 33.828577 + ], + [ + -118.020298, + 33.828751 + ], + [ + -118.0204, + 33.828951 + ], + [ + -118.020421, + 33.828967 + ], + [ + -118.020539, + 33.829054 + ], + [ + -118.020727, + 33.829112 + ], + [ + -118.021054, + 33.829174 + ], + [ + -118.021083, + 33.829172 + ], + [ + -118.021611, + 33.829143 + ], + [ + -118.021607, + 33.828895 + ], + [ + -118.021614, + 33.828538 + ], + [ + -118.021611, + 33.828331 + ], + [ + -118.021566, + 33.828197 + ], + [ + -118.021543, + 33.828175 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 207093979, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.80027, + 33.673357 + ], + [ + -117.80011, + 33.673566 + ], + [ + -117.801077, + 33.674002 + ], + [ + -117.801149, + 33.67448 + ], + [ + -117.80104, + 33.674698 + ], + [ + -117.800925, + 33.674926 + ], + [ + -117.800753, + 33.675166 + ], + [ + -117.800758, + 33.675299 + ], + [ + -117.800418, + 33.675748 + ], + [ + -117.800014, + 33.675785 + ], + [ + -117.801461, + 33.676675 + ], + [ + -117.802773, + 33.677767 + ], + [ + -117.802795, + 33.677786 + ], + [ + -117.804525, + 33.675995 + ], + [ + -117.803544, + 33.675168 + ], + [ + -117.80277, + 33.674595 + ], + [ + -117.802007, + 33.674113 + ], + [ + -117.801095, + 33.673643 + ], + [ + -117.800366, + 33.673332 + ], + [ + -117.80027, + 33.673357 + ] + ] + ] + }, + "properties": { + "name": "Woodbridge Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 207529960, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.957692, + 33.739409 + ], + [ + -117.957673, + 33.737822 + ], + [ + -117.957721, + 33.737786 + ], + [ + -117.960205, + 33.737777 + ], + [ + -117.960218, + 33.739664 + ], + [ + -117.958515, + 33.739662 + ], + [ + -117.958523, + 33.740231 + ], + [ + -117.958008, + 33.740233 + ], + [ + -117.957991, + 33.739534 + ], + [ + -117.957692, + 33.739409 + ] + ] + ] + }, + "properties": { + "name": "Elden F Gillespie Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 207529964, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.95888, + 33.738192 + ], + [ + -117.958819, + 33.738188 + ], + [ + -117.95877, + 33.738163 + ], + [ + -117.958738, + 33.738154 + ], + [ + -117.958663, + 33.738166 + ], + [ + -117.958623, + 33.738195 + ], + [ + -117.958556, + 33.738235 + ], + [ + -117.958524, + 33.738241 + ], + [ + -117.958473, + 33.738235 + ], + [ + -117.958416, + 33.738215 + ], + [ + -117.958368, + 33.738154 + ], + [ + -117.958355, + 33.738096 + ], + [ + -117.9584, + 33.738036 + ], + [ + -117.958432, + 33.738014 + ], + [ + -117.958491, + 33.737994 + ], + [ + -117.95855, + 33.738012 + ], + [ + -117.958599, + 33.73803 + ], + [ + -117.958655, + 33.738052 + ], + [ + -117.958698, + 33.738056 + ], + [ + -117.958749, + 33.738032 + ], + [ + -117.958813, + 33.737996 + ], + [ + -117.958875, + 33.737983 + ], + [ + -117.958926, + 33.737994 + ], + [ + -117.958963, + 33.738016 + ], + [ + -117.95899, + 33.738065 + ], + [ + -117.95899, + 33.738099 + ], + [ + -117.958974, + 33.738154 + ], + [ + -117.958937, + 33.738179 + ], + [ + -117.95888, + 33.738192 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 207918730, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.908574, + 33.902988 + ], + [ + -117.908429, + 33.902931 + ], + [ + -117.908411, + 33.902982 + ], + [ + -117.908136, + 33.902898 + ], + [ + -117.908093, + 33.902998 + ], + [ + -117.907953, + 33.902947 + ], + [ + -117.908126, + 33.902528 + ], + [ + -117.908082, + 33.902509 + ], + [ + -117.907869, + 33.902924 + ], + [ + -117.907861, + 33.902951 + ], + [ + -117.907878, + 33.90298 + ], + [ + -117.907901, + 33.903007 + ], + [ + -117.907933, + 33.903018 + ], + [ + -117.907991, + 33.903022 + ], + [ + -117.908328, + 33.903012 + ], + [ + -117.908569, + 33.903013 + ], + [ + -117.908574, + 33.902988 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 209297997, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.890137, + 33.826766 + ], + [ + -117.890075, + 33.82672 + ], + [ + -117.890029, + 33.826698 + ], + [ + -117.889974, + 33.826696 + ], + [ + -117.88993, + 33.826698 + ], + [ + -117.889882, + 33.826695 + ], + [ + -117.889828, + 33.826681 + ], + [ + -117.889797, + 33.826663 + ], + [ + -117.889764, + 33.826653 + ], + [ + -117.889731, + 33.826656 + ], + [ + -117.889709, + 33.82667 + ], + [ + -117.889688, + 33.826695 + ], + [ + -117.889642, + 33.826795 + ], + [ + -117.889644, + 33.826833 + ], + [ + -117.889658, + 33.826863 + ], + [ + -117.88969, + 33.826908 + ], + [ + -117.889739, + 33.826956 + ], + [ + -117.889782, + 33.826981 + ], + [ + -117.889814, + 33.826976 + ], + [ + -117.88984, + 33.826966 + ], + [ + -117.889882, + 33.826944 + ], + [ + -117.889903, + 33.826919 + ], + [ + -117.889916, + 33.826895 + ], + [ + -117.88993, + 33.826865 + ], + [ + -117.889946, + 33.826843 + ], + [ + -117.889973, + 33.826834 + ], + [ + -117.890006, + 33.826839 + ], + [ + -117.890032, + 33.826847 + ], + [ + -117.890069, + 33.826863 + ], + [ + -117.890102, + 33.826873 + ], + [ + -117.89013, + 33.826875 + ], + [ + -117.890148, + 33.82687 + ], + [ + -117.890166, + 33.826859 + ], + [ + -117.890171, + 33.826841 + ], + [ + -117.890168, + 33.826824 + ], + [ + -117.89016, + 33.826804 + ], + [ + -117.890137, + 33.826766 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 209298008, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.891567, + 33.824682 + ], + [ + -117.8916, + 33.82465 + ], + [ + -117.891626, + 33.824635 + ], + [ + -117.891657, + 33.824626 + ], + [ + -117.891698, + 33.824623 + ], + [ + -117.891748, + 33.824635 + ], + [ + -117.891781, + 33.82465 + ], + [ + -117.891804, + 33.824668 + ], + [ + -117.891818, + 33.824686 + ], + [ + -117.891828, + 33.824707 + ], + [ + -117.891833, + 33.824732 + ], + [ + -117.891831, + 33.824758 + ], + [ + -117.891821, + 33.824785 + ], + [ + -117.891804, + 33.824813 + ], + [ + -117.891786, + 33.824832 + ], + [ + -117.891746, + 33.82485 + ], + [ + -117.891703, + 33.824859 + ], + [ + -117.891687, + 33.824859 + ], + [ + -117.891643, + 33.824851 + ], + [ + -117.891602, + 33.824831 + ], + [ + -117.891576, + 33.824805 + ], + [ + -117.891557, + 33.824773 + ], + [ + -117.89155, + 33.824737 + ], + [ + -117.891556, + 33.824708 + ], + [ + -117.891567, + 33.824682 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 209711062, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.85289, + 33.852023 + ], + [ + -117.852839, + 33.852112 + ], + [ + -117.852286, + 33.852252 + ], + [ + -117.852214, + 33.852038 + ], + [ + -117.851911, + 33.852095 + ], + [ + -117.851817, + 33.851847 + ], + [ + -117.851911, + 33.851822 + ], + [ + -117.851821, + 33.85157 + ], + [ + -117.852666, + 33.851357 + ], + [ + -117.85289, + 33.852023 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 210187450, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.041559, + 33.870812 + ], + [ + -118.041566, + 33.870887 + ], + [ + -118.04158, + 33.871567 + ], + [ + -118.041573, + 33.871887 + ], + [ + -118.041553, + 33.871961 + ], + [ + -118.041508, + 33.871983 + ], + [ + -118.041438, + 33.871997 + ], + [ + -118.039995, + 33.871994 + ], + [ + -118.039961, + 33.871966 + ], + [ + -118.039969, + 33.871908 + ], + [ + -118.039985, + 33.871787 + ], + [ + -118.039963, + 33.871745 + ], + [ + -118.039936, + 33.871743 + ], + [ + -118.039893, + 33.871727 + ], + [ + -118.039904, + 33.871164 + ], + [ + -118.040013, + 33.871164 + ], + [ + -118.040181, + 33.871157 + ], + [ + -118.040433, + 33.871137 + ], + [ + -118.040561, + 33.871119 + ], + [ + -118.040671, + 33.871057 + ], + [ + -118.040834, + 33.870925 + ], + [ + -118.040996, + 33.870823 + ], + [ + -118.041146, + 33.870785 + ], + [ + -118.041369, + 33.870752 + ], + [ + -118.041465, + 33.87076 + ], + [ + -118.041537, + 33.870787 + ], + [ + -118.041559, + 33.870812 + ] + ] + ] + }, + "properties": { + "name": "Friendship Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 210187453, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.028281, + 33.850515 + ], + [ + -118.019759, + 33.850581 + ], + [ + -118.01976, + 33.850683 + ], + [ + -118.017563, + 33.8507 + ], + [ + -118.017556, + 33.850145 + ], + [ + -118.019966, + 33.850126 + ], + [ + -118.020433, + 33.850123 + ], + [ + -118.024376, + 33.850092 + ], + [ + -118.026409, + 33.850077 + ], + [ + -118.02828, + 33.850062 + ], + [ + -118.028281, + 33.850515 + ] + ] + ] + }, + "properties": { + "name": "El Rancho Verde Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 210339919, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.80535, + 33.903881 + ], + [ + -117.805313, + 33.903093 + ], + [ + -117.805275, + 33.902813 + ], + [ + -117.80478, + 33.901976 + ], + [ + -117.804583, + 33.90194 + ], + [ + -117.804358, + 33.901949 + ], + [ + -117.804136, + 33.901856 + ], + [ + -117.802808, + 33.901882 + ], + [ + -117.802779, + 33.901971 + ], + [ + -117.804014, + 33.902011 + ], + [ + -117.804367, + 33.902154 + ], + [ + -117.80434, + 33.902492 + ], + [ + -117.804384, + 33.902591 + ], + [ + -117.804428, + 33.902688 + ], + [ + -117.804454, + 33.903343 + ], + [ + -117.804576, + 33.903904 + ], + [ + -117.804626, + 33.90438 + ], + [ + -117.804609, + 33.904483 + ], + [ + -117.804555, + 33.904812 + ], + [ + -117.804474, + 33.904883 + ], + [ + -117.804031, + 33.904919 + ], + [ + -117.803655, + 33.905034 + ], + [ + -117.803129, + 33.905159 + ], + [ + -117.802196, + 33.905043 + ], + [ + -117.801783, + 33.904901 + ], + [ + -117.801509, + 33.904732 + ], + [ + -117.80143, + 33.904553 + ], + [ + -117.801531, + 33.904302 + ], + [ + -117.801724, + 33.9036 + ], + [ + -117.80175, + 33.903506 + ], + [ + -117.802046, + 33.902958 + ], + [ + -117.802271, + 33.902537 + ], + [ + -117.802505, + 33.902069 + ], + [ + -117.802561, + 33.901924 + ], + [ + -117.802577, + 33.901882 + ], + [ + -117.802207, + 33.901784 + ], + [ + -117.801776, + 33.901749 + ], + [ + -117.801583, + 33.901789 + ], + [ + -117.801322, + 33.902087 + ], + [ + -117.800944, + 33.902808 + ], + [ + -117.800639, + 33.903499 + ], + [ + -117.800676, + 33.90389 + ], + [ + -117.800689, + 33.904509 + ], + [ + -117.800731, + 33.905003 + ], + [ + -117.800694, + 33.905312 + ], + [ + -117.80081, + 33.905598 + ], + [ + -117.801076, + 33.905716 + ], + [ + -117.801218, + 33.905707 + ], + [ + -117.802196, + 33.905676 + ], + [ + -117.802715, + 33.905974 + ], + [ + -117.802963, + 33.905992 + ], + [ + -117.802888, + 33.90568 + ], + [ + -117.80305, + 33.905645 + ], + [ + -117.80343, + 33.905729 + ], + [ + -117.804653, + 33.906201 + ], + [ + -117.806088, + 33.907061 + ], + [ + -117.805966, + 33.907319 + ], + [ + -117.806091, + 33.907599 + ], + [ + -117.806568, + 33.907875 + ], + [ + -117.806938, + 33.90812 + ], + [ + -117.807463, + 33.90838 + ], + [ + -117.807727, + 33.908414 + ], + [ + -117.807936, + 33.908423 + ], + [ + -117.808102, + 33.908351 + ], + [ + -117.80822, + 33.90828 + ], + [ + -117.80896, + 33.908097 + ], + [ + -117.809706, + 33.908111 + ], + [ + -117.809565, + 33.908298 + ], + [ + -117.809608, + 33.908458 + ], + [ + -117.809862, + 33.908743 + ], + [ + -117.810114, + 33.908774 + ], + [ + -117.810509, + 33.908676 + ], + [ + -117.810736, + 33.908707 + ], + [ + -117.811009, + 33.908812 + ], + [ + -117.811279, + 33.908843 + ], + [ + -117.811738, + 33.908974 + ], + [ + -117.811991, + 33.909145 + ], + [ + -117.812365, + 33.909224 + ], + [ + -117.812666, + 33.909202 + ], + [ + -117.813186, + 33.909255 + ], + [ + -117.81396, + 33.909522 + ], + [ + -117.814228, + 33.909487 + ], + [ + -117.814425, + 33.909028 + ], + [ + -117.81499, + 33.908966 + ], + [ + -117.815366, + 33.908895 + ], + [ + -117.81573, + 33.908997 + ], + [ + -117.816256, + 33.90905 + ], + [ + -117.816433, + 33.908957 + ], + [ + -117.816862, + 33.908761 + ], + [ + -117.817086, + 33.908846 + ], + [ + -117.817249, + 33.908921 + ], + [ + -117.817436, + 33.908921 + ], + [ + -117.817613, + 33.908707 + ], + [ + -117.817721, + 33.908476 + ], + [ + -117.818504, + 33.908556 + ], + [ + -117.818808, + 33.908677 + ], + [ + -117.81877, + 33.908957 + ], + [ + -117.818905, + 33.909033 + ], + [ + -117.819539, + 33.908957 + ], + [ + -117.819725, + 33.908868 + ], + [ + -117.8198, + 33.908734 + ], + [ + -117.81984, + 33.908512 + ], + [ + -117.8197, + 33.908044 + ], + [ + -117.819479, + 33.90775 + ], + [ + -117.819684, + 33.90751 + ], + [ + -117.819701, + 33.907506 + ], + [ + -117.819806, + 33.907487 + ], + [ + -117.819984, + 33.907455 + ], + [ + -117.820124, + 33.90743 + ], + [ + -117.820446, + 33.907412 + ], + [ + -117.82082, + 33.907403 + ], + [ + -117.82127, + 33.907345 + ], + [ + -117.821567, + 33.907376 + ], + [ + -117.821796, + 33.907523 + ], + [ + -117.822062, + 33.907629 + ], + [ + -117.822304, + 33.90771 + ], + [ + -117.822389, + 33.907733 + ], + [ + -117.822462, + 33.907761 + ], + [ + -117.822413, + 33.907884 + ], + [ + -117.822431, + 33.908222 + ], + [ + -117.822693, + 33.908707 + ], + [ + -117.82274, + 33.908774 + ], + [ + -117.822874, + 33.908734 + ], + [ + -117.82296, + 33.908654 + ], + [ + -117.822988, + 33.908454 + ], + [ + -117.823117, + 33.908289 + ], + [ + -117.8233, + 33.908311 + ], + [ + -117.823608, + 33.908339 + ], + [ + -117.823702, + 33.908274 + ], + [ + -117.823804, + 33.908155 + ], + [ + -117.82399, + 33.908098 + ], + [ + -117.824269, + 33.908138 + ], + [ + -117.824446, + 33.908071 + ], + [ + -117.824516, + 33.907955 + ], + [ + -117.824543, + 33.907902 + ], + [ + -117.824748, + 33.908062 + ], + [ + -117.824973, + 33.908276 + ], + [ + -117.825079, + 33.908538 + ], + [ + -117.825149, + 33.908752 + ], + [ + -117.82531, + 33.908819 + ], + [ + -117.825575, + 33.908936 + ], + [ + -117.825692, + 33.90902 + ], + [ + -117.825797, + 33.909152 + ], + [ + -117.825783, + 33.909389 + ], + [ + -117.825809, + 33.909531 + ], + [ + -117.825853, + 33.909629 + ], + [ + -117.825969, + 33.909733 + ], + [ + -117.826416, + 33.909852 + ], + [ + -117.826682, + 33.909937 + ], + [ + -117.826953, + 33.910105 + ], + [ + -117.827182, + 33.910172 + ], + [ + -117.827394, + 33.910158 + ], + [ + -117.827584, + 33.910061 + ], + [ + -117.827639, + 33.909923 + ], + [ + -117.827698, + 33.9097 + ], + [ + -117.827834, + 33.909733 + ], + [ + -117.828013, + 33.909776 + ], + [ + -117.827997, + 33.910226 + ], + [ + -117.828046, + 33.910515 + ], + [ + -117.828101, + 33.910715 + ], + [ + -117.828262, + 33.910889 + ], + [ + -117.82878, + 33.910871 + ], + [ + -117.829177, + 33.910764 + ], + [ + -117.829834, + 33.910787 + ], + [ + -117.83022, + 33.910876 + ], + [ + -117.830258, + 33.910882 + ], + [ + -117.830487, + 33.910917 + ], + [ + -117.830509, + 33.91092 + ], + [ + -117.830831, + 33.910996 + ], + [ + -117.831248, + 33.911107 + ], + [ + -117.831502, + 33.911031 + ], + [ + -117.83194, + 33.910943 + ], + [ + -117.832237, + 33.910974 + ], + [ + -117.83251, + 33.910933 + ], + [ + -117.83353, + 33.910613 + ], + [ + -117.833715, + 33.910432 + ], + [ + -117.833835, + 33.910315 + ], + [ + -117.833914, + 33.910123 + ], + [ + -117.833809, + 33.909972 + ], + [ + -117.833624, + 33.909861 + ], + [ + -117.83331, + 33.909718 + ], + [ + -117.833293, + 33.90962 + ], + [ + -117.832585, + 33.909335 + ], + [ + -117.83206, + 33.909313 + ], + [ + -117.831389, + 33.909291 + ], + [ + -117.830971, + 33.909255 + ], + [ + -117.830686, + 33.909375 + ], + [ + -117.830466, + 33.909415 + ], + [ + -117.830374, + 33.909393 + ], + [ + -117.830161, + 33.90938 + ], + [ + -117.830014, + 33.909326 + ], + [ + -117.829855, + 33.909304 + ], + [ + -117.829656, + 33.909304 + ], + [ + -117.829024, + 33.909224 + ], + [ + -117.8286, + 33.909206 + ], + [ + -117.82838, + 33.909179 + ], + [ + -117.828271, + 33.909295 + ], + [ + -117.828246, + 33.909397 + ], + [ + -117.827672, + 33.909171 + ], + [ + -117.827339, + 33.909046 + ], + [ + -117.826518, + 33.908178 + ], + [ + -117.826336, + 33.907795 + ], + [ + -117.825901, + 33.90718 + ], + [ + -117.825531, + 33.906499 + ], + [ + -117.825127, + 33.905765 + ], + [ + -117.82492, + 33.905613 + ], + [ + -117.824896, + 33.905566 + ], + [ + -117.824861, + 33.905498 + ], + [ + -117.824614, + 33.905368 + ], + [ + -117.823858, + 33.905337 + ], + [ + -117.82344, + 33.905276 + ], + [ + -117.823173, + 33.905237 + ], + [ + -117.823165, + 33.905177 + ], + [ + -117.823161, + 33.905143 + ], + [ + -117.822931, + 33.905131 + ], + [ + -117.822407, + 33.905028 + ], + [ + -117.822282, + 33.905004 + ], + [ + -117.822171, + 33.90501 + ], + [ + -117.822001, + 33.905034 + ], + [ + -117.821724, + 33.905095 + ], + [ + -117.821698, + 33.90511 + ], + [ + -117.821665, + 33.905107 + ], + [ + -117.821397, + 33.905353 + ], + [ + -117.821063, + 33.90546 + ], + [ + -117.821056, + 33.905496 + ], + [ + -117.820546, + 33.905653 + ], + [ + -117.820499, + 33.905667 + ], + [ + -117.820491, + 33.905667 + ], + [ + -117.820385, + 33.905671 + ], + [ + -117.820317, + 33.90576 + ], + [ + -117.820196, + 33.905801 + ], + [ + -117.820103, + 33.905863 + ], + [ + -117.820069, + 33.905861 + ], + [ + -117.819929, + 33.905852 + ], + [ + -117.819739, + 33.905971 + ], + [ + -117.819395, + 33.906042 + ], + [ + -117.819294, + 33.906105 + ], + [ + -117.819145, + 33.906175 + ], + [ + -117.818975, + 33.906255 + ], + [ + -117.81897, + 33.906282 + ], + [ + -117.818766, + 33.906364 + ], + [ + -117.818562, + 33.906416 + ], + [ + -117.818523, + 33.906408 + ], + [ + -117.818305, + 33.906495 + ], + [ + -117.818095, + 33.906593 + ], + [ + -117.818046, + 33.906616 + ], + [ + -117.817843, + 33.906711 + ], + [ + -117.817681, + 33.906787 + ], + [ + -117.817193, + 33.907013 + ], + [ + -117.817144, + 33.907065 + ], + [ + -117.817104, + 33.90712 + ], + [ + -117.817052, + 33.907216 + ], + [ + -117.81702, + 33.907325 + ], + [ + -117.81701, + 33.907383 + ], + [ + -117.817002, + 33.907468 + ], + [ + -117.816999, + 33.907489 + ], + [ + -117.81697, + 33.90759 + ], + [ + -117.816866, + 33.907571 + ], + [ + -117.816764, + 33.907584 + ], + [ + -117.816694, + 33.907582 + ], + [ + -117.816602, + 33.907598 + ], + [ + -117.816519, + 33.90763 + ], + [ + -117.816457, + 33.907673 + ], + [ + -117.816401, + 33.907706 + ], + [ + -117.816233, + 33.907697 + ], + [ + -117.815934, + 33.907724 + ], + [ + -117.815734, + 33.907764 + ], + [ + -117.815699, + 33.907808 + ], + [ + -117.815584, + 33.907951 + ], + [ + -117.815439, + 33.908009 + ], + [ + -117.815251, + 33.907942 + ], + [ + -117.81514, + 33.907893 + ], + [ + -117.814937, + 33.907879 + ], + [ + -117.814792, + 33.907902 + ], + [ + -117.814518, + 33.907875 + ], + [ + -117.81295, + 33.908009 + ], + [ + -117.812403, + 33.908116 + ], + [ + -117.812093, + 33.908138 + ], + [ + -117.811888, + 33.908107 + ], + [ + -117.81155, + 33.90788 + ], + [ + -117.811267, + 33.907799 + ], + [ + -117.810666, + 33.907733 + ], + [ + -117.810388, + 33.90747 + ], + [ + -117.810393, + 33.907287 + ], + [ + -117.810248, + 33.907091 + ], + [ + -117.809717, + 33.906967 + ], + [ + -117.8094, + 33.906789 + ], + [ + -117.809036, + 33.906548 + ], + [ + -117.80822, + 33.906375 + ], + [ + -117.807779, + 33.906134 + ], + [ + -117.807265, + 33.905996 + ], + [ + -117.806783, + 33.905987 + ], + [ + -117.806246, + 33.905529 + ], + [ + -117.806166, + 33.905364 + ], + [ + -117.806048, + 33.905284 + ], + [ + -117.805828, + 33.905221 + ], + [ + -117.805442, + 33.905239 + ], + [ + -117.805318, + 33.905119 + ], + [ + -117.805248, + 33.904936 + ], + [ + -117.805307, + 33.904736 + ], + [ + -117.805329, + 33.904509 + ], + [ + -117.805372, + 33.904277 + ], + [ + -117.80535, + 33.903881 + ] + ] + ] + }, + "properties": { + "name": "Black Gold Golf Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211220749, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.837634, + 33.838609 + ], + [ + -117.837649, + 33.838591 + ], + [ + -117.837669, + 33.838578 + ], + [ + -117.837692, + 33.838569 + ], + [ + -117.837717, + 33.838565 + ], + [ + -117.837743, + 33.838566 + ], + [ + -117.837767, + 33.838573 + ], + [ + -117.837788, + 33.838584 + ], + [ + -117.837806, + 33.8386 + ], + [ + -117.837818, + 33.838618 + ], + [ + -117.837824, + 33.838643 + ], + [ + -117.837822, + 33.838667 + ], + [ + -117.837812, + 33.838691 + ], + [ + -117.837793, + 33.83871 + ], + [ + -117.837769, + 33.838724 + ], + [ + -117.83774, + 33.838732 + ], + [ + -117.83771, + 33.838732 + ], + [ + -117.837682, + 33.838726 + ], + [ + -117.837656, + 33.838712 + ], + [ + -117.837637, + 33.838693 + ], + [ + -117.837625, + 33.83867 + ], + [ + -117.837622, + 33.83865 + ], + [ + -117.837625, + 33.838628 + ], + [ + -117.837634, + 33.838609 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211220856, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.819127, + 33.792766 + ], + [ + -117.819159, + 33.792786 + ], + [ + -117.819169, + 33.7928 + ], + [ + -117.819175, + 33.792818 + ], + [ + -117.819174, + 33.792833 + ], + [ + -117.819166, + 33.792851 + ], + [ + -117.819156, + 33.792868 + ], + [ + -117.819137, + 33.792886 + ], + [ + -117.81911, + 33.792905 + ], + [ + -117.819085, + 33.792912 + ], + [ + -117.819054, + 33.792916 + ], + [ + -117.819025, + 33.792914 + ], + [ + -117.819, + 33.792904 + ], + [ + -117.818978, + 33.792883 + ], + [ + -117.818958, + 33.792863 + ], + [ + -117.818896, + 33.792816 + ], + [ + -117.818885, + 33.792797 + ], + [ + -117.818867, + 33.792776 + ], + [ + -117.818848, + 33.792767 + ], + [ + -117.818823, + 33.792762 + ], + [ + -117.818798, + 33.79276 + ], + [ + -117.818776, + 33.792754 + ], + [ + -117.81875, + 33.792735 + ], + [ + -117.818738, + 33.792719 + ], + [ + -117.818732, + 33.792702 + ], + [ + -117.818732, + 33.792678 + ], + [ + -117.818736, + 33.792654 + ], + [ + -117.818745, + 33.792632 + ], + [ + -117.818758, + 33.792618 + ], + [ + -117.818774, + 33.792606 + ], + [ + -117.81879, + 33.792598 + ], + [ + -117.818806, + 33.792595 + ], + [ + -117.818827, + 33.792595 + ], + [ + -117.818855, + 33.792595 + ], + [ + -117.818877, + 33.792595 + ], + [ + -117.818891, + 33.7926 + ], + [ + -117.818903, + 33.792608 + ], + [ + -117.818916, + 33.792624 + ], + [ + -117.818922, + 33.792635 + ], + [ + -117.818922, + 33.792647 + ], + [ + -117.818916, + 33.792665 + ], + [ + -117.818913, + 33.792684 + ], + [ + -117.818924, + 33.792709 + ], + [ + -117.81894, + 33.792719 + ], + [ + -117.818947, + 33.792724 + ], + [ + -117.818963, + 33.792734 + ], + [ + -117.818977, + 33.792736 + ], + [ + -117.819014, + 33.792734 + ], + [ + -117.81904, + 33.792734 + ], + [ + -117.819076, + 33.792741 + ], + [ + -117.819097, + 33.792749 + ], + [ + -117.819127, + 33.792766 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211229233, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.87619, + 33.745344 + ], + [ + -117.87622, + 33.745339 + ], + [ + -117.87625, + 33.745328 + ], + [ + -117.876276, + 33.745304 + ], + [ + -117.876289, + 33.745266 + ], + [ + -117.876294, + 33.744599 + ], + [ + -117.876281, + 33.744569 + ], + [ + -117.876263, + 33.744543 + ], + [ + -117.876225, + 33.744521 + ], + [ + -117.876083, + 33.744506 + ], + [ + -117.8759, + 33.744499 + ], + [ + -117.874532, + 33.744511 + ], + [ + -117.874525, + 33.745262 + ], + [ + -117.874549, + 33.7453 + ], + [ + -117.874588, + 33.745329 + ], + [ + -117.874646, + 33.745341 + ], + [ + -117.87619, + 33.745344 + ] + ] + ] + }, + "properties": { + "name": "Flower Street Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211239309, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.959924, + 33.88589 + ], + [ + -117.959162, + 33.888103 + ], + [ + -117.959645, + 33.8881 + ], + [ + -117.959708, + 33.887926 + ], + [ + -117.9604, + 33.88602 + ], + [ + -117.959924, + 33.88589 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211239310, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.958021, + 33.883223 + ], + [ + -117.957982, + 33.883179 + ], + [ + -117.957932, + 33.883161 + ], + [ + -117.957748, + 33.883152 + ], + [ + -117.957655, + 33.883155 + ], + [ + -117.957616, + 33.88318 + ], + [ + -117.957553, + 33.883239 + ], + [ + -117.95748, + 33.883358 + ], + [ + -117.95732, + 33.883714 + ], + [ + -117.957144, + 33.884045 + ], + [ + -117.956856, + 33.884455 + ], + [ + -117.956625, + 33.884735 + ], + [ + -117.956174, + 33.885238 + ], + [ + -117.956012, + 33.88548 + ], + [ + -117.955832, + 33.885801 + ], + [ + -117.955159, + 33.887395 + ], + [ + -117.955089, + 33.887614 + ], + [ + -117.955047, + 33.887842 + ], + [ + -117.955044, + 33.888123 + ], + [ + -117.956266, + 33.888129 + ], + [ + -117.956265, + 33.888095 + ], + [ + -117.956261, + 33.887955 + ], + [ + -117.956115, + 33.887843 + ], + [ + -117.956006, + 33.887705 + ], + [ + -117.955891, + 33.887381 + ], + [ + -117.955875, + 33.887261 + ], + [ + -117.955897, + 33.887064 + ], + [ + -117.956266, + 33.887163 + ], + [ + -117.956307, + 33.887051 + ], + [ + -117.955938, + 33.886966 + ], + [ + -117.956122, + 33.886394 + ], + [ + -117.956498, + 33.886505 + ], + [ + -117.956548, + 33.886367 + ], + [ + -117.956174, + 33.88629 + ], + [ + -117.956365, + 33.885764 + ], + [ + -117.956728, + 33.885865 + ], + [ + -117.956805, + 33.885767 + ], + [ + -117.956421, + 33.885658 + ], + [ + -117.95661, + 33.885451 + ], + [ + -117.957148, + 33.884967 + ], + [ + -117.957479, + 33.885072 + ], + [ + -117.957505, + 33.88508 + ], + [ + -117.957672, + 33.88457 + ], + [ + -117.957873, + 33.883878 + ], + [ + -117.957903, + 33.88358 + ], + [ + -117.957985, + 33.883353 + ], + [ + -117.958022, + 33.883288 + ], + [ + -117.958021, + 33.883223 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211332409, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.977729, + 33.713832 + ], + [ + -117.977732, + 33.714087 + ], + [ + -117.977732, + 33.714111 + ], + [ + -117.977734, + 33.714129 + ], + [ + -117.977751, + 33.714145 + ], + [ + -117.977783, + 33.714157 + ], + [ + -117.977815, + 33.714159 + ], + [ + -117.977838, + 33.714158 + ], + [ + -117.977861, + 33.714148 + ], + [ + -117.977878, + 33.714139 + ], + [ + -117.977887, + 33.714132 + ], + [ + -117.977896, + 33.714119 + ], + [ + -117.977897, + 33.714103 + ], + [ + -117.977895, + 33.714084 + ], + [ + -117.977879, + 33.714065 + ], + [ + -117.977859, + 33.714045 + ], + [ + -117.97784, + 33.714014 + ], + [ + -117.977828, + 33.713982 + ], + [ + -117.977819, + 33.713928 + ], + [ + -117.977818, + 33.713905 + ], + [ + -117.977819, + 33.713882 + ], + [ + -117.977825, + 33.713861 + ], + [ + -117.97783, + 33.713846 + ], + [ + -117.977828, + 33.713832 + ], + [ + -117.977814, + 33.713812 + ], + [ + -117.977797, + 33.713796 + ], + [ + -117.97778, + 33.713792 + ], + [ + -117.977768, + 33.71379 + ], + [ + -117.977752, + 33.713794 + ], + [ + -117.977741, + 33.713803 + ], + [ + -117.977736, + 33.713811 + ], + [ + -117.977729, + 33.713832 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211332423, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.977547, + 33.690781 + ], + [ + -117.977597, + 33.690824 + ], + [ + -117.977609, + 33.690854 + ], + [ + -117.977607, + 33.690894 + ], + [ + -117.977593, + 33.690922 + ], + [ + -117.977414, + 33.691035 + ], + [ + -117.977436, + 33.691067 + ], + [ + -117.977435, + 33.691101 + ], + [ + -117.977424, + 33.691135 + ], + [ + -117.977401, + 33.691156 + ], + [ + -117.977377, + 33.691166 + ], + [ + -117.977343, + 33.691169 + ], + [ + -117.97731, + 33.69117 + ], + [ + -117.97728, + 33.691154 + ], + [ + -117.977251, + 33.691134 + ], + [ + -117.977183, + 33.69104 + ], + [ + -117.977224, + 33.691013 + ], + [ + -117.977189, + 33.690961 + ], + [ + -117.977207, + 33.690948 + ], + [ + -117.977482, + 33.690767 + ], + [ + -117.977547, + 33.690781 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211337847, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.005343, + 33.718913 + ], + [ + -118.005358, + 33.718882 + ], + [ + -118.005379, + 33.718854 + ], + [ + -118.005428, + 33.718821 + ], + [ + -118.005484, + 33.718808 + ], + [ + -118.005548, + 33.71882 + ], + [ + -118.005593, + 33.718849 + ], + [ + -118.005629, + 33.718898 + ], + [ + -118.005644, + 33.718958 + ], + [ + -118.005634, + 33.719015 + ], + [ + -118.005606, + 33.719063 + ], + [ + -118.005574, + 33.719092 + ], + [ + -118.005537, + 33.71911 + ], + [ + -118.005497, + 33.719117 + ], + [ + -118.00545, + 33.719112 + ], + [ + -118.005413, + 33.719097 + ], + [ + -118.005377, + 33.719069 + ], + [ + -118.00535, + 33.71903 + ], + [ + -118.005335, + 33.718977 + ], + [ + -118.005336, + 33.718944 + ], + [ + -118.005343, + 33.718913 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211356619, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.999526, + 33.668736 + ], + [ + -117.999493, + 33.66874 + ], + [ + -117.999467, + 33.668748 + ], + [ + -117.99945, + 33.668765 + ], + [ + -117.999442, + 33.668782 + ], + [ + -117.999433, + 33.668808 + ], + [ + -117.99941, + 33.668828 + ], + [ + -117.999372, + 33.668854 + ], + [ + -117.999329, + 33.66886 + ], + [ + -117.999305, + 33.668859 + ], + [ + -117.999264, + 33.668853 + ], + [ + -117.999232, + 33.668836 + ], + [ + -117.999197, + 33.668802 + ], + [ + -117.999187, + 33.668773 + ], + [ + -117.999183, + 33.668746 + ], + [ + -117.999189, + 33.668716 + ], + [ + -117.9992, + 33.668688 + ], + [ + -117.999229, + 33.668661 + ], + [ + -117.999271, + 33.668643 + ], + [ + -117.999294, + 33.668635 + ], + [ + -117.999312, + 33.668635 + ], + [ + -117.999333, + 33.668637 + ], + [ + -117.999365, + 33.668641 + ], + [ + -117.999385, + 33.668638 + ], + [ + -117.999405, + 33.668629 + ], + [ + -117.999421, + 33.668615 + ], + [ + -117.999433, + 33.668601 + ], + [ + -117.999453, + 33.66859 + ], + [ + -117.999474, + 33.668584 + ], + [ + -117.999498, + 33.668585 + ], + [ + -117.999518, + 33.668587 + ], + [ + -117.999533, + 33.668592 + ], + [ + -117.999548, + 33.668598 + ], + [ + -117.999565, + 33.668611 + ], + [ + -117.999579, + 33.668629 + ], + [ + -117.999585, + 33.668654 + ], + [ + -117.999583, + 33.668679 + ], + [ + -117.999576, + 33.668697 + ], + [ + -117.999562, + 33.668714 + ], + [ + -117.999526, + 33.668736 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 211367490, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.96533, + 33.690772 + ], + [ + -117.965269, + 33.690812 + ], + [ + -117.965274, + 33.691183 + ], + [ + -117.965343, + 33.691217 + ], + [ + -117.96538, + 33.69115 + ], + [ + -117.965392, + 33.691086 + ], + [ + -117.965399, + 33.691031 + ], + [ + -117.965404, + 33.690964 + ], + [ + -117.965404, + 33.690914 + ], + [ + -117.965396, + 33.690867 + ], + [ + -117.965374, + 33.690831 + ], + [ + -117.96533, + 33.690772 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 212490896, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.903432, + 33.755207 + ], + [ + -117.902841, + 33.75521 + ], + [ + -117.902885, + 33.756054 + ], + [ + -117.903465, + 33.755412 + ], + [ + -117.903572, + 33.755237 + ], + [ + -117.903432, + 33.755207 + ] + ] + ] + }, + "properties": { + "name": "Fairview Triangle", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 212490921, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.914437, + 33.738302 + ], + [ + -117.913134, + 33.738302 + ], + [ + -117.91322, + 33.7377 + ], + [ + -117.913606, + 33.737939 + ], + [ + -117.913944, + 33.738104 + ], + [ + -117.914444, + 33.738261 + ], + [ + -117.914437, + 33.738302 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 212823814, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.867502, + 33.631588 + ], + [ + -117.868748, + 33.631852 + ], + [ + -117.868875, + 33.631924 + ], + [ + -117.868937, + 33.631999 + ], + [ + -117.868954, + 33.632095 + ], + [ + -117.86894, + 33.632198 + ], + [ + -117.868926, + 33.632349 + ], + [ + -117.868931, + 33.632494 + ], + [ + -117.868937, + 33.632595 + ], + [ + -117.868933, + 33.632645 + ], + [ + -117.868573, + 33.632605 + ], + [ + -117.868531, + 33.632662 + ], + [ + -117.868856, + 33.633018 + ], + [ + -117.868675, + 33.633385 + ], + [ + -117.868529, + 33.633878 + ], + [ + -117.868223, + 33.634177 + ], + [ + -117.867952, + 33.634148 + ], + [ + -117.867728, + 33.634438 + ], + [ + -117.867424, + 33.634328 + ], + [ + -117.867245, + 33.634677 + ], + [ + -117.867875, + 33.634938 + ], + [ + -117.868493, + 33.635268 + ], + [ + -117.868573, + 33.634393 + ], + [ + -117.868844, + 33.633691 + ], + [ + -117.868895, + 33.633335 + ], + [ + -117.8692, + 33.633296 + ], + [ + -117.869259, + 33.633179 + ], + [ + -117.869134, + 33.633068 + ], + [ + -117.869224, + 33.632796 + ], + [ + -117.869084, + 33.63252 + ], + [ + -117.869055, + 33.63234 + ], + [ + -117.869067, + 33.632146 + ], + [ + -117.86913, + 33.631957 + ], + [ + -117.869269, + 33.631729 + ], + [ + -117.868841, + 33.631523 + ], + [ + -117.868639, + 33.631386 + ], + [ + -117.868457, + 33.631299 + ], + [ + -117.868228, + 33.631253 + ], + [ + -117.86802, + 33.631273 + ], + [ + -117.867786, + 33.631326 + ], + [ + -117.867601, + 33.631455 + ], + [ + -117.867502, + 33.631588 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 212841292, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.955605, + 33.898583 + ], + [ + -117.956009, + 33.898036 + ], + [ + -117.956689, + 33.898406 + ], + [ + -117.956847, + 33.898399 + ], + [ + -117.957279, + 33.89821 + ], + [ + -117.957352, + 33.898068 + ], + [ + -117.957371, + 33.897749 + ], + [ + -117.957306, + 33.897546 + ], + [ + -117.957419, + 33.897372 + ], + [ + -117.957421, + 33.897117 + ], + [ + -117.957205, + 33.896918 + ], + [ + -117.956743, + 33.896715 + ], + [ + -117.956883, + 33.896611 + ], + [ + -117.957049, + 33.896787 + ], + [ + -117.957566, + 33.896839 + ], + [ + -117.957438, + 33.897954 + ], + [ + -117.957768, + 33.897973 + ], + [ + -117.95797, + 33.897886 + ], + [ + -117.958369, + 33.89788 + ], + [ + -117.9587, + 33.89784 + ], + [ + -117.958779, + 33.897716 + ], + [ + -117.958872, + 33.897715 + ], + [ + -117.958942, + 33.897824 + ], + [ + -117.959615, + 33.897788 + ], + [ + -117.959665, + 33.897716 + ], + [ + -117.959768, + 33.897714 + ], + [ + -117.95989, + 33.897805 + ], + [ + -117.960247, + 33.897824 + ], + [ + -117.960387, + 33.896973 + ], + [ + -117.961148, + 33.897066 + ], + [ + -117.960773, + 33.897816 + ], + [ + -117.962066, + 33.898196 + ], + [ + -117.962635, + 33.898365 + ], + [ + -117.963036, + 33.898342 + ], + [ + -117.963052, + 33.898424 + ], + [ + -117.962664, + 33.898469 + ], + [ + -117.960824, + 33.898004 + ], + [ + -117.960067, + 33.897926 + ], + [ + -117.959541, + 33.897901 + ], + [ + -117.958128, + 33.898069 + ], + [ + -117.958541, + 33.898939 + ], + [ + -117.958455, + 33.898964 + ], + [ + -117.957995, + 33.898191 + ], + [ + -117.957824, + 33.89854 + ], + [ + -117.95776, + 33.898534 + ], + [ + -117.957839, + 33.898164 + ], + [ + -117.956761, + 33.89866 + ], + [ + -117.956324, + 33.899024 + ], + [ + -117.955605, + 33.898583 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213290299, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.770694, + 33.642887 + ], + [ + -117.770711, + 33.642905 + ], + [ + -117.770729, + 33.642923 + ], + [ + -117.770669, + 33.64362 + ], + [ + -117.770648, + 33.643634 + ], + [ + -117.770625, + 33.643649 + ], + [ + -117.770153, + 33.643586 + ], + [ + -117.770032, + 33.643577 + ], + [ + -117.769925, + 33.643567 + ], + [ + -117.769819, + 33.643552 + ], + [ + -117.769756, + 33.643539 + ], + [ + -117.769683, + 33.643518 + ], + [ + -117.769617, + 33.643492 + ], + [ + -117.769558, + 33.643466 + ], + [ + -117.769519, + 33.643445 + ], + [ + -117.769481, + 33.643422 + ], + [ + -117.769429, + 33.643389 + ], + [ + -117.769368, + 33.643339 + ], + [ + -117.769313, + 33.643288 + ], + [ + -117.769242, + 33.643215 + ], + [ + -117.769188, + 33.643135 + ], + [ + -117.769173, + 33.643103 + ], + [ + -117.769173, + 33.643085 + ], + [ + -117.769187, + 33.643064 + ], + [ + -117.769246, + 33.643043 + ], + [ + -117.76939, + 33.642992 + ], + [ + -117.769484, + 33.642957 + ], + [ + -117.769588, + 33.642908 + ], + [ + -117.769611, + 33.642896 + ], + [ + -117.769626, + 33.642888 + ], + [ + -117.769667, + 33.642861 + ], + [ + -117.769749, + 33.642799 + ], + [ + -117.769778, + 33.642773 + ], + [ + -117.769805, + 33.642745 + ], + [ + -117.769846, + 33.642704 + ], + [ + -117.769858, + 33.642697 + ], + [ + -117.769872, + 33.642694 + ], + [ + -117.769887, + 33.642695 + ], + [ + -117.769983, + 33.642733 + ], + [ + -117.770065, + 33.642761 + ], + [ + -117.770153, + 33.64279 + ], + [ + -117.770244, + 33.642813 + ], + [ + -117.770335, + 33.642834 + ], + [ + -117.77043, + 33.642852 + ], + [ + -117.770526, + 33.642868 + ], + [ + -117.770577, + 33.642875 + ], + [ + -117.770629, + 33.642881 + ], + [ + -117.770694, + 33.642887 + ] + ] + ] + }, + "properties": { + "name": "Valley View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213290301, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.783094, + 33.649528 + ], + [ + -117.780513, + 33.654099 + ], + [ + -117.780671, + 33.65422 + ], + [ + -117.780779, + 33.654153 + ], + [ + -117.780923, + 33.65412 + ], + [ + -117.781018, + 33.65412 + ], + [ + -117.781155, + 33.654146 + ], + [ + -117.781339, + 33.654217 + ], + [ + -117.781643, + 33.654009 + ], + [ + -117.782315, + 33.653391 + ], + [ + -117.782945, + 33.652765 + ], + [ + -117.783402, + 33.652189 + ], + [ + -117.783715, + 33.651671 + ], + [ + -117.784054, + 33.65087 + ], + [ + -117.784444, + 33.649992 + ], + [ + -117.784076, + 33.649715 + ], + [ + -117.783658, + 33.649631 + ], + [ + -117.78358, + 33.649617 + ], + [ + -117.783094, + 33.649528 + ] + ] + ] + }, + "properties": { + "name": "Quail Hill Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213290303, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818104, + 33.625456 + ], + [ + -117.817095, + 33.62586 + ], + [ + -117.816789, + 33.626232 + ], + [ + -117.81676, + 33.626443 + ], + [ + -117.816995, + 33.626837 + ], + [ + -117.817462, + 33.627101 + ], + [ + -117.817958, + 33.627134 + ], + [ + -117.818256, + 33.627311 + ], + [ + -117.8186, + 33.627386 + ], + [ + -117.818892, + 33.627427 + ], + [ + -117.819185, + 33.627469 + ], + [ + -117.819287, + 33.627492 + ], + [ + -117.819456, + 33.627077 + ], + [ + -117.819013, + 33.626899 + ], + [ + -117.818718, + 33.626699 + ], + [ + -117.81849, + 33.626488 + ], + [ + -117.818246, + 33.626128 + ], + [ + -117.818149, + 33.62583 + ], + [ + -117.818113, + 33.62563 + ], + [ + -117.818104, + 33.625456 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213290306, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.779442, + 33.650706 + ], + [ + -117.779392, + 33.650724 + ], + [ + -117.77901, + 33.651395 + ], + [ + -117.779036, + 33.651439 + ], + [ + -117.780134, + 33.651857 + ], + [ + -117.780184, + 33.651841 + ], + [ + -117.780555, + 33.651182 + ], + [ + -117.780539, + 33.651127 + ], + [ + -117.779442, + 33.650706 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213290308, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.829432, + 33.608933 + ], + [ + -117.826016, + 33.608706 + ], + [ + -117.825837, + 33.609822 + ], + [ + -117.826576, + 33.609783 + ], + [ + -117.826866, + 33.609711 + ], + [ + -117.827093, + 33.60981 + ], + [ + -117.827303, + 33.610049 + ], + [ + -117.827446, + 33.610151 + ], + [ + -117.82776, + 33.610204 + ], + [ + -117.828161, + 33.610408 + ], + [ + -117.828371, + 33.610836 + ], + [ + -117.829238, + 33.611434 + ], + [ + -117.829651, + 33.61158 + ], + [ + -117.830013, + 33.611664 + ], + [ + -117.830491, + 33.611667 + ], + [ + -117.831173, + 33.611577 + ], + [ + -117.831697, + 33.611613 + ], + [ + -117.832127, + 33.611781 + ], + [ + -117.83251, + 33.611855 + ], + [ + -117.832791, + 33.611855 + ], + [ + -117.833022, + 33.61196 + ], + [ + -117.83315, + 33.612209 + ], + [ + -117.833375, + 33.612828 + ], + [ + -117.833602, + 33.613076 + ], + [ + -117.833979, + 33.613091 + ], + [ + -117.833826, + 33.612511 + ], + [ + -117.833623, + 33.612083 + ], + [ + -117.833303, + 33.611724 + ], + [ + -117.833085, + 33.611585 + ], + [ + -117.832746, + 33.611421 + ], + [ + -117.832457, + 33.611349 + ], + [ + -117.832097, + 33.611312 + ], + [ + -117.83135, + 33.611306 + ], + [ + -117.831056, + 33.611296 + ], + [ + -117.830678, + 33.611203 + ], + [ + -117.830365, + 33.611078 + ], + [ + -117.830014, + 33.610852 + ], + [ + -117.829747, + 33.610579 + ], + [ + -117.829591, + 33.610349 + ], + [ + -117.829464, + 33.61001 + ], + [ + -117.829432, + 33.608933 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213295947, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.768349, + 33.729589 + ], + [ + -117.768598, + 33.729755 + ], + [ + -117.768004, + 33.730353 + ], + [ + -117.767989, + 33.730396 + ], + [ + -117.767975, + 33.730424 + ], + [ + -117.766106, + 33.732264 + ], + [ + -117.766033, + 33.732282 + ], + [ + -117.765809, + 33.732515 + ], + [ + -117.766253, + 33.73282 + ], + [ + -117.765465, + 33.733607 + ], + [ + -117.765422, + 33.733604 + ], + [ + -117.764743, + 33.733123 + ], + [ + -117.766799, + 33.731108 + ], + [ + -117.766913, + 33.730996 + ], + [ + -117.768349, + 33.729589 + ] + ] + ] + }, + "properties": { + "name": "The Promenade", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213295950, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.765672, + 33.730786 + ], + [ + -117.765952, + 33.730509 + ], + [ + -117.766067, + 33.730397 + ], + [ + -117.765641, + 33.730102 + ], + [ + -117.765288, + 33.730452 + ], + [ + -117.765297, + 33.730518 + ], + [ + -117.765672, + 33.730786 + ] + ] + ] + }, + "properties": { + "name": "Pasadena Gardens Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213297882, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.871717, + 33.638005 + ], + [ + -117.87123, + 33.639054 + ], + [ + -117.871722, + 33.6393 + ], + [ + -117.872075, + 33.63897 + ], + [ + -117.872575, + 33.638233 + ], + [ + -117.872307, + 33.63811 + ], + [ + -117.871717, + 33.638005 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213299105, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.859636, + 33.633872 + ], + [ + -117.858592, + 33.63389 + ], + [ + -117.85806, + 33.635167 + ], + [ + -117.858218, + 33.63594 + ], + [ + -117.859116, + 33.635887 + ], + [ + -117.859495, + 33.635443 + ], + [ + -117.859636, + 33.633872 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213299106, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.856835, + 33.633489 + ], + [ + -117.857065, + 33.634034 + ], + [ + -117.85674, + 33.634142 + ], + [ + -117.857101, + 33.634962 + ], + [ + -117.856941, + 33.634982 + ], + [ + -117.856575, + 33.635029 + ], + [ + -117.856357, + 33.634957 + ], + [ + -117.856142, + 33.634414 + ], + [ + -117.85607, + 33.634373 + ], + [ + -117.855839, + 33.6338 + ], + [ + -117.856835, + 33.633489 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213301098, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.810893, + 33.69664 + ], + [ + -117.810788, + 33.696861 + ], + [ + -117.811192, + 33.697311 + ], + [ + -117.81119, + 33.697619 + ], + [ + -117.81151, + 33.697968 + ], + [ + -117.8117, + 33.697982 + ], + [ + -117.811766, + 33.698044 + ], + [ + -117.811731, + 33.698196 + ], + [ + -117.811936, + 33.698416 + ], + [ + -117.811811, + 33.698496 + ], + [ + -117.811633, + 33.698309 + ], + [ + -117.811468, + 33.698302 + ], + [ + -117.811399, + 33.698247 + ], + [ + -117.811423, + 33.698069 + ], + [ + -117.811087, + 33.697705 + ], + [ + -117.810695, + 33.697627 + ], + [ + -117.810274, + 33.697207 + ], + [ + -117.810123, + 33.697195 + ], + [ + -117.810002, + 33.697244 + ], + [ + -117.809849, + 33.69713 + ], + [ + -117.809751, + 33.697032 + ], + [ + -117.809684, + 33.696903 + ], + [ + -117.809668, + 33.696807 + ], + [ + -117.809675, + 33.696621 + ], + [ + -117.809735, + 33.696512 + ], + [ + -117.809842, + 33.696378 + ], + [ + -117.809991, + 33.6963 + ], + [ + -117.810142, + 33.696257 + ], + [ + -117.810272, + 33.696251 + ], + [ + -117.810403, + 33.696255 + ], + [ + -117.810517, + 33.696284 + ], + [ + -117.810711, + 33.696398 + ], + [ + -117.810893, + 33.69664 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213304139, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.803427, + 33.696002 + ], + [ + -117.8025, + 33.696189 + ], + [ + -117.80306, + 33.69716 + ], + [ + -117.803795, + 33.696847 + ], + [ + -117.803427, + 33.696002 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213304140, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.812446, + 33.688606 + ], + [ + -117.813472, + 33.689296 + ], + [ + -117.813998, + 33.688664 + ], + [ + -117.813095, + 33.688082 + ], + [ + -117.812797, + 33.688355 + ], + [ + -117.812446, + 33.688606 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213304142, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.809743, + 33.686832 + ], + [ + -117.808726, + 33.686225 + ], + [ + -117.808104, + 33.686834 + ], + [ + -117.808322, + 33.687124 + ], + [ + -117.80873, + 33.687029 + ], + [ + -117.809635, + 33.687128 + ], + [ + -117.809743, + 33.686832 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213304144, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.812731, + 33.693779 + ], + [ + -117.812523, + 33.693456 + ], + [ + -117.808796, + 33.694849 + ], + [ + -117.808584, + 33.695057 + ], + [ + -117.809201, + 33.695487 + ], + [ + -117.809155, + 33.695085 + ], + [ + -117.809267, + 33.695026 + ], + [ + -117.809203, + 33.694972 + ], + [ + -117.809203, + 33.694898 + ], + [ + -117.80925, + 33.694841 + ], + [ + -117.80933, + 33.694827 + ], + [ + -117.809474, + 33.694857 + ], + [ + -117.809557, + 33.694847 + ], + [ + -117.812123, + 33.693894 + ], + [ + -117.812224, + 33.693874 + ], + [ + -117.812314, + 33.693898 + ], + [ + -117.81237, + 33.693944 + ], + [ + -117.812731, + 33.693779 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213304145, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.804034, + 33.693572 + ], + [ + -117.804416, + 33.693797 + ], + [ + -117.804806, + 33.694202 + ], + [ + -117.804601, + 33.695262 + ], + [ + -117.803493, + 33.695407 + ], + [ + -117.803502, + 33.694893 + ], + [ + -117.80358, + 33.694489 + ], + [ + -117.803716, + 33.694146 + ], + [ + -117.803861, + 33.693841 + ], + [ + -117.804034, + 33.693572 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213565037, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.800573, + 33.628865 + ], + [ + -117.801447, + 33.628813 + ], + [ + -117.801902, + 33.629089 + ], + [ + -117.802156, + 33.629447 + ], + [ + -117.802238, + 33.629843 + ], + [ + -117.802238, + 33.630089 + ], + [ + -117.801716, + 33.631083 + ], + [ + -117.801253, + 33.631837 + ], + [ + -117.800954, + 33.632143 + ], + [ + -117.800648, + 33.632292 + ], + [ + -117.800071, + 33.632223 + ], + [ + -117.799683, + 33.63213 + ], + [ + -117.799284, + 33.632097 + ], + [ + -117.798806, + 33.632141 + ], + [ + -117.798597, + 33.632225 + ], + [ + -117.798292, + 33.632294 + ], + [ + -117.797922, + 33.632307 + ], + [ + -117.797282, + 33.632296 + ], + [ + -117.796801, + 33.632382 + ], + [ + -117.796217, + 33.632662 + ], + [ + -117.7959, + 33.632921 + ], + [ + -117.795578, + 33.633185 + ], + [ + -117.795092, + 33.633771 + ], + [ + -117.794443, + 33.633829 + ], + [ + -117.793028, + 33.633121 + ], + [ + -117.791906, + 33.632141 + ], + [ + -117.791189, + 33.631902 + ], + [ + -117.789584, + 33.631686 + ], + [ + -117.788352, + 33.631753 + ], + [ + -117.78706, + 33.632425 + ], + [ + -117.78644, + 33.632649 + ], + [ + -117.784887, + 33.632709 + ], + [ + -117.783946, + 33.632709 + ], + [ + -117.783206, + 33.632604 + ], + [ + -117.782924, + 33.632635 + ], + [ + -117.78196, + 33.63062 + ], + [ + -117.782027, + 33.62841 + ], + [ + -117.783029, + 33.627622 + ], + [ + -117.78403, + 33.628096 + ], + [ + -117.784737, + 33.628103 + ], + [ + -117.785529, + 33.627705 + ], + [ + -117.786179, + 33.627977 + ], + [ + -117.787831, + 33.627748 + ], + [ + -117.787816, + 33.626243 + ], + [ + -117.787613, + 33.62515 + ], + [ + -117.788711, + 33.624102 + ], + [ + -117.789364, + 33.624144 + ], + [ + -117.789613, + 33.623949 + ], + [ + -117.789531, + 33.623652 + ], + [ + -117.789238, + 33.62332 + ], + [ + -117.789176, + 33.623083 + ], + [ + -117.789894, + 33.62287 + ], + [ + -117.790457, + 33.62292 + ], + [ + -117.791512, + 33.623151 + ], + [ + -117.792179, + 33.623822 + ], + [ + -117.793239, + 33.625077 + ], + [ + -117.794382, + 33.62589 + ], + [ + -117.795405, + 33.626846 + ], + [ + -117.796249, + 33.627324 + ], + [ + -117.796585, + 33.628153 + ], + [ + -117.797526, + 33.629057 + ], + [ + -117.798205, + 33.629214 + ], + [ + -117.798735, + 33.629818 + ], + [ + -117.799183, + 33.630155 + ], + [ + -117.799616, + 33.630379 + ], + [ + -117.800184, + 33.629714 + ], + [ + -117.800483, + 33.629378 + ], + [ + -117.800573, + 33.628865 + ] + ] + ] + }, + "properties": { + "name": "Shady Canyon Golf Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213567409, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.773001, + 33.646997 + ], + [ + -117.773327, + 33.64831 + ], + [ + -117.773458, + 33.648377 + ], + [ + -117.773543, + 33.648414 + ], + [ + -117.773642, + 33.648455 + ], + [ + -117.773727, + 33.648483 + ], + [ + -117.773851, + 33.64852 + ], + [ + -117.774009, + 33.648544 + ], + [ + -117.774057, + 33.648548 + ], + [ + -117.774109, + 33.64855 + ], + [ + -117.774167, + 33.648549 + ], + [ + -117.774248, + 33.648545 + ], + [ + -117.77432, + 33.648536 + ], + [ + -117.774391, + 33.648524 + ], + [ + -117.774442, + 33.648513 + ], + [ + -117.774489, + 33.648503 + ], + [ + -117.774535, + 33.648489 + ], + [ + -117.774607, + 33.648465 + ], + [ + -117.774694, + 33.648431 + ], + [ + -117.774763, + 33.648398 + ], + [ + -117.774841, + 33.648357 + ], + [ + -117.774926, + 33.648302 + ], + [ + -117.774965, + 33.648368 + ], + [ + -117.775491, + 33.649276 + ], + [ + -117.775388, + 33.649281 + ], + [ + -117.775268, + 33.649298 + ], + [ + -117.775101, + 33.649329 + ], + [ + -117.774913, + 33.64937 + ], + [ + -117.774788, + 33.649405 + ], + [ + -117.774676, + 33.649448 + ], + [ + -117.77457, + 33.649523 + ], + [ + -117.774508, + 33.649574 + ], + [ + -117.774461, + 33.649624 + ], + [ + -117.774374, + 33.649757 + ], + [ + -117.774217, + 33.650138 + ], + [ + -117.774213, + 33.650275 + ], + [ + -117.774063, + 33.650376 + ], + [ + -117.773649, + 33.649817 + ], + [ + -117.7732, + 33.649328 + ], + [ + -117.772834, + 33.64898 + ], + [ + -117.772349, + 33.648614 + ], + [ + -117.771817, + 33.6483 + ], + [ + -117.771778, + 33.648181 + ], + [ + -117.772048, + 33.647867 + ], + [ + -117.77238, + 33.647473 + ], + [ + -117.772627, + 33.647248 + ], + [ + -117.773001, + 33.646997 + ] + ] + ] + }, + "properties": { + "name": "Knollcrest Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 213568839, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.773127, + 33.642156 + ], + [ + -117.773287, + 33.642402 + ], + [ + -117.773203, + 33.642532 + ], + [ + -117.773223, + 33.642544 + ], + [ + -117.77324, + 33.642558 + ], + [ + -117.773248, + 33.642569 + ], + [ + -117.773264, + 33.642588 + ], + [ + -117.773274, + 33.642606 + ], + [ + -117.773278, + 33.642622 + ], + [ + -117.77328, + 33.642644 + ], + [ + -117.773279, + 33.642665 + ], + [ + -117.773346, + 33.642752 + ], + [ + -117.773433, + 33.642886 + ], + [ + -117.773438, + 33.6429 + ], + [ + -117.773436, + 33.642911 + ], + [ + -117.773431, + 33.642925 + ], + [ + -117.773424, + 33.642933 + ], + [ + -117.773413, + 33.642937 + ], + [ + -117.773408, + 33.643203 + ], + [ + -117.773453, + 33.643393 + ], + [ + -117.773387, + 33.643456 + ], + [ + -117.773407, + 33.643466 + ], + [ + -117.773421, + 33.643478 + ], + [ + -117.773437, + 33.643499 + ], + [ + -117.773443, + 33.643518 + ], + [ + -117.773442, + 33.643538 + ], + [ + -117.773438, + 33.643562 + ], + [ + -117.773429, + 33.643589 + ], + [ + -117.773551, + 33.643628 + ], + [ + -117.77372, + 33.644011 + ], + [ + -117.773747, + 33.6443 + ], + [ + -117.773654, + 33.644369 + ], + [ + -117.773672, + 33.644389 + ], + [ + -117.773682, + 33.644407 + ], + [ + -117.773687, + 33.644418 + ], + [ + -117.773689, + 33.644431 + ], + [ + -117.773689, + 33.644451 + ], + [ + -117.773682, + 33.644474 + ], + [ + -117.773828, + 33.644509 + ], + [ + -117.773857, + 33.644734 + ], + [ + -117.773854, + 33.644753 + ], + [ + -117.773846, + 33.644765 + ], + [ + -117.773835, + 33.644774 + ], + [ + -117.773808, + 33.644785 + ], + [ + -117.773817, + 33.644913 + ], + [ + -117.773784, + 33.645026 + ], + [ + -117.773845, + 33.645086 + ], + [ + -117.773905, + 33.645157 + ], + [ + -117.773941, + 33.645218 + ], + [ + -117.773957, + 33.645285 + ], + [ + -117.774002, + 33.645677 + ], + [ + -117.774033, + 33.645972 + ], + [ + -117.774104, + 33.646435 + ], + [ + -117.774198, + 33.646428 + ], + [ + -117.774316, + 33.646422 + ], + [ + -117.774447, + 33.646421 + ], + [ + -117.774464, + 33.646417 + ], + [ + -117.774483, + 33.646407 + ], + [ + -117.774493, + 33.646402 + ], + [ + -117.774502, + 33.646394 + ], + [ + -117.774508, + 33.64638 + ], + [ + -117.774511, + 33.646365 + ], + [ + -117.77457, + 33.645754 + ], + [ + -117.774588, + 33.645535 + ], + [ + -117.774597, + 33.64533 + ], + [ + -117.774586, + 33.645063 + ], + [ + -117.774556, + 33.644884 + ], + [ + -117.77454, + 33.644795 + ], + [ + -117.774519, + 33.644709 + ], + [ + -117.774469, + 33.644554 + ], + [ + -117.77439, + 33.64435 + ], + [ + -117.774284, + 33.644103 + ], + [ + -117.774099, + 33.643665 + ], + [ + -117.773965, + 33.643336 + ], + [ + -117.773946, + 33.643241 + ], + [ + -117.773938, + 33.643147 + ], + [ + -117.773939, + 33.643071 + ], + [ + -117.773949, + 33.642993 + ], + [ + -117.773961, + 33.642923 + ], + [ + -117.773983, + 33.642846 + ], + [ + -117.774008, + 33.642783 + ], + [ + -117.774037, + 33.642723 + ], + [ + -117.774085, + 33.642647 + ], + [ + -117.774132, + 33.642577 + ], + [ + -117.774188, + 33.642517 + ], + [ + -117.774284, + 33.642425 + ], + [ + -117.774389, + 33.642336 + ], + [ + -117.774461, + 33.642277 + ], + [ + -117.774467, + 33.642266 + ], + [ + -117.774469, + 33.642252 + ], + [ + -117.774462, + 33.642235 + ], + [ + -117.774184, + 33.642089 + ], + [ + -117.774113, + 33.642063 + ], + [ + -117.774054, + 33.642044 + ], + [ + -117.773993, + 33.642028 + ], + [ + -117.773914, + 33.642013 + ], + [ + -117.773876, + 33.642007 + ], + [ + -117.773836, + 33.642003 + ], + [ + -117.773791, + 33.641999 + ], + [ + -117.773744, + 33.641998 + ], + [ + -117.773697, + 33.641999 + ], + [ + -117.77365, + 33.642001 + ], + [ + -117.7736, + 33.642006 + ], + [ + -117.77355, + 33.642012 + ], + [ + -117.773499, + 33.642021 + ], + [ + -117.773449, + 33.642033 + ], + [ + -117.773391, + 33.642051 + ], + [ + -117.773374, + 33.642067 + ], + [ + -117.773359, + 33.642081 + ], + [ + -117.773241, + 33.642122 + ], + [ + -117.773227, + 33.642123 + ], + [ + -117.773211, + 33.642118 + ], + [ + -117.773127, + 33.642156 + ] + ] + ] + }, + "properties": { + "name": "Cascades Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 214502279, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.808149, + 33.722671 + ], + [ + -117.808674, + 33.723004 + ], + [ + -117.80866, + 33.723035 + ], + [ + -117.808653, + 33.723074 + ], + [ + -117.808664, + 33.723106 + ], + [ + -117.808678, + 33.723131 + ], + [ + -117.808701, + 33.723155 + ], + [ + -117.808726, + 33.723172 + ], + [ + -117.808759, + 33.723182 + ], + [ + -117.808801, + 33.723188 + ], + [ + -117.808837, + 33.723185 + ], + [ + -117.808873, + 33.723174 + ], + [ + -117.808897, + 33.723158 + ], + [ + -117.809365, + 33.723533 + ], + [ + -117.809226, + 33.723638 + ], + [ + -117.809143, + 33.723714 + ], + [ + -117.809066, + 33.723797 + ], + [ + -117.809009, + 33.723862 + ], + [ + -117.808946, + 33.723951 + ], + [ + -117.808881, + 33.724057 + ], + [ + -117.808754, + 33.724338 + ], + [ + -117.808645, + 33.724582 + ], + [ + -117.808447, + 33.724826 + ], + [ + -117.807923, + 33.72355 + ], + [ + -117.807489, + 33.723665 + ], + [ + -117.807849, + 33.723008 + ], + [ + -117.808004, + 33.7228 + ], + [ + -117.808149, + 33.722671 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 217283571, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.957545, + 33.887594 + ], + [ + -117.957505, + 33.887603 + ], + [ + -117.957486, + 33.887605 + ], + [ + -117.957488, + 33.887625 + ], + [ + -117.956738, + 33.887618 + ], + [ + -117.956552, + 33.8876 + ], + [ + -117.956488, + 33.887578 + ], + [ + -117.956456, + 33.887529 + ], + [ + -117.956357, + 33.8873 + ], + [ + -117.956351, + 33.887264 + ], + [ + -117.956416, + 33.88722 + ], + [ + -117.956475, + 33.887226 + ], + [ + -117.957494, + 33.887478 + ], + [ + -117.957531, + 33.887505 + ], + [ + -117.957558, + 33.887536 + ], + [ + -117.957561, + 33.88756 + ], + [ + -117.957545, + 33.887594 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 217283572, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.961311, + 33.881738 + ], + [ + -117.961167, + 33.882116 + ], + [ + -117.961103, + 33.882136 + ], + [ + -117.96103, + 33.882134 + ], + [ + -117.960924, + 33.882135 + ], + [ + -117.960791, + 33.882525 + ], + [ + -117.960781, + 33.882597 + ], + [ + -117.96083, + 33.882663 + ], + [ + -117.960935, + 33.882693 + ], + [ + -117.960998, + 33.882722 + ], + [ + -117.96104, + 33.88277 + ], + [ + -117.961062, + 33.882833 + ], + [ + -117.961051, + 33.882895 + ], + [ + -117.960715, + 33.883757 + ], + [ + -117.961209, + 33.88387 + ], + [ + -117.961498, + 33.883035 + ], + [ + -117.961542, + 33.882944 + ], + [ + -117.961629, + 33.8829 + ], + [ + -117.961697, + 33.882893 + ], + [ + -117.961778, + 33.882891 + ], + [ + -117.96185, + 33.88285 + ], + [ + -117.961884, + 33.882754 + ], + [ + -117.96216, + 33.881952 + ], + [ + -117.961311, + 33.881738 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 217284619, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.979467, + 33.892946 + ], + [ + -117.979469, + 33.893051 + ], + [ + -117.979483, + 33.893124 + ], + [ + -117.979475, + 33.893211 + ], + [ + -117.979432, + 33.893282 + ], + [ + -117.979351, + 33.893327 + ], + [ + -117.979292, + 33.893407 + ], + [ + -117.979123, + 33.893352 + ], + [ + -117.979035, + 33.893325 + ], + [ + -117.97911, + 33.893082 + ], + [ + -117.979166, + 33.893058 + ], + [ + -117.97922, + 33.893026 + ], + [ + -117.979279, + 33.892966 + ], + [ + -117.979295, + 33.892928 + ], + [ + -117.979349, + 33.892902 + ], + [ + -117.979424, + 33.892911 + ], + [ + -117.979467, + 33.892946 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 218011711, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.761793, + 33.84079 + ], + [ + -117.76096, + 33.841096 + ], + [ + -117.760409, + 33.841408 + ], + [ + -117.760042, + 33.8416 + ], + [ + -117.75958, + 33.841613 + ], + [ + -117.759261, + 33.841335 + ], + [ + -117.758938, + 33.840911 + ], + [ + -117.758507, + 33.840679 + ], + [ + -117.757881, + 33.840556 + ], + [ + -117.757561, + 33.840629 + ], + [ + -117.757199, + 33.840937 + ], + [ + -117.757282, + 33.84113 + ], + [ + -117.757422, + 33.841557 + ], + [ + -117.757589, + 33.841759 + ], + [ + -117.757873, + 33.841819 + ], + [ + -117.758104, + 33.841729 + ], + [ + -117.75824, + 33.84166 + ], + [ + -117.758415, + 33.841683 + ], + [ + -117.758623, + 33.841815 + ], + [ + -117.759508, + 33.842488 + ], + [ + -117.759955, + 33.842789 + ], + [ + -117.760286, + 33.842952 + ], + [ + -117.760394, + 33.843064 + ], + [ + -117.76039, + 33.843164 + ], + [ + -117.76033, + 33.843233 + ], + [ + -117.760118, + 33.843316 + ], + [ + -117.759835, + 33.843329 + ], + [ + -117.759596, + 33.843346 + ], + [ + -117.759332, + 33.843415 + ], + [ + -117.759141, + 33.843588 + ], + [ + -117.759037, + 33.84371 + ], + [ + -117.75889, + 33.843946 + ], + [ + -117.75863, + 33.844068 + ], + [ + -117.758431, + 33.844363 + ], + [ + -117.758303, + 33.844665 + ], + [ + -117.758275, + 33.844814 + ], + [ + -117.758359, + 33.844873 + ], + [ + -117.758627, + 33.84482 + ], + [ + -117.758766, + 33.844744 + ], + [ + -117.75891, + 33.844701 + ], + [ + -117.759105, + 33.844784 + ], + [ + -117.7594, + 33.845045 + ], + [ + -117.759428, + 33.845234 + ], + [ + -117.759193, + 33.84544 + ], + [ + -117.758862, + 33.845675 + ], + [ + -117.75826, + 33.845894 + ], + [ + -117.758013, + 33.846315 + ], + [ + -117.758109, + 33.846527 + ], + [ + -117.758418, + 33.846734 + ], + [ + -117.758825, + 33.846826 + ], + [ + -117.759367, + 33.846855 + ], + [ + -117.759704, + 33.846844 + ], + [ + -117.760024, + 33.846913 + ], + [ + -117.760405, + 33.846938 + ], + [ + -117.760664, + 33.846817 + ], + [ + -117.76121, + 33.846849 + ], + [ + -117.761521, + 33.846784 + ], + [ + -117.761687, + 33.846767 + ], + [ + -117.761807, + 33.846796 + ], + [ + -117.761936, + 33.846871 + ], + [ + -117.762102, + 33.847019 + ], + [ + -117.762224, + 33.847152 + ], + [ + -117.762269, + 33.847199 + ], + [ + -117.762461, + 33.847169 + ], + [ + -117.76272, + 33.847052 + ], + [ + -117.762802, + 33.846904 + ], + [ + -117.762726, + 33.846757 + ], + [ + -117.762573, + 33.846447 + ], + [ + -117.762511, + 33.846183 + ], + [ + -117.762486, + 33.845796 + ], + [ + -117.762695, + 33.845552 + ], + [ + -117.763064, + 33.845344 + ], + [ + -117.763563, + 33.844911 + ], + [ + -117.763823, + 33.844573 + ], + [ + -117.763941, + 33.844234 + ], + [ + -117.764398, + 33.843978 + ], + [ + -117.765064, + 33.84369 + ], + [ + -117.765227, + 33.843655 + ], + [ + -117.765487, + 33.84429 + ], + [ + -117.765628, + 33.844527 + ], + [ + -117.76578, + 33.844524 + ], + [ + -117.766443, + 33.844538 + ], + [ + -117.76699, + 33.844887 + ], + [ + -117.767244, + 33.845047 + ], + [ + -117.767724, + 33.845115 + ], + [ + -117.767986, + 33.845168 + ], + [ + -117.768175, + 33.845164 + ], + [ + -117.768378, + 33.845007 + ], + [ + -117.768321, + 33.844808 + ], + [ + -117.768169, + 33.844676 + ], + [ + -117.767955, + 33.844505 + ], + [ + -117.767938, + 33.844358 + ], + [ + -117.768096, + 33.844259 + ], + [ + -117.768541, + 33.8441 + ], + [ + -117.768919, + 33.844002 + ], + [ + -117.769139, + 33.844016 + ], + [ + -117.769328, + 33.843927 + ], + [ + -117.76954, + 33.843707 + ], + [ + -117.769783, + 33.843671 + ], + [ + -117.770039, + 33.843819 + ], + [ + -117.770485, + 33.844091 + ], + [ + -117.770812, + 33.844182 + ], + [ + -117.771359, + 33.843995 + ], + [ + -117.771743, + 33.843803 + ], + [ + -117.772059, + 33.84359 + ], + [ + -117.772154, + 33.843402 + ], + [ + -117.772265, + 33.843093 + ], + [ + -117.772453, + 33.842957 + ], + [ + -117.772865, + 33.842838 + ], + [ + -117.773201, + 33.8428 + ], + [ + -117.773345, + 33.84284 + ], + [ + -117.773954, + 33.842931 + ], + [ + -117.77416, + 33.842931 + ], + [ + -117.774938, + 33.842444 + ], + [ + -117.773849, + 33.841667 + ], + [ + -117.77359, + 33.841499 + ], + [ + -117.773317, + 33.841388 + ], + [ + -117.772876, + 33.841282 + ], + [ + -117.772078, + 33.841183 + ], + [ + -117.771545, + 33.841123 + ], + [ + -117.771182, + 33.841042 + ], + [ + -117.770901, + 33.840928 + ], + [ + -117.770596, + 33.84075 + ], + [ + -117.770008, + 33.840361 + ], + [ + -117.769732, + 33.84019 + ], + [ + -117.769511, + 33.840853 + ], + [ + -117.769162, + 33.841165 + ], + [ + -117.768979, + 33.841198 + ], + [ + -117.768699, + 33.84115 + ], + [ + -117.768442, + 33.841067 + ], + [ + -117.768239, + 33.840982 + ], + [ + -117.768161, + 33.840943 + ], + [ + -117.768017, + 33.840967 + ], + [ + -117.767766, + 33.84112 + ], + [ + -117.767559, + 33.841169 + ], + [ + -117.767246, + 33.841176 + ], + [ + -117.766829, + 33.841135 + ], + [ + -117.766498, + 33.841175 + ], + [ + -117.766171, + 33.841178 + ], + [ + -117.76607, + 33.841085 + ], + [ + -117.766011, + 33.840906 + ], + [ + -117.765867, + 33.840767 + ], + [ + -117.765823, + 33.840588 + ], + [ + -117.765855, + 33.840384 + ], + [ + -117.765622, + 33.84 + ], + [ + -117.765199, + 33.840071 + ], + [ + -117.76485, + 33.840071 + ], + [ + -117.764547, + 33.840028 + ], + [ + -117.76424, + 33.839954 + ], + [ + -117.763967, + 33.839841 + ], + [ + -117.763765, + 33.83972 + ], + [ + -117.762984, + 33.840537 + ], + [ + -117.762692, + 33.840669 + ], + [ + -117.762242, + 33.840736 + ], + [ + -117.761793, + 33.84079 + ] + ] + ] + }, + "properties": { + "name": "Anaheim Hills Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 218014788, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.826253, + 33.903084 + ], + [ + -117.82472, + 33.9031 + ], + [ + -117.824672, + 33.903342 + ], + [ + -117.824535, + 33.903444 + ], + [ + -117.824389, + 33.903524 + ], + [ + -117.824313, + 33.903784 + ], + [ + -117.824329, + 33.903785 + ], + [ + -117.824378, + 33.903795 + ], + [ + -117.824422, + 33.903825 + ], + [ + -117.824446, + 33.903842 + ], + [ + -117.824461, + 33.903829 + ], + [ + -117.824489, + 33.903825 + ], + [ + -117.824519, + 33.90383 + ], + [ + -117.82495, + 33.903974 + ], + [ + -117.825303, + 33.904128 + ], + [ + -117.825605, + 33.904297 + ], + [ + -117.82588, + 33.904469 + ], + [ + -117.826179, + 33.904631 + ], + [ + -117.826181, + 33.904677 + ], + [ + -117.826243, + 33.904707 + ], + [ + -117.826298, + 33.904716 + ], + [ + -117.826265, + 33.903283 + ], + [ + -117.826253, + 33.903084 + ] + ] + ] + }, + "properties": { + "name": "Vista del Verde", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 219140094, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.940464, + 33.720448 + ], + [ + -117.941124, + 33.720659 + ], + [ + -117.941161, + 33.720549 + ], + [ + -117.941182, + 33.720439 + ], + [ + -117.941164, + 33.720305 + ], + [ + -117.941126, + 33.720197 + ], + [ + -117.941059, + 33.720108 + ], + [ + -117.940984, + 33.720041 + ], + [ + -117.940887, + 33.719978 + ], + [ + -117.940785, + 33.71993 + ], + [ + -117.94071, + 33.719909 + ], + [ + -117.940464, + 33.720448 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 219170486, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.827402, + 33.644136 + ], + [ + -117.82719, + 33.644367 + ], + [ + -117.82735, + 33.644468 + ], + [ + -117.827561, + 33.644237 + ], + [ + -117.827402, + 33.644136 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 219170497, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.821217, + 33.650058 + ], + [ + -117.82121, + 33.648623 + ], + [ + -117.821572, + 33.648562 + ], + [ + -117.821796, + 33.648911 + ], + [ + -117.821517, + 33.649024 + ], + [ + -117.821863, + 33.64942 + ], + [ + -117.822166, + 33.649997 + ], + [ + -117.821913, + 33.650045 + ], + [ + -117.821457, + 33.650062 + ], + [ + -117.821217, + 33.650058 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 219726155, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.964628, + 33.887 + ], + [ + -117.964641, + 33.887622 + ], + [ + -117.96505, + 33.887614 + ], + [ + -117.964953, + 33.887001 + ], + [ + -117.964628, + 33.887 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 219726156, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.954194, + 33.887189 + ], + [ + -117.953179, + 33.887202 + ], + [ + -117.953346, + 33.887646 + ], + [ + -117.954096, + 33.887648 + ], + [ + -117.954194, + 33.887189 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 219733367, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.633424, + 33.556204 + ], + [ + -117.63334, + 33.5564 + ], + [ + -117.633301, + 33.556575 + ], + [ + -117.633257, + 33.556866 + ], + [ + -117.633268, + 33.557132 + ], + [ + -117.633319, + 33.557449 + ], + [ + -117.63353, + 33.557404 + ], + [ + -117.633691, + 33.557341 + ], + [ + -117.633804, + 33.557241 + ], + [ + -117.63386, + 33.557164 + ], + [ + -117.633926, + 33.557061 + ], + [ + -117.633982, + 33.556932 + ], + [ + -117.634, + 33.556821 + ], + [ + -117.633971, + 33.556666 + ], + [ + -117.633891, + 33.556509 + ], + [ + -117.633779, + 33.556391 + ], + [ + -117.633688, + 33.556308 + ], + [ + -117.633562, + 33.55623 + ], + [ + -117.633424, + 33.556204 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 219733369, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.648099, + 33.546453 + ], + [ + -117.647739, + 33.545724 + ], + [ + -117.646462, + 33.546163 + ], + [ + -117.646822, + 33.546892 + ], + [ + -117.648099, + 33.546453 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 219733373, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.643425, + 33.548227 + ], + [ + -117.644252, + 33.548004 + ], + [ + -117.644421, + 33.548441 + ], + [ + -117.643594, + 33.548663 + ], + [ + -117.643425, + 33.548227 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 219733375, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.633236, + 33.552727 + ], + [ + -117.633673, + 33.553451 + ], + [ + -117.633065, + 33.553706 + ], + [ + -117.632629, + 33.552981 + ], + [ + -117.633236, + 33.552727 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220667020, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.780383, + 33.944543 + ], + [ + -117.777435, + 33.942427 + ], + [ + -117.776798, + 33.941935 + ], + [ + -117.77505, + 33.940672 + ], + [ + -117.772996, + 33.939209 + ], + [ + -117.771606, + 33.938044 + ], + [ + -117.770261, + 33.937212 + ], + [ + -117.76408, + 33.932823 + ], + [ + -117.759773, + 33.92934 + ], + [ + -117.755595, + 33.92642 + ], + [ + -117.751066, + 33.922997 + ], + [ + -117.750943, + 33.922908 + ], + [ + -117.743434, + 33.91749 + ], + [ + -117.7427, + 33.917042 + ], + [ + -117.736955, + 33.913409 + ], + [ + -117.736188, + 33.912847 + ], + [ + -117.736194, + 33.912709 + ], + [ + -117.736141, + 33.912457 + ], + [ + -117.736104, + 33.912346 + ], + [ + -117.736053, + 33.912253 + ], + [ + -117.735964, + 33.911989 + ], + [ + -117.735909, + 33.911842 + ], + [ + -117.735868, + 33.91171 + ], + [ + -117.735838, + 33.91153 + ], + [ + -117.735723, + 33.911251 + ], + [ + -117.735693, + 33.911113 + ], + [ + -117.735602, + 33.910954 + ], + [ + -117.735539, + 33.910816 + ], + [ + -117.735488, + 33.910681 + ], + [ + -117.735422, + 33.910552 + ], + [ + -117.735345, + 33.910387 + ], + [ + -117.735234, + 33.910102 + ], + [ + -117.735179, + 33.909946 + ], + [ + -117.735141, + 33.909778 + ], + [ + -117.735129, + 33.909637 + ], + [ + -117.735106, + 33.909484 + ], + [ + -117.735072, + 33.909322 + ], + [ + -117.735021, + 33.909178 + ], + [ + -117.734951, + 33.90904 + ], + [ + -117.73487, + 33.908908 + ], + [ + -117.734758, + 33.90881 + ], + [ + -117.734573, + 33.908724 + ], + [ + -117.734197, + 33.908575 + ], + [ + -117.733987, + 33.908474 + ], + [ + -117.733831, + 33.908385 + ], + [ + -117.733765, + 33.908274 + ], + [ + -117.733583, + 33.908038 + ], + [ + -117.733455, + 33.907885 + ], + [ + -117.733335, + 33.907769 + ], + [ + -117.733219, + 33.90764 + ], + [ + -117.733044, + 33.90747 + ], + [ + -117.732903, + 33.907381 + ], + [ + -117.732516, + 33.907066 + ], + [ + -117.732489, + 33.910334 + ], + [ + -117.724699, + 33.905504 + ], + [ + -117.719823, + 33.90252 + ], + [ + -117.715783, + 33.900048 + ], + [ + -117.71111, + 33.897188 + ], + [ + -117.709492, + 33.896227 + ], + [ + -117.707644, + 33.895066 + ], + [ + -117.691122, + 33.884849 + ], + [ + -117.689599, + 33.883953 + ], + [ + -117.679411, + 33.877545 + ], + [ + -117.677526, + 33.875678 + ], + [ + -117.676897, + 33.875055 + ], + [ + -117.675955, + 33.874073 + ], + [ + -117.675527, + 33.874095 + ], + [ + -117.674379, + 33.874237 + ], + [ + -117.673039, + 33.874585 + ], + [ + -117.673499, + 33.875199 + ], + [ + -117.673391, + 33.875734 + ], + [ + -117.672962, + 33.875965 + ], + [ + -117.671932, + 33.87666 + ], + [ + -117.670881, + 33.876874 + ], + [ + -117.670259, + 33.877666 + ], + [ + -117.66969, + 33.879359 + ], + [ + -117.669102, + 33.881408 + ], + [ + -117.668772, + 33.882231 + ], + [ + -117.668596, + 33.882744 + ], + [ + -117.668875, + 33.883572 + ], + [ + -117.66996, + 33.884374 + ], + [ + -117.669799, + 33.884677 + ], + [ + -117.668887, + 33.886146 + ], + [ + -117.667728, + 33.886814 + ], + [ + -117.666537, + 33.887438 + ], + [ + -117.664756, + 33.888008 + ], + [ + -117.663017, + 33.885416 + ], + [ + -117.663875, + 33.884899 + ], + [ + -117.666289, + 33.883314 + ], + [ + -117.667453, + 33.880609 + ], + [ + -117.667675, + 33.878469 + ], + [ + -117.668061, + 33.876883 + ], + [ + -117.666826, + 33.877497 + ], + [ + -117.666622, + 33.877996 + ], + [ + -117.666418, + 33.879109 + ], + [ + -117.666021, + 33.880107 + ], + [ + -117.665602, + 33.881114 + ], + [ + -117.665581, + 33.882539 + ], + [ + -117.665506, + 33.882824 + ], + [ + -117.665282, + 33.883074 + ], + [ + -117.664422, + 33.883786 + ], + [ + -117.662555, + 33.884525 + ], + [ + -117.661987, + 33.884748 + ], + [ + -117.6613, + 33.884614 + ], + [ + -117.660785, + 33.884178 + ], + [ + -117.66042, + 33.88383 + ], + [ + -117.659991, + 33.883563 + ], + [ + -117.65968, + 33.883501 + ], + [ + -117.659338, + 33.883297 + ], + [ + -117.658543, + 33.882761 + ], + [ + -117.657835, + 33.882147 + ], + [ + -117.656966, + 33.881773 + ], + [ + -117.655893, + 33.881755 + ], + [ + -117.655785, + 33.881844 + ], + [ + -117.655367, + 33.881906 + ], + [ + -117.654873, + 33.88204 + ], + [ + -117.654455, + 33.881782 + ], + [ + -117.654305, + 33.881603 + ], + [ + -117.654339, + 33.881408 + ], + [ + -117.655465, + 33.880562 + ], + [ + -117.656688, + 33.879974 + ], + [ + -117.657386, + 33.880072 + ], + [ + -117.658501, + 33.88009 + ], + [ + -117.659971, + 33.88001 + ], + [ + -117.661613, + 33.87992 + ], + [ + -117.661527, + 33.879555 + ], + [ + -117.66098, + 33.879662 + ], + [ + -117.658609, + 33.879849 + ], + [ + -117.657995, + 33.879805 + ], + [ + -117.656408, + 33.879787 + ], + [ + -117.655507, + 33.88008 + ], + [ + -117.654895, + 33.880232 + ], + [ + -117.6479, + 33.881986 + ], + [ + -117.642975, + 33.883305 + ], + [ + -117.642848, + 33.883501 + ], + [ + -117.6429, + 33.883723 + ], + [ + -117.643352, + 33.884151 + ], + [ + -117.643749, + 33.884552 + ], + [ + -117.644005, + 33.884088 + ], + [ + -117.64437, + 33.883706 + ], + [ + -117.645389, + 33.883198 + ], + [ + -117.645969, + 33.882895 + ], + [ + -117.646674, + 33.883865 + ], + [ + -117.646578, + 33.883928 + ], + [ + -117.64643, + 33.883935 + ], + [ + -117.645995, + 33.884025 + ], + [ + -117.645046, + 33.884436 + ], + [ + -117.644574, + 33.884899 + ], + [ + -117.644533, + 33.885095 + ], + [ + -117.644563, + 33.885211 + ], + [ + -117.644896, + 33.885558 + ], + [ + -117.645198, + 33.886057 + ], + [ + -117.645818, + 33.887357 + ], + [ + -117.646355, + 33.889032 + ], + [ + -117.646687, + 33.890252 + ], + [ + -117.64702, + 33.893191 + ], + [ + -117.646784, + 33.897109 + ], + [ + -117.646709, + 33.898881 + ], + [ + -117.646923, + 33.900787 + ], + [ + -117.647288, + 33.902283 + ], + [ + -117.647717, + 33.903592 + ], + [ + -117.653813, + 33.920875 + ], + [ + -117.654455, + 33.920954 + ], + [ + -117.655261, + 33.921204 + ], + [ + -117.656141, + 33.921204 + ], + [ + -117.657096, + 33.92124 + ], + [ + -117.657921, + 33.921586 + ], + [ + -117.658382, + 33.922174 + ], + [ + -117.658468, + 33.922699 + ], + [ + -117.657888, + 33.922913 + ], + [ + -117.656697, + 33.922334 + ], + [ + -117.65615, + 33.922619 + ], + [ + -117.655228, + 33.922575 + ], + [ + -117.655185, + 33.921951 + ], + [ + -117.654916, + 33.921729 + ], + [ + -117.654863, + 33.921426 + ], + [ + -117.654156, + 33.921525 + ], + [ + -117.655605, + 33.924436 + ], + [ + -117.656624, + 33.926101 + ], + [ + -117.657223, + 33.926937 + ], + [ + -117.659251, + 33.929438 + ], + [ + -117.659498, + 33.929759 + ], + [ + -117.659768, + 33.929946 + ], + [ + -117.660163, + 33.930044 + ], + [ + -117.660088, + 33.92991 + ], + [ + -117.659167, + 33.929261 + ], + [ + -117.657976, + 33.92781 + ], + [ + -117.656139, + 33.924703 + ], + [ + -117.658791, + 33.924712 + ], + [ + -117.661643, + 33.924676 + ], + [ + -117.662877, + 33.924765 + ], + [ + -117.663147, + 33.924676 + ], + [ + -117.663457, + 33.924079 + ], + [ + -117.664132, + 33.923857 + ], + [ + -117.664776, + 33.924035 + ], + [ + -117.665109, + 33.924364 + ], + [ + -117.665645, + 33.925281 + ], + [ + -117.666482, + 33.925352 + ], + [ + -117.667941, + 33.925993 + ], + [ + -117.668896, + 33.926349 + ], + [ + -117.669445, + 33.926439 + ], + [ + -117.67013, + 33.926527 + ], + [ + -117.66969, + 33.926875 + ], + [ + -117.669895, + 33.927383 + ], + [ + -117.670538, + 33.92837 + ], + [ + -117.670709, + 33.928664 + ], + [ + -117.670849, + 33.928833 + ], + [ + -117.671117, + 33.929074 + ], + [ + -117.671718, + 33.929323 + ], + [ + -117.672136, + 33.929287 + ], + [ + -117.672748, + 33.929456 + ], + [ + -117.672855, + 33.929821 + ], + [ + -117.672748, + 33.929955 + ], + [ + -117.672372, + 33.930008 + ], + [ + -117.672018, + 33.929714 + ], + [ + -117.671675, + 33.929625 + ], + [ + -117.671181, + 33.929438 + ], + [ + -117.670924, + 33.929154 + ], + [ + -117.670666, + 33.929011 + ], + [ + -117.670795, + 33.929162 + ], + [ + -117.671031, + 33.92951 + ], + [ + -117.671353, + 33.929999 + ], + [ + -117.671793, + 33.930836 + ], + [ + -117.67188, + 33.930641 + ], + [ + -117.672201, + 33.930293 + ], + [ + -117.672567, + 33.930472 + ], + [ + -117.672791, + 33.930791 + ], + [ + -117.672565, + 33.931067 + ], + [ + -117.672726, + 33.931219 + ], + [ + -117.673157, + 33.931549 + ], + [ + -117.673522, + 33.931673 + ], + [ + -117.674143, + 33.931869 + ], + [ + -117.67455, + 33.932127 + ], + [ + -117.674872, + 33.932421 + ], + [ + -117.674593, + 33.932839 + ], + [ + -117.674293, + 33.932946 + ], + [ + -117.673724, + 33.933097 + ], + [ + -117.67305, + 33.933195 + ], + [ + -117.672855, + 33.933302 + ], + [ + -117.672705, + 33.933542 + ], + [ + -117.672631, + 33.933783 + ], + [ + -117.672361, + 33.933916 + ], + [ + -117.67219, + 33.933872 + ], + [ + -117.672104, + 33.934032 + ], + [ + -117.67204, + 33.934228 + ], + [ + -117.672426, + 33.934441 + ], + [ + -117.672664, + 33.93429 + ], + [ + -117.672932, + 33.933721 + ], + [ + -117.67349, + 33.933525 + ], + [ + -117.674037, + 33.933427 + ], + [ + -117.674786, + 33.933426 + ], + [ + -117.676878, + 33.934601 + ], + [ + -117.677608, + 33.934993 + ], + [ + -117.677823, + 33.935331 + ], + [ + -117.677706, + 33.935554 + ], + [ + -117.677458, + 33.935661 + ], + [ + -117.676964, + 33.935581 + ], + [ + -117.674445, + 33.935581 + ], + [ + -117.675174, + 33.935991 + ], + [ + -117.676921, + 33.937058 + ], + [ + -117.677331, + 33.93753 + ], + [ + -117.67778, + 33.93802 + ], + [ + -117.678005, + 33.938598 + ], + [ + -117.678081, + 33.939159 + ], + [ + -117.677597, + 33.939194 + ], + [ + -117.677404, + 33.939194 + ], + [ + -117.677211, + 33.939159 + ], + [ + -117.677104, + 33.939016 + ], + [ + -117.674915, + 33.93899 + ], + [ + -117.674818, + 33.93915 + ], + [ + -117.671847, + 33.939141 + ], + [ + -117.671836, + 33.939301 + ], + [ + -117.671664, + 33.939524 + ], + [ + -117.671696, + 33.939773 + ], + [ + -117.671653, + 33.94036 + ], + [ + -117.671417, + 33.940948 + ], + [ + -117.670958, + 33.941322 + ], + [ + -117.670688, + 33.941455 + ], + [ + -117.67026, + 33.941384 + ], + [ + -117.668039, + 33.938919 + ], + [ + -117.668102, + 33.937886 + ], + [ + -117.668413, + 33.936934 + ], + [ + -117.668855, + 33.936373 + ], + [ + -117.669272, + 33.936035 + ], + [ + -117.669819, + 33.93607 + ], + [ + -117.670829, + 33.936151 + ], + [ + -117.671782, + 33.936141 + ], + [ + -117.672233, + 33.936186 + ], + [ + -117.672469, + 33.936248 + ], + [ + -117.672973, + 33.935794 + ], + [ + -117.673039, + 33.935599 + ], + [ + -117.673735, + 33.935572 + ], + [ + -117.672737, + 33.93502 + ], + [ + -117.672533, + 33.935136 + ], + [ + -117.67248, + 33.93534 + ], + [ + -117.671997, + 33.93526 + ], + [ + -117.671419, + 33.934869 + ], + [ + -117.670527, + 33.934575 + ], + [ + -117.669486, + 33.934459 + ], + [ + -117.668778, + 33.934308 + ], + [ + -117.66748, + 33.933605 + ], + [ + -117.667072, + 33.933551 + ], + [ + -117.666707, + 33.933533 + ], + [ + -117.666536, + 33.933649 + ], + [ + -117.666353, + 33.9338 + ], + [ + -117.66586, + 33.933827 + ], + [ + -117.665602, + 33.933729 + ], + [ + -117.665141, + 33.933587 + ], + [ + -117.664776, + 33.933391 + ], + [ + -117.664347, + 33.933239 + ], + [ + -117.663918, + 33.933186 + ], + [ + -117.662952, + 33.933035 + ], + [ + -117.663092, + 33.931664 + ], + [ + -117.661827, + 33.931718 + ], + [ + -117.661751, + 33.932082 + ], + [ + -117.662064, + 33.933008 + ], + [ + -117.662663, + 33.933889 + ], + [ + -117.66365, + 33.935029 + ], + [ + -117.66643, + 33.938145 + ], + [ + -117.671085, + 33.943013 + ], + [ + -117.672696, + 33.944731 + ], + [ + -117.674262, + 33.946173 + ], + [ + -117.679548, + 33.946205 + ], + [ + -117.67891, + 33.945117 + ], + [ + -117.678507, + 33.944248 + ], + [ + -117.678277, + 33.943258 + ], + [ + -117.683112, + 33.942048 + ], + [ + -117.683429, + 33.943554 + ], + [ + -117.683994, + 33.946242 + ], + [ + -117.688231, + 33.946173 + ], + [ + -117.688938, + 33.945746 + ], + [ + -117.689839, + 33.945568 + ], + [ + -117.690506, + 33.945853 + ], + [ + -117.690891, + 33.946262 + ], + [ + -117.690676, + 33.946636 + ], + [ + -117.689626, + 33.946743 + ], + [ + -117.689818, + 33.946921 + ], + [ + -117.690354, + 33.947241 + ], + [ + -117.690806, + 33.947757 + ], + [ + -117.69117, + 33.947811 + ], + [ + -117.69117, + 33.948612 + ], + [ + -117.691707, + 33.948273 + ], + [ + -117.692244, + 33.947775 + ], + [ + -117.692437, + 33.947348 + ], + [ + -117.692779, + 33.94701 + ], + [ + -117.693273, + 33.947134 + ], + [ + -117.693315, + 33.947472 + ], + [ + -117.694067, + 33.947152 + ], + [ + -117.694646, + 33.947259 + ], + [ + -117.695097, + 33.947401 + ], + [ + -117.695419, + 33.947188 + ], + [ + -117.695849, + 33.947312 + ], + [ + -117.696341, + 33.947472 + ], + [ + -117.696664, + 33.947472 + ], + [ + -117.697007, + 33.947704 + ], + [ + -117.697372, + 33.947633 + ], + [ + -117.697993, + 33.947757 + ], + [ + -117.698037, + 33.947971 + ], + [ + -117.698594, + 33.94822 + ], + [ + -117.698787, + 33.948594 + ], + [ + -117.69883, + 33.94895 + ], + [ + -117.698788, + 33.94943 + ], + [ + -117.698617, + 33.949786 + ], + [ + -117.697736, + 33.95016 + ], + [ + -117.697028, + 33.950748 + ], + [ + -117.696405, + 33.951228 + ], + [ + -117.696127, + 33.951655 + ], + [ + -117.695612, + 33.951904 + ], + [ + -117.693831, + 33.95283 + ], + [ + -117.692865, + 33.953257 + ], + [ + -117.692651, + 33.953257 + ], + [ + -117.69162, + 33.952688 + ], + [ + -117.690998, + 33.952492 + ], + [ + -117.69057, + 33.952706 + ], + [ + -117.690763, + 33.952866 + ], + [ + -117.691772, + 33.953293 + ], + [ + -117.692394, + 33.953916 + ], + [ + -117.692716, + 33.953756 + ], + [ + -117.693294, + 33.953382 + ], + [ + -117.69338, + 33.953524 + ], + [ + -117.693939, + 33.953364 + ], + [ + -117.69441, + 33.952723 + ], + [ + -117.694797, + 33.95283 + ], + [ + -117.695418, + 33.952528 + ], + [ + -117.696042, + 33.952349 + ], + [ + -117.696085, + 33.952029 + ], + [ + -117.696491, + 33.951744 + ], + [ + -117.697092, + 33.951353 + ], + [ + -117.697908, + 33.951157 + ], + [ + -117.698551, + 33.951104 + ], + [ + -117.699324, + 33.950463 + ], + [ + -117.699367, + 33.950676 + ], + [ + -117.69941, + 33.951068 + ], + [ + -117.700053, + 33.951495 + ], + [ + -117.70016, + 33.952083 + ], + [ + -117.700419, + 33.952438 + ], + [ + -117.699839, + 33.952795 + ], + [ + -117.699367, + 33.95299 + ], + [ + -117.699924, + 33.953595 + ], + [ + -117.700204, + 33.953951 + ], + [ + -117.700827, + 33.95388 + ], + [ + -117.7031, + 33.954948 + ], + [ + -117.702887, + 33.955891 + ], + [ + -117.703015, + 33.956425 + ], + [ + -117.70323, + 33.95655 + ], + [ + -117.703787, + 33.956799 + ], + [ + -117.703809, + 33.957529 + ], + [ + -117.704345, + 33.957386 + ], + [ + -117.704817, + 33.956817 + ], + [ + -117.705226, + 33.956764 + ], + [ + -117.70559, + 33.956514 + ], + [ + -117.705547, + 33.955571 + ], + [ + -117.705675, + 33.955215 + ], + [ + -117.706105, + 33.954895 + ], + [ + -117.706083, + 33.954592 + ], + [ + -117.706384, + 33.954521 + ], + [ + -117.706556, + 33.954343 + ], + [ + -117.707221, + 33.954183 + ], + [ + -117.707435, + 33.953631 + ], + [ + -117.707671, + 33.95356 + ], + [ + -117.707393, + 33.953044 + ], + [ + -117.707543, + 33.952706 + ], + [ + -117.707928, + 33.952741 + ], + [ + -117.708337, + 33.952296 + ], + [ + -117.708872, + 33.952332 + ], + [ + -117.709646, + 33.953061 + ], + [ + -117.710503, + 33.954005 + ], + [ + -117.711405, + 33.954112 + ], + [ + -117.712221, + 33.953418 + ], + [ + -117.713443, + 33.953186 + ], + [ + -117.714194, + 33.953328 + ], + [ + -117.714301, + 33.954076 + ], + [ + -117.714538, + 33.955518 + ], + [ + -117.714345, + 33.956675 + ], + [ + -117.71413, + 33.95776 + ], + [ + -117.713443, + 33.958241 + ], + [ + -117.714301, + 33.958472 + ], + [ + -117.715159, + 33.958508 + ], + [ + -117.715202, + 33.957885 + ], + [ + -117.715331, + 33.956497 + ], + [ + -117.715375, + 33.954503 + ], + [ + -117.715225, + 33.953631 + ], + [ + -117.715354, + 33.953435 + ], + [ + -117.715696, + 33.952777 + ], + [ + -117.715954, + 33.952332 + ], + [ + -117.716855, + 33.952332 + ], + [ + -117.717714, + 33.952296 + ], + [ + -117.7181, + 33.952118 + ], + [ + -117.7184, + 33.952332 + ], + [ + -117.718636, + 33.952866 + ], + [ + -117.718571, + 33.953328 + ], + [ + -117.71885, + 33.953489 + ], + [ + -117.71915, + 33.953827 + ], + [ + -117.718893, + 33.954272 + ], + [ + -117.719108, + 33.954557 + ], + [ + -117.719344, + 33.955144 + ], + [ + -117.719494, + 33.955838 + ], + [ + -117.719365, + 33.956159 + ], + [ + -117.719667, + 33.956425 + ], + [ + -117.720073, + 33.95671 + ], + [ + -117.720481, + 33.957636 + ], + [ + -117.720202, + 33.958383 + ], + [ + -117.719601, + 33.958401 + ], + [ + -117.7181, + 33.958686 + ], + [ + -117.717241, + 33.959113 + ], + [ + -117.717262, + 33.960412 + ], + [ + -117.717048, + 33.961818 + ], + [ + -117.716382, + 33.962672 + ], + [ + -117.716018, + 33.963135 + ], + [ + -117.716425, + 33.963918 + ], + [ + -117.716019, + 33.964861 + ], + [ + -117.715438, + 33.965609 + ], + [ + -117.71559, + 33.965627 + ], + [ + -117.71694, + 33.964416 + ], + [ + -117.717521, + 33.964541 + ], + [ + -117.718271, + 33.96479 + ], + [ + -117.71928, + 33.964737 + ], + [ + -117.720868, + 33.965146 + ], + [ + -117.722585, + 33.965022 + ], + [ + -117.724365, + 33.964416 + ], + [ + -117.724859, + 33.963456 + ], + [ + -117.726918, + 33.962281 + ], + [ + -117.728077, + 33.961854 + ], + [ + -117.729772, + 33.960661 + ], + [ + -117.729643, + 33.959487 + ], + [ + -117.73018, + 33.958223 + ], + [ + -117.73018, + 33.95744 + ], + [ + -117.729622, + 33.956977 + ], + [ + -117.728957, + 33.956408 + ], + [ + -117.72827, + 33.956105 + ], + [ + -117.726704, + 33.955891 + ], + [ + -117.725782, + 33.955251 + ], + [ + -117.725759, + 33.95445 + ], + [ + -117.724966, + 33.953275 + ], + [ + -117.724495, + 33.952207 + ], + [ + -117.725439, + 33.952349 + ], + [ + -117.726855, + 33.954094 + ], + [ + -117.72767, + 33.9534 + ], + [ + -117.728592, + 33.953791 + ], + [ + -117.728613, + 33.954521 + ], + [ + -117.729001, + 33.955607 + ], + [ + -117.730158, + 33.956853 + ], + [ + -117.730823, + 33.957671 + ], + [ + -117.730545, + 33.95865 + ], + [ + -117.730201, + 33.959469 + ], + [ + -117.730374, + 33.959896 + ], + [ + -117.731725, + 33.958988 + ], + [ + -117.733528, + 33.958579 + ], + [ + -117.735567, + 33.957511 + ], + [ + -117.734986, + 33.956621 + ], + [ + -117.734537, + 33.955998 + ], + [ + -117.734258, + 33.955518 + ], + [ + -117.734923, + 33.955251 + ], + [ + -117.736059, + 33.955375 + ], + [ + -117.735995, + 33.954913 + ], + [ + -117.736467, + 33.954432 + ], + [ + -117.737219, + 33.954468 + ], + [ + -117.73827, + 33.954521 + ], + [ + -117.739708, + 33.95404 + ], + [ + -117.741488, + 33.954325 + ], + [ + -117.742927, + 33.954129 + ], + [ + -117.743957, + 33.953951 + ], + [ + -117.744364, + 33.953364 + ], + [ + -117.744579, + 33.952083 + ], + [ + -117.745157, + 33.950641 + ], + [ + -117.744021, + 33.949555 + ], + [ + -117.743527, + 33.948398 + ], + [ + -117.745008, + 33.947864 + ], + [ + -117.745781, + 33.947757 + ], + [ + -117.746809, + 33.948345 + ], + [ + -117.746509, + 33.949466 + ], + [ + -117.746961, + 33.950214 + ], + [ + -117.747453, + 33.949858 + ], + [ + -117.748356, + 33.94733 + ], + [ + -117.74812, + 33.945265 + ], + [ + -117.747862, + 33.943325 + ], + [ + -117.74696, + 33.940868 + ], + [ + -117.746446, + 33.93891 + ], + [ + -117.746854, + 33.93875 + ], + [ + -117.74726, + 33.939141 + ], + [ + -117.748011, + 33.942079 + ], + [ + -117.748763, + 33.946333 + ], + [ + -117.749105, + 33.946066 + ], + [ + -117.750437, + 33.945443 + ], + [ + -117.751574, + 33.945087 + ], + [ + -117.752517, + 33.94498 + ], + [ + -117.754321, + 33.945354 + ], + [ + -117.755328, + 33.94555 + ], + [ + -117.755908, + 33.946778 + ], + [ + -117.756144, + 33.947045 + ], + [ + -117.756272, + 33.947455 + ], + [ + -117.755993, + 33.94806 + ], + [ + -117.756467, + 33.948345 + ], + [ + -117.757753, + 33.950071 + ], + [ + -117.758075, + 33.95105 + ], + [ + -117.758354, + 33.951798 + ], + [ + -117.759063, + 33.952848 + ], + [ + -117.759943, + 33.953168 + ], + [ + -117.7608, + 33.953346 + ], + [ + -117.761963, + 33.953435 + ], + [ + -117.762215, + 33.954908 + ], + [ + -117.762398, + 33.956429 + ], + [ + -117.762478, + 33.957043 + ], + [ + -117.762754, + 33.957409 + ], + [ + -117.762993, + 33.957439 + ], + [ + -117.763669, + 33.957613 + ], + [ + -117.764222, + 33.958174 + ], + [ + -117.764792, + 33.958984 + ], + [ + -117.765139, + 33.959286 + ], + [ + -117.765176, + 33.959482 + ], + [ + -117.765117, + 33.959642 + ], + [ + -117.765768, + 33.960136 + ], + [ + -117.76751, + 33.95889 + ], + [ + -117.766721, + 33.958352 + ], + [ + -117.766069, + 33.957978 + ], + [ + -117.765831, + 33.957457 + ], + [ + -117.765783, + 33.956879 + ], + [ + -117.765801, + 33.956381 + ], + [ + -117.76619, + 33.955642 + ], + [ + -117.766673, + 33.954859 + ], + [ + -117.767027, + 33.954552 + ], + [ + -117.767354, + 33.95469 + ], + [ + -117.767408, + 33.954636 + ], + [ + -117.767408, + 33.954476 + ], + [ + -117.767097, + 33.954325 + ], + [ + -117.767038, + 33.954116 + ], + [ + -117.767231, + 33.954107 + ], + [ + -117.76751, + 33.954254 + ], + [ + -117.767834, + 33.954481 + ], + [ + -117.768188, + 33.954388 + ], + [ + -117.768461, + 33.954187 + ], + [ + -117.768851, + 33.954138 + ], + [ + -117.768958, + 33.954325 + ], + [ + -117.769357, + 33.95457 + ], + [ + -117.769867, + 33.95441 + ], + [ + -117.769996, + 33.954081 + ], + [ + -117.770494, + 33.953533 + ], + [ + -117.770981, + 33.953857 + ], + [ + -117.771549, + 33.954062 + ], + [ + -117.771657, + 33.954325 + ], + [ + -117.772147, + 33.953747 + ], + [ + -117.772746, + 33.953648 + ], + [ + -117.773595, + 33.953618 + ], + [ + -117.774103, + 33.95303 + ], + [ + -117.774816, + 33.952082 + ], + [ + -117.775326, + 33.951415 + ], + [ + -117.775768, + 33.950926 + ], + [ + -117.776184, + 33.950311 + ], + [ + -117.776363, + 33.950004 + ], + [ + -117.775884, + 33.949826 + ], + [ + -117.775805, + 33.949617 + ], + [ + -117.775578, + 33.949319 + ], + [ + -117.775846, + 33.949025 + ], + [ + -117.775891, + 33.948207 + ], + [ + -117.776036, + 33.94818 + ], + [ + -117.775913, + 33.94794 + ], + [ + -117.775787, + 33.947512 + ], + [ + -117.775723, + 33.947356 + ], + [ + -117.775556, + 33.947396 + ], + [ + -117.775583, + 33.947285 + ], + [ + -117.775733, + 33.947129 + ], + [ + -117.775934, + 33.947018 + ], + [ + -117.775939, + 33.94688 + ], + [ + -117.775792, + 33.946747 + ], + [ + -117.775696, + 33.946444 + ], + [ + -117.775728, + 33.946244 + ], + [ + -117.776147, + 33.946181 + ], + [ + -117.776892, + 33.946159 + ], + [ + -117.777375, + 33.946141 + ], + [ + -117.777568, + 33.946164 + ], + [ + -117.777708, + 33.946342 + ], + [ + -117.777676, + 33.946582 + ], + [ + -117.777901, + 33.946613 + ], + [ + -117.778046, + 33.946551 + ], + [ + -117.778127, + 33.946755 + ], + [ + -117.778277, + 33.946792 + ], + [ + -117.778459, + 33.946889 + ], + [ + -117.778614, + 33.946751 + ], + [ + -117.778732, + 33.946475 + ], + [ + -117.779081, + 33.946253 + ], + [ + -117.779553, + 33.946039 + ], + [ + -117.779736, + 33.94607 + ], + [ + -117.779907, + 33.945692 + ], + [ + -117.780025, + 33.94559 + ], + [ + -117.780202, + 33.945572 + ], + [ + -117.780914, + 33.94495 + ], + [ + -117.780383, + 33.944543 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220668142, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.915619, + 33.892189 + ], + [ + -117.915699, + 33.892427 + ], + [ + -117.915755, + 33.892736 + ], + [ + -117.91575, + 33.893299 + ], + [ + -117.915026, + 33.89399 + ], + [ + -117.914804, + 33.893977 + ], + [ + -117.914701, + 33.893881 + ], + [ + -117.914723, + 33.893578 + ], + [ + -117.914857, + 33.89348 + ], + [ + -117.914879, + 33.893373 + ], + [ + -117.914771, + 33.892688 + ], + [ + -117.914728, + 33.892525 + ], + [ + -117.914744, + 33.892327 + ], + [ + -117.914659, + 33.892224 + ], + [ + -117.914723, + 33.892175 + ], + [ + -117.914884, + 33.892173 + ], + [ + -117.915619, + 33.892189 + ] + ] + ] + }, + "properties": { + "name": "Golden Hills Little Leage", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 220967961, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.021768, + 33.684781 + ], + [ + -118.023546, + 33.684742 + ], + [ + -118.023511, + 33.685358 + ], + [ + -118.023136, + 33.685487 + ], + [ + -118.021045, + 33.685517 + ], + [ + -118.021768, + 33.684781 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 222807184, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.71461, + 33.540758 + ], + [ + -117.712836, + 33.540648 + ], + [ + -117.712223, + 33.540344 + ], + [ + -117.711984, + 33.540259 + ], + [ + -117.711647, + 33.540257 + ], + [ + -117.711255, + 33.540387 + ], + [ + -117.712476, + 33.541248 + ], + [ + -117.712476, + 33.541478 + ], + [ + -117.712075, + 33.541675 + ], + [ + -117.71232, + 33.542436 + ], + [ + -117.712656, + 33.542413 + ], + [ + -117.712856, + 33.543087 + ], + [ + -117.713449, + 33.542857 + ], + [ + -117.713777, + 33.542617 + ], + [ + -117.714069, + 33.542556 + ], + [ + -117.714546, + 33.542727 + ], + [ + -117.71451, + 33.541602 + ], + [ + -117.71461, + 33.540758 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 223201821, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.821687, + 33.714907 + ], + [ + -117.821626, + 33.714857 + ], + [ + -117.821185, + 33.714791 + ], + [ + -117.821126, + 33.71481 + ], + [ + -117.820194, + 33.715748 + ], + [ + -117.820227, + 33.715827 + ], + [ + -117.820504, + 33.715982 + ], + [ + -117.820607, + 33.716029 + ], + [ + -117.8207, + 33.716065 + ], + [ + -117.820804, + 33.716099 + ], + [ + -117.821064, + 33.71615 + ], + [ + -117.821364, + 33.716194 + ], + [ + -117.821427, + 33.716166 + ], + [ + -117.821687, + 33.714907 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 224018173, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.974619, + 33.908383 + ], + [ + -117.97394, + 33.908583 + ], + [ + -117.973544, + 33.90869 + ], + [ + -117.973366, + 33.908676 + ], + [ + -117.973128, + 33.908841 + ], + [ + -117.972948, + 33.908863 + ], + [ + -117.972385, + 33.908899 + ], + [ + -117.9721, + 33.909001 + ], + [ + -117.971822, + 33.909202 + ], + [ + -117.971572, + 33.909385 + ], + [ + -117.971207, + 33.909643 + ], + [ + -117.970904, + 33.909758 + ], + [ + -117.970636, + 33.909749 + ], + [ + -117.97028, + 33.909799 + ], + [ + -117.969982, + 33.909918 + ], + [ + -117.969276, + 33.910141 + ], + [ + -117.968898, + 33.910243 + ], + [ + -117.968563, + 33.910311 + ], + [ + -117.968204, + 33.910426 + ], + [ + -117.967686, + 33.910617 + ], + [ + -117.967428, + 33.910684 + ], + [ + -117.967254, + 33.91068 + ], + [ + -117.967085, + 33.910626 + ], + [ + -117.966315, + 33.910355 + ], + [ + -117.965977, + 33.910328 + ], + [ + -117.965811, + 33.910097 + ], + [ + -117.965795, + 33.909879 + ], + [ + -117.96572, + 33.909629 + ], + [ + -117.965441, + 33.908997 + ], + [ + -117.965119, + 33.908454 + ], + [ + -117.964979, + 33.90816 + ], + [ + -117.964695, + 33.908027 + ], + [ + -117.964422, + 33.908133 + ], + [ + -117.964215, + 33.908436 + ], + [ + -117.96418, + 33.908672 + ], + [ + -117.964124, + 33.909028 + ], + [ + -117.964175, + 33.909335 + ], + [ + -117.964266, + 33.90962 + ], + [ + -117.964282, + 33.909963 + ], + [ + -117.964427, + 33.910337 + ], + [ + -117.964953, + 33.911904 + ], + [ + -117.964969, + 33.912305 + ], + [ + -117.964907, + 33.912425 + ], + [ + -117.964502, + 33.912483 + ], + [ + -117.963877, + 33.91246 + ], + [ + -117.963179, + 33.912456 + ], + [ + -117.962726, + 33.91239 + ], + [ + -117.962533, + 33.912216 + ], + [ + -117.962319, + 33.912047 + ], + [ + -117.961836, + 33.911717 + ], + [ + -117.96153, + 33.911441 + ], + [ + -117.961257, + 33.911147 + ], + [ + -117.960607, + 33.910489 + ], + [ + -117.960291, + 33.910159 + ], + [ + -117.959998, + 33.910078 + ], + [ + -117.959797, + 33.910003 + ], + [ + -117.959626, + 33.909803 + ], + [ + -117.959188, + 33.909331 + ], + [ + -117.958872, + 33.909402 + ], + [ + -117.959331, + 33.912358 + ], + [ + -117.959331, + 33.913681 + ], + [ + -117.963338, + 33.913672 + ], + [ + -117.963336, + 33.915031 + ], + [ + -117.964151, + 33.915035 + ], + [ + -117.964207, + 33.915038 + ], + [ + -117.964533, + 33.914988 + ], + [ + -117.964695, + 33.914923 + ], + [ + -117.964829, + 33.914893 + ], + [ + -117.964906, + 33.914877 + ], + [ + -117.964958, + 33.914731 + ], + [ + -117.96499, + 33.91466 + ], + [ + -117.965052, + 33.914628 + ], + [ + -117.965175, + 33.914682 + ], + [ + -117.965849, + 33.913939 + ], + [ + -117.966181, + 33.913756 + ], + [ + -117.966519, + 33.9136 + ], + [ + -117.966943, + 33.913306 + ], + [ + -117.967281, + 33.913031 + ], + [ + -117.967528, + 33.912795 + ], + [ + -117.967603, + 33.912688 + ], + [ + -117.967748, + 33.912683 + ], + [ + -117.968498, + 33.912568 + ], + [ + -117.969217, + 33.912461 + ], + [ + -117.970827, + 33.912078 + ], + [ + -117.971014, + 33.912657 + ], + [ + -117.971226, + 33.91279 + ], + [ + -117.971333, + 33.912785 + ], + [ + -117.971448, + 33.912816 + ], + [ + -117.971545, + 33.912893 + ], + [ + -117.971805, + 33.913133 + ], + [ + -117.974101, + 33.911107 + ], + [ + -117.974614, + 33.910676 + ], + [ + -117.975574, + 33.910057 + ], + [ + -117.976422, + 33.909491 + ], + [ + -117.976561, + 33.909251 + ], + [ + -117.97655, + 33.906829 + ], + [ + -117.976116, + 33.906762 + ], + [ + -117.975569, + 33.906776 + ], + [ + -117.975351, + 33.906931 + ], + [ + -117.975274, + 33.907078 + ], + [ + -117.975263, + 33.907541 + ], + [ + -117.975247, + 33.907946 + ], + [ + -117.975142, + 33.908169 + ], + [ + -117.975032, + 33.908245 + ], + [ + -117.974855, + 33.90828 + ], + [ + -117.974694, + 33.908334 + ], + [ + -117.974619, + 33.908383 + ] + ] + ] + }, + "properties": { + "name": "Westridge Golf Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 228138485, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.920869, + 33.896934 + ], + [ + -117.92089, + 33.896925 + ], + [ + -117.92091, + 33.89691 + ], + [ + -117.920923, + 33.896889 + ], + [ + -117.920928, + 33.896867 + ], + [ + -117.920922, + 33.89684 + ], + [ + -117.920911, + 33.896821 + ], + [ + -117.920892, + 33.896808 + ], + [ + -117.920871, + 33.8968 + ], + [ + -117.920849, + 33.896797 + ], + [ + -117.920818, + 33.896798 + ], + [ + -117.92073, + 33.896806 + ], + [ + -117.920691, + 33.896809 + ], + [ + -117.92065, + 33.89681 + ], + [ + -117.920626, + 33.896816 + ], + [ + -117.920609, + 33.896829 + ], + [ + -117.920596, + 33.896845 + ], + [ + -117.920592, + 33.896863 + ], + [ + -117.920596, + 33.896885 + ], + [ + -117.920605, + 33.8969 + ], + [ + -117.920622, + 33.896915 + ], + [ + -117.92064, + 33.896923 + ], + [ + -117.920674, + 33.896926 + ], + [ + -117.920842, + 33.896936 + ], + [ + -117.920869, + 33.896934 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 228634997, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.963394, + 33.842352 + ], + [ + -117.963343, + 33.842345 + ], + [ + -117.963269, + 33.842351 + ], + [ + -117.963217, + 33.842366 + ], + [ + -117.963189, + 33.842383 + ], + [ + -117.963172, + 33.842409 + ], + [ + -117.963164, + 33.842424 + ], + [ + -117.96313, + 33.842418 + ], + [ + -117.963089, + 33.842423 + ], + [ + -117.963059, + 33.842445 + ], + [ + -117.963053, + 33.842467 + ], + [ + -117.963053, + 33.842493 + ], + [ + -117.963055, + 33.842504 + ], + [ + -117.963013, + 33.842524 + ], + [ + -117.962979, + 33.842562 + ], + [ + -117.962963, + 33.842602 + ], + [ + -117.962973, + 33.842647 + ], + [ + -117.962989, + 33.842674 + ], + [ + -117.963017, + 33.842693 + ], + [ + -117.963043, + 33.842706 + ], + [ + -117.963087, + 33.842714 + ], + [ + -117.963138, + 33.842707 + ], + [ + -117.963171, + 33.842693 + ], + [ + -117.963202, + 33.842667 + ], + [ + -117.963202, + 33.842629 + ], + [ + -117.963208, + 33.842596 + ], + [ + -117.96325, + 33.842622 + ], + [ + -117.963288, + 33.842632 + ], + [ + -117.963339, + 33.842635 + ], + [ + -117.963376, + 33.842628 + ], + [ + -117.963421, + 33.842615 + ], + [ + -117.963449, + 33.842604 + ], + [ + -117.963485, + 33.842619 + ], + [ + -117.963506, + 33.842649 + ], + [ + -117.96352, + 33.842692 + ], + [ + -117.96352, + 33.842727 + ], + [ + -117.963513, + 33.842773 + ], + [ + -117.963529, + 33.84282 + ], + [ + -117.963555, + 33.842845 + ], + [ + -117.963583, + 33.842866 + ], + [ + -117.963632, + 33.842878 + ], + [ + -117.963691, + 33.842868 + ], + [ + -117.963726, + 33.842856 + ], + [ + -117.963758, + 33.842828 + ], + [ + -117.963772, + 33.842787 + ], + [ + -117.963769, + 33.842741 + ], + [ + -117.963751, + 33.842715 + ], + [ + -117.963721, + 33.842703 + ], + [ + -117.96369, + 33.842699 + ], + [ + -117.963667, + 33.842697 + ], + [ + -117.963638, + 33.842685 + ], + [ + -117.963605, + 33.842669 + ], + [ + -117.963588, + 33.842648 + ], + [ + -117.963564, + 33.842618 + ], + [ + -117.96355, + 33.842587 + ], + [ + -117.963549, + 33.842567 + ], + [ + -117.963538, + 33.842506 + ], + [ + -117.963535, + 33.842457 + ], + [ + -117.963499, + 33.842392 + ], + [ + -117.963503, + 33.842372 + ], + [ + -117.963502, + 33.84235 + ], + [ + -117.963486, + 33.842329 + ], + [ + -117.963465, + 33.842321 + ], + [ + -117.963444, + 33.84232 + ], + [ + -117.963429, + 33.842322 + ], + [ + -117.963415, + 33.842328 + ], + [ + -117.963394, + 33.842352 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 229749496, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.908899, + 33.892425 + ], + [ + -117.908647, + 33.892514 + ], + [ + -117.908507, + 33.892567 + ], + [ + -117.908453, + 33.892603 + ], + [ + -117.908339, + 33.892563 + ], + [ + -117.908373, + 33.892648 + ], + [ + -117.908084, + 33.892808 + ], + [ + -117.907837, + 33.89304 + ], + [ + -117.907595, + 33.892986 + ], + [ + -117.907365, + 33.893111 + ], + [ + -117.907151, + 33.893111 + ], + [ + -117.906743, + 33.892977 + ], + [ + -117.905552, + 33.893022 + ], + [ + -117.905294, + 33.892897 + ], + [ + -117.905301, + 33.892772 + ], + [ + -117.90482, + 33.89271 + ], + [ + -117.904791, + 33.892808 + ], + [ + -117.90434, + 33.893725 + ], + [ + -117.903707, + 33.894108 + ], + [ + -117.903396, + 33.894179 + ], + [ + -117.902741, + 33.894393 + ], + [ + -117.902184, + 33.894713 + ], + [ + -117.901969, + 33.894909 + ], + [ + -117.90155, + 33.895078 + ], + [ + -117.900789, + 33.894936 + ], + [ + -117.900585, + 33.895043 + ], + [ + -117.900606, + 33.895274 + ], + [ + -117.900274, + 33.895364 + ], + [ + -117.899673, + 33.895123 + ], + [ + -117.899587, + 33.895007 + ], + [ + -117.899694, + 33.894624 + ], + [ + -117.900364, + 33.8945 + ], + [ + -117.900757, + 33.894099 + ], + [ + -117.900328, + 33.894117 + ], + [ + -117.900145, + 33.893725 + ], + [ + -117.900542, + 33.893022 + ], + [ + -117.900478, + 33.892665 + ], + [ + -117.899973, + 33.892425 + ], + [ + -117.899544, + 33.892105 + ], + [ + -117.899276, + 33.891713 + ], + [ + -117.89919, + 33.891258 + ], + [ + -117.899437, + 33.891027 + ], + [ + -117.899995, + 33.891241 + ], + [ + -117.900392, + 33.891588 + ], + [ + -117.900746, + 33.891454 + ], + [ + -117.900628, + 33.891151 + ], + [ + -117.90079, + 33.891024 + ], + [ + -117.90022, + 33.890582 + ], + [ + -117.899373, + 33.889985 + ], + [ + -117.899298, + 33.890252 + ], + [ + -117.898905, + 33.890341 + ], + [ + -117.898353, + 33.890377 + ], + [ + -117.898021, + 33.890118 + ], + [ + -117.897817, + 33.889753 + ], + [ + -117.897527, + 33.889442 + ], + [ + -117.897205, + 33.889085 + ], + [ + -117.897002, + 33.888774 + ], + [ + -117.897506, + 33.888765 + ], + [ + -117.897495, + 33.888471 + ], + [ + -117.897034, + 33.888186 + ], + [ + -117.896583, + 33.887963 + ], + [ + -117.896458, + 33.887971 + ], + [ + -117.896486, + 33.888711 + ], + [ + -117.89676, + 33.888747 + ], + [ + -117.896852, + 33.888846 + ], + [ + -117.897039, + 33.889047 + ], + [ + -117.897221, + 33.88933 + ], + [ + -117.897415, + 33.889604 + ], + [ + -117.897447, + 33.889798 + ], + [ + -117.897366, + 33.889887 + ], + [ + -117.896374, + 33.890034 + ], + [ + -117.896411, + 33.890305 + ], + [ + -117.895623, + 33.89049 + ], + [ + -117.895629, + 33.890637 + ], + [ + -117.896111, + 33.890622 + ], + [ + -117.897398, + 33.890573 + ], + [ + -117.897677, + 33.891499 + ], + [ + -117.898171, + 33.891641 + ], + [ + -117.898021, + 33.892416 + ], + [ + -117.89801, + 33.892942 + ], + [ + -117.8978, + 33.893191 + ], + [ + -117.898128, + 33.89352 + ], + [ + -117.898461, + 33.893841 + ], + [ + -117.898386, + 33.894206 + ], + [ + -117.899018, + 33.894419 + ], + [ + -117.898847, + 33.894749 + ], + [ + -117.898589, + 33.894936 + ], + [ + -117.897961, + 33.895105 + ], + [ + -117.89771, + 33.895176 + ], + [ + -117.897424, + 33.895292 + ], + [ + -117.897222, + 33.895148 + ], + [ + -117.897313, + 33.894898 + ], + [ + -117.897463, + 33.894713 + ], + [ + -117.897506, + 33.894384 + ], + [ + -117.897538, + 33.894197 + ], + [ + -117.89771, + 33.89401 + ], + [ + -117.897613, + 33.893823 + ], + [ + -117.897302, + 33.893446 + ], + [ + -117.897512, + 33.89381 + ], + [ + -117.897558, + 33.894009 + ], + [ + -117.897355, + 33.894327 + ], + [ + -117.897332, + 33.894642 + ], + [ + -117.89722, + 33.894758 + ], + [ + -117.897102, + 33.895016 + ], + [ + -117.897138, + 33.895376 + ], + [ + -117.896764, + 33.895855 + ], + [ + -117.896478, + 33.896353 + ], + [ + -117.896663, + 33.896748 + ], + [ + -117.896774, + 33.89679 + ], + [ + -117.897143, + 33.896717 + ], + [ + -117.897852, + 33.896321 + ], + [ + -117.898669, + 33.896428 + ], + [ + -117.899334, + 33.896493 + ], + [ + -117.899763, + 33.896742 + ], + [ + -117.900045, + 33.896666 + ], + [ + -117.900368, + 33.896455 + ], + [ + -117.900395, + 33.89621 + ], + [ + -117.900612, + 33.895911 + ], + [ + -117.901041, + 33.895593 + ], + [ + -117.901507, + 33.895624 + ], + [ + -117.901725, + 33.895629 + ], + [ + -117.902097, + 33.895453 + ], + [ + -117.902613, + 33.895318 + ], + [ + -117.902913, + 33.895293 + ], + [ + -117.903801, + 33.895372 + ], + [ + -117.904473, + 33.896282 + ], + [ + -117.9049, + 33.896593 + ], + [ + -117.905191, + 33.89635 + ], + [ + -117.905488, + 33.89619 + ], + [ + -117.906036, + 33.896003 + ], + [ + -117.906082, + 33.895903 + ], + [ + -117.906059, + 33.895727 + ], + [ + -117.905651, + 33.895775 + ], + [ + -117.905511, + 33.89558 + ], + [ + -117.90555, + 33.895442 + ], + [ + -117.90585, + 33.895247 + ], + [ + -117.905971, + 33.895012 + ], + [ + -117.906137, + 33.89489 + ], + [ + -117.906796, + 33.894578 + ], + [ + -117.907136, + 33.894361 + ], + [ + -117.907185, + 33.894158 + ], + [ + -117.907165, + 33.893906 + ], + [ + -117.907482, + 33.893562 + ], + [ + -117.909483, + 33.892337 + ], + [ + -117.908899, + 33.892425 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 230294993, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.998202, + 33.822669 + ], + [ + -117.998199, + 33.822795 + ], + [ + -117.998253, + 33.822873 + ], + [ + -117.998354, + 33.822831 + ], + [ + -117.998306, + 33.822688 + ], + [ + -117.998202, + 33.822669 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 230353720, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.009722, + 33.789432 + ], + [ + -118.010131, + 33.789436 + ], + [ + -118.010129, + 33.789588 + ], + [ + -118.009721, + 33.789584 + ], + [ + -118.009722, + 33.789432 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 230353755, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.009541, + 33.788755 + ], + [ + -118.009494, + 33.789509 + ], + [ + -118.009265, + 33.789538 + ], + [ + -118.009025, + 33.789513 + ], + [ + -118.008826, + 33.789461 + ], + [ + -118.008606, + 33.789315 + ], + [ + -118.008447, + 33.789117 + ], + [ + -118.008396, + 33.788992 + ], + [ + -118.008356, + 33.788802 + ], + [ + -118.008358, + 33.788738 + ], + [ + -118.008358, + 33.788693 + ], + [ + -118.009436, + 33.788676 + ], + [ + -118.009541, + 33.788755 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 230353758, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.010677, + 33.788969 + ], + [ + -118.009729, + 33.788961 + ], + [ + -118.009733, + 33.788629 + ], + [ + -118.010682, + 33.788637 + ], + [ + -118.010677, + 33.788969 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 230353759, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.010675, + 33.789156 + ], + [ + -118.010671, + 33.78944 + ], + [ + -118.01003, + 33.789435 + ], + [ + -118.010034, + 33.78915 + ], + [ + -118.010675, + 33.789156 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 230586166, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.918271, + 33.799477 + ], + [ + -117.918181, + 33.799481 + ], + [ + -117.918103, + 33.799497 + ], + [ + -117.917508, + 33.799498 + ], + [ + -117.917477, + 33.799504 + ], + [ + -117.917438, + 33.799521 + ], + [ + -117.917408, + 33.799551 + ], + [ + -117.917501, + 33.799548 + ], + [ + -117.917536, + 33.799565 + ], + [ + -117.917588, + 33.799553 + ], + [ + -117.918103, + 33.799555 + ], + [ + -117.91818, + 33.799566 + ], + [ + -117.918272, + 33.799567 + ], + [ + -117.918271, + 33.799477 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 230802700, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.970177, + 33.752245 + ], + [ + -117.972095, + 33.75224 + ], + [ + -117.972173, + 33.752274 + ], + [ + -117.972208, + 33.753931 + ], + [ + -117.970176, + 33.753959 + ], + [ + -117.970177, + 33.752245 + ] + ] + ] + }, + "properties": { + "name": "Westminster Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 233658637, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.696122, + 33.613556 + ], + [ + -117.69577, + 33.613395 + ], + [ + -117.695635, + 33.613643 + ], + [ + -117.695536, + 33.613806 + ], + [ + -117.695429, + 33.613968 + ], + [ + -117.694573, + 33.615287 + ], + [ + -117.693998, + 33.616058 + ], + [ + -117.693678, + 33.616477 + ], + [ + -117.693521, + 33.616639 + ], + [ + -117.693422, + 33.61674 + ], + [ + -117.69332, + 33.616832 + ], + [ + -117.693195, + 33.616947 + ], + [ + -117.693083, + 33.617045 + ], + [ + -117.692961, + 33.617141 + ], + [ + -117.692949, + 33.617251 + ], + [ + -117.693792, + 33.618125 + ], + [ + -117.694292, + 33.617803 + ], + [ + -117.694741, + 33.617088 + ], + [ + -117.694615, + 33.617027 + ], + [ + -117.695463, + 33.615687 + ], + [ + -117.695535, + 33.615542 + ], + [ + -117.695581, + 33.615251 + ], + [ + -117.69561, + 33.614815 + ], + [ + -117.695627, + 33.614586 + ], + [ + -117.695641, + 33.614476 + ], + [ + -117.695663, + 33.614365 + ], + [ + -117.695697, + 33.614277 + ], + [ + -117.695745, + 33.614176 + ], + [ + -117.696122, + 33.613556 + ] + ] + ] + }, + "properties": { + "name": "El Toro Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 233658640, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.690922, + 33.621445 + ], + [ + -117.691142, + 33.621182 + ], + [ + -117.69053, + 33.620905 + ], + [ + -117.692043, + 33.618524 + ], + [ + -117.692123, + 33.618439 + ], + [ + -117.692177, + 33.618381 + ], + [ + -117.692348, + 33.618228 + ], + [ + -117.691893, + 33.618399 + ], + [ + -117.691287, + 33.618591 + ], + [ + -117.690875, + 33.618713 + ], + [ + -117.690283, + 33.618984 + ], + [ + -117.689587, + 33.61924 + ], + [ + -117.689114, + 33.619404 + ], + [ + -117.688299, + 33.620118 + ], + [ + -117.68803, + 33.620538 + ], + [ + -117.688041, + 33.620923 + ], + [ + -117.688155, + 33.621103 + ], + [ + -117.688556, + 33.62157 + ], + [ + -117.689661, + 33.622651 + ], + [ + -117.689586, + 33.622737 + ], + [ + -117.688705, + 33.623417 + ], + [ + -117.688158, + 33.623914 + ], + [ + -117.687955, + 33.624197 + ], + [ + -117.687054, + 33.624885 + ], + [ + -117.687472, + 33.625479 + ], + [ + -117.687855, + 33.625922 + ], + [ + -117.68803, + 33.626001 + ], + [ + -117.688127, + 33.625979 + ], + [ + -117.69074, + 33.623914 + ], + [ + -117.689731, + 33.62291 + ], + [ + -117.68984, + 33.622714 + ], + [ + -117.690053, + 33.622231 + ], + [ + -117.690316, + 33.621914 + ], + [ + -117.690675, + 33.621597 + ], + [ + -117.690922, + 33.621445 + ] + ] + ] + }, + "properties": { + "name": "Lake Forest Golf & Practice Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 233658641, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.688991, + 33.619319 + ], + [ + -117.688401, + 33.619783 + ], + [ + -117.687994, + 33.620165 + ], + [ + -117.687569, + 33.620704 + ], + [ + -117.687891, + 33.620945 + ], + [ + -117.688041, + 33.620923 + ], + [ + -117.68803, + 33.620538 + ], + [ + -117.688299, + 33.620118 + ], + [ + -117.689114, + 33.619404 + ], + [ + -117.689587, + 33.61924 + ], + [ + -117.690283, + 33.618984 + ], + [ + -117.690875, + 33.618713 + ], + [ + -117.691287, + 33.618591 + ], + [ + -117.691893, + 33.618399 + ], + [ + -117.692348, + 33.618228 + ], + [ + -117.692451, + 33.618135 + ], + [ + -117.692735, + 33.61797 + ], + [ + -117.692934, + 33.61784 + ], + [ + -117.693155, + 33.617831 + ], + [ + -117.692752, + 33.617413 + ], + [ + -117.692585, + 33.617393 + ], + [ + -117.689994, + 33.618752 + ], + [ + -117.689307, + 33.619122 + ], + [ + -117.688991, + 33.619319 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 239083937, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.017224, + 33.832797 + ], + [ + -118.017207, + 33.832797 + ], + [ + -118.016387, + 33.832793 + ], + [ + -118.016386, + 33.832785 + ], + [ + -118.01637, + 33.832463 + ], + [ + -118.016388, + 33.832428 + ], + [ + -118.016395, + 33.832414 + ], + [ + -118.01647, + 33.832387 + ], + [ + -118.016657, + 33.832392 + ], + [ + -118.016784, + 33.832357 + ], + [ + -118.016896, + 33.83234 + ], + [ + -118.017148, + 33.832345 + ], + [ + -118.017205, + 33.832361 + ], + [ + -118.017221, + 33.832418 + ], + [ + -118.017224, + 33.832797 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 241089765, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.053401, + 33.808651 + ], + [ + -118.054016, + 33.809299 + ], + [ + -118.054118, + 33.809263 + ], + [ + -118.054469, + 33.809277 + ], + [ + -118.054434, + 33.810079 + ], + [ + -118.054311, + 33.810184 + ], + [ + -118.041868, + 33.810122 + ], + [ + -118.04189, + 33.809624 + ], + [ + -118.039801, + 33.809534 + ], + [ + -118.039808, + 33.809228 + ], + [ + -118.04102, + 33.80929 + ], + [ + -118.041034, + 33.807701 + ], + [ + -118.041702, + 33.807402 + ], + [ + -118.042286, + 33.807442 + ], + [ + -118.048879, + 33.807889 + ], + [ + -118.048895, + 33.808633 + ], + [ + -118.053401, + 33.808651 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 248625367, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.904778, + 33.837345 + ], + [ + -117.904768, + 33.83737 + ], + [ + -117.904734, + 33.837404 + ], + [ + -117.904697, + 33.837412 + ], + [ + -117.90466, + 33.837393 + ], + [ + -117.904632, + 33.837357 + ], + [ + -117.904562, + 33.837372 + ], + [ + -117.904522, + 33.837373 + ], + [ + -117.904485, + 33.837351 + ], + [ + -117.904473, + 33.837305 + ], + [ + -117.90449, + 33.837276 + ], + [ + -117.904528, + 33.837254 + ], + [ + -117.90455, + 33.83724 + ], + [ + -117.904583, + 33.83724 + ], + [ + -117.904738, + 33.837271 + ], + [ + -117.904764, + 33.837293 + ], + [ + -117.904774, + 33.837325 + ], + [ + -117.904778, + 33.837345 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 248625374, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.904785, + 33.837175 + ], + [ + -117.904345, + 33.837275 + ], + [ + -117.904404, + 33.837498 + ], + [ + -117.904764, + 33.837451 + ], + [ + -117.904867, + 33.837431 + ], + [ + -117.904785, + 33.837175 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 253557459, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.757505, + 33.83867 + ], + [ + -117.757216, + 33.838712 + ], + [ + -117.757176, + 33.838786 + ], + [ + -117.757236, + 33.839034 + ], + [ + -117.75736, + 33.839224 + ], + [ + -117.7574, + 33.83934 + ], + [ + -117.757385, + 33.839431 + ], + [ + -117.757256, + 33.839489 + ], + [ + -117.756942, + 33.839551 + ], + [ + -117.756693, + 33.839555 + ], + [ + -117.756365, + 33.839473 + ], + [ + -117.756185, + 33.839336 + ], + [ + -117.755981, + 33.839063 + ], + [ + -117.755762, + 33.838757 + ], + [ + -117.755757, + 33.838339 + ], + [ + -117.755742, + 33.838174 + ], + [ + -117.755588, + 33.838021 + ], + [ + -117.755284, + 33.837922 + ], + [ + -117.754886, + 33.837905 + ], + [ + -117.754517, + 33.837992 + ], + [ + -117.753999, + 33.838153 + ], + [ + -117.753566, + 33.838273 + ], + [ + -117.753168, + 33.838335 + ], + [ + -117.752496, + 33.838236 + ], + [ + -117.751346, + 33.838141 + ], + [ + -117.750529, + 33.838037 + ], + [ + -117.749782, + 33.837938 + ], + [ + -117.74901, + 33.837827 + ], + [ + -117.748851, + 33.837744 + ], + [ + -117.748756, + 33.837661 + ], + [ + -117.748667, + 33.837492 + ], + [ + -117.748657, + 33.837277 + ], + [ + -117.748811, + 33.837157 + ], + [ + -117.749454, + 33.836979 + ], + [ + -117.750121, + 33.836958 + ], + [ + -117.750907, + 33.837074 + ], + [ + -117.752088, + 33.837103 + ], + [ + -117.75268, + 33.837024 + ], + [ + -117.753078, + 33.836834 + ], + [ + -117.753366, + 33.83626 + ], + [ + -117.756393, + 33.835727 + ], + [ + -117.756877, + 33.83556 + ], + [ + -117.757259, + 33.834866 + ], + [ + -117.757439, + 33.834374 + ], + [ + -117.7583, + 33.834345 + ], + [ + -117.759057, + 33.834978 + ], + [ + -117.758644, + 33.835627 + ], + [ + -117.757644, + 33.837161 + ], + [ + -117.757595, + 33.837288 + ], + [ + -117.757625, + 33.837457 + ], + [ + -117.757754, + 33.837632 + ], + [ + -117.758014, + 33.837755 + ], + [ + -117.758412, + 33.837854 + ], + [ + -117.758596, + 33.838032 + ], + [ + -117.758626, + 33.838194 + ], + [ + -117.758556, + 33.838305 + ], + [ + -117.758421, + 33.838389 + ], + [ + -117.757505, + 33.83867 + ] + ] + ] + }, + "properties": { + "name": "Oak Canyon Nature Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 256660262, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.668455, + 33.538035 + ], + [ + -117.668804, + 33.538089 + ], + [ + -117.669335, + 33.537812 + ], + [ + -117.669351, + 33.537463 + ], + [ + -117.668852, + 33.537485 + ], + [ + -117.66868, + 33.537427 + ], + [ + -117.668444, + 33.53745 + ], + [ + -117.668267, + 33.53757 + ], + [ + -117.66846, + 33.537695 + ], + [ + -117.668181, + 33.537901 + ], + [ + -117.668455, + 33.538035 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 256664359, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.667196, + 33.551181 + ], + [ + -117.667192, + 33.550646 + ], + [ + -117.66713, + 33.550599 + ], + [ + -117.666506, + 33.550599 + ], + [ + -117.66644, + 33.550672 + ], + [ + -117.666479, + 33.550855 + ], + [ + -117.666551, + 33.550974 + ], + [ + -117.666638, + 33.551057 + ], + [ + -117.666804, + 33.551162 + ], + [ + -117.666968, + 33.551222 + ], + [ + -117.667111, + 33.551235 + ], + [ + -117.667196, + 33.551181 + ] + ] + ] + }, + "properties": { + "name": "Softball Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 257392028, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.939682, + 33.717486 + ], + [ + -117.939682, + 33.717259 + ], + [ + -117.939473, + 33.717257 + ], + [ + -117.93948, + 33.717475 + ], + [ + -117.939493, + 33.717488 + ], + [ + -117.939673, + 33.717497 + ], + [ + -117.939682, + 33.717486 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 258863326, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.002189, + 33.846499 + ], + [ + -118.002155, + 33.846498 + ], + [ + -118.002094, + 33.846499 + ], + [ + -118.002094, + 33.846463 + ], + [ + -118.002126, + 33.846462 + ], + [ + -118.002183, + 33.846413 + ], + [ + -118.002232, + 33.846371 + ], + [ + -118.00224, + 33.846364 + ], + [ + -118.002239, + 33.84618 + ], + [ + -118.002239, + 33.84606 + ], + [ + -118.002253, + 33.84606 + ], + [ + -118.002257, + 33.846363 + ], + [ + -118.002254, + 33.846445 + ], + [ + -118.002228, + 33.846477 + ], + [ + -118.002189, + 33.846499 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 263995255, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.738763, + 33.704609 + ], + [ + -117.738348, + 33.704318 + ], + [ + -117.737776, + 33.704908 + ], + [ + -117.737792, + 33.704977 + ], + [ + -117.738118, + 33.705199 + ], + [ + -117.738186, + 33.705192 + ], + [ + -117.738763, + 33.704609 + ] + ] + ] + }, + "properties": { + "name": "Meadowlark Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 264214531, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.78719, + 33.845091 + ], + [ + -117.787093, + 33.84511 + ], + [ + -117.787032, + 33.845115 + ], + [ + -117.78698, + 33.845116 + ], + [ + -117.786956, + 33.845118 + ], + [ + -117.786946, + 33.845125 + ], + [ + -117.786938, + 33.845139 + ], + [ + -117.786941, + 33.845159 + ], + [ + -117.786951, + 33.845176 + ], + [ + -117.787058, + 33.845318 + ], + [ + -117.787151, + 33.845275 + ], + [ + -117.7872, + 33.845248 + ], + [ + -117.787228, + 33.845226 + ], + [ + -117.787236, + 33.845207 + ], + [ + -117.787237, + 33.845188 + ], + [ + -117.78723, + 33.845168 + ], + [ + -117.78719, + 33.845091 + ] + ] + ] + }, + "properties": { + "name": "Imperial Park Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 264338089, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.773935, + 33.857295 + ], + [ + -117.773938, + 33.857321 + ], + [ + -117.773913, + 33.857358 + ], + [ + -117.773879, + 33.857394 + ], + [ + -117.773846, + 33.857405 + ], + [ + -117.77381, + 33.857376 + ], + [ + -117.773797, + 33.857322 + ], + [ + -117.773781, + 33.857279 + ], + [ + -117.773759, + 33.857261 + ], + [ + -117.773732, + 33.857264 + ], + [ + -117.773719, + 33.857274 + ], + [ + -117.773699, + 33.857288 + ], + [ + -117.773672, + 33.857283 + ], + [ + -117.773649, + 33.857272 + ], + [ + -117.773639, + 33.857254 + ], + [ + -117.773639, + 33.85724 + ], + [ + -117.773651, + 33.857222 + ], + [ + -117.77368, + 33.857203 + ], + [ + -117.773718, + 33.857183 + ], + [ + -117.773728, + 33.857153 + ], + [ + -117.773719, + 33.857116 + ], + [ + -117.773719, + 33.857083 + ], + [ + -117.773751, + 33.857062 + ], + [ + -117.773794, + 33.857061 + ], + [ + -117.773853, + 33.857076 + ], + [ + -117.773892, + 33.857075 + ], + [ + -117.773916, + 33.857093 + ], + [ + -117.773922, + 33.857116 + ], + [ + -117.773923, + 33.857141 + ], + [ + -117.773905, + 33.857156 + ], + [ + -117.773871, + 33.857172 + ], + [ + -117.773853, + 33.857186 + ], + [ + -117.773842, + 33.857223 + ], + [ + -117.773848, + 33.857251 + ], + [ + -117.773861, + 33.857261 + ], + [ + -117.773899, + 33.85728 + ], + [ + -117.77392, + 33.857281 + ], + [ + -117.773935, + 33.857295 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 266513782, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.830442, + 33.631345 + ], + [ + -117.830461, + 33.630758 + ], + [ + -117.830514, + 33.630397 + ], + [ + -117.830616, + 33.630025 + ], + [ + -117.830825, + 33.629488 + ], + [ + -117.831124, + 33.629071 + ], + [ + -117.83016, + 33.6285 + ], + [ + -117.829651, + 33.628203 + ], + [ + -117.829159, + 33.627971 + ], + [ + -117.82837, + 33.627735 + ], + [ + -117.827638, + 33.627533 + ], + [ + -117.827544, + 33.627502 + ], + [ + -117.827455, + 33.628061 + ], + [ + -117.827149, + 33.628844 + ], + [ + -117.828361, + 33.629093 + ], + [ + -117.82827, + 33.629544 + ], + [ + -117.828285, + 33.630356 + ], + [ + -117.82844, + 33.630347 + ], + [ + -117.828531, + 33.631442 + ], + [ + -117.830442, + 33.631345 + ] + ] + ] + }, + "properties": { + "name": "Las Lomas Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 268843292, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.922877, + 33.805748 + ], + [ + -117.922889, + 33.805731 + ], + [ + -117.922893, + 33.80572 + ], + [ + -117.922852, + 33.805714 + ], + [ + -117.922843, + 33.805727 + ], + [ + -117.922837, + 33.805745 + ], + [ + -117.922835, + 33.805752 + ], + [ + -117.922837, + 33.805769 + ], + [ + -117.92285, + 33.805765 + ], + [ + -117.922859, + 33.805763 + ], + [ + -117.922848, + 33.805759 + ], + [ + -117.922862, + 33.805743 + ], + [ + -117.922877, + 33.805748 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 270656515, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.728217, + 33.885292 + ], + [ + -117.728281, + 33.885313 + ], + [ + -117.728281, + 33.885464 + ], + [ + -117.728326, + 33.885661 + ], + [ + -117.728367, + 33.885831 + ], + [ + -117.728435, + 33.886051 + ], + [ + -117.728597, + 33.886206 + ], + [ + -117.728834, + 33.886271 + ], + [ + -117.728704, + 33.886507 + ], + [ + -117.728403, + 33.886422 + ], + [ + -117.728436, + 33.886271 + ], + [ + -117.728248, + 33.886182 + ], + [ + -117.728178, + 33.886217 + ], + [ + -117.728033, + 33.886231 + ], + [ + -117.727884, + 33.886205 + ], + [ + -117.727777, + 33.886236 + ], + [ + -117.727663, + 33.886333 + ], + [ + -117.727466, + 33.886356 + ], + [ + -117.727272, + 33.886471 + ], + [ + -117.727116, + 33.886578 + ], + [ + -117.726944, + 33.886573 + ], + [ + -117.726747, + 33.886499 + ], + [ + -117.726645, + 33.886294 + ], + [ + -117.726672, + 33.886076 + ], + [ + -117.72695, + 33.88583 + ], + [ + -117.727223, + 33.885576 + ], + [ + -117.727272, + 33.885389 + ], + [ + -117.727278, + 33.885328 + ], + [ + -117.728044, + 33.885353 + ], + [ + -117.728217, + 33.885292 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 271977653, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.82649, + 33.89501 + ], + [ + -117.825317, + 33.894967 + ], + [ + -117.82492, + 33.894998 + ], + [ + -117.824694, + 33.895092 + ], + [ + -117.824507, + 33.895185 + ], + [ + -117.824341, + 33.895165 + ], + [ + -117.82434, + 33.893878 + ], + [ + -117.825563, + 33.893884 + ], + [ + -117.825552, + 33.893305 + ], + [ + -117.825797, + 33.893319 + ], + [ + -117.826072, + 33.893276 + ], + [ + -117.826314, + 33.893152 + ], + [ + -117.826491, + 33.892994 + ], + [ + -117.82649, + 33.89501 + ] + ] + ] + }, + "properties": { + "name": "Hurless Barton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 271978645, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818285, + 33.889293 + ], + [ + -117.817952, + 33.889355 + ], + [ + -117.817926, + 33.889348 + ], + [ + -117.81792, + 33.88933 + ], + [ + -117.817923, + 33.889272 + ], + [ + -117.81793, + 33.889162 + ], + [ + -117.818143, + 33.889088 + ], + [ + -117.818298, + 33.889092 + ], + [ + -117.818285, + 33.889293 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 272243052, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.977766, + 33.833479 + ], + [ + -117.977806, + 33.833445 + ], + [ + -117.977806, + 33.833158 + ], + [ + -117.9776, + 33.83316 + ], + [ + -117.977605, + 33.833461 + ], + [ + -117.977626, + 33.83349 + ], + [ + -117.977766, + 33.833479 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 272531602, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.835262, + 33.898374 + ], + [ + -117.835327, + 33.897679 + ], + [ + -117.834989, + 33.897466 + ], + [ + -117.834179, + 33.897466 + ], + [ + -117.834196, + 33.898328 + ], + [ + -117.835262, + 33.898374 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 274896180, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.915176, + 33.726119 + ], + [ + -117.914851, + 33.727301 + ], + [ + -117.907562, + 33.727354 + ], + [ + -117.907053, + 33.727325 + ], + [ + -117.906482, + 33.727251 + ], + [ + -117.906331, + 33.727214 + ], + [ + -117.90767, + 33.723557 + ], + [ + -117.907936, + 33.723323 + ], + [ + -117.908502, + 33.723325 + ], + [ + -117.908714, + 33.723288 + ], + [ + -117.909157, + 33.723289 + ], + [ + -117.909318, + 33.723289 + ], + [ + -117.909983, + 33.72329 + ], + [ + -117.910772, + 33.723291 + ], + [ + -117.911024, + 33.723291 + ], + [ + -117.912304, + 33.723293 + ], + [ + -117.91239, + 33.723311 + ], + [ + -117.912443, + 33.723341 + ], + [ + -117.912849, + 33.723345 + ], + [ + -117.912862, + 33.72292 + ], + [ + -117.916428, + 33.722977 + ], + [ + -117.915176, + 33.726119 + ] + ] + ] + }, + "properties": { + "name": "Centennial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 287911466, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.000957, + 33.843688 + ], + [ + -118.00085, + 33.84379 + ], + [ + -118.000821, + 33.84378 + ], + [ + -118.001174, + 33.84313 + ], + [ + -118.001161, + 33.843188 + ], + [ + -118.001127, + 33.843287 + ], + [ + -118.001116, + 33.843355 + ], + [ + -118.001117, + 33.843371 + ], + [ + -118.001122, + 33.843538 + ], + [ + -118.001036, + 33.843663 + ], + [ + -118.001019, + 33.843688 + ], + [ + -118.000996, + 33.843677 + ], + [ + -118.000982, + 33.843699 + ], + [ + -118.000957, + 33.843688 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 289833005, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.87244, + 33.906934 + ], + [ + -117.872373, + 33.906941 + ], + [ + -117.872153, + 33.906754 + ], + [ + -117.872143, + 33.906718 + ], + [ + -117.872242, + 33.906627 + ], + [ + -117.872304, + 33.906629 + ], + [ + -117.872521, + 33.906821 + ], + [ + -117.872521, + 33.906867 + ], + [ + -117.87244, + 33.906934 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 289833024, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.872017, + 33.907362 + ], + [ + -117.871982, + 33.907355 + ], + [ + -117.871939, + 33.90737 + ], + [ + -117.871882, + 33.907368 + ], + [ + -117.871872, + 33.907348 + ], + [ + -117.87185, + 33.907319 + ], + [ + -117.871861, + 33.907279 + ], + [ + -117.871912, + 33.907246 + ], + [ + -117.87196, + 33.907246 + ], + [ + -117.872009, + 33.907295 + ], + [ + -117.872014, + 33.907324 + ], + [ + -117.872017, + 33.907362 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 291267463, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.041231, + 33.826108 + ], + [ + -118.041064, + 33.82611 + ], + [ + -118.039207, + 33.826131 + ], + [ + -118.039204, + 33.825944 + ], + [ + -118.039133, + 33.825945 + ], + [ + -118.038448, + 33.825947 + ], + [ + -118.038443, + 33.825565 + ], + [ + -118.038427, + 33.824391 + ], + [ + -118.038938, + 33.824388 + ], + [ + -118.039089, + 33.824387 + ], + [ + -118.039682, + 33.824387 + ], + [ + -118.040505, + 33.824386 + ], + [ + -118.040665, + 33.824386 + ], + [ + -118.04092, + 33.824386 + ], + [ + -118.04113, + 33.824387 + ], + [ + -118.041165, + 33.824401 + ], + [ + -118.041188, + 33.824421 + ], + [ + -118.041211, + 33.824457 + ], + [ + -118.041226, + 33.825604 + ], + [ + -118.041224, + 33.825665 + ], + [ + -118.041229, + 33.825977 + ], + [ + -118.04123, + 33.826051 + ], + [ + -118.041231, + 33.826108 + ] + ] + ] + }, + "properties": { + "name": "Cypress Civic Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 291409792, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.044829, + 33.827363 + ], + [ + -118.044659, + 33.827362 + ], + [ + -118.044661, + 33.82712 + ], + [ + -118.04483, + 33.82712 + ], + [ + -118.044829, + 33.827363 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 291964034, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.994901, + 33.841751 + ], + [ + -117.994858, + 33.841764 + ], + [ + -117.994799, + 33.841769 + ], + [ + -117.994761, + 33.841784 + ], + [ + -117.994718, + 33.841778 + ], + [ + -117.994705, + 33.841749 + ], + [ + -117.99471, + 33.841717 + ], + [ + -117.99471, + 33.841695 + ], + [ + -117.994702, + 33.841655 + ], + [ + -117.994716, + 33.841622 + ], + [ + -117.994745, + 33.841613 + ], + [ + -117.994788, + 33.841626 + ], + [ + -117.994815, + 33.841653 + ], + [ + -117.994874, + 33.841666 + ], + [ + -117.994912, + 33.841691 + ], + [ + -117.99492, + 33.841715 + ], + [ + -117.994901, + 33.841751 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 292023267, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.008133, + 33.849279 + ], + [ + -118.007794, + 33.849283 + ], + [ + -118.007793, + 33.848982 + ], + [ + -118.007805, + 33.848982 + ], + [ + -118.008128, + 33.848979 + ], + [ + -118.008129, + 33.849009 + ], + [ + -118.008133, + 33.849279 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 292263671, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.926394, + 33.803166 + ], + [ + -117.926399, + 33.803177 + ], + [ + -117.926413, + 33.803185 + ], + [ + -117.926663, + 33.803181 + ], + [ + -117.926676, + 33.803175 + ], + [ + -117.926684, + 33.803162 + ], + [ + -117.926394, + 33.803166 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 292263677, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.924156, + 33.80225 + ], + [ + -117.924166, + 33.802681 + ], + [ + -117.924174, + 33.802708 + ], + [ + -117.924209, + 33.802708 + ], + [ + -117.924204, + 33.802274 + ], + [ + -117.924156, + 33.80225 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 292266210, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.015354, + 33.835566 + ], + [ + -118.013435, + 33.835577 + ], + [ + -118.013435, + 33.835557 + ], + [ + -118.013434, + 33.835458 + ], + [ + -118.013429, + 33.834904 + ], + [ + -118.013429, + 33.834874 + ], + [ + -118.013431, + 33.834659 + ], + [ + -118.015339, + 33.834635 + ], + [ + -118.015343, + 33.834869 + ], + [ + -118.015345, + 33.835042 + ], + [ + -118.015348, + 33.835189 + ], + [ + -118.015353, + 33.835545 + ], + [ + -118.015354, + 33.835566 + ] + ] + ] + }, + "properties": { + "name": "San Antonio Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 296987354, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.996348, + 33.841991 + ], + [ + -117.996318, + 33.841933 + ], + [ + -117.996281, + 33.841869 + ], + [ + -117.996243, + 33.841851 + ], + [ + -117.996222, + 33.841878 + ], + [ + -117.996232, + 33.842151 + ], + [ + -117.996375, + 33.842147 + ], + [ + -117.996348, + 33.841991 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 299905203, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.826, + 33.646895 + ], + [ + -117.825909, + 33.646775 + ], + [ + -117.825767, + 33.646849 + ], + [ + -117.825855, + 33.646965 + ], + [ + -117.826, + 33.646895 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 311365728, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.002269, + 33.84859 + ], + [ + -118.002272, + 33.848479 + ], + [ + -118.002273, + 33.84845 + ], + [ + -118.002272, + 33.848401 + ], + [ + -118.002269, + 33.84831 + ], + [ + -118.002268, + 33.84828 + ], + [ + -118.002249, + 33.847432 + ], + [ + -118.002247, + 33.847359 + ], + [ + -118.002235, + 33.846815 + ], + [ + -118.002189, + 33.846769 + ], + [ + -118.001285, + 33.846778 + ], + [ + -118.001199, + 33.846779 + ], + [ + -118.000406, + 33.846785 + ], + [ + -118.000375, + 33.846787 + ], + [ + -118.000215, + 33.846788 + ], + [ + -117.998958, + 33.846801 + ], + [ + -117.998958, + 33.84684 + ], + [ + -117.998957, + 33.846892 + ], + [ + -117.998969, + 33.847914 + ], + [ + -117.998969, + 33.847933 + ], + [ + -118.000198, + 33.84793 + ], + [ + -118.000206, + 33.848482 + ], + [ + -117.999295, + 33.84849 + ], + [ + -117.999303, + 33.848921 + ], + [ + -118.000229, + 33.848913 + ], + [ + -118.000227, + 33.848864 + ], + [ + -118.000219, + 33.848717 + ], + [ + -118.000385, + 33.848726 + ], + [ + -118.000393, + 33.848601 + ], + [ + -118.002269, + 33.84859 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 315446527, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.000112, + 33.846233 + ], + [ + -118.000087, + 33.846256 + ], + [ + -118.000051, + 33.846236 + ], + [ + -118.000078, + 33.846203 + ], + [ + -118.000051, + 33.846192 + ], + [ + -118.00003, + 33.846182 + ], + [ + -118.000017, + 33.84617 + ], + [ + -118.000001, + 33.846155 + ], + [ + -117.999992, + 33.84614 + ], + [ + -117.999983, + 33.846114 + ], + [ + -118.000011, + 33.846122 + ], + [ + -118.000039, + 33.846151 + ], + [ + -118.000052, + 33.846163 + ], + [ + -118.000073, + 33.846173 + ], + [ + -118.000092, + 33.846176 + ], + [ + -118.000117, + 33.846174 + ], + [ + -118.000143, + 33.846165 + ], + [ + -118.000167, + 33.846189 + ], + [ + -118.000145, + 33.846204 + ], + [ + -118.000112, + 33.846233 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 315741653, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.995401, + 33.841149 + ], + [ + -117.995372, + 33.841189 + ], + [ + -117.995316, + 33.841254 + ], + [ + -117.995273, + 33.841272 + ], + [ + -117.995283, + 33.841294 + ], + [ + -117.995313, + 33.84129 + ], + [ + -117.995356, + 33.841254 + ], + [ + -117.995431, + 33.841169 + ], + [ + -117.995401, + 33.841149 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 316774758, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.024991, + 33.836678 + ], + [ + -118.024992, + 33.836699 + ], + [ + -118.024995, + 33.836842 + ], + [ + -118.025916, + 33.83683 + ], + [ + -118.025928, + 33.836789 + ], + [ + -118.025927, + 33.836685 + ], + [ + -118.026267, + 33.836684 + ], + [ + -118.026266, + 33.83639 + ], + [ + -118.026238, + 33.835504 + ], + [ + -118.025262, + 33.835511 + ], + [ + -118.025267, + 33.835559 + ], + [ + -118.025286, + 33.835592 + ], + [ + -118.025316, + 33.835613 + ], + [ + -118.025342, + 33.835622 + ], + [ + -118.02535, + 33.835828 + ], + [ + -118.025143, + 33.835838 + ], + [ + -118.025131, + 33.835838 + ], + [ + -118.025055, + 33.835811 + ], + [ + -118.024052, + 33.835811 + ], + [ + -118.024052, + 33.836833 + ], + [ + -118.024135, + 33.836834 + ], + [ + -118.024216, + 33.83681 + ], + [ + -118.024263, + 33.836794 + ], + [ + -118.024379, + 33.836756 + ], + [ + -118.024605, + 33.836698 + ], + [ + -118.024704, + 33.836685 + ], + [ + -118.024758, + 33.83668 + ], + [ + -118.024991, + 33.836678 + ] + ] + ] + }, + "properties": { + "name": "San Marino Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 319964965, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.885286, + 33.691335 + ], + [ + -117.884768, + 33.691321 + ], + [ + -117.884773, + 33.691241 + ], + [ + -117.883298, + 33.691221 + ], + [ + -117.883086, + 33.691219 + ], + [ + -117.882968, + 33.691212 + ], + [ + -117.88292, + 33.691205 + ], + [ + -117.88289, + 33.691172 + ], + [ + -117.882879, + 33.691121 + ], + [ + -117.882103, + 33.691122 + ], + [ + -117.882101, + 33.691266 + ], + [ + -117.88273, + 33.691272 + ], + [ + -117.882715, + 33.691445 + ], + [ + -117.88325, + 33.691395 + ], + [ + -117.883268, + 33.691459 + ], + [ + -117.883337, + 33.691561 + ], + [ + -117.88338, + 33.691655 + ], + [ + -117.883403, + 33.691756 + ], + [ + -117.883413, + 33.69185 + ], + [ + -117.883399, + 33.691959 + ], + [ + -117.883364, + 33.692037 + ], + [ + -117.883324, + 33.692113 + ], + [ + -117.883274, + 33.692181 + ], + [ + -117.883243, + 33.69222 + ], + [ + -117.88322, + 33.692214 + ], + [ + -117.883199, + 33.692239 + ], + [ + -117.883116, + 33.692241 + ], + [ + -117.883108, + 33.692285 + ], + [ + -117.883097, + 33.692319 + ], + [ + -117.883054, + 33.692359 + ], + [ + -117.88301, + 33.692384 + ], + [ + -117.882959, + 33.692402 + ], + [ + -117.882919, + 33.692404 + ], + [ + -117.882844, + 33.692414 + ], + [ + -117.882852, + 33.69245 + ], + [ + -117.883295, + 33.692439 + ], + [ + -117.883295, + 33.692402 + ], + [ + -117.883303, + 33.692332 + ], + [ + -117.883312, + 33.692274 + ], + [ + -117.883333, + 33.692234 + ], + [ + -117.883392, + 33.692194 + ], + [ + -117.883491, + 33.692181 + ], + [ + -117.883668, + 33.692176 + ], + [ + -117.883668, + 33.691685 + ], + [ + -117.884671, + 33.691692 + ], + [ + -117.884664, + 33.691835 + ], + [ + -117.885042, + 33.691844 + ], + [ + -117.885079, + 33.691875 + ], + [ + -117.88507, + 33.692214 + ], + [ + -117.885031, + 33.692248 + ], + [ + -117.884929, + 33.692256 + ], + [ + -117.88493, + 33.692454 + ], + [ + -117.885251, + 33.692453 + ], + [ + -117.885286, + 33.691335 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 320234338, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.651421, + 33.67954 + ], + [ + -117.65125, + 33.679566 + ], + [ + -117.651179, + 33.679248 + ], + [ + -117.65135, + 33.679222 + ], + [ + -117.651421, + 33.67954 + ] + ] + ] + }, + "properties": { + "name": "tennis", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330547773, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.657872, + 33.682722 + ], + [ + -117.657731, + 33.682591 + ], + [ + -117.657709, + 33.682556 + ], + [ + -117.657689, + 33.682513 + ], + [ + -117.657673, + 33.682394 + ], + [ + -117.657523, + 33.681368 + ], + [ + -117.65747, + 33.681321 + ], + [ + -117.657427, + 33.681306 + ], + [ + -117.657223, + 33.681272 + ], + [ + -117.656786, + 33.681216 + ], + [ + -117.656415, + 33.681177 + ], + [ + -117.656371, + 33.681183 + ], + [ + -117.656264, + 33.681189 + ], + [ + -117.656118, + 33.681195 + ], + [ + -117.655977, + 33.681184 + ], + [ + -117.655864, + 33.681164 + ], + [ + -117.655649, + 33.681099 + ], + [ + -117.655619, + 33.681103 + ], + [ + -117.655398, + 33.68168 + ], + [ + -117.655897, + 33.681849 + ], + [ + -117.656158, + 33.68175 + ], + [ + -117.656357, + 33.681721 + ], + [ + -117.656927, + 33.681827 + ], + [ + -117.657028, + 33.682033 + ], + [ + -117.657099, + 33.682489 + ], + [ + -117.657178, + 33.682761 + ], + [ + -117.657307, + 33.68293 + ], + [ + -117.656595, + 33.68325 + ], + [ + -117.65629, + 33.683423 + ], + [ + -117.656255, + 33.683386 + ], + [ + -117.656547, + 33.683224 + ], + [ + -117.657059, + 33.683004 + ], + [ + -117.65679, + 33.681927 + ], + [ + -117.656317, + 33.681842 + ], + [ + -117.656038, + 33.681916 + ], + [ + -117.655844, + 33.681938 + ], + [ + -117.655287, + 33.681796 + ], + [ + -117.655207, + 33.682006 + ], + [ + -117.655053, + 33.682265 + ], + [ + -117.654955, + 33.682362 + ], + [ + -117.654866, + 33.682427 + ], + [ + -117.654763, + 33.68247 + ], + [ + -117.654258, + 33.682563 + ], + [ + -117.654163, + 33.682603 + ], + [ + -117.653891, + 33.682882 + ], + [ + -117.653875, + 33.682918 + ], + [ + -117.65419, + 33.683122 + ], + [ + -117.654378, + 33.68324 + ], + [ + -117.654698, + 33.683586 + ], + [ + -117.654806, + 33.683698 + ], + [ + -117.654851, + 33.683765 + ], + [ + -117.654888, + 33.683802 + ], + [ + -117.654946, + 33.683828 + ], + [ + -117.655021, + 33.683851 + ], + [ + -117.655741, + 33.684131 + ], + [ + -117.65579, + 33.684175 + ], + [ + -117.65579, + 33.684235 + ], + [ + -117.6557, + 33.684229 + ], + [ + -117.654851, + 33.683865 + ], + [ + -117.654768, + 33.683871 + ], + [ + -117.654701, + 33.683817 + ], + [ + -117.654577, + 33.683653 + ], + [ + -117.65429, + 33.683301 + ], + [ + -117.653806, + 33.682992 + ], + [ + -117.653757, + 33.683017 + ], + [ + -117.653696, + 33.683053 + ], + [ + -117.653526, + 33.683271 + ], + [ + -117.653274, + 33.683645 + ], + [ + -117.653229, + 33.683673 + ], + [ + -117.653176, + 33.683724 + ], + [ + -117.653093, + 33.683738 + ], + [ + -117.652185, + 33.683735 + ], + [ + -117.65202, + 33.683746 + ], + [ + -117.651927, + 33.683724 + ], + [ + -117.651754, + 33.683686 + ], + [ + -117.651557, + 33.683686 + ], + [ + -117.651407, + 33.683673 + ], + [ + -117.651121, + 33.683663 + ], + [ + -117.651093, + 33.683584 + ], + [ + -117.650909, + 33.683157 + ], + [ + -117.650838, + 33.683023 + ], + [ + -117.650802, + 33.68293 + ], + [ + -117.650722, + 33.682675 + ], + [ + -117.650739, + 33.682628 + ], + [ + -117.650789, + 33.682607 + ], + [ + -117.650909, + 33.682596 + ], + [ + -117.650896, + 33.682922 + ], + [ + -117.651205, + 33.683442 + ], + [ + -117.651438, + 33.683465 + ], + [ + -117.651839, + 33.683471 + ], + [ + -117.652064, + 33.683516 + ], + [ + -117.652324, + 33.683519 + ], + [ + -117.652721, + 33.683505 + ], + [ + -117.653095, + 33.683491 + ], + [ + -117.653175, + 33.683424 + ], + [ + -117.653549, + 33.682919 + ], + [ + -117.653616, + 33.682859 + ], + [ + -117.653721, + 33.6828 + ], + [ + -117.653798, + 33.682807 + ], + [ + -117.653983, + 33.68261 + ], + [ + -117.653991, + 33.682586 + ], + [ + -117.653957, + 33.682552 + ], + [ + -117.653845, + 33.682509 + ], + [ + -117.651294, + 33.681225 + ], + [ + -117.65141, + 33.681172 + ], + [ + -117.651413, + 33.681193 + ], + [ + -117.651462, + 33.681244 + ], + [ + -117.653882, + 33.682441 + ], + [ + -117.654806, + 33.682305 + ], + [ + -117.654927, + 33.682227 + ], + [ + -117.65502, + 33.682108 + ], + [ + -117.655217, + 33.681618 + ], + [ + -117.655254, + 33.681594 + ], + [ + -117.655327, + 33.68158 + ], + [ + -117.655406, + 33.681522 + ], + [ + -117.655474, + 33.681276 + ], + [ + -117.655496, + 33.681184 + ], + [ + -117.655544, + 33.681066 + ], + [ + -117.655598, + 33.680997 + ], + [ + -117.655614, + 33.680965 + ], + [ + -117.655692, + 33.68101 + ], + [ + -117.655764, + 33.681036 + ], + [ + -117.655907, + 33.681071 + ], + [ + -117.656015, + 33.681093 + ], + [ + -117.656059, + 33.681106 + ], + [ + -117.656158, + 33.681102 + ], + [ + -117.656298, + 33.681075 + ], + [ + -117.656412, + 33.681084 + ], + [ + -117.656477, + 33.681056 + ], + [ + -117.657177, + 33.681144 + ], + [ + -117.657449, + 33.681193 + ], + [ + -117.657555, + 33.681222 + ], + [ + -117.657597, + 33.681255 + ], + [ + -117.657652, + 33.681308 + ], + [ + -117.65768, + 33.681379 + ], + [ + -117.657817, + 33.682076 + ], + [ + -117.657806, + 33.682093 + ], + [ + -117.657814, + 33.682217 + ], + [ + -117.657792, + 33.682227 + ], + [ + -117.65777, + 33.682392 + ], + [ + -117.657748, + 33.682496 + ], + [ + -117.657765, + 33.682548 + ], + [ + -117.657815, + 33.682572 + ], + [ + -117.657933, + 33.682601 + ], + [ + -117.657909, + 33.682655 + ], + [ + -117.657872, + 33.682722 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330592384, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.719562, + 33.87589 + ], + [ + -117.719508, + 33.87569 + ], + [ + -117.719278, + 33.875571 + ], + [ + -117.719194, + 33.875416 + ], + [ + -117.719101, + 33.875467 + ], + [ + -117.719036, + 33.875511 + ], + [ + -117.718992, + 33.875547 + ], + [ + -117.718929, + 33.875606 + ], + [ + -117.71888, + 33.875668 + ], + [ + -117.718834, + 33.875731 + ], + [ + -117.718803, + 33.875791 + ], + [ + -117.718915, + 33.875823 + ], + [ + -117.719116, + 33.875893 + ], + [ + -117.71942, + 33.87599 + ], + [ + -117.719437, + 33.875963 + ], + [ + -117.719446, + 33.87595 + ], + [ + -117.719461, + 33.875934 + ], + [ + -117.719482, + 33.87592 + ], + [ + -117.719508, + 33.875906 + ], + [ + -117.719533, + 33.875894 + ], + [ + -117.719562, + 33.87589 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330593255, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.714285, + 33.88028 + ], + [ + -117.715286, + 33.880767 + ], + [ + -117.715379, + 33.880876 + ], + [ + -117.715346, + 33.880987 + ], + [ + -117.715252, + 33.881014 + ], + [ + -117.714968, + 33.881149 + ], + [ + -117.714755, + 33.88127 + ], + [ + -117.714684, + 33.881336 + ], + [ + -117.714639, + 33.881358 + ], + [ + -117.714573, + 33.881367 + ], + [ + -117.714498, + 33.881346 + ], + [ + -117.714475, + 33.881326 + ], + [ + -117.714404, + 33.881188 + ], + [ + -117.714333, + 33.881153 + ], + [ + -117.714307, + 33.881152 + ], + [ + -117.714283, + 33.88115 + ], + [ + -117.714256, + 33.881237 + ], + [ + -117.714218, + 33.88127 + ], + [ + -117.714111, + 33.881321 + ], + [ + -117.713839, + 33.881338 + ], + [ + -117.713775, + 33.881371 + ], + [ + -117.713678, + 33.881411 + ], + [ + -117.713639, + 33.881394 + ], + [ + -117.713604, + 33.881346 + ], + [ + -117.71356, + 33.881212 + ], + [ + -117.713499, + 33.881197 + ], + [ + -117.713457, + 33.881159 + ], + [ + -117.71341, + 33.881105 + ], + [ + -117.713381, + 33.881063 + ], + [ + -117.713359, + 33.880995 + ], + [ + -117.713418, + 33.880859 + ], + [ + -117.713388, + 33.880824 + ], + [ + -117.713367, + 33.880792 + ], + [ + -117.713358, + 33.880758 + ], + [ + -117.713449, + 33.880737 + ], + [ + -117.713485, + 33.880724 + ], + [ + -117.713563, + 33.880747 + ], + [ + -117.713609, + 33.88076 + ], + [ + -117.713647, + 33.880762 + ], + [ + -117.713706, + 33.880751 + ], + [ + -117.713758, + 33.880734 + ], + [ + -117.713819, + 33.88069 + ], + [ + -117.713915, + 33.880617 + ], + [ + -117.714285, + 33.88028 + ] + ] + ] + }, + "properties": { + "name": "Bryant Ranch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330697518, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.653944, + 33.686877 + ], + [ + -117.654066, + 33.68666 + ], + [ + -117.654106, + 33.686566 + ], + [ + -117.654103, + 33.68653 + ], + [ + -117.653514, + 33.686352 + ], + [ + -117.653046, + 33.686197 + ], + [ + -117.652981, + 33.686191 + ], + [ + -117.652323, + 33.68638 + ], + [ + -117.652196, + 33.686402 + ], + [ + -117.65204, + 33.686378 + ], + [ + -117.651972, + 33.686303 + ], + [ + -117.651906, + 33.686223 + ], + [ + -117.651724, + 33.686015 + ], + [ + -117.65162, + 33.685857 + ], + [ + -117.651586, + 33.685733 + ], + [ + -117.651591, + 33.685568 + ], + [ + -117.65165, + 33.685438 + ], + [ + -117.65172, + 33.685302 + ], + [ + -117.651812, + 33.685131 + ], + [ + -117.65159, + 33.684951 + ], + [ + -117.651564, + 33.684976 + ], + [ + -117.651761, + 33.685124 + ], + [ + -117.651694, + 33.685252 + ], + [ + -117.651601, + 33.68543 + ], + [ + -117.651528, + 33.685625 + ], + [ + -117.6515, + 33.685733 + ], + [ + -117.651531, + 33.685895 + ], + [ + -117.651668, + 33.686143 + ], + [ + -117.651836, + 33.686388 + ], + [ + -117.651932, + 33.686504 + ], + [ + -117.651972, + 33.686526 + ], + [ + -117.652032, + 33.686554 + ], + [ + -117.652108, + 33.686574 + ], + [ + -117.652148, + 33.686575 + ], + [ + -117.652225, + 33.68657 + ], + [ + -117.652315, + 33.686546 + ], + [ + -117.652622, + 33.686438 + ], + [ + -117.652873, + 33.686351 + ], + [ + -117.652933, + 33.686325 + ], + [ + -117.653013, + 33.686337 + ], + [ + -117.653166, + 33.686388 + ], + [ + -117.653436, + 33.686486 + ], + [ + -117.653805, + 33.686559 + ], + [ + -117.653936, + 33.686603 + ], + [ + -117.653973, + 33.68662 + ], + [ + -117.653972, + 33.686694 + ], + [ + -117.653884, + 33.686868 + ], + [ + -117.653912, + 33.68689 + ], + [ + -117.653944, + 33.686877 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330697519, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.653521, + 33.687285 + ], + [ + -117.653592, + 33.687317 + ], + [ + -117.653641, + 33.687245 + ], + [ + -117.653501, + 33.687177 + ], + [ + -117.653367, + 33.687121 + ], + [ + -117.653227, + 33.687091 + ], + [ + -117.652947, + 33.687121 + ], + [ + -117.652542, + 33.686954 + ], + [ + -117.652431, + 33.686924 + ], + [ + -117.652344, + 33.686945 + ], + [ + -117.6523, + 33.686963 + ], + [ + -117.652002, + 33.686976 + ], + [ + -117.651896, + 33.687 + ], + [ + -117.651563, + 33.687139 + ], + [ + -117.651521, + 33.68713 + ], + [ + -117.651491, + 33.687089 + ], + [ + -117.651326, + 33.686834 + ], + [ + -117.651052, + 33.686436 + ], + [ + -117.650954, + 33.686319 + ], + [ + -117.650925, + 33.686262 + ], + [ + -117.650882, + 33.686124 + ], + [ + -117.650834, + 33.686002 + ], + [ + -117.650783, + 33.685783 + ], + [ + -117.650777, + 33.685598 + ], + [ + -117.650782, + 33.685471 + ], + [ + -117.650801, + 33.685341 + ], + [ + -117.650897, + 33.685099 + ], + [ + -117.65092, + 33.685084 + ], + [ + -117.65114, + 33.684546 + ], + [ + -117.651326, + 33.684606 + ], + [ + -117.651535, + 33.684725 + ], + [ + -117.651562, + 33.684688 + ], + [ + -117.651382, + 33.684558 + ], + [ + -117.651227, + 33.684506 + ], + [ + -117.651178, + 33.684491 + ], + [ + -117.651125, + 33.684491 + ], + [ + -117.651095, + 33.684508 + ], + [ + -117.650972, + 33.684832 + ], + [ + -117.650771, + 33.685219 + ], + [ + -117.650714, + 33.685506 + ], + [ + -117.650714, + 33.685654 + ], + [ + -117.650744, + 33.685815 + ], + [ + -117.650843, + 33.686174 + ], + [ + -117.65093, + 33.686398 + ], + [ + -117.651471, + 33.687317 + ], + [ + -117.651598, + 33.687263 + ], + [ + -117.651951, + 33.687109 + ], + [ + -117.652026, + 33.687094 + ], + [ + -117.652246, + 33.687074 + ], + [ + -117.652429, + 33.687055 + ], + [ + -117.652806, + 33.687219 + ], + [ + -117.652886, + 33.687245 + ], + [ + -117.652957, + 33.68725 + ], + [ + -117.653119, + 33.687219 + ], + [ + -117.653201, + 33.68716 + ], + [ + -117.653521, + 33.687285 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330724945, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.654189, + 33.681768 + ], + [ + -117.654073, + 33.681787 + ], + [ + -117.654022, + 33.68157 + ], + [ + -117.654138, + 33.681551 + ], + [ + -117.654189, + 33.681768 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330729463, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.650957, + 33.675698 + ], + [ + -117.650925, + 33.67568 + ], + [ + -117.651008, + 33.675569 + ], + [ + -117.651133, + 33.675448 + ], + [ + -117.651212, + 33.675395 + ], + [ + -117.651319, + 33.675334 + ], + [ + -117.65149, + 33.675262 + ], + [ + -117.651644, + 33.675224 + ], + [ + -117.651737, + 33.675185 + ], + [ + -117.651891, + 33.675143 + ], + [ + -117.6521, + 33.675078 + ], + [ + -117.652166, + 33.675061 + ], + [ + -117.652199, + 33.675079 + ], + [ + -117.65182, + 33.675207 + ], + [ + -117.651987, + 33.675558 + ], + [ + -117.652113, + 33.675891 + ], + [ + -117.652179, + 33.676153 + ], + [ + -117.652221, + 33.676197 + ], + [ + -117.652372, + 33.676553 + ], + [ + -117.652527, + 33.676695 + ], + [ + -117.652578, + 33.676676 + ], + [ + -117.652966, + 33.677081 + ], + [ + -117.653658, + 33.676867 + ], + [ + -117.653758, + 33.67686 + ], + [ + -117.653893, + 33.67699 + ], + [ + -117.654011, + 33.677072 + ], + [ + -117.654164, + 33.677223 + ], + [ + -117.654248, + 33.677258 + ], + [ + -117.654317, + 33.677266 + ], + [ + -117.654416, + 33.677247 + ], + [ + -117.654493, + 33.677221 + ], + [ + -117.654544, + 33.6772 + ], + [ + -117.6553, + 33.677653 + ], + [ + -117.655854, + 33.676861 + ], + [ + -117.655863, + 33.676844 + ], + [ + -117.655114, + 33.676415 + ], + [ + -117.655143, + 33.676387 + ], + [ + -117.655843, + 33.676776 + ], + [ + -117.655875, + 33.676783 + ], + [ + -117.655916, + 33.676753 + ], + [ + -117.656216, + 33.67623 + ], + [ + -117.656291, + 33.676144 + ], + [ + -117.656678, + 33.675702 + ], + [ + -117.656754, + 33.675613 + ], + [ + -117.656761, + 33.67555 + ], + [ + -117.656676, + 33.675389 + ], + [ + -117.656661, + 33.675298 + ], + [ + -117.656725, + 33.67506 + ], + [ + -117.655494, + 33.673876 + ], + [ + -117.655403, + 33.673853 + ], + [ + -117.655344, + 33.67388 + ], + [ + -117.654766, + 33.674287 + ], + [ + -117.654696, + 33.674257 + ], + [ + -117.655334, + 33.673728 + ], + [ + -117.655473, + 33.673722 + ], + [ + -117.655517, + 33.673741 + ], + [ + -117.656976, + 33.675018 + ], + [ + -117.657175, + 33.675189 + ], + [ + -117.657081, + 33.675269 + ], + [ + -117.657053, + 33.675316 + ], + [ + -117.657045, + 33.67537 + ], + [ + -117.657074, + 33.675415 + ], + [ + -117.657169, + 33.675488 + ], + [ + -117.656739, + 33.675865 + ], + [ + -117.656489, + 33.676118 + ], + [ + -117.656143, + 33.676519 + ], + [ + -117.655333, + 33.67767 + ], + [ + -117.654885, + 33.678351 + ], + [ + -117.654705, + 33.678707 + ], + [ + -117.654595, + 33.67876 + ], + [ + -117.654573, + 33.678741 + ], + [ + -117.654544, + 33.678696 + ], + [ + -117.654623, + 33.678669 + ], + [ + -117.654659, + 33.678636 + ], + [ + -117.654744, + 33.67845 + ], + [ + -117.654871, + 33.678034 + ], + [ + -117.654885, + 33.677907 + ], + [ + -117.654876, + 33.677843 + ], + [ + -117.654837, + 33.677788 + ], + [ + -117.654475, + 33.677559 + ], + [ + -117.654416, + 33.677535 + ], + [ + -117.654225, + 33.677539 + ], + [ + -117.654086, + 33.677515 + ], + [ + -117.653981, + 33.677473 + ], + [ + -117.653921, + 33.677436 + ], + [ + -117.653596, + 33.677097 + ], + [ + -117.652962, + 33.677277 + ], + [ + -117.652891, + 33.677284 + ], + [ + -117.652248, + 33.67673 + ], + [ + -117.651976, + 33.676085 + ], + [ + -117.651853, + 33.675623 + ], + [ + -117.651695, + 33.675302 + ], + [ + -117.651669, + 33.675283 + ], + [ + -117.651404, + 33.675348 + ], + [ + -117.651207, + 33.67544 + ], + [ + -117.650957, + 33.675698 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330730008, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.658477, + 33.681989 + ], + [ + -117.658454, + 33.681984 + ], + [ + -117.658288, + 33.681245 + ], + [ + -117.658241, + 33.681047 + ], + [ + -117.658161, + 33.680823 + ], + [ + -117.658101, + 33.680743 + ], + [ + -117.657977, + 33.680697 + ], + [ + -117.657763, + 33.680669 + ], + [ + -117.655793, + 33.680401 + ], + [ + -117.655745, + 33.680426 + ], + [ + -117.653985, + 33.680153 + ], + [ + -117.653808, + 33.680126 + ], + [ + -117.653846, + 33.680102 + ], + [ + -117.654461, + 33.680166 + ], + [ + -117.654953, + 33.680214 + ], + [ + -117.655228, + 33.680266 + ], + [ + -117.655622, + 33.680284 + ], + [ + -117.655791, + 33.680327 + ], + [ + -117.656579, + 33.680432 + ], + [ + -117.656734, + 33.680431 + ], + [ + -117.656929, + 33.680418 + ], + [ + -117.65702, + 33.680424 + ], + [ + -117.657104, + 33.680444 + ], + [ + -117.657258, + 33.680478 + ], + [ + -117.657423, + 33.680492 + ], + [ + -117.65814, + 33.680525 + ], + [ + -117.658224, + 33.680596 + ], + [ + -117.658271, + 33.680688 + ], + [ + -117.658366, + 33.680715 + ], + [ + -117.658408, + 33.68137 + ], + [ + -117.658477, + 33.681989 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330730373, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.650864, + 33.679057 + ], + [ + -117.650717, + 33.679076 + ], + [ + -117.650672, + 33.678837 + ], + [ + -117.650821, + 33.678818 + ], + [ + -117.650864, + 33.679057 + ] + ] + ] + }, + "properties": { + "name": "basketball", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330730376, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.651725, + 33.679656 + ], + [ + -117.651705, + 33.679557 + ], + [ + -117.651533, + 33.679578 + ], + [ + -117.651506, + 33.679436 + ], + [ + -117.651513, + 33.679399 + ], + [ + -117.651527, + 33.679377 + ], + [ + -117.651545, + 33.679358 + ], + [ + -117.651568, + 33.679344 + ], + [ + -117.651606, + 33.679335 + ], + [ + -117.65165, + 33.679337 + ], + [ + -117.65168, + 33.679346 + ], + [ + -117.651706, + 33.679363 + ], + [ + -117.651723, + 33.679381 + ], + [ + -117.651737, + 33.679405 + ], + [ + -117.651759, + 33.679511 + ], + [ + -117.65181, + 33.679509 + ], + [ + -117.651837, + 33.679515 + ], + [ + -117.651856, + 33.679531 + ], + [ + -117.651872, + 33.67955 + ], + [ + -117.651872, + 33.679576 + ], + [ + -117.651869, + 33.679601 + ], + [ + -117.651861, + 33.679616 + ], + [ + -117.65183, + 33.679633 + ], + [ + -117.651808, + 33.679642 + ], + [ + -117.651725, + 33.679656 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330731962, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.649774, + 33.678202 + ], + [ + -117.650042, + 33.678161 + ], + [ + -117.650082, + 33.678157 + ], + [ + -117.650118, + 33.678143 + ], + [ + -117.650143, + 33.678124 + ], + [ + -117.650154, + 33.678099 + ], + [ + -117.65016, + 33.678072 + ], + [ + -117.65015, + 33.678045 + ], + [ + -117.650067, + 33.677811 + ], + [ + -117.650006, + 33.677817 + ], + [ + -117.649946, + 33.677813 + ], + [ + -117.649893, + 33.677811 + ], + [ + -117.649842, + 33.677824 + ], + [ + -117.649789, + 33.677856 + ], + [ + -117.649743, + 33.677888 + ], + [ + -117.649707, + 33.677934 + ], + [ + -117.649686, + 33.677991 + ], + [ + -117.649686, + 33.678033 + ], + [ + -117.649707, + 33.678084 + ], + [ + -117.649741, + 33.678112 + ], + [ + -117.64976, + 33.678152 + ], + [ + -117.649774, + 33.678202 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330836755, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.655592, + 33.677903 + ], + [ + -117.655627, + 33.678001 + ], + [ + -117.655529, + 33.677949 + ], + [ + -117.655505, + 33.677879 + ], + [ + -117.655802, + 33.677459 + ], + [ + -117.656238, + 33.676872 + ], + [ + -117.656461, + 33.676599 + ], + [ + -117.656565, + 33.676585 + ], + [ + -117.656871, + 33.67678 + ], + [ + -117.657275, + 33.677106 + ], + [ + -117.657762, + 33.677525 + ], + [ + -117.65829, + 33.677916 + ], + [ + -117.658533, + 33.678079 + ], + [ + -117.658674, + 33.6782 + ], + [ + -117.658827, + 33.678404 + ], + [ + -117.658895, + 33.678519 + ], + [ + -117.658941, + 33.678623 + ], + [ + -117.658972, + 33.67874 + ], + [ + -117.658966, + 33.678797 + ], + [ + -117.658913, + 33.678856 + ], + [ + -117.658532, + 33.67896 + ], + [ + -117.658432, + 33.678979 + ], + [ + -117.658317, + 33.678985 + ], + [ + -117.658108, + 33.678995 + ], + [ + -117.657893, + 33.678976 + ], + [ + -117.657686, + 33.67893 + ], + [ + -117.6575, + 33.678864 + ], + [ + -117.657236, + 33.678751 + ], + [ + -117.657321, + 33.678726 + ], + [ + -117.657627, + 33.678856 + ], + [ + -117.657818, + 33.678878 + ], + [ + -117.658065, + 33.678892 + ], + [ + -117.658271, + 33.678899 + ], + [ + -117.658432, + 33.67887 + ], + [ + -117.658737, + 33.678781 + ], + [ + -117.658765, + 33.678742 + ], + [ + -117.658679, + 33.678534 + ], + [ + -117.658353, + 33.678222 + ], + [ + -117.65792, + 33.677919 + ], + [ + -117.657809, + 33.677883 + ], + [ + -117.65652, + 33.676878 + ], + [ + -117.655901, + 33.677461 + ], + [ + -117.655592, + 33.677903 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330837013, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.654237, + 33.679896 + ], + [ + -117.654289, + 33.679925 + ], + [ + -117.654381, + 33.679866 + ], + [ + -117.654582, + 33.679056 + ], + [ + -117.654502, + 33.678929 + ], + [ + -117.653782, + 33.678716 + ], + [ + -117.653601, + 33.678661 + ], + [ + -117.653409, + 33.678625 + ], + [ + -117.653289, + 33.678609 + ], + [ + -117.652666, + 33.678587 + ], + [ + -117.652466, + 33.678577 + ], + [ + -117.652152, + 33.678565 + ], + [ + -117.652099, + 33.678561 + ], + [ + -117.651889, + 33.678541 + ], + [ + -117.651797, + 33.67852 + ], + [ + -117.651684, + 33.678495 + ], + [ + -117.651584, + 33.67846 + ], + [ + -117.651573, + 33.678455 + ], + [ + -117.65139, + 33.678379 + ], + [ + -117.651252, + 33.678309 + ], + [ + -117.651094, + 33.678221 + ], + [ + -117.650959, + 33.678124 + ], + [ + -117.650944, + 33.678108 + ], + [ + -117.650835, + 33.677987 + ], + [ + -117.65077, + 33.677917 + ], + [ + -117.65071, + 33.677819 + ], + [ + -117.650662, + 33.677718 + ], + [ + -117.65059, + 33.677589 + ], + [ + -117.650495, + 33.677347 + ], + [ + -117.650436, + 33.67714 + ], + [ + -117.650418, + 33.677052 + ], + [ + -117.650179, + 33.676899 + ], + [ + -117.649859, + 33.676883 + ], + [ + -117.649291, + 33.676861 + ], + [ + -117.64886, + 33.676726 + ], + [ + -117.648646, + 33.676835 + ], + [ + -117.648793, + 33.677191 + ], + [ + -117.649045, + 33.677219 + ], + [ + -117.64914, + 33.677202 + ], + [ + -117.64999, + 33.677211 + ], + [ + -117.650065, + 33.67748 + ], + [ + -117.650201, + 33.677765 + ], + [ + -117.650451, + 33.678114 + ], + [ + -117.650655, + 33.678303 + ], + [ + -117.650923, + 33.678459 + ], + [ + -117.651225, + 33.678616 + ], + [ + -117.6516, + 33.678751 + ], + [ + -117.65179, + 33.67879 + ], + [ + -117.651997, + 33.678818 + ], + [ + -117.652348, + 33.678839 + ], + [ + -117.652401, + 33.678843 + ], + [ + -117.652449, + 33.678854 + ], + [ + -117.652492, + 33.678868 + ], + [ + -117.652993, + 33.678809 + ], + [ + -117.653411, + 33.678817 + ], + [ + -117.653753, + 33.678903 + ], + [ + -117.65391, + 33.678991 + ], + [ + -117.654323, + 33.679114 + ], + [ + -117.654356, + 33.679227 + ], + [ + -117.654323, + 33.679555 + ], + [ + -117.654289, + 33.679852 + ], + [ + -117.654237, + 33.679896 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330845296, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.999066, + 33.662595 + ], + [ + -117.999024, + 33.662585 + ], + [ + -117.998983, + 33.662558 + ], + [ + -117.998976, + 33.662515 + ], + [ + -117.998976, + 33.662429 + ], + [ + -117.999026, + 33.661728 + ], + [ + -117.999059, + 33.661687 + ], + [ + -117.999101, + 33.661656 + ], + [ + -117.999176, + 33.661656 + ], + [ + -117.999468, + 33.661722 + ], + [ + -117.999637, + 33.66173 + ], + [ + -117.999748, + 33.661726 + ], + [ + -117.999797, + 33.66174 + ], + [ + -117.99982, + 33.661781 + ], + [ + -117.999818, + 33.661842 + ], + [ + -117.99911, + 33.662581 + ], + [ + -117.999066, + 33.662595 + ] + ] + ] + }, + "properties": { + "name": "Triangle Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 330869023, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.674106, + 33.688714 + ], + [ + -117.674087, + 33.688696 + ], + [ + -117.674079, + 33.688673 + ], + [ + -117.674084, + 33.688649 + ], + [ + -117.674101, + 33.688629 + ], + [ + -117.674126, + 33.688618 + ], + [ + -117.674155, + 33.688616 + ], + [ + -117.674182, + 33.688626 + ], + [ + -117.674201, + 33.688644 + ], + [ + -117.674209, + 33.688667 + ], + [ + -117.674204, + 33.68869 + ], + [ + -117.674187, + 33.68871 + ], + [ + -117.674162, + 33.688722 + ], + [ + -117.674133, + 33.688723 + ], + [ + -117.674106, + 33.688714 + ] + ] + ] + }, + "properties": { + "name": "tot lot", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 332625351, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.927335, + 33.809963 + ], + [ + -117.927335, + 33.8097 + ], + [ + -117.927329, + 33.809694 + ], + [ + -117.927318, + 33.809697 + ], + [ + -117.927316, + 33.809705 + ], + [ + -117.927318, + 33.809963 + ], + [ + -117.927318, + 33.809998 + ], + [ + -117.927329, + 33.810014 + ], + [ + -117.927336, + 33.810025 + ], + [ + -117.92735, + 33.810023 + ], + [ + -117.927362, + 33.810021 + ], + [ + -117.927374, + 33.810014 + ], + [ + -117.927382, + 33.81 + ], + [ + -117.927383, + 33.80996 + ], + [ + -117.927335, + 33.809963 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 333025978, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921947, + 33.811538 + ], + [ + -117.921921, + 33.81155 + ], + [ + -117.921906, + 33.81156 + ], + [ + -117.921891, + 33.811572 + ], + [ + -117.921881, + 33.811584 + ], + [ + -117.921869, + 33.811604 + ], + [ + -117.921865, + 33.81161 + ], + [ + -117.921864, + 33.811616 + ], + [ + -117.92185, + 33.811613 + ], + [ + -117.92184, + 33.811609 + ], + [ + -117.921828, + 33.811602 + ], + [ + -117.921811, + 33.811623 + ], + [ + -117.921772, + 33.811643 + ], + [ + -117.921725, + 33.811599 + ], + [ + -117.921702, + 33.811577 + ], + [ + -117.921671, + 33.811548 + ], + [ + -117.921625, + 33.811508 + ], + [ + -117.921618, + 33.81149 + ], + [ + -117.921612, + 33.811473 + ], + [ + -117.921607, + 33.811455 + ], + [ + -117.921598, + 33.811435 + ], + [ + -117.921587, + 33.811409 + ], + [ + -117.921653, + 33.811386 + ], + [ + -117.92168, + 33.811377 + ], + [ + -117.921736, + 33.811351 + ], + [ + -117.921755, + 33.811333 + ], + [ + -117.921786, + 33.81131 + ], + [ + -117.921798, + 33.811307 + ], + [ + -117.921819, + 33.811297 + ], + [ + -117.921856, + 33.811309 + ], + [ + -117.921894, + 33.811326 + ], + [ + -117.921933, + 33.811352 + ], + [ + -117.921958, + 33.811374 + ], + [ + -117.921991, + 33.811402 + ], + [ + -117.922023, + 33.811425 + ], + [ + -117.92203, + 33.811435 + ], + [ + -117.922036, + 33.811441 + ], + [ + -117.922012, + 33.811447 + ], + [ + -117.922012, + 33.81145 + ], + [ + -117.922012, + 33.811461 + ], + [ + -117.922008, + 33.811465 + ], + [ + -117.922006, + 33.811472 + ], + [ + -117.922009, + 33.81148 + ], + [ + -117.922015, + 33.811484 + ], + [ + -117.922012, + 33.81149 + ], + [ + -117.922006, + 33.811501 + ], + [ + -117.922001, + 33.811506 + ], + [ + -117.921995, + 33.811511 + ], + [ + -117.921989, + 33.811517 + ], + [ + -117.921985, + 33.811521 + ], + [ + -117.921982, + 33.81153 + ], + [ + -117.921969, + 33.811532 + ], + [ + -117.921947, + 33.811538 + ] + ] + ] + }, + "properties": { + "name": "Magnolia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 333370629, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.660607, + 33.671075 + ], + [ + -117.660622, + 33.671114 + ], + [ + -117.660593, + 33.671189 + ], + [ + -117.660574, + 33.671201 + ], + [ + -117.660527, + 33.671185 + ], + [ + -117.660482, + 33.671197 + ], + [ + -117.659641, + 33.670919 + ], + [ + -117.65973, + 33.670709 + ], + [ + -117.659955, + 33.670677 + ], + [ + -117.660072, + 33.67076 + ], + [ + -117.660183, + 33.670769 + ], + [ + -117.660268, + 33.67073 + ], + [ + -117.660328, + 33.670693 + ], + [ + -117.660385, + 33.670648 + ], + [ + -117.660392, + 33.67062 + ], + [ + -117.660394, + 33.670585 + ], + [ + -117.660392, + 33.670518 + ], + [ + -117.660713, + 33.670352 + ], + [ + -117.660764, + 33.670352 + ], + [ + -117.660826, + 33.670369 + ], + [ + -117.660867, + 33.670406 + ], + [ + -117.660879, + 33.670446 + ], + [ + -117.660823, + 33.670569 + ], + [ + -117.660777, + 33.670697 + ], + [ + -117.660758, + 33.670701 + ], + [ + -117.660607, + 33.671075 + ] + ] + ] + }, + "properties": { + "name": "Etnies Skate Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 333867689, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.678519, + 33.577737 + ], + [ + -117.677508, + 33.578612 + ], + [ + -117.677476, + 33.578926 + ], + [ + -117.677428, + 33.57909 + ], + [ + -117.67736, + 33.578984 + ], + [ + -117.677279, + 33.578942 + ], + [ + -117.67719, + 33.578923 + ], + [ + -117.67709, + 33.578929 + ], + [ + -117.676316, + 33.579328 + ], + [ + -117.676193, + 33.579388 + ], + [ + -117.676112, + 33.579346 + ], + [ + -117.676063, + 33.579274 + ], + [ + -117.675989, + 33.578184 + ], + [ + -117.67621, + 33.578042 + ], + [ + -117.676407, + 33.578036 + ], + [ + -117.676406, + 33.577854 + ], + [ + -117.676799, + 33.577839 + ], + [ + -117.676927, + 33.577713 + ], + [ + -117.676975, + 33.577738 + ], + [ + -117.677022, + 33.577738 + ], + [ + -117.677081, + 33.577723 + ], + [ + -117.677125, + 33.577688 + ], + [ + -117.677146, + 33.577644 + ], + [ + -117.677145, + 33.577569 + ], + [ + -117.677152, + 33.577521 + ], + [ + -117.677167, + 33.577488 + ], + [ + -117.677243, + 33.577394 + ], + [ + -117.677347, + 33.577228 + ], + [ + -117.677402, + 33.577108 + ], + [ + -117.67755, + 33.576509 + ], + [ + -117.67759, + 33.576471 + ], + [ + -117.677651, + 33.576451 + ], + [ + -117.67776, + 33.576416 + ], + [ + -117.677803, + 33.576409 + ], + [ + -117.677852, + 33.576404 + ], + [ + -117.677882, + 33.576409 + ], + [ + -117.677894, + 33.576442 + ], + [ + -117.67794, + 33.576701 + ], + [ + -117.677992, + 33.576975 + ], + [ + -117.678081, + 33.577193 + ], + [ + -117.67819, + 33.577397 + ], + [ + -117.67833, + 33.577581 + ], + [ + -117.678519, + 33.577737 + ] + ] + ] + }, + "properties": { + "name": "Moulton Ranch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 334573353, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.919537, + 33.808045 + ], + [ + -117.919536, + 33.808082 + ], + [ + -117.919477, + 33.808082 + ], + [ + -117.919478, + 33.808045 + ], + [ + -117.919537, + 33.808045 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 337545638, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.91747, + 33.804838 + ], + [ + -117.91746, + 33.80484 + ], + [ + -117.917456, + 33.804848 + ], + [ + -117.917457, + 33.804857 + ], + [ + -117.917531, + 33.804856 + ], + [ + -117.91758, + 33.804851 + ], + [ + -117.917622, + 33.80484 + ], + [ + -117.917656, + 33.804825 + ], + [ + -117.917697, + 33.8048 + ], + [ + -117.917783, + 33.804719 + ], + [ + -117.918636, + 33.803845 + ], + [ + -117.918684, + 33.803815 + ], + [ + -117.918736, + 33.80381 + ], + [ + -117.918877, + 33.803807 + ], + [ + -117.92009, + 33.803808 + ], + [ + -117.920087, + 33.803786 + ], + [ + -117.919719, + 33.803786 + ], + [ + -117.918691, + 33.803796 + ], + [ + -117.918675, + 33.803799 + ], + [ + -117.91866, + 33.803806 + ], + [ + -117.918632, + 33.803825 + ], + [ + -117.918368, + 33.804095 + ], + [ + -117.917931, + 33.804537 + ], + [ + -117.917682, + 33.804789 + ], + [ + -117.917645, + 33.804811 + ], + [ + -117.917612, + 33.804825 + ], + [ + -117.917572, + 33.804833 + ], + [ + -117.917524, + 33.804838 + ], + [ + -117.91747, + 33.804838 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 337801769, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.665867, + 33.656932 + ], + [ + -117.665913, + 33.656775 + ], + [ + -117.666002, + 33.656793 + ], + [ + -117.665956, + 33.65695 + ], + [ + -117.665867, + 33.656932 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 339837038, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.657064, + 33.663942 + ], + [ + -117.657169, + 33.663731 + ], + [ + -117.657313, + 33.663781 + ], + [ + -117.657207, + 33.663992 + ], + [ + -117.657064, + 33.663942 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 339837045, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.655105, + 33.66428 + ], + [ + -117.655242, + 33.66433 + ], + [ + -117.656011, + 33.664614 + ], + [ + -117.656048, + 33.664619 + ], + [ + -117.656082, + 33.66461 + ], + [ + -117.65611, + 33.664585 + ], + [ + -117.656512, + 33.663818 + ], + [ + -117.656401, + 33.663775 + ], + [ + -117.656203, + 33.663731 + ], + [ + -117.656083, + 33.66372 + ], + [ + -117.655947, + 33.663718 + ], + [ + -117.655786, + 33.663745 + ], + [ + -117.655626, + 33.663791 + ], + [ + -117.655467, + 33.663864 + ], + [ + -117.655363, + 33.66394 + ], + [ + -117.655266, + 33.664022 + ], + [ + -117.655167, + 33.664146 + ], + [ + -117.655105, + 33.66428 + ] + ] + ] + }, + "properties": { + "name": "Field 1", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 339837053, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.658498, + 33.664208 + ], + [ + -117.658552, + 33.66453 + ], + [ + -117.658445, + 33.664916 + ], + [ + -117.658384, + 33.665161 + ], + [ + -117.658181, + 33.665567 + ], + [ + -117.657566, + 33.665403 + ], + [ + -117.656581, + 33.667334 + ], + [ + -117.656122, + 33.667096 + ], + [ + -117.655651, + 33.666782 + ], + [ + -117.655174, + 33.6664 + ], + [ + -117.654566, + 33.66591 + ], + [ + -117.654069, + 33.665537 + ], + [ + -117.653709, + 33.665307 + ], + [ + -117.653341, + 33.665108 + ], + [ + -117.652946, + 33.664918 + ], + [ + -117.652867, + 33.664764 + ], + [ + -117.653331, + 33.663387 + ], + [ + -117.653802, + 33.663467 + ], + [ + -117.654047, + 33.66345 + ], + [ + -117.654474, + 33.663615 + ], + [ + -117.654903, + 33.663409 + ], + [ + -117.655267, + 33.661577 + ], + [ + -117.655489, + 33.661362 + ], + [ + -117.655834, + 33.661106 + ], + [ + -117.655969, + 33.660989 + ], + [ + -117.656041, + 33.660792 + ], + [ + -117.656051, + 33.66062 + ], + [ + -117.656088, + 33.660432 + ], + [ + -117.656272, + 33.660204 + ], + [ + -117.656505, + 33.660061 + ], + [ + -117.656544, + 33.659714 + ], + [ + -117.657164, + 33.659736 + ], + [ + -117.657373, + 33.659583 + ], + [ + -117.657528, + 33.659681 + ], + [ + -117.657655, + 33.659456 + ], + [ + -117.657763, + 33.659557 + ], + [ + -117.658223, + 33.66 + ], + [ + -117.658534, + 33.6601 + ], + [ + -117.658933, + 33.66008 + ], + [ + -117.65913, + 33.660303 + ], + [ + -117.659328, + 33.660424 + ], + [ + -117.659899, + 33.660941 + ], + [ + -117.65996, + 33.661404 + ], + [ + -117.659944, + 33.661622 + ], + [ + -117.659814, + 33.661825 + ], + [ + -117.659527, + 33.662178 + ], + [ + -117.659406, + 33.662746 + ], + [ + -117.659327, + 33.662789 + ], + [ + -117.659199, + 33.66281 + ], + [ + -117.659024, + 33.662771 + ], + [ + -117.658949, + 33.66277 + ], + [ + -117.658901, + 33.662799 + ], + [ + -117.658842, + 33.66298 + ], + [ + -117.658558, + 33.663733 + ], + [ + -117.658371, + 33.663785 + ], + [ + -117.658328, + 33.664088 + ], + [ + -117.658498, + 33.664208 + ] + ] + ] + }, + "properties": { + "name": "Lake Forest Sports Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 340739540, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.68866, + 33.660163 + ], + [ + -117.688557, + 33.659865 + ], + [ + -117.688772, + 33.659813 + ], + [ + -117.688875, + 33.660111 + ], + [ + -117.68866, + 33.660163 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 340739542, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.688271, + 33.660464 + ], + [ + -117.688009, + 33.659952 + ], + [ + -117.687998, + 33.659109 + ], + [ + -117.688271, + 33.659042 + ], + [ + -117.688548, + 33.658927 + ], + [ + -117.688736, + 33.658823 + ], + [ + -117.688911, + 33.658696 + ], + [ + -117.689075, + 33.65855 + ], + [ + -117.689201, + 33.658403 + ], + [ + -117.689303, + 33.658254 + ], + [ + -117.689382, + 33.658095 + ], + [ + -117.68943, + 33.65823 + ], + [ + -117.690178, + 33.658136 + ], + [ + -117.690551, + 33.658373 + ], + [ + -117.690429, + 33.65862 + ], + [ + -117.690302, + 33.65997 + ], + [ + -117.69059, + 33.660281 + ], + [ + -117.688271, + 33.660464 + ] + ] + ] + }, + "properties": { + "name": "Tamarisk Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 340782544, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.674474, + 33.649696 + ], + [ + -117.674464, + 33.649381 + ], + [ + -117.674652, + 33.649378 + ], + [ + -117.674662, + 33.649693 + ], + [ + -117.674474, + 33.649696 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 340953079, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.675519, + 33.655624 + ], + [ + -117.675311, + 33.655731 + ], + [ + -117.675083, + 33.655777 + ], + [ + -117.674863, + 33.655713 + ], + [ + -117.674742, + 33.655749 + ], + [ + -117.674749, + 33.655582 + ], + [ + -117.674767, + 33.655058 + ], + [ + -117.675066, + 33.65518 + ], + [ + -117.675513, + 33.655513 + ], + [ + -117.675519, + 33.655624 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 341048519, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.66923, + 33.653412 + ], + [ + -117.669263, + 33.653207 + ], + [ + -117.669285, + 33.653178 + ], + [ + -117.669318, + 33.653164 + ], + [ + -117.66936, + 33.653171 + ], + [ + -117.66959, + 33.653227 + ], + [ + -117.669575, + 33.653383 + ], + [ + -117.669525, + 33.65338 + ], + [ + -117.66952, + 33.65344 + ], + [ + -117.66923, + 33.653412 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 341081934, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.729658, + 33.696514 + ], + [ + -117.729527, + 33.696539 + ], + [ + -117.729388, + 33.696576 + ], + [ + -117.729278, + 33.696615 + ], + [ + -117.72912, + 33.696668 + ], + [ + -117.728946, + 33.696749 + ], + [ + -117.728735, + 33.69686 + ], + [ + -117.728479, + 33.697047 + ], + [ + -117.728411, + 33.697106 + ], + [ + -117.728369, + 33.697135 + ], + [ + -117.728328, + 33.697147 + ], + [ + -117.728291, + 33.697139 + ], + [ + -117.728262, + 33.697108 + ], + [ + -117.728081, + 33.69693 + ], + [ + -117.727979, + 33.696811 + ], + [ + -117.727886, + 33.696668 + ], + [ + -117.727798, + 33.696489 + ], + [ + -117.727755, + 33.696365 + ], + [ + -117.727721, + 33.696215 + ], + [ + -117.727697, + 33.696062 + ], + [ + -117.727683, + 33.696018 + ], + [ + -117.727649, + 33.695955 + ], + [ + -117.727593, + 33.695917 + ], + [ + -117.727551, + 33.6959 + ], + [ + -117.727539, + 33.695506 + ], + [ + -117.727539, + 33.695487 + ], + [ + -117.728502, + 33.695476 + ], + [ + -117.728748, + 33.695473 + ], + [ + -117.728918, + 33.695454 + ], + [ + -117.729027, + 33.695425 + ], + [ + -117.729101, + 33.695415 + ], + [ + -117.729138, + 33.695416 + ], + [ + -117.729169, + 33.695417 + ], + [ + -117.729223, + 33.69543 + ], + [ + -117.729356, + 33.69548 + ], + [ + -117.729444, + 33.695521 + ], + [ + -117.729544, + 33.695591 + ], + [ + -117.729598, + 33.695656 + ], + [ + -117.729618, + 33.695692 + ], + [ + -117.729631, + 33.695716 + ], + [ + -117.729666, + 33.695834 + ], + [ + -117.729673, + 33.695926 + ], + [ + -117.729781, + 33.696439 + ], + [ + -117.729769, + 33.696473 + ], + [ + -117.72975, + 33.696493 + ], + [ + -117.729697, + 33.696507 + ], + [ + -117.729658, + 33.696514 + ] + ] + ] + }, + "properties": { + "name": "Pavilion Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 341259813, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.753167, + 33.647626 + ], + [ + -117.753128, + 33.647634 + ], + [ + -117.753004, + 33.647333 + ], + [ + -117.752204, + 33.647578 + ], + [ + -117.751941, + 33.647361 + ], + [ + -117.751877, + 33.647408 + ], + [ + -117.751751, + 33.647302 + ], + [ + -117.7527, + 33.64656 + ], + [ + -117.752916, + 33.646379 + ], + [ + -117.752996, + 33.646302 + ], + [ + -117.753067, + 33.646369 + ], + [ + -117.753074, + 33.646456 + ], + [ + -117.753224, + 33.646745 + ], + [ + -117.753378, + 33.647116 + ], + [ + -117.753468, + 33.647233 + ], + [ + -117.753478, + 33.647282 + ], + [ + -117.75344, + 33.647353 + ], + [ + -117.753366, + 33.647387 + ], + [ + -117.75322, + 33.64744 + ], + [ + -117.753176, + 33.647515 + ], + [ + -117.753164, + 33.647556 + ], + [ + -117.753164, + 33.64759 + ], + [ + -117.753167, + 33.647626 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 341259815, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.74826, + 33.643764 + ], + [ + -117.747519, + 33.643114 + ], + [ + -117.747773, + 33.642891 + ], + [ + -117.748523, + 33.643553 + ], + [ + -117.74826, + 33.643764 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 341259822, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.752917, + 33.646851 + ], + [ + -117.752813, + 33.646618 + ], + [ + -117.752965, + 33.646571 + ], + [ + -117.753069, + 33.646804 + ], + [ + -117.752917, + 33.646851 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 341604337, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.758603, + 33.687052 + ], + [ + -117.757298, + 33.688347 + ], + [ + -117.757284, + 33.688345 + ], + [ + -117.757248, + 33.688341 + ], + [ + -117.755632, + 33.687222 + ], + [ + -117.755616, + 33.687153 + ], + [ + -117.756912, + 33.685876 + ], + [ + -117.757636, + 33.68638 + ], + [ + -117.758603, + 33.687052 + ] + ] + ] + }, + "properties": { + "name": "Cypress Grove Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 341604339, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.756495, + 33.689179 + ], + [ + -117.756405, + 33.68918 + ], + [ + -117.754787, + 33.688048 + ], + [ + -117.75478, + 33.687984 + ], + [ + -117.755377, + 33.687385 + ], + [ + -117.755457, + 33.687392 + ], + [ + -117.757085, + 33.688542 + ], + [ + -117.757089, + 33.688578 + ], + [ + -117.756495, + 33.689179 + ] + ] + ] + }, + "properties": { + "name": "Floral Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 342214647, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.740296, + 33.706191 + ], + [ + -117.739596, + 33.705678 + ], + [ + -117.739592, + 33.70565 + ], + [ + -117.740189, + 33.705024 + ], + [ + -117.741041, + 33.705613 + ], + [ + -117.740628, + 33.706031 + ], + [ + -117.740562, + 33.705986 + ], + [ + -117.74036, + 33.706187 + ], + [ + -117.740296, + 33.706191 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 342214654, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.741256, + 33.706946 + ], + [ + -117.739419, + 33.705659 + ], + [ + -117.740153, + 33.704939 + ], + [ + -117.74028, + 33.704935 + ], + [ + -117.74135, + 33.705674 + ], + [ + -117.741562, + 33.705869 + ], + [ + -117.741952, + 33.706138 + ], + [ + -117.74196, + 33.706244 + ], + [ + -117.741256, + 33.706946 + ] + ] + ] + }, + "properties": { + "name": "Stonegate Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 342214858, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.740269, + 33.704619 + ], + [ + -117.740194, + 33.70463 + ], + [ + -117.739832, + 33.704386 + ], + [ + -117.740519, + 33.703685 + ], + [ + -117.740895, + 33.703939 + ], + [ + -117.740902, + 33.70399 + ], + [ + -117.740269, + 33.704619 + ] + ] + ] + }, + "properties": { + "name": "Hummingbird Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 342804347, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.745836, + 33.706671 + ], + [ + -117.746472, + 33.707114 + ], + [ + -117.746473, + 33.707186 + ], + [ + -117.745415, + 33.708245 + ], + [ + -117.745388, + 33.708261 + ], + [ + -117.745347, + 33.708265 + ], + [ + -117.745308, + 33.708253 + ], + [ + -117.744728, + 33.707797 + ], + [ + -117.744722, + 33.707713 + ], + [ + -117.745729, + 33.70665 + ], + [ + -117.745836, + 33.706671 + ] + ] + ] + }, + "properties": { + "name": "Egret Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 342805446, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.74152, + 33.708208 + ], + [ + -117.741144, + 33.707947 + ], + [ + -117.741867, + 33.707225 + ], + [ + -117.742243, + 33.707486 + ], + [ + -117.74152, + 33.708208 + ] + ] + ] + }, + "properties": { + "name": "Goldfinch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 343052957, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.712394, + 33.697627 + ], + [ + -117.712348, + 33.69755 + ], + [ + -117.712295, + 33.697449 + ], + [ + -117.712234, + 33.697285 + ], + [ + -117.712203, + 33.697164 + ], + [ + -117.712184, + 33.697043 + ], + [ + -117.712183, + 33.696939 + ], + [ + -117.712184, + 33.696837 + ], + [ + -117.712236, + 33.696848 + ], + [ + -117.712565, + 33.696937 + ], + [ + -117.712615, + 33.696965 + ], + [ + -117.712757, + 33.697013 + ], + [ + -117.713034, + 33.697117 + ], + [ + -117.713062, + 33.697127 + ], + [ + -117.713074, + 33.697141 + ], + [ + -117.713028, + 33.697181 + ], + [ + -117.712972, + 33.697236 + ], + [ + -117.712898, + 33.697311 + ], + [ + -117.712837, + 33.697373 + ], + [ + -117.712659, + 33.697549 + ], + [ + -117.712593, + 33.697613 + ], + [ + -117.712531, + 33.697659 + ], + [ + -117.712479, + 33.69769 + ], + [ + -117.712458, + 33.697698 + ], + [ + -117.712435, + 33.69769 + ], + [ + -117.712417, + 33.697671 + ], + [ + -117.712394, + 33.697627 + ] + ] + ] + }, + "properties": { + "name": "Orchard View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 343081988, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.675838, + 33.676174 + ], + [ + -117.67653, + 33.674845 + ], + [ + -117.676309, + 33.674726 + ], + [ + -117.676159, + 33.674617 + ], + [ + -117.676061, + 33.674528 + ], + [ + -117.675982, + 33.674448 + ], + [ + -117.675832, + 33.674297 + ], + [ + -117.67571, + 33.674137 + ], + [ + -117.675606, + 33.673957 + ], + [ + -117.67557, + 33.673911 + ], + [ + -117.675495, + 33.673889 + ], + [ + -117.675409, + 33.673891 + ], + [ + -117.675322, + 33.673923 + ], + [ + -117.675247, + 33.674491 + ], + [ + -117.675146, + 33.674692 + ], + [ + -117.675041, + 33.67487 + ], + [ + -117.674821, + 33.675049 + ], + [ + -117.674699, + 33.675107 + ], + [ + -117.674513, + 33.675157 + ], + [ + -117.67429, + 33.675175 + ], + [ + -117.674059, + 33.67515 + ], + [ + -117.673931, + 33.675075 + ], + [ + -117.673904, + 33.675046 + ], + [ + -117.673844, + 33.675038 + ], + [ + -117.673811, + 33.674924 + ], + [ + -117.673555, + 33.67488 + ], + [ + -117.673379, + 33.67507 + ], + [ + -117.673287, + 33.675283 + ], + [ + -117.673534, + 33.675401 + ], + [ + -117.67382, + 33.675516 + ], + [ + -117.674152, + 33.675628 + ], + [ + -117.675838, + 33.676174 + ] + ] + ] + }, + "properties": { + "name": "Baker Ranch Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 343082000, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.679276, + 33.6687 + ], + [ + -117.678445, + 33.668777 + ], + [ + -117.678409, + 33.668777 + ], + [ + -117.678388, + 33.668764 + ], + [ + -117.67838, + 33.668738 + ], + [ + -117.678366, + 33.668371 + ], + [ + -117.678392, + 33.668352 + ], + [ + -117.678426, + 33.66835 + ], + [ + -117.678973, + 33.668399 + ], + [ + -117.679087, + 33.668411 + ], + [ + -117.679231, + 33.668442 + ], + [ + -117.679276, + 33.668453 + ], + [ + -117.679297, + 33.668486 + ], + [ + -117.679318, + 33.668675 + ], + [ + -117.679306, + 33.668695 + ], + [ + -117.679276, + 33.6687 + ] + ] + ] + }, + "properties": { + "name": "Odyssey Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 343082001, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.675283, + 33.669996 + ], + [ + -117.674504, + 33.669758 + ], + [ + -117.674437, + 33.66975 + ], + [ + -117.674418, + 33.669673 + ], + [ + -117.674463, + 33.669665 + ], + [ + -117.674677, + 33.669525 + ], + [ + -117.675188, + 33.669355 + ], + [ + -117.675212, + 33.669614 + ], + [ + -117.675226, + 33.669726 + ], + [ + -117.675283, + 33.669996 + ] + ] + ] + }, + "properties": { + "name": "Passage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 343082005, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.683318, + 33.670818 + ], + [ + -117.683211, + 33.67065 + ], + [ + -117.683122, + 33.670544 + ], + [ + -117.683008, + 33.670403 + ], + [ + -117.682882, + 33.670275 + ], + [ + -117.682753, + 33.670153 + ], + [ + -117.682563, + 33.670008 + ], + [ + -117.682372, + 33.669888 + ], + [ + -117.682163, + 33.669768 + ], + [ + -117.681946, + 33.669668 + ], + [ + -117.681747, + 33.669595 + ], + [ + -117.681752, + 33.669534 + ], + [ + -117.682075, + 33.669533 + ], + [ + -117.682125, + 33.669541 + ], + [ + -117.683598, + 33.669497 + ], + [ + -117.68362, + 33.669862 + ], + [ + -117.683708, + 33.670271 + ], + [ + -117.683672, + 33.670277 + ], + [ + -117.683603, + 33.670302 + ], + [ + -117.683559, + 33.670344 + ], + [ + -117.683524, + 33.670393 + ], + [ + -117.683518, + 33.67047 + ], + [ + -117.683536, + 33.670523 + ], + [ + -117.683672, + 33.670698 + ], + [ + -117.68363, + 33.670739 + ], + [ + -117.683351, + 33.670832 + ], + [ + -117.683318, + 33.670818 + ] + ] + ] + }, + "properties": { + "name": "The Arbors Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 344159346, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.741044, + 33.711156 + ], + [ + -117.740965, + 33.711159 + ], + [ + -117.740165, + 33.710581 + ], + [ + -117.740154, + 33.710526 + ], + [ + -117.741084, + 33.709591 + ], + [ + -117.741188, + 33.709594 + ], + [ + -117.741942, + 33.710124 + ], + [ + -117.741942, + 33.710208 + ], + [ + -117.741044, + 33.711156 + ] + ] + ] + }, + "properties": { + "name": "Swallows Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 344164404, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.750499, + 33.704544 + ], + [ + -117.750436, + 33.704549 + ], + [ + -117.749881, + 33.704153 + ], + [ + -117.749877, + 33.704111 + ], + [ + -117.750364, + 33.703655 + ], + [ + -117.750452, + 33.703652 + ], + [ + -117.750996, + 33.704006 + ], + [ + -117.750997, + 33.704057 + ], + [ + -117.750499, + 33.704544 + ] + ] + ] + }, + "properties": { + "name": "Pepper Tree Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 344164405, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.752917, + 33.702109 + ], + [ + -117.752385, + 33.70173 + ], + [ + -117.752392, + 33.701666 + ], + [ + -117.752898, + 33.701157 + ], + [ + -117.752994, + 33.70116 + ], + [ + -117.753498, + 33.701528 + ], + [ + -117.753498, + 33.701572 + ], + [ + -117.752966, + 33.702104 + ], + [ + -117.752917, + 33.702109 + ] + ] + ] + }, + "properties": { + "name": "Olive Grove Square Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 344180332, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.749654, + 33.700834 + ], + [ + -117.7492, + 33.700519 + ], + [ + -117.749181, + 33.700484 + ], + [ + -117.749186, + 33.700455 + ], + [ + -117.749199, + 33.700437 + ], + [ + -117.749522, + 33.700114 + ], + [ + -117.749556, + 33.700104 + ], + [ + -117.749591, + 33.700113 + ], + [ + -117.750064, + 33.700445 + ], + [ + -117.75008, + 33.700476 + ], + [ + -117.750069, + 33.700512 + ], + [ + -117.749738, + 33.700832 + ], + [ + -117.749709, + 33.700843 + ], + [ + -117.74968, + 33.700843 + ], + [ + -117.749654, + 33.700834 + ] + ] + ] + }, + "properties": { + "name": "Magnolia Square Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 344180333, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.746721, + 33.69673 + ], + [ + -117.745986, + 33.696785 + ], + [ + -117.745946, + 33.696771 + ], + [ + -117.745918, + 33.696746 + ], + [ + -117.745876, + 33.696495 + ], + [ + -117.745875, + 33.696394 + ], + [ + -117.74592, + 33.696222 + ], + [ + -117.745984, + 33.696082 + ], + [ + -117.746017, + 33.696031 + ], + [ + -117.746055, + 33.695985 + ], + [ + -117.746093, + 33.695971 + ], + [ + -117.746133, + 33.695977 + ], + [ + -117.746729, + 33.696399 + ], + [ + -117.746765, + 33.696447 + ], + [ + -117.74681, + 33.696669 + ], + [ + -117.7468, + 33.696708 + ], + [ + -117.746778, + 33.696723 + ], + [ + -117.746721, + 33.69673 + ] + ] + ] + }, + "properties": { + "name": "Woodland Garden Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 344180336, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.750569, + 33.69158 + ], + [ + -117.750541, + 33.691584 + ], + [ + -117.750512, + 33.69158 + ], + [ + -117.750476, + 33.691554 + ], + [ + -117.750453, + 33.69151 + ], + [ + -117.750077, + 33.691253 + ], + [ + -117.750024, + 33.691235 + ], + [ + -117.749986, + 33.691209 + ], + [ + -117.749973, + 33.691179 + ], + [ + -117.74998, + 33.691152 + ], + [ + -117.750005, + 33.691124 + ], + [ + -117.750396, + 33.690734 + ], + [ + -117.750422, + 33.690727 + ], + [ + -117.75045, + 33.69073 + ], + [ + -117.750476, + 33.690741 + ], + [ + -117.750502, + 33.690763 + ], + [ + -117.750965, + 33.691083 + ], + [ + -117.751004, + 33.691109 + ], + [ + -117.751008, + 33.691159 + ], + [ + -117.750994, + 33.691176 + ], + [ + -117.750599, + 33.691564 + ], + [ + -117.750569, + 33.69158 + ] + ] + ] + }, + "properties": { + "name": "Date Palm Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 344180338, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.753844, + 33.694212 + ], + [ + -117.753328, + 33.693849 + ], + [ + -117.753327, + 33.693813 + ], + [ + -117.753658, + 33.693469 + ], + [ + -117.753725, + 33.693475 + ], + [ + -117.7542, + 33.693805 + ], + [ + -117.754205, + 33.693854 + ], + [ + -117.753879, + 33.694204 + ], + [ + -117.753844, + 33.694212 + ] + ] + ] + }, + "properties": { + "name": "Cypress Square Pool Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 344316624, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.753952, + 33.696539 + ], + [ + -117.753774, + 33.696417 + ], + [ + -117.753739, + 33.696379 + ], + [ + -117.754175, + 33.695923 + ], + [ + -117.754395, + 33.696071 + ], + [ + -117.754401, + 33.696171 + ], + [ + -117.754029, + 33.696531 + ], + [ + -117.754, + 33.696542 + ], + [ + -117.753979, + 33.696545 + ], + [ + -117.753952, + 33.696539 + ] + ] + ] + }, + "properties": { + "name": "Palm Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 346067402, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.766505, + 33.901639 + ], + [ + -117.76636, + 33.901606 + ], + [ + -117.766364, + 33.901553 + ], + [ + -117.766227, + 33.901525 + ], + [ + -117.766199, + 33.901597 + ], + [ + -117.766225, + 33.901602 + ], + [ + -117.766222, + 33.901664 + ], + [ + -117.766244, + 33.901707 + ], + [ + -117.766282, + 33.901736 + ], + [ + -117.766346, + 33.901741 + ], + [ + -117.766393, + 33.901728 + ], + [ + -117.766432, + 33.9017 + ], + [ + -117.766441, + 33.901679 + ], + [ + -117.766487, + 33.901688 + ], + [ + -117.766505, + 33.901639 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 346656455, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.011699, + 33.911687 + ], + [ + -118.011565, + 33.911683 + ], + [ + -118.010902, + 33.912903 + ], + [ + -118.010712, + 33.91315 + ], + [ + -118.010625, + 33.913287 + ], + [ + -118.010547, + 33.913885 + ], + [ + -118.010478, + 33.914317 + ], + [ + -118.010293, + 33.914741 + ], + [ + -118.01017, + 33.914904 + ], + [ + -118.009969, + 33.915074 + ], + [ + -118.009786, + 33.915158 + ], + [ + -118.009643, + 33.915169 + ], + [ + -118.007942, + 33.916671 + ], + [ + -118.008706, + 33.916955 + ], + [ + -118.009985, + 33.915426 + ], + [ + -118.010878, + 33.914772 + ], + [ + -118.010996, + 33.914326 + ], + [ + -118.01107, + 33.914254 + ], + [ + -118.011029, + 33.91348 + ], + [ + -118.01121, + 33.913078 + ], + [ + -118.011353, + 33.912887 + ], + [ + -118.011735, + 33.912861 + ], + [ + -118.011699, + 33.911687 + ] + ] + ] + }, + "properties": { + "name": "La Mirada Lower Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 349881836, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.756665, + 33.686292 + ], + [ + -117.75685, + 33.686102 + ], + [ + -117.756991, + 33.686196 + ], + [ + -117.756806, + 33.686386 + ], + [ + -117.756665, + 33.686292 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 349881843, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.760038, + 33.685598 + ], + [ + -117.760719, + 33.684918 + ], + [ + -117.760706, + 33.684876 + ], + [ + -117.759092, + 33.683754 + ], + [ + -117.75902, + 33.683744 + ], + [ + -117.758367, + 33.684443 + ], + [ + -117.760038, + 33.685598 + ] + ] + ] + }, + "properties": { + "name": "Arbor Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 350196126, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.74867, + 33.697717 + ], + [ + -117.748858, + 33.697845 + ], + [ + -117.74877, + 33.697934 + ], + [ + -117.748582, + 33.697806 + ], + [ + -117.74867, + 33.697717 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 350196128, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.750122, + 33.697538 + ], + [ + -117.749955, + 33.697703 + ], + [ + -117.749862, + 33.697637 + ], + [ + -117.750029, + 33.697473 + ], + [ + -117.750122, + 33.697538 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 350196133, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.750882, + 33.697842 + ], + [ + -117.750811, + 33.697792 + ], + [ + -117.748788, + 33.696386 + ], + [ + -117.747899, + 33.697287 + ], + [ + -117.747885, + 33.697365 + ], + [ + -117.747905, + 33.697406 + ], + [ + -117.747967, + 33.697468 + ], + [ + -117.749885, + 33.698813 + ], + [ + -117.750882, + 33.697842 + ] + ] + ] + }, + "properties": { + "name": "Woodbury Rec Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 350196202, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.753997, + 33.698599 + ], + [ + -117.753554, + 33.69829 + ], + [ + -117.753547, + 33.698234 + ], + [ + -117.753906, + 33.697876 + ], + [ + -117.753963, + 33.697879 + ], + [ + -117.754415, + 33.698191 + ], + [ + -117.754419, + 33.698241 + ], + [ + -117.754056, + 33.698601 + ], + [ + -117.753997, + 33.698599 + ] + ] + ] + }, + "properties": { + "name": "Coral Tree Square Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 350240957, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.041792, + 33.881405 + ], + [ + -118.041722, + 33.881387 + ], + [ + -118.041508, + 33.881492 + ], + [ + -118.041188, + 33.881739 + ], + [ + -118.041333, + 33.881879 + ], + [ + -118.04147, + 33.881962 + ], + [ + -118.041599, + 33.882009 + ], + [ + -118.041701, + 33.882018 + ], + [ + -118.041843, + 33.882011 + ], + [ + -118.04198, + 33.881977 + ], + [ + -118.04206, + 33.881942 + ], + [ + -118.0421, + 33.881915 + ], + [ + -118.041998, + 33.881623 + ], + [ + -118.041792, + 33.881405 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 350240962, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.042143, + 33.880762 + ], + [ + -118.040722, + 33.880762 + ], + [ + -118.040665, + 33.880826 + ], + [ + -118.040665, + 33.882075 + ], + [ + -118.042159, + 33.882051 + ], + [ + -118.042143, + 33.880762 + ] + ] + ] + }, + "properties": { + "name": "Carmenita Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 353565764, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.031866, + 33.73071 + ], + [ + -118.031869, + 33.730353 + ], + [ + -118.031617, + 33.730357 + ], + [ + -118.03162, + 33.730458 + ], + [ + -118.0314, + 33.730464 + ], + [ + -118.031402, + 33.730585 + ], + [ + -118.03163, + 33.730594 + ], + [ + -118.03163, + 33.730708 + ], + [ + -118.031866, + 33.73071 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 353565765, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.031292, + 33.731125 + ], + [ + -118.031593, + 33.730893 + ], + [ + -118.031413, + 33.730725 + ], + [ + -118.031121, + 33.730951 + ], + [ + -118.031292, + 33.731125 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 355292830, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.824156, + 33.713757 + ], + [ + -117.824051, + 33.713742 + ], + [ + -117.823877, + 33.714581 + ], + [ + -117.823494, + 33.714526 + ], + [ + -117.823393, + 33.715013 + ], + [ + -117.824234, + 33.715133 + ], + [ + -117.824328, + 33.714681 + ], + [ + -117.823974, + 33.71463 + ], + [ + -117.824156, + 33.713757 + ] + ] + ] + }, + "properties": { + "name": "Arlington Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 355292831, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.820801, + 33.712809 + ], + [ + -117.820658, + 33.71271 + ], + [ + -117.820104, + 33.713265 + ], + [ + -117.820037, + 33.713219 + ], + [ + -117.819593, + 33.713664 + ], + [ + -117.820128, + 33.714034 + ], + [ + -117.820571, + 33.71359 + ], + [ + -117.820246, + 33.713365 + ], + [ + -117.820801, + 33.712809 + ] + ] + ] + }, + "properties": { + "name": "Montgomery Square", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 355771951, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.69564, + 33.619343 + ], + [ + -117.695579, + 33.619252 + ], + [ + -117.695751, + 33.619171 + ], + [ + -117.695812, + 33.619261 + ], + [ + -117.69564, + 33.619343 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 356688350, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.691312, + 33.661904 + ], + [ + -117.690796, + 33.662029 + ], + [ + -117.69024, + 33.662192 + ], + [ + -117.689664, + 33.662409 + ], + [ + -117.689225, + 33.662625 + ], + [ + -117.688791, + 33.662874 + ], + [ + -117.688283, + 33.663271 + ], + [ + -117.688067, + 33.663448 + ], + [ + -117.687715, + 33.66296 + ], + [ + -117.688685, + 33.662455 + ], + [ + -117.68805, + 33.66161 + ], + [ + -117.687479, + 33.661901 + ], + [ + -117.687438, + 33.661907 + ], + [ + -117.687116, + 33.662079 + ], + [ + -117.687362, + 33.662377 + ], + [ + -117.687307, + 33.662634 + ], + [ + -117.687309, + 33.662686 + ], + [ + -117.687328, + 33.662733 + ], + [ + -117.687579, + 33.66303 + ], + [ + -117.68763, + 33.663004 + ], + [ + -117.688007, + 33.663509 + ], + [ + -117.687841, + 33.663664 + ], + [ + -117.68774, + 33.663531 + ], + [ + -117.687315, + 33.66297 + ], + [ + -117.685366, + 33.662081 + ], + [ + -117.683883, + 33.661807 + ], + [ + -117.6835, + 33.662571 + ], + [ + -117.683393, + 33.66235 + ], + [ + -117.683318, + 33.662194 + ], + [ + -117.683256, + 33.662048 + ], + [ + -117.683256, + 33.661152 + ], + [ + -117.683275, + 33.660964 + ], + [ + -117.683224, + 33.660885 + ], + [ + -117.683055, + 33.660793 + ], + [ + -117.683005, + 33.660681 + ], + [ + -117.682982, + 33.659662 + ], + [ + -117.682887, + 33.659549 + ], + [ + -117.683174, + 33.659366 + ], + [ + -117.683762, + 33.658978 + ], + [ + -117.684298, + 33.658973 + ], + [ + -117.68489, + 33.658887 + ], + [ + -117.685456, + 33.658983 + ], + [ + -117.686492, + 33.658976 + ], + [ + -117.686966, + 33.658819 + ], + [ + -117.687259, + 33.65919 + ], + [ + -117.687998, + 33.659109 + ], + [ + -117.688009, + 33.659952 + ], + [ + -117.688271, + 33.660464 + ], + [ + -117.69059, + 33.660281 + ], + [ + -117.690819, + 33.660687 + ], + [ + -117.691062, + 33.660955 + ], + [ + -117.691178, + 33.661026 + ], + [ + -117.690851, + 33.661677 + ], + [ + -117.690891, + 33.661772 + ], + [ + -117.691312, + 33.661904 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 356782620, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.696701, + 33.659347 + ], + [ + -117.696327, + 33.65931 + ], + [ + -117.696111, + 33.659228 + ], + [ + -117.695948, + 33.659159 + ], + [ + -117.695749, + 33.659028 + ], + [ + -117.695632, + 33.65906 + ], + [ + -117.695685, + 33.659157 + ], + [ + -117.69565, + 33.65923 + ], + [ + -117.695633, + 33.659308 + ], + [ + -117.695626, + 33.659352 + ], + [ + -117.695616, + 33.659369 + ], + [ + -117.695603, + 33.659382 + ], + [ + -117.695586, + 33.659391 + ], + [ + -117.695526, + 33.659316 + ], + [ + -117.695566, + 33.659401 + ], + [ + -117.695541, + 33.659409 + ], + [ + -117.695515, + 33.659413 + ], + [ + -117.695491, + 33.659415 + ], + [ + -117.695466, + 33.659414 + ], + [ + -117.695441, + 33.659412 + ], + [ + -117.695417, + 33.659406 + ], + [ + -117.695384, + 33.659396 + ], + [ + -117.695411, + 33.659483 + ], + [ + -117.695428, + 33.659768 + ], + [ + -117.69322, + 33.659908 + ], + [ + -117.693219, + 33.659946 + ], + [ + -117.69321, + 33.659983 + ], + [ + -117.693191, + 33.660012 + ], + [ + -117.693167, + 33.660042 + ], + [ + -117.693131, + 33.660066 + ], + [ + -117.693094, + 33.660083 + ], + [ + -117.693081, + 33.660085 + ], + [ + -117.69305, + 33.660092 + ], + [ + -117.692999, + 33.660092 + ], + [ + -117.692847, + 33.660076 + ], + [ + -117.692776, + 33.660074 + ], + [ + -117.69263, + 33.660084 + ], + [ + -117.692559, + 33.660089 + ], + [ + -117.6923, + 33.660108 + ], + [ + -117.692212, + 33.660114 + ], + [ + -117.691833, + 33.660141 + ], + [ + -117.691785, + 33.660145 + ], + [ + -117.691497, + 33.660165 + ], + [ + -117.691395, + 33.660192 + ], + [ + -117.691303, + 33.660213 + ], + [ + -117.691436, + 33.660359 + ], + [ + -117.691492, + 33.660558 + ], + [ + -117.691547, + 33.660789 + ], + [ + -117.695726, + 33.660493 + ], + [ + -117.696701, + 33.659347 + ] + ] + ] + }, + "properties": { + "name": "Rancho Serrano Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 359510917, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.918781, + 33.804788 + ], + [ + -117.918789, + 33.804787 + ], + [ + -117.918802, + 33.804776 + ], + [ + -117.918821, + 33.804771 + ], + [ + -117.91885, + 33.804773 + ], + [ + -117.918872, + 33.804773 + ], + [ + -117.918943, + 33.804772 + ], + [ + -117.918966, + 33.804769 + ], + [ + -117.919032, + 33.804766 + ], + [ + -117.919086, + 33.80476 + ], + [ + -117.919086, + 33.804753 + ], + [ + -117.91917, + 33.804752 + ], + [ + -117.91917, + 33.804758 + ], + [ + -117.919187, + 33.804758 + ], + [ + -117.919184, + 33.804719 + ], + [ + -117.919156, + 33.80472 + ], + [ + -117.919129, + 33.804722 + ], + [ + -117.919071, + 33.804727 + ], + [ + -117.919037, + 33.804731 + ], + [ + -117.919011, + 33.804739 + ], + [ + -117.918977, + 33.804744 + ], + [ + -117.91894, + 33.804741 + ], + [ + -117.918896, + 33.804738 + ], + [ + -117.91884, + 33.804733 + ], + [ + -117.918811, + 33.804741 + ], + [ + -117.918788, + 33.804761 + ], + [ + -117.918781, + 33.804779 + ], + [ + -117.918781, + 33.804788 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 361353546, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.665064, + 33.663328 + ], + [ + -117.664733, + 33.66322 + ], + [ + -117.664497, + 33.663133 + ], + [ + -117.664239, + 33.662983 + ], + [ + -117.663832, + 33.662723 + ], + [ + -117.665696, + 33.661064 + ], + [ + -117.666167, + 33.660493 + ], + [ + -117.667068, + 33.660093 + ], + [ + -117.667779, + 33.659647 + ], + [ + -117.668157, + 33.659113 + ], + [ + -117.668845, + 33.658544 + ], + [ + -117.668892, + 33.658509 + ], + [ + -117.669113, + 33.65889 + ], + [ + -117.669631, + 33.658867 + ], + [ + -117.66985, + 33.65854 + ], + [ + -117.670237, + 33.658773 + ], + [ + -117.670335, + 33.658949 + ], + [ + -117.669906, + 33.658788 + ], + [ + -117.669848, + 33.659014 + ], + [ + -117.669197, + 33.659085 + ], + [ + -117.668725, + 33.659339 + ], + [ + -117.668348, + 33.65997 + ], + [ + -117.668329, + 33.659988 + ], + [ + -117.66826, + 33.660055 + ], + [ + -117.668241, + 33.660074 + ], + [ + -117.668145, + 33.660123 + ], + [ + -117.667911, + 33.660235 + ], + [ + -117.667702, + 33.660448 + ], + [ + -117.667418, + 33.660591 + ], + [ + -117.667329, + 33.660651 + ], + [ + -117.667141, + 33.660744 + ], + [ + -117.666727, + 33.661464 + ], + [ + -117.666723, + 33.661543 + ], + [ + -117.666704, + 33.661769 + ], + [ + -117.666791, + 33.662526 + ], + [ + -117.667117, + 33.66261 + ], + [ + -117.667068, + 33.662739 + ], + [ + -117.666751, + 33.662752 + ], + [ + -117.665847, + 33.662905 + ], + [ + -117.665745, + 33.662962 + ], + [ + -117.665566, + 33.663011 + ], + [ + -117.665332, + 33.663117 + ], + [ + -117.66514, + 33.663215 + ], + [ + -117.665064, + 33.663328 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 361354793, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.673322, + 33.641598 + ], + [ + -117.673726, + 33.641146 + ], + [ + -117.673836, + 33.641063 + ], + [ + -117.674007, + 33.641203 + ], + [ + -117.674097, + 33.641345 + ], + [ + -117.674124, + 33.641532 + ], + [ + -117.674148, + 33.641711 + ], + [ + -117.674207, + 33.64207 + ], + [ + -117.674312, + 33.642428 + ], + [ + -117.674655, + 33.642436 + ], + [ + -117.674725, + 33.642591 + ], + [ + -117.674785, + 33.642636 + ], + [ + -117.674863, + 33.642662 + ], + [ + -117.67508, + 33.642658 + ], + [ + -117.675155, + 33.642965 + ], + [ + -117.675204, + 33.643102 + ], + [ + -117.675515, + 33.643347 + ], + [ + -117.675506, + 33.643771 + ], + [ + -117.675554, + 33.643985 + ], + [ + -117.675521, + 33.644108 + ], + [ + -117.675448, + 33.64424 + ], + [ + -117.67532, + 33.64437 + ], + [ + -117.675218, + 33.644476 + ], + [ + -117.675447, + 33.644695 + ], + [ + -117.675317, + 33.644884 + ], + [ + -117.67529, + 33.64495 + ], + [ + -117.675257, + 33.645001 + ], + [ + -117.67517, + 33.645078 + ], + [ + -117.675151, + 33.645115 + ], + [ + -117.675144, + 33.645184 + ], + [ + -117.675065, + 33.645447 + ], + [ + -117.675075, + 33.645562 + ], + [ + -117.675196, + 33.645643 + ], + [ + -117.675491, + 33.645629 + ], + [ + -117.675704, + 33.645677 + ], + [ + -117.675684, + 33.645872 + ], + [ + -117.675656, + 33.646034 + ], + [ + -117.675575, + 33.646234 + ], + [ + -117.675483, + 33.646369 + ], + [ + -117.675191, + 33.646817 + ], + [ + -117.675213, + 33.646854 + ], + [ + -117.675356, + 33.647021 + ], + [ + -117.675281, + 33.647167 + ], + [ + -117.67529, + 33.647344 + ], + [ + -117.675355, + 33.647563 + ], + [ + -117.675757, + 33.647465 + ], + [ + -117.676345, + 33.646483 + ], + [ + -117.676447, + 33.646244 + ], + [ + -117.676522, + 33.646239 + ], + [ + -117.676508, + 33.646494 + ], + [ + -117.676457, + 33.646678 + ], + [ + -117.675973, + 33.64755 + ], + [ + -117.675754, + 33.647822 + ], + [ + -117.675562, + 33.647984 + ], + [ + -117.675494, + 33.648058 + ], + [ + -117.675464, + 33.648196 + ], + [ + -117.675472, + 33.648331 + ], + [ + -117.675582, + 33.648504 + ], + [ + -117.67571, + 33.648614 + ], + [ + -117.67608, + 33.649052 + ], + [ + -117.674922, + 33.649975 + ], + [ + -117.674693, + 33.649892 + ], + [ + -117.674748, + 33.649722 + ], + [ + -117.67479, + 33.6492 + ], + [ + -117.674652, + 33.649179 + ], + [ + -117.674414, + 33.649206 + ], + [ + -117.674194, + 33.649245 + ], + [ + -117.674019, + 33.64931 + ], + [ + -117.673893, + 33.649431 + ], + [ + -117.673768, + 33.649724 + ], + [ + -117.673433, + 33.650142 + ], + [ + -117.673199, + 33.650623 + ], + [ + -117.673113, + 33.650694 + ], + [ + -117.672793, + 33.650887 + ], + [ + -117.672603, + 33.651104 + ], + [ + -117.672684, + 33.651156 + ], + [ + -117.672471, + 33.651555 + ], + [ + -117.672484, + 33.65164 + ], + [ + -117.672427, + 33.651844 + ], + [ + -117.672653, + 33.65212 + ], + [ + -117.672698, + 33.652261 + ], + [ + -117.672524, + 33.652598 + ], + [ + -117.672511, + 33.652659 + ], + [ + -117.672281, + 33.652632 + ], + [ + -117.672253, + 33.652309 + ], + [ + -117.672237, + 33.651976 + ], + [ + -117.672134, + 33.651686 + ], + [ + -117.672239, + 33.651335 + ], + [ + -117.672207, + 33.651102 + ], + [ + -117.672222, + 33.650923 + ], + [ + -117.672295, + 33.650776 + ], + [ + -117.672482, + 33.65055 + ], + [ + -117.672656, + 33.650308 + ], + [ + -117.672636, + 33.650034 + ], + [ + -117.672827, + 33.64973 + ], + [ + -117.672978, + 33.649598 + ], + [ + -117.673114, + 33.649434 + ], + [ + -117.673279, + 33.648886 + ], + [ + -117.673313, + 33.64867 + ], + [ + -117.673294, + 33.64824 + ], + [ + -117.673312, + 33.647777 + ], + [ + -117.673229, + 33.647482 + ], + [ + -117.673349, + 33.647082 + ], + [ + -117.673293, + 33.646833 + ], + [ + -117.673313, + 33.646522 + ], + [ + -117.673239, + 33.646266 + ], + [ + -117.673409, + 33.646154 + ], + [ + -117.673405, + 33.645576 + ], + [ + -117.67357, + 33.645451 + ], + [ + -117.673519, + 33.642522 + ], + [ + -117.673371, + 33.641638 + ], + [ + -117.673322, + 33.641598 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 365157914, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.710233, + 33.52751 + ], + [ + -117.709863, + 33.527875 + ], + [ + -117.709609, + 33.528217 + ], + [ + -117.709352, + 33.528569 + ], + [ + -117.7091, + 33.528883 + ], + [ + -117.708908, + 33.529097 + ], + [ + -117.708603, + 33.529372 + ], + [ + -117.70837, + 33.529564 + ], + [ + -117.708212, + 33.529698 + ], + [ + -117.707996, + 33.529848 + ], + [ + -117.707811, + 33.52997 + ], + [ + -117.707607, + 33.530086 + ], + [ + -117.707297, + 33.53025 + ], + [ + -117.706947, + 33.530414 + ], + [ + -117.706594, + 33.530574 + ], + [ + -117.706303, + 33.530712 + ], + [ + -117.706008, + 33.530858 + ], + [ + -117.706356, + 33.53102 + ], + [ + -117.706659, + 33.531171 + ], + [ + -117.706884, + 33.531259 + ], + [ + -117.70752, + 33.531459 + ], + [ + -117.707811, + 33.53179 + ], + [ + -117.707919, + 33.531883 + ], + [ + -117.708146, + 33.53201 + ], + [ + -117.708082, + 33.532265 + ], + [ + -117.707988, + 33.532425 + ], + [ + -117.707928, + 33.532683 + ], + [ + -117.707941, + 33.532892 + ], + [ + -117.707979, + 33.533084 + ], + [ + -117.707955, + 33.533292 + ], + [ + -117.707926, + 33.533454 + ], + [ + -117.707902, + 33.533554 + ], + [ + -117.708075, + 33.533612 + ], + [ + -117.708322, + 33.533682 + ], + [ + -117.708454, + 33.53363 + ], + [ + -117.708555, + 33.533454 + ], + [ + -117.708704, + 33.533114 + ], + [ + -117.708798, + 33.533024 + ], + [ + -117.708874, + 33.532708 + ], + [ + -117.709184, + 33.532697 + ], + [ + -117.709374, + 33.532756 + ], + [ + -117.709604, + 33.532884 + ], + [ + -117.70969, + 33.533032 + ], + [ + -117.70958, + 33.53323 + ], + [ + -117.709537, + 33.53332 + ], + [ + -117.709563, + 33.533422 + ], + [ + -117.709659, + 33.53345 + ], + [ + -117.709789, + 33.533456 + ], + [ + -117.710043, + 33.533448 + ], + [ + -117.710163, + 33.533462 + ], + [ + -117.710324, + 33.5335 + ], + [ + -117.710468, + 33.533478 + ], + [ + -117.710641, + 33.533436 + ], + [ + -117.710716, + 33.53339 + ], + [ + -117.710777, + 33.533062 + ], + [ + -117.710809, + 33.532787 + ], + [ + -117.710778, + 33.532481 + ], + [ + -117.710867, + 33.532303 + ], + [ + -117.710937, + 33.532195 + ], + [ + -117.710984, + 33.531991 + ], + [ + -117.711023, + 33.531757 + ], + [ + -117.71103, + 33.531535 + ], + [ + -117.711052, + 33.531265 + ], + [ + -117.7111, + 33.531081 + ], + [ + -117.71114, + 33.530895 + ], + [ + -117.711258, + 33.530666 + ], + [ + -117.71139, + 33.530404 + ], + [ + -117.711602, + 33.530128 + ], + [ + -117.711738, + 33.529846 + ], + [ + -117.711774, + 33.529766 + ], + [ + -117.711585, + 33.529622 + ], + [ + -117.711359, + 33.529476 + ], + [ + -117.711162, + 33.529249 + ], + [ + -117.710956, + 33.528953 + ], + [ + -117.71073, + 33.528579 + ], + [ + -117.710567, + 33.528289 + ], + [ + -117.710564, + 33.528011 + ], + [ + -117.710588, + 33.527895 + ], + [ + -117.710233, + 33.52751 + ] + ] + ] + }, + "properties": { + "name": "Crown Valley Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 367551495, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.837345, + 33.877232 + ], + [ + -117.837315, + 33.874261 + ], + [ + -117.837418, + 33.874201 + ], + [ + -117.837507, + 33.874208 + ], + [ + -117.837672, + 33.874208 + ], + [ + -117.83829, + 33.874226 + ], + [ + -117.838669, + 33.874285 + ], + [ + -117.838696, + 33.875929 + ], + [ + -117.839625, + 33.875929 + ], + [ + -117.839626, + 33.876908 + ], + [ + -117.83857, + 33.876907 + ], + [ + -117.838578, + 33.877252 + ], + [ + -117.838394, + 33.877316 + ], + [ + -117.838384, + 33.87732 + ], + [ + -117.83835, + 33.877332 + ], + [ + -117.838291, + 33.877353 + ], + [ + -117.838216, + 33.877367 + ], + [ + -117.837846, + 33.877375 + ], + [ + -117.837699, + 33.877345 + ], + [ + -117.837393, + 33.877273 + ], + [ + -117.837345, + 33.877232 + ] + ] + ] + }, + "properties": { + "name": "Placentia Champions Sports Complex", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 367552169, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.825647, + 33.920104 + ], + [ + -117.825733, + 33.918998 + ], + [ + -117.825729, + 33.918295 + ], + [ + -117.826382, + 33.918578 + ], + [ + -117.826695, + 33.918252 + ], + [ + -117.826753, + 33.918253 + ], + [ + -117.828404, + 33.918302 + ], + [ + -117.829483, + 33.918351 + ], + [ + -117.831014, + 33.918387 + ], + [ + -117.835099, + 33.91845 + ], + [ + -117.835483, + 33.918062 + ], + [ + -117.835487, + 33.91805 + ], + [ + -117.835867, + 33.91699 + ], + [ + -117.836471, + 33.916659 + ], + [ + -117.836904, + 33.916481 + ], + [ + -117.83698, + 33.916449 + ], + [ + -117.837001, + 33.916434 + ], + [ + -117.837028, + 33.916435 + ], + [ + -117.837316, + 33.916384 + ], + [ + -117.837401, + 33.916382 + ], + [ + -117.83755, + 33.916405 + ], + [ + -117.837785, + 33.916415 + ], + [ + -117.837893, + 33.916383 + ], + [ + -117.838046, + 33.916319 + ], + [ + -117.838091, + 33.916313 + ], + [ + -117.838206, + 33.916245 + ], + [ + -117.838275, + 33.916142 + ], + [ + -117.838304, + 33.916017 + ], + [ + -117.838301, + 33.915664 + ], + [ + -117.838348, + 33.915478 + ], + [ + -117.838415, + 33.915388 + ], + [ + -117.838551, + 33.915271 + ], + [ + -117.838723, + 33.915141 + ], + [ + -117.838729, + 33.915068 + ], + [ + -117.83868, + 33.915012 + ], + [ + -117.838633, + 33.915005 + ], + [ + -117.838526, + 33.915063 + ], + [ + -117.838457, + 33.91512 + ], + [ + -117.838307, + 33.915173 + ], + [ + -117.838143, + 33.915208 + ], + [ + -117.837941, + 33.9152 + ], + [ + -117.837812, + 33.915227 + ], + [ + -117.837686, + 33.915286 + ], + [ + -117.837603, + 33.915338 + ], + [ + -117.837581, + 33.915291 + ], + [ + -117.837636, + 33.915206 + ], + [ + -117.837766, + 33.915038 + ], + [ + -117.837809, + 33.914993 + ], + [ + -117.837844, + 33.91493 + ], + [ + -117.837803, + 33.914844 + ], + [ + -117.83772, + 33.914838 + ], + [ + -117.837627, + 33.914907 + ], + [ + -117.837461, + 33.914984 + ], + [ + -117.837307, + 33.915037 + ], + [ + -117.83701, + 33.915042 + ], + [ + -117.836743, + 33.915099 + ], + [ + -117.836594, + 33.915139 + ], + [ + -117.836499, + 33.915147 + ], + [ + -117.836318, + 33.915112 + ], + [ + -117.836095, + 33.915096 + ], + [ + -117.835924, + 33.91509 + ], + [ + -117.835753, + 33.915072 + ], + [ + -117.835668, + 33.915094 + ], + [ + -117.835514, + 33.915205 + ], + [ + -117.835387, + 33.915293 + ], + [ + -117.835318, + 33.915306 + ], + [ + -117.83525, + 33.915306 + ], + [ + -117.835169, + 33.915306 + ], + [ + -117.834961, + 33.915227 + ], + [ + -117.834776, + 33.915076 + ], + [ + -117.834627, + 33.914896 + ], + [ + -117.834468, + 33.914651 + ], + [ + -117.83434, + 33.914643 + ], + [ + -117.834201, + 33.914669 + ], + [ + -117.833719, + 33.914735 + ], + [ + -117.833543, + 33.914519 + ], + [ + -117.833915, + 33.914288 + ], + [ + -117.83394, + 33.91408 + ], + [ + -117.833542, + 33.913625 + ], + [ + -117.833844, + 33.913477 + ], + [ + -117.834167, + 33.91367 + ], + [ + -117.834586, + 33.913841 + ], + [ + -117.835061, + 33.914032 + ], + [ + -117.835299, + 33.914173 + ], + [ + -117.835353, + 33.914163 + ], + [ + -117.835589, + 33.91407 + ], + [ + -117.835806, + 33.914181 + ], + [ + -117.836086, + 33.914369 + ], + [ + -117.836187, + 33.914239 + ], + [ + -117.836249, + 33.914158 + ], + [ + -117.836225, + 33.914055 + ], + [ + -117.836155, + 33.913845 + ], + [ + -117.836164, + 33.913728 + ], + [ + -117.836272, + 33.913454 + ], + [ + -117.836398, + 33.913119 + ], + [ + -117.836431, + 33.913024 + ], + [ + -117.836667, + 33.911916 + ], + [ + -117.836817, + 33.911517 + ], + [ + -117.83686, + 33.911587 + ], + [ + -117.838075, + 33.912254 + ], + [ + -117.838772, + 33.912669 + ], + [ + -117.841561, + 33.914331 + ], + [ + -117.841913, + 33.91449 + ], + [ + -117.841896, + 33.914731 + ], + [ + -117.842379, + 33.914766 + ], + [ + -117.842507, + 33.915118 + ], + [ + -117.842395, + 33.915406 + ], + [ + -117.841755, + 33.915646 + ], + [ + -117.841819, + 33.916206 + ], + [ + -117.841819, + 33.91643 + ], + [ + -117.841723, + 33.916702 + ], + [ + -117.841577, + 33.916821 + ], + [ + -117.841578, + 33.917084 + ], + [ + -117.841343, + 33.917557 + ], + [ + -117.841213, + 33.918114 + ], + [ + -117.841018, + 33.918509 + ], + [ + -117.840935, + 33.918631 + ], + [ + -117.840266, + 33.9196 + ], + [ + -117.839901, + 33.920131 + ], + [ + -117.839558, + 33.920924 + ], + [ + -117.839692, + 33.921489 + ], + [ + -117.840197, + 33.922379 + ], + [ + -117.840232, + 33.922481 + ], + [ + -117.84027, + 33.922657 + ], + [ + -117.840254, + 33.922953 + ], + [ + -117.837934, + 33.922392 + ], + [ + -117.837193, + 33.922265 + ], + [ + -117.836869, + 33.922214 + ], + [ + -117.836805, + 33.922259 + ], + [ + -117.835804, + 33.922227 + ], + [ + -117.83453, + 33.922305 + ], + [ + -117.833599, + 33.922328 + ], + [ + -117.833135, + 33.922301 + ], + [ + -117.832215, + 33.922176 + ], + [ + -117.831609, + 33.922014 + ], + [ + -117.830472, + 33.921589 + ], + [ + -117.83018, + 33.921484 + ], + [ + -117.829809, + 33.921362 + ], + [ + -117.828599, + 33.921021 + ], + [ + -117.825647, + 33.920104 + ] + ] + ] + }, + "properties": { + "name": "Carbon Canyon Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 369007506, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.688929, + 33.649411 + ], + [ + -117.688464, + 33.649194 + ], + [ + -117.688478, + 33.64918 + ], + [ + -117.688564, + 33.649051 + ], + [ + -117.68869, + 33.648854 + ], + [ + -117.6889, + 33.648487 + ], + [ + -117.688474, + 33.648304 + ], + [ + -117.68875, + 33.647881 + ], + [ + -117.688776, + 33.64784 + ], + [ + -117.688611, + 33.647607 + ], + [ + -117.68858, + 33.647499 + ], + [ + -117.689326, + 33.64768 + ], + [ + -117.690023, + 33.647281 + ], + [ + -117.690551, + 33.647326 + ], + [ + -117.690976, + 33.647141 + ], + [ + -117.691301, + 33.647255 + ], + [ + -117.691565, + 33.647334 + ], + [ + -117.691775, + 33.647364 + ], + [ + -117.691789, + 33.64746 + ], + [ + -117.692018, + 33.647527 + ], + [ + -117.691852, + 33.647602 + ], + [ + -117.691497, + 33.647835 + ], + [ + -117.690974, + 33.647927 + ], + [ + -117.690583, + 33.648088 + ], + [ + -117.689727, + 33.648546 + ], + [ + -117.689406, + 33.649022 + ], + [ + -117.688929, + 33.649411 + ] + ] + ] + }, + "properties": { + "name": "Serrano Creek Ranch", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 369443357, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.713515, + 33.701586 + ], + [ + -117.713195, + 33.701827 + ], + [ + -117.712885, + 33.702148 + ], + [ + -117.712831, + 33.70207 + ], + [ + -117.712808, + 33.702001 + ], + [ + -117.712783, + 33.701907 + ], + [ + -117.712774, + 33.701664 + ], + [ + -117.712766, + 33.701517 + ], + [ + -117.712731, + 33.70134 + ], + [ + -117.712669, + 33.701212 + ], + [ + -117.712531, + 33.701041 + ], + [ + -117.712336, + 33.700888 + ], + [ + -117.712351, + 33.700868 + ], + [ + -117.71234, + 33.700836 + ], + [ + -117.712409, + 33.700748 + ], + [ + -117.713561, + 33.701549 + ], + [ + -117.713515, + 33.701586 + ] + ] + ] + }, + "properties": { + "name": "Orchard Trail Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 370334022, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.87041, + 33.812215 + ], + [ + -117.870805, + 33.812191 + ], + [ + -117.870859, + 33.812151 + ], + [ + -117.870894, + 33.812151 + ], + [ + -117.873777, + 33.806814 + ], + [ + -117.873845, + 33.806706 + ], + [ + -117.873875, + 33.806509 + ], + [ + -117.873978, + 33.806233 + ], + [ + -117.873254, + 33.806233 + ], + [ + -117.872935, + 33.806921 + ], + [ + -117.872011, + 33.808913 + ], + [ + -117.871211, + 33.810571 + ], + [ + -117.871028, + 33.810928 + ], + [ + -117.87041, + 33.812215 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 370812322, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.741091, + 33.692022 + ], + [ + -117.741285, + 33.691823 + ], + [ + -117.741414, + 33.691911 + ], + [ + -117.74122, + 33.69211 + ], + [ + -117.741091, + 33.692022 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 370812323, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.741401, + 33.691075 + ], + [ + -117.741302, + 33.691009 + ], + [ + -117.741462, + 33.690841 + ], + [ + -117.741562, + 33.690906 + ], + [ + -117.741401, + 33.691075 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 371398228, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.687304, + 33.654635 + ], + [ + -117.687437, + 33.654675 + ], + [ + -117.687551, + 33.654742 + ], + [ + -117.687651, + 33.654855 + ], + [ + -117.687889, + 33.654978 + ], + [ + -117.687588, + 33.655586 + ], + [ + -117.687171, + 33.656429 + ], + [ + -117.686587, + 33.656343 + ], + [ + -117.686606, + 33.656214 + ], + [ + -117.686743, + 33.655943 + ], + [ + -117.687047, + 33.655339 + ], + [ + -117.687178, + 33.655045 + ], + [ + -117.687245, + 33.654838 + ], + [ + -117.687304, + 33.654635 + ] + ] + ] + }, + "properties": { + "name": "Peachwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 372402140, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.73273, + 33.688844 + ], + [ + -117.732767, + 33.688715 + ], + [ + -117.732898, + 33.68843 + ], + [ + -117.733032, + 33.688141 + ], + [ + -117.734059, + 33.688544 + ], + [ + -117.733919, + 33.688873 + ], + [ + -117.733575, + 33.689027 + ], + [ + -117.733268, + 33.689014 + ], + [ + -117.73273, + 33.688844 + ] + ] + ] + }, + "properties": { + "name": "Beacon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 374379059, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.956912, + 33.87831 + ], + [ + -117.957048, + 33.878195 + ], + [ + -117.957265, + 33.87838 + ], + [ + -117.957121, + 33.878494 + ], + [ + -117.956912, + 33.87831 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 375891138, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.922049, + 33.807013 + ], + [ + -117.922041, + 33.807047 + ], + [ + -117.922023, + 33.807079 + ], + [ + -117.922001, + 33.807106 + ], + [ + -117.921977, + 33.807115 + ], + [ + -117.921947, + 33.807119 + ], + [ + -117.921932, + 33.807113 + ], + [ + -117.921923, + 33.807089 + ], + [ + -117.921894, + 33.807087 + ], + [ + -117.921853, + 33.807097 + ], + [ + -117.921819, + 33.807112 + ], + [ + -117.921814, + 33.807112 + ], + [ + -117.921876, + 33.807077 + ], + [ + -117.921991, + 33.807071 + ], + [ + -117.921988, + 33.806973 + ], + [ + -117.92201, + 33.806968 + ], + [ + -117.922013, + 33.806997 + ], + [ + -117.922051, + 33.806991 + ], + [ + -117.922049, + 33.807013 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 376743517, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.727619, + 33.700748 + ], + [ + -117.727462, + 33.700713 + ], + [ + -117.727437, + 33.700805 + ], + [ + -117.727459, + 33.700824 + ], + [ + -117.727482, + 33.700836 + ], + [ + -117.727513, + 33.700843 + ], + [ + -117.727545, + 33.700845 + ], + [ + -117.727569, + 33.700842 + ], + [ + -117.727596, + 33.700835 + ], + [ + -117.727619, + 33.700748 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 376743518, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.728611, + 33.701256 + ], + [ + -117.726984, + 33.700139 + ], + [ + -117.726916, + 33.700207 + ], + [ + -117.72689, + 33.700227 + ], + [ + -117.726854, + 33.70023 + ], + [ + -117.726735, + 33.700234 + ], + [ + -117.726478, + 33.70042 + ], + [ + -117.725748, + 33.701158 + ], + [ + -117.725811, + 33.701249 + ], + [ + -117.726058, + 33.701138 + ], + [ + -117.726258, + 33.701053 + ], + [ + -117.726417, + 33.701 + ], + [ + -117.726595, + 33.700956 + ], + [ + -117.726718, + 33.700933 + ], + [ + -117.726891, + 33.700911 + ], + [ + -117.727093, + 33.700902 + ], + [ + -117.727262, + 33.700905 + ], + [ + -117.727415, + 33.700918 + ], + [ + -117.727567, + 33.70094 + ], + [ + -117.72768, + 33.700962 + ], + [ + -117.727821, + 33.701 + ], + [ + -117.727953, + 33.701039 + ], + [ + -117.728066, + 33.701081 + ], + [ + -117.728183, + 33.701128 + ], + [ + -117.7283, + 33.70119 + ], + [ + -117.728518, + 33.701319 + ], + [ + -117.728536, + 33.701291 + ], + [ + -117.728586, + 33.701285 + ], + [ + -117.728611, + 33.701256 + ] + ] + ] + }, + "properties": { + "name": "Valley Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377552953, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.780086, + 33.731043 + ], + [ + -117.780518, + 33.730603 + ], + [ + -117.780408, + 33.730531 + ], + [ + -117.780767, + 33.730162 + ], + [ + -117.780343, + 33.72987 + ], + [ + -117.779523, + 33.730669 + ], + [ + -117.780086, + 33.731043 + ] + ] + ] + }, + "properties": { + "name": "Homestead Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377553012, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.786655, + 33.73057 + ], + [ + -117.78502, + 33.732127 + ], + [ + -117.78291, + 33.730663 + ], + [ + -117.784535, + 33.72902 + ], + [ + -117.786655, + 33.73057 + ] + ] + ] + }, + "properties": { + "name": "Irvine Ranch Historic Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377896440, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.774054, + 33.700866 + ], + [ + -117.77393, + 33.700937 + ], + [ + -117.773779, + 33.700913 + ], + [ + -117.773654, + 33.700771 + ], + [ + -117.773814, + 33.700667 + ], + [ + -117.773838, + 33.700662 + ], + [ + -117.773868, + 33.700661 + ], + [ + -117.773893, + 33.700662 + ], + [ + -117.77392, + 33.700666 + ], + [ + -117.773961, + 33.700675 + ], + [ + -117.773984, + 33.700689 + ], + [ + -117.774009, + 33.700707 + ], + [ + -117.774024, + 33.700724 + ], + [ + -117.774045, + 33.700751 + ], + [ + -117.774053, + 33.700772 + ], + [ + -117.774057, + 33.700793 + ], + [ + -117.774056, + 33.700823 + ], + [ + -117.774054, + 33.700866 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377915885, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.764462, + 33.691564 + ], + [ + -117.764177, + 33.691358 + ], + [ + -117.764127, + 33.691325 + ], + [ + -117.764095, + 33.691314 + ], + [ + -117.764068, + 33.691313 + ], + [ + -117.764035, + 33.691316 + ], + [ + -117.764003, + 33.691324 + ], + [ + -117.763975, + 33.691338 + ], + [ + -117.76395, + 33.691358 + ], + [ + -117.763934, + 33.691377 + ], + [ + -117.763704, + 33.691625 + ], + [ + -117.763798, + 33.691688 + ], + [ + -117.763813, + 33.69172 + ], + [ + -117.763835, + 33.691743 + ], + [ + -117.763867, + 33.691776 + ], + [ + -117.763907, + 33.691801 + ], + [ + -117.76395, + 33.691825 + ], + [ + -117.764001, + 33.691839 + ], + [ + -117.764059, + 33.691846 + ], + [ + -117.764123, + 33.691845 + ], + [ + -117.764184, + 33.691832 + ], + [ + -117.764229, + 33.691818 + ], + [ + -117.764278, + 33.691793 + ], + [ + -117.764318, + 33.691757 + ], + [ + -117.764349, + 33.691722 + ], + [ + -117.764369, + 33.69169 + ], + [ + -117.764384, + 33.691655 + ], + [ + -117.764388, + 33.691638 + ], + [ + -117.764462, + 33.691564 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377915886, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.764935, + 33.691059 + ], + [ + -117.765219, + 33.691266 + ], + [ + -117.765269, + 33.691299 + ], + [ + -117.7653, + 33.69131 + ], + [ + -117.765327, + 33.691312 + ], + [ + -117.76536, + 33.691309 + ], + [ + -117.765393, + 33.691302 + ], + [ + -117.76542, + 33.691288 + ], + [ + -117.765446, + 33.691268 + ], + [ + -117.765462, + 33.691249 + ], + [ + -117.765694, + 33.691002 + ], + [ + -117.7656, + 33.690938 + ], + [ + -117.765586, + 33.690907 + ], + [ + -117.765564, + 33.690883 + ], + [ + -117.765533, + 33.69085 + ], + [ + -117.765492, + 33.690824 + ], + [ + -117.76545, + 33.690801 + ], + [ + -117.765399, + 33.690786 + ], + [ + -117.765341, + 33.690779 + ], + [ + -117.765277, + 33.690779 + ], + [ + -117.765216, + 33.690792 + ], + [ + -117.76517, + 33.690806 + ], + [ + -117.765122, + 33.690831 + ], + [ + -117.765081, + 33.690866 + ], + [ + -117.76505, + 33.690901 + ], + [ + -117.76503, + 33.690933 + ], + [ + -117.765015, + 33.690968 + ], + [ + -117.76501, + 33.690985 + ], + [ + -117.764935, + 33.691059 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 378054930, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.726495, + 33.700749 + ], + [ + -117.7265, + 33.70077 + ], + [ + -117.726501, + 33.700795 + ], + [ + -117.726499, + 33.700822 + ], + [ + -117.726492, + 33.700847 + ], + [ + -117.72648, + 33.700867 + ], + [ + -117.726462, + 33.700886 + ], + [ + -117.726436, + 33.700902 + ], + [ + -117.726405, + 33.700916 + ], + [ + -117.726376, + 33.700925 + ], + [ + -117.726346, + 33.700928 + ], + [ + -117.72632, + 33.700928 + ], + [ + -117.726292, + 33.700924 + ], + [ + -117.726269, + 33.700918 + ], + [ + -117.726244, + 33.700908 + ], + [ + -117.726225, + 33.700895 + ], + [ + -117.726206, + 33.700878 + ], + [ + -117.726197, + 33.70087 + ], + [ + -117.726226, + 33.700851 + ], + [ + -117.726263, + 33.70083 + ], + [ + -117.726296, + 33.700815 + ], + [ + -117.726328, + 33.700798 + ], + [ + -117.726363, + 33.700785 + ], + [ + -117.726406, + 33.700771 + ], + [ + -117.726432, + 33.700763 + ], + [ + -117.726468, + 33.700754 + ], + [ + -117.726495, + 33.700749 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 378054932, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.750853, + 33.691197 + ], + [ + -117.750692, + 33.691209 + ], + [ + -117.75068, + 33.691095 + ], + [ + -117.750841, + 33.691083 + ], + [ + -117.750853, + 33.691197 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 378054948, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.745727, + 33.707087 + ], + [ + -117.7456, + 33.706998 + ], + [ + -117.745699, + 33.7069 + ], + [ + -117.745826, + 33.706989 + ], + [ + -117.745727, + 33.707087 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 378058031, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.741202, + 33.692236 + ], + [ + -117.740576, + 33.691829 + ], + [ + -117.741499, + 33.690696 + ], + [ + -117.742254, + 33.691216 + ], + [ + -117.742269, + 33.691245 + ], + [ + -117.742264, + 33.691272 + ], + [ + -117.742249, + 33.691294 + ], + [ + -117.741301, + 33.692247 + ], + [ + -117.741272, + 33.692254 + ], + [ + -117.741248, + 33.692253 + ], + [ + -117.741223, + 33.692245 + ], + [ + -117.741202, + 33.692236 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 378058033, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.757445, + 33.687332 + ], + [ + -117.757198, + 33.687156 + ], + [ + -117.757118, + 33.687164 + ], + [ + -117.756924, + 33.687377 + ], + [ + -117.756985, + 33.687417 + ], + [ + -117.756996, + 33.687449 + ], + [ + -117.757015, + 33.687475 + ], + [ + -117.757048, + 33.6875 + ], + [ + -117.757079, + 33.687519 + ], + [ + -117.757114, + 33.687533 + ], + [ + -117.757156, + 33.68754 + ], + [ + -117.757193, + 33.687541 + ], + [ + -117.75723, + 33.687538 + ], + [ + -117.757259, + 33.687531 + ], + [ + -117.757287, + 33.68752 + ], + [ + -117.757318, + 33.687502 + ], + [ + -117.757341, + 33.687483 + ], + [ + -117.75736, + 33.687465 + ], + [ + -117.757372, + 33.687445 + ], + [ + -117.757383, + 33.687427 + ], + [ + -117.75739, + 33.68741 + ], + [ + -117.757395, + 33.687386 + ], + [ + -117.757445, + 33.687332 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 378058038, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.716883, + 33.695095 + ], + [ + -117.717056, + 33.694921 + ], + [ + -117.717176, + 33.695004 + ], + [ + -117.717003, + 33.695178 + ], + [ + -117.716883, + 33.695095 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 378236253, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.789993, + 33.711385 + ], + [ + -117.790115, + 33.711258 + ], + [ + -117.790215, + 33.711324 + ], + [ + -117.790092, + 33.711451 + ], + [ + -117.789993, + 33.711385 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 378399351, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.794339, + 33.704904 + ], + [ + -117.794158, + 33.704782 + ], + [ + -117.794238, + 33.704699 + ], + [ + -117.794419, + 33.704822 + ], + [ + -117.794339, + 33.704904 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 379807442, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.760293, + 33.717039 + ], + [ + -117.760206, + 33.717102 + ], + [ + -117.760169, + 33.717127 + ], + [ + -117.760074, + 33.717187 + ], + [ + -117.759881, + 33.717308 + ], + [ + -117.759778, + 33.717365 + ], + [ + -117.759552, + 33.717487 + ], + [ + -117.759447, + 33.71754 + ], + [ + -117.759362, + 33.717582 + ], + [ + -117.759226, + 33.717644 + ], + [ + -117.758911, + 33.717775 + ], + [ + -117.759329, + 33.718153 + ], + [ + -117.759581, + 33.718448 + ], + [ + -117.759792, + 33.71867 + ], + [ + -117.759826, + 33.718685 + ], + [ + -117.759847, + 33.718695 + ], + [ + -117.759866, + 33.718708 + ], + [ + -117.759889, + 33.718728 + ], + [ + -117.75991, + 33.718756 + ], + [ + -117.759992, + 33.718731 + ], + [ + -117.760243, + 33.718866 + ], + [ + -117.760404, + 33.71875 + ], + [ + -117.760176, + 33.718601 + ], + [ + -117.760196, + 33.718493 + ], + [ + -117.760144, + 33.718467 + ], + [ + -117.760083, + 33.718421 + ], + [ + -117.760061, + 33.718386 + ], + [ + -117.76007, + 33.718336 + ], + [ + -117.760098, + 33.718294 + ], + [ + -117.760152, + 33.718258 + ], + [ + -117.760204, + 33.718242 + ], + [ + -117.760242, + 33.718234 + ], + [ + -117.760271, + 33.718214 + ], + [ + -117.760305, + 33.718181 + ], + [ + -117.760335, + 33.718144 + ], + [ + -117.760373, + 33.718093 + ], + [ + -117.760411, + 33.718033 + ], + [ + -117.760442, + 33.717963 + ], + [ + -117.760477, + 33.71789 + ], + [ + -117.760507, + 33.717841 + ], + [ + -117.760544, + 33.717785 + ], + [ + -117.760592, + 33.717726 + ], + [ + -117.760631, + 33.717684 + ], + [ + -117.760841, + 33.717472 + ], + [ + -117.760575, + 33.717278 + ], + [ + -117.760609, + 33.717251 + ], + [ + -117.760293, + 33.717039 + ] + ] + ] + }, + "properties": { + "name": "Park Paseo Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380116910, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.768011, + 33.735406 + ], + [ + -117.767963, + 33.735403 + ], + [ + -117.767677, + 33.735208 + ], + [ + -117.767668, + 33.73515 + ], + [ + -117.768057, + 33.734757 + ], + [ + -117.768105, + 33.734754 + ], + [ + -117.768398, + 33.734969 + ], + [ + -117.768404, + 33.735017 + ], + [ + -117.768011, + 33.735406 + ] + ] + ] + }, + "properties": { + "name": "Coronado Gardens", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380116911, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.768598, + 33.729755 + ], + [ + -117.768349, + 33.729589 + ], + [ + -117.769069, + 33.728848 + ], + [ + -117.769994, + 33.72947 + ], + [ + -117.770003, + 33.729508 + ], + [ + -117.769287, + 33.730222 + ], + [ + -117.768598, + 33.729755 + ] + ] + ] + }, + "properties": { + "name": "Forest Glen Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380116912, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.765826, + 33.736722 + ], + [ + -117.765312, + 33.736381 + ], + [ + -117.765782, + 33.7359 + ], + [ + -117.765868, + 33.735903 + ], + [ + -117.766293, + 33.736208 + ], + [ + -117.766288, + 33.736283 + ], + [ + -117.765826, + 33.736722 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380116913, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.762798, + 33.733256 + ], + [ + -117.762315, + 33.732925 + ], + [ + -117.762664, + 33.732586 + ], + [ + -117.762757, + 33.73257 + ], + [ + -117.76314, + 33.732834 + ], + [ + -117.763143, + 33.732913 + ], + [ + -117.762798, + 33.733256 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380147588, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.68362, + 33.675072 + ], + [ + -117.681424, + 33.67368 + ], + [ + -117.681342, + 33.673761 + ], + [ + -117.680444, + 33.673174 + ], + [ + -117.680203, + 33.672835 + ], + [ + -117.678932, + 33.67179 + ], + [ + -117.678771, + 33.671857 + ], + [ + -117.67833, + 33.671497 + ], + [ + -117.678301, + 33.671493 + ], + [ + -117.678277, + 33.671484 + ], + [ + -117.678257, + 33.67147 + ], + [ + -117.678237, + 33.671453 + ], + [ + -117.678223, + 33.671434 + ], + [ + -117.67821, + 33.671415 + ], + [ + -117.678133, + 33.671394 + ], + [ + -117.677853, + 33.671116 + ], + [ + -117.677784, + 33.671068 + ], + [ + -117.677515, + 33.670855 + ], + [ + -117.677258, + 33.670718 + ], + [ + -117.67696, + 33.670325 + ], + [ + -117.676918, + 33.670399 + ], + [ + -117.676904, + 33.670455 + ], + [ + -117.676883, + 33.670508 + ], + [ + -117.676847, + 33.670565 + ], + [ + -117.676792, + 33.670606 + ], + [ + -117.676739, + 33.670637 + ], + [ + -117.676664, + 33.670654 + ], + [ + -117.676552, + 33.670678 + ], + [ + -117.676496, + 33.670697 + ], + [ + -117.676478, + 33.670713 + ], + [ + -117.676467, + 33.670722 + ], + [ + -117.676376, + 33.67083 + ], + [ + -117.676743, + 33.67102 + ], + [ + -117.676801, + 33.67108 + ], + [ + -117.676832, + 33.671063 + ], + [ + -117.676867, + 33.671059 + ], + [ + -117.676903, + 33.671064 + ], + [ + -117.67694, + 33.671078 + ], + [ + -117.677128, + 33.671044 + ], + [ + -117.677496, + 33.671254 + ], + [ + -117.677388, + 33.671413 + ], + [ + -117.677768, + 33.671685 + ], + [ + -117.678475, + 33.672258 + ], + [ + -117.678359, + 33.672427 + ], + [ + -117.679091, + 33.672786 + ], + [ + -117.679118, + 33.672842 + ], + [ + -117.679748, + 33.673224 + ], + [ + -117.680896, + 33.673909 + ], + [ + -117.680905, + 33.674082 + ], + [ + -117.681203, + 33.674239 + ], + [ + -117.683311, + 33.675404 + ], + [ + -117.68362, + 33.675072 + ] + ] + ] + }, + "properties": { + "name": "Promenade Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380154700, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.682819, + 33.678261 + ], + [ + -117.682532, + 33.678087 + ], + [ + -117.682518, + 33.678022 + ], + [ + -117.682469, + 33.67796 + ], + [ + -117.681757, + 33.677619 + ], + [ + -117.68227, + 33.677012 + ], + [ + -117.683329, + 33.677592 + ], + [ + -117.683102, + 33.677855 + ], + [ + -117.682922, + 33.678105 + ], + [ + -117.682819, + 33.678261 + ] + ] + ] + }, + "properties": { + "name": "Vista Swim Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380154701, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.685523, + 33.674956 + ], + [ + -117.685293, + 33.674818 + ], + [ + -117.684944, + 33.674363 + ], + [ + -117.685944, + 33.673899 + ], + [ + -117.686227, + 33.674223 + ], + [ + -117.68588, + 33.67452 + ], + [ + -117.685799, + 33.674718 + ], + [ + -117.685523, + 33.674956 + ] + ] + ] + }, + "properties": { + "name": "Oaks Tennis Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 380160198, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.770547, + 33.740817 + ], + [ + -117.770182, + 33.740564 + ], + [ + -117.770055, + 33.740492 + ], + [ + -117.77, + 33.740418 + ], + [ + -117.770154, + 33.740207 + ], + [ + -117.770345, + 33.74001 + ], + [ + -117.770881, + 33.740389 + ], + [ + -117.770893, + 33.740466 + ], + [ + -117.770547, + 33.740817 + ] + ] + ] + }, + "properties": { + "name": "Lower Peters Canyon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 381328562, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.775835, + 33.72068 + ], + [ + -117.776012, + 33.720503 + ], + [ + -117.776137, + 33.720589 + ], + [ + -117.77596, + 33.720766 + ], + [ + -117.775835, + 33.72068 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 385778510, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.77759, + 33.709116 + ], + [ + -117.777387, + 33.709314 + ], + [ + -117.777348, + 33.709301 + ], + [ + -117.777306, + 33.709298 + ], + [ + -117.777276, + 33.709301 + ], + [ + -117.777249, + 33.709313 + ], + [ + -117.776845, + 33.709745 + ], + [ + -117.776807, + 33.709733 + ], + [ + -117.77682, + 33.709691 + ], + [ + -117.776821, + 33.709665 + ], + [ + -117.776819, + 33.709637 + ], + [ + -117.776815, + 33.709615 + ], + [ + -117.776809, + 33.709595 + ], + [ + -117.776799, + 33.709574 + ], + [ + -117.776786, + 33.709554 + ], + [ + -117.776771, + 33.709535 + ], + [ + -117.776752, + 33.709515 + ], + [ + -117.776725, + 33.709493 + ], + [ + -117.776383, + 33.709255 + ], + [ + -117.776372, + 33.709244 + ], + [ + -117.776366, + 33.709232 + ], + [ + -117.776364, + 33.709221 + ], + [ + -117.776363, + 33.70921 + ], + [ + -117.776366, + 33.709201 + ], + [ + -117.776371, + 33.70919 + ], + [ + -117.776378, + 33.709181 + ], + [ + -117.776391, + 33.709172 + ], + [ + -117.776458, + 33.709121 + ], + [ + -117.776516, + 33.709068 + ], + [ + -117.776629, + 33.708956 + ], + [ + -117.776886, + 33.708698 + ], + [ + -117.776898, + 33.708689 + ], + [ + -117.776912, + 33.708681 + ], + [ + -117.776927, + 33.708678 + ], + [ + -117.776943, + 33.708677 + ], + [ + -117.776957, + 33.708679 + ], + [ + -117.776968, + 33.708683 + ], + [ + -117.776984, + 33.708693 + ], + [ + -117.77759, + 33.709116 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 385885526, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.76925, + 33.715339 + ], + [ + -117.769131, + 33.715169 + ], + [ + -117.769249, + 33.715112 + ], + [ + -117.769368, + 33.715282 + ], + [ + -117.76925, + 33.715339 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 385893152, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.763435, + 33.714922 + ], + [ + -117.763197, + 33.714753 + ], + [ + -117.763007, + 33.714951 + ], + [ + -117.762952, + 33.714941 + ], + [ + -117.76291, + 33.714927 + ], + [ + -117.762865, + 33.714909 + ], + [ + -117.762835, + 33.714896 + ], + [ + -117.762805, + 33.714878 + ], + [ + -117.762699, + 33.714794 + ], + [ + -117.762649, + 33.714763 + ], + [ + -117.76264, + 33.714747 + ], + [ + -117.762637, + 33.714721 + ], + [ + -117.762643, + 33.714699 + ], + [ + -117.762656, + 33.714669 + ], + [ + -117.762685, + 33.714642 + ], + [ + -117.762875, + 33.714453 + ], + [ + -117.763043, + 33.714445 + ], + [ + -117.763346, + 33.714649 + ], + [ + -117.763419, + 33.714684 + ], + [ + -117.763488, + 33.714713 + ], + [ + -117.763561, + 33.714739 + ], + [ + -117.763602, + 33.714755 + ], + [ + -117.763435, + 33.714922 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 388347279, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.825793, + 33.669533 + ], + [ + -117.825991, + 33.669337 + ], + [ + -117.826114, + 33.669423 + ], + [ + -117.825915, + 33.669619 + ], + [ + -117.825793, + 33.669533 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 388571672, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818242, + 33.679966 + ], + [ + -117.818016, + 33.679762 + ], + [ + -117.818163, + 33.679649 + ], + [ + -117.818389, + 33.679853 + ], + [ + -117.818242, + 33.679966 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 396426082, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.79891, + 33.690657 + ], + [ + -117.798791, + 33.690667 + ], + [ + -117.798766, + 33.690453 + ], + [ + -117.798885, + 33.690443 + ], + [ + -117.79891, + 33.690657 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 396441145, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.798794, + 33.687038 + ], + [ + -117.798667, + 33.687051 + ], + [ + -117.798639, + 33.68686 + ], + [ + -117.798766, + 33.686847 + ], + [ + -117.798794, + 33.687038 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 396595345, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.787194, + 33.665647 + ], + [ + -117.787299, + 33.665542 + ], + [ + -117.787512, + 33.665692 + ], + [ + -117.787406, + 33.665796 + ], + [ + -117.787194, + 33.665647 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 396595348, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.787273, + 33.666881 + ], + [ + -117.786369, + 33.666259 + ], + [ + -117.787226, + 33.665381 + ], + [ + -117.788148, + 33.666018 + ], + [ + -117.787273, + 33.666881 + ] + ] + ] + }, + "properties": { + "name": "Royal Oak Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 396597971, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.779728, + 33.662757 + ], + [ + -117.779537, + 33.662557 + ], + [ + -117.779693, + 33.662454 + ], + [ + -117.779884, + 33.662654 + ], + [ + -117.779728, + 33.662757 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 400863849, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.916128, + 33.877155 + ], + [ + -117.914733, + 33.877162 + ], + [ + -117.914734, + 33.87718 + ], + [ + -117.914612, + 33.877183 + ], + [ + -117.914612, + 33.877207 + ], + [ + -117.914589, + 33.877204 + ], + [ + -117.914602, + 33.877307 + ], + [ + -117.916181, + 33.877282 + ], + [ + -117.916271, + 33.877284 + ], + [ + -117.916306, + 33.877226 + ], + [ + -117.916143, + 33.877158 + ], + [ + -117.916128, + 33.877155 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 406729494, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.917915, + 33.805548 + ], + [ + -117.917949, + 33.805515 + ], + [ + -117.91798, + 33.805489 + ], + [ + -117.918007, + 33.805466 + ], + [ + -117.918082, + 33.80541 + ], + [ + -117.918105, + 33.805393 + ], + [ + -117.918132, + 33.805388 + ], + [ + -117.918159, + 33.805388 + ], + [ + -117.918185, + 33.805393 + ], + [ + -117.918209, + 33.805404 + ], + [ + -117.918234, + 33.805421 + ], + [ + -117.918247, + 33.805433 + ], + [ + -117.918217, + 33.805452 + ], + [ + -117.918204, + 33.80544 + ], + [ + -117.918191, + 33.80543 + ], + [ + -117.918171, + 33.805419 + ], + [ + -117.918159, + 33.805417 + ], + [ + -117.918144, + 33.805416 + ], + [ + -117.918123, + 33.805419 + ], + [ + -117.918101, + 33.805427 + ], + [ + -117.918078, + 33.805444 + ], + [ + -117.918071, + 33.80544 + ], + [ + -117.918065, + 33.805439 + ], + [ + -117.918056, + 33.80544 + ], + [ + -117.918047, + 33.805443 + ], + [ + -117.918041, + 33.805449 + ], + [ + -117.918038, + 33.805455 + ], + [ + -117.918037, + 33.805462 + ], + [ + -117.918038, + 33.805464 + ], + [ + -117.91803, + 33.80547 + ], + [ + -117.918029, + 33.805474 + ], + [ + -117.918026, + 33.805476 + ], + [ + -117.918023, + 33.805478 + ], + [ + -117.91802, + 33.805479 + ], + [ + -117.918019, + 33.805479 + ], + [ + -117.917999, + 33.805495 + ], + [ + -117.917998, + 33.805499 + ], + [ + -117.917996, + 33.805501 + ], + [ + -117.917992, + 33.805503 + ], + [ + -117.917989, + 33.805504 + ], + [ + -117.917988, + 33.805504 + ], + [ + -117.917986, + 33.805504 + ], + [ + -117.917968, + 33.805518 + ], + [ + -117.917969, + 33.805522 + ], + [ + -117.917968, + 33.805525 + ], + [ + -117.917966, + 33.805528 + ], + [ + -117.917963, + 33.80553 + ], + [ + -117.917959, + 33.805531 + ], + [ + -117.917958, + 33.805531 + ], + [ + -117.917956, + 33.80553 + ], + [ + -117.917935, + 33.805551 + ], + [ + -117.917936, + 33.805555 + ], + [ + -117.917935, + 33.805558 + ], + [ + -117.917933, + 33.805561 + ], + [ + -117.917929, + 33.805563 + ], + [ + -117.917926, + 33.805563 + ], + [ + -117.917925, + 33.805564 + ], + [ + -117.917901, + 33.805594 + ], + [ + -117.917923, + 33.805607 + ], + [ + -117.917921, + 33.805608 + ], + [ + -117.917918, + 33.80561 + ], + [ + -117.917916, + 33.805612 + ], + [ + -117.917915, + 33.805615 + ], + [ + -117.917916, + 33.805618 + ], + [ + -117.917917, + 33.80562 + ], + [ + -117.917919, + 33.805623 + ], + [ + -117.917923, + 33.805624 + ], + [ + -117.917927, + 33.805625 + ], + [ + -117.917931, + 33.805624 + ], + [ + -117.917893, + 33.805672 + ], + [ + -117.91796, + 33.8057 + ], + [ + -117.917952, + 33.805708 + ], + [ + -117.917923, + 33.805756 + ], + [ + -117.917806, + 33.805712 + ], + [ + -117.917861, + 33.805618 + ], + [ + -117.917915, + 33.805548 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 407456098, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.766012, + 33.796413 + ], + [ + -117.765993, + 33.796423 + ], + [ + -117.765979, + 33.796434 + ], + [ + -117.765965, + 33.796451 + ], + [ + -117.765958, + 33.796451 + ], + [ + -117.765946, + 33.796454 + ], + [ + -117.765937, + 33.79646 + ], + [ + -117.765933, + 33.796466 + ], + [ + -117.765903, + 33.796475 + ], + [ + -117.765889, + 33.796479 + ], + [ + -117.765875, + 33.796481 + ], + [ + -117.765866, + 33.796482 + ], + [ + -117.765857, + 33.796481 + ], + [ + -117.765854, + 33.796474 + ], + [ + -117.765845, + 33.796468 + ], + [ + -117.765834, + 33.796466 + ], + [ + -117.765825, + 33.79647 + ], + [ + -117.765767, + 33.796434 + ], + [ + -117.765785, + 33.796418 + ], + [ + -117.765693, + 33.796348 + ], + [ + -117.765678, + 33.796362 + ], + [ + -117.765639, + 33.796337 + ], + [ + -117.765619, + 33.796326 + ], + [ + -117.765597, + 33.796316 + ], + [ + -117.765583, + 33.796308 + ], + [ + -117.765571, + 33.796298 + ], + [ + -117.765553, + 33.796277 + ], + [ + -117.765714, + 33.796209 + ], + [ + -117.765733, + 33.796237 + ], + [ + -117.765762, + 33.796224 + ], + [ + -117.765799, + 33.796284 + ], + [ + -117.765834, + 33.796268 + ], + [ + -117.765872, + 33.796326 + ], + [ + -117.765902, + 33.796313 + ], + [ + -117.765921, + 33.796341 + ], + [ + -117.76596, + 33.796325 + ], + [ + -117.766012, + 33.796413 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 407456101, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.7665, + 33.796783 + ], + [ + -117.766497, + 33.796777 + ], + [ + -117.766517, + 33.796769 + ], + [ + -117.766505, + 33.79675 + ], + [ + -117.766485, + 33.796759 + ], + [ + -117.766441, + 33.796687 + ], + [ + -117.766434, + 33.79669 + ], + [ + -117.766412, + 33.796655 + ], + [ + -117.766218, + 33.796737 + ], + [ + -117.766233, + 33.796762 + ], + [ + -117.766301, + 33.796873 + ], + [ + -117.766337, + 33.796858 + ], + [ + -117.76637, + 33.796878 + ], + [ + -117.76637, + 33.79688 + ], + [ + -117.766369, + 33.796881 + ], + [ + -117.7663, + 33.79691 + ], + [ + -117.766293, + 33.796907 + ], + [ + -117.766284, + 33.796893 + ], + [ + -117.76621, + 33.796771 + ], + [ + -117.766136, + 33.796802 + ], + [ + -117.766111, + 33.796813 + ], + [ + -117.766145, + 33.79687 + ], + [ + -117.766127, + 33.796881 + ], + [ + -117.766097, + 33.796889 + ], + [ + -117.766066, + 33.796894 + ], + [ + -117.766028, + 33.796912 + ], + [ + -117.765995, + 33.796925 + ], + [ + -117.765979, + 33.796941 + ], + [ + -117.765958, + 33.796973 + ], + [ + -117.765935, + 33.796965 + ], + [ + -117.766029, + 33.796748 + ], + [ + -117.766037, + 33.796748 + ], + [ + -117.766049, + 33.796747 + ], + [ + -117.766065, + 33.796744 + ], + [ + -117.766088, + 33.796739 + ], + [ + -117.766121, + 33.796733 + ], + [ + -117.766158, + 33.796723 + ], + [ + -117.766196, + 33.796711 + ], + [ + -117.766234, + 33.796698 + ], + [ + -117.766269, + 33.796684 + ], + [ + -117.766299, + 33.796671 + ], + [ + -117.766329, + 33.796659 + ], + [ + -117.766362, + 33.796647 + ], + [ + -117.766385, + 33.796644 + ], + [ + -117.766405, + 33.796644 + ], + [ + -117.766416, + 33.796645 + ], + [ + -117.76643, + 33.796649 + ], + [ + -117.76644, + 33.796655 + ], + [ + -117.766466, + 33.796677 + ], + [ + -117.766502, + 33.796709 + ], + [ + -117.766526, + 33.796726 + ], + [ + -117.766546, + 33.796738 + ], + [ + -117.766518, + 33.796775 + ], + [ + -117.7665, + 33.796783 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 414353231, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921141, + 33.806661 + ], + [ + -117.921126, + 33.806657 + ], + [ + -117.921119, + 33.806648 + ], + [ + -117.92112, + 33.80663 + ], + [ + -117.921126, + 33.806612 + ], + [ + -117.921144, + 33.806603 + ], + [ + -117.921175, + 33.806596 + ], + [ + -117.921226, + 33.8066 + ], + [ + -117.921259, + 33.806612 + ], + [ + -117.921289, + 33.806623 + ], + [ + -117.921348, + 33.806603 + ], + [ + -117.921407, + 33.806602 + ], + [ + -117.921424, + 33.806601 + ], + [ + -117.921452, + 33.806603 + ], + [ + -117.921467, + 33.806606 + ], + [ + -117.921491, + 33.80661 + ], + [ + -117.921538, + 33.806619 + ], + [ + -117.921571, + 33.806647 + ], + [ + -117.921579, + 33.806672 + ], + [ + -117.921594, + 33.806671 + ], + [ + -117.921611, + 33.806648 + ], + [ + -117.921642, + 33.806607 + ], + [ + -117.921697, + 33.806634 + ], + [ + -117.92171, + 33.806601 + ], + [ + -117.921756, + 33.806612 + ], + [ + -117.921785, + 33.806629 + ], + [ + -117.921785, + 33.806658 + ], + [ + -117.921809, + 33.806654 + ], + [ + -117.921829, + 33.806655 + ], + [ + -117.921826, + 33.806635 + ], + [ + -117.921843, + 33.806619 + ], + [ + -117.921859, + 33.806627 + ], + [ + -117.921877, + 33.806629 + ], + [ + -117.921898, + 33.806612 + ], + [ + -117.921915, + 33.806628 + ], + [ + -117.921927, + 33.806646 + ], + [ + -117.921923, + 33.806661 + ], + [ + -117.921925, + 33.806686 + ], + [ + -117.92193, + 33.806723 + ], + [ + -117.921946, + 33.806779 + ], + [ + -117.921943, + 33.806823 + ], + [ + -117.921953, + 33.80685 + ], + [ + -117.921948, + 33.806863 + ], + [ + -117.921957, + 33.806868 + ], + [ + -117.921957, + 33.806908 + ], + [ + -117.92193, + 33.806935 + ], + [ + -117.921933, + 33.806995 + ], + [ + -117.921901, + 33.807028 + ], + [ + -117.921788, + 33.807075 + ], + [ + -117.921814, + 33.807112 + ], + [ + -117.921757, + 33.807143 + ], + [ + -117.921732, + 33.807157 + ], + [ + -117.921722, + 33.807154 + ], + [ + -117.921679, + 33.807143 + ], + [ + -117.921651, + 33.80714 + ], + [ + -117.921635, + 33.80716 + ], + [ + -117.921592, + 33.807199 + ], + [ + -117.921572, + 33.807216 + ], + [ + -117.921552, + 33.807234 + ], + [ + -117.921511, + 33.807243 + ], + [ + -117.921471, + 33.807254 + ], + [ + -117.92142, + 33.807254 + ], + [ + -117.921394, + 33.807222 + ], + [ + -117.921386, + 33.807191 + ], + [ + -117.92139, + 33.807172 + ], + [ + -117.921411, + 33.807141 + ], + [ + -117.921426, + 33.807112 + ], + [ + -117.921434, + 33.807066 + ], + [ + -117.921441, + 33.807052 + ], + [ + -117.921439, + 33.807048 + ], + [ + -117.921439, + 33.807043 + ], + [ + -117.92144, + 33.807038 + ], + [ + -117.921442, + 33.807036 + ], + [ + -117.921446, + 33.807032 + ], + [ + -117.921452, + 33.80703 + ], + [ + -117.921455, + 33.80703 + ], + [ + -117.921458, + 33.807026 + ], + [ + -117.921458, + 33.807021 + ], + [ + -117.921442, + 33.806977 + ], + [ + -117.92141, + 33.806977 + ], + [ + -117.921408, + 33.80697 + ], + [ + -117.921403, + 33.806953 + ], + [ + -117.921396, + 33.806938 + ], + [ + -117.921388, + 33.806924 + ], + [ + -117.921415, + 33.806906 + ], + [ + -117.9214, + 33.806866 + ], + [ + -117.921364, + 33.806824 + ], + [ + -117.921254, + 33.806696 + ], + [ + -117.921245, + 33.806686 + ], + [ + -117.921236, + 33.80668 + ], + [ + -117.921228, + 33.806678 + ], + [ + -117.921149, + 33.806661 + ], + [ + -117.921141, + 33.806661 + ] + ] + ] + }, + "properties": { + "name": "Redwood Creek Challenge Trail", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 422377230, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.916889, + 33.807151 + ], + [ + -117.916442, + 33.807156 + ], + [ + -117.916443, + 33.807405 + ], + [ + -117.916422, + 33.807405 + ], + [ + -117.916419, + 33.807136 + ], + [ + -117.916458, + 33.807136 + ], + [ + -117.916664, + 33.807134 + ], + [ + -117.916714, + 33.807133 + ], + [ + -117.916739, + 33.807133 + ], + [ + -117.91674, + 33.807118 + ], + [ + -117.91678, + 33.807118 + ], + [ + -117.916781, + 33.8071 + ], + [ + -117.91699, + 33.807097 + ], + [ + -117.916991, + 33.807131 + ], + [ + -117.91699, + 33.80715 + ], + [ + -117.916889, + 33.807151 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 431491857, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.615689, + 33.609303 + ], + [ + -117.615581, + 33.609361 + ], + [ + -117.615375, + 33.60937 + ], + [ + -117.615349, + 33.609366 + ], + [ + -117.615331, + 33.609357 + ], + [ + -117.615318, + 33.609336 + ], + [ + -117.615318, + 33.609306 + ], + [ + -117.615262, + 33.609078 + ], + [ + -117.615263, + 33.609054 + ], + [ + -117.615275, + 33.609036 + ], + [ + -117.615297, + 33.609023 + ], + [ + -117.615319, + 33.609015 + ], + [ + -117.615345, + 33.60901 + ], + [ + -117.615373, + 33.609011 + ], + [ + -117.6154, + 33.60902 + ], + [ + -117.615683, + 33.609152 + ], + [ + -117.615669, + 33.609173 + ], + [ + -117.61569, + 33.609194 + ], + [ + -117.615697, + 33.609215 + ], + [ + -117.615691, + 33.609237 + ], + [ + -117.615703, + 33.609254 + ], + [ + -117.615709, + 33.609272 + ], + [ + -117.615703, + 33.609288 + ], + [ + -117.615689, + 33.609303 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 431491858, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.61722, + 33.609004 + ], + [ + -117.617186, + 33.608977 + ], + [ + -117.617147, + 33.608967 + ], + [ + -117.617089, + 33.608979 + ], + [ + -117.617045, + 33.609004 + ], + [ + -117.616986, + 33.609044 + ], + [ + -117.616976, + 33.60906 + ], + [ + -117.617031, + 33.60908 + ], + [ + -117.617064, + 33.609099 + ], + [ + -117.617082, + 33.609126 + ], + [ + -117.617075, + 33.609149 + ], + [ + -117.617045, + 33.609178 + ], + [ + -117.616603, + 33.609376 + ], + [ + -117.616451, + 33.609473 + ], + [ + -117.6164, + 33.609508 + ], + [ + -117.616328, + 33.609578 + ], + [ + -117.616106, + 33.609885 + ], + [ + -117.615879, + 33.610277 + ], + [ + -117.6156, + 33.6107 + ], + [ + -117.615156, + 33.611059 + ], + [ + -117.614691, + 33.610945 + ], + [ + -117.614659, + 33.610693 + ], + [ + -117.61445, + 33.610458 + ], + [ + -117.614399, + 33.610326 + ], + [ + -117.614382, + 33.610303 + ], + [ + -117.614121, + 33.610131 + ], + [ + -117.614089, + 33.610116 + ], + [ + -117.614041, + 33.610101 + ], + [ + -117.613923, + 33.610071 + ], + [ + -117.614032, + 33.609838 + ], + [ + -117.614541, + 33.60992 + ], + [ + -117.614652, + 33.609957 + ], + [ + -117.614735, + 33.609961 + ], + [ + -117.614802, + 33.609947 + ], + [ + -117.614861, + 33.609921 + ], + [ + -117.614957, + 33.609846 + ], + [ + -117.615146, + 33.60968 + ], + [ + -117.615175, + 33.609644 + ], + [ + -117.615311, + 33.609411 + ], + [ + -117.615327, + 33.60937 + ], + [ + -117.615318, + 33.609336 + ], + [ + -117.615318, + 33.609306 + ], + [ + -117.615262, + 33.609078 + ], + [ + -117.615263, + 33.609054 + ], + [ + -117.615275, + 33.609036 + ], + [ + -117.615297, + 33.609023 + ], + [ + -117.615319, + 33.609015 + ], + [ + -117.615345, + 33.60901 + ], + [ + -117.615373, + 33.609011 + ], + [ + -117.6154, + 33.60902 + ], + [ + -117.615683, + 33.609152 + ], + [ + -117.615752, + 33.609192 + ], + [ + -117.616276, + 33.60903 + ], + [ + -117.616665, + 33.608833 + ], + [ + -117.617, + 33.608824 + ], + [ + -117.617183, + 33.608702 + ], + [ + -117.617345, + 33.608671 + ], + [ + -117.61722, + 33.609004 + ] + ] + ] + }, + "properties": { + "name": "Canada Vista", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 432296311, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.820002, + 33.72286 + ], + [ + -117.819847, + 33.722754 + ], + [ + -117.819931, + 33.722669 + ], + [ + -117.820086, + 33.722775 + ], + [ + -117.820002, + 33.72286 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 436474380, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.628446, + 33.665242 + ], + [ + -117.628251, + 33.665052 + ], + [ + -117.628102, + 33.665157 + ], + [ + -117.628306, + 33.665348 + ], + [ + -117.628446, + 33.665242 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 436474890, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.633244, + 33.662543 + ], + [ + -117.633054, + 33.662294 + ], + [ + -117.632256, + 33.662277 + ], + [ + -117.632219, + 33.662323 + ], + [ + -117.632193, + 33.662411 + ], + [ + -117.63217, + 33.662469 + ], + [ + -117.632322, + 33.662529 + ], + [ + -117.632483, + 33.662573 + ], + [ + -117.632599, + 33.662596 + ], + [ + -117.632759, + 33.662604 + ], + [ + -117.632893, + 33.662604 + ], + [ + -117.633083, + 33.662582 + ], + [ + -117.633244, + 33.662543 + ] + ] + ] + }, + "properties": { + "name": "Painted Trails Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 436474891, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.628137, + 33.665688 + ], + [ + -117.628367, + 33.665515 + ], + [ + -117.628532, + 33.665226 + ], + [ + -117.6282, + 33.664916 + ], + [ + -117.628091, + 33.664984 + ], + [ + -117.627841, + 33.664845 + ], + [ + -117.627733, + 33.664953 + ], + [ + -117.627916, + 33.665095 + ], + [ + -117.627645, + 33.665368 + ], + [ + -117.628137, + 33.665688 + ] + ] + ] + }, + "properties": { + "name": "Wandering Trails Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 436481297, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.682473, + 33.669863 + ], + [ + -117.682339, + 33.66977 + ], + [ + -117.682404, + 33.669702 + ], + [ + -117.682429, + 33.669692 + ], + [ + -117.68246, + 33.66969 + ], + [ + -117.682495, + 33.669694 + ], + [ + -117.682517, + 33.669705 + ], + [ + -117.682536, + 33.669719 + ], + [ + -117.682546, + 33.669743 + ], + [ + -117.682548, + 33.669769 + ], + [ + -117.682541, + 33.669796 + ], + [ + -117.682473, + 33.669863 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 436928855, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.636043, + 33.600945 + ], + [ + -117.636624, + 33.600538 + ], + [ + -117.636613, + 33.600406 + ], + [ + -117.636581, + 33.600335 + ], + [ + -117.636132, + 33.600102 + ], + [ + -117.636047, + 33.600093 + ], + [ + -117.635848, + 33.600108 + ], + [ + -117.635665, + 33.600155 + ], + [ + -117.635463, + 33.600264 + ], + [ + -117.635332, + 33.600367 + ], + [ + -117.635898, + 33.600933 + ], + [ + -117.636043, + 33.600945 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 438477544, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.704896, + 33.575319 + ], + [ + -117.705143, + 33.575648 + ], + [ + -117.70505, + 33.575733 + ], + [ + -117.704556, + 33.575883 + ], + [ + -117.704478, + 33.576099 + ], + [ + -117.704267, + 33.5763 + ], + [ + -117.703841, + 33.576352 + ], + [ + -117.703699, + 33.576383 + ], + [ + -117.703724, + 33.576618 + ], + [ + -117.7036, + 33.57672 + ], + [ + -117.703363, + 33.576614 + ], + [ + -117.703292, + 33.57672 + ], + [ + -117.703165, + 33.576785 + ], + [ + -117.703142, + 33.576884 + ], + [ + -117.703023, + 33.577031 + ], + [ + -117.702927, + 33.576682 + ], + [ + -117.703229, + 33.576549 + ], + [ + -117.703334, + 33.576095 + ], + [ + -117.703821, + 33.575904 + ], + [ + -117.704813, + 33.575442 + ], + [ + -117.704896, + 33.575319 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 438614987, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.808796, + 33.723694 + ], + [ + -117.808678, + 33.723702 + ], + [ + -117.808657, + 33.723489 + ], + [ + -117.808775, + 33.723481 + ], + [ + -117.808796, + 33.723694 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 438614988, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.8134, + 33.71973 + ], + [ + -117.81331, + 33.719667 + ], + [ + -117.813474, + 33.719503 + ], + [ + -117.813565, + 33.719566 + ], + [ + -117.8134, + 33.71973 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 440889949, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.04051, + 33.871425 + ], + [ + -118.040506, + 33.871229 + ], + [ + -118.040129, + 33.871234 + ], + [ + -118.040133, + 33.87143 + ], + [ + -118.04051, + 33.871425 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 443149807, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.860781, + 33.87885 + ], + [ + -117.860587, + 33.879255 + ], + [ + -117.86047, + 33.879224 + ], + [ + -117.860331, + 33.879525 + ], + [ + -117.86017, + 33.879471 + ], + [ + -117.86008, + 33.879411 + ], + [ + -117.860039, + 33.879392 + ], + [ + -117.85997, + 33.879388 + ], + [ + -117.859889, + 33.879405 + ], + [ + -117.859848, + 33.879439 + ], + [ + -117.859827, + 33.879473 + ], + [ + -117.85981, + 33.87953 + ], + [ + -117.859507, + 33.879426 + ], + [ + -117.859159, + 33.879307 + ], + [ + -117.859568, + 33.878413 + ], + [ + -117.8599, + 33.878532 + ], + [ + -117.860237, + 33.878652 + ], + [ + -117.860234, + 33.878697 + ], + [ + -117.860275, + 33.878773 + ], + [ + -117.860341, + 33.878805 + ], + [ + -117.860384, + 33.878815 + ], + [ + -117.860475, + 33.878823 + ], + [ + -117.860594, + 33.878826 + ], + [ + -117.860716, + 33.878836 + ], + [ + -117.860781, + 33.87885 + ] + ] + ] + }, + "properties": { + "name": "Goldenrod Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 444853609, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.922492, + 33.809658 + ], + [ + -117.92243, + 33.809627 + ], + [ + -117.922439, + 33.809658 + ], + [ + -117.922451, + 33.809691 + ], + [ + -117.922462, + 33.80972 + ], + [ + -117.922464, + 33.809732 + ], + [ + -117.922483, + 33.809857 + ], + [ + -117.922554, + 33.809988 + ], + [ + -117.922625, + 33.810073 + ], + [ + -117.922764, + 33.810198 + ], + [ + -117.922865, + 33.810274 + ], + [ + -117.92291, + 33.810314 + ], + [ + -117.922973, + 33.81036 + ], + [ + -117.923183, + 33.810523 + ], + [ + -117.923313, + 33.810625 + ], + [ + -117.923433, + 33.810727 + ], + [ + -117.923487, + 33.810781 + ], + [ + -117.923541, + 33.810853 + ], + [ + -117.923583, + 33.810933 + ], + [ + -117.923613, + 33.811042 + ], + [ + -117.923626, + 33.811085 + ], + [ + -117.923656, + 33.8112 + ], + [ + -117.923696, + 33.811368 + ], + [ + -117.923755, + 33.811385 + ], + [ + -117.923779, + 33.811405 + ], + [ + -117.923836, + 33.811776 + ], + [ + -117.923895, + 33.812161 + ], + [ + -117.923895, + 33.812455 + ], + [ + -117.923895, + 33.81247 + ], + [ + -117.923911, + 33.812474 + ], + [ + -117.923944, + 33.812461 + ], + [ + -117.923946, + 33.81228 + ], + [ + -117.923942, + 33.812157 + ], + [ + -117.923936, + 33.812085 + ], + [ + -117.923915, + 33.811903 + ], + [ + -117.923889, + 33.811691 + ], + [ + -117.923849, + 33.811424 + ], + [ + -117.92382, + 33.811187 + ], + [ + -117.923783, + 33.811033 + ], + [ + -117.923727, + 33.810925 + ], + [ + -117.923645, + 33.810827 + ], + [ + -117.923574, + 33.81076 + ], + [ + -117.92346, + 33.810663 + ], + [ + -117.923183, + 33.810437 + ], + [ + -117.923007, + 33.810305 + ], + [ + -117.922779, + 33.810123 + ], + [ + -117.92271, + 33.810075 + ], + [ + -117.922649, + 33.810005 + ], + [ + -117.922615, + 33.809961 + ], + [ + -117.922572, + 33.809888 + ], + [ + -117.922528, + 33.809814 + ], + [ + -117.922519, + 33.809734 + ], + [ + -117.922492, + 33.809658 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 445266760, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.698008, + 33.570172 + ], + [ + -117.697901, + 33.570038 + ], + [ + -117.697907, + 33.569989 + ], + [ + -117.697956, + 33.569945 + ], + [ + -117.697933, + 33.569901 + ], + [ + -117.698009, + 33.56983 + ], + [ + -117.698049, + 33.569811 + ], + [ + -117.698231, + 33.569635 + ], + [ + -117.698296, + 33.569568 + ], + [ + -117.698338, + 33.569503 + ], + [ + -117.698372, + 33.569447 + ], + [ + -117.698403, + 33.569369 + ], + [ + -117.69873, + 33.56949 + ], + [ + -117.698826, + 33.569515 + ], + [ + -117.698915, + 33.569538 + ], + [ + -117.69917, + 33.569604 + ], + [ + -117.699261, + 33.569632 + ], + [ + -117.699342, + 33.569662 + ], + [ + -117.699621, + 33.56966 + ], + [ + -117.699657, + 33.569937 + ], + [ + -117.699532, + 33.570021 + ], + [ + -117.69937, + 33.569997 + ], + [ + -117.699169, + 33.570014 + ], + [ + -117.698863, + 33.570023 + ], + [ + -117.698717, + 33.570047 + ], + [ + -117.698533, + 33.570091 + ], + [ + -117.69812, + 33.570204 + ], + [ + -117.698008, + 33.570172 + ] + ] + ] + }, + "properties": { + "name": "Moulton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 445266762, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.698451, + 33.569986 + ], + [ + -117.698352, + 33.569861 + ], + [ + -117.698469, + 33.569796 + ], + [ + -117.698568, + 33.56992 + ], + [ + -117.698451, + 33.569986 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 445948460, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.635872, + 33.6688 + ], + [ + -117.635869, + 33.668855 + ], + [ + -117.635858, + 33.668908 + ], + [ + -117.635849, + 33.668959 + ], + [ + -117.635834, + 33.669012 + ], + [ + -117.635811, + 33.669059 + ], + [ + -117.635765, + 33.669153 + ], + [ + -117.635679, + 33.669277 + ], + [ + -117.635588, + 33.669367 + ], + [ + -117.635535, + 33.669398 + ], + [ + -117.635518, + 33.669408 + ], + [ + -117.635323, + 33.669503 + ], + [ + -117.635291, + 33.669508 + ], + [ + -117.635245, + 33.669511 + ], + [ + -117.635045, + 33.669539 + ], + [ + -117.634996, + 33.669521 + ], + [ + -117.634951, + 33.669504 + ], + [ + -117.634736, + 33.66946 + ], + [ + -117.634474, + 33.669389 + ], + [ + -117.634463, + 33.669375 + ], + [ + -117.634468, + 33.669347 + ], + [ + -117.634539, + 33.669248 + ], + [ + -117.634625, + 33.669161 + ], + [ + -117.634706, + 33.66911 + ], + [ + -117.634784, + 33.669072 + ], + [ + -117.63486, + 33.669039 + ], + [ + -117.634876, + 33.669032 + ], + [ + -117.634998, + 33.669002 + ], + [ + -117.635023, + 33.668988 + ], + [ + -117.635032, + 33.668972 + ], + [ + -117.635042, + 33.668953 + ], + [ + -117.635066, + 33.668934 + ], + [ + -117.635101, + 33.668911 + ], + [ + -117.635124, + 33.668892 + ], + [ + -117.635156, + 33.668912 + ], + [ + -117.635502, + 33.668864 + ], + [ + -117.6355, + 33.668849 + ], + [ + -117.635872, + 33.6688 + ] + ] + ] + }, + "properties": { + "name": "Proposed Park (Private)", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 454998126, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.821317, + 33.792212 + ], + [ + -117.82155, + 33.791983 + ], + [ + -117.821761, + 33.792131 + ], + [ + -117.821529, + 33.792361 + ], + [ + -117.821317, + 33.792212 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461612199, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.74795, + 33.885076 + ], + [ + -117.747557, + 33.885085 + ], + [ + -117.747291, + 33.885068 + ], + [ + -117.747248, + 33.885012 + ], + [ + -117.747279, + 33.884803 + ], + [ + -117.74733, + 33.884629 + ], + [ + -117.747415, + 33.884481 + ], + [ + -117.747498, + 33.884494 + ], + [ + -117.747604, + 33.88453 + ], + [ + -117.747732, + 33.884602 + ], + [ + -117.747807, + 33.88465 + ], + [ + -117.747874, + 33.884715 + ], + [ + -117.747929, + 33.884803 + ], + [ + -117.747956, + 33.884869 + ], + [ + -117.747966, + 33.884933 + ], + [ + -117.74795, + 33.885076 + ] + ] + ] + }, + "properties": { + "name": "East Side Community Park Baseball Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 464862723, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.996291, + 33.842939 + ], + [ + -117.996295, + 33.842951 + ], + [ + -117.996274, + 33.842961 + ], + [ + -117.996256, + 33.842958 + ], + [ + -117.996238, + 33.842933 + ], + [ + -117.996226, + 33.842908 + ], + [ + -117.996218, + 33.842752 + ], + [ + -117.996213, + 33.842575 + ], + [ + -117.996219, + 33.842474 + ], + [ + -117.996243, + 33.842475 + ], + [ + -117.996255, + 33.842506 + ], + [ + -117.99626, + 33.842527 + ], + [ + -117.996256, + 33.842543 + ], + [ + -117.996249, + 33.84256 + ], + [ + -117.996245, + 33.84258 + ], + [ + -117.996249, + 33.842602 + ], + [ + -117.996249, + 33.842653 + ], + [ + -117.996251, + 33.842686 + ], + [ + -117.99625, + 33.842709 + ], + [ + -117.996249, + 33.842757 + ], + [ + -117.996258, + 33.842781 + ], + [ + -117.996264, + 33.842804 + ], + [ + -117.996267, + 33.84283 + ], + [ + -117.996259, + 33.842856 + ], + [ + -117.99626, + 33.842901 + ], + [ + -117.996271, + 33.842925 + ], + [ + -117.996291, + 33.842939 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 464862730, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.996553, + 33.843087 + ], + [ + -117.996574, + 33.843153 + ], + [ + -117.99659, + 33.8432 + ], + [ + -117.996587, + 33.843236 + ], + [ + -117.996573, + 33.843241 + ], + [ + -117.996522, + 33.843236 + ], + [ + -117.996482, + 33.843209 + ], + [ + -117.996388, + 33.843123 + ], + [ + -117.996381, + 33.843091 + ], + [ + -117.996383, + 33.843085 + ], + [ + -117.996448, + 33.843082 + ], + [ + -117.996528, + 33.843077 + ], + [ + -117.996553, + 33.843087 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 466039173, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.001722, + 33.844788 + ], + [ + -118.001722, + 33.844804 + ], + [ + -118.001708, + 33.844811 + ], + [ + -118.001694, + 33.844807 + ], + [ + -118.001679, + 33.844796 + ], + [ + -118.001679, + 33.844783 + ], + [ + -118.001689, + 33.844766 + ], + [ + -118.001708, + 33.844769 + ], + [ + -118.001717, + 33.844777 + ], + [ + -118.001722, + 33.844788 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468190865, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.610071, + 33.649124 + ], + [ + -117.61009, + 33.649103 + ], + [ + -117.610088, + 33.649074 + ], + [ + -117.610066, + 33.64903 + ], + [ + -117.610043, + 33.648992 + ], + [ + -117.609976, + 33.648875 + ], + [ + -117.609778, + 33.648681 + ], + [ + -117.609633, + 33.648551 + ], + [ + -117.609612, + 33.648493 + ], + [ + -117.609541, + 33.648458 + ], + [ + -117.6095, + 33.648474 + ], + [ + -117.609459, + 33.648465 + ], + [ + -117.609391, + 33.648405 + ], + [ + -117.609354, + 33.64837 + ], + [ + -117.609333, + 33.648356 + ], + [ + -117.609307, + 33.648353 + ], + [ + -117.609266, + 33.648352 + ], + [ + -117.609222, + 33.648367 + ], + [ + -117.609141, + 33.64842 + ], + [ + -117.609081, + 33.648463 + ], + [ + -117.609064, + 33.648487 + ], + [ + -117.609061, + 33.648513 + ], + [ + -117.60907, + 33.648542 + ], + [ + -117.609096, + 33.648573 + ], + [ + -117.609123, + 33.648593 + ], + [ + -117.609143, + 33.648628 + ], + [ + -117.609145, + 33.648668 + ], + [ + -117.609149, + 33.648701 + ], + [ + -117.609152, + 33.64873 + ], + [ + -117.609169, + 33.648744 + ], + [ + -117.609168, + 33.648773 + ], + [ + -117.609196, + 33.648826 + ], + [ + -117.609233, + 33.648875 + ], + [ + -117.609313, + 33.648977 + ], + [ + -117.609305, + 33.648987 + ], + [ + -117.609305, + 33.649003 + ], + [ + -117.609308, + 33.649031 + ], + [ + -117.609332, + 33.649087 + ], + [ + -117.609358, + 33.649145 + ], + [ + -117.609318, + 33.649159 + ], + [ + -117.60928, + 33.649188 + ], + [ + -117.609242, + 33.649206 + ], + [ + -117.609158, + 33.649257 + ], + [ + -117.60909, + 33.649265 + ], + [ + -117.609092, + 33.64932 + ], + [ + -117.609141, + 33.64938 + ], + [ + -117.609229, + 33.649435 + ], + [ + -117.60933, + 33.649469 + ], + [ + -117.60941, + 33.649487 + ], + [ + -117.609559, + 33.649454 + ], + [ + -117.609584, + 33.649375 + ], + [ + -117.609611, + 33.649337 + ], + [ + -117.609629, + 33.64931 + ], + [ + -117.610071, + 33.649124 + ] + ] + ] + }, + "properties": { + "name": "Estrella Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468525744, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.044446, + 33.858542 + ], + [ + -118.043865, + 33.858571 + ], + [ + -118.044023, + 33.858374 + ], + [ + -118.044113, + 33.858301 + ], + [ + -118.044176, + 33.85821 + ], + [ + -118.044354, + 33.858089 + ], + [ + -118.044814, + 33.857779 + ], + [ + -118.044958, + 33.857926 + ], + [ + -118.044901, + 33.857959 + ], + [ + -118.04486, + 33.85803 + ], + [ + -118.044854, + 33.858119 + ], + [ + -118.044838, + 33.85815 + ], + [ + -118.044769, + 33.858087 + ], + [ + -118.044393, + 33.858372 + ], + [ + -118.044454, + 33.858443 + ], + [ + -118.044446, + 33.858542 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468563428, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.783493, + 33.714237 + ], + [ + -117.78318, + 33.714027 + ], + [ + -117.783396, + 33.713807 + ], + [ + -117.783719, + 33.714013 + ], + [ + -117.783493, + 33.714237 + ] + ] + ] + }, + "properties": { + "name": "ITC Volleyball Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468581577, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.936243, + 33.623362 + ], + [ + -117.936673, + 33.62325 + ], + [ + -117.936904, + 33.623238 + ], + [ + -117.93712, + 33.623242 + ], + [ + -117.937614, + 33.623291 + ], + [ + -117.937694, + 33.623298 + ], + [ + -117.937808, + 33.623307 + ], + [ + -117.937974, + 33.623325 + ], + [ + -117.938203, + 33.623338 + ], + [ + -117.938328, + 33.623333 + ], + [ + -117.938485, + 33.623313 + ], + [ + -117.938653, + 33.623264 + ], + [ + -117.938865, + 33.623157 + ], + [ + -117.9389, + 33.623086 + ], + [ + -117.938832, + 33.623056 + ], + [ + -117.938771, + 33.623012 + ], + [ + -117.938307, + 33.622847 + ], + [ + -117.937675, + 33.622661 + ], + [ + -117.937016, + 33.622463 + ], + [ + -117.936847, + 33.62268 + ], + [ + -117.936725, + 33.622803 + ], + [ + -117.936614, + 33.622903 + ], + [ + -117.936518, + 33.622985 + ], + [ + -117.936504, + 33.622998 + ], + [ + -117.936477, + 33.62303 + ], + [ + -117.936454, + 33.623069 + ], + [ + -117.935955, + 33.622933 + ], + [ + -117.93575, + 33.623144 + ], + [ + -117.934511, + 33.622994 + ], + [ + -117.93441, + 33.622981 + ], + [ + -117.933878, + 33.62301 + ], + [ + -117.93359, + 33.623023 + ], + [ + -117.932643, + 33.62306 + ], + [ + -117.931922, + 33.6231 + ], + [ + -117.930403, + 33.62317 + ], + [ + -117.930371, + 33.623184 + ], + [ + -117.93038, + 33.623258 + ], + [ + -117.930397, + 33.623284 + ], + [ + -117.931625, + 33.623234 + ], + [ + -117.931851, + 33.623222 + ], + [ + -117.932826, + 33.623186 + ], + [ + -117.932866, + 33.623184 + ], + [ + -117.933615, + 33.623154 + ], + [ + -117.934393, + 33.623113 + ], + [ + -117.934878, + 33.623164 + ], + [ + -117.93611, + 33.623293 + ], + [ + -117.936243, + 33.623362 + ] + ] + ] + }, + "properties": { + "name": "Sunset View Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468591185, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.925179, + 33.628308 + ], + [ + -117.925655, + 33.628248 + ], + [ + -117.925609, + 33.628413 + ], + [ + -117.925183, + 33.628497 + ], + [ + -117.925178, + 33.628347 + ], + [ + -117.925179, + 33.628308 + ] + ] + ] + }, + "properties": { + "name": "Bolsa Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468697511, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.981013, + 33.891944 + ], + [ + -117.978854, + 33.891333 + ], + [ + -117.978345, + 33.891188 + ], + [ + -117.977092, + 33.891782 + ], + [ + -117.976704, + 33.892012 + ], + [ + -117.976232, + 33.89226 + ], + [ + -117.975712, + 33.892553 + ], + [ + -117.975498, + 33.892623 + ], + [ + -117.975003, + 33.892833 + ], + [ + -117.974735, + 33.89299 + ], + [ + -117.974598, + 33.893186 + ], + [ + -117.974105, + 33.894255 + ], + [ + -117.974057, + 33.895443 + ], + [ + -117.976816, + 33.895475 + ], + [ + -117.976797, + 33.895712 + ], + [ + -117.97681, + 33.896441 + ], + [ + -117.976912, + 33.896569 + ], + [ + -117.977291, + 33.896742 + ], + [ + -117.977741, + 33.896909 + ], + [ + -117.978144, + 33.896884 + ], + [ + -117.97867, + 33.896756 + ], + [ + -117.979081, + 33.896692 + ], + [ + -117.979536, + 33.896848 + ], + [ + -117.980251, + 33.897238 + ], + [ + -117.98141, + 33.897147 + ], + [ + -117.981546, + 33.896613 + ], + [ + -117.981815, + 33.896627 + ], + [ + -117.982557, + 33.89626 + ], + [ + -117.982574, + 33.895581 + ], + [ + -117.981237, + 33.895584 + ], + [ + -117.981238, + 33.89444 + ], + [ + -117.981099, + 33.893738 + ], + [ + -117.981013, + 33.891944 + ] + ] + ] + }, + "properties": { + "name": "Ralph B. Clark Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468697513, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.973989, + 33.886849 + ], + [ + -117.97546, + 33.885329 + ], + [ + -117.97637, + 33.884487 + ], + [ + -117.976578, + 33.884099 + ], + [ + -117.976944, + 33.883956 + ], + [ + -117.97891, + 33.882349 + ], + [ + -117.979417, + 33.880606 + ], + [ + -117.980579, + 33.879555 + ], + [ + -117.98154, + 33.878671 + ], + [ + -117.981497, + 33.878128 + ], + [ + -117.983274, + 33.878133 + ], + [ + -117.982067, + 33.880361 + ], + [ + -117.982161, + 33.881125 + ], + [ + -117.983348, + 33.882844 + ], + [ + -117.983558, + 33.883561 + ], + [ + -117.983187, + 33.883944 + ], + [ + -117.982495, + 33.883932 + ], + [ + -117.980826, + 33.882312 + ], + [ + -117.980492, + 33.882658 + ], + [ + -117.980369, + 33.885044 + ], + [ + -117.980134, + 33.885749 + ], + [ + -117.98022, + 33.886664 + ], + [ + -117.98132, + 33.886145 + ], + [ + -117.982297, + 33.885613 + ], + [ + -117.982472, + 33.885505 + ], + [ + -117.982585, + 33.885434 + ], + [ + -117.983019, + 33.885687 + ], + [ + -117.982993, + 33.886623 + ], + [ + -117.982809, + 33.886873 + ], + [ + -117.982568, + 33.887045 + ], + [ + -117.981935, + 33.887487 + ], + [ + -117.981786, + 33.887606 + ], + [ + -117.981881, + 33.887777 + ], + [ + -117.981937, + 33.887909 + ], + [ + -117.982467, + 33.887799 + ], + [ + -117.983008, + 33.887669 + ], + [ + -117.983249, + 33.887701 + ], + [ + -117.98348, + 33.887745 + ], + [ + -117.983572, + 33.887905 + ], + [ + -117.983545, + 33.888279 + ], + [ + -117.983544, + 33.888391 + ], + [ + -117.983669, + 33.888422 + ], + [ + -117.983689, + 33.888943 + ], + [ + -117.983592, + 33.888938 + ], + [ + -117.983567, + 33.890684 + ], + [ + -117.983487, + 33.891116 + ], + [ + -117.983201, + 33.89239 + ], + [ + -117.983164, + 33.892385 + ], + [ + -117.98304, + 33.892843 + ], + [ + -117.982863, + 33.892825 + ], + [ + -117.98282, + 33.892848 + ], + [ + -117.982805, + 33.892919 + ], + [ + -117.982483, + 33.892906 + ], + [ + -117.982155, + 33.892874 + ], + [ + -117.981806, + 33.892875 + ], + [ + -117.981726, + 33.892176 + ], + [ + -117.981678, + 33.89218 + ], + [ + -117.981677, + 33.892011 + ], + [ + -117.981684, + 33.891571 + ], + [ + -117.982064, + 33.889953 + ], + [ + -117.981951, + 33.889624 + ], + [ + -117.981744, + 33.889582 + ], + [ + -117.981298, + 33.889793 + ], + [ + -117.981361, + 33.889869 + ], + [ + -117.980647, + 33.890301 + ], + [ + -117.980352, + 33.890465 + ], + [ + -117.97995, + 33.890719 + ], + [ + -117.979998, + 33.89079 + ], + [ + -117.979527, + 33.891058 + ], + [ + -117.979504, + 33.891014 + ], + [ + -117.978931, + 33.891245 + ], + [ + -117.978854, + 33.891333 + ], + [ + -117.978345, + 33.891188 + ], + [ + -117.977092, + 33.891782 + ], + [ + -117.976704, + 33.892012 + ], + [ + -117.976232, + 33.89226 + ], + [ + -117.975712, + 33.892553 + ], + [ + -117.975498, + 33.892623 + ], + [ + -117.975003, + 33.892833 + ], + [ + -117.974735, + 33.89299 + ], + [ + -117.974598, + 33.893186 + ], + [ + -117.974105, + 33.894255 + ], + [ + -117.974057, + 33.895443 + ], + [ + -117.973803, + 33.895448 + ], + [ + -117.972354, + 33.895458 + ], + [ + -117.970492, + 33.895448 + ], + [ + -117.97046, + 33.895418 + ], + [ + -117.970407, + 33.895404 + ], + [ + -117.970401, + 33.895119 + ], + [ + -117.970289, + 33.894544 + ], + [ + -117.971083, + 33.894164 + ], + [ + -117.972408, + 33.893586 + ], + [ + -117.972404, + 33.893056 + ], + [ + -117.972472, + 33.893046 + ], + [ + -117.972441, + 33.892437 + ], + [ + -117.972431, + 33.891181 + ], + [ + -117.972398, + 33.890286 + ], + [ + -117.972221, + 33.890251 + ], + [ + -117.972209, + 33.889667 + ], + [ + -117.972429, + 33.889663 + ], + [ + -117.972408, + 33.889343 + ], + [ + -117.972172, + 33.88935 + ], + [ + -117.972156, + 33.888736 + ], + [ + -117.972123, + 33.888416 + ], + [ + -117.972241, + 33.888416 + ], + [ + -117.972333, + 33.888172 + ], + [ + -117.972612, + 33.888104 + ], + [ + -117.972843, + 33.887953 + ], + [ + -117.973265, + 33.887629 + ], + [ + -117.973811, + 33.886986 + ], + [ + -117.974131, + 33.887357 + ], + [ + -117.973638, + 33.888105 + ], + [ + -117.973123, + 33.889031 + ], + [ + -117.973153, + 33.88976 + ], + [ + -117.973442, + 33.890704 + ], + [ + -117.973788, + 33.891195 + ], + [ + -117.974442, + 33.891641 + ], + [ + -117.974829, + 33.891427 + ], + [ + -117.975148, + 33.891078 + ], + [ + -117.976105, + 33.889717 + ], + [ + -117.976406, + 33.888826 + ], + [ + -117.976577, + 33.888354 + ], + [ + -117.977081, + 33.887838 + ], + [ + -117.977124, + 33.887535 + ], + [ + -117.976545, + 33.887624 + ], + [ + -117.976534, + 33.886769 + ], + [ + -117.976534, + 33.88627 + ], + [ + -117.976255, + 33.88595 + ], + [ + -117.975633, + 33.886199 + ], + [ + -117.975054, + 33.886814 + ], + [ + -117.974397, + 33.88724 + ], + [ + -117.973989, + 33.886849 + ] + ] + ] + }, + "properties": { + "name": "Big Tee Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468809488, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.803933, + 33.703084 + ], + [ + -117.803781, + 33.703211 + ], + [ + -117.803779, + 33.703301 + ], + [ + -117.803232, + 33.703759 + ], + [ + -117.803192, + 33.703748 + ], + [ + -117.80312, + 33.703761 + ], + [ + -117.802967, + 33.7039 + ], + [ + -117.802904, + 33.703895 + ], + [ + -117.802865, + 33.703877 + ], + [ + -117.802825, + 33.703851 + ], + [ + -117.802681, + 33.703752 + ], + [ + -117.803548, + 33.702881 + ], + [ + -117.803548, + 33.702832 + ], + [ + -117.803573, + 33.702809 + ], + [ + -117.80362, + 33.702802 + ], + [ + -117.80365, + 33.702809 + ], + [ + -117.803664, + 33.702828 + ], + [ + -117.803664, + 33.702858 + ], + [ + -117.803833, + 33.702996 + ], + [ + -117.803933, + 33.703084 + ] + ] + ] + }, + "properties": { + "name": "Tustin Field Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468809490, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.803833, + 33.702996 + ], + [ + -117.803542, + 33.703297 + ], + [ + -117.8036, + 33.703342 + ], + [ + -117.803655, + 33.703345 + ], + [ + -117.803688, + 33.703309 + ], + [ + -117.803702, + 33.703265 + ], + [ + -117.803715, + 33.703222 + ], + [ + -117.803731, + 33.703193 + ], + [ + -117.803754, + 33.703167 + ], + [ + -117.803795, + 33.703144 + ], + [ + -117.803848, + 33.703108 + ], + [ + -117.803865, + 33.703073 + ], + [ + -117.803823, + 33.703043 + ], + [ + -117.803833, + 33.702996 + ] + ] + ] + }, + "properties": { + "name": "Tustin Field Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468961636, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.838289, + 33.646291 + ], + [ + -117.837741, + 33.646312 + ], + [ + -117.837752, + 33.645702 + ], + [ + -117.838323, + 33.64583 + ], + [ + -117.838289, + 33.646291 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468968459, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.692941, + 33.611016 + ], + [ + -117.692649, + 33.611132 + ], + [ + -117.692391, + 33.610889 + ], + [ + -117.692161, + 33.610448 + ], + [ + -117.691771, + 33.610336 + ], + [ + -117.691694, + 33.609969 + ], + [ + -117.690547, + 33.61001 + ], + [ + -117.69006, + 33.610392 + ], + [ + -117.689643, + 33.610044 + ], + [ + -117.690608, + 33.609206 + ], + [ + -117.690979, + 33.609393 + ], + [ + -117.691312, + 33.609201 + ], + [ + -117.691872, + 33.609236 + ], + [ + -117.692522, + 33.608008 + ], + [ + -117.693501, + 33.607663 + ], + [ + -117.693714, + 33.607237 + ], + [ + -117.694307, + 33.607107 + ], + [ + -117.694547, + 33.607197 + ], + [ + -117.694472, + 33.607329 + ], + [ + -117.693274, + 33.609103 + ], + [ + -117.692955, + 33.60974 + ], + [ + -117.693057, + 33.610773 + ], + [ + -117.692941, + 33.611016 + ] + ] + ] + }, + "properties": { + "name": "Sycamore Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468968888, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.694866, + 33.606603 + ], + [ + -117.695043, + 33.606249 + ], + [ + -117.695623, + 33.606202 + ], + [ + -117.696536, + 33.605612 + ], + [ + -117.697662, + 33.605294 + ], + [ + -117.698837, + 33.604357 + ], + [ + -117.699123, + 33.604152 + ], + [ + -117.699165, + 33.6041 + ], + [ + -117.699543, + 33.603635 + ], + [ + -117.699604, + 33.603669 + ], + [ + -117.700309, + 33.603808 + ], + [ + -117.700946, + 33.60351 + ], + [ + -117.70159, + 33.602671 + ], + [ + -117.702199, + 33.60201 + ], + [ + -117.702702, + 33.603542 + ], + [ + -117.701546, + 33.604486 + ], + [ + -117.700876, + 33.604971 + ], + [ + -117.700425, + 33.60515 + ], + [ + -117.700342, + 33.605146 + ], + [ + -117.7002, + 33.605065 + ], + [ + -117.700133, + 33.604927 + ], + [ + -117.700034, + 33.604791 + ], + [ + -117.699909, + 33.604718 + ], + [ + -117.698943, + 33.60527 + ], + [ + -117.698519, + 33.605972 + ], + [ + -117.698179, + 33.606461 + ], + [ + -117.697577, + 33.606791 + ], + [ + -117.697324, + 33.607199 + ], + [ + -117.697138, + 33.607493 + ], + [ + -117.694866, + 33.606603 + ] + ] + ] + }, + "properties": { + "name": "Aliso Creek Open Space", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468976150, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.694806, + 33.614272 + ], + [ + -117.694799, + 33.614091 + ], + [ + -117.694877, + 33.613807 + ], + [ + -117.695076, + 33.613494 + ], + [ + -117.695246, + 33.613233 + ], + [ + -117.695229, + 33.613172 + ], + [ + -117.695298, + 33.613062 + ], + [ + -117.695333, + 33.613001 + ], + [ + -117.695395, + 33.612996 + ], + [ + -117.695446, + 33.61344 + ], + [ + -117.695381, + 33.61354 + ], + [ + -117.695052, + 33.613901 + ], + [ + -117.694938, + 33.614085 + ], + [ + -117.694806, + 33.614272 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469143250, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.912741, + 33.806365 + ], + [ + -117.912735, + 33.806408 + ], + [ + -117.912709, + 33.806458 + ], + [ + -117.912699, + 33.806494 + ], + [ + -117.912698, + 33.806719 + ], + [ + -117.912641, + 33.806768 + ], + [ + -117.912098, + 33.806768 + ], + [ + -117.912098, + 33.806708 + ], + [ + -117.912655, + 33.806707 + ], + [ + -117.912656, + 33.805952 + ], + [ + -117.912738, + 33.805951 + ], + [ + -117.912741, + 33.806365 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469234020, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.018729, + 33.829411 + ], + [ + -118.017718, + 33.829408 + ], + [ + -118.01769, + 33.829594 + ], + [ + -118.017701, + 33.829634 + ], + [ + -118.017729, + 33.829657 + ], + [ + -118.01814, + 33.829846 + ], + [ + -118.018292, + 33.829849 + ], + [ + -118.018405, + 33.829883 + ], + [ + -118.018522, + 33.829894 + ], + [ + -118.018581, + 33.829916 + ], + [ + -118.018666, + 33.830009 + ], + [ + -118.018733, + 33.830028 + ], + [ + -118.01873, + 33.829549 + ], + [ + -118.018729, + 33.829411 + ] + ] + ] + }, + "properties": { + "name": "Park of College Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469235087, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.018356, + 33.829555 + ], + [ + -118.018308, + 33.829573 + ], + [ + -118.018198, + 33.829574 + ], + [ + -118.018171, + 33.829564 + ], + [ + -118.018157, + 33.829507 + ], + [ + -118.01816, + 33.829487 + ], + [ + -118.018198, + 33.829459 + ], + [ + -118.018272, + 33.829453 + ], + [ + -118.018334, + 33.829471 + ], + [ + -118.018376, + 33.829507 + ], + [ + -118.018356, + 33.829555 + ] + ] + ] + }, + "properties": { + "name": "College Park Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469237729, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.040238, + 33.83634 + ], + [ + -118.040255, + 33.837195 + ], + [ + -118.040356, + 33.837194 + ], + [ + -118.040748, + 33.837191 + ], + [ + -118.041404, + 33.837186 + ], + [ + -118.041407, + 33.836268 + ], + [ + -118.040234, + 33.836266 + ], + [ + -118.040238, + 33.83634 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469237731, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.040967, + 33.837846 + ], + [ + -118.040833, + 33.837846 + ], + [ + -118.040826, + 33.837652 + ], + [ + -118.040967, + 33.837655 + ], + [ + -118.040967, + 33.837846 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469237739, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.014093, + 33.834944 + ], + [ + -118.013429, + 33.834904 + ], + [ + -118.013434, + 33.835458 + ], + [ + -118.013665, + 33.835507 + ], + [ + -118.01384, + 33.835495 + ], + [ + -118.01399, + 33.835418 + ], + [ + -118.014106, + 33.83531 + ], + [ + -118.014151, + 33.835148 + ], + [ + -118.014144, + 33.835032 + ], + [ + -118.014093, + 33.834944 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469284655, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.742029, + 33.617459 + ], + [ + -117.742206, + 33.617195 + ], + [ + -117.741788, + 33.61673 + ], + [ + -117.741677, + 33.616635 + ], + [ + -117.741198, + 33.616226 + ], + [ + -117.741208, + 33.61732 + ], + [ + -117.741627, + 33.617329 + ], + [ + -117.742029, + 33.617459 + ] + ] + ] + }, + "properties": { + "name": "Santa Vittoria Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469808744, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.840587, + 33.6411 + ], + [ + -117.840657, + 33.641064 + ], + [ + -117.840718, + 33.641038 + ], + [ + -117.840737, + 33.641 + ], + [ + -117.840706, + 33.640966 + ], + [ + -117.840622, + 33.640979 + ], + [ + -117.840566, + 33.641002 + ], + [ + -117.840483, + 33.640991 + ], + [ + -117.840436, + 33.640988 + ], + [ + -117.840396, + 33.641013 + ], + [ + -117.840385, + 33.641053 + ], + [ + -117.840436, + 33.641081 + ], + [ + -117.840492, + 33.641081 + ], + [ + -117.840514, + 33.641062 + ], + [ + -117.84054, + 33.641067 + ], + [ + -117.840558, + 33.641087 + ], + [ + -117.840572, + 33.641097 + ], + [ + -117.840587, + 33.6411 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469849635, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.027152, + 33.778513 + ], + [ + -118.02718, + 33.77608 + ], + [ + -118.027085, + 33.776079 + ], + [ + -118.024052, + 33.776066 + ], + [ + -118.024054, + 33.77623 + ], + [ + -118.024062, + 33.777109 + ], + [ + -118.025983, + 33.777132 + ], + [ + -118.026123, + 33.777203 + ], + [ + -118.026184, + 33.777384 + ], + [ + -118.026268, + 33.777614 + ], + [ + -118.026184, + 33.777705 + ], + [ + -118.026184, + 33.778517 + ], + [ + -118.026638, + 33.77852 + ], + [ + -118.02699, + 33.778515 + ], + [ + -118.027152, + 33.778513 + ] + ] + ] + }, + "properties": { + "name": "Edgar Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 470157162, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.912154, + 33.803592 + ], + [ + -117.912128, + 33.803592 + ], + [ + -117.912127, + 33.803676 + ], + [ + -117.912103, + 33.803676 + ], + [ + -117.912104, + 33.80361 + ], + [ + -117.912105, + 33.80357 + ], + [ + -117.911832, + 33.803571 + ], + [ + -117.911831, + 33.803543 + ], + [ + -117.912124, + 33.803543 + ], + [ + -117.912141, + 33.803559 + ], + [ + -117.912154, + 33.803592 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 471342260, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.77155, + 33.865837 + ], + [ + -117.771461, + 33.865625 + ], + [ + -117.771392, + 33.865591 + ], + [ + -117.771311, + 33.86555 + ], + [ + -117.771193, + 33.865571 + ], + [ + -117.771022, + 33.865625 + ], + [ + -117.77114, + 33.865891 + ], + [ + -117.771176, + 33.865929 + ], + [ + -117.771225, + 33.865932 + ], + [ + -117.771351, + 33.865902 + ], + [ + -117.771506, + 33.865861 + ], + [ + -117.77155, + 33.865837 + ] + ] + ] + }, + "properties": { + "name": "Anaheim Play Fields", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 471342711, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.777783, + 33.879601 + ], + [ + -117.777196, + 33.879619 + ], + [ + -117.7771, + 33.879553 + ], + [ + -117.777057, + 33.879056 + ], + [ + -117.777193, + 33.879049 + ], + [ + -117.777319, + 33.879067 + ], + [ + -117.777453, + 33.879103 + ], + [ + -117.77755, + 33.879156 + ], + [ + -117.777633, + 33.879221 + ], + [ + -117.7777, + 33.879301 + ], + [ + -117.777751, + 33.879401 + ], + [ + -117.777783, + 33.879506 + ], + [ + -117.777783, + 33.879601 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 472275049, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.841634, + 33.638406 + ], + [ + -117.841159, + 33.638433 + ], + [ + -117.841285, + 33.638598 + ], + [ + -117.84127, + 33.638895 + ], + [ + -117.841172, + 33.63913 + ], + [ + -117.841022, + 33.639372 + ], + [ + -117.840777, + 33.639629 + ], + [ + -117.840915, + 33.639712 + ], + [ + -117.841045, + 33.639558 + ], + [ + -117.841277, + 33.639376 + ], + [ + -117.841399, + 33.639284 + ], + [ + -117.84144, + 33.63912 + ], + [ + -117.841565, + 33.638865 + ], + [ + -117.841737, + 33.638803 + ], + [ + -117.841634, + 33.638406 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474718848, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.787364, + 33.880357 + ], + [ + -117.787247, + 33.880306 + ], + [ + -117.787196, + 33.88027 + ], + [ + -117.787182, + 33.880206 + ], + [ + -117.78721, + 33.880112 + ], + [ + -117.787584, + 33.879572 + ], + [ + -117.787627, + 33.879508 + ], + [ + -117.787706, + 33.87928 + ], + [ + -117.787711, + 33.879061 + ], + [ + -117.787906, + 33.879053 + ], + [ + -117.787969, + 33.878872 + ], + [ + -117.787973, + 33.878299 + ], + [ + -117.787643, + 33.878308 + ], + [ + -117.787634, + 33.878143 + ], + [ + -117.787966, + 33.878132 + ], + [ + -117.787797, + 33.874642 + ], + [ + -117.787982, + 33.874223 + ], + [ + -117.788162, + 33.873902 + ], + [ + -117.788394, + 33.873618 + ], + [ + -117.788516, + 33.873434 + ], + [ + -117.789149, + 33.872971 + ], + [ + -117.789278, + 33.872865 + ], + [ + -117.789655, + 33.872517 + ], + [ + -117.79008, + 33.872282 + ], + [ + -117.790249, + 33.872171 + ], + [ + -117.790429, + 33.872046 + ], + [ + -117.790584, + 33.871916 + ], + [ + -117.790898, + 33.872124 + ], + [ + -117.790993, + 33.872382 + ], + [ + -117.791013, + 33.872627 + ], + [ + -117.790717, + 33.872651 + ], + [ + -117.790281, + 33.872752 + ], + [ + -117.789922, + 33.87291 + ], + [ + -117.789613, + 33.873113 + ], + [ + -117.78901, + 33.873557 + ], + [ + -117.78872, + 33.873847 + ], + [ + -117.788485, + 33.874143 + ], + [ + -117.788259, + 33.874606 + ], + [ + -117.788191, + 33.87478 + ], + [ + -117.788194, + 33.874941 + ], + [ + -117.788508, + 33.875003 + ], + [ + -117.788253, + 33.875903 + ], + [ + -117.788233, + 33.876143 + ], + [ + -117.788351, + 33.878531 + ], + [ + -117.788355, + 33.878782 + ], + [ + -117.788307, + 33.879077 + ], + [ + -117.788232, + 33.879299 + ], + [ + -117.788041, + 33.879639 + ], + [ + -117.787898, + 33.879825 + ], + [ + -117.787705, + 33.88004 + ], + [ + -117.787364, + 33.880357 + ] + ] + ] + }, + "properties": { + "name": "Kingsbriar Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 474718852, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.781707, + 33.895774 + ], + [ + -117.781644, + 33.895787 + ], + [ + -117.781127, + 33.89566 + ], + [ + -117.781233, + 33.895314 + ], + [ + -117.781283, + 33.895132 + ], + [ + -117.781504, + 33.895022 + ], + [ + -117.781718, + 33.894889 + ], + [ + -117.781879, + 33.894747 + ], + [ + -117.782036, + 33.894593 + ], + [ + -117.782169, + 33.894448 + ], + [ + -117.782326, + 33.894275 + ], + [ + -117.782856, + 33.893676 + ], + [ + -117.782535, + 33.893552 + ], + [ + -117.782613, + 33.893482 + ], + [ + -117.782909, + 33.893577 + ], + [ + -117.782984, + 33.893354 + ], + [ + -117.783026, + 33.89123 + ], + [ + -117.78336, + 33.891259 + ], + [ + -117.783423, + 33.891287 + ], + [ + -117.783437, + 33.891334 + ], + [ + -117.783422, + 33.891429 + ], + [ + -117.783361, + 33.891942 + ], + [ + -117.783326, + 33.892291 + ], + [ + -117.783304, + 33.892631 + ], + [ + -117.783264, + 33.893211 + ], + [ + -117.783242, + 33.89348 + ], + [ + -117.783184, + 33.893692 + ], + [ + -117.783089, + 33.893895 + ], + [ + -117.782952, + 33.894088 + ], + [ + -117.782256, + 33.894947 + ], + [ + -117.781969, + 33.895306 + ], + [ + -117.781818, + 33.895565 + ], + [ + -117.781734, + 33.895735 + ], + [ + -117.781707, + 33.895774 + ] + ] + ] + }, + "properties": { + "name": "Rio del Oro Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 477635181, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.975039, + 33.796247 + ], + [ + -117.975322, + 33.796084 + ], + [ + -117.975219, + 33.79596 + ], + [ + -117.974935, + 33.796122 + ], + [ + -117.975039, + 33.796247 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 479414158, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.687889, + 33.654978 + ], + [ + -117.687651, + 33.654855 + ], + [ + -117.687551, + 33.654742 + ], + [ + -117.687437, + 33.654675 + ], + [ + -117.687304, + 33.654635 + ], + [ + -117.686743, + 33.655943 + ], + [ + -117.686606, + 33.656214 + ], + [ + -117.686587, + 33.656343 + ], + [ + -117.687171, + 33.656429 + ], + [ + -117.687588, + 33.655586 + ], + [ + -117.687889, + 33.654978 + ] + ] + ] + }, + "properties": { + "name": "Peachwood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 479473818, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.666321, + 33.654169 + ], + [ + -117.666305, + 33.654195 + ], + [ + -117.666268, + 33.654224 + ], + [ + -117.66622, + 33.654234 + ], + [ + -117.666158, + 33.65423 + ], + [ + -117.666143, + 33.654217 + ], + [ + -117.666154, + 33.654181 + ], + [ + -117.66619, + 33.654159 + ], + [ + -117.666235, + 33.654146 + ], + [ + -117.666279, + 33.654148 + ], + [ + -117.666313, + 33.654156 + ], + [ + -117.666321, + 33.654169 + ] + ] + ] + }, + "properties": { + "name": "Whispering Hills Play Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 479982918, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.95836, + 33.907455 + ], + [ + -117.958662, + 33.907273 + ], + [ + -117.958802, + 33.907046 + ], + [ + -117.958826, + 33.906643 + ], + [ + -117.958796, + 33.906438 + ], + [ + -117.95766, + 33.906461 + ], + [ + -117.95836, + 33.907455 + ] + ] + ] + }, + "properties": { + "name": "vista del valle park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 480242760, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.852992, + 33.665091 + ], + [ + -117.851263, + 33.66389 + ], + [ + -117.852088, + 33.663224 + ], + [ + -117.853716, + 33.66191 + ], + [ + -117.854542, + 33.662735 + ], + [ + -117.854177, + 33.663141 + ], + [ + -117.853992, + 33.663351 + ], + [ + -117.853943, + 33.663449 + ], + [ + -117.853925, + 33.66356 + ], + [ + -117.853966, + 33.663717 + ], + [ + -117.85404, + 33.663903 + ], + [ + -117.853994, + 33.664083 + ], + [ + -117.85366, + 33.664426 + ], + [ + -117.852992, + 33.665091 + ] + ] + ] + }, + "properties": { + "name": "UCI Arboretum", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 481125615, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.039237, + 33.849906 + ], + [ + -118.039216, + 33.849348 + ], + [ + -118.039006, + 33.849353 + ], + [ + -118.03884, + 33.849411 + ], + [ + -118.038679, + 33.849509 + ], + [ + -118.038593, + 33.849656 + ], + [ + -118.038556, + 33.849772 + ], + [ + -118.03855, + 33.84987 + ], + [ + -118.039237, + 33.849906 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 481125616, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.039278, + 33.848863 + ], + [ + -118.039271, + 33.848537 + ], + [ + -118.038866, + 33.848543 + ], + [ + -118.038873, + 33.848869 + ], + [ + -118.039278, + 33.848863 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 481125617, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.038704, + 33.848816 + ], + [ + -118.0387, + 33.848576 + ], + [ + -118.038181, + 33.848582 + ], + [ + -118.038185, + 33.848822 + ], + [ + -118.038704, + 33.848816 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 481496564, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.829824, + 33.651691 + ], + [ + -117.82981, + 33.651397 + ], + [ + -117.829809, + 33.65137 + ], + [ + -117.829804, + 33.65126 + ], + [ + -117.829798, + 33.651091 + ], + [ + -117.829792, + 33.65108 + ], + [ + -117.829785, + 33.65107 + ], + [ + -117.829722, + 33.65103 + ], + [ + -117.829605, + 33.650984 + ], + [ + -117.829587, + 33.650964 + ], + [ + -117.829573, + 33.650943 + ], + [ + -117.829562, + 33.650878 + ], + [ + -117.828838, + 33.651072 + ], + [ + -117.82844, + 33.651158 + ], + [ + -117.828412, + 33.651198 + ], + [ + -117.828412, + 33.651208 + ], + [ + -117.828646, + 33.65196 + ], + [ + -117.828656, + 33.651993 + ], + [ + -117.829432, + 33.651826 + ], + [ + -117.829471, + 33.651816 + ], + [ + -117.829496, + 33.651808 + ], + [ + -117.829651, + 33.65175 + ], + [ + -117.829687, + 33.651742 + ], + [ + -117.829712, + 33.651741 + ], + [ + -117.829745, + 33.651741 + ], + [ + -117.829746, + 33.651722 + ], + [ + -117.829771, + 33.651699 + ], + [ + -117.829824, + 33.651691 + ] + ] + ] + }, + "properties": { + "name": "Columbia Square Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 484249950, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.997223, + 33.743408 + ], + [ + -117.997198, + 33.743459 + ], + [ + -117.997127, + 33.743482 + ], + [ + -117.997049, + 33.743458 + ], + [ + -117.997029, + 33.743404 + ], + [ + -117.997007, + 33.743402 + ], + [ + -117.996984, + 33.743456 + ], + [ + -117.996917, + 33.743479 + ], + [ + -117.996845, + 33.743457 + ], + [ + -117.996811, + 33.743399 + ], + [ + -117.996843, + 33.743342 + ], + [ + -117.996953, + 33.743308 + ], + [ + -117.996961, + 33.743281 + ], + [ + -117.997006, + 33.743264 + ], + [ + -117.997057, + 33.743281 + ], + [ + -117.997073, + 33.743321 + ], + [ + -117.997193, + 33.743343 + ], + [ + -117.997223, + 33.743408 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 484249951, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.998569, + 33.736393 + ], + [ + -117.998554, + 33.735174 + ], + [ + -117.998256, + 33.735177 + ], + [ + -117.998271, + 33.736396 + ], + [ + -117.998569, + 33.736393 + ] + ] + ] + }, + "properties": { + "name": "Vans off the Wall Skatepark", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 485742538, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.966998, + 33.764713 + ], + [ + -117.966896, + 33.764749 + ], + [ + -117.966864, + 33.76478 + ], + [ + -117.966853, + 33.764825 + ], + [ + -117.966859, + 33.764874 + ], + [ + -117.966899, + 33.764894 + ], + [ + -117.966958, + 33.764905 + ], + [ + -117.96696, + 33.764869 + ], + [ + -117.966995, + 33.764852 + ], + [ + -117.967068, + 33.764834 + ], + [ + -117.967078, + 33.764812 + ], + [ + -117.967068, + 33.764787 + ], + [ + -117.967044, + 33.764776 + ], + [ + -117.966998, + 33.764774 + ], + [ + -117.966979, + 33.764758 + ], + [ + -117.966987, + 33.764733 + ], + [ + -117.966998, + 33.764713 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 485742542, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.966575, + 33.763599 + ], + [ + -117.966574, + 33.763494 + ], + [ + -117.966572, + 33.763353 + ], + [ + -117.966222, + 33.763357 + ], + [ + -117.966225, + 33.763603 + ], + [ + -117.966575, + 33.763599 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486214511, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.914116, + 33.805556 + ], + [ + -117.914132, + 33.805556 + ], + [ + -117.914132, + 33.805673 + ], + [ + -117.914718, + 33.805672 + ], + [ + -117.914718, + 33.805607 + ], + [ + -117.914743, + 33.80561 + ], + [ + -117.914741, + 33.805744 + ], + [ + -117.914691, + 33.805746 + ], + [ + -117.914661, + 33.805762 + ], + [ + -117.914616, + 33.805766 + ], + [ + -117.914582, + 33.805775 + ], + [ + -117.914565, + 33.805789 + ], + [ + -117.914557, + 33.805807 + ], + [ + -117.914565, + 33.805823 + ], + [ + -117.914582, + 33.805836 + ], + [ + -117.914583, + 33.805861 + ], + [ + -117.914256, + 33.805861 + ], + [ + -117.914256, + 33.80589 + ], + [ + -117.914224, + 33.80589 + ], + [ + -117.914225, + 33.806025 + ], + [ + -117.914091, + 33.806027 + ], + [ + -117.914088, + 33.805732 + ], + [ + -117.914111, + 33.80571 + ], + [ + -117.914113, + 33.805693 + ], + [ + -117.914114, + 33.805659 + ], + [ + -117.914116, + 33.805556 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486388803, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.699972, + 33.643194 + ], + [ + -117.699662, + 33.642954 + ], + [ + -117.699297, + 33.643233 + ], + [ + -117.698827, + 33.642969 + ], + [ + -117.698908, + 33.642753 + ], + [ + -117.698967, + 33.642753 + ], + [ + -117.699072, + 33.64248 + ], + [ + -117.699297, + 33.642011 + ], + [ + -117.700322, + 33.641728 + ], + [ + -117.70122, + 33.64144 + ], + [ + -117.701502, + 33.642078 + ], + [ + -117.700834, + 33.642264 + ], + [ + -117.700748, + 33.642331 + ], + [ + -117.700692, + 33.642375 + ], + [ + -117.700651, + 33.642402 + ], + [ + -117.700609, + 33.642431 + ], + [ + -117.700539, + 33.642433 + ], + [ + -117.700456, + 33.642433 + ], + [ + -117.70038, + 33.642409 + ], + [ + -117.700279, + 33.642395 + ], + [ + -117.700193, + 33.642393 + ], + [ + -117.700126, + 33.642404 + ], + [ + -117.700029, + 33.642465 + ], + [ + -117.699981, + 33.642511 + ], + [ + -117.699941, + 33.64257 + ], + [ + -117.699933, + 33.642616 + ], + [ + -117.699935, + 33.642661 + ], + [ + -117.69993, + 33.642728 + ], + [ + -117.699943, + 33.642779 + ], + [ + -117.699989, + 33.642871 + ], + [ + -117.700008, + 33.642898 + ], + [ + -117.700032, + 33.642931 + ], + [ + -117.700048, + 33.642963 + ], + [ + -117.700064, + 33.643 + ], + [ + -117.700056, + 33.643054 + ], + [ + -117.700051, + 33.643119 + ], + [ + -117.700018, + 33.64317 + ], + [ + -117.699972, + 33.643194 + ] + ] + ] + }, + "properties": { + "name": "Lake Forest Sun and Sail Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486459526, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.700019, + 33.642427 + ], + [ + -117.700004, + 33.642444 + ], + [ + -117.699983, + 33.642456 + ], + [ + -117.699968, + 33.642468 + ], + [ + -117.699949, + 33.642482 + ], + [ + -117.69992, + 33.642496 + ], + [ + -117.699885, + 33.642531 + ], + [ + -117.699878, + 33.642558 + ], + [ + -117.699878, + 33.642595 + ], + [ + -117.699771, + 33.642592 + ], + [ + -117.699771, + 33.642533 + ], + [ + -117.699758, + 33.642473 + ], + [ + -117.699736, + 33.642439 + ], + [ + -117.699727, + 33.642393 + ], + [ + -117.69974, + 33.64236 + ], + [ + -117.69975, + 33.642339 + ], + [ + -117.699771, + 33.642315 + ], + [ + -117.699805, + 33.64229 + ], + [ + -117.69985, + 33.642287 + ], + [ + -117.699892, + 33.642312 + ], + [ + -117.69994, + 33.642341 + ], + [ + -117.69998, + 33.64236 + ], + [ + -117.700014, + 33.642382 + ], + [ + -117.700031, + 33.6424 + ], + [ + -117.700019, + 33.642427 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486727645, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.71071, + 33.629481 + ], + [ + -117.710703, + 33.629481 + ], + [ + -117.710696, + 33.629479 + ], + [ + -117.71068, + 33.629473 + ], + [ + -117.710656, + 33.62946 + ], + [ + -117.710648, + 33.629457 + ], + [ + -117.710639, + 33.629455 + ], + [ + -117.710623, + 33.629455 + ], + [ + -117.710602, + 33.629455 + ], + [ + -117.710584, + 33.629452 + ], + [ + -117.710566, + 33.629446 + ], + [ + -117.71055, + 33.629436 + ], + [ + -117.710536, + 33.629424 + ], + [ + -117.710527, + 33.629412 + ], + [ + -117.710523, + 33.629401 + ], + [ + -117.71052, + 33.629386 + ], + [ + -117.710522, + 33.629367 + ], + [ + -117.710527, + 33.629354 + ], + [ + -117.710531, + 33.629339 + ], + [ + -117.710534, + 33.629323 + ], + [ + -117.710534, + 33.629311 + ], + [ + -117.710535, + 33.6293 + ], + [ + -117.710539, + 33.62929 + ], + [ + -117.710548, + 33.629282 + ], + [ + -117.710558, + 33.629276 + ], + [ + -117.71057, + 33.629272 + ], + [ + -117.710583, + 33.629271 + ], + [ + -117.710596, + 33.629274 + ], + [ + -117.710606, + 33.629279 + ], + [ + -117.710613, + 33.629286 + ], + [ + -117.710619, + 33.629293 + ], + [ + -117.710626, + 33.6293 + ], + [ + -117.710637, + 33.629308 + ], + [ + -117.710649, + 33.629315 + ], + [ + -117.710662, + 33.62932 + ], + [ + -117.710675, + 33.629321 + ], + [ + -117.710687, + 33.629322 + ], + [ + -117.710701, + 33.629323 + ], + [ + -117.710714, + 33.629323 + ], + [ + -117.710726, + 33.629325 + ], + [ + -117.710737, + 33.629328 + ], + [ + -117.710749, + 33.629332 + ], + [ + -117.71076, + 33.629338 + ], + [ + -117.710769, + 33.629345 + ], + [ + -117.710776, + 33.629351 + ], + [ + -117.710785, + 33.629364 + ], + [ + -117.710792, + 33.629378 + ], + [ + -117.710796, + 33.62939 + ], + [ + -117.710796, + 33.629403 + ], + [ + -117.710793, + 33.629414 + ], + [ + -117.710786, + 33.629421 + ], + [ + -117.710775, + 33.629429 + ], + [ + -117.710763, + 33.629438 + ], + [ + -117.71075, + 33.629449 + ], + [ + -117.710744, + 33.62946 + ], + [ + -117.710735, + 33.62947 + ], + [ + -117.710727, + 33.629476 + ], + [ + -117.710719, + 33.629479 + ], + [ + -117.71071, + 33.629481 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486894022, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.895898, + 33.671393 + ], + [ + -117.8959, + 33.671373 + ], + [ + -117.89588, + 33.671329 + ], + [ + -117.895854, + 33.671304 + ], + [ + -117.895825, + 33.67129 + ], + [ + -117.89575, + 33.67126 + ], + [ + -117.895712, + 33.671192 + ], + [ + -117.895659, + 33.671146 + ], + [ + -117.895603, + 33.671068 + ], + [ + -117.89557, + 33.67101 + ], + [ + -117.895499, + 33.670982 + ], + [ + -117.895431, + 33.670992 + ], + [ + -117.895389, + 33.671019 + ], + [ + -117.895367, + 33.671053 + ], + [ + -117.895357, + 33.671093 + ], + [ + -117.895371, + 33.671125 + ], + [ + -117.895389, + 33.671165 + ], + [ + -117.895414, + 33.6712 + ], + [ + -117.895443, + 33.671238 + ], + [ + -117.895491, + 33.671276 + ], + [ + -117.895541, + 33.671308 + ], + [ + -117.895595, + 33.671328 + ], + [ + -117.895639, + 33.671344 + ], + [ + -117.895755, + 33.67139 + ], + [ + -117.895882, + 33.671404 + ], + [ + -117.895898, + 33.671393 + ] + ] + ] + }, + "properties": { + "name": "Angels Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 489969536, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.851438, + 33.838142 + ], + [ + -117.851453, + 33.837798 + ], + [ + -117.851456, + 33.837717 + ], + [ + -117.851459, + 33.837656 + ], + [ + -117.851463, + 33.837631 + ], + [ + -117.851464, + 33.837606 + ], + [ + -117.851456, + 33.837577 + ], + [ + -117.851439, + 33.83756 + ], + [ + -117.851412, + 33.837542 + ], + [ + -117.851384, + 33.837531 + ], + [ + -117.851349, + 33.83753 + ], + [ + -117.851322, + 33.837534 + ], + [ + -117.85125, + 33.837533 + ], + [ + -117.85115, + 33.83753 + ], + [ + -117.850918, + 33.837525 + ], + [ + -117.850739, + 33.837522 + ], + [ + -117.850735, + 33.837571 + ], + [ + -117.850737, + 33.83762 + ], + [ + -117.850741, + 33.837665 + ], + [ + -117.850748, + 33.8377 + ], + [ + -117.850759, + 33.837738 + ], + [ + -117.850771, + 33.837769 + ], + [ + -117.850778, + 33.837788 + ], + [ + -117.850796, + 33.837824 + ], + [ + -117.850816, + 33.837855 + ], + [ + -117.850837, + 33.837885 + ], + [ + -117.850873, + 33.837929 + ], + [ + -117.850912, + 33.837968 + ], + [ + -117.850954, + 33.838002 + ], + [ + -117.850993, + 33.838029 + ], + [ + -117.851039, + 33.838056 + ], + [ + -117.85109, + 33.83808 + ], + [ + -117.851139, + 33.8381 + ], + [ + -117.851185, + 33.838113 + ], + [ + -117.851238, + 33.838125 + ], + [ + -117.851297, + 33.838135 + ], + [ + -117.851333, + 33.838138 + ], + [ + -117.851391, + 33.838142 + ], + [ + -117.851438, + 33.838142 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 489973747, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.859112, + 33.836346 + ], + [ + -117.858775, + 33.836393 + ], + [ + -117.858742, + 33.836231 + ], + [ + -117.859079, + 33.836184 + ], + [ + -117.859112, + 33.836346 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 489974147, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.852119, + 33.837493 + ], + [ + -117.852061, + 33.837427 + ], + [ + -117.85207, + 33.837418 + ], + [ + -117.852076, + 33.837403 + ], + [ + -117.852075, + 33.83739 + ], + [ + -117.852069, + 33.837378 + ], + [ + -117.852056, + 33.837367 + ], + [ + -117.852042, + 33.837363 + ], + [ + -117.852025, + 33.837364 + ], + [ + -117.852008, + 33.837369 + ], + [ + -117.851944, + 33.837302 + ], + [ + -117.851983, + 33.837279 + ], + [ + -117.852002, + 33.837271 + ], + [ + -117.852029, + 33.837267 + ], + [ + -117.852058, + 33.837269 + ], + [ + -117.852081, + 33.837273 + ], + [ + -117.852108, + 33.837281 + ], + [ + -117.852132, + 33.837295 + ], + [ + -117.852151, + 33.837311 + ], + [ + -117.852167, + 33.83733 + ], + [ + -117.852182, + 33.837353 + ], + [ + -117.852186, + 33.837376 + ], + [ + -117.852188, + 33.837398 + ], + [ + -117.852184, + 33.837418 + ], + [ + -117.852179, + 33.837438 + ], + [ + -117.85217, + 33.837454 + ], + [ + -117.852157, + 33.837469 + ], + [ + -117.852119, + 33.837493 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 489974148, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.857041, + 33.8367 + ], + [ + -117.856531, + 33.836765 + ], + [ + -117.856521, + 33.836762 + ], + [ + -117.856515, + 33.836757 + ], + [ + -117.856488, + 33.836616 + ], + [ + -117.856492, + 33.836591 + ], + [ + -117.856509, + 33.83657 + ], + [ + -117.856532, + 33.836557 + ], + [ + -117.856948, + 33.836509 + ], + [ + -117.856985, + 33.836514 + ], + [ + -117.857016, + 33.836532 + ], + [ + -117.857032, + 33.83656 + ], + [ + -117.857053, + 33.836683 + ], + [ + -117.85705, + 33.836692 + ], + [ + -117.857041, + 33.8367 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 489981727, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.830584, + 33.799835 + ], + [ + -117.830364, + 33.799834 + ], + [ + -117.830366, + 33.7996 + ], + [ + -117.830586, + 33.799601 + ], + [ + -117.830584, + 33.799835 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 489991269, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.779649, + 33.828257 + ], + [ + -117.779471, + 33.828327 + ], + [ + -117.77933, + 33.828078 + ], + [ + -117.779508, + 33.828009 + ], + [ + -117.779649, + 33.828257 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 490182429, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.868197, + 33.842777 + ], + [ + -117.868174, + 33.842766 + ], + [ + -117.868151, + 33.842763 + ], + [ + -117.868137, + 33.84275 + ], + [ + -117.868131, + 33.842735 + ], + [ + -117.868139, + 33.842721 + ], + [ + -117.86815, + 33.842707 + ], + [ + -117.868154, + 33.842693 + ], + [ + -117.868147, + 33.842675 + ], + [ + -117.868133, + 33.84266 + ], + [ + -117.868116, + 33.842655 + ], + [ + -117.868097, + 33.842653 + ], + [ + -117.868078, + 33.842645 + ], + [ + -117.868068, + 33.84263 + ], + [ + -117.868072, + 33.842607 + ], + [ + -117.868067, + 33.842582 + ], + [ + -117.868031, + 33.842588 + ], + [ + -117.868001, + 33.842598 + ], + [ + -117.867971, + 33.842621 + ], + [ + -117.86795, + 33.842644 + ], + [ + -117.867937, + 33.842673 + ], + [ + -117.867938, + 33.842706 + ], + [ + -117.867951, + 33.842736 + ], + [ + -117.867977, + 33.84275 + ], + [ + -117.868001, + 33.842772 + ], + [ + -117.868019, + 33.842797 + ], + [ + -117.868031, + 33.842818 + ], + [ + -117.868066, + 33.842825 + ], + [ + -117.868106, + 33.842824 + ], + [ + -117.868145, + 33.842815 + ], + [ + -117.868177, + 33.842799 + ], + [ + -117.868197, + 33.842777 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 490182431, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.868885, + 33.842234 + ], + [ + -117.868881, + 33.842267 + ], + [ + -117.868882, + 33.842311 + ], + [ + -117.868894, + 33.84236 + ], + [ + -117.868914, + 33.842407 + ], + [ + -117.868943, + 33.842459 + ], + [ + -117.86898, + 33.842504 + ], + [ + -117.869017, + 33.84254 + ], + [ + -117.869047, + 33.842563 + ], + [ + -117.869087, + 33.842542 + ], + [ + -117.869118, + 33.842512 + ], + [ + -117.869138, + 33.842487 + ], + [ + -117.869156, + 33.84245 + ], + [ + -117.869161, + 33.842411 + ], + [ + -117.869153, + 33.842362 + ], + [ + -117.869136, + 33.842318 + ], + [ + -117.869099, + 33.842278 + ], + [ + -117.869054, + 33.842249 + ], + [ + -117.868996, + 33.842231 + ], + [ + -117.868936, + 33.842226 + ], + [ + -117.868885, + 33.842234 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 490186465, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.877977, + 33.844294 + ], + [ + -117.877944, + 33.844313 + ], + [ + -117.877902, + 33.844331 + ], + [ + -117.877842, + 33.844348 + ], + [ + -117.877785, + 33.844356 + ], + [ + -117.877733, + 33.844356 + ], + [ + -117.877725, + 33.844378 + ], + [ + -117.877722, + 33.844402 + ], + [ + -117.877724, + 33.844433 + ], + [ + -117.877736, + 33.844461 + ], + [ + -117.877752, + 33.844484 + ], + [ + -117.877764, + 33.844496 + ], + [ + -117.877799, + 33.844516 + ], + [ + -117.877814, + 33.8445 + ], + [ + -117.877838, + 33.844483 + ], + [ + -117.877872, + 33.844478 + ], + [ + -117.8779, + 33.844486 + ], + [ + -117.877919, + 33.844504 + ], + [ + -117.877927, + 33.844522 + ], + [ + -117.877926, + 33.844539 + ], + [ + -117.87796, + 33.844529 + ], + [ + -117.877995, + 33.844508 + ], + [ + -117.878022, + 33.844483 + ], + [ + -117.87804, + 33.844456 + ], + [ + -117.87805, + 33.844417 + ], + [ + -117.878047, + 33.844378 + ], + [ + -117.878032, + 33.844346 + ], + [ + -117.878007, + 33.844314 + ], + [ + -117.877977, + 33.844294 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 490186466, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.878553, + 33.844268 + ], + [ + -117.878555, + 33.844297 + ], + [ + -117.878567, + 33.844339 + ], + [ + -117.878584, + 33.844381 + ], + [ + -117.87861, + 33.844419 + ], + [ + -117.878645, + 33.844451 + ], + [ + -117.878698, + 33.844482 + ], + [ + -117.878752, + 33.844501 + ], + [ + -117.878806, + 33.844511 + ], + [ + -117.87886, + 33.844508 + ], + [ + -117.878905, + 33.844499 + ], + [ + -117.878943, + 33.84443 + ], + [ + -117.878969, + 33.844375 + ], + [ + -117.878922, + 33.844359 + ], + [ + -117.878884, + 33.844339 + ], + [ + -117.878854, + 33.84432 + ], + [ + -117.878816, + 33.844299 + ], + [ + -117.878766, + 33.844283 + ], + [ + -117.878715, + 33.844273 + ], + [ + -117.878637, + 33.84427 + ], + [ + -117.878553, + 33.844268 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 490245847, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.819188, + 33.852296 + ], + [ + -117.819176, + 33.852295 + ], + [ + -117.819159, + 33.8523 + ], + [ + -117.819139, + 33.852311 + ], + [ + -117.819129, + 33.852326 + ], + [ + -117.819074, + 33.852545 + ], + [ + -117.819074, + 33.85256 + ], + [ + -117.819078, + 33.852571 + ], + [ + -117.81909, + 33.852582 + ], + [ + -117.819179, + 33.852635 + ], + [ + -117.819191, + 33.852638 + ], + [ + -117.819205, + 33.852638 + ], + [ + -117.819219, + 33.852631 + ], + [ + -117.819236, + 33.852632 + ], + [ + -117.819281, + 33.852611 + ], + [ + -117.819292, + 33.852626 + ], + [ + -117.819448, + 33.852548 + ], + [ + -117.81946, + 33.85254 + ], + [ + -117.819471, + 33.852528 + ], + [ + -117.819479, + 33.852513 + ], + [ + -117.819479, + 33.852495 + ], + [ + -117.819474, + 33.85248 + ], + [ + -117.819465, + 33.852466 + ], + [ + -117.819452, + 33.852455 + ], + [ + -117.819199, + 33.8523 + ], + [ + -117.819188, + 33.852296 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 490985655, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.821508, + 33.750652 + ], + [ + -117.821499, + 33.75053 + ], + [ + -117.821469, + 33.750408 + ], + [ + -117.821436, + 33.75016 + ], + [ + -117.821433, + 33.749843 + ], + [ + -117.821396, + 33.74977 + ], + [ + -117.821397, + 33.749654 + ], + [ + -117.821365, + 33.749638 + ], + [ + -117.821276, + 33.749634 + ], + [ + -117.821155, + 33.749648 + ], + [ + -117.821132, + 33.749721 + ], + [ + -117.820989, + 33.750185 + ], + [ + -117.820933, + 33.750369 + ], + [ + -117.820893, + 33.750499 + ], + [ + -117.820895, + 33.750633 + ], + [ + -117.820929, + 33.750594 + ], + [ + -117.820963, + 33.750572 + ], + [ + -117.820992, + 33.75057 + ], + [ + -117.821037, + 33.750565 + ], + [ + -117.821069, + 33.75056 + ], + [ + -117.821185, + 33.75054 + ], + [ + -117.821296, + 33.750525 + ], + [ + -117.821401, + 33.750525 + ], + [ + -117.821408, + 33.750646 + ], + [ + -117.821508, + 33.750652 + ] + ] + ] + }, + "properties": { + "name": "Columbus Tustin Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 490998509, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.690925, + 33.598773 + ], + [ + -117.69098, + 33.598781 + ], + [ + -117.69105, + 33.598725 + ], + [ + -117.691061, + 33.598644 + ], + [ + -117.691165, + 33.598666 + ], + [ + -117.691361, + 33.598639 + ], + [ + -117.691363, + 33.598602 + ], + [ + -117.690955, + 33.598596 + ], + [ + -117.690925, + 33.598773 + ] + ] + ] + }, + "properties": { + "name": "Swingsets, sand box, slides and other playground equipment", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491041320, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.812477, + 33.647416 + ], + [ + -117.812378, + 33.646782 + ], + [ + -117.812135, + 33.646616 + ], + [ + -117.811931, + 33.64659 + ], + [ + -117.811971, + 33.647411 + ], + [ + -117.812477, + 33.647416 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 492881902, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.639331, + 33.564875 + ], + [ + -117.639274, + 33.564894 + ], + [ + -117.639264, + 33.564704 + ], + [ + -117.639253, + 33.56464 + ], + [ + -117.639219, + 33.564528 + ], + [ + -117.639209, + 33.564479 + ], + [ + -117.639186, + 33.56445 + ], + [ + -117.63916, + 33.564416 + ], + [ + -117.639137, + 33.564395 + ], + [ + -117.639089, + 33.564377 + ], + [ + -117.638967, + 33.564333 + ], + [ + -117.639235, + 33.564269 + ], + [ + -117.639255, + 33.564312 + ], + [ + -117.639306, + 33.564377 + ], + [ + -117.639396, + 33.564405 + ], + [ + -117.63948, + 33.564388 + ], + [ + -117.639579, + 33.564354 + ], + [ + -117.639703, + 33.564349 + ], + [ + -117.639763, + 33.56435 + ], + [ + -117.639826, + 33.564327 + ], + [ + -117.639876, + 33.564298 + ], + [ + -117.639954, + 33.564275 + ], + [ + -117.640057, + 33.564236 + ], + [ + -117.640131, + 33.564212 + ], + [ + -117.640218, + 33.564217 + ], + [ + -117.64028, + 33.564245 + ], + [ + -117.640321, + 33.564315 + ], + [ + -117.640306, + 33.564379 + ], + [ + -117.640275, + 33.564416 + ], + [ + -117.640246, + 33.564461 + ], + [ + -117.640211, + 33.564513 + ], + [ + -117.640173, + 33.56456 + ], + [ + -117.640113, + 33.564597 + ], + [ + -117.640044, + 33.564638 + ], + [ + -117.639975, + 33.564668 + ], + [ + -117.639905, + 33.564678 + ], + [ + -117.639855, + 33.564697 + ], + [ + -117.639791, + 33.564718 + ], + [ + -117.639696, + 33.564747 + ], + [ + -117.639637, + 33.564758 + ], + [ + -117.639575, + 33.564774 + ], + [ + -117.639532, + 33.56481 + ], + [ + -117.639474, + 33.564836 + ], + [ + -117.639415, + 33.56485 + ], + [ + -117.639331, + 33.564875 + ] + ] + ] + }, + "properties": { + "name": "Hill Top Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 493151489, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.629394, + 33.536759 + ], + [ + -117.629294, + 33.536715 + ], + [ + -117.629361, + 33.536575 + ], + [ + -117.629391, + 33.536497 + ], + [ + -117.62945, + 33.536352 + ], + [ + -117.629459, + 33.536285 + ], + [ + -117.6295, + 33.53618 + ], + [ + -117.629561, + 33.536078 + ], + [ + -117.629644, + 33.535974 + ], + [ + -117.62972, + 33.535933 + ], + [ + -117.629787, + 33.535913 + ], + [ + -117.629898, + 33.535925 + ], + [ + -117.629996, + 33.535934 + ], + [ + -117.630086, + 33.535988 + ], + [ + -117.630142, + 33.536052 + ], + [ + -117.630167, + 33.536145 + ], + [ + -117.630174, + 33.536187 + ], + [ + -117.630171, + 33.536256 + ], + [ + -117.630135, + 33.536316 + ], + [ + -117.630102, + 33.536372 + ], + [ + -117.63003, + 33.536415 + ], + [ + -117.629967, + 33.536444 + ], + [ + -117.629898, + 33.536471 + ], + [ + -117.629858, + 33.536469 + ], + [ + -117.629831, + 33.536473 + ], + [ + -117.62983, + 33.53651 + ], + [ + -117.629819, + 33.536533 + ], + [ + -117.629788, + 33.536554 + ], + [ + -117.629753, + 33.536565 + ], + [ + -117.629715, + 33.536572 + ], + [ + -117.629694, + 33.536574 + ], + [ + -117.629679, + 33.536604 + ], + [ + -117.629641, + 33.536646 + ], + [ + -117.629595, + 33.536663 + ], + [ + -117.629394, + 33.536759 + ] + ] + ] + }, + "properties": { + "name": "Mission Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 493521132, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.007432, + 33.891729 + ], + [ + -118.007431, + 33.89073 + ], + [ + -118.007299, + 33.890747 + ], + [ + -118.007136, + 33.890767 + ], + [ + -118.006971, + 33.890773 + ], + [ + -118.005072, + 33.890778 + ], + [ + -118.005073, + 33.891222 + ], + [ + -118.006379, + 33.891211 + ], + [ + -118.006382, + 33.891478 + ], + [ + -118.006529, + 33.891483 + ], + [ + -118.006522, + 33.891792 + ], + [ + -118.006948, + 33.891792 + ], + [ + -118.007101, + 33.891777 + ], + [ + -118.007432, + 33.891729 + ] + ] + ] + }, + "properties": { + "name": "Windermere Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 493817712, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.767774, + 33.74439 + ], + [ + -117.767874, + 33.744292 + ], + [ + -117.767656, + 33.744138 + ], + [ + -117.767618, + 33.744137 + ], + [ + -117.767599, + 33.744147 + ], + [ + -117.767478, + 33.744265 + ], + [ + -117.767562, + 33.744324 + ], + [ + -117.767611, + 33.744276 + ], + [ + -117.767774, + 33.74439 + ] + ] + ] + }, + "properties": { + "name": "Sheridan Square Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 495396665, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.978919, + 33.756072 + ], + [ + -117.979002, + 33.756066 + ], + [ + -117.978997, + 33.755715 + ], + [ + -117.978762, + 33.755727 + ], + [ + -117.97878, + 33.756076 + ], + [ + -117.978919, + 33.756072 + ] + ] + ] + }, + "properties": { + "name": "Oasis Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 497796262, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.820078, + 33.751436 + ], + [ + -117.820083, + 33.751213 + ], + [ + -117.819407, + 33.751194 + ], + [ + -117.818883, + 33.751078 + ], + [ + -117.818754, + 33.751049 + ], + [ + -117.818748, + 33.751398 + ], + [ + -117.819804, + 33.751432 + ], + [ + -117.820078, + 33.751436 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 501114176, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.686259, + 33.566657 + ], + [ + -117.6863, + 33.566703 + ], + [ + -117.68638, + 33.566795 + ], + [ + -117.686408, + 33.566777 + ], + [ + -117.686577, + 33.566972 + ], + [ + -117.68666, + 33.567043 + ], + [ + -117.686712, + 33.567071 + ], + [ + -117.686775, + 33.567105 + ], + [ + -117.686902, + 33.567149 + ], + [ + -117.687011, + 33.56717 + ], + [ + -117.687166, + 33.567174 + ], + [ + -117.687307, + 33.567147 + ], + [ + -117.687427, + 33.567105 + ], + [ + -117.687537, + 33.567047 + ], + [ + -117.687656, + 33.566952 + ], + [ + -117.687866, + 33.566774 + ], + [ + -117.687424, + 33.566248 + ], + [ + -117.686259, + 33.566657 + ] + ] + ] + }, + "properties": { + "name": "Hidden Trail Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 501114177, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.687344, + 33.566855 + ], + [ + -117.687378, + 33.566771 + ], + [ + -117.687387, + 33.566743 + ], + [ + -117.687401, + 33.566728 + ], + [ + -117.687431, + 33.566714 + ], + [ + -117.687448, + 33.566712 + ], + [ + -117.687472, + 33.566723 + ], + [ + -117.687526, + 33.566747 + ], + [ + -117.687541, + 33.566755 + ], + [ + -117.687557, + 33.566778 + ], + [ + -117.687579, + 33.566817 + ], + [ + -117.687532, + 33.56687 + ], + [ + -117.687506, + 33.56691 + ], + [ + -117.687472, + 33.56693 + ], + [ + -117.687458, + 33.566921 + ], + [ + -117.687439, + 33.566933 + ], + [ + -117.687429, + 33.566919 + ], + [ + -117.687416, + 33.566902 + ], + [ + -117.687384, + 33.56688 + ], + [ + -117.687363, + 33.56687 + ], + [ + -117.687349, + 33.566864 + ], + [ + -117.687344, + 33.566855 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 502455174, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.82726, + 33.67638 + ], + [ + -117.827092, + 33.676211 + ], + [ + -117.826932, + 33.676138 + ], + [ + -117.82678, + 33.676136 + ], + [ + -117.826573, + 33.676152 + ], + [ + -117.826465, + 33.676218 + ], + [ + -117.826009, + 33.676786 + ], + [ + -117.826044, + 33.677357 + ], + [ + -117.82632, + 33.677266 + ], + [ + -117.826593, + 33.677168 + ], + [ + -117.827071, + 33.677015 + ], + [ + -117.827336, + 33.676959 + ], + [ + -117.827418, + 33.6769 + ], + [ + -117.827315, + 33.676535 + ], + [ + -117.82726, + 33.67638 + ] + ] + ] + }, + "properties": { + "name": "San Mateo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 503691445, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.689372, + 33.549808 + ], + [ + -117.689297, + 33.54989 + ], + [ + -117.688885, + 33.551083 + ], + [ + -117.688693, + 33.551396 + ], + [ + -117.689537, + 33.551583 + ], + [ + -117.689612, + 33.551409 + ], + [ + -117.689878, + 33.551211 + ], + [ + -117.689676, + 33.550798 + ], + [ + -117.68971, + 33.550587 + ], + [ + -117.690129, + 33.549658 + ], + [ + -117.689972, + 33.549682 + ], + [ + -117.689957, + 33.54972 + ], + [ + -117.689372, + 33.549808 + ] + ] + ] + }, + "properties": { + "name": "Rancho Niguel Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 503910098, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.688941, + 33.551332 + ], + [ + -117.689561, + 33.551507 + ], + [ + -117.689599, + 33.55141 + ], + [ + -117.689614, + 33.551313 + ], + [ + -117.689613, + 33.551198 + ], + [ + -117.689585, + 33.551102 + ], + [ + -117.689548, + 33.55102 + ], + [ + -117.689511, + 33.550949 + ], + [ + -117.689442, + 33.55087 + ], + [ + -117.68935, + 33.550799 + ], + [ + -117.689221, + 33.550746 + ], + [ + -117.689112, + 33.550711 + ], + [ + -117.688895, + 33.551266 + ], + [ + -117.688941, + 33.551332 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 504941243, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.669582, + 33.569212 + ], + [ + -117.669553, + 33.569224 + ], + [ + -117.66952, + 33.569223 + ], + [ + -117.669481, + 33.569219 + ], + [ + -117.669445, + 33.569198 + ], + [ + -117.66942, + 33.569168 + ], + [ + -117.669408, + 33.569127 + ], + [ + -117.669411, + 33.569092 + ], + [ + -117.669409, + 33.569062 + ], + [ + -117.669395, + 33.569034 + ], + [ + -117.669395, + 33.569004 + ], + [ + -117.669417, + 33.568973 + ], + [ + -117.669458, + 33.568956 + ], + [ + -117.669495, + 33.568956 + ], + [ + -117.66953, + 33.56897 + ], + [ + -117.669552, + 33.568993 + ], + [ + -117.66956, + 33.569005 + ], + [ + -117.669585, + 33.569043 + ], + [ + -117.669621, + 33.569077 + ], + [ + -117.66965, + 33.569099 + ], + [ + -117.669683, + 33.569108 + ], + [ + -117.669711, + 33.569129 + ], + [ + -117.669726, + 33.569155 + ], + [ + -117.669721, + 33.56917 + ], + [ + -117.669716, + 33.569184 + ], + [ + -117.669692, + 33.569209 + ], + [ + -117.669665, + 33.56922 + ], + [ + -117.669632, + 33.569222 + ], + [ + -117.669607, + 33.569213 + ], + [ + -117.669582, + 33.569212 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 513666642, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921081, + 33.607954 + ], + [ + -117.920611, + 33.607894 + ], + [ + -117.92067, + 33.607552 + ], + [ + -117.921142, + 33.607605 + ], + [ + -117.921081, + 33.607954 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 515860546, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.637635, + 33.661757 + ], + [ + -117.637138, + 33.661429 + ], + [ + -117.635156, + 33.65976 + ], + [ + -117.635011, + 33.659547 + ], + [ + -117.635254, + 33.659465 + ], + [ + -117.635443, + 33.658551 + ], + [ + -117.636322, + 33.658037 + ], + [ + -117.63637, + 33.657845 + ], + [ + -117.637005, + 33.657836 + ], + [ + -117.637332, + 33.659302 + ], + [ + -117.637962, + 33.659628 + ], + [ + -117.63933, + 33.659959 + ], + [ + -117.639594, + 33.66 + ], + [ + -117.641078, + 33.659727 + ], + [ + -117.641351, + 33.657208 + ], + [ + -117.641551, + 33.657207 + ], + [ + -117.641649, + 33.657299 + ], + [ + -117.641599, + 33.657512 + ], + [ + -117.64161, + 33.658676 + ], + [ + -117.641689, + 33.659868 + ], + [ + -117.64164, + 33.659875 + ], + [ + -117.641462, + 33.659929 + ], + [ + -117.641327, + 33.660026 + ], + [ + -117.640455, + 33.660247 + ], + [ + -117.640097, + 33.660739 + ], + [ + -117.640234, + 33.661063 + ], + [ + -117.637635, + 33.661757 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 515861911, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.654223, + 33.663257 + ], + [ + -117.654468, + 33.663085 + ], + [ + -117.65458, + 33.66244 + ], + [ + -117.654487, + 33.662409 + ], + [ + -117.65449, + 33.661385 + ], + [ + -117.65458, + 33.661368 + ], + [ + -117.654823, + 33.661154 + ], + [ + -117.654881, + 33.660902 + ], + [ + -117.654886, + 33.660806 + ], + [ + -117.654625, + 33.660632 + ], + [ + -117.653808, + 33.660504 + ], + [ + -117.653133, + 33.660669 + ], + [ + -117.652859, + 33.659991 + ], + [ + -117.655826, + 33.658963 + ], + [ + -117.65645, + 33.658645 + ], + [ + -117.656839, + 33.658335 + ], + [ + -117.657359, + 33.657875 + ], + [ + -117.657644, + 33.659132 + ], + [ + -117.658285, + 33.657297 + ], + [ + -117.658462, + 33.656531 + ], + [ + -117.659804, + 33.654833 + ], + [ + -117.660144, + 33.65485 + ], + [ + -117.66048, + 33.654823 + ], + [ + -117.661199, + 33.654758 + ], + [ + -117.661209, + 33.654862 + ], + [ + -117.660357, + 33.655049 + ], + [ + -117.660028, + 33.655468 + ], + [ + -117.660009, + 33.655457 + ], + [ + -117.659745, + 33.655587 + ], + [ + -117.659641, + 33.6557 + ], + [ + -117.6597, + 33.656168 + ], + [ + -117.659677, + 33.65626 + ], + [ + -117.65964, + 33.656348 + ], + [ + -117.659405, + 33.656616 + ], + [ + -117.659123, + 33.656881 + ], + [ + -117.659033, + 33.657157 + ], + [ + -117.659132, + 33.657368 + ], + [ + -117.659226, + 33.657471 + ], + [ + -117.659235, + 33.657725 + ], + [ + -117.658976, + 33.65817 + ], + [ + -117.658692, + 33.658209 + ], + [ + -117.658495, + 33.658373 + ], + [ + -117.658255, + 33.659122 + ], + [ + -117.65825, + 33.65933 + ], + [ + -117.658527, + 33.659581 + ], + [ + -117.659851, + 33.659603 + ], + [ + -117.660026, + 33.660068 + ], + [ + -117.660069, + 33.660182 + ], + [ + -117.66048, + 33.660495 + ], + [ + -117.660765, + 33.660677 + ], + [ + -117.661151, + 33.660849 + ], + [ + -117.661647, + 33.66097 + ], + [ + -117.662198, + 33.661258 + ], + [ + -117.663663, + 33.662874 + ], + [ + -117.66391, + 33.663014 + ], + [ + -117.662622, + 33.663083 + ], + [ + -117.661797, + 33.663482 + ], + [ + -117.661506, + 33.664156 + ], + [ + -117.660644, + 33.664522 + ], + [ + -117.659463, + 33.664312 + ], + [ + -117.658498, + 33.664208 + ], + [ + -117.658328, + 33.664088 + ], + [ + -117.658371, + 33.663785 + ], + [ + -117.658558, + 33.663733 + ], + [ + -117.658842, + 33.66298 + ], + [ + -117.658901, + 33.662799 + ], + [ + -117.658949, + 33.66277 + ], + [ + -117.659024, + 33.662771 + ], + [ + -117.659199, + 33.66281 + ], + [ + -117.659327, + 33.662789 + ], + [ + -117.659406, + 33.662746 + ], + [ + -117.659527, + 33.662178 + ], + [ + -117.659814, + 33.661825 + ], + [ + -117.659944, + 33.661622 + ], + [ + -117.65996, + 33.661404 + ], + [ + -117.659899, + 33.660941 + ], + [ + -117.659328, + 33.660424 + ], + [ + -117.65913, + 33.660303 + ], + [ + -117.658933, + 33.66008 + ], + [ + -117.658534, + 33.6601 + ], + [ + -117.658223, + 33.66 + ], + [ + -117.657763, + 33.659557 + ], + [ + -117.657655, + 33.659456 + ], + [ + -117.657528, + 33.659681 + ], + [ + -117.657373, + 33.659583 + ], + [ + -117.657164, + 33.659736 + ], + [ + -117.656544, + 33.659714 + ], + [ + -117.656505, + 33.660061 + ], + [ + -117.656272, + 33.660204 + ], + [ + -117.656088, + 33.660432 + ], + [ + -117.656051, + 33.66062 + ], + [ + -117.656041, + 33.660792 + ], + [ + -117.655969, + 33.660989 + ], + [ + -117.655834, + 33.661106 + ], + [ + -117.655489, + 33.661362 + ], + [ + -117.655267, + 33.661577 + ], + [ + -117.655108, + 33.662532 + ], + [ + -117.654975, + 33.663055 + ], + [ + -117.654903, + 33.663409 + ], + [ + -117.654474, + 33.663615 + ], + [ + -117.654047, + 33.66345 + ], + [ + -117.654223, + 33.663257 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 515889132, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.713183, + 33.873364 + ], + [ + -117.712897, + 33.869524 + ], + [ + -117.713638, + 33.869409 + ], + [ + -117.713873, + 33.869556 + ], + [ + -117.714443, + 33.869491 + ], + [ + -117.714938, + 33.869435 + ], + [ + -117.715303, + 33.869256 + ], + [ + -117.715826, + 33.868924 + ], + [ + -117.716104, + 33.868801 + ], + [ + -117.716429, + 33.868808 + ], + [ + -117.716751, + 33.8689 + ], + [ + -117.717097, + 33.868793 + ], + [ + -117.717496, + 33.868586 + ], + [ + -117.717956, + 33.868503 + ], + [ + -117.718148, + 33.868571 + ], + [ + -117.718712, + 33.868582 + ], + [ + -117.719481, + 33.86864 + ], + [ + -117.720105, + 33.868429 + ], + [ + -117.721018, + 33.868248 + ], + [ + -117.721126, + 33.867863 + ], + [ + -117.721292, + 33.867277 + ], + [ + -117.722904, + 33.867598 + ], + [ + -117.722936, + 33.867604 + ], + [ + -117.722941, + 33.867583 + ], + [ + -117.723103, + 33.866878 + ], + [ + -117.723137, + 33.866726 + ], + [ + -117.723009, + 33.866313 + ], + [ + -117.723202, + 33.865699 + ], + [ + -117.723532, + 33.865236 + ], + [ + -117.723827, + 33.864772 + ], + [ + -117.72377, + 33.8643 + ], + [ + -117.723791, + 33.864204 + ], + [ + -117.723892, + 33.863745 + ], + [ + -117.72411, + 33.863484 + ], + [ + -117.72465, + 33.863084 + ], + [ + -117.724942, + 33.862708 + ], + [ + -117.724885, + 33.862266 + ], + [ + -117.725112, + 33.861712 + ], + [ + -117.725601, + 33.86184 + ], + [ + -117.725633, + 33.861887 + ], + [ + -117.725983, + 33.862402 + ], + [ + -117.726107, + 33.862584 + ], + [ + -117.72651, + 33.863239 + ], + [ + -117.726566, + 33.863739 + ], + [ + -117.727009, + 33.864248 + ], + [ + -117.727075, + 33.864396 + ], + [ + -117.727459, + 33.864521 + ], + [ + -117.72795, + 33.86456 + ], + [ + -117.728758, + 33.864635 + ], + [ + -117.729143, + 33.864702 + ], + [ + -117.729735, + 33.864919 + ], + [ + -117.730219, + 33.865223 + ], + [ + -117.730311, + 33.865695 + ], + [ + -117.731038, + 33.866091 + ], + [ + -117.731178, + 33.866124 + ], + [ + -117.731453, + 33.866364 + ], + [ + -117.731865, + 33.866725 + ], + [ + -117.73277, + 33.867066 + ], + [ + -117.733298, + 33.867077 + ], + [ + -117.733478, + 33.866904 + ], + [ + -117.733629, + 33.866554 + ], + [ + -117.733951, + 33.866385 + ], + [ + -117.734442, + 33.866453 + ], + [ + -117.734899, + 33.867081 + ], + [ + -117.735437, + 33.867756 + ], + [ + -117.734669, + 33.867718 + ], + [ + -117.733283, + 33.867978 + ], + [ + -117.732687, + 33.868387 + ], + [ + -117.732954, + 33.869256 + ], + [ + -117.732861, + 33.869741 + ], + [ + -117.732869, + 33.869799 + ], + [ + -117.732947, + 33.870341 + ], + [ + -117.733027, + 33.870603 + ], + [ + -117.733238, + 33.871298 + ], + [ + -117.733442, + 33.871697 + ], + [ + -117.733547, + 33.871901 + ], + [ + -117.73364, + 33.872081 + ], + [ + -117.733684, + 33.872665 + ], + [ + -117.733756, + 33.873589 + ], + [ + -117.733977, + 33.875099 + ], + [ + -117.734167, + 33.875374 + ], + [ + -117.734334, + 33.875615 + ], + [ + -117.734412, + 33.875661 + ], + [ + -117.73496, + 33.875982 + ], + [ + -117.735662, + 33.876461 + ], + [ + -117.735947, + 33.876688 + ], + [ + -117.736204, + 33.876883 + ], + [ + -117.736544, + 33.877143 + ], + [ + -117.737245, + 33.877666 + ], + [ + -117.738082, + 33.878081 + ], + [ + -117.738707, + 33.878249 + ], + [ + -117.738793, + 33.878272 + ], + [ + -117.739508, + 33.878309 + ], + [ + -117.740304, + 33.878258 + ], + [ + -117.741211, + 33.878077 + ], + [ + -117.743111, + 33.877473 + ], + [ + -117.744734, + 33.876376 + ], + [ + -117.746432, + 33.875413 + ], + [ + -117.747616, + 33.874817 + ], + [ + -117.748552, + 33.8741 + ], + [ + -117.749607, + 33.873434 + ], + [ + -117.750975, + 33.872761 + ], + [ + -117.753635, + 33.871578 + ], + [ + -117.75657, + 33.870434 + ], + [ + -117.760182, + 33.868843 + ], + [ + -117.76207, + 33.867941 + ], + [ + -117.771734, + 33.863321 + ], + [ + -117.780661, + 33.859053 + ], + [ + -117.788007, + 33.855629 + ], + [ + -117.789505, + 33.855948 + ], + [ + -117.790857, + 33.855942 + ], + [ + -117.791514, + 33.8551 + ], + [ + -117.791733, + 33.855084 + ], + [ + -117.791678, + 33.8564 + ], + [ + -117.791902, + 33.856435 + ], + [ + -117.793465, + 33.856171 + ], + [ + -117.794812, + 33.855895 + ], + [ + -117.796965, + 33.855529 + ], + [ + -117.799229, + 33.855196 + ], + [ + -117.799098, + 33.854629 + ], + [ + -117.799786, + 33.854642 + ], + [ + -117.799857, + 33.854644 + ], + [ + -117.799857, + 33.854644 + ], + [ + -117.799881, + 33.856301 + ], + [ + -117.799882, + 33.856364 + ], + [ + -117.798043, + 33.856747 + ], + [ + -117.796971, + 33.857135 + ], + [ + -117.792298, + 33.857441 + ], + [ + -117.789614, + 33.857855 + ], + [ + -117.785688, + 33.859141 + ], + [ + -117.784694, + 33.859467 + ], + [ + -117.779848, + 33.86092 + ], + [ + -117.779458, + 33.861037 + ], + [ + -117.778897, + 33.861306 + ], + [ + -117.777767, + 33.861847 + ], + [ + -117.775004, + 33.863246 + ], + [ + -117.768042, + 33.866768 + ], + [ + -117.7606, + 33.869931 + ], + [ + -117.760244, + 33.870083 + ], + [ + -117.756472, + 33.871608 + ], + [ + -117.754403, + 33.872341 + ], + [ + -117.752683, + 33.873082 + ], + [ + -117.752928, + 33.873273 + ], + [ + -117.751895, + 33.873692 + ], + [ + -117.751253, + 33.874158 + ], + [ + -117.750602, + 33.875088 + ], + [ + -117.750485, + 33.875453 + ], + [ + -117.750459, + 33.875534 + ], + [ + -117.749977, + 33.87624 + ], + [ + -117.749371, + 33.876723 + ], + [ + -117.747994, + 33.877631 + ], + [ + -117.747589, + 33.877754 + ], + [ + -117.747064, + 33.877915 + ], + [ + -117.746093, + 33.878445 + ], + [ + -117.745793, + 33.878675 + ], + [ + -117.745355, + 33.87901 + ], + [ + -117.743805, + 33.878872 + ], + [ + -117.743685, + 33.879044 + ], + [ + -117.743657, + 33.879489 + ], + [ + -117.743642, + 33.879721 + ], + [ + -117.743515, + 33.879734 + ], + [ + -117.743398, + 33.879745 + ], + [ + -117.743263, + 33.87993 + ], + [ + -117.743032, + 33.880348 + ], + [ + -117.743001, + 33.880628 + ], + [ + -117.742832, + 33.881186 + ], + [ + -117.742018, + 33.881579 + ], + [ + -117.741462, + 33.881847 + ], + [ + -117.740942, + 33.882019 + ], + [ + -117.740444, + 33.882183 + ], + [ + -117.740365, + 33.88221 + ], + [ + -117.74031, + 33.882206 + ], + [ + -117.73928, + 33.882133 + ], + [ + -117.737973, + 33.881749 + ], + [ + -117.736773, + 33.881093 + ], + [ + -117.735385, + 33.880075 + ], + [ + -117.73406, + 33.879169 + ], + [ + -117.732227, + 33.877592 + ], + [ + -117.731938, + 33.877225 + ], + [ + -117.731433, + 33.876586 + ], + [ + -117.730722, + 33.875417 + ], + [ + -117.729876, + 33.873887 + ], + [ + -117.729084, + 33.872798 + ], + [ + -117.728185, + 33.871983 + ], + [ + -117.726949, + 33.871435 + ], + [ + -117.725345, + 33.871073 + ], + [ + -117.724745, + 33.871117 + ], + [ + -117.723808, + 33.871186 + ], + [ + -117.722962, + 33.871248 + ], + [ + -117.722624, + 33.871367 + ], + [ + -117.720905, + 33.871974 + ], + [ + -117.720669, + 33.872048 + ], + [ + -117.7154, + 33.873263 + ], + [ + -117.713744, + 33.873525 + ], + [ + -117.713183, + 33.873364 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 515918619, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.771596, + 33.82656 + ], + [ + -117.771938, + 33.827021 + ], + [ + -117.775812, + 33.827831 + ], + [ + -117.776135, + 33.827829 + ], + [ + -117.776578, + 33.827804 + ], + [ + -117.776718, + 33.827807 + ], + [ + -117.777746, + 33.827169 + ], + [ + -117.778091, + 33.827273 + ], + [ + -117.778385, + 33.827403 + ], + [ + -117.778812, + 33.827571 + ], + [ + -117.779327, + 33.827932 + ], + [ + -117.779488, + 33.828303 + ], + [ + -117.779577, + 33.828486 + ], + [ + -117.77965, + 33.828631 + ], + [ + -117.77974, + 33.828775 + ], + [ + -117.780234, + 33.828902 + ], + [ + -117.781765, + 33.82923 + ], + [ + -117.781914, + 33.828896 + ], + [ + -117.78181, + 33.828738 + ], + [ + -117.781653, + 33.82859 + ], + [ + -117.781931, + 33.828355 + ], + [ + -117.782132, + 33.828328 + ], + [ + -117.782354, + 33.828203 + ], + [ + -117.782436, + 33.828049 + ], + [ + -117.782833, + 33.827745 + ], + [ + -117.783007, + 33.827657 + ], + [ + -117.783135, + 33.827517 + ], + [ + -117.783374, + 33.82734 + ], + [ + -117.783558, + 33.827252 + ], + [ + -117.78365, + 33.827665 + ], + [ + -117.784291, + 33.828786 + ], + [ + -117.784464, + 33.828958 + ], + [ + -117.786396, + 33.828295 + ], + [ + -117.786725, + 33.828236 + ], + [ + -117.787176, + 33.828232 + ], + [ + -117.787877, + 33.828207 + ], + [ + -117.788074, + 33.828175 + ], + [ + -117.787201, + 33.829394 + ], + [ + -117.790019, + 33.830745 + ], + [ + -117.792696, + 33.832664 + ], + [ + -117.794103, + 33.831187 + ], + [ + -117.79503, + 33.832611 + ], + [ + -117.795217, + 33.832641 + ], + [ + -117.797004, + 33.832704 + ], + [ + -117.797518, + 33.832734 + ], + [ + -117.799014, + 33.832867 + ], + [ + -117.799113, + 33.833101 + ], + [ + -117.799818, + 33.83292 + ], + [ + -117.799736, + 33.832529 + ], + [ + -117.799613, + 33.832536 + ], + [ + -117.799468, + 33.832212 + ], + [ + -117.799133, + 33.831787 + ], + [ + -117.798759, + 33.831393 + ], + [ + -117.79819, + 33.831093 + ], + [ + -117.79747, + 33.830661 + ], + [ + -117.796428, + 33.830144 + ], + [ + -117.795057, + 33.828638 + ], + [ + -117.794711, + 33.82815 + ], + [ + -117.795162, + 33.828245 + ], + [ + -117.797176, + 33.829906 + ], + [ + -117.798716, + 33.830843 + ], + [ + -117.799259, + 33.830985 + ], + [ + -117.799854, + 33.831083 + ], + [ + -117.800687, + 33.831495 + ], + [ + -117.80096, + 33.832357 + ], + [ + -117.801702, + 33.832459 + ], + [ + -117.801734, + 33.831296 + ], + [ + -117.80552, + 33.831305 + ], + [ + -117.805856, + 33.830451 + ], + [ + -117.806627, + 33.830124 + ], + [ + -117.807318, + 33.830987 + ], + [ + -117.807839, + 33.830773 + ], + [ + -117.80721, + 33.829877 + ], + [ + -117.807424, + 33.829786 + ], + [ + -117.809494, + 33.828997 + ], + [ + -117.811083, + 33.829553 + ], + [ + -117.811085, + 33.829554 + ], + [ + -117.811181, + 33.82968 + ], + [ + -117.811373, + 33.829621 + ], + [ + -117.811843, + 33.829731 + ], + [ + -117.812075, + 33.829868 + ], + [ + -117.812188, + 33.829967 + ], + [ + -117.812288, + 33.830139 + ], + [ + -117.812362, + 33.83029 + ], + [ + -117.810934, + 33.83091 + ], + [ + -117.809802, + 33.831502 + ], + [ + -117.809089, + 33.831449 + ], + [ + -117.807023, + 33.831989 + ], + [ + -117.805241, + 33.832771 + ], + [ + -117.803249, + 33.833036 + ], + [ + -117.803018, + 33.833079 + ], + [ + -117.800302, + 33.833861 + ], + [ + -117.795346, + 33.835394 + ], + [ + -117.795157, + 33.835667 + ], + [ + -117.79459, + 33.835967 + ], + [ + -117.793964, + 33.836162 + ], + [ + -117.792766, + 33.836813 + ], + [ + -117.792332, + 33.836804 + ], + [ + -117.791852, + 33.836474 + ], + [ + -117.788965, + 33.837367 + ], + [ + -117.788957, + 33.83762 + ], + [ + -117.789128, + 33.838194 + ], + [ + -117.788438, + 33.83844 + ], + [ + -117.7878, + 33.839049 + ], + [ + -117.787308, + 33.838884 + ], + [ + -117.787632, + 33.838424 + ], + [ + -117.787644, + 33.837958 + ], + [ + -117.787576, + 33.837796 + ], + [ + -117.78586, + 33.838327 + ], + [ + -117.78245, + 33.839084 + ], + [ + -117.781938, + 33.839284 + ], + [ + -117.781541, + 33.839547 + ], + [ + -117.780828, + 33.839533 + ], + [ + -117.780427, + 33.839959 + ], + [ + -117.779584, + 33.839942 + ], + [ + -117.778672, + 33.840087 + ], + [ + -117.778145, + 33.840401 + ], + [ + -117.777943, + 33.840668 + ], + [ + -117.777548, + 33.840877 + ], + [ + -117.77671, + 33.840698 + ], + [ + -117.775932, + 33.840683 + ], + [ + -117.775466, + 33.841107 + ], + [ + -117.774623, + 33.841091 + ], + [ + -117.774287, + 33.841003 + ], + [ + -117.774173, + 33.840974 + ], + [ + -117.773783, + 33.840966 + ], + [ + -117.772876, + 33.840948 + ], + [ + -117.772881, + 33.840759 + ], + [ + -117.772887, + 33.840569 + ], + [ + -117.772443, + 33.840244 + ], + [ + -117.772349, + 33.840344 + ], + [ + -117.772096, + 33.840625 + ], + [ + -117.771872, + 33.840718 + ], + [ + -117.771584, + 33.84076 + ], + [ + -117.771002, + 33.840695 + ], + [ + -117.770746, + 33.840581 + ], + [ + -117.770741, + 33.840499 + ], + [ + -117.770712, + 33.839977 + ], + [ + -117.770703, + 33.839822 + ], + [ + -117.770555, + 33.838901 + ], + [ + -117.770537, + 33.83879 + ], + [ + -117.770518, + 33.838669 + ], + [ + -117.770427, + 33.838083 + ], + [ + -117.770461, + 33.836892 + ], + [ + -117.770411, + 33.836818 + ], + [ + -117.770087, + 33.836343 + ], + [ + -117.769684, + 33.836557 + ], + [ + -117.769297, + 33.836761 + ], + [ + -117.769027, + 33.837135 + ], + [ + -117.769017, + 33.837514 + ], + [ + -117.769316, + 33.838386 + ], + [ + -117.76956, + 33.838933 + ], + [ + -117.769598, + 33.839217 + ], + [ + -117.769667, + 33.839748 + ], + [ + -117.769386, + 33.839714 + ], + [ + -117.768568, + 33.839618 + ], + [ + -117.767662, + 33.839546 + ], + [ + -117.767014, + 33.839533 + ], + [ + -117.76669, + 33.839527 + ], + [ + -117.765645, + 33.839777 + ], + [ + -117.764999, + 33.83971 + ], + [ + -117.765654, + 33.839452 + ], + [ + -117.76638, + 33.839033 + ], + [ + -117.766965, + 33.83899 + ], + [ + -117.767235, + 33.838616 + ], + [ + -117.767628, + 33.838462 + ], + [ + -117.768092, + 33.838091 + ], + [ + -117.767913, + 33.837546 + ], + [ + -117.767398, + 33.837428 + ], + [ + -117.767097, + 33.836609 + ], + [ + -117.767235, + 33.836287 + ], + [ + -117.768013, + 33.836302 + ], + [ + -117.768532, + 33.836312 + ], + [ + -117.76912, + 33.836162 + ], + [ + -117.76939, + 33.835788 + ], + [ + -117.769016, + 33.835239 + ], + [ + -117.768775, + 33.834584 + ], + [ + -117.769295, + 33.83454 + ], + [ + -117.769556, + 33.834491 + ], + [ + -117.769672, + 33.834325 + ], + [ + -117.769867, + 33.834447 + ], + [ + -117.770484, + 33.834563 + ], + [ + -117.77098, + 33.834572 + ], + [ + -117.77129, + 33.834578 + ], + [ + -117.771728, + 33.834483 + ], + [ + -117.772169, + 33.834233 + ], + [ + -117.773035, + 33.834353 + ], + [ + -117.773033, + 33.834405 + ], + [ + -117.772889, + 33.834705 + ], + [ + -117.772475, + 33.834755 + ], + [ + -117.772234, + 33.834822 + ], + [ + -117.772081, + 33.834856 + ], + [ + -117.772008, + 33.835126 + ], + [ + -117.772008, + 33.835526 + ], + [ + -117.771805, + 33.836144 + ], + [ + -117.771913, + 33.836717 + ], + [ + -117.772083, + 33.83729 + ], + [ + -117.772439, + 33.837868 + ], + [ + -117.77287, + 33.83798 + ], + [ + -117.773124, + 33.837777 + ], + [ + -117.773194, + 33.837519 + ], + [ + -117.773526, + 33.836748 + ], + [ + -117.773949, + 33.837171 + ], + [ + -117.774439, + 33.837388 + ], + [ + -117.774938, + 33.837294 + ], + [ + -117.775377, + 33.837147 + ], + [ + -117.775758, + 33.836844 + ], + [ + -117.775895, + 33.83638 + ], + [ + -117.776462, + 33.83608 + ], + [ + -117.777282, + 33.835629 + ], + [ + -117.777964, + 33.835643 + ], + [ + -117.778196, + 33.836217 + ], + [ + -117.778046, + 33.837148 + ], + [ + -117.778031, + 33.837666 + ], + [ + -117.777773, + 33.838024 + ], + [ + -117.777327, + 33.83843 + ], + [ + -117.776376, + 33.839137 + ], + [ + -117.775366, + 33.83974 + ], + [ + -117.776038, + 33.840116 + ], + [ + -117.778104, + 33.839482 + ], + [ + -117.780416, + 33.838957 + ], + [ + -117.781791, + 33.838621 + ], + [ + -117.782303, + 33.838061 + ], + [ + -117.782321, + 33.837439 + ], + [ + -117.782341, + 33.836713 + ], + [ + -117.782913, + 33.836258 + ], + [ + -117.783625, + 33.835183 + ], + [ + -117.782665, + 33.834024 + ], + [ + -117.781619, + 33.833692 + ], + [ + -117.780733, + 33.834297 + ], + [ + -117.780596, + 33.834761 + ], + [ + -117.781202, + 33.835291 + ], + [ + -117.781562, + 33.835713 + ], + [ + -117.780994, + 33.836065 + ], + [ + -117.780368, + 33.83626 + ], + [ + -117.779749, + 33.836196 + ], + [ + -117.779391, + 33.835671 + ], + [ + -117.77897, + 33.835196 + ], + [ + -117.778103, + 33.835127 + ], + [ + -117.776676, + 33.835099 + ], + [ + -117.77707, + 33.834329 + ], + [ + -117.7777, + 33.833978 + ], + [ + -117.777776, + 33.833513 + ], + [ + -117.777297, + 33.832882 + ], + [ + -117.777372, + 33.832416 + ], + [ + -117.777152, + 33.831427 + ], + [ + -117.776228, + 33.83115 + ], + [ + -117.775104, + 33.831387 + ], + [ + -117.774595, + 33.831843 + ], + [ + -117.774021, + 33.832403 + ], + [ + -117.773269, + 33.832647 + ], + [ + -117.773173, + 33.832295 + ], + [ + -117.773292, + 33.832047 + ], + [ + -117.773804, + 33.831122 + ], + [ + -117.773851, + 33.830748 + ], + [ + -117.774086, + 33.830378 + ], + [ + -117.774547, + 33.829919 + ], + [ + -117.774367, + 33.829697 + ], + [ + -117.773844, + 33.829687 + ], + [ + -117.773583, + 33.829651 + ], + [ + -117.773251, + 33.82952 + ], + [ + -117.773033, + 33.829297 + ], + [ + -117.772778, + 33.829042 + ], + [ + -117.771262, + 33.828731 + ], + [ + -117.769193, + 33.828517 + ], + [ + -117.768911, + 33.828122 + ], + [ + -117.769301, + 33.827948 + ], + [ + -117.769701, + 33.827738 + ], + [ + -117.770608, + 33.827119 + ], + [ + -117.771209, + 33.826747 + ], + [ + -117.771596, + 33.82656 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 515931509, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.642063, + 33.661038 + ], + [ + -117.642124, + 33.660968 + ], + [ + -117.643053, + 33.660973 + ], + [ + -117.643627, + 33.661052 + ], + [ + -117.64433, + 33.661113 + ], + [ + -117.645313, + 33.661202 + ], + [ + -117.646045, + 33.661278 + ], + [ + -117.646658, + 33.661304 + ], + [ + -117.646986, + 33.66131 + ], + [ + -117.648617, + 33.661088 + ], + [ + -117.649286, + 33.660986 + ], + [ + -117.649713, + 33.660903 + ], + [ + -117.650144, + 33.660786 + ], + [ + -117.651537, + 33.660323 + ], + [ + -117.65188, + 33.660262 + ], + [ + -117.652265, + 33.660125 + ], + [ + -117.652426, + 33.660136 + ], + [ + -117.652626, + 33.660675 + ], + [ + -117.652639, + 33.660766 + ], + [ + -117.652294, + 33.660853 + ], + [ + -117.652023, + 33.661102 + ], + [ + -117.65166, + 33.661628 + ], + [ + -117.6514, + 33.661955 + ], + [ + -117.650803, + 33.662218 + ], + [ + -117.650383, + 33.662411 + ], + [ + -117.649529, + 33.662783 + ], + [ + -117.649237, + 33.662915 + ], + [ + -117.648982, + 33.663058 + ], + [ + -117.648894, + 33.663029 + ], + [ + -117.648759, + 33.662966 + ], + [ + -117.648593, + 33.6629 + ], + [ + -117.648785, + 33.662875 + ], + [ + -117.648854, + 33.662842 + ], + [ + -117.648922, + 33.66278 + ], + [ + -117.648931, + 33.662712 + ], + [ + -117.648924, + 33.662672 + ], + [ + -117.648896, + 33.66263 + ], + [ + -117.648832, + 33.662593 + ], + [ + -117.648257, + 33.662607 + ], + [ + -117.646366, + 33.662685 + ], + [ + -117.646275, + 33.662736 + ], + [ + -117.64589, + 33.662831 + ], + [ + -117.6442, + 33.66306 + ], + [ + -117.643155, + 33.662339 + ], + [ + -117.642428, + 33.662196 + ], + [ + -117.642076, + 33.662195 + ], + [ + -117.642063, + 33.661038 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 515933274, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.605072, + 33.644286 + ], + [ + -117.605842, + 33.643788 + ], + [ + -117.606853, + 33.642847 + ], + [ + -117.60772, + 33.642071 + ], + [ + -117.609048, + 33.641207 + ], + [ + -117.6099, + 33.640284 + ], + [ + -117.611202, + 33.639146 + ], + [ + -117.612187, + 33.638616 + ], + [ + -117.612962, + 33.637837 + ], + [ + -117.613255, + 33.637633 + ], + [ + -117.613492, + 33.63765 + ], + [ + -117.613826, + 33.637725 + ], + [ + -117.613936, + 33.637117 + ], + [ + -117.614023, + 33.636641 + ], + [ + -117.613999, + 33.636237 + ], + [ + -117.613974, + 33.635795 + ], + [ + -117.614321, + 33.635674 + ], + [ + -117.614901, + 33.635629 + ], + [ + -117.614889, + 33.634655 + ], + [ + -117.614612, + 33.634428 + ], + [ + -117.614205, + 33.634012 + ], + [ + -117.612585, + 33.635363 + ], + [ + -117.609245, + 33.635825 + ], + [ + -117.60915, + 33.633584 + ], + [ + -117.610203, + 33.632724 + ], + [ + -117.610394, + 33.632116 + ], + [ + -117.610895, + 33.631155 + ], + [ + -117.612012, + 33.629424 + ], + [ + -117.612763, + 33.629036 + ], + [ + -117.613272, + 33.628855 + ], + [ + -117.613598, + 33.628927 + ], + [ + -117.613801, + 33.629669 + ], + [ + -117.614391, + 33.629725 + ], + [ + -117.61458, + 33.62964 + ], + [ + -117.614746, + 33.629543 + ], + [ + -117.614981, + 33.629581 + ], + [ + -117.615101, + 33.629537 + ], + [ + -117.615158, + 33.629452 + ], + [ + -117.615107, + 33.629326 + ], + [ + -117.615129, + 33.629109 + ], + [ + -117.61511, + 33.62872 + ], + [ + -117.614922, + 33.6284 + ], + [ + -117.614741, + 33.628128 + ], + [ + -117.61522, + 33.627966 + ], + [ + -117.615972, + 33.627861 + ], + [ + -117.616158, + 33.628209 + ], + [ + -117.616576, + 33.628418 + ], + [ + -117.617148, + 33.6282 + ], + [ + -117.617752, + 33.62745 + ], + [ + -117.618805, + 33.626717 + ], + [ + -117.61982, + 33.6266 + ], + [ + -117.61988, + 33.625993 + ], + [ + -117.620163, + 33.625374 + ], + [ + -117.620582, + 33.623948 + ], + [ + -117.62072, + 33.623726 + ], + [ + -117.621271, + 33.623215 + ], + [ + -117.621563, + 33.622898 + ], + [ + -117.621651, + 33.622802 + ], + [ + -117.622016, + 33.621874 + ], + [ + -117.622083, + 33.621649 + ], + [ + -117.622093, + 33.621269 + ], + [ + -117.621497, + 33.620157 + ], + [ + -117.621869, + 33.619143 + ], + [ + -117.622232, + 33.618157 + ], + [ + -117.622078, + 33.616924 + ], + [ + -117.621761, + 33.615708 + ], + [ + -117.621965, + 33.615194 + ], + [ + -117.62205, + 33.615088 + ], + [ + -117.622777, + 33.614574 + ], + [ + -117.622871, + 33.614507 + ], + [ + -117.623612, + 33.613626 + ], + [ + -117.623426, + 33.612388 + ], + [ + -117.62324, + 33.612124 + ], + [ + -117.623344, + 33.611529 + ], + [ + -117.623496, + 33.611172 + ], + [ + -117.623739, + 33.61086 + ], + [ + -117.62394, + 33.610369 + ], + [ + -117.624094, + 33.609974 + ], + [ + -117.624221, + 33.609335 + ], + [ + -117.624686, + 33.60851 + ], + [ + -117.626155, + 33.607081 + ], + [ + -117.625978, + 33.606702 + ], + [ + -117.625433, + 33.605912 + ], + [ + -117.625218, + 33.605601 + ], + [ + -117.625253, + 33.604231 + ], + [ + -117.625582, + 33.603334 + ], + [ + -117.625989, + 33.602929 + ], + [ + -117.626107, + 33.60227 + ], + [ + -117.626291, + 33.602193 + ], + [ + -117.626857, + 33.601955 + ], + [ + -117.62718, + 33.601561 + ], + [ + -117.627523, + 33.601143 + ], + [ + -117.627558, + 33.600401 + ], + [ + -117.628958, + 33.599059 + ], + [ + -117.629678, + 33.598901 + ], + [ + -117.62992, + 33.598547 + ], + [ + -117.630369, + 33.598155 + ], + [ + -117.630699, + 33.59724 + ], + [ + -117.630645, + 33.596465 + ], + [ + -117.630595, + 33.59575 + ], + [ + -117.630447, + 33.595702 + ], + [ + -117.630945, + 33.593994 + ], + [ + -117.631193, + 33.593193 + ], + [ + -117.63069, + 33.591948 + ], + [ + -117.630559, + 33.591622 + ], + [ + -117.630388, + 33.591201 + ], + [ + -117.630825, + 33.589609 + ], + [ + -117.631376, + 33.589157 + ], + [ + -117.631886, + 33.588981 + ], + [ + -117.632267, + 33.588426 + ], + [ + -117.63273, + 33.588048 + ], + [ + -117.632991, + 33.586764 + ], + [ + -117.633082, + 33.586646 + ], + [ + -117.634192, + 33.585209 + ], + [ + -117.63442, + 33.584914 + ], + [ + -117.634772, + 33.584275 + ], + [ + -117.634924, + 33.584001 + ], + [ + -117.63522, + 33.583465 + ], + [ + -117.635245, + 33.583419 + ], + [ + -117.635585, + 33.583462 + ], + [ + -117.635667, + 33.583472 + ], + [ + -117.636087, + 33.583255 + ], + [ + -117.636991, + 33.584367 + ], + [ + -117.638047, + 33.582893 + ], + [ + -117.638401, + 33.580861 + ], + [ + -117.637485, + 33.579001 + ], + [ + -117.638454, + 33.577567 + ], + [ + -117.639081, + 33.576638 + ], + [ + -117.639779, + 33.57576 + ], + [ + -117.640038, + 33.575465 + ], + [ + -117.641639, + 33.573983 + ], + [ + -117.643049, + 33.572701 + ], + [ + -117.644681, + 33.570772 + ], + [ + -117.647541, + 33.567279 + ], + [ + -117.648432, + 33.565967 + ], + [ + -117.649935, + 33.564051 + ], + [ + -117.649971, + 33.564006 + ], + [ + -117.650092, + 33.563697 + ], + [ + -117.650291, + 33.563677 + ], + [ + -117.65048, + 33.563526 + ], + [ + -117.650635, + 33.563217 + ], + [ + -117.650582, + 33.562668 + ], + [ + -117.65051, + 33.562474 + ], + [ + -117.65065, + 33.562185 + ], + [ + -117.651042, + 33.561136 + ], + [ + -117.651088, + 33.561012 + ], + [ + -117.651336, + 33.560252 + ], + [ + -117.652381, + 33.557056 + ], + [ + -117.652577, + 33.556685 + ], + [ + -117.652845, + 33.556289 + ], + [ + -117.653566, + 33.554987 + ], + [ + -117.654001, + 33.554166 + ], + [ + -117.654316, + 33.553886 + ], + [ + -117.654331, + 33.553869 + ], + [ + -117.654529, + 33.553633 + ], + [ + -117.654361, + 33.553515 + ], + [ + -117.654296, + 33.553544 + ], + [ + -117.654854, + 33.552592 + ], + [ + -117.654792, + 33.552808 + ], + [ + -117.654851, + 33.553125 + ], + [ + -117.655083, + 33.553387 + ], + [ + -117.655321, + 33.553421 + ], + [ + -117.655661, + 33.553456 + ], + [ + -117.656077, + 33.553264 + ], + [ + -117.656286, + 33.553097 + ], + [ + -117.656401, + 33.552699 + ], + [ + -117.656445, + 33.552356 + ], + [ + -117.65659, + 33.552073 + ], + [ + -117.656845, + 33.551534 + ], + [ + -117.65706, + 33.551195 + ], + [ + -117.657203, + 33.550969 + ], + [ + -117.65759, + 33.550576 + ], + [ + -117.657907, + 33.550268 + ], + [ + -117.657985, + 33.549955 + ], + [ + -117.657741, + 33.548948 + ], + [ + -117.657821, + 33.548549 + ], + [ + -117.657974, + 33.548008 + ], + [ + -117.658021, + 33.54758 + ], + [ + -117.657861, + 33.547204 + ], + [ + -117.657803, + 33.54686 + ], + [ + -117.657744, + 33.546543 + ], + [ + -117.65782, + 33.546287 + ], + [ + -117.658145, + 33.545664 + ], + [ + -117.658491, + 33.545529 + ], + [ + -117.658726, + 33.544503 + ], + [ + -117.658844, + 33.54399 + ], + [ + -117.658933, + 33.543276 + ], + [ + -117.659261, + 33.542567 + ], + [ + -117.659693, + 33.541832 + ], + [ + -117.659815, + 33.541694 + ], + [ + -117.660117, + 33.541354 + ], + [ + -117.660505, + 33.540904 + ], + [ + -117.660793, + 33.540424 + ], + [ + -117.660947, + 33.540167 + ], + [ + -117.661116, + 33.539886 + ], + [ + -117.661529, + 33.53978 + ], + [ + -117.661546, + 33.539923 + ], + [ + -117.661553, + 33.539979 + ], + [ + -117.661584, + 33.54024 + ], + [ + -117.661365, + 33.540722 + ], + [ + -117.660939, + 33.541257 + ], + [ + -117.660202, + 33.541928 + ], + [ + -117.659813, + 33.542378 + ], + [ + -117.65963, + 33.542804 + ], + [ + -117.659655, + 33.543119 + ], + [ + -117.659848, + 33.543496 + ], + [ + -117.659795, + 33.543784 + ], + [ + -117.659633, + 33.544286 + ], + [ + -117.65947, + 33.544838 + ], + [ + -117.659409, + 33.545474 + ], + [ + -117.659409, + 33.545795 + ], + [ + -117.659808, + 33.54584 + ], + [ + -117.660085, + 33.546004 + ], + [ + -117.660626, + 33.546088 + ], + [ + -117.66107, + 33.545969 + ], + [ + -117.661371, + 33.545159 + ], + [ + -117.661548, + 33.544933 + ], + [ + -117.661791, + 33.544795 + ], + [ + -117.662039, + 33.544486 + ], + [ + -117.662153, + 33.544116 + ], + [ + -117.662209, + 33.543373 + ], + [ + -117.662227, + 33.542743 + ], + [ + -117.662678, + 33.542524 + ], + [ + -117.6634, + 33.542338 + ], + [ + -117.663681, + 33.54215 + ], + [ + -117.663823, + 33.542336 + ], + [ + -117.663755, + 33.542824 + ], + [ + -117.663485, + 33.543074 + ], + [ + -117.663201, + 33.543001 + ], + [ + -117.66291, + 33.542685 + ], + [ + -117.662565, + 33.542854 + ], + [ + -117.662802, + 33.543164 + ], + [ + -117.662626, + 33.543677 + ], + [ + -117.662854, + 33.544443 + ], + [ + -117.662475, + 33.545405 + ], + [ + -117.662019, + 33.545841 + ], + [ + -117.661862, + 33.546331 + ], + [ + -117.661658, + 33.54697 + ], + [ + -117.661687, + 33.549023 + ], + [ + -117.661883, + 33.549558 + ], + [ + -117.661838, + 33.551044 + ], + [ + -117.661276, + 33.552105 + ], + [ + -117.661203, + 33.552292 + ], + [ + -117.660745, + 33.552875 + ], + [ + -117.659855, + 33.554505 + ], + [ + -117.660041, + 33.555518 + ], + [ + -117.659855, + 33.555659 + ], + [ + -117.659586, + 33.556025 + ], + [ + -117.659451, + 33.556223 + ], + [ + -117.659243, + 33.556389 + ], + [ + -117.65909, + 33.556572 + ], + [ + -117.658796, + 33.557076 + ], + [ + -117.658734, + 33.557061 + ], + [ + -117.657743, + 33.557258 + ], + [ + -117.657463, + 33.557948 + ], + [ + -117.656825, + 33.5585 + ], + [ + -117.655962, + 33.559612 + ], + [ + -117.655359, + 33.560729 + ], + [ + -117.654663, + 33.561454 + ], + [ + -117.654239, + 33.561793 + ], + [ + -117.653409, + 33.561775 + ], + [ + -117.653209, + 33.561554 + ], + [ + -117.652431, + 33.561538 + ], + [ + -117.65237, + 33.563623 + ], + [ + -117.654796, + 33.563548 + ], + [ + -117.652682, + 33.566985 + ], + [ + -117.652295, + 33.568238 + ], + [ + -117.650949, + 33.569851 + ], + [ + -117.650771, + 33.570103 + ], + [ + -117.650744, + 33.570141 + ], + [ + -117.650471, + 33.570528 + ], + [ + -117.650387, + 33.570647 + ], + [ + -117.649643, + 33.571334 + ], + [ + -117.649063, + 33.57249 + ], + [ + -117.647855, + 33.572883 + ], + [ + -117.646833, + 33.573513 + ], + [ + -117.646296, + 33.574849 + ], + [ + -117.646179, + 33.575324 + ], + [ + -117.645597, + 33.575704 + ], + [ + -117.645337, + 33.575813 + ], + [ + -117.645406, + 33.575616 + ], + [ + -117.645494, + 33.575478 + ], + [ + -117.64533, + 33.575373 + ], + [ + -117.645169, + 33.575479 + ], + [ + -117.64477, + 33.575797 + ], + [ + -117.644634, + 33.575973 + ], + [ + -117.64465, + 33.576082 + ], + [ + -117.644748, + 33.576338 + ], + [ + -117.644424, + 33.576766 + ], + [ + -117.644934, + 33.577081 + ], + [ + -117.644928, + 33.577254 + ], + [ + -117.644291, + 33.577762 + ], + [ + -117.643765, + 33.578012 + ], + [ + -117.642863, + 33.578689 + ], + [ + -117.642427, + 33.579419 + ], + [ + -117.642095, + 33.580107 + ], + [ + -117.641565, + 33.580487 + ], + [ + -117.64103, + 33.580532 + ], + [ + -117.640791, + 33.580527 + ], + [ + -117.640771, + 33.580655 + ], + [ + -117.640748, + 33.580841 + ], + [ + -117.640625, + 33.580967 + ], + [ + -117.640601, + 33.581181 + ], + [ + -117.640663, + 33.581383 + ], + [ + -117.640931, + 33.581561 + ], + [ + -117.641112, + 33.581808 + ], + [ + -117.641105, + 33.582051 + ], + [ + -117.641151, + 33.582238 + ], + [ + -117.641317, + 33.582399 + ], + [ + -117.641534, + 33.582419 + ], + [ + -117.64191, + 33.582841 + ], + [ + -117.641682, + 33.583532 + ], + [ + -117.641244, + 33.584305 + ], + [ + -117.641076, + 33.584736 + ], + [ + -117.640949, + 33.585516 + ], + [ + -117.640547, + 33.586812 + ], + [ + -117.639468, + 33.586485 + ], + [ + -117.638968, + 33.587604 + ], + [ + -117.638766, + 33.588544 + ], + [ + -117.638549, + 33.588696 + ], + [ + -117.638578, + 33.588897 + ], + [ + -117.638738, + 33.590403 + ], + [ + -117.638745, + 33.590747 + ], + [ + -117.638946, + 33.590879 + ], + [ + -117.639047, + 33.59091 + ], + [ + -117.639928, + 33.590751 + ], + [ + -117.640151, + 33.590954 + ], + [ + -117.639575, + 33.592597 + ], + [ + -117.639408, + 33.593402 + ], + [ + -117.63915, + 33.594115 + ], + [ + -117.639454, + 33.594184 + ], + [ + -117.63975, + 33.594382 + ], + [ + -117.640115, + 33.594411 + ], + [ + -117.640126, + 33.595029 + ], + [ + -117.639278, + 33.596395 + ], + [ + -117.638024, + 33.59621 + ], + [ + -117.637406, + 33.59726 + ], + [ + -117.637249, + 33.597929 + ], + [ + -117.637061, + 33.598245 + ], + [ + -117.636731, + 33.598348 + ], + [ + -117.636366, + 33.599089 + ], + [ + -117.63608, + 33.599111 + ], + [ + -117.635983, + 33.599119 + ], + [ + -117.635956, + 33.599133 + ], + [ + -117.635602, + 33.599311 + ], + [ + -117.635474, + 33.599581 + ], + [ + -117.635775, + 33.599766 + ], + [ + -117.634704, + 33.600577 + ], + [ + -117.634167, + 33.600757 + ], + [ + -117.633819, + 33.601133 + ], + [ + -117.634365, + 33.602333 + ], + [ + -117.634173, + 33.602567 + ], + [ + -117.63425, + 33.60305 + ], + [ + -117.634056, + 33.603567 + ], + [ + -117.633948, + 33.60403 + ], + [ + -117.633981, + 33.604444 + ], + [ + -117.633814, + 33.60495 + ], + [ + -117.633502, + 33.60522 + ], + [ + -117.633445, + 33.605238 + ], + [ + -117.633063, + 33.605518 + ], + [ + -117.632957, + 33.605744 + ], + [ + -117.632634, + 33.606189 + ], + [ + -117.632025, + 33.607387 + ], + [ + -117.632141, + 33.607682 + ], + [ + -117.632513, + 33.607845 + ], + [ + -117.632695, + 33.607927 + ], + [ + -117.632587, + 33.608144 + ], + [ + -117.632248, + 33.608558 + ], + [ + -117.631988, + 33.608971 + ], + [ + -117.6318, + 33.609357 + ], + [ + -117.631706, + 33.609664 + ], + [ + -117.63072, + 33.609525 + ], + [ + -117.630457, + 33.609519 + ], + [ + -117.630352, + 33.609738 + ], + [ + -117.630433, + 33.610345 + ], + [ + -117.630351, + 33.610867 + ], + [ + -117.630339, + 33.611285 + ], + [ + -117.630281, + 33.611315 + ], + [ + -117.630027, + 33.611624 + ], + [ + -117.629997, + 33.611976 + ], + [ + -117.630149, + 33.612229 + ], + [ + -117.630165, + 33.612558 + ], + [ + -117.630069, + 33.612933 + ], + [ + -117.630103, + 33.613125 + ], + [ + -117.630374, + 33.613388 + ], + [ + -117.630691, + 33.613667 + ], + [ + -117.630916, + 33.613958 + ], + [ + -117.630978, + 33.614178 + ], + [ + -117.631004, + 33.614272 + ], + [ + -117.631017, + 33.61432 + ], + [ + -117.631032, + 33.614568 + ], + [ + -117.630989, + 33.615052 + ], + [ + -117.630979, + 33.615442 + ], + [ + -117.630843, + 33.615745 + ], + [ + -117.630629, + 33.615878 + ], + [ + -117.630371, + 33.616038 + ], + [ + -117.630129, + 33.616144 + ], + [ + -117.629301, + 33.616772 + ], + [ + -117.629098, + 33.615941 + ], + [ + -117.629273, + 33.615495 + ], + [ + -117.629257, + 33.615017 + ], + [ + -117.62925, + 33.614671 + ], + [ + -117.629358, + 33.614199 + ], + [ + -117.629377, + 33.612955 + ], + [ + -117.629116, + 33.612791 + ], + [ + -117.628315, + 33.612547 + ], + [ + -117.627951, + 33.614024 + ], + [ + -117.628042, + 33.614546 + ], + [ + -117.627941, + 33.615146 + ], + [ + -117.62788, + 33.615845 + ], + [ + -117.628197, + 33.616844 + ], + [ + -117.627369, + 33.617177 + ], + [ + -117.627562, + 33.617517 + ], + [ + -117.627939, + 33.617857 + ], + [ + -117.628047, + 33.61805 + ], + [ + -117.628041, + 33.618273 + ], + [ + -117.628042, + 33.618653 + ], + [ + -117.627491, + 33.618893 + ], + [ + -117.626982, + 33.619365 + ], + [ + -117.627083, + 33.619812 + ], + [ + -117.627459, + 33.61993 + ], + [ + -117.627601, + 33.620153 + ], + [ + -117.627673, + 33.620397 + ], + [ + -117.627347, + 33.620867 + ], + [ + -117.626852, + 33.620971 + ], + [ + -117.626689, + 33.621279 + ], + [ + -117.626978, + 33.621776 + ], + [ + -117.626968, + 33.622161 + ], + [ + -117.627076, + 33.62265 + ], + [ + -117.627185, + 33.623188 + ], + [ + -117.62719, + 33.62384 + ], + [ + -117.627204, + 33.624635 + ], + [ + -117.627053, + 33.625017 + ], + [ + -117.627014, + 33.625385 + ], + [ + -117.627053, + 33.625905 + ], + [ + -117.627179, + 33.626313 + ], + [ + -117.627022, + 33.626922 + ], + [ + -117.627056, + 33.62767 + ], + [ + -117.62708, + 33.628195 + ], + [ + -117.626845, + 33.629038 + ], + [ + -117.626846, + 33.630279 + ], + [ + -117.626839, + 33.631774 + ], + [ + -117.62526, + 33.632473 + ], + [ + -117.62365, + 33.63321 + ], + [ + -117.621923, + 33.634789 + ], + [ + -117.620997, + 33.63572 + ], + [ + -117.620223, + 33.636308 + ], + [ + -117.619956, + 33.636668 + ], + [ + -117.619601, + 33.637028 + ], + [ + -117.619077, + 33.637968 + ], + [ + -117.618817, + 33.638273 + ], + [ + -117.618547, + 33.63876 + ], + [ + -117.619173, + 33.639049 + ], + [ + -117.619955, + 33.639575 + ], + [ + -117.620453, + 33.63994 + ], + [ + -117.621017, + 33.640519 + ], + [ + -117.621615, + 33.641264 + ], + [ + -117.621817, + 33.641605 + ], + [ + -117.622308, + 33.642234 + ], + [ + -117.62111, + 33.642877 + ], + [ + -117.620157, + 33.641807 + ], + [ + -117.619279, + 33.641802 + ], + [ + -117.618257, + 33.642184 + ], + [ + -117.61751, + 33.642546 + ], + [ + -117.616784, + 33.644807 + ], + [ + -117.616543, + 33.64494 + ], + [ + -117.615894, + 33.644406 + ], + [ + -117.615249, + 33.644555 + ], + [ + -117.614857, + 33.644835 + ], + [ + -117.614324, + 33.644856 + ], + [ + -117.613647, + 33.644619 + ], + [ + -117.613747, + 33.64446 + ], + [ + -117.613787, + 33.644113 + ], + [ + -117.613686, + 33.643917 + ], + [ + -117.61364, + 33.643759 + ], + [ + -117.613549, + 33.643587 + ], + [ + -117.613471, + 33.643448 + ], + [ + -117.613188, + 33.643383 + ], + [ + -117.612879, + 33.643345 + ], + [ + -117.612633, + 33.64351 + ], + [ + -117.612489, + 33.64366 + ], + [ + -117.612143, + 33.644152 + ], + [ + -117.612201, + 33.644671 + ], + [ + -117.611982, + 33.644736 + ], + [ + -117.61167, + 33.645037 + ], + [ + -117.61173, + 33.645392 + ], + [ + -117.611515, + 33.645523 + ], + [ + -117.611252, + 33.645716 + ], + [ + -117.61121, + 33.645965 + ], + [ + -117.611211, + 33.646 + ], + [ + -117.611262, + 33.646239 + ], + [ + -117.611685, + 33.646568 + ], + [ + -117.611813, + 33.646735 + ], + [ + -117.61168, + 33.646837 + ], + [ + -117.610694, + 33.64751 + ], + [ + -117.610234, + 33.64784 + ], + [ + -117.608965, + 33.648354 + ], + [ + -117.609242, + 33.649206 + ], + [ + -117.609026, + 33.64925 + ], + [ + -117.609302, + 33.649681 + ], + [ + -117.609109, + 33.649876 + ], + [ + -117.608508, + 33.649476 + ], + [ + -117.607629, + 33.648667 + ], + [ + -117.606808, + 33.647596 + ], + [ + -117.606341, + 33.646761 + ], + [ + -117.605072, + 33.644286 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 515946145, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.68974, + 33.662707 + ], + [ + -117.690232, + 33.66251 + ], + [ + -117.69081, + 33.662323 + ], + [ + -117.691365, + 33.662198 + ], + [ + -117.691973, + 33.662089 + ], + [ + -117.692052, + 33.662437 + ], + [ + -117.69207, + 33.662541 + ], + [ + -117.692463, + 33.66271 + ], + [ + -117.692985, + 33.662686 + ], + [ + -117.694247, + 33.662776 + ], + [ + -117.694922, + 33.662737 + ], + [ + -117.695226, + 33.663042 + ], + [ + -117.6953, + 33.663353 + ], + [ + -117.695841, + 33.663629 + ], + [ + -117.695576, + 33.664162 + ], + [ + -117.699583, + 33.666894 + ], + [ + -117.699426, + 33.666952 + ], + [ + -117.695448, + 33.668288 + ], + [ + -117.694379, + 33.66864 + ], + [ + -117.69402, + 33.668756 + ], + [ + -117.693652, + 33.668854 + ], + [ + -117.692926, + 33.669028 + ], + [ + -117.691896, + 33.669216 + ], + [ + -117.691043, + 33.669414 + ], + [ + -117.69038, + 33.669629 + ], + [ + -117.69016, + 33.669714 + ], + [ + -117.690058, + 33.669688 + ], + [ + -117.689967, + 33.66951 + ], + [ + -117.690793, + 33.669146 + ], + [ + -117.690868, + 33.669113 + ], + [ + -117.691158, + 33.668792 + ], + [ + -117.691078, + 33.668297 + ], + [ + -117.69088, + 33.667671 + ], + [ + -117.690852, + 33.667584 + ], + [ + -117.690284, + 33.666739 + ], + [ + -117.690686, + 33.666584 + ], + [ + -117.69095, + 33.666912 + ], + [ + -117.691782, + 33.667386 + ], + [ + -117.693358, + 33.666722 + ], + [ + -117.693017, + 33.666026 + ], + [ + -117.692969, + 33.666005 + ], + [ + -117.693168, + 33.665749 + ], + [ + -117.693264, + 33.665792 + ], + [ + -117.693946, + 33.665521 + ], + [ + -117.694128, + 33.664527 + ], + [ + -117.69391, + 33.664277 + ], + [ + -117.693053, + 33.664054 + ], + [ + -117.692891, + 33.664244 + ], + [ + -117.692046, + 33.663731 + ], + [ + -117.691724, + 33.663767 + ], + [ + -117.691453, + 33.663405 + ], + [ + -117.690721, + 33.663235 + ], + [ + -117.690288, + 33.662812 + ], + [ + -117.690039, + 33.662722 + ], + [ + -117.689872, + 33.662731 + ], + [ + -117.68974, + 33.662707 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 515949370, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.758799, + 33.784921 + ], + [ + -117.758718, + 33.784859 + ], + [ + -117.758528, + 33.783137 + ], + [ + -117.7586, + 33.782174 + ], + [ + -117.758756, + 33.781441 + ], + [ + -117.759509, + 33.778354 + ], + [ + -117.759474, + 33.776662 + ], + [ + -117.759385, + 33.775549 + ], + [ + -117.759455, + 33.774481 + ], + [ + -117.760123, + 33.771993 + ], + [ + -117.761043, + 33.772014 + ], + [ + -117.761566, + 33.772009 + ], + [ + -117.761892, + 33.771609 + ], + [ + -117.762281, + 33.771132 + ], + [ + -117.762568, + 33.769879 + ], + [ + -117.762384, + 33.769718 + ], + [ + -117.762706, + 33.76941 + ], + [ + -117.762718, + 33.76899 + ], + [ + -117.763423, + 33.76848 + ], + [ + -117.762257, + 33.767565 + ], + [ + -117.762431, + 33.767264 + ], + [ + -117.762462, + 33.76694 + ], + [ + -117.762451, + 33.766251 + ], + [ + -117.762604, + 33.766267 + ], + [ + -117.762763, + 33.76623 + ], + [ + -117.763012, + 33.766057 + ], + [ + -117.763134, + 33.766159 + ], + [ + -117.763329, + 33.766207 + ], + [ + -117.763501, + 33.766322 + ], + [ + -117.763657, + 33.766478 + ], + [ + -117.764383, + 33.766275 + ], + [ + -117.764463, + 33.76624 + ], + [ + -117.764526, + 33.766193 + ], + [ + -117.764586, + 33.766135 + ], + [ + -117.764634, + 33.766072 + ], + [ + -117.764665, + 33.765996 + ], + [ + -117.764824, + 33.765976 + ], + [ + -117.765967, + 33.765895 + ], + [ + -117.76606, + 33.765888 + ], + [ + -117.766094, + 33.765801 + ], + [ + -117.766094, + 33.765598 + ], + [ + -117.766147, + 33.765314 + ], + [ + -117.766141, + 33.765129 + ], + [ + -117.766071, + 33.764986 + ], + [ + -117.766051, + 33.764889 + ], + [ + -117.766076, + 33.764773 + ], + [ + -117.766143, + 33.764541 + ], + [ + -117.766126, + 33.764404 + ], + [ + -117.766125, + 33.764324 + ], + [ + -117.766132, + 33.764263 + ], + [ + -117.766175, + 33.764188 + ], + [ + -117.766328, + 33.763951 + ], + [ + -117.766418, + 33.763836 + ], + [ + -117.766511, + 33.763725 + ], + [ + -117.766578, + 33.763657 + ], + [ + -117.76664, + 33.76359 + ], + [ + -117.766682, + 33.763563 + ], + [ + -117.766722, + 33.76355 + ], + [ + -117.766753, + 33.763552 + ], + [ + -117.766792, + 33.763556 + ], + [ + -117.766853, + 33.763576 + ], + [ + -117.766897, + 33.763588 + ], + [ + -117.766932, + 33.763597 + ], + [ + -117.766967, + 33.763593 + ], + [ + -117.767032, + 33.763567 + ], + [ + -117.767068, + 33.763587 + ], + [ + -117.767102, + 33.763638 + ], + [ + -117.767218, + 33.763878 + ], + [ + -117.76731, + 33.764041 + ], + [ + -117.767738, + 33.764115 + ], + [ + -117.76779, + 33.76397 + ], + [ + -117.767779, + 33.763831 + ], + [ + -117.767739, + 33.763762 + ], + [ + -117.7677, + 33.76364 + ], + [ + -117.767684, + 33.763545 + ], + [ + -117.767718, + 33.763465 + ], + [ + -117.767781, + 33.763382 + ], + [ + -117.767793, + 33.76331 + ], + [ + -117.767766, + 33.763216 + ], + [ + -117.767732, + 33.763119 + ], + [ + -117.76774, + 33.763043 + ], + [ + -117.767709, + 33.762998 + ], + [ + -117.767769, + 33.762884 + ], + [ + -117.767778, + 33.762814 + ], + [ + -117.767621, + 33.762661 + ], + [ + -117.767633, + 33.7625 + ], + [ + -117.767617, + 33.761987 + ], + [ + -117.767391, + 33.762066 + ], + [ + -117.767251, + 33.762165 + ], + [ + -117.767081, + 33.762368 + ], + [ + -117.767075, + 33.762302 + ], + [ + -117.767126, + 33.762166 + ], + [ + -117.767187, + 33.762057 + ], + [ + -117.767289, + 33.761962 + ], + [ + -117.76745, + 33.761821 + ], + [ + -117.767628, + 33.761504 + ], + [ + -117.768143, + 33.761485 + ], + [ + -117.768312, + 33.761386 + ], + [ + -117.768385, + 33.761263 + ], + [ + -117.768341, + 33.760917 + ], + [ + -117.768447, + 33.76063 + ], + [ + -117.768274, + 33.760641 + ], + [ + -117.768125, + 33.760639 + ], + [ + -117.768125, + 33.760504 + ], + [ + -117.76839, + 33.760503 + ], + [ + -117.768592, + 33.760263 + ], + [ + -117.768534, + 33.760081 + ], + [ + -117.76839, + 33.759753 + ], + [ + -117.768288, + 33.759722 + ], + [ + -117.768298, + 33.759619 + ], + [ + -117.768288, + 33.759473 + ], + [ + -117.768287, + 33.759306 + ], + [ + -117.768406, + 33.758999 + ], + [ + -117.768534, + 33.758817 + ], + [ + -117.768786, + 33.758669 + ], + [ + -117.769332, + 33.758439 + ], + [ + -117.769739, + 33.758228 + ], + [ + -117.770161, + 33.758454 + ], + [ + -117.770319, + 33.758419 + ], + [ + -117.7707, + 33.75811 + ], + [ + -117.770994, + 33.757903 + ], + [ + -117.77121, + 33.757914 + ], + [ + -117.771528, + 33.758491 + ], + [ + -117.771668, + 33.75863 + ], + [ + -117.771844, + 33.758591 + ], + [ + -117.772758, + 33.760461 + ], + [ + -117.773794, + 33.759991 + ], + [ + -117.774081, + 33.759861 + ], + [ + -117.774343, + 33.759622 + ], + [ + -117.774867, + 33.760022 + ], + [ + -117.77357, + 33.761055 + ], + [ + -117.773382, + 33.760967 + ], + [ + -117.773309, + 33.761056 + ], + [ + -117.772535, + 33.761997 + ], + [ + -117.772402, + 33.76216 + ], + [ + -117.772556, + 33.762437 + ], + [ + -117.772712, + 33.76296 + ], + [ + -117.774425, + 33.763191 + ], + [ + -117.774291, + 33.763605 + ], + [ + -117.773003, + 33.764672 + ], + [ + -117.772373, + 33.765174 + ], + [ + -117.772145, + 33.765356 + ], + [ + -117.772042, + 33.76547 + ], + [ + -117.771441, + 33.766131 + ], + [ + -117.770304, + 33.765583 + ], + [ + -117.77, + 33.765905 + ], + [ + -117.768997, + 33.766969 + ], + [ + -117.768196, + 33.76782 + ], + [ + -117.767917, + 33.768042 + ], + [ + -117.767036, + 33.768745 + ], + [ + -117.766587, + 33.769103 + ], + [ + -117.766268, + 33.769454 + ], + [ + -117.765727, + 33.77005 + ], + [ + -117.765681, + 33.770101 + ], + [ + -117.765126, + 33.770712 + ], + [ + -117.764477, + 33.771427 + ], + [ + -117.764659, + 33.772395 + ], + [ + -117.764489, + 33.772732 + ], + [ + -117.764084, + 33.773533 + ], + [ + -117.763599, + 33.774493 + ], + [ + -117.763593, + 33.774501 + ], + [ + -117.762887, + 33.775426 + ], + [ + -117.761959, + 33.776642 + ], + [ + -117.761836, + 33.776803 + ], + [ + -117.762212, + 33.777041 + ], + [ + -117.762818, + 33.777425 + ], + [ + -117.764646, + 33.778583 + ], + [ + -117.767744, + 33.780699 + ], + [ + -117.767964, + 33.780849 + ], + [ + -117.771182, + 33.783047 + ], + [ + -117.771015, + 33.783328 + ], + [ + -117.770763, + 33.783764 + ], + [ + -117.77008, + 33.78329 + ], + [ + -117.768313, + 33.783014 + ], + [ + -117.767344, + 33.783316 + ], + [ + -117.764357, + 33.785443 + ], + [ + -117.76264, + 33.785069 + ], + [ + -117.761832, + 33.785061 + ], + [ + -117.7611, + 33.784994 + ], + [ + -117.760604, + 33.784948 + ], + [ + -117.759526, + 33.784907 + ], + [ + -117.758799, + 33.784921 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 515962789, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.627232, + 33.668569 + ], + [ + -117.627378, + 33.6684 + ], + [ + -117.627557, + 33.668156 + ], + [ + -117.62817, + 33.667479 + ], + [ + -117.628424, + 33.667223 + ], + [ + -117.628886, + 33.666755 + ], + [ + -117.629178, + 33.666461 + ], + [ + -117.629521, + 33.666114 + ], + [ + -117.63039, + 33.665616 + ], + [ + -117.630977, + 33.665279 + ], + [ + -117.631306, + 33.66501 + ], + [ + -117.631969, + 33.664616 + ], + [ + -117.63349, + 33.664055 + ], + [ + -117.634939, + 33.663385 + ], + [ + -117.636297, + 33.662567 + ], + [ + -117.63715, + 33.662274 + ], + [ + -117.63886, + 33.663278 + ], + [ + -117.640556, + 33.664099 + ], + [ + -117.641501, + 33.664471 + ], + [ + -117.642149, + 33.665549 + ], + [ + -117.641133, + 33.665996 + ], + [ + -117.641592, + 33.666866 + ], + [ + -117.641661, + 33.66716 + ], + [ + -117.641976, + 33.66767 + ], + [ + -117.642299, + 33.667904 + ], + [ + -117.642557, + 33.668419 + ], + [ + -117.642769, + 33.669083 + ], + [ + -117.642481, + 33.669427 + ], + [ + -117.64232, + 33.66963 + ], + [ + -117.642758, + 33.670476 + ], + [ + -117.642943, + 33.670834 + ], + [ + -117.643213, + 33.671357 + ], + [ + -117.643508, + 33.671929 + ], + [ + -117.644031, + 33.67294 + ], + [ + -117.643987, + 33.673118 + ], + [ + -117.643933, + 33.673346 + ], + [ + -117.643984, + 33.673455 + ], + [ + -117.64434, + 33.673482 + ], + [ + -117.644219, + 33.673667 + ], + [ + -117.643694, + 33.67364 + ], + [ + -117.643168, + 33.673604 + ], + [ + -117.642814, + 33.673627 + ], + [ + -117.642422, + 33.673693 + ], + [ + -117.641392, + 33.673872 + ], + [ + -117.640695, + 33.673984 + ], + [ + -117.639949, + 33.674109 + ], + [ + -117.639665, + 33.67414 + ], + [ + -117.638711, + 33.672247 + ], + [ + -117.636854, + 33.668586 + ], + [ + -117.635475, + 33.665983 + ], + [ + -117.635132, + 33.66593 + ], + [ + -117.634869, + 33.66572 + ], + [ + -117.634531, + 33.665769 + ], + [ + -117.634429, + 33.666001 + ], + [ + -117.634161, + 33.666113 + ], + [ + -117.633276, + 33.667367 + ], + [ + -117.63275, + 33.667667 + ], + [ + -117.632536, + 33.667939 + ], + [ + -117.632375, + 33.668126 + ], + [ + -117.631989, + 33.667961 + ], + [ + -117.631774, + 33.6678 + ], + [ + -117.63172, + 33.667885 + ], + [ + -117.631629, + 33.668443 + ], + [ + -117.631034, + 33.668385 + ], + [ + -117.630728, + 33.668756 + ], + [ + -117.630245, + 33.668769 + ], + [ + -117.629221, + 33.669238 + ], + [ + -117.62862, + 33.669626 + ], + [ + -117.628647, + 33.670305 + ], + [ + -117.628142, + 33.67035 + ], + [ + -117.627659, + 33.670332 + ], + [ + -117.627241, + 33.670243 + ], + [ + -117.626876, + 33.670149 + ], + [ + -117.626529, + 33.670055 + ], + [ + -117.626475, + 33.669956 + ], + [ + -117.626801, + 33.66937 + ], + [ + -117.627232, + 33.668569 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 517475608, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.792034, + 33.691859 + ], + [ + -117.791978, + 33.691886 + ], + [ + -117.791909, + 33.691897 + ], + [ + -117.791856, + 33.691892 + ], + [ + -117.791837, + 33.69189 + ], + [ + -117.791786, + 33.691867 + ], + [ + -117.79174, + 33.691833 + ], + [ + -117.791699, + 33.69177 + ], + [ + -117.791691, + 33.691703 + ], + [ + -117.791722, + 33.691651 + ], + [ + -117.79177, + 33.691599 + ], + [ + -117.791843, + 33.691568 + ], + [ + -117.791921, + 33.691566 + ], + [ + -117.792002, + 33.691589 + ], + [ + -117.792062, + 33.691632 + ], + [ + -117.792101, + 33.691712 + ], + [ + -117.792098, + 33.691777 + ], + [ + -117.792065, + 33.691833 + ], + [ + -117.792034, + 33.691859 + ] + ] + ] + }, + "properties": { + "name": "Sand Volleyball Courts", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 517475612, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.792415, + 33.691576 + ], + [ + -117.792322, + 33.691524 + ], + [ + -117.792311, + 33.691505 + ], + [ + -117.792336, + 33.691474 + ], + [ + -117.792417, + 33.69138 + ], + [ + -117.792411, + 33.691353 + ], + [ + -117.792408, + 33.691333 + ], + [ + -117.79242, + 33.691318 + ], + [ + -117.792488, + 33.691302 + ], + [ + -117.79251, + 33.691309 + ], + [ + -117.792523, + 33.69132 + ], + [ + -117.792534, + 33.691389 + ], + [ + -117.792534, + 33.691408 + ], + [ + -117.792427, + 33.691537 + ], + [ + -117.792444, + 33.691545 + ], + [ + -117.792415, + 33.691576 + ] + ] + ] + }, + "properties": { + "name": "Play Ground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 517475619, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.791555, + 33.692674 + ], + [ + -117.791592, + 33.692643 + ], + [ + -117.79159, + 33.692369 + ], + [ + -117.791558, + 33.692343 + ], + [ + -117.791571, + 33.692329 + ], + [ + -117.791592, + 33.692308 + ], + [ + -117.791587, + 33.692045 + ], + [ + -117.79154, + 33.692011 + ], + [ + -117.791226, + 33.692009 + ], + [ + -117.79119, + 33.692042 + ], + [ + -117.791188, + 33.69231 + ], + [ + -117.791226, + 33.692344 + ], + [ + -117.791196, + 33.692364 + ], + [ + -117.79119, + 33.692641 + ], + [ + -117.79122, + 33.69267 + ], + [ + -117.791555, + 33.692674 + ] + ] + ] + }, + "properties": { + "name": "Tennis Courts", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 517879217, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.70552, + 33.634063 + ], + [ + -117.705754, + 33.633887 + ], + [ + -117.706521, + 33.634647 + ], + [ + -117.70637, + 33.634803 + ], + [ + -117.70552, + 33.634063 + ] + ] + ] + }, + "properties": { + "name": "Waterfall Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 523610753, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.998077, + 33.800641 + ], + [ + -117.998193, + 33.800647 + ], + [ + -117.998309, + 33.800671 + ], + [ + -117.998474, + 33.800772 + ], + [ + -117.998618, + 33.800882 + ], + [ + -117.998718, + 33.800934 + ], + [ + -117.998819, + 33.800974 + ], + [ + -117.998952, + 33.801013 + ], + [ + -117.998987, + 33.801013 + ], + [ + -117.999092, + 33.801018 + ], + [ + -117.999092, + 33.801031 + ], + [ + -117.999091, + 33.80105 + ], + [ + -117.999092, + 33.801064 + ], + [ + -117.998314, + 33.801067 + ], + [ + -117.996571, + 33.801078 + ], + [ + -117.996063, + 33.801077 + ], + [ + -117.995939, + 33.800942 + ], + [ + -117.993332, + 33.800953 + ], + [ + -117.993328, + 33.800668 + ], + [ + -117.998077, + 33.800641 + ] + ] + ] + }, + "properties": { + "name": "Stanton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 529346101, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.887794, + 33.886903 + ], + [ + -117.887535, + 33.886954 + ], + [ + -117.887558, + 33.887027 + ], + [ + -117.887533, + 33.887033 + ], + [ + -117.887539, + 33.887048 + ], + [ + -117.887554, + 33.887064 + ], + [ + -117.887567, + 33.887082 + ], + [ + -117.887563, + 33.887104 + ], + [ + -117.887515, + 33.887175 + ], + [ + -117.886857, + 33.887338 + ], + [ + -117.886792, + 33.887311 + ], + [ + -117.886759, + 33.887285 + ], + [ + -117.886753, + 33.887265 + ], + [ + -117.886763, + 33.887241 + ], + [ + -117.886755, + 33.887219 + ], + [ + -117.886725, + 33.887226 + ], + [ + -117.886708, + 33.887165 + ], + [ + -117.886436, + 33.887232 + ], + [ + -117.886477, + 33.887352 + ], + [ + -117.8865, + 33.887385 + ], + [ + -117.886531, + 33.887425 + ], + [ + -117.886573, + 33.887456 + ], + [ + -117.886629, + 33.887488 + ], + [ + -117.886684, + 33.887513 + ], + [ + -117.886756, + 33.887527 + ], + [ + -117.886825, + 33.887532 + ], + [ + -117.886916, + 33.887521 + ], + [ + -117.887032, + 33.887502 + ], + [ + -117.887114, + 33.887479 + ], + [ + -117.887268, + 33.887439 + ], + [ + -117.887377, + 33.887412 + ], + [ + -117.88749, + 33.887384 + ], + [ + -117.887585, + 33.887357 + ], + [ + -117.887648, + 33.887323 + ], + [ + -117.8877, + 33.887297 + ], + [ + -117.887739, + 33.887252 + ], + [ + -117.88777, + 33.88721 + ], + [ + -117.887793, + 33.887164 + ], + [ + -117.887809, + 33.887121 + ], + [ + -117.88782, + 33.887079 + ], + [ + -117.88782, + 33.887021 + ], + [ + -117.887794, + 33.886903 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 529346106, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.886018, + 33.887623 + ], + [ + -117.88598, + 33.887583 + ], + [ + -117.885957, + 33.887583 + ], + [ + -117.885955, + 33.8876 + ], + [ + -117.885864, + 33.887598 + ], + [ + -117.885861, + 33.887614 + ], + [ + -117.885765, + 33.887616 + ], + [ + -117.885752, + 33.88757 + ], + [ + -117.885561, + 33.88763 + ], + [ + -117.885455, + 33.887638 + ], + [ + -117.885294, + 33.887644 + ], + [ + -117.885226, + 33.887651 + ], + [ + -117.886018, + 33.887639 + ], + [ + -117.886018, + 33.887623 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 529346107, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.886219, + 33.887637 + ], + [ + -117.886214, + 33.887301 + ], + [ + -117.886212, + 33.887247 + ], + [ + -117.886193, + 33.887192 + ], + [ + -117.886016, + 33.886701 + ], + [ + -117.885988, + 33.886706 + ], + [ + -117.886097, + 33.887031 + ], + [ + -117.885933, + 33.887073 + ], + [ + -117.885956, + 33.88713 + ], + [ + -117.886121, + 33.887095 + ], + [ + -117.886177, + 33.887236 + ], + [ + -117.88618, + 33.887313 + ], + [ + -117.886143, + 33.887326 + ], + [ + -117.886172, + 33.887485 + ], + [ + -117.886079, + 33.887496 + ], + [ + -117.886085, + 33.887639 + ], + [ + -117.886219, + 33.887637 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 531293785, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.001894, + 33.808215 + ], + [ + -117.99892, + 33.808211 + ], + [ + -117.998893, + 33.806732 + ], + [ + -118.001863, + 33.806694 + ], + [ + -118.001894, + 33.808215 + ] + ] + ] + }, + "properties": { + "name": "Stanton Central Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 533289806, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.633762, + 33.562251 + ], + [ + -117.633752, + 33.562174 + ], + [ + -117.633779, + 33.562036 + ], + [ + -117.633505, + 33.561992 + ], + [ + -117.633751, + 33.560915 + ], + [ + -117.633741, + 33.5605 + ], + [ + -117.635105, + 33.560028 + ], + [ + -117.635272, + 33.560251 + ], + [ + -117.636088, + 33.560499 + ], + [ + -117.635979, + 33.560796 + ], + [ + -117.635707, + 33.560692 + ], + [ + -117.635436, + 33.560631 + ], + [ + -117.635332, + 33.560673 + ], + [ + -117.635266, + 33.56073 + ], + [ + -117.635059, + 33.560821 + ], + [ + -117.634301, + 33.561044 + ], + [ + -117.634238, + 33.561034 + ], + [ + -117.634152, + 33.561042 + ], + [ + -117.634083, + 33.56107 + ], + [ + -117.634033, + 33.561153 + ], + [ + -117.634051, + 33.56121 + ], + [ + -117.634097, + 33.56129 + ], + [ + -117.634162, + 33.561327 + ], + [ + -117.633918, + 33.562177 + ], + [ + -117.633762, + 33.562251 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 537026813, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818247, + 33.691059 + ], + [ + -117.818034, + 33.690877 + ], + [ + -117.818151, + 33.69078 + ], + [ + -117.818361, + 33.690967 + ], + [ + -117.818247, + 33.691059 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 537026815, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.817818, + 33.691785 + ], + [ + -117.817789, + 33.691762 + ], + [ + -117.817774, + 33.691743 + ], + [ + -117.817748, + 33.691687 + ], + [ + -117.81773, + 33.691657 + ], + [ + -117.817703, + 33.691629 + ], + [ + -117.817676, + 33.691601 + ], + [ + -117.817622, + 33.691584 + ], + [ + -117.817563, + 33.691574 + ], + [ + -117.81751, + 33.691569 + ], + [ + -117.81746, + 33.691569 + ], + [ + -117.817448, + 33.691528 + ], + [ + -117.817449, + 33.691467 + ], + [ + -117.817465, + 33.691401 + ], + [ + -117.817503, + 33.691377 + ], + [ + -117.817538, + 33.691361 + ], + [ + -117.817569, + 33.691365 + ], + [ + -117.817599, + 33.691392 + ], + [ + -117.817622, + 33.691417 + ], + [ + -117.81766, + 33.691454 + ], + [ + -117.817706, + 33.691493 + ], + [ + -117.817734, + 33.691518 + ], + [ + -117.817766, + 33.691551 + ], + [ + -117.817805, + 33.691584 + ], + [ + -117.817839, + 33.691615 + ], + [ + -117.817879, + 33.691647 + ], + [ + -117.817915, + 33.691672 + ], + [ + -117.817945, + 33.691699 + ], + [ + -117.817967, + 33.69172 + ], + [ + -117.817974, + 33.69173 + ], + [ + -117.817952, + 33.69175 + ], + [ + -117.817922, + 33.691768 + ], + [ + -117.817903, + 33.691783 + ], + [ + -117.817858, + 33.691791 + ], + [ + -117.817818, + 33.691785 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 537026818, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.812218, + 33.6938 + ], + [ + -117.812151, + 33.693677 + ], + [ + -117.812426, + 33.693574 + ], + [ + -117.812493, + 33.693697 + ], + [ + -117.812218, + 33.6938 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 537817685, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.9376, + 33.621584 + ], + [ + -117.937199, + 33.621498 + ], + [ + -117.937057, + 33.62146 + ], + [ + -117.93684, + 33.621209 + ], + [ + -117.936842, + 33.621198 + ], + [ + -117.9369, + 33.620926 + ], + [ + -117.937169, + 33.620958 + ], + [ + -117.937732, + 33.621026 + ], + [ + -117.937689, + 33.62123 + ], + [ + -117.9376, + 33.621584 + ] + ] + ] + }, + "properties": { + "name": "Channel Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 542014055, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.044886, + 33.72973 + ], + [ + -118.045961, + 33.729714 + ], + [ + -118.045917, + 33.72711 + ], + [ + -118.045299, + 33.727115 + ], + [ + -118.044877, + 33.728142 + ], + [ + -118.04488, + 33.728678 + ], + [ + -118.044886, + 33.72973 + ] + ] + ] + }, + "properties": { + "name": "Haven Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 542866556, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.710055, + 33.551608 + ], + [ + -117.709919, + 33.551592 + ], + [ + -117.70981, + 33.551676 + ], + [ + -117.709801, + 33.551829 + ], + [ + -117.709873, + 33.551894 + ], + [ + -117.709889, + 33.551901 + ], + [ + -117.709911, + 33.551888 + ], + [ + -117.709925, + 33.551873 + ], + [ + -117.709938, + 33.551881 + ], + [ + -117.709955, + 33.551891 + ], + [ + -117.709956, + 33.551902 + ], + [ + -117.709965, + 33.551915 + ], + [ + -117.709982, + 33.551927 + ], + [ + -117.709996, + 33.551931 + ], + [ + -117.710013, + 33.551925 + ], + [ + -117.710029, + 33.551915 + ], + [ + -117.710029, + 33.5519 + ], + [ + -117.710021, + 33.551891 + ], + [ + -117.710017, + 33.551884 + ], + [ + -117.71013, + 33.551806 + ], + [ + -117.710136, + 33.551684 + ], + [ + -117.710055, + 33.551608 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 543594408, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.598833, + 33.649352 + ], + [ + -117.598184, + 33.649765 + ], + [ + -117.59758, + 33.650136 + ], + [ + -117.596765, + 33.650401 + ], + [ + -117.59619, + 33.650932 + ], + [ + -117.595598, + 33.651429 + ], + [ + -117.594812, + 33.651777 + ], + [ + -117.593714, + 33.652634 + ], + [ + -117.592218, + 33.653238 + ], + [ + -117.591929, + 33.653436 + ], + [ + -117.591487, + 33.653911 + ], + [ + -117.590299, + 33.65519 + ], + [ + -117.589466, + 33.655597 + ], + [ + -117.588268, + 33.655677 + ], + [ + -117.588106, + 33.655794 + ], + [ + -117.58794, + 33.656315 + ], + [ + -117.586885, + 33.657015 + ], + [ + -117.586581, + 33.657208 + ], + [ + -117.586363, + 33.657442 + ], + [ + -117.587064, + 33.658947 + ], + [ + -117.586501, + 33.659233 + ], + [ + -117.587126, + 33.659444 + ], + [ + -117.587585, + 33.659549 + ], + [ + -117.588431, + 33.659421 + ], + [ + -117.588615, + 33.659297 + ], + [ + -117.588648, + 33.659274 + ], + [ + -117.589944, + 33.658388 + ], + [ + -117.591013, + 33.65849 + ], + [ + -117.591568, + 33.658229 + ], + [ + -117.59161, + 33.657923 + ], + [ + -117.592106, + 33.657559 + ], + [ + -117.592778, + 33.65802 + ], + [ + -117.593712, + 33.657285 + ], + [ + -117.595079, + 33.656077 + ], + [ + -117.595676, + 33.655209 + ], + [ + -117.596605, + 33.654595 + ], + [ + -117.597652, + 33.653821 + ], + [ + -117.59829, + 33.653241 + ], + [ + -117.599161, + 33.652953 + ], + [ + -117.599858, + 33.652957 + ], + [ + -117.600162, + 33.653175 + ], + [ + -117.600529, + 33.653692 + ], + [ + -117.600558, + 33.654286 + ], + [ + -117.600412, + 33.654831 + ], + [ + -117.600442, + 33.655185 + ], + [ + -117.600617, + 33.655667 + ], + [ + -117.600638, + 33.65607 + ], + [ + -117.6005, + 33.656705 + ], + [ + -117.600529, + 33.657344 + ], + [ + -117.600571, + 33.657944 + ], + [ + -117.60085, + 33.658721 + ], + [ + -117.601038, + 33.659127 + ], + [ + -117.60095, + 33.659794 + ], + [ + -117.600996, + 33.660209 + ], + [ + -117.601184, + 33.661016 + ], + [ + -117.601144, + 33.661537 + ], + [ + -117.600918, + 33.662029 + ], + [ + -117.600854, + 33.662455 + ], + [ + -117.600923, + 33.663033 + ], + [ + -117.600927, + 33.663438 + ], + [ + -117.600849, + 33.66407 + ], + [ + -117.600834, + 33.664684 + ], + [ + -117.601051, + 33.665443 + ], + [ + -117.601862, + 33.667759 + ], + [ + -117.602029, + 33.669169 + ], + [ + -117.602705, + 33.670293 + ], + [ + -117.606908, + 33.67085 + ], + [ + -117.60755, + 33.665126 + ], + [ + -117.60666, + 33.664884 + ], + [ + -117.607007, + 33.664177 + ], + [ + -117.607217, + 33.662485 + ], + [ + -117.606875, + 33.661733 + ], + [ + -117.607164, + 33.66056 + ], + [ + -117.607676, + 33.659337 + ], + [ + -117.607265, + 33.657982 + ], + [ + -117.607678, + 33.657325 + ], + [ + -117.607798, + 33.657256 + ], + [ + -117.607799, + 33.657409 + ], + [ + -117.608484, + 33.657409 + ], + [ + -117.608484, + 33.656835 + ], + [ + -117.608448, + 33.656835 + ], + [ + -117.608463, + 33.656745 + ], + [ + -117.608287, + 33.656542 + ], + [ + -117.608317, + 33.656388 + ], + [ + -117.608487, + 33.65614 + ], + [ + -117.608563, + 33.65591 + ], + [ + -117.608768, + 33.655642 + ], + [ + -117.608651, + 33.655532 + ], + [ + -117.608455, + 33.655499 + ], + [ + -117.608361, + 33.655426 + ], + [ + -117.608241, + 33.655258 + ], + [ + -117.607878, + 33.655083 + ], + [ + -117.607491, + 33.654423 + ], + [ + -117.60716, + 33.654168 + ], + [ + -117.606729, + 33.653824 + ], + [ + -117.606374, + 33.6531 + ], + [ + -117.606059, + 33.652982 + ], + [ + -117.605913, + 33.652611 + ], + [ + -117.605931, + 33.652398 + ], + [ + -117.60562, + 33.652114 + ], + [ + -117.605069, + 33.651331 + ], + [ + -117.604952, + 33.650998 + ], + [ + -117.604544, + 33.650778 + ], + [ + -117.60428, + 33.650487 + ], + [ + -117.603826, + 33.650572 + ], + [ + -117.60375, + 33.650486 + ], + [ + -117.602976, + 33.648581 + ], + [ + -117.602009, + 33.646199 + ], + [ + -117.602173, + 33.64593 + ], + [ + -117.601499, + 33.645937 + ], + [ + -117.60119, + 33.645945 + ], + [ + -117.600875, + 33.646013 + ], + [ + -117.60049, + 33.646137 + ], + [ + -117.600092, + 33.646389 + ], + [ + -117.599907, + 33.646627 + ], + [ + -117.599705, + 33.647061 + ], + [ + -117.599645, + 33.648451 + ], + [ + -117.599355, + 33.64891 + ], + [ + -117.598833, + 33.649352 + ] + ] + ] + }, + "properties": { + "name": "O'Neill Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 543777028, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.804174, + 33.635186 + ], + [ + -117.804161, + 33.635218 + ], + [ + -117.804212, + 33.635321 + ], + [ + -117.804238, + 33.635376 + ], + [ + -117.804242, + 33.635455 + ], + [ + -117.804285, + 33.635513 + ], + [ + -117.804333, + 33.635572 + ], + [ + -117.804352, + 33.635642 + ], + [ + -117.804468, + 33.635939 + ], + [ + -117.80456, + 33.636077 + ], + [ + -117.804586, + 33.63615 + ], + [ + -117.804563, + 33.63624 + ], + [ + -117.804612, + 33.636365 + ], + [ + -117.804663, + 33.636441 + ], + [ + -117.804661, + 33.636536 + ], + [ + -117.804764, + 33.636632 + ], + [ + -117.804833, + 33.636734 + ], + [ + -117.804792, + 33.636808 + ], + [ + -117.804682, + 33.636895 + ], + [ + -117.80456, + 33.637068 + ], + [ + -117.804496, + 33.637062 + ], + [ + -117.804382, + 33.637073 + ], + [ + -117.8043, + 33.637068 + ], + [ + -117.804279, + 33.636843 + ], + [ + -117.804124, + 33.636821 + ], + [ + -117.804062, + 33.636793 + ], + [ + -117.804051, + 33.636707 + ], + [ + -117.804006, + 33.636657 + ], + [ + -117.804049, + 33.636608 + ], + [ + -117.804077, + 33.636581 + ], + [ + -117.804038, + 33.636541 + ], + [ + -117.803943, + 33.63633 + ], + [ + -117.803907, + 33.636344 + ], + [ + -117.80375, + 33.636046 + ], + [ + -117.803808, + 33.63601 + ], + [ + -117.803826, + 33.635971 + ], + [ + -117.803832, + 33.635906 + ], + [ + -117.803793, + 33.63585 + ], + [ + -117.803777, + 33.635835 + ], + [ + -117.803781, + 33.63574 + ], + [ + -117.803755, + 33.635677 + ], + [ + -117.803675, + 33.635602 + ], + [ + -117.803597, + 33.63552 + ], + [ + -117.803525, + 33.635437 + ], + [ + -117.80369, + 33.635356 + ], + [ + -117.803758, + 33.635306 + ], + [ + -117.803909, + 33.63524 + ], + [ + -117.804017, + 33.635187 + ], + [ + -117.804133, + 33.635124 + ], + [ + -117.804174, + 33.635186 + ] + ] + ] + }, + "properties": { + "name": "Ralph C Bren Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 543797884, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.837777, + 33.875205 + ], + [ + -117.837614, + 33.875207 + ], + [ + -117.837611, + 33.875069 + ], + [ + -117.837775, + 33.87507 + ], + [ + -117.837777, + 33.875205 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 543797919, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.838561, + 33.874631 + ], + [ + -117.838564, + 33.874598 + ], + [ + -117.838462, + 33.874593 + ], + [ + -117.838451, + 33.874397 + ], + [ + -117.838252, + 33.874384 + ], + [ + -117.838266, + 33.874324 + ], + [ + -117.838212, + 33.874324 + ], + [ + -117.838164, + 33.874602 + ], + [ + -117.837984, + 33.874803 + ], + [ + -117.837724, + 33.874925 + ], + [ + -117.837574, + 33.874938 + ], + [ + -117.83745, + 33.874954 + ], + [ + -117.837445, + 33.875023 + ], + [ + -117.83778, + 33.875019 + ], + [ + -117.837802, + 33.875132 + ], + [ + -117.837839, + 33.87513 + ], + [ + -117.837882, + 33.87495 + ], + [ + -117.837973, + 33.874838 + ], + [ + -117.838234, + 33.874681 + ], + [ + -117.838561, + 33.874631 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 544220841, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.639543, + 33.558346 + ], + [ + -117.639555, + 33.558403 + ], + [ + -117.639622, + 33.558425 + ], + [ + -117.63967, + 33.558535 + ], + [ + -117.639778, + 33.558578 + ], + [ + -117.639899, + 33.558548 + ], + [ + -117.640048, + 33.558622 + ], + [ + -117.640119, + 33.55862 + ], + [ + -117.640125, + 33.558295 + ], + [ + -117.639964, + 33.558274 + ], + [ + -117.639775, + 33.558274 + ], + [ + -117.639535, + 33.558316 + ], + [ + -117.639533, + 33.558312 + ], + [ + -117.639543, + 33.558346 + ] + ] + ] + }, + "properties": { + "name": "Flintridge park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 544503758, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.642069, + 33.650233 + ], + [ + -117.642085, + 33.650237 + ], + [ + -117.642093, + 33.650254 + ], + [ + -117.642099, + 33.650273 + ], + [ + -117.642093, + 33.65029 + ], + [ + -117.642087, + 33.650299 + ], + [ + -117.642085, + 33.650302 + ], + [ + -117.642067, + 33.650309 + ], + [ + -117.642056, + 33.650313 + ], + [ + -117.642038, + 33.650313 + ], + [ + -117.642023, + 33.650308 + ], + [ + -117.642009, + 33.6503 + ], + [ + -117.641989, + 33.650301 + ], + [ + -117.641976, + 33.650297 + ], + [ + -117.641966, + 33.650281 + ], + [ + -117.641962, + 33.650263 + ], + [ + -117.641966, + 33.650245 + ], + [ + -117.641977, + 33.650229 + ], + [ + -117.641989, + 33.650221 + ], + [ + -117.642013, + 33.650219 + ], + [ + -117.642032, + 33.650229 + ], + [ + -117.642047, + 33.650227 + ], + [ + -117.642069, + 33.650233 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 544672954, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.686496, + 33.667032 + ], + [ + -117.686555, + 33.667025 + ], + [ + -117.686487, + 33.66691 + ], + [ + -117.686458, + 33.666917 + ], + [ + -117.686485, + 33.666968 + ], + [ + -117.686496, + 33.667032 + ] + ] + ] + }, + "properties": { + "name": "Bocce Ball Court", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 544909714, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.826127, + 33.903633 + ], + [ + -117.82516, + 33.903318 + ], + [ + -117.824929, + 33.903807 + ], + [ + -117.825895, + 33.904122 + ], + [ + -117.826127, + 33.903633 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 544913694, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.643923, + 33.567213 + ], + [ + -117.643874, + 33.566947 + ], + [ + -117.643502, + 33.566933 + ], + [ + -117.643504, + 33.567026 + ], + [ + -117.643249, + 33.56711 + ], + [ + -117.643087, + 33.567143 + ], + [ + -117.642916, + 33.567212 + ], + [ + -117.642705, + 33.567311 + ], + [ + -117.642486, + 33.567434 + ], + [ + -117.642322, + 33.567527 + ], + [ + -117.642259, + 33.567591 + ], + [ + -117.64197, + 33.567686 + ], + [ + -117.641657, + 33.567778 + ], + [ + -117.641562, + 33.567801 + ], + [ + -117.641432, + 33.567585 + ], + [ + -117.640984, + 33.567814 + ], + [ + -117.641127, + 33.567974 + ], + [ + -117.641236, + 33.56814 + ], + [ + -117.64131, + 33.568154 + ], + [ + -117.64145, + 33.568079 + ], + [ + -117.641538, + 33.568063 + ], + [ + -117.641608, + 33.56807 + ], + [ + -117.641587, + 33.567894 + ], + [ + -117.641999, + 33.567832 + ], + [ + -117.642066, + 33.567743 + ], + [ + -117.642158, + 33.567721 + ], + [ + -117.642219, + 33.567729 + ], + [ + -117.642449, + 33.567604 + ], + [ + -117.642552, + 33.567552 + ], + [ + -117.642681, + 33.567567 + ], + [ + -117.64271, + 33.56751 + ], + [ + -117.642784, + 33.567483 + ], + [ + -117.642881, + 33.567486 + ], + [ + -117.642933, + 33.567433 + ], + [ + -117.643105, + 33.567338 + ], + [ + -117.643194, + 33.567315 + ], + [ + -117.643366, + 33.567302 + ], + [ + -117.643406, + 33.567241 + ], + [ + -117.643452, + 33.567209 + ], + [ + -117.643574, + 33.567208 + ], + [ + -117.643608, + 33.56724 + ], + [ + -117.64386, + 33.567227 + ], + [ + -117.643903, + 33.567226 + ], + [ + -117.643923, + 33.567213 + ] + ] + ] + }, + "properties": { + "name": "dogwood park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 545351598, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.821182, + 33.792639 + ], + [ + -117.821188, + 33.791741 + ], + [ + -117.819175, + 33.791749 + ], + [ + -117.819175, + 33.792645 + ], + [ + -117.821182, + 33.792639 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 545371011, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.734257, + 33.626235 + ], + [ + -117.734154, + 33.626254 + ], + [ + -117.734094, + 33.626307 + ], + [ + -117.734019, + 33.626342 + ], + [ + -117.733907, + 33.626351 + ], + [ + -117.73383, + 33.626299 + ], + [ + -117.733755, + 33.626254 + ], + [ + -117.733613, + 33.626248 + ], + [ + -117.733398, + 33.626237 + ], + [ + -117.733396, + 33.626126 + ], + [ + -117.733365, + 33.626007 + ], + [ + -117.733332, + 33.625873 + ], + [ + -117.733285, + 33.625782 + ], + [ + -117.733207, + 33.625663 + ], + [ + -117.733102, + 33.625549 + ], + [ + -117.733426, + 33.625445 + ], + [ + -117.733673, + 33.625313 + ], + [ + -117.733841, + 33.62521 + ], + [ + -117.734016, + 33.625129 + ], + [ + -117.734257, + 33.626235 + ] + ] + ] + }, + "properties": { + "name": "crossline feild", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 545640712, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.817282, + 33.906244 + ], + [ + -117.817256, + 33.906105 + ], + [ + -117.817184, + 33.905839 + ], + [ + -117.817144, + 33.90568 + ], + [ + -117.817323, + 33.905681 + ], + [ + -117.817489, + 33.905667 + ], + [ + -117.817728, + 33.905637 + ], + [ + -117.817893, + 33.905577 + ], + [ + -117.818188, + 33.905467 + ], + [ + -117.81854, + 33.905323 + ], + [ + -117.818857, + 33.90518 + ], + [ + -117.819114, + 33.905049 + ], + [ + -117.819252, + 33.904978 + ], + [ + -117.819435, + 33.904887 + ], + [ + -117.819669, + 33.904775 + ], + [ + -117.819723, + 33.904748 + ], + [ + -117.819779, + 33.904708 + ], + [ + -117.819971, + 33.904631 + ], + [ + -117.820213, + 33.904544 + ], + [ + -117.820297, + 33.904514 + ], + [ + -117.820385, + 33.904488 + ], + [ + -117.82041, + 33.904481 + ], + [ + -117.820435, + 33.904485 + ], + [ + -117.820447, + 33.904502 + ], + [ + -117.820464, + 33.904533 + ], + [ + -117.820491, + 33.904618 + ], + [ + -117.820524, + 33.90468 + ], + [ + -117.820548, + 33.90475 + ], + [ + -117.820543, + 33.904768 + ], + [ + -117.820537, + 33.904778 + ], + [ + -117.820512, + 33.904799 + ], + [ + -117.820474, + 33.904821 + ], + [ + -117.820422, + 33.904861 + ], + [ + -117.820336, + 33.904911 + ], + [ + -117.820322, + 33.904881 + ], + [ + -117.82035, + 33.904876 + ], + [ + -117.820358, + 33.904816 + ], + [ + -117.820357, + 33.904801 + ], + [ + -117.820378, + 33.904797 + ], + [ + -117.820391, + 33.90479 + ], + [ + -117.82041, + 33.904776 + ], + [ + -117.820433, + 33.904752 + ], + [ + -117.820433, + 33.904744 + ], + [ + -117.820409, + 33.904698 + ], + [ + -117.820381, + 33.904651 + ], + [ + -117.820345, + 33.904626 + ], + [ + -117.820306, + 33.904608 + ], + [ + -117.820229, + 33.904612 + ], + [ + -117.820132, + 33.90464 + ], + [ + -117.82002, + 33.90467 + ], + [ + -117.819902, + 33.904705 + ], + [ + -117.819849, + 33.904762 + ], + [ + -117.819811, + 33.904804 + ], + [ + -117.819763, + 33.904832 + ], + [ + -117.819683, + 33.904855 + ], + [ + -117.819556, + 33.904892 + ], + [ + -117.81953, + 33.9049 + ], + [ + -117.819511, + 33.904933 + ], + [ + -117.819495, + 33.904962 + ], + [ + -117.819381, + 33.905015 + ], + [ + -117.819125, + 33.90509 + ], + [ + -117.819107, + 33.905154 + ], + [ + -117.818987, + 33.905191 + ], + [ + -117.81885, + 33.90523 + ], + [ + -117.818805, + 33.905327 + ], + [ + -117.818447, + 33.905433 + ], + [ + -117.818433, + 33.905483 + ], + [ + -117.818267, + 33.905532 + ], + [ + -117.818176, + 33.90556 + ], + [ + -117.818167, + 33.905591 + ], + [ + -117.817903, + 33.90566 + ], + [ + -117.81788, + 33.905693 + ], + [ + -117.817733, + 33.905727 + ], + [ + -117.817424, + 33.905786 + ], + [ + -117.817353, + 33.905809 + ], + [ + -117.817327, + 33.90584 + ], + [ + -117.817311, + 33.905874 + ], + [ + -117.817315, + 33.905937 + ], + [ + -117.817321, + 33.906005 + ], + [ + -117.817327, + 33.90608 + ], + [ + -117.817327, + 33.906146 + ], + [ + -117.817328, + 33.906197 + ], + [ + -117.817326, + 33.906228 + ], + [ + -117.817323, + 33.906263 + ], + [ + -117.817316, + 33.906346 + ], + [ + -117.817333, + 33.906371 + ], + [ + -117.817349, + 33.906382 + ], + [ + -117.81736, + 33.906389 + ], + [ + -117.817431, + 33.906395 + ], + [ + -117.817422, + 33.906397 + ], + [ + -117.817346, + 33.906394 + ], + [ + -117.817348, + 33.906404 + ], + [ + -117.817323, + 33.906404 + ], + [ + -117.817293, + 33.906355 + ], + [ + -117.817286, + 33.906258 + ], + [ + -117.817282, + 33.906244 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546233919, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.63824, + 33.652014 + ], + [ + -117.638264, + 33.652005 + ], + [ + -117.638287, + 33.651989 + ], + [ + -117.638296, + 33.651977 + ], + [ + -117.638296, + 33.651944 + ], + [ + -117.638283, + 33.651923 + ], + [ + -117.638272, + 33.651912 + ], + [ + -117.638243, + 33.651896 + ], + [ + -117.638221, + 33.651868 + ], + [ + -117.63822, + 33.651838 + ], + [ + -117.638203, + 33.651815 + ], + [ + -117.638149, + 33.651787 + ], + [ + -117.63812, + 33.651777 + ], + [ + -117.638083, + 33.651786 + ], + [ + -117.638045, + 33.65177 + ], + [ + -117.638019, + 33.65176 + ], + [ + -117.637995, + 33.651758 + ], + [ + -117.637971, + 33.651761 + ], + [ + -117.637934, + 33.65177 + ], + [ + -117.637912, + 33.651802 + ], + [ + -117.637901, + 33.651823 + ], + [ + -117.637873, + 33.651862 + ], + [ + -117.637841, + 33.651881 + ], + [ + -117.637822, + 33.651903 + ], + [ + -117.637814, + 33.65193 + ], + [ + -117.637806, + 33.651967 + ], + [ + -117.637804, + 33.65198 + ], + [ + -117.637812, + 33.65199 + ], + [ + -117.637831, + 33.651999 + ], + [ + -117.637864, + 33.652003 + ], + [ + -117.63794, + 33.652011 + ], + [ + -117.63824, + 33.652014 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546311556, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.639576, + 33.641027 + ], + [ + -117.639486, + 33.640992 + ], + [ + -117.639265, + 33.640244 + ], + [ + -117.639457, + 33.640205 + ], + [ + -117.639725, + 33.640189 + ], + [ + -117.639872, + 33.640205 + ], + [ + -117.640008, + 33.640248 + ], + [ + -117.640152, + 33.640363 + ], + [ + -117.640284, + 33.640488 + ], + [ + -117.64035, + 33.640585 + ], + [ + -117.640399, + 33.640686 + ], + [ + -117.640428, + 33.640749 + ], + [ + -117.639576, + 33.641027 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546311557, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.638699, + 33.639673 + ], + [ + -117.638706, + 33.639734 + ], + [ + -117.639321, + 33.640226 + ], + [ + -117.639457, + 33.640205 + ], + [ + -117.639619, + 33.640167 + ], + [ + -117.639827, + 33.64005 + ], + [ + -117.639957, + 33.639857 + ], + [ + -117.639988, + 33.639678 + ], + [ + -117.639902, + 33.639483 + ], + [ + -117.639719, + 33.639309 + ], + [ + -117.639494, + 33.639157 + ], + [ + -117.639406, + 33.639104 + ], + [ + -117.638699, + 33.639673 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546700496, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.845042, + 33.724787 + ], + [ + -117.845071, + 33.724169 + ], + [ + -117.845047, + 33.724153 + ], + [ + -117.845028, + 33.724137 + ], + [ + -117.84502, + 33.724122 + ], + [ + -117.845014, + 33.724109 + ], + [ + -117.845008, + 33.724101 + ], + [ + -117.844994, + 33.724096 + ], + [ + -117.844977, + 33.724093 + ], + [ + -117.844969, + 33.724085 + ], + [ + -117.844962, + 33.724068 + ], + [ + -117.84496, + 33.724051 + ], + [ + -117.844886, + 33.724032 + ], + [ + -117.844802, + 33.724013 + ], + [ + -117.844752, + 33.723997 + ], + [ + -117.844713, + 33.72398 + ], + [ + -117.844672, + 33.72394 + ], + [ + -117.844659, + 33.723901 + ], + [ + -117.84398, + 33.723754 + ], + [ + -117.843973, + 33.724225 + ], + [ + -117.843968, + 33.724344 + ], + [ + -117.843963, + 33.724427 + ], + [ + -117.843956, + 33.72452 + ], + [ + -117.843955, + 33.724642 + ], + [ + -117.843953, + 33.724726 + ], + [ + -117.843952, + 33.724773 + ], + [ + -117.845042, + 33.724787 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546767914, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.036957, + 33.835796 + ], + [ + -118.03695, + 33.835423 + ], + [ + -118.034787, + 33.835446 + ], + [ + -118.034792, + 33.836036 + ], + [ + -118.036451, + 33.836019 + ], + [ + -118.036597, + 33.835867 + ], + [ + -118.036957, + 33.835796 + ] + ] + ] + }, + "properties": { + "name": "Mackay Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546922342, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.71112, + 33.688602 + ], + [ + -117.71112, + 33.688571 + ], + [ + -117.711638, + 33.688049 + ], + [ + -117.711677, + 33.688049 + ], + [ + -117.712623, + 33.688705 + ], + [ + -117.712625, + 33.688736 + ], + [ + -117.712103, + 33.689259 + ], + [ + -117.712067, + 33.689259 + ], + [ + -117.711433, + 33.688819 + ], + [ + -117.711349, + 33.688761 + ], + [ + -117.71112, + 33.688602 + ] + ] + ] + }, + "properties": { + "name": "Greenfield Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546922343, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.715336, + 33.68602 + ], + [ + -117.714408, + 33.68695 + ], + [ + -117.714364, + 33.686952 + ], + [ + -117.713421, + 33.686299 + ], + [ + -117.713415, + 33.686262 + ], + [ + -117.714345, + 33.685329 + ], + [ + -117.714391, + 33.685327 + ], + [ + -117.715334, + 33.685982 + ], + [ + -117.715336, + 33.68602 + ] + ] + ] + }, + "properties": { + "name": "Village Square Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 547335079, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.972248, + 33.653016 + ], + [ + -117.972073, + 33.653017 + ], + [ + -117.972071, + 33.65282 + ], + [ + -117.972245, + 33.652818 + ], + [ + -117.972248, + 33.653016 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 547514557, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.829099, + 33.629229 + ], + [ + -117.828647, + 33.628995 + ], + [ + -117.829213, + 33.628252 + ], + [ + -117.829676, + 33.628516 + ], + [ + -117.829203, + 33.629101 + ], + [ + -117.829099, + 33.629229 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 547516133, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.830199, + 33.630492 + ], + [ + -117.830167, + 33.630443 + ], + [ + -117.829852, + 33.630393 + ], + [ + -117.829499, + 33.630337 + ], + [ + -117.829479, + 33.630335 + ], + [ + -117.829445, + 33.630455 + ], + [ + -117.829445, + 33.630517 + ], + [ + -117.829454, + 33.630581 + ], + [ + -117.82947, + 33.630668 + ], + [ + -117.829521, + 33.630777 + ], + [ + -117.829598, + 33.630861 + ], + [ + -117.829681, + 33.630925 + ], + [ + -117.829767, + 33.630979 + ], + [ + -117.829881, + 33.631023 + ], + [ + -117.829982, + 33.631044 + ], + [ + -117.83004, + 33.631056 + ], + [ + -117.830068, + 33.63106 + ], + [ + -117.830199, + 33.630492 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 548469199, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.930186, + 33.625189 + ], + [ + -117.93016, + 33.625199 + ], + [ + -117.930132, + 33.62521 + ], + [ + -117.9301, + 33.625152 + ], + [ + -117.930078, + 33.625158 + ], + [ + -117.930061, + 33.62515 + ], + [ + -117.930043, + 33.625136 + ], + [ + -117.93003, + 33.625122 + ], + [ + -117.930017, + 33.625108 + ], + [ + -117.930008, + 33.625092 + ], + [ + -117.930006, + 33.62508 + ], + [ + -117.930005, + 33.625065 + ], + [ + -117.930006, + 33.62505 + ], + [ + -117.93001, + 33.625034 + ], + [ + -117.930129, + 33.624989 + ], + [ + -117.930106, + 33.624945 + ], + [ + -117.929984, + 33.624723 + ], + [ + -117.930233, + 33.62463 + ], + [ + -117.930205, + 33.624569 + ], + [ + -117.930251, + 33.624553 + ], + [ + -117.9303, + 33.624656 + ], + [ + -117.930093, + 33.624726 + ], + [ + -117.930128, + 33.6248 + ], + [ + -117.93031, + 33.625125 + ], + [ + -117.930215, + 33.625161 + ], + [ + -117.930223, + 33.625176 + ], + [ + -117.930186, + 33.625189 + ] + ] + ] + }, + "properties": { + "name": "Tree Of Life Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 548731090, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.657612, + 33.663129 + ], + [ + -117.657637, + 33.663089 + ], + [ + -117.65765, + 33.663059 + ], + [ + -117.657666, + 33.663032 + ], + [ + -117.65771, + 33.662998 + ], + [ + -117.657736, + 33.662982 + ], + [ + -117.657748, + 33.662952 + ], + [ + -117.657746, + 33.662913 + ], + [ + -117.657725, + 33.662881 + ], + [ + -117.657705, + 33.662865 + ], + [ + -117.657674, + 33.662851 + ], + [ + -117.657636, + 33.662846 + ], + [ + -117.657606, + 33.66284 + ], + [ + -117.657577, + 33.662828 + ], + [ + -117.65754, + 33.662809 + ], + [ + -117.657504, + 33.662797 + ], + [ + -117.657465, + 33.662801 + ], + [ + -117.65744, + 33.662815 + ], + [ + -117.657425, + 33.662835 + ], + [ + -117.657413, + 33.662865 + ], + [ + -117.657421, + 33.662892 + ], + [ + -117.657431, + 33.662922 + ], + [ + -117.657441, + 33.662948 + ], + [ + -117.657449, + 33.662976 + ], + [ + -117.657442, + 33.663007 + ], + [ + -117.657433, + 33.663035 + ], + [ + -117.657438, + 33.663059 + ], + [ + -117.657452, + 33.663073 + ], + [ + -117.657486, + 33.663094 + ], + [ + -117.657513, + 33.663108 + ], + [ + -117.657546, + 33.663125 + ], + [ + -117.65757, + 33.663135 + ], + [ + -117.657594, + 33.663138 + ], + [ + -117.657612, + 33.663129 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 549179807, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.656657, + 33.665022 + ], + [ + -117.656637, + 33.665053 + ], + [ + -117.656633, + 33.665075 + ], + [ + -117.656633, + 33.665095 + ], + [ + -117.656653, + 33.665123 + ], + [ + -117.65668, + 33.665147 + ], + [ + -117.656722, + 33.665169 + ], + [ + -117.656765, + 33.665177 + ], + [ + -117.656822, + 33.665176 + ], + [ + -117.656853, + 33.665166 + ], + [ + -117.656873, + 33.665147 + ], + [ + -117.656892, + 33.66512 + ], + [ + -117.656897, + 33.665095 + ], + [ + -117.656893, + 33.665067 + ], + [ + -117.656873, + 33.665043 + ], + [ + -117.65685, + 33.665021 + ], + [ + -117.65682, + 33.665 + ], + [ + -117.656811, + 33.664996 + ], + [ + -117.656782, + 33.66499 + ], + [ + -117.656743, + 33.664992 + ], + [ + -117.65671, + 33.664994 + ], + [ + -117.656691, + 33.664997 + ], + [ + -117.656679, + 33.665003 + ], + [ + -117.656657, + 33.665022 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 549242927, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.656644, + 33.663559 + ], + [ + -117.656642, + 33.663546 + ], + [ + -117.656644, + 33.663538 + ], + [ + -117.656648, + 33.663532 + ], + [ + -117.656657, + 33.66352 + ], + [ + -117.656667, + 33.663502 + ], + [ + -117.656668, + 33.663483 + ], + [ + -117.65666, + 33.663443 + ], + [ + -117.656652, + 33.663403 + ], + [ + -117.65665, + 33.663368 + ], + [ + -117.656651, + 33.663329 + ], + [ + -117.656655, + 33.663304 + ], + [ + -117.656655, + 33.663296 + ], + [ + -117.656639, + 33.663285 + ], + [ + -117.656636, + 33.663279 + ], + [ + -117.656619, + 33.663268 + ], + [ + -117.656599, + 33.663249 + ], + [ + -117.656588, + 33.663235 + ], + [ + -117.656577, + 33.663216 + ], + [ + -117.656576, + 33.663209 + ], + [ + -117.656577, + 33.663201 + ], + [ + -117.656581, + 33.663195 + ], + [ + -117.656587, + 33.663189 + ], + [ + -117.656582, + 33.663174 + ], + [ + -117.656579, + 33.663148 + ], + [ + -117.656582, + 33.663119 + ], + [ + -117.656592, + 33.663092 + ], + [ + -117.656604, + 33.663071 + ], + [ + -117.656627, + 33.663045 + ], + [ + -117.656651, + 33.663025 + ], + [ + -117.65668, + 33.66301 + ], + [ + -117.656682, + 33.663002 + ], + [ + -117.656686, + 33.662995 + ], + [ + -117.656692, + 33.662989 + ], + [ + -117.656709, + 33.662982 + ], + [ + -117.656735, + 33.662978 + ], + [ + -117.656752, + 33.662976 + ], + [ + -117.656773, + 33.662976 + ], + [ + -117.656822, + 33.662979 + ], + [ + -117.656856, + 33.662945 + ], + [ + -117.656893, + 33.662917 + ], + [ + -117.656935, + 33.662889 + ], + [ + -117.656981, + 33.662866 + ], + [ + -117.65699, + 33.662861 + ], + [ + -117.656996, + 33.662853 + ], + [ + -117.657, + 33.662845 + ], + [ + -117.65701, + 33.66281 + ], + [ + -117.656974, + 33.662782 + ], + [ + -117.656947, + 33.662751 + ], + [ + -117.656925, + 33.662716 + ], + [ + -117.656907, + 33.662668 + ], + [ + -117.656892, + 33.662629 + ], + [ + -117.656874, + 33.662593 + ], + [ + -117.65685, + 33.662556 + ], + [ + -117.65682, + 33.662527 + ], + [ + -117.656789, + 33.662504 + ], + [ + -117.656765, + 33.662494 + ], + [ + -117.656739, + 33.662489 + ], + [ + -117.656711, + 33.662486 + ], + [ + -117.656675, + 33.662485 + ], + [ + -117.656641, + 33.662484 + ], + [ + -117.65661, + 33.662482 + ], + [ + -117.656579, + 33.662477 + ], + [ + -117.656548, + 33.662468 + ], + [ + -117.656515, + 33.662453 + ], + [ + -117.656486, + 33.662437 + ], + [ + -117.656459, + 33.662422 + ], + [ + -117.656443, + 33.662417 + ], + [ + -117.656422, + 33.662414 + ], + [ + -117.656389, + 33.662412 + ], + [ + -117.656355, + 33.662407 + ], + [ + -117.656324, + 33.662398 + ], + [ + -117.656295, + 33.662385 + ], + [ + -117.65627, + 33.662368 + ], + [ + -117.656262, + 33.662361 + ], + [ + -117.656237, + 33.66235 + ], + [ + -117.656209, + 33.662345 + ], + [ + -117.656181, + 33.662348 + ], + [ + -117.656152, + 33.66236 + ], + [ + -117.656133, + 33.662374 + ], + [ + -117.656118, + 33.662394 + ], + [ + -117.656114, + 33.662435 + ], + [ + -117.656096, + 33.662473 + ], + [ + -117.656064, + 33.662505 + ], + [ + -117.656034, + 33.662525 + ], + [ + -117.65601, + 33.662554 + ], + [ + -117.655998, + 33.662582 + ], + [ + -117.655998, + 33.662619 + ], + [ + -117.656009, + 33.662658 + ], + [ + -117.65601, + 33.662697 + ], + [ + -117.656003, + 33.66272 + ], + [ + -117.655991, + 33.662741 + ], + [ + -117.655972, + 33.662759 + ], + [ + -117.65594, + 33.662784 + ], + [ + -117.655909, + 33.662817 + ], + [ + -117.655895, + 33.662861 + ], + [ + -117.655902, + 33.662911 + ], + [ + -117.655909, + 33.662939 + ], + [ + -117.655906, + 33.662968 + ], + [ + -117.655894, + 33.662994 + ], + [ + -117.655873, + 33.663016 + ], + [ + -117.655831, + 33.663051 + ], + [ + -117.65581, + 33.663074 + ], + [ + -117.655798, + 33.663101 + ], + [ + -117.655794, + 33.66313 + ], + [ + -117.6558, + 33.663159 + ], + [ + -117.655811, + 33.663194 + ], + [ + -117.655809, + 33.66323 + ], + [ + -117.655793, + 33.663264 + ], + [ + -117.655766, + 33.66331 + ], + [ + -117.655765, + 33.663332 + ], + [ + -117.655771, + 33.663354 + ], + [ + -117.655785, + 33.663373 + ], + [ + -117.655805, + 33.663389 + ], + [ + -117.655829, + 33.663398 + ], + [ + -117.655858, + 33.663398 + ], + [ + -117.655912, + 33.663403 + ], + [ + -117.655948, + 33.663413 + ], + [ + -117.655972, + 33.663427 + ], + [ + -117.655992, + 33.663443 + ], + [ + -117.656012, + 33.663466 + ], + [ + -117.656034, + 33.663484 + ], + [ + -117.656062, + 33.663495 + ], + [ + -117.656082, + 33.663498 + ], + [ + -117.656113, + 33.663497 + ], + [ + -117.656158, + 33.663492 + ], + [ + -117.656185, + 33.663493 + ], + [ + -117.656218, + 33.663498 + ], + [ + -117.656247, + 33.663514 + ], + [ + -117.656274, + 33.663533 + ], + [ + -117.656298, + 33.663554 + ], + [ + -117.656318, + 33.663568 + ], + [ + -117.65635, + 33.663576 + ], + [ + -117.65638, + 33.663577 + ], + [ + -117.656419, + 33.663564 + ], + [ + -117.656458, + 33.663549 + ], + [ + -117.656497, + 33.663543 + ], + [ + -117.656527, + 33.66355 + ], + [ + -117.656576, + 33.663561 + ], + [ + -117.656614, + 33.663563 + ], + [ + -117.656644, + 33.663559 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 549337638, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.658641, + 33.661811 + ], + [ + -117.658662, + 33.661814 + ], + [ + -117.658682, + 33.661812 + ], + [ + -117.658702, + 33.661806 + ], + [ + -117.658718, + 33.661795 + ], + [ + -117.65873, + 33.66178 + ], + [ + -117.658779, + 33.661634 + ], + [ + -117.658814, + 33.661555 + ], + [ + -117.658856, + 33.661467 + ], + [ + -117.6589, + 33.661389 + ], + [ + -117.658941, + 33.661325 + ], + [ + -117.658978, + 33.661268 + ], + [ + -117.659008, + 33.661215 + ], + [ + -117.659027, + 33.661162 + ], + [ + -117.659033, + 33.661122 + ], + [ + -117.659033, + 33.661082 + ], + [ + -117.659023, + 33.66103 + ], + [ + -117.658998, + 33.660969 + ], + [ + -117.658973, + 33.660928 + ], + [ + -117.658948, + 33.660897 + ], + [ + -117.658915, + 33.660867 + ], + [ + -117.658881, + 33.660844 + ], + [ + -117.658841, + 33.660821 + ], + [ + -117.6588, + 33.660801 + ], + [ + -117.658756, + 33.66078 + ], + [ + -117.658711, + 33.660756 + ], + [ + -117.658669, + 33.660733 + ], + [ + -117.65863, + 33.660706 + ], + [ + -117.658595, + 33.660674 + ], + [ + -117.658563, + 33.66064 + ], + [ + -117.658531, + 33.66061 + ], + [ + -117.658497, + 33.660582 + ], + [ + -117.658461, + 33.660553 + ], + [ + -117.658424, + 33.660526 + ], + [ + -117.658378, + 33.6605 + ], + [ + -117.658336, + 33.660477 + ], + [ + -117.658292, + 33.660456 + ], + [ + -117.658247, + 33.660438 + ], + [ + -117.658201, + 33.660422 + ], + [ + -117.658151, + 33.66041 + ], + [ + -117.658102, + 33.660397 + ], + [ + -117.658038, + 33.660381 + ], + [ + -117.657976, + 33.660362 + ], + [ + -117.657927, + 33.660344 + ], + [ + -117.657866, + 33.660321 + ], + [ + -117.657805, + 33.660297 + ], + [ + -117.657742, + 33.660268 + ], + [ + -117.657683, + 33.660237 + ], + [ + -117.657625, + 33.660209 + ], + [ + -117.657567, + 33.660189 + ], + [ + -117.657527, + 33.660178 + ], + [ + -117.657475, + 33.660173 + ], + [ + -117.657423, + 33.660172 + ], + [ + -117.657372, + 33.660179 + ], + [ + -117.657323, + 33.66019 + ], + [ + -117.657274, + 33.660207 + ], + [ + -117.657227, + 33.66023 + ], + [ + -117.65717, + 33.660268 + ], + [ + -117.657119, + 33.660313 + ], + [ + -117.657084, + 33.660355 + ], + [ + -117.657054, + 33.660404 + ], + [ + -117.657022, + 33.660457 + ], + [ + -117.656992, + 33.660507 + ], + [ + -117.656963, + 33.660557 + ], + [ + -117.656933, + 33.660607 + ], + [ + -117.656901, + 33.660651 + ], + [ + -117.656863, + 33.660697 + ], + [ + -117.656824, + 33.660745 + ], + [ + -117.656783, + 33.660788 + ], + [ + -117.656739, + 33.660833 + ], + [ + -117.656697, + 33.660876 + ], + [ + -117.65667, + 33.660907 + ], + [ + -117.656661, + 33.660941 + ], + [ + -117.656659, + 33.660979 + ], + [ + -117.656666, + 33.661021 + ], + [ + -117.656681, + 33.661063 + ], + [ + -117.656704, + 33.661089 + ], + [ + -117.656731, + 33.661112 + ], + [ + -117.656862, + 33.661161 + ], + [ + -117.656879, + 33.661138 + ], + [ + -117.656884, + 33.661133 + ], + [ + -117.656891, + 33.66113 + ], + [ + -117.656898, + 33.661128 + ], + [ + -117.656906, + 33.661128 + ], + [ + -117.656914, + 33.66113 + ], + [ + -117.657497, + 33.661348 + ], + [ + -117.657528, + 33.661333 + ], + [ + -117.65756, + 33.661318 + ], + [ + -117.657603, + 33.661305 + ], + [ + -117.657651, + 33.661295 + ], + [ + -117.6577, + 33.66129 + ], + [ + -117.65775, + 33.661291 + ], + [ + -117.657798, + 33.661295 + ], + [ + -117.657847, + 33.661306 + ], + [ + -117.657885, + 33.661317 + ], + [ + -117.657915, + 33.66133 + ], + [ + -117.657943, + 33.661345 + ], + [ + -117.657969, + 33.661361 + ], + [ + -117.658002, + 33.661385 + ], + [ + -117.658033, + 33.661416 + ], + [ + -117.65806, + 33.661445 + ], + [ + -117.658087, + 33.661491 + ], + [ + -117.658105, + 33.661535 + ], + [ + -117.658112, + 33.661572 + ], + [ + -117.658176, + 33.661594 + ], + [ + -117.65856, + 33.661736 + ], + [ + -117.658569, + 33.661742 + ], + [ + -117.658574, + 33.66175 + ], + [ + -117.658576, + 33.661759 + ], + [ + -117.658574, + 33.661769 + ], + [ + -117.658567, + 33.661783 + ], + [ + -117.658641, + 33.661811 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 550180555, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.812114, + 33.719342 + ], + [ + -117.812205, + 33.719271 + ], + [ + -117.812204, + 33.71921 + ], + [ + -117.812024, + 33.719005 + ], + [ + -117.811902, + 33.719073 + ], + [ + -117.811939, + 33.719119 + ], + [ + -117.811974, + 33.719206 + ], + [ + -117.812031, + 33.719192 + ], + [ + -117.812077, + 33.719237 + ], + [ + -117.81204, + 33.71926 + ], + [ + -117.812114, + 33.719342 + ] + ] + ] + }, + "properties": { + "name": "Magnolia Tree Park Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 551186480, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.817756, + 33.679845 + ], + [ + -117.817658, + 33.679756 + ], + [ + -117.817642, + 33.679768 + ], + [ + -117.817638, + 33.67977 + ], + [ + -117.817633, + 33.679769 + ], + [ + -117.817629, + 33.679768 + ], + [ + -117.817594, + 33.679736 + ], + [ + -117.817329, + 33.67994 + ], + [ + -117.817358, + 33.679966 + ], + [ + -117.817362, + 33.679975 + ], + [ + -117.817359, + 33.679984 + ], + [ + -117.81735, + 33.679991 + ], + [ + -117.817339, + 33.679992 + ], + [ + -117.817329, + 33.679989 + ], + [ + -117.817249, + 33.679909 + ], + [ + -117.817386, + 33.679791 + ], + [ + -117.817457, + 33.679738 + ], + [ + -117.817535, + 33.679688 + ], + [ + -117.817581, + 33.679667 + ], + [ + -117.817644, + 33.679634 + ], + [ + -117.817697, + 33.679609 + ], + [ + -117.817746, + 33.679597 + ], + [ + -117.817808, + 33.679577 + ], + [ + -117.817899, + 33.679561 + ], + [ + -117.818012, + 33.679545 + ], + [ + -117.818152, + 33.679545 + ], + [ + -117.818305, + 33.679564 + ], + [ + -117.818447, + 33.679595 + ], + [ + -117.818559, + 33.679639 + ], + [ + -117.818624, + 33.679674 + ], + [ + -117.818718, + 33.679735 + ], + [ + -117.818785, + 33.679794 + ], + [ + -117.818951, + 33.679956 + ], + [ + -117.819112, + 33.680137 + ], + [ + -117.819107, + 33.680184 + ], + [ + -117.819122, + 33.680214 + ], + [ + -117.819123, + 33.68024 + ], + [ + -117.819117, + 33.680264 + ], + [ + -117.819099, + 33.680286 + ], + [ + -117.819059, + 33.680317 + ], + [ + -117.818994, + 33.680352 + ], + [ + -117.818908, + 33.680391 + ], + [ + -117.818822, + 33.680429 + ], + [ + -117.818752, + 33.68047 + ], + [ + -117.818683, + 33.680522 + ], + [ + -117.818623, + 33.680586 + ], + [ + -117.818564, + 33.680631 + ], + [ + -117.818492, + 33.680676 + ], + [ + -117.818419, + 33.680717 + ], + [ + -117.818377, + 33.680755 + ], + [ + -117.818272, + 33.680883 + ], + [ + -117.8182, + 33.680964 + ], + [ + -117.817172, + 33.68002 + ], + [ + -117.817205, + 33.679994 + ], + [ + -117.817254, + 33.680041 + ], + [ + -117.817267, + 33.680052 + ], + [ + -117.81728, + 33.68006 + ], + [ + -117.817297, + 33.680065 + ], + [ + -117.817314, + 33.680065 + ], + [ + -117.817347, + 33.680058 + ], + [ + -117.817389, + 33.680046 + ], + [ + -117.817417, + 33.680036 + ], + [ + -117.817421, + 33.680036 + ], + [ + -117.817426, + 33.680037 + ], + [ + -117.817431, + 33.680041 + ], + [ + -117.817462, + 33.680069 + ], + [ + -117.817756, + 33.679845 + ] + ] + ] + }, + "properties": { + "name": "San Paulo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 551373606, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.920553, + 33.620489 + ], + [ + -117.920545, + 33.620525 + ], + [ + -117.920526, + 33.620548 + ], + [ + -117.920512, + 33.620556 + ], + [ + -117.920488, + 33.620562 + ], + [ + -117.920466, + 33.620562 + ], + [ + -117.920442, + 33.620556 + ], + [ + -117.920427, + 33.620547 + ], + [ + -117.920412, + 33.62053 + ], + [ + -117.920404, + 33.620512 + ], + [ + -117.920404, + 33.62049 + ], + [ + -117.920415, + 33.620469 + ], + [ + -117.920419, + 33.620462 + ], + [ + -117.920438, + 33.620448 + ], + [ + -117.920454, + 33.620442 + ], + [ + -117.92048, + 33.620439 + ], + [ + -117.920521, + 33.62045 + ], + [ + -117.920539, + 33.620464 + ], + [ + -117.920553, + 33.620489 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 551373617, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.92045, + 33.620715 + ], + [ + -117.920587, + 33.62084 + ], + [ + -117.92059, + 33.62085 + ], + [ + -117.9206, + 33.620884 + ], + [ + -117.920636, + 33.621008 + ], + [ + -117.920721, + 33.621307 + ], + [ + -117.920755, + 33.621325 + ], + [ + -117.920795, + 33.62132 + ], + [ + -117.920814, + 33.621302 + ], + [ + -117.920844, + 33.621274 + ], + [ + -117.920871, + 33.621226 + ], + [ + -117.920916, + 33.62117 + ], + [ + -117.92099, + 33.621103 + ], + [ + -117.921046, + 33.621027 + ], + [ + -117.921139, + 33.620935 + ], + [ + -117.921278, + 33.620786 + ], + [ + -117.921557, + 33.620512 + ], + [ + -117.920855, + 33.620189 + ], + [ + -117.920793, + 33.620256 + ], + [ + -117.920722, + 33.620263 + ], + [ + -117.920353, + 33.620018 + ], + [ + -117.920215, + 33.620173 + ], + [ + -117.920012, + 33.62037 + ], + [ + -117.91999, + 33.620391 + ], + [ + -117.92045, + 33.620715 + ] + ] + ] + }, + "properties": { + "name": "John Wayne Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 552902576, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.632753, + 33.616279 + ], + [ + -117.632779, + 33.615886 + ], + [ + -117.632676, + 33.615621 + ], + [ + -117.632535, + 33.615237 + ], + [ + -117.63256, + 33.614848 + ], + [ + -117.632578, + 33.614674 + ], + [ + -117.632598, + 33.61447 + ], + [ + -117.632744, + 33.614185 + ], + [ + -117.633506, + 33.614634 + ], + [ + -117.633602, + 33.614644 + ], + [ + -117.633812, + 33.614878 + ], + [ + -117.634067, + 33.614984 + ], + [ + -117.634246, + 33.61508 + ], + [ + -117.634565, + 33.615181 + ], + [ + -117.634578, + 33.615261 + ], + [ + -117.634265, + 33.615479 + ], + [ + -117.633914, + 33.615569 + ], + [ + -117.633697, + 33.61559 + ], + [ + -117.633429, + 33.616137 + ], + [ + -117.633488, + 33.616374 + ], + [ + -117.632753, + 33.616279 + ] + ] + ] + }, + "properties": { + "name": "Pavion", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 553384504, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.819548, + 33.851776 + ], + [ + -117.819528, + 33.851676 + ], + [ + -117.819121, + 33.851732 + ], + [ + -117.818972, + 33.851755 + ], + [ + -117.818813, + 33.851787 + ], + [ + -117.818797, + 33.851792 + ], + [ + -117.818784, + 33.851801 + ], + [ + -117.818776, + 33.851812 + ], + [ + -117.818772, + 33.851822 + ], + [ + -117.818772, + 33.851833 + ], + [ + -117.818867, + 33.852299 + ], + [ + -117.818874, + 33.852311 + ], + [ + -117.818883, + 33.852321 + ], + [ + -117.818896, + 33.852326 + ], + [ + -117.818912, + 33.852328 + ], + [ + -117.818931, + 33.852327 + ], + [ + -117.819176, + 33.852295 + ], + [ + -117.819188, + 33.852296 + ], + [ + -117.819199, + 33.8523 + ], + [ + -117.819452, + 33.852455 + ], + [ + -117.819465, + 33.852466 + ], + [ + -117.819474, + 33.85248 + ], + [ + -117.819479, + 33.852495 + ], + [ + -117.819479, + 33.852513 + ], + [ + -117.819471, + 33.852528 + ], + [ + -117.81946, + 33.85254 + ], + [ + -117.819448, + 33.852548 + ], + [ + -117.819292, + 33.852626 + ], + [ + -117.819273, + 33.852635 + ], + [ + -117.819271, + 33.852638 + ], + [ + -117.819269, + 33.852642 + ], + [ + -117.819258, + 33.852666 + ], + [ + -117.819253, + 33.852682 + ], + [ + -117.819249, + 33.852688 + ], + [ + -117.819244, + 33.852692 + ], + [ + -117.819183, + 33.852707 + ], + [ + -117.819191, + 33.852758 + ], + [ + -117.819193, + 33.852766 + ], + [ + -117.819201, + 33.852775 + ], + [ + -117.819209, + 33.852779 + ], + [ + -117.819219, + 33.852781 + ], + [ + -117.819251, + 33.852779 + ], + [ + -117.819285, + 33.852779 + ], + [ + -117.819319, + 33.852783 + ], + [ + -117.819352, + 33.852792 + ], + [ + -117.819385, + 33.852808 + ], + [ + -117.819417, + 33.852831 + ], + [ + -117.819444, + 33.852858 + ], + [ + -117.819463, + 33.852889 + ], + [ + -117.819474, + 33.852915 + ], + [ + -117.81948, + 33.852937 + ], + [ + -117.819487, + 33.852958 + ], + [ + -117.819498, + 33.852991 + ], + [ + -117.819513, + 33.853023 + ], + [ + -117.819528, + 33.853051 + ], + [ + -117.819551, + 33.853082 + ], + [ + -117.819625, + 33.853166 + ], + [ + -117.819652, + 33.853142 + ], + [ + -117.819672, + 33.853116 + ], + [ + -117.819688, + 33.853092 + ], + [ + -117.8197, + 33.85307 + ], + [ + -117.819709, + 33.853046 + ], + [ + -117.819718, + 33.853018 + ], + [ + -117.819724, + 33.852976 + ], + [ + -117.819725, + 33.852939 + ], + [ + -117.819723, + 33.852921 + ], + [ + -117.819719, + 33.852903 + ], + [ + -117.819715, + 33.852887 + ], + [ + -117.819707, + 33.852866 + ], + [ + -117.819694, + 33.85284 + ], + [ + -117.819679, + 33.852815 + ], + [ + -117.819647, + 33.852773 + ], + [ + -117.81962, + 33.852738 + ], + [ + -117.819607, + 33.852718 + ], + [ + -117.819594, + 33.852692 + ], + [ + -117.819564, + 33.85263 + ], + [ + -117.819544, + 33.852591 + ], + [ + -117.819537, + 33.852569 + ], + [ + -117.819532, + 33.852548 + ], + [ + -117.81953, + 33.852517 + ], + [ + -117.819534, + 33.852486 + ], + [ + -117.819537, + 33.852466 + ], + [ + -117.819548, + 33.852438 + ], + [ + -117.819561, + 33.852408 + ], + [ + -117.819574, + 33.852364 + ], + [ + -117.819581, + 33.852339 + ], + [ + -117.819582, + 33.852318 + ], + [ + -117.819581, + 33.852293 + ], + [ + -117.819578, + 33.852279 + ], + [ + -117.819574, + 33.852266 + ], + [ + -117.819567, + 33.852251 + ], + [ + -117.819557, + 33.852236 + ], + [ + -117.819541, + 33.852219 + ], + [ + -117.819524, + 33.852205 + ], + [ + -117.819473, + 33.852168 + ], + [ + -117.819448, + 33.852148 + ], + [ + -117.819429, + 33.852131 + ], + [ + -117.819404, + 33.852104 + ], + [ + -117.819385, + 33.852081 + ], + [ + -117.819374, + 33.852059 + ], + [ + -117.819369, + 33.852041 + ], + [ + -117.819367, + 33.852017 + ], + [ + -117.819369, + 33.851998 + ], + [ + -117.819376, + 33.851975 + ], + [ + -117.819385, + 33.851952 + ], + [ + -117.8194, + 33.851927 + ], + [ + -117.819432, + 33.851889 + ], + [ + -117.819459, + 33.851855 + ], + [ + -117.819516, + 33.851803 + ], + [ + -117.819548, + 33.851776 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 554334558, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.765869, + 33.796108 + ], + [ + -117.76544, + 33.79629 + ], + [ + -117.765417, + 33.796319 + ], + [ + -117.76546, + 33.796363 + ], + [ + -117.765513, + 33.796414 + ], + [ + -117.765557, + 33.79645 + ], + [ + -117.76561, + 33.796492 + ], + [ + -117.765668, + 33.796534 + ], + [ + -117.765728, + 33.796574 + ], + [ + -117.765789, + 33.796609 + ], + [ + -117.765857, + 33.796645 + ], + [ + -117.765938, + 33.796682 + ], + [ + -117.766009, + 33.79671 + ], + [ + -117.766043, + 33.796632 + ], + [ + -117.76605, + 33.796617 + ], + [ + -117.766086, + 33.796535 + ], + [ + -117.766125, + 33.796518 + ], + [ + -117.766021, + 33.79635 + ], + [ + -117.765869, + 33.796108 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 555289174, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.036201, + 33.835748 + ], + [ + -118.036201, + 33.835592 + ], + [ + -118.035911, + 33.835592 + ], + [ + -118.035917, + 33.835841 + ], + [ + -118.036201, + 33.835748 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 555354796, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.949398, + 33.694695 + ], + [ + -117.949363, + 33.694719 + ], + [ + -117.949316, + 33.694732 + ], + [ + -117.949272, + 33.694724 + ], + [ + -117.949238, + 33.694709 + ], + [ + -117.949213, + 33.694685 + ], + [ + -117.949202, + 33.694661 + ], + [ + -117.949196, + 33.694626 + ], + [ + -117.949198, + 33.694598 + ], + [ + -117.949219, + 33.694591 + ], + [ + -117.949268, + 33.694555 + ], + [ + -117.94928, + 33.694539 + ], + [ + -117.949338, + 33.694542 + ], + [ + -117.94938, + 33.694558 + ], + [ + -117.94941, + 33.694584 + ], + [ + -117.949422, + 33.694624 + ], + [ + -117.94942, + 33.694661 + ], + [ + -117.949398, + 33.694695 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 555882433, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.901679, + 33.632306 + ], + [ + -117.901575, + 33.632029 + ], + [ + -117.901503, + 33.631561 + ], + [ + -117.902387, + 33.631457 + ], + [ + -117.902855, + 33.631253 + ], + [ + -117.903105, + 33.631099 + ], + [ + -117.903344, + 33.631333 + ], + [ + -117.903575, + 33.631461 + ], + [ + -117.903855, + 33.631555 + ], + [ + -117.903861, + 33.63165 + ], + [ + -117.903694, + 33.631641 + ], + [ + -117.903693, + 33.632177 + ], + [ + -117.903801, + 33.632197 + ], + [ + -117.903794, + 33.632347 + ], + [ + -117.904607, + 33.632395 + ], + [ + -117.903701, + 33.633291 + ], + [ + -117.903409, + 33.633584 + ], + [ + -117.903091, + 33.633694 + ], + [ + -117.902728, + 33.633465 + ], + [ + -117.902439, + 33.633253 + ], + [ + -117.901922, + 33.632763 + ], + [ + -117.901679, + 33.632306 + ] + ] + ] + }, + "properties": { + "name": "Mariners Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 556121985, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.029488, + 33.761251 + ], + [ + -118.029128, + 33.761262 + ], + [ + -118.029127, + 33.761735 + ], + [ + -118.02949, + 33.761736 + ], + [ + -118.029488, + 33.761251 + ] + ] + ] + }, + "properties": { + "name": "Virgina K. Boos Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 558205922, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.019109, + 33.76036 + ], + [ + -118.018838, + 33.760364 + ], + [ + -118.018838, + 33.75996 + ], + [ + -118.019101, + 33.759961 + ], + [ + -118.019109, + 33.76036 + ] + ] + ] + }, + "properties": { + "name": "Westminster Conversation Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 559624427, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.909386, + 33.668944 + ], + [ + -117.909385, + 33.6689 + ], + [ + -117.909326, + 33.668901 + ], + [ + -117.909325, + 33.668814 + ], + [ + -117.909877, + 33.668805 + ], + [ + -117.90988, + 33.668935 + ], + [ + -117.909386, + 33.668944 + ] + ] + ] + }, + "properties": { + "name": "Garrison Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 559675333, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.98675, + 33.758692 + ], + [ + -117.986244, + 33.758695 + ], + [ + -117.986237, + 33.758054 + ], + [ + -117.985489, + 33.75806 + ], + [ + -117.985483, + 33.7575 + ], + [ + -117.986238, + 33.757494 + ], + [ + -117.986219, + 33.755679 + ], + [ + -117.986719, + 33.755676 + ], + [ + -117.98675, + 33.758692 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 560329547, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.818603, + 33.703338 + ], + [ + -117.817925, + 33.703148 + ], + [ + -117.817699, + 33.703073 + ], + [ + -117.817485, + 33.702975 + ], + [ + -117.816902, + 33.702627 + ], + [ + -117.816901, + 33.702527 + ], + [ + -117.816911, + 33.7025 + ], + [ + -117.817139, + 33.702304 + ], + [ + -117.817441, + 33.702128 + ], + [ + -117.81775, + 33.701969 + ], + [ + -117.81801, + 33.701867 + ], + [ + -117.818276, + 33.701773 + ], + [ + -117.818391, + 33.701782 + ], + [ + -117.818586, + 33.7024 + ], + [ + -117.818704, + 33.702376 + ], + [ + -117.81879, + 33.702666 + ], + [ + -117.818774, + 33.702927 + ], + [ + -117.818603, + 33.703338 + ] + ] + ] + }, + "properties": { + "name": "Victory Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 560510186, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.814513, + 33.701857 + ], + [ + -117.81417, + 33.701734 + ], + [ + -117.813885, + 33.701542 + ], + [ + -117.813027, + 33.700863 + ], + [ + -117.813558, + 33.700444 + ], + [ + -117.81396, + 33.700199 + ], + [ + -117.81447, + 33.70002 + ], + [ + -117.814663, + 33.700011 + ], + [ + -117.814722, + 33.700855 + ], + [ + -117.814658, + 33.701399 + ], + [ + -117.814566, + 33.701712 + ], + [ + -117.814513, + 33.701857 + ] + ] + ] + }, + "properties": { + "name": "Ron Foell Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 564535738, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.911518, + 33.669286 + ], + [ + -117.911481, + 33.669315 + ], + [ + -117.911475, + 33.669381 + ], + [ + -117.911483, + 33.669444 + ], + [ + -117.911518, + 33.669541 + ], + [ + -117.91181, + 33.669297 + ], + [ + -117.911804, + 33.669282 + ], + [ + -117.911518, + 33.669286 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 568838030, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.710774, + 33.554243 + ], + [ + -117.710543, + 33.553699 + ], + [ + -117.711567, + 33.553397 + ], + [ + -117.711796, + 33.553941 + ], + [ + -117.710774, + 33.554243 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 571440217, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.90573, + 33.795864 + ], + [ + -117.905756, + 33.795808 + ], + [ + -117.905784, + 33.795757 + ], + [ + -117.905966, + 33.79566 + ], + [ + -117.905972, + 33.795633 + ], + [ + -117.905949, + 33.795606 + ], + [ + -117.905972, + 33.795508 + ], + [ + -117.905888, + 33.795432 + ], + [ + -117.905729, + 33.795489 + ], + [ + -117.905554, + 33.795495 + ], + [ + -117.905554, + 33.795535 + ], + [ + -117.905574, + 33.795594 + ], + [ + -117.905632, + 33.795691 + ], + [ + -117.905646, + 33.795739 + ], + [ + -117.905568, + 33.795866 + ], + [ + -117.905707, + 33.795877 + ], + [ + -117.90573, + 33.795864 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573074154, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.021054, + 33.82667 + ], + [ + -118.020909, + 33.826674 + ], + [ + -118.02092, + 33.826371 + ], + [ + -118.020791, + 33.826451 + ], + [ + -118.020727, + 33.826491 + ], + [ + -118.020561, + 33.826514 + ], + [ + -118.020336, + 33.826467 + ], + [ + -118.019776, + 33.826428 + ], + [ + -118.019783, + 33.824775 + ], + [ + -118.019788, + 33.824721 + ], + [ + -118.019833, + 33.824681 + ], + [ + -118.019893, + 33.824655 + ], + [ + -118.021016, + 33.824647 + ], + [ + -118.021054, + 33.82667 + ] + ] + ] + }, + "properties": { + "name": "Cypress College Track", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573074155, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.02026, + 33.829315 + ], + [ + -118.019962, + 33.829316 + ], + [ + -118.019963, + 33.829324 + ], + [ + -118.019963, + 33.829335 + ], + [ + -118.01997, + 33.829725 + ], + [ + -118.019973, + 33.829897 + ], + [ + -118.019762, + 33.829901 + ], + [ + -118.019764, + 33.829298 + ], + [ + -118.019792, + 33.827999 + ], + [ + -118.019808, + 33.827959 + ], + [ + -118.019855, + 33.827922 + ], + [ + -118.019905, + 33.827897 + ], + [ + -118.020388, + 33.82789 + ], + [ + -118.021509, + 33.828075 + ], + [ + -118.021543, + 33.828175 + ], + [ + -118.021483, + 33.828114 + ], + [ + -118.02025, + 33.828131 + ], + [ + -118.020234, + 33.828577 + ], + [ + -118.020298, + 33.828751 + ], + [ + -118.0204, + 33.828951 + ], + [ + -118.020421, + 33.828967 + ], + [ + -118.020252, + 33.829018 + ], + [ + -118.02026, + 33.829315 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573074178, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.025423, + 33.825876 + ], + [ + -118.025325, + 33.825997 + ], + [ + -118.025278, + 33.826002 + ], + [ + -118.025224, + 33.826013 + ], + [ + -118.025154, + 33.82604 + ], + [ + -118.025065, + 33.826092 + ], + [ + -118.025047, + 33.826106 + ], + [ + -118.025107, + 33.826159 + ], + [ + -118.025147, + 33.826194 + ], + [ + -118.025145, + 33.826239 + ], + [ + -118.02546, + 33.826238 + ], + [ + -118.02547, + 33.826238 + ], + [ + -118.025479, + 33.826177 + ], + [ + -118.025532, + 33.826177 + ], + [ + -118.025527, + 33.82603 + ], + [ + -118.025437, + 33.826011 + ], + [ + -118.025433, + 33.825995 + ], + [ + -118.025492, + 33.825925 + ], + [ + -118.025504, + 33.825925 + ], + [ + -118.0257, + 33.826048 + ], + [ + -118.025707, + 33.826057 + ], + [ + -118.025706, + 33.82607 + ], + [ + -118.025688, + 33.826082 + ], + [ + -118.025658, + 33.826116 + ], + [ + -118.025622, + 33.826091 + ], + [ + -118.025475, + 33.826252 + ], + [ + -118.02551, + 33.826276 + ], + [ + -118.025462, + 33.826276 + ], + [ + -118.025097, + 33.826277 + ], + [ + -118.02503, + 33.826223 + ], + [ + -118.02497, + 33.826173 + ], + [ + -118.024855, + 33.826172 + ], + [ + -118.024844, + 33.826177 + ], + [ + -118.024836, + 33.82618 + ], + [ + -118.024783, + 33.82624 + ], + [ + -118.024791, + 33.826246 + ], + [ + -118.024791, + 33.826344 + ], + [ + -118.024524, + 33.826344 + ], + [ + -118.024519, + 33.82596 + ], + [ + -118.024612, + 33.825961 + ], + [ + -118.024634, + 33.825961 + ], + [ + -118.024634, + 33.825931 + ], + [ + -118.024634, + 33.82588 + ], + [ + -118.024697, + 33.825882 + ], + [ + -118.024937, + 33.825625 + ], + [ + -118.024962, + 33.825599 + ], + [ + -118.025423, + 33.825876 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573074182, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.024092, + 33.826755 + ], + [ + -118.024087, + 33.826514 + ], + [ + -118.023967, + 33.826471 + ], + [ + -118.023605, + 33.826471 + ], + [ + -118.023449, + 33.826507 + ], + [ + -118.023249, + 33.826535 + ], + [ + -118.023238, + 33.826652 + ], + [ + -118.023235, + 33.826669 + ], + [ + -118.02323, + 33.826696 + ], + [ + -118.023199, + 33.826696 + ], + [ + -118.022702, + 33.8267 + ], + [ + -118.022703, + 33.826749 + ], + [ + -118.022715, + 33.827328 + ], + [ + -118.022714, + 33.827437 + ], + [ + -118.02289, + 33.827443 + ], + [ + -118.022891, + 33.82757 + ], + [ + -118.022893, + 33.827812 + ], + [ + -118.022981, + 33.827807 + ], + [ + -118.023012, + 33.827825 + ], + [ + -118.023004, + 33.827958 + ], + [ + -118.023028, + 33.827957 + ], + [ + -118.023304, + 33.827951 + ], + [ + -118.023529, + 33.827946 + ], + [ + -118.023562, + 33.827848 + ], + [ + -118.023562, + 33.827497 + ], + [ + -118.023544, + 33.82744 + ], + [ + -118.023546, + 33.827348 + ], + [ + -118.023408, + 33.827339 + ], + [ + -118.023406, + 33.827189 + ], + [ + -118.023407, + 33.827039 + ], + [ + -118.023406, + 33.827013 + ], + [ + -118.023404, + 33.826749 + ], + [ + -118.023452, + 33.826732 + ], + [ + -118.023904, + 33.826728 + ], + [ + -118.023901, + 33.826755 + ], + [ + -118.024092, + 33.826755 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573095423, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.021457, + 33.827222 + ], + [ + -118.021521, + 33.827224 + ], + [ + -118.021518, + 33.827859 + ], + [ + -118.021485, + 33.827898 + ], + [ + -118.021443, + 33.827908 + ], + [ + -118.020316, + 33.827724 + ], + [ + -118.019953, + 33.827723 + ], + [ + -118.019952, + 33.827701 + ], + [ + -118.020301, + 33.827699 + ], + [ + -118.020394, + 33.827715 + ], + [ + -118.02062, + 33.827755 + ], + [ + -118.020759, + 33.827784 + ], + [ + -118.02077, + 33.82773 + ], + [ + -118.020901, + 33.827748 + ], + [ + -118.020909, + 33.827719 + ], + [ + -118.021022, + 33.827744 + ], + [ + -118.021046, + 33.827712 + ], + [ + -118.021276, + 33.827757 + ], + [ + -118.02132, + 33.827726 + ], + [ + -118.021347, + 33.82763 + ], + [ + -118.021376, + 33.827637 + ], + [ + -118.021408, + 33.827545 + ], + [ + -118.021376, + 33.827541 + ], + [ + -118.021446, + 33.827398 + ], + [ + -118.021457, + 33.827222 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573117317, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.026582, + 33.828804 + ], + [ + -118.026691, + 33.828797 + ], + [ + -118.026725, + 33.828838 + ], + [ + -118.026729, + 33.829057 + ], + [ + -118.026757, + 33.8291 + ], + [ + -118.02677, + 33.829119 + ], + [ + -118.02683, + 33.829155 + ], + [ + -118.02692, + 33.829164 + ], + [ + -118.026941, + 33.829178 + ], + [ + -118.026873, + 33.829245 + ], + [ + -118.026845, + 33.829247 + ], + [ + -118.026793, + 33.829214 + ], + [ + -118.026581, + 33.829203 + ], + [ + -118.0262, + 33.829205 + ], + [ + -118.0262, + 33.828982 + ], + [ + -118.026221, + 33.828966 + ], + [ + -118.026306, + 33.828973 + ], + [ + -118.026309, + 33.829059 + ], + [ + -118.026471, + 33.829058 + ], + [ + -118.026471, + 33.828949 + ], + [ + -118.026581, + 33.828953 + ], + [ + -118.026582, + 33.828804 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573117328, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.022791, + 33.824999 + ], + [ + -118.022736, + 33.824999 + ], + [ + -118.022657, + 33.824943 + ], + [ + -118.022596, + 33.824819 + ], + [ + -118.022602, + 33.824701 + ], + [ + -118.022712, + 33.824634 + ], + [ + -118.023627, + 33.824627 + ], + [ + -118.023731, + 33.824804 + ], + [ + -118.023473, + 33.824771 + ], + [ + -118.023205, + 33.824799 + ], + [ + -118.022968, + 33.824885 + ], + [ + -118.022791, + 33.824999 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573117343, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.0342, + 33.820547 + ], + [ + -118.03414, + 33.820556 + ], + [ + -118.033961, + 33.820529 + ], + [ + -118.033958, + 33.820474 + ], + [ + -118.033918, + 33.820483 + ], + [ + -118.033857, + 33.820437 + ], + [ + -118.033877, + 33.820344 + ], + [ + -118.033952, + 33.820321 + ], + [ + -118.034026, + 33.820351 + ], + [ + -118.034091, + 33.820334 + ], + [ + -118.034142, + 33.820369 + ], + [ + -118.034141, + 33.820421 + ], + [ + -118.034219, + 33.820488 + ], + [ + -118.034225, + 33.820518 + ], + [ + -118.0342, + 33.820547 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573117344, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.033731, + 33.820564 + ], + [ + -118.033569, + 33.820563 + ], + [ + -118.033562, + 33.820329 + ], + [ + -118.033726, + 33.820326 + ], + [ + -118.033731, + 33.820564 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573117356, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.04092, + 33.824386 + ], + [ + -118.04113, + 33.824387 + ], + [ + -118.041165, + 33.824401 + ], + [ + -118.041188, + 33.824421 + ], + [ + -118.041211, + 33.824457 + ], + [ + -118.041226, + 33.825604 + ], + [ + -118.040712, + 33.825605 + ], + [ + -118.040658, + 33.825578 + ], + [ + -118.040597, + 33.825578 + ], + [ + -118.040541, + 33.825578 + ], + [ + -118.040497, + 33.825606 + ], + [ + -118.040096, + 33.825612 + ], + [ + -118.039907, + 33.825614 + ], + [ + -118.039888, + 33.825147 + ], + [ + -118.039861, + 33.825086 + ], + [ + -118.03969, + 33.825088 + ], + [ + -118.039635, + 33.82514 + ], + [ + -118.039058, + 33.825141 + ], + [ + -118.039059, + 33.82507 + ], + [ + -118.039084, + 33.824908 + ], + [ + -118.039098, + 33.824797 + ], + [ + -118.039089, + 33.824387 + ], + [ + -118.039682, + 33.824387 + ], + [ + -118.040505, + 33.824386 + ], + [ + -118.040665, + 33.824386 + ], + [ + -118.04092, + 33.824386 + ] + ] + ] + }, + "properties": { + "name": "Cypress Civic Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573286942, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.008533, + 33.848706 + ], + [ + -118.008478, + 33.848719 + ], + [ + -118.00843, + 33.848761 + ], + [ + -118.008398, + 33.848781 + ], + [ + -118.008329, + 33.848789 + ], + [ + -118.008293, + 33.848807 + ], + [ + -118.008256, + 33.848856 + ], + [ + -118.008258, + 33.848888 + ], + [ + -118.008275, + 33.848915 + ], + [ + -118.008301, + 33.848936 + ], + [ + -118.008344, + 33.848947 + ], + [ + -118.008478, + 33.848943 + ], + [ + -118.008533, + 33.848927 + ], + [ + -118.008589, + 33.848901 + ], + [ + -118.008613, + 33.848882 + ], + [ + -118.008634, + 33.848899 + ], + [ + -118.008671, + 33.848909 + ], + [ + -118.008727, + 33.848915 + ], + [ + -118.008761, + 33.848893 + ], + [ + -118.008772, + 33.848851 + ], + [ + -118.008716, + 33.848801 + ], + [ + -118.008675, + 33.848772 + ], + [ + -118.008576, + 33.848719 + ], + [ + -118.008533, + 33.848706 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573286950, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.00722, + 33.849724 + ], + [ + -118.00697, + 33.849716 + ], + [ + -118.006958, + 33.849682 + ], + [ + -118.006882, + 33.849492 + ], + [ + -118.006891, + 33.849445 + ], + [ + -118.006921, + 33.849418 + ], + [ + -118.006954, + 33.849403 + ], + [ + -118.007023, + 33.849395 + ], + [ + -118.007134, + 33.849395 + ], + [ + -118.007162, + 33.849402 + ], + [ + -118.00719, + 33.849419 + ], + [ + -118.007236, + 33.849445 + ], + [ + -118.00722, + 33.849724 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573286954, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.00926, + 33.848715 + ], + [ + -118.009366, + 33.848653 + ], + [ + -118.009476, + 33.848788 + ], + [ + -118.009367, + 33.848846 + ], + [ + -118.00926, + 33.848715 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573441600, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.043226, + 33.817557 + ], + [ + -118.04311, + 33.817539 + ], + [ + -118.043149, + 33.817361 + ], + [ + -118.043272, + 33.817384 + ], + [ + -118.043226, + 33.817557 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573441602, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.043539, + 33.817427 + ], + [ + -118.043772, + 33.817426 + ], + [ + -118.043769, + 33.817282 + ], + [ + -118.043539, + 33.817283 + ], + [ + -118.043539, + 33.817427 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573711229, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.034548, + 33.838785 + ], + [ + -118.033586, + 33.83879 + ], + [ + -118.033582, + 33.838646 + ], + [ + -118.033521, + 33.838645 + ], + [ + -118.03352, + 33.838806 + ], + [ + -118.03345, + 33.838806 + ], + [ + -118.033478, + 33.838903 + ], + [ + -118.034548, + 33.838895 + ], + [ + -118.034548, + 33.838785 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573711234, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.03307, + 33.838471 + ], + [ + -118.033166, + 33.838463 + ], + [ + -118.033283, + 33.838464 + ], + [ + -118.033283, + 33.838205 + ], + [ + -118.033065, + 33.838207 + ], + [ + -118.03307, + 33.838471 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573711245, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.028233, + 33.842259 + ], + [ + -118.027681, + 33.842267 + ], + [ + -118.027611, + 33.842246 + ], + [ + -118.02756, + 33.842206 + ], + [ + -118.02755, + 33.841944 + ], + [ + -118.027675, + 33.841951 + ], + [ + -118.027679, + 33.841683 + ], + [ + -118.027679, + 33.841678 + ], + [ + -118.02768, + 33.841583 + ], + [ + -118.027681, + 33.841514 + ], + [ + -118.027723, + 33.841512 + ], + [ + -118.028147, + 33.841495 + ], + [ + -118.028147, + 33.841459 + ], + [ + -118.028181, + 33.841434 + ], + [ + -118.028191, + 33.841436 + ], + [ + -118.028218, + 33.84144 + ], + [ + -118.028233, + 33.842259 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573713992, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.018548, + 33.84104 + ], + [ + -118.017918, + 33.841046 + ], + [ + -118.017912, + 33.84068 + ], + [ + -118.017911, + 33.840588 + ], + [ + -118.018019, + 33.840581 + ], + [ + -118.018106, + 33.840576 + ], + [ + -118.018118, + 33.840609 + ], + [ + -118.018444, + 33.840598 + ], + [ + -118.018451, + 33.840755 + ], + [ + -118.018548, + 33.840749 + ], + [ + -118.018548, + 33.84104 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573713993, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.017912, + 33.84068 + ], + [ + -118.018022, + 33.840675 + ], + [ + -118.018019, + 33.840581 + ], + [ + -118.017911, + 33.840588 + ], + [ + -118.017912, + 33.84068 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573825948, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.982951, + 33.853732 + ], + [ + -117.982959, + 33.853971 + ], + [ + -117.983395, + 33.853963 + ], + [ + -117.983397, + 33.853724 + ], + [ + -117.982951, + 33.853732 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573825949, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.983563, + 33.853687 + ], + [ + -117.983565, + 33.854018 + ], + [ + -117.984369, + 33.853997 + ], + [ + -117.984363, + 33.853675 + ], + [ + -117.983563, + 33.853687 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573825968, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.005562, + 33.868481 + ], + [ + -118.005573, + 33.869358 + ], + [ + -118.007751, + 33.869333 + ], + [ + -118.007749, + 33.869071 + ], + [ + -118.007744, + 33.868466 + ], + [ + -118.005562, + 33.868481 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573858786, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.026526, + 33.829652 + ], + [ + -118.026469, + 33.829821 + ], + [ + -118.026443, + 33.829834 + ], + [ + -118.026434, + 33.829838 + ], + [ + -118.026239, + 33.829847 + ], + [ + -118.026208, + 33.829858 + ], + [ + -118.02587, + 33.829977 + ], + [ + -118.025531, + 33.830045 + ], + [ + -118.025491, + 33.830077 + ], + [ + -118.025505, + 33.830134 + ], + [ + -118.025485, + 33.830178 + ], + [ + -118.025412, + 33.830192 + ], + [ + -118.02539, + 33.83019 + ], + [ + -118.025396, + 33.830128 + ], + [ + -118.025173, + 33.830101 + ], + [ + -118.025042, + 33.830101 + ], + [ + -118.024808, + 33.83009 + ], + [ + -118.024593, + 33.830057 + ], + [ + -118.024458, + 33.830031 + ], + [ + -118.024268, + 33.829995 + ], + [ + -118.024188, + 33.829976 + ], + [ + -118.024109, + 33.829979 + ], + [ + -118.023579, + 33.829983 + ], + [ + -118.022897, + 33.829987 + ], + [ + -118.021839, + 33.829994 + ], + [ + -118.021805, + 33.829994 + ], + [ + -118.021805, + 33.829975 + ], + [ + -118.023205, + 33.829968 + ], + [ + -118.023209, + 33.829923 + ], + [ + -118.023549, + 33.829966 + ], + [ + -118.023708, + 33.829959 + ], + [ + -118.023887, + 33.829915 + ], + [ + -118.02396, + 33.829891 + ], + [ + -118.024742, + 33.830024 + ], + [ + -118.025032, + 33.830045 + ], + [ + -118.025171, + 33.830045 + ], + [ + -118.025317, + 33.830035 + ], + [ + -118.02551, + 33.830012 + ], + [ + -118.025679, + 33.829989 + ], + [ + -118.025833, + 33.829948 + ], + [ + -118.026042, + 33.829887 + ], + [ + -118.026181, + 33.829827 + ], + [ + -118.026526, + 33.829652 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 573887529, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.020768, + 33.831937 + ], + [ + -118.020768, + 33.831963 + ], + [ + -118.020769, + 33.832024 + ], + [ + -118.020677, + 33.832024 + ], + [ + -118.02068, + 33.832034 + ], + [ + -118.020567, + 33.832033 + ], + [ + -118.020571, + 33.832067 + ], + [ + -118.020548, + 33.832065 + ], + [ + -118.020553, + 33.83211 + ], + [ + -118.0204, + 33.832103 + ], + [ + -118.0204, + 33.832047 + ], + [ + -118.020234, + 33.832051 + ], + [ + -118.020239, + 33.832222 + ], + [ + -118.020428, + 33.832214 + ], + [ + -118.020428, + 33.832258 + ], + [ + -118.020189, + 33.832262 + ], + [ + -118.020191, + 33.832427 + ], + [ + -118.019906, + 33.832422 + ], + [ + -118.019904, + 33.832483 + ], + [ + -118.01989, + 33.832482 + ], + [ + -118.019893, + 33.832638 + ], + [ + -118.019818, + 33.832643 + ], + [ + -118.019818, + 33.832036 + ], + [ + -118.01991, + 33.83198 + ], + [ + -118.01991, + 33.83197 + ], + [ + -118.019907, + 33.831941 + ], + [ + -118.020768, + 33.831937 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 574989886, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.006264, + 33.717773 + ], + [ + -118.006365, + 33.71781 + ], + [ + -118.006347, + 33.717843 + ], + [ + -118.006377, + 33.71787 + ], + [ + -118.006381, + 33.717898 + ], + [ + -118.006375, + 33.717922 + ], + [ + -118.006355, + 33.717941 + ], + [ + -118.006302, + 33.717952 + ], + [ + -118.006208, + 33.717917 + ], + [ + -118.006197, + 33.717893 + ], + [ + -118.006208, + 33.717859 + ], + [ + -118.006264, + 33.717773 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 575247141, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.909893, + 33.834417 + ], + [ + -117.909837, + 33.834256 + ], + [ + -117.910155, + 33.834179 + ], + [ + -117.910211, + 33.83434 + ], + [ + -117.909893, + 33.834417 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 579730081, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.868555, + 33.613652 + ], + [ + -117.868916, + 33.613856 + ], + [ + -117.868931, + 33.613811 + ], + [ + -117.868955, + 33.613759 + ], + [ + -117.869021, + 33.613645 + ], + [ + -117.869076, + 33.613568 + ], + [ + -117.869237, + 33.613358 + ], + [ + -117.869382, + 33.613192 + ], + [ + -117.869447, + 33.61312 + ], + [ + -117.869459, + 33.613123 + ], + [ + -117.86953, + 33.613118 + ], + [ + -117.86958, + 33.61311 + ], + [ + -117.870137, + 33.612607 + ], + [ + -117.870256, + 33.612475 + ], + [ + -117.870534, + 33.612166 + ], + [ + -117.870689, + 33.612008 + ], + [ + -117.870701, + 33.611994 + ], + [ + -117.870684, + 33.611984 + ], + [ + -117.870695, + 33.611949 + ], + [ + -117.870695, + 33.611924 + ], + [ + -117.870689, + 33.611903 + ], + [ + -117.870674, + 33.611882 + ], + [ + -117.870653, + 33.611866 + ], + [ + -117.870415, + 33.611767 + ], + [ + -117.870068, + 33.611659 + ], + [ + -117.87004, + 33.611657 + ], + [ + -117.870015, + 33.61166 + ], + [ + -117.869984, + 33.611673 + ], + [ + -117.869959, + 33.611701 + ], + [ + -117.869932, + 33.611747 + ], + [ + -117.869621, + 33.612311 + ], + [ + -117.869321, + 33.612764 + ], + [ + -117.86901, + 33.613176 + ], + [ + -117.868618, + 33.613595 + ], + [ + -117.868555, + 33.613652 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 579730082, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.870202, + 33.611323 + ], + [ + -117.870227, + 33.611344 + ], + [ + -117.870259, + 33.611359 + ], + [ + -117.87044, + 33.61141 + ], + [ + -117.870592, + 33.61146 + ], + [ + -117.870925, + 33.611597 + ], + [ + -117.870992, + 33.611604 + ], + [ + -117.871008, + 33.611587 + ], + [ + -117.871045, + 33.611611 + ], + [ + -117.871073, + 33.611592 + ], + [ + -117.871401, + 33.611249 + ], + [ + -117.871652, + 33.610971 + ], + [ + -117.871873, + 33.610708 + ], + [ + -117.872034, + 33.610508 + ], + [ + -117.872113, + 33.610409 + ], + [ + -117.872074, + 33.610388 + ], + [ + -117.872238, + 33.610168 + ], + [ + -117.872406, + 33.609937 + ], + [ + -117.872382, + 33.609926 + ], + [ + -117.872395, + 33.609907 + ], + [ + -117.87213, + 33.609781 + ], + [ + -117.872071, + 33.60987 + ], + [ + -117.871821, + 33.609753 + ], + [ + -117.871898, + 33.609639 + ], + [ + -117.871857, + 33.60962 + ], + [ + -117.87171, + 33.609552 + ], + [ + -117.871673, + 33.609527 + ], + [ + -117.871646, + 33.609498 + ], + [ + -117.871628, + 33.609465 + ], + [ + -117.87162, + 33.609435 + ], + [ + -117.871616, + 33.60941 + ], + [ + -117.871618, + 33.609381 + ], + [ + -117.871628, + 33.609353 + ], + [ + -117.871649, + 33.609316 + ], + [ + -117.871592, + 33.609294 + ], + [ + -117.871584, + 33.60929 + ], + [ + -117.871758, + 33.608987 + ], + [ + -117.87182, + 33.609011 + ], + [ + -117.871836, + 33.608982 + ], + [ + -117.871553, + 33.608871 + ], + [ + -117.870988, + 33.609802 + ], + [ + -117.870202, + 33.611245 + ], + [ + -117.870194, + 33.611277 + ], + [ + -117.870195, + 33.611304 + ], + [ + -117.870202, + 33.611323 + ] + ] + ] + }, + "properties": { + "name": "Newport Beach Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 580037094, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.010923, + 33.843699 + ], + [ + -118.010637, + 33.8437 + ], + [ + -118.010628, + 33.843699 + ], + [ + -118.010623, + 33.843696 + ], + [ + -118.010619, + 33.84369 + ], + [ + -118.010619, + 33.843672 + ], + [ + -118.010618, + 33.843508 + ], + [ + -118.01082, + 33.843509 + ], + [ + -118.010813, + 33.843305 + ], + [ + -118.010813, + 33.843107 + ], + [ + -118.010709, + 33.8431 + ], + [ + -118.010702, + 33.8431 + ], + [ + -118.010702, + 33.843128 + ], + [ + -118.010583, + 33.843131 + ], + [ + -118.010578, + 33.843096 + ], + [ + -118.010651, + 33.843099 + ], + [ + -118.010658, + 33.843094 + ], + [ + -118.010661, + 33.843081 + ], + [ + -118.010661, + 33.84306 + ], + [ + -118.010671, + 33.843055 + ], + [ + -118.010862, + 33.843054 + ], + [ + -118.010877, + 33.843058 + ], + [ + -118.010898, + 33.843068 + ], + [ + -118.010914, + 33.843079 + ], + [ + -118.010931, + 33.843105 + ], + [ + -118.010934, + 33.843117 + ], + [ + -118.010939, + 33.843139 + ], + [ + -118.010937, + 33.843411 + ], + [ + -118.010935, + 33.843598 + ], + [ + -118.010924, + 33.843599 + ], + [ + -118.010922, + 33.84363 + ], + [ + -118.010932, + 33.843633 + ], + [ + -118.010934, + 33.843639 + ], + [ + -118.010935, + 33.843675 + ], + [ + -118.010922, + 33.843676 + ], + [ + -118.010923, + 33.843699 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 580037099, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.010861, + 33.843867 + ], + [ + -118.010694, + 33.843868 + ], + [ + -118.010693, + 33.843853 + ], + [ + -118.010695, + 33.843826 + ], + [ + -118.010696, + 33.843818 + ], + [ + -118.010745, + 33.843815 + ], + [ + -118.010931, + 33.843814 + ], + [ + -118.010937, + 33.843817 + ], + [ + -118.010939, + 33.843822 + ], + [ + -118.010942, + 33.843909 + ], + [ + -118.010946, + 33.844163 + ], + [ + -118.010949, + 33.844379 + ], + [ + -118.010938, + 33.844394 + ], + [ + -118.010906, + 33.844418 + ], + [ + -118.010881, + 33.844428 + ], + [ + -118.01083, + 33.844429 + ], + [ + -118.010661, + 33.844432 + ], + [ + -118.010613, + 33.844432 + ], + [ + -118.010581, + 33.84443 + ], + [ + -118.010582, + 33.844375 + ], + [ + -118.010583, + 33.844369 + ], + [ + -118.010592, + 33.844366 + ], + [ + -118.010605, + 33.844364 + ], + [ + -118.010715, + 33.844364 + ], + [ + -118.01083, + 33.844364 + ], + [ + -118.010862, + 33.844365 + ], + [ + -118.010875, + 33.844364 + ], + [ + -118.010868, + 33.844138 + ], + [ + -118.010867, + 33.843914 + ], + [ + -118.010866, + 33.843867 + ], + [ + -118.010861, + 33.843867 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 583046206, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.865859, + 33.835932 + ], + [ + -117.865668, + 33.835885 + ], + [ + -117.865659, + 33.835739 + ], + [ + -117.86575, + 33.835478 + ], + [ + -117.865813, + 33.835388 + ], + [ + -117.865987, + 33.835204 + ], + [ + -117.86684, + 33.832505 + ], + [ + -117.866944, + 33.832382 + ], + [ + -117.867034, + 33.832336 + ], + [ + -117.867154, + 33.832299 + ], + [ + -117.867355, + 33.832265 + ], + [ + -117.867517, + 33.832257 + ], + [ + -117.86783, + 33.832271 + ], + [ + -117.86822, + 33.832304 + ], + [ + -117.868454, + 33.832284 + ], + [ + -117.868671, + 33.83223 + ], + [ + -117.868865, + 33.832137 + ], + [ + -117.868967, + 33.832044 + ], + [ + -117.869031, + 33.831975 + ], + [ + -117.869093, + 33.831872 + ], + [ + -117.869146, + 33.831723 + ], + [ + -117.869168, + 33.831493 + ], + [ + -117.869117, + 33.831246 + ], + [ + -117.8691, + 33.831148 + ], + [ + -117.869109, + 33.831057 + ], + [ + -117.869153, + 33.830924 + ], + [ + -117.869236, + 33.830765 + ], + [ + -117.869312, + 33.830627 + ], + [ + -117.869339, + 33.830556 + ], + [ + -117.869366, + 33.830393 + ], + [ + -117.869371, + 33.830235 + ], + [ + -117.869375, + 33.830115 + ], + [ + -117.869362, + 33.829931 + ], + [ + -117.869352, + 33.82986 + ], + [ + -117.869316, + 33.829741 + ], + [ + -117.869273, + 33.829648 + ], + [ + -117.869217, + 33.829534 + ], + [ + -117.86913, + 33.829381 + ], + [ + -117.869086, + 33.829296 + ], + [ + -117.869058, + 33.829212 + ], + [ + -117.869045, + 33.829126 + ], + [ + -117.869048, + 33.829045 + ], + [ + -117.869083, + 33.828963 + ], + [ + -117.86913, + 33.828902 + ], + [ + -117.8692, + 33.828835 + ], + [ + -117.869338, + 33.828748 + ], + [ + -117.869384, + 33.82873 + ], + [ + -117.869458, + 33.82871 + ], + [ + -117.869533, + 33.828698 + ], + [ + -117.869646, + 33.828691 + ], + [ + -117.869784, + 33.828708 + ], + [ + -117.869984, + 33.828746 + ], + [ + -117.870121, + 33.828768 + ], + [ + -117.870298, + 33.828782 + ], + [ + -117.870399, + 33.82878 + ], + [ + -117.870516, + 33.828777 + ], + [ + -117.870649, + 33.828773 + ], + [ + -117.870773, + 33.828747 + ], + [ + -117.870912, + 33.828702 + ], + [ + -117.870978, + 33.828673 + ], + [ + -117.871044, + 33.828641 + ], + [ + -117.871135, + 33.828584 + ], + [ + -117.871244, + 33.828504 + ], + [ + -117.871316, + 33.828429 + ], + [ + -117.871344, + 33.828386 + ], + [ + -117.871379, + 33.828294 + ], + [ + -117.871397, + 33.828176 + ], + [ + -117.871397, + 33.828026 + ], + [ + -117.871387, + 33.827863 + ], + [ + -117.871378, + 33.82782 + ], + [ + -117.871358, + 33.827776 + ], + [ + -117.871318, + 33.827707 + ], + [ + -117.871245, + 33.827642 + ], + [ + -117.871197, + 33.827593 + ], + [ + -117.871139, + 33.827537 + ], + [ + -117.871096, + 33.827468 + ], + [ + -117.871081, + 33.827383 + ], + [ + -117.87108, + 33.827314 + ], + [ + -117.871079, + 33.827262 + ], + [ + -117.87108, + 33.827206 + ], + [ + -117.871114, + 33.827134 + ], + [ + -117.871185, + 33.827016 + ], + [ + -117.871268, + 33.826894 + ], + [ + -117.871332, + 33.826798 + ], + [ + -117.87136, + 33.826734 + ], + [ + -117.871368, + 33.826601 + ], + [ + -117.871388, + 33.825888 + ], + [ + -117.871383, + 33.825799 + ], + [ + -117.871375, + 33.825725 + ], + [ + -117.871361, + 33.82565 + ], + [ + -117.87134, + 33.825544 + ], + [ + -117.871308, + 33.825449 + ], + [ + -117.871289, + 33.825389 + ], + [ + -117.871285, + 33.825354 + ], + [ + -117.871288, + 33.825267 + ], + [ + -117.871301, + 33.825229 + ], + [ + -117.871297, + 33.825185 + ], + [ + -117.871285, + 33.825131 + ], + [ + -117.871274, + 33.825077 + ], + [ + -117.871279, + 33.825032 + ], + [ + -117.871291, + 33.824965 + ], + [ + -117.87132, + 33.824853 + ], + [ + -117.871356, + 33.824727 + ], + [ + -117.871377, + 33.824713 + ], + [ + -117.871387, + 33.824705 + ], + [ + -117.871393, + 33.82469 + ], + [ + -117.871399, + 33.824656 + ], + [ + -117.871432, + 33.824463 + ], + [ + -117.871439, + 33.824435 + ], + [ + -117.871455, + 33.824387 + ], + [ + -117.871476, + 33.824337 + ], + [ + -117.871626, + 33.82401 + ], + [ + -117.871658, + 33.823922 + ], + [ + -117.871679, + 33.823859 + ], + [ + -117.871694, + 33.823799 + ], + [ + -117.871703, + 33.82376 + ], + [ + -117.871715, + 33.823712 + ], + [ + -117.871722, + 33.823666 + ], + [ + -117.871735, + 33.823625 + ], + [ + -117.871767, + 33.823569 + ], + [ + -117.871793, + 33.823518 + ], + [ + -117.871812, + 33.823488 + ], + [ + -117.871837, + 33.823451 + ], + [ + -117.871844, + 33.823437 + ], + [ + -117.87183, + 33.823376 + ], + [ + -117.871816, + 33.82332 + ], + [ + -117.87184, + 33.823289 + ], + [ + -117.871955, + 33.823099 + ], + [ + -117.872072, + 33.822936 + ], + [ + -117.872165, + 33.822815 + ], + [ + -117.872315, + 33.822681 + ], + [ + -117.872399, + 33.822601 + ], + [ + -117.872461, + 33.82255 + ], + [ + -117.872483, + 33.822517 + ], + [ + -117.872499, + 33.822475 + ], + [ + -117.872552, + 33.822351 + ], + [ + -117.872627, + 33.822206 + ], + [ + -117.872713, + 33.822027 + ], + [ + -117.872779, + 33.821878 + ], + [ + -117.872824, + 33.821787 + ], + [ + -117.872921, + 33.821658 + ], + [ + -117.873019, + 33.82153 + ], + [ + -117.873088, + 33.821437 + ], + [ + -117.873156, + 33.821351 + ], + [ + -117.873203, + 33.821276 + ], + [ + -117.873259, + 33.821187 + ], + [ + -117.873261, + 33.821152 + ], + [ + -117.873247, + 33.821129 + ], + [ + -117.873242, + 33.82111 + ], + [ + -117.873215, + 33.821045 + ], + [ + -117.873195, + 33.82101 + ], + [ + -117.873152, + 33.820967 + ], + [ + -117.87311, + 33.82095 + ], + [ + -117.872735, + 33.820844 + ], + [ + -117.871706, + 33.820537 + ], + [ + -117.871544, + 33.820491 + ], + [ + -117.871341, + 33.820428 + ], + [ + -117.871279, + 33.82041 + ], + [ + -117.871235, + 33.820407 + ], + [ + -117.871198, + 33.820406 + ], + [ + -117.871175, + 33.820401 + ], + [ + -117.871131, + 33.820405 + ], + [ + -117.871091, + 33.820399 + ], + [ + -117.871054, + 33.82039 + ], + [ + -117.87109, + 33.820276 + ], + [ + -117.871249, + 33.82032 + ], + [ + -117.871251, + 33.820339 + ], + [ + -117.87324, + 33.820928 + ], + [ + -117.873347, + 33.820948 + ], + [ + -117.87361, + 33.821031 + ], + [ + -117.873525, + 33.821188 + ], + [ + -117.872202, + 33.823447 + ], + [ + -117.871626, + 33.824435 + ], + [ + -117.871629, + 33.825266 + ], + [ + -117.87161, + 33.825289 + ], + [ + -117.871605, + 33.825348 + ], + [ + -117.871589, + 33.828998 + ], + [ + -117.869542, + 33.829003 + ], + [ + -117.869525, + 33.830872 + ], + [ + -117.869271, + 33.831945 + ], + [ + -117.869142, + 33.831909 + ], + [ + -117.86912, + 33.831959 + ], + [ + -117.869094, + 33.832011 + ], + [ + -117.869056, + 33.832061 + ], + [ + -117.869008, + 33.832115 + ], + [ + -117.868964, + 33.832154 + ], + [ + -117.868911, + 33.832193 + ], + [ + -117.868854, + 33.832227 + ], + [ + -117.868791, + 33.83226 + ], + [ + -117.868718, + 33.832287 + ], + [ + -117.868635, + 33.83231 + ], + [ + -117.868554, + 33.832329 + ], + [ + -117.868469, + 33.832345 + ], + [ + -117.868407, + 33.832356 + ], + [ + -117.868324, + 33.832363 + ], + [ + -117.868235, + 33.832366 + ], + [ + -117.868134, + 33.832366 + ], + [ + -117.868037, + 33.832358 + ], + [ + -117.867925, + 33.832347 + ], + [ + -117.867726, + 33.832329 + ], + [ + -117.867632, + 33.832319 + ], + [ + -117.867556, + 33.832316 + ], + [ + -117.867471, + 33.832315 + ], + [ + -117.867379, + 33.832322 + ], + [ + -117.867277, + 33.832337 + ], + [ + -117.86717, + 33.83236 + ], + [ + -117.867078, + 33.832386 + ], + [ + -117.867032, + 33.832411 + ], + [ + -117.867091, + 33.832564 + ], + [ + -117.866967, + 33.832557 + ], + [ + -117.86696, + 33.832754 + ], + [ + -117.865859, + 33.835932 + ] + ] + ] + }, + "properties": { + "name": "Anaheim Coves Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 583313649, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.828856, + 33.651286 + ], + [ + -117.828696, + 33.651289 + ], + [ + -117.828711, + 33.651558 + ], + [ + -117.828868, + 33.651556 + ], + [ + -117.828856, + 33.651286 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 583505210, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.840636, + 33.734166 + ], + [ + -117.840634, + 33.734088 + ], + [ + -117.840503, + 33.73409 + ], + [ + -117.840505, + 33.734167 + ], + [ + -117.840636, + 33.734166 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 583505678, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.841865, + 33.734242 + ], + [ + -117.841864, + 33.734128 + ], + [ + -117.84196, + 33.734128 + ], + [ + -117.841961, + 33.734242 + ], + [ + -117.841865, + 33.734242 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 583510114, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.823496, + 33.740565 + ], + [ + -117.823495, + 33.740164 + ], + [ + -117.822037, + 33.740166 + ], + [ + -117.822038, + 33.741225 + ], + [ + -117.822321, + 33.741224 + ], + [ + -117.82232, + 33.740566 + ], + [ + -117.823496, + 33.740565 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 583513092, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.832455, + 33.734105 + ], + [ + -117.832393, + 33.734068 + ], + [ + -117.832314, + 33.734065 + ], + [ + -117.83219, + 33.734141 + ], + [ + -117.831961, + 33.734148 + ], + [ + -117.831848, + 33.734042 + ], + [ + -117.831953, + 33.733965 + ], + [ + -117.832489, + 33.733954 + ], + [ + -117.832493, + 33.734105 + ], + [ + -117.832455, + 33.734105 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 585066741, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.994359, + 33.841719 + ], + [ + -117.994363, + 33.841741 + ], + [ + -117.994355, + 33.841781 + ], + [ + -117.994309, + 33.841948 + ], + [ + -117.994298, + 33.842039 + ], + [ + -117.994154, + 33.842019 + ], + [ + -117.994124, + 33.841967 + ], + [ + -117.994119, + 33.84195 + ], + [ + -117.994129, + 33.841948 + ], + [ + -117.994285, + 33.841948 + ], + [ + -117.994287, + 33.841913 + ], + [ + -117.994298, + 33.841861 + ], + [ + -117.994193, + 33.841846 + ], + [ + -117.99418, + 33.841861 + ], + [ + -117.994166, + 33.841901 + ], + [ + -117.994147, + 33.84191 + ], + [ + -117.994092, + 33.84191 + ], + [ + -117.994089, + 33.841904 + ], + [ + -117.994118, + 33.841892 + ], + [ + -117.994092, + 33.841863 + ], + [ + -117.994067, + 33.841879 + ], + [ + -117.994035, + 33.841817 + ], + [ + -117.994017, + 33.84175 + ], + [ + -117.994017, + 33.841736 + ], + [ + -117.994036, + 33.84173 + ], + [ + -117.994079, + 33.841731 + ], + [ + -117.994095, + 33.84175 + ], + [ + -117.994092, + 33.841779 + ], + [ + -117.99409, + 33.841822 + ], + [ + -117.994163, + 33.841824 + ], + [ + -117.994178, + 33.841814 + ], + [ + -117.994185, + 33.84179 + ], + [ + -117.99419, + 33.841779 + ], + [ + -117.99418, + 33.84177 + ], + [ + -117.994183, + 33.841754 + ], + [ + -117.994186, + 33.841743 + ], + [ + -117.994214, + 33.841732 + ], + [ + -117.994272, + 33.841721 + ], + [ + -117.994326, + 33.841707 + ], + [ + -117.994345, + 33.841707 + ], + [ + -117.994359, + 33.841719 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 585264087, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.767179, + 33.658327 + ], + [ + -117.766559, + 33.658586 + ], + [ + -117.766526, + 33.658531 + ], + [ + -117.766436, + 33.658569 + ], + [ + -117.766321, + 33.658378 + ], + [ + -117.766381, + 33.658353 + ], + [ + -117.766357, + 33.658312 + ], + [ + -117.767007, + 33.658041 + ], + [ + -117.767093, + 33.658184 + ], + [ + -117.767179, + 33.658327 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 586024575, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.648618, + 33.647496 + ], + [ + -117.648276, + 33.646963 + ], + [ + -117.647374, + 33.647369 + ], + [ + -117.647687, + 33.647893 + ], + [ + -117.648618, + 33.647496 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 586827256, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.67547, + 33.674736 + ], + [ + -117.675459, + 33.674746 + ], + [ + -117.675451, + 33.674753 + ], + [ + -117.675433, + 33.674759 + ], + [ + -117.675417, + 33.674759 + ], + [ + -117.675397, + 33.674754 + ], + [ + -117.675374, + 33.674753 + ], + [ + -117.675355, + 33.674757 + ], + [ + -117.675336, + 33.674769 + ], + [ + -117.675325, + 33.674786 + ], + [ + -117.67532, + 33.674802 + ], + [ + -117.675321, + 33.674815 + ], + [ + -117.675307, + 33.67482 + ], + [ + -117.675283, + 33.67482 + ], + [ + -117.675254, + 33.67481 + ], + [ + -117.675234, + 33.674796 + ], + [ + -117.675229, + 33.674781 + ], + [ + -117.675222, + 33.674763 + ], + [ + -117.675203, + 33.674745 + ], + [ + -117.675185, + 33.674727 + ], + [ + -117.675183, + 33.674701 + ], + [ + -117.675189, + 33.674681 + ], + [ + -117.675212, + 33.674661 + ], + [ + -117.675228, + 33.67465 + ], + [ + -117.675234, + 33.674641 + ], + [ + -117.675239, + 33.674627 + ], + [ + -117.675243, + 33.674603 + ], + [ + -117.675246, + 33.674599 + ], + [ + -117.675254, + 33.674602 + ], + [ + -117.67527, + 33.674601 + ], + [ + -117.675284, + 33.674594 + ], + [ + -117.675289, + 33.674585 + ], + [ + -117.67529, + 33.674571 + ], + [ + -117.675284, + 33.674562 + ], + [ + -117.675271, + 33.674554 + ], + [ + -117.67526, + 33.674543 + ], + [ + -117.675255, + 33.674532 + ], + [ + -117.675252, + 33.674521 + ], + [ + -117.675257, + 33.674505 + ], + [ + -117.675268, + 33.674493 + ], + [ + -117.67528, + 33.674486 + ], + [ + -117.675291, + 33.674482 + ], + [ + -117.675307, + 33.674482 + ], + [ + -117.675315, + 33.674484 + ], + [ + -117.675325, + 33.674487 + ], + [ + -117.675332, + 33.674492 + ], + [ + -117.675351, + 33.674499 + ], + [ + -117.675389, + 33.674513 + ], + [ + -117.675408, + 33.674521 + ], + [ + -117.675428, + 33.674534 + ], + [ + -117.675446, + 33.674552 + ], + [ + -117.675457, + 33.674566 + ], + [ + -117.675461, + 33.674574 + ], + [ + -117.675467, + 33.674583 + ], + [ + -117.675482, + 33.674611 + ], + [ + -117.675511, + 33.674599 + ], + [ + -117.675532, + 33.674611 + ], + [ + -117.675546, + 33.674629 + ], + [ + -117.675551, + 33.674646 + ], + [ + -117.675549, + 33.674664 + ], + [ + -117.675543, + 33.674683 + ], + [ + -117.675532, + 33.674696 + ], + [ + -117.675518, + 33.674704 + ], + [ + -117.675511, + 33.674707 + ], + [ + -117.675503, + 33.674702 + ], + [ + -117.675489, + 33.674703 + ], + [ + -117.675479, + 33.674711 + ], + [ + -117.675474, + 33.674723 + ], + [ + -117.67547, + 33.674736 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 590895403, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.739042, + 33.6757 + ], + [ + -117.738992, + 33.675841 + ], + [ + -117.738928, + 33.67584 + ], + [ + -117.738876, + 33.675943 + ], + [ + -117.738738, + 33.675946 + ], + [ + -117.7387, + 33.676031 + ], + [ + -117.738571, + 33.676056 + ], + [ + -117.738471, + 33.676336 + ], + [ + -117.738369, + 33.676368 + ], + [ + -117.738343, + 33.676414 + ], + [ + -117.738198, + 33.676439 + ], + [ + -117.738171, + 33.67635 + ], + [ + -117.738253, + 33.676297 + ], + [ + -117.738265, + 33.676136 + ], + [ + -117.738333, + 33.676081 + ], + [ + -117.738375, + 33.675951 + ], + [ + -117.738539, + 33.675962 + ], + [ + -117.738678, + 33.675883 + ], + [ + -117.738771, + 33.675752 + ], + [ + -117.738822, + 33.675758 + ], + [ + -117.738927, + 33.675661 + ], + [ + -117.739042, + 33.6757 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 590895413, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.737566, + 33.67662 + ], + [ + -117.737366, + 33.676621 + ], + [ + -117.737364, + 33.676287 + ], + [ + -117.737564, + 33.676286 + ], + [ + -117.737566, + 33.67662 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 591098535, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.741461, + 33.675719 + ], + [ + -117.740858, + 33.675298 + ], + [ + -117.741501, + 33.67466 + ], + [ + -117.742104, + 33.675081 + ], + [ + -117.741461, + 33.675719 + ] + ] + ] + }, + "properties": { + "name": "Farm + Food Lab", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 591260524, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.746502, + 33.674402 + ], + [ + -117.746473, + 33.674427 + ], + [ + -117.746385, + 33.674456 + ], + [ + -117.746259, + 33.674499 + ], + [ + -117.746086, + 33.674544 + ], + [ + -117.74598, + 33.674563 + ], + [ + -117.745829, + 33.674586 + ], + [ + -117.745819, + 33.674541 + ], + [ + -117.745714, + 33.674551 + ], + [ + -117.745719, + 33.674596 + ], + [ + -117.745591, + 33.674608 + ], + [ + -117.74542, + 33.674608 + ], + [ + -117.745422, + 33.674563 + ], + [ + -117.745313, + 33.674559 + ], + [ + -117.745311, + 33.674602 + ], + [ + -117.745243, + 33.674598 + ], + [ + -117.745247, + 33.674553 + ], + [ + -117.745144, + 33.674541 + ], + [ + -117.745136, + 33.674585 + ], + [ + -117.745013, + 33.674569 + ], + [ + -117.744903, + 33.674548 + ], + [ + -117.744758, + 33.674513 + ], + [ + -117.744686, + 33.674465 + ], + [ + -117.744574, + 33.674392 + ], + [ + -117.744454, + 33.674336 + ], + [ + -117.744289, + 33.674285 + ], + [ + -117.744206, + 33.674258 + ], + [ + -117.744107, + 33.674205 + ], + [ + -117.744037, + 33.674161 + ], + [ + -117.743973, + 33.674105 + ], + [ + -117.74391, + 33.674037 + ], + [ + -117.743872, + 33.673979 + ], + [ + -117.743831, + 33.673895 + ], + [ + -117.7438, + 33.673807 + ], + [ + -117.743788, + 33.673762 + ], + [ + -117.743787, + 33.673488 + ], + [ + -117.746458, + 33.673482 + ], + [ + -117.746458, + 33.673706 + ], + [ + -117.746459, + 33.673742 + ], + [ + -117.746459, + 33.673941 + ], + [ + -117.746461, + 33.67398 + ], + [ + -117.746465, + 33.674369 + ], + [ + -117.746502, + 33.674402 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 591289659, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.735265, + 33.675986 + ], + [ + -117.735227, + 33.675955 + ], + [ + -117.735225, + 33.675683 + ], + [ + -117.735261, + 33.675651 + ], + [ + -117.737982, + 33.675645 + ], + [ + -117.738017, + 33.675674 + ], + [ + -117.738017, + 33.675952 + ], + [ + -117.737984, + 33.675979 + ], + [ + -117.735265, + 33.675986 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 591289663, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.743228, + 33.674617 + ], + [ + -117.743119, + 33.674726 + ], + [ + -117.742695, + 33.674431 + ], + [ + -117.742804, + 33.674323 + ], + [ + -117.743228, + 33.674617 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 591294569, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.72593, + 33.689679 + ], + [ + -117.725869, + 33.689644 + ], + [ + -117.725815, + 33.689625 + ], + [ + -117.725761, + 33.689594 + ], + [ + -117.725634, + 33.689567 + ], + [ + -117.725501, + 33.68947 + ], + [ + -117.725178, + 33.689229 + ], + [ + -117.72457, + 33.68879 + ], + [ + -117.725668, + 33.687799 + ], + [ + -117.726027, + 33.687519 + ], + [ + -117.726865, + 33.686923 + ], + [ + -117.727706, + 33.686416 + ], + [ + -117.727927, + 33.686243 + ], + [ + -117.728113, + 33.686044 + ], + [ + -117.728551, + 33.685601 + ], + [ + -117.728837, + 33.685213 + ], + [ + -117.729026, + 33.68486 + ], + [ + -117.729174, + 33.684469 + ], + [ + -117.729243, + 33.684054 + ], + [ + -117.729254, + 33.683633 + ], + [ + -117.729251, + 33.68317 + ], + [ + -117.729287, + 33.682203 + ], + [ + -117.72836, + 33.68208 + ], + [ + -117.727782, + 33.681982 + ], + [ + -117.727853, + 33.68173 + ], + [ + -117.728694, + 33.681729 + ], + [ + -117.728951, + 33.681593 + ], + [ + -117.729071, + 33.681558 + ], + [ + -117.729187, + 33.681557 + ], + [ + -117.729317, + 33.681575 + ], + [ + -117.72945, + 33.681616 + ], + [ + -117.729729, + 33.681407 + ], + [ + -117.730005, + 33.681661 + ], + [ + -117.730199, + 33.681789 + ], + [ + -117.73044, + 33.681831 + ], + [ + -117.730709, + 33.681804 + ], + [ + -117.730865, + 33.681798 + ], + [ + -117.731022, + 33.681816 + ], + [ + -117.732238, + 33.680461 + ], + [ + -117.733005, + 33.679975 + ], + [ + -117.733571, + 33.678811 + ], + [ + -117.733779, + 33.679079 + ], + [ + -117.73412, + 33.67938 + ], + [ + -117.73439, + 33.67963 + ], + [ + -117.734456, + 33.679761 + ], + [ + -117.73448, + 33.679892 + ], + [ + -117.734473, + 33.680002 + ], + [ + -117.734989, + 33.679935 + ], + [ + -117.733383, + 33.681587 + ], + [ + -117.7331, + 33.681829 + ], + [ + -117.732749, + 33.682008 + ], + [ + -117.732484, + 33.682173 + ], + [ + -117.732414, + 33.682277 + ], + [ + -117.732326, + 33.682359 + ], + [ + -117.73218, + 33.682445 + ], + [ + -117.732091, + 33.68247 + ], + [ + -117.732008, + 33.682472 + ], + [ + -117.73191, + 33.682652 + ], + [ + -117.731929, + 33.682704 + ], + [ + -117.731921, + 33.682764 + ], + [ + -117.731832, + 33.683028 + ], + [ + -117.731611, + 33.683379 + ], + [ + -117.731187, + 33.683926 + ], + [ + -117.731003, + 33.684269 + ], + [ + -117.730864, + 33.684647 + ], + [ + -117.730776, + 33.684924 + ], + [ + -117.730683, + 33.685194 + ], + [ + -117.730586, + 33.685438 + ], + [ + -117.730464, + 33.685681 + ], + [ + -117.730198, + 33.686135 + ], + [ + -117.72994, + 33.686441 + ], + [ + -117.729714, + 33.686706 + ], + [ + -117.729554, + 33.686891 + ], + [ + -117.729402, + 33.687015 + ], + [ + -117.729056, + 33.687292 + ], + [ + -117.728723, + 33.687521 + ], + [ + -117.728391, + 33.687717 + ], + [ + -117.727762, + 33.688092 + ], + [ + -117.727127, + 33.688533 + ], + [ + -117.726501, + 33.689101 + ], + [ + -117.726108, + 33.689494 + ], + [ + -117.72593, + 33.689679 + ] + ] + ] + }, + "properties": { + "name": "Bosque Canyon", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 591294576, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.724838, + 33.683779 + ], + [ + -117.724637, + 33.683836 + ], + [ + -117.724405, + 33.683891 + ], + [ + -117.724141, + 33.683924 + ], + [ + -117.723824, + 33.683926 + ], + [ + -117.723457, + 33.683901 + ], + [ + -117.723184, + 33.683869 + ], + [ + -117.722925, + 33.683812 + ], + [ + -117.72264, + 33.683714 + ], + [ + -117.722392, + 33.6836 + ], + [ + -117.722171, + 33.683469 + ], + [ + -117.722005, + 33.683347 + ], + [ + -117.721968, + 33.683329 + ], + [ + -117.721936, + 33.683299 + ], + [ + -117.721926, + 33.683268 + ], + [ + -117.721934, + 33.683236 + ], + [ + -117.721957, + 33.683211 + ], + [ + -117.721991, + 33.683192 + ], + [ + -117.722179, + 33.682978 + ], + [ + -117.722279, + 33.682836 + ], + [ + -117.72249, + 33.682414 + ], + [ + -117.722494, + 33.682378 + ], + [ + -117.722511, + 33.682344 + ], + [ + -117.722535, + 33.682323 + ], + [ + -117.722585, + 33.682313 + ], + [ + -117.722627, + 33.682322 + ], + [ + -117.722671, + 33.68235 + ], + [ + -117.722984, + 33.682456 + ], + [ + -117.723319, + 33.682574 + ], + [ + -117.723562, + 33.682672 + ], + [ + -117.723792, + 33.682781 + ], + [ + -117.724021, + 33.68291 + ], + [ + -117.724276, + 33.683078 + ], + [ + -117.724539, + 33.683283 + ], + [ + -117.724707, + 33.683438 + ], + [ + -117.724848, + 33.683587 + ], + [ + -117.724885, + 33.683627 + ], + [ + -117.724916, + 33.683647 + ], + [ + -117.724938, + 33.683679 + ], + [ + -117.724945, + 33.683714 + ], + [ + -117.724927, + 33.683741 + ], + [ + -117.724894, + 33.683764 + ], + [ + -117.724838, + 33.683779 + ] + ] + ] + }, + "properties": { + "name": "Cadence Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 591301723, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.707836, + 33.690957 + ], + [ + -117.706957, + 33.689507 + ], + [ + -117.706343, + 33.689765 + ], + [ + -117.707221, + 33.691215 + ], + [ + -117.707836, + 33.690957 + ] + ] + ] + }, + "properties": { + "name": "Plateau Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 591922869, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921786, + 33.808803 + ], + [ + -117.92182, + 33.808847 + ], + [ + -117.921849, + 33.808884 + ], + [ + -117.921871, + 33.808922 + ], + [ + -117.921882, + 33.808945 + ], + [ + -117.921892, + 33.808945 + ], + [ + -117.921911, + 33.808948 + ], + [ + -117.921933, + 33.808956 + ], + [ + -117.921947, + 33.808967 + ], + [ + -117.921953, + 33.808986 + ], + [ + -117.921953, + 33.808996 + ], + [ + -117.921949, + 33.809002 + ], + [ + -117.921904, + 33.808986 + ], + [ + -117.921871, + 33.80897 + ], + [ + -117.92186, + 33.808951 + ], + [ + -117.921847, + 33.808917 + ], + [ + -117.921832, + 33.808884 + ], + [ + -117.921808, + 33.808852 + ], + [ + -117.921774, + 33.80881 + ], + [ + -117.921779, + 33.808794 + ], + [ + -117.921781, + 33.808793 + ], + [ + -117.921801, + 33.808784 + ], + [ + -117.921801, + 33.808768 + ], + [ + -117.921814, + 33.808752 + ], + [ + -117.921831, + 33.80874 + ], + [ + -117.921841, + 33.808733 + ], + [ + -117.921853, + 33.808726 + ], + [ + -117.921849, + 33.808716 + ], + [ + -117.921871, + 33.808716 + ], + [ + -117.92189, + 33.808716 + ], + [ + -117.921918, + 33.808714 + ], + [ + -117.921954, + 33.808722 + ], + [ + -117.922032, + 33.808721 + ], + [ + -117.922065, + 33.808723 + ], + [ + -117.922071, + 33.808729 + ], + [ + -117.922069, + 33.808735 + ], + [ + -117.922049, + 33.808744 + ], + [ + -117.922033, + 33.80875 + ], + [ + -117.922004, + 33.808755 + ], + [ + -117.921976, + 33.80875 + ], + [ + -117.921955, + 33.808743 + ], + [ + -117.921921, + 33.808727 + ], + [ + -117.921872, + 33.808729 + ], + [ + -117.921847, + 33.80876 + ], + [ + -117.921829, + 33.808777 + ], + [ + -117.921808, + 33.808786 + ], + [ + -117.921786, + 33.808803 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 593548585, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.749991, + 33.713948 + ], + [ + -117.74974, + 33.713809 + ], + [ + -117.749696, + 33.713812 + ], + [ + -117.749197, + 33.714331 + ], + [ + -117.748686, + 33.714845 + ], + [ + -117.748143, + 33.715388 + ], + [ + -117.747546, + 33.715986 + ], + [ + -117.747556, + 33.716026 + ], + [ + -117.747772, + 33.716176 + ], + [ + -117.748576, + 33.715367 + ], + [ + -117.749991, + 33.713948 + ] + ] + ] + }, + "properties": { + "name": "Grand Trellis Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 593548586, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.751391, + 33.712384 + ], + [ + -117.750817, + 33.711986 + ], + [ + -117.750796, + 33.711979 + ], + [ + -117.750774, + 33.711979 + ], + [ + -117.750752, + 33.711982 + ], + [ + -117.750734, + 33.711991 + ], + [ + -117.750507, + 33.712216 + ], + [ + -117.750395, + 33.712329 + ], + [ + -117.750298, + 33.712441 + ], + [ + -117.7502, + 33.712583 + ], + [ + -117.75012, + 33.712746 + ], + [ + -117.750064, + 33.712922 + ], + [ + -117.750027, + 33.713073 + ], + [ + -117.749992, + 33.713216 + ], + [ + -117.749954, + 33.713344 + ], + [ + -117.749905, + 33.713469 + ], + [ + -117.749834, + 33.713604 + ], + [ + -117.749849, + 33.713641 + ], + [ + -117.749965, + 33.7137 + ], + [ + -117.750091, + 33.713773 + ], + [ + -117.750188, + 33.713587 + ], + [ + -117.751391, + 33.712384 + ] + ] + ] + }, + "properties": { + "name": "Eucalyptus Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 593548587, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.750296, + 33.71657 + ], + [ + -117.748576, + 33.715367 + ], + [ + -117.747772, + 33.716176 + ], + [ + -117.749428, + 33.717323 + ], + [ + -117.749444, + 33.717327 + ], + [ + -117.749459, + 33.717321 + ], + [ + -117.750296, + 33.71657 + ] + ] + ] + }, + "properties": { + "name": "Eastwood Neighborhood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 594703165, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.653575, + 33.625847 + ], + [ + -117.653566, + 33.625831 + ], + [ + -117.653563, + 33.625811 + ], + [ + -117.653565, + 33.625797 + ], + [ + -117.65357, + 33.625785 + ], + [ + -117.653579, + 33.625771 + ], + [ + -117.653587, + 33.625763 + ], + [ + -117.653597, + 33.625754 + ], + [ + -117.6536, + 33.625753 + ], + [ + -117.653599, + 33.625745 + ], + [ + -117.65359, + 33.625737 + ], + [ + -117.653578, + 33.625726 + ], + [ + -117.653569, + 33.625713 + ], + [ + -117.653554, + 33.625683 + ], + [ + -117.653538, + 33.625657 + ], + [ + -117.653526, + 33.625626 + ], + [ + -117.65352, + 33.625597 + ], + [ + -117.65352, + 33.625581 + ], + [ + -117.653509, + 33.62558 + ], + [ + -117.653477, + 33.625577 + ], + [ + -117.653417, + 33.625582 + ], + [ + -117.653382, + 33.625593 + ], + [ + -117.653343, + 33.625611 + ], + [ + -117.653304, + 33.625635 + ], + [ + -117.653274, + 33.625667 + ], + [ + -117.653252, + 33.625704 + ], + [ + -117.653241, + 33.625734 + ], + [ + -117.653239, + 33.62577 + ], + [ + -117.653239, + 33.625812 + ], + [ + -117.653247, + 33.625832 + ], + [ + -117.653264, + 33.625865 + ], + [ + -117.653284, + 33.625878 + ], + [ + -117.653318, + 33.625887 + ], + [ + -117.65334, + 33.625896 + ], + [ + -117.653362, + 33.6259 + ], + [ + -117.653368, + 33.625903 + ], + [ + -117.653371, + 33.625917 + ], + [ + -117.653418, + 33.625917 + ], + [ + -117.65342, + 33.625906 + ], + [ + -117.653426, + 33.625902 + ], + [ + -117.653437, + 33.625901 + ], + [ + -117.653462, + 33.625895 + ], + [ + -117.653474, + 33.625893 + ], + [ + -117.653501, + 33.625885 + ], + [ + -117.653536, + 33.62586 + ], + [ + -117.653545, + 33.625852 + ], + [ + -117.65356, + 33.625847 + ], + [ + -117.653575, + 33.625847 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 594783424, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.884958, + 33.748399 + ], + [ + -117.884796, + 33.748404 + ], + [ + -117.884791, + 33.748064 + ], + [ + -117.884882, + 33.74806 + ], + [ + -117.884944, + 33.748101 + ], + [ + -117.884958, + 33.748399 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 598414152, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.005451, + 33.734357 + ], + [ + -118.005446, + 33.733568 + ], + [ + -118.004893, + 33.733572 + ], + [ + -118.004893, + 33.733925 + ], + [ + -118.005065, + 33.73392 + ], + [ + -118.00507, + 33.734357 + ], + [ + -118.005451, + 33.734357 + ] + ] + ] + }, + "properties": { + "name": "California Native Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 600827489, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.829341, + 33.610867 + ], + [ + -117.829314, + 33.610875 + ], + [ + -117.829293, + 33.610891 + ], + [ + -117.829279, + 33.610911 + ], + [ + -117.829275, + 33.610934 + ], + [ + -117.82928, + 33.610957 + ], + [ + -117.829295, + 33.610977 + ], + [ + -117.829316, + 33.610992 + ], + [ + -117.829343, + 33.611 + ], + [ + -117.829371, + 33.610999 + ], + [ + -117.829397, + 33.610991 + ], + [ + -117.829419, + 33.610976 + ], + [ + -117.829432, + 33.610956 + ], + [ + -117.829437, + 33.610932 + ], + [ + -117.829431, + 33.610909 + ], + [ + -117.829417, + 33.610889 + ], + [ + -117.829395, + 33.610875 + ], + [ + -117.829369, + 33.610867 + ], + [ + -117.829341, + 33.610867 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 601164680, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.624212, + 33.637441 + ], + [ + -117.6238, + 33.637644 + ], + [ + -117.623464, + 33.63737 + ], + [ + -117.623228, + 33.63723 + ], + [ + -117.622957, + 33.637113 + ], + [ + -117.622463, + 33.636968 + ], + [ + -117.622228, + 33.636887 + ], + [ + -117.622188, + 33.636855 + ], + [ + -117.622188, + 33.636813 + ], + [ + -117.622212, + 33.636742 + ], + [ + -117.622335, + 33.636541 + ], + [ + -117.622574, + 33.636654 + ], + [ + -117.622857, + 33.636299 + ], + [ + -117.622976, + 33.636255 + ], + [ + -117.623266, + 33.636255 + ], + [ + -117.623407, + 33.636155 + ], + [ + -117.623489, + 33.635928 + ], + [ + -117.623553, + 33.635938 + ], + [ + -117.623808, + 33.636066 + ], + [ + -117.624159, + 33.636003 + ], + [ + -117.624241, + 33.636355 + ], + [ + -117.62434, + 33.636746 + ], + [ + -117.624358, + 33.637136 + ], + [ + -117.624212, + 33.637441 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 601165348, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.620033, + 33.647945 + ], + [ + -117.619811, + 33.647984 + ], + [ + -117.619759, + 33.64805 + ], + [ + -117.619782, + 33.648218 + ], + [ + -117.619872, + 33.648767 + ], + [ + -117.620212, + 33.648772 + ], + [ + -117.62053, + 33.648718 + ], + [ + -117.620644, + 33.648525 + ], + [ + -117.620712, + 33.648213 + ], + [ + -117.620725, + 33.647887 + ], + [ + -117.620033, + 33.647945 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 602848008, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.019813, + 33.833698 + ], + [ + -118.020261, + 33.833701 + ], + [ + -118.0202, + 33.833652 + ], + [ + -118.020169, + 33.83361 + ], + [ + -118.020168, + 33.833553 + ], + [ + -118.020091, + 33.83355 + ], + [ + -118.02009, + 33.833605 + ], + [ + -118.019809, + 33.833605 + ], + [ + -118.019813, + 33.833698 + ] + ] + ] + }, + "properties": { + "name": "Hampton Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 607807027, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.895977, + 33.805118 + ], + [ + -117.895952, + 33.805096 + ], + [ + -117.895952, + 33.804813 + ], + [ + -117.89648, + 33.804812 + ], + [ + -117.89648, + 33.805116 + ], + [ + -117.896441, + 33.805116 + ], + [ + -117.896276, + 33.805117 + ], + [ + -117.895977, + 33.805118 + ] + ] + ] + }, + "properties": { + "name": "Coral Tree Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 610284965, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.712304, + 33.689003 + ], + [ + -117.712301, + 33.688957 + ], + [ + -117.712209, + 33.68889 + ], + [ + -117.712158, + 33.688893 + ], + [ + -117.711952, + 33.689094 + ], + [ + -117.711954, + 33.689133 + ], + [ + -117.712057, + 33.689206 + ], + [ + -117.712105, + 33.689205 + ], + [ + -117.712304, + 33.689003 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 610284967, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.712378, + 33.688649 + ], + [ + -117.712246, + 33.688558 + ], + [ + -117.712121, + 33.688683 + ], + [ + -117.712252, + 33.688774 + ], + [ + -117.712378, + 33.688649 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 610284969, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.711541, + 33.688547 + ], + [ + -117.711551, + 33.688542 + ], + [ + -117.711565, + 33.688542 + ], + [ + -117.71159, + 33.688497 + ], + [ + -117.711577, + 33.688485 + ], + [ + -117.711568, + 33.688469 + ], + [ + -117.711551, + 33.688454 + ], + [ + -117.711547, + 33.688447 + ], + [ + -117.711549, + 33.688435 + ], + [ + -117.711556, + 33.688431 + ], + [ + -117.711567, + 33.688431 + ], + [ + -117.711578, + 33.688432 + ], + [ + -117.711595, + 33.688442 + ], + [ + -117.711604, + 33.688444 + ], + [ + -117.711614, + 33.688443 + ], + [ + -117.711641, + 33.688432 + ], + [ + -117.711647, + 33.688432 + ], + [ + -117.711655, + 33.688436 + ], + [ + -117.711709, + 33.688405 + ], + [ + -117.711702, + 33.688398 + ], + [ + -117.711698, + 33.688373 + ], + [ + -117.711685, + 33.688357 + ], + [ + -117.711672, + 33.688343 + ], + [ + -117.711675, + 33.688328 + ], + [ + -117.711636, + 33.688299 + ], + [ + -117.711616, + 33.688313 + ], + [ + -117.711589, + 33.688322 + ], + [ + -117.711554, + 33.688321 + ], + [ + -117.711532, + 33.68831 + ], + [ + -117.711507, + 33.6883 + ], + [ + -117.711483, + 33.688296 + ], + [ + -117.711466, + 33.688303 + ], + [ + -117.711454, + 33.688315 + ], + [ + -117.711449, + 33.688336 + ], + [ + -117.711452, + 33.688352 + ], + [ + -117.711449, + 33.688367 + ], + [ + -117.711431, + 33.688373 + ], + [ + -117.711409, + 33.688376 + ], + [ + -117.711377, + 33.688385 + ], + [ + -117.711358, + 33.688397 + ], + [ + -117.711346, + 33.688416 + ], + [ + -117.711343, + 33.688439 + ], + [ + -117.711353, + 33.688457 + ], + [ + -117.711366, + 33.688465 + ], + [ + -117.711377, + 33.688478 + ], + [ + -117.711379, + 33.688486 + ], + [ + -117.711373, + 33.688495 + ], + [ + -117.711496, + 33.688582 + ], + [ + -117.711504, + 33.688572 + ], + [ + -117.711517, + 33.688569 + ], + [ + -117.71153, + 33.68856 + ], + [ + -117.711541, + 33.688547 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 613929970, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921681, + 33.807883 + ], + [ + -117.921655, + 33.807772 + ], + [ + -117.92173, + 33.807761 + ], + [ + -117.921751, + 33.807743 + ], + [ + -117.921812, + 33.807758 + ], + [ + -117.921831, + 33.807784 + ], + [ + -117.921831, + 33.807814 + ], + [ + -117.921826, + 33.80783 + ], + [ + -117.921816, + 33.807843 + ], + [ + -117.921774, + 33.807851 + ], + [ + -117.921731, + 33.807865 + ], + [ + -117.921681, + 33.807883 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 615641397, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.001365, + 33.737196 + ], + [ + -118.000837, + 33.737202 + ], + [ + -118.000831, + 33.736812 + ], + [ + -118.001357, + 33.736807 + ], + [ + -118.001365, + 33.737196 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 615641424, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.003273, + 33.737194 + ], + [ + -118.002423, + 33.737209 + ], + [ + -118.002437, + 33.736108 + ], + [ + -118.00328, + 33.736103 + ], + [ + -118.003273, + 33.737194 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 619034067, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.921147, + 33.813673 + ], + [ + -117.921118, + 33.813684 + ], + [ + -117.921082, + 33.813701 + ], + [ + -117.921065, + 33.813713 + ], + [ + -117.921065, + 33.81376 + ], + [ + -117.921001, + 33.813754 + ], + [ + -117.920925, + 33.813758 + ], + [ + -117.920928, + 33.813676 + ], + [ + -117.920916, + 33.813676 + ], + [ + -117.920924, + 33.813648 + ], + [ + -117.920922, + 33.813612 + ], + [ + -117.920907, + 33.81359 + ], + [ + -117.92085, + 33.813587 + ], + [ + -117.920816, + 33.813594 + ], + [ + -117.92081, + 33.813601 + ], + [ + -117.920789, + 33.813626 + ], + [ + -117.920784, + 33.813632 + ], + [ + -117.92075, + 33.813634 + ], + [ + -117.920714, + 33.813638 + ], + [ + -117.920636, + 33.813652 + ], + [ + -117.920608, + 33.813661 + ], + [ + -117.920593, + 33.813666 + ], + [ + -117.920538, + 33.813688 + ], + [ + -117.920459, + 33.813742 + ], + [ + -117.920397, + 33.813775 + ], + [ + -117.920344, + 33.813809 + ], + [ + -117.920242, + 33.813886 + ], + [ + -117.920226, + 33.813862 + ], + [ + -117.920164, + 33.81388 + ], + [ + -117.920157, + 33.813932 + ], + [ + -117.920137, + 33.813975 + ], + [ + -117.920116, + 33.814019 + ], + [ + -117.920191, + 33.814045 + ], + [ + -117.920309, + 33.814089 + ], + [ + -117.920326, + 33.81404 + ], + [ + -117.92034, + 33.813997 + ], + [ + -117.920362, + 33.813963 + ], + [ + -117.920435, + 33.813913 + ], + [ + -117.920584, + 33.813857 + ], + [ + -117.920792, + 33.813854 + ], + [ + -117.920923, + 33.813882 + ], + [ + -117.920994, + 33.813883 + ], + [ + -117.921065, + 33.813884 + ], + [ + -117.921149, + 33.813761 + ], + [ + -117.921245, + 33.813788 + ], + [ + -117.921258, + 33.813761 + ], + [ + -117.92177, + 33.813932 + ], + [ + -117.921759, + 33.813817 + ], + [ + -117.92168, + 33.813813 + ], + [ + -117.921531, + 33.813775 + ], + [ + -117.921335, + 33.813705 + ], + [ + -117.921147, + 33.813673 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 619128504, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.023484, + 33.815698 + ], + [ + -118.023493, + 33.816385 + ], + [ + -118.023338, + 33.816386 + ], + [ + -118.02317, + 33.816446 + ], + [ + -118.023159, + 33.815703 + ], + [ + -118.023484, + 33.815698 + ] + ] + ] + }, + "properties": { + "name": "The Covey Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 619877517, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.000197, + 33.844179 + ], + [ + -118.00018, + 33.844179 + ], + [ + -118.000181, + 33.844227 + ], + [ + -118.000198, + 33.844226 + ], + [ + -118.000197, + 33.844179 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 622930229, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.993268, + 33.795132 + ], + [ + -117.99327, + 33.79521 + ], + [ + -117.993249, + 33.795209 + ], + [ + -117.993246, + 33.795485 + ], + [ + -117.99328, + 33.795523 + ], + [ + -117.993305, + 33.795536 + ], + [ + -117.99348, + 33.795541 + ], + [ + -117.99347, + 33.795209 + ], + [ + -117.993371, + 33.795209 + ], + [ + -117.993335, + 33.795203 + ], + [ + -117.993296, + 33.795172 + ], + [ + -117.993268, + 33.795132 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 623172286, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.789959, + 33.900178 + ], + [ + -117.789896, + 33.900191 + ], + [ + -117.789032, + 33.900219 + ], + [ + -117.78898, + 33.900236 + ], + [ + -117.788898, + 33.900142 + ], + [ + -117.78887, + 33.900069 + ], + [ + -117.788877, + 33.899964 + ], + [ + -117.788958, + 33.899779 + ], + [ + -117.788983, + 33.899744 + ], + [ + -117.789026, + 33.899723 + ], + [ + -117.789084, + 33.899717 + ], + [ + -117.789135, + 33.899732 + ], + [ + -117.789889, + 33.899981 + ], + [ + -117.789962, + 33.900009 + ], + [ + -117.790005, + 33.900055 + ], + [ + -117.79001, + 33.900103 + ], + [ + -117.789994, + 33.900153 + ], + [ + -117.789959, + 33.900178 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 623961492, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.99866, + 33.88743 + ], + [ + -117.99854, + 33.887215 + ], + [ + -117.99838, + 33.887291 + ], + [ + -117.998489, + 33.887484 + ], + [ + -117.99866, + 33.88743 + ] + ] + ] + }, + "properties": { + "name": "McComber Place Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 625031945, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.0098, + 33.844139 + ], + [ + -118.009801, + 33.844269 + ], + [ + -118.00958, + 33.844246 + ], + [ + -118.009545, + 33.84431 + ], + [ + -118.009911, + 33.844382 + ], + [ + -118.010421, + 33.844401 + ], + [ + -118.010413, + 33.844135 + ], + [ + -118.0098, + 33.844139 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 625031987, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.013382, + 33.830905 + ], + [ + -118.013388, + 33.831035 + ], + [ + -118.01313, + 33.831038 + ], + [ + -118.013132, + 33.830904 + ], + [ + -118.013382, + 33.830905 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 625031988, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.013164, + 33.830943 + ], + [ + -118.013153, + 33.830953 + ], + [ + -118.013145, + 33.830966 + ], + [ + -118.013143, + 33.83098 + ], + [ + -118.013146, + 33.830994 + ], + [ + -118.013154, + 33.831006 + ], + [ + -118.013166, + 33.831016 + ], + [ + -118.013181, + 33.831022 + ], + [ + -118.013198, + 33.831024 + ], + [ + -118.013216, + 33.831021 + ], + [ + -118.013232, + 33.831013 + ], + [ + -118.013244, + 33.831001 + ], + [ + -118.01325, + 33.830986 + ], + [ + -118.01325, + 33.83097 + ], + [ + -118.013243, + 33.830956 + ], + [ + -118.013231, + 33.830944 + ], + [ + -118.013215, + 33.830937 + ], + [ + -118.013196, + 33.830934 + ], + [ + -118.01318, + 33.830936 + ], + [ + -118.013164, + 33.830943 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 625044385, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.030146, + 33.811679 + ], + [ + -118.030241, + 33.811679 + ], + [ + -118.030368, + 33.811678 + ], + [ + -118.030354, + 33.811207 + ], + [ + -118.030336, + 33.811201 + ], + [ + -118.030182, + 33.811153 + ], + [ + -118.030203, + 33.811404 + ], + [ + -118.03015, + 33.811433 + ], + [ + -118.030146, + 33.811679 + ] + ] + ] + }, + "properties": { + "name": "Laurel Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 630496955, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.719069, + 33.875785 + ], + [ + -117.719096, + 33.875837 + ], + [ + -117.719114, + 33.875835 + ], + [ + -117.719122, + 33.875838 + ], + [ + -117.719137, + 33.87585 + ], + [ + -117.71918, + 33.875845 + ], + [ + -117.719196, + 33.875865 + ], + [ + -117.719229, + 33.875861 + ], + [ + -117.71919, + 33.875792 + ], + [ + -117.71918, + 33.875768 + ], + [ + -117.719175, + 33.875763 + ], + [ + -117.719069, + 33.875785 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 633102740, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.78164, + 33.743008 + ], + [ + -117.78157, + 33.742939 + ], + [ + -117.781502, + 33.742841 + ], + [ + -117.78143, + 33.742706 + ], + [ + -117.781372, + 33.742556 + ], + [ + -117.781349, + 33.742435 + ], + [ + -117.78133, + 33.742365 + ], + [ + -117.781228, + 33.742283 + ], + [ + -117.781102, + 33.742298 + ], + [ + -117.780948, + 33.742337 + ], + [ + -117.780784, + 33.742414 + ], + [ + -117.78062, + 33.742528 + ], + [ + -117.780461, + 33.742696 + ], + [ + -117.780281, + 33.742916 + ], + [ + -117.780083, + 33.743108 + ], + [ + -117.779977, + 33.743187 + ], + [ + -117.779964, + 33.743206 + ], + [ + -117.780696, + 33.743112 + ], + [ + -117.780797, + 33.743127 + ], + [ + -117.78164, + 33.743008 + ] + ] + ] + }, + "properties": { + "name": "Gallery Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 635444642, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.853409, + 33.852429 + ], + [ + -117.853387, + 33.852427 + ], + [ + -117.853367, + 33.852435 + ], + [ + -117.853348, + 33.852441 + ], + [ + -117.853319, + 33.852449 + ], + [ + -117.853284, + 33.852456 + ], + [ + -117.853247, + 33.852459 + ], + [ + -117.853218, + 33.852458 + ], + [ + -117.853209, + 33.852435 + ], + [ + -117.853241, + 33.852437 + ], + [ + -117.853277, + 33.852436 + ], + [ + -117.853354, + 33.852416 + ], + [ + -117.853383, + 33.852405 + ], + [ + -117.853399, + 33.852391 + ], + [ + -117.853409, + 33.852375 + ], + [ + -117.853415, + 33.852353 + ], + [ + -117.853415, + 33.852329 + ], + [ + -117.853406, + 33.8523 + ], + [ + -117.853439, + 33.852291 + ], + [ + -117.853447, + 33.852312 + ], + [ + -117.85345, + 33.852325 + ], + [ + -117.853453, + 33.852344 + ], + [ + -117.85345, + 33.852369 + ], + [ + -117.85344, + 33.852396 + ], + [ + -117.853422, + 33.852418 + ], + [ + -117.853409, + 33.852429 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 635444643, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.853406, + 33.8523 + ], + [ + -117.853218, + 33.852346 + ], + [ + -117.853202, + 33.852369 + ], + [ + -117.853202, + 33.852417 + ], + [ + -117.853209, + 33.852435 + ], + [ + -117.853241, + 33.852437 + ], + [ + -117.853277, + 33.852436 + ], + [ + -117.853354, + 33.852416 + ], + [ + -117.853383, + 33.852405 + ], + [ + -117.853399, + 33.852391 + ], + [ + -117.853409, + 33.852375 + ], + [ + -117.853415, + 33.852353 + ], + [ + -117.853415, + 33.852329 + ], + [ + -117.853406, + 33.8523 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 636983525, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.830256, + 33.800055 + ], + [ + -117.830259, + 33.800048 + ], + [ + -117.830259, + 33.799921 + ], + [ + -117.830344, + 33.799921 + ], + [ + -117.83035, + 33.799583 + ], + [ + -117.830471, + 33.799584 + ], + [ + -117.830472, + 33.799521 + ], + [ + -117.830523, + 33.799521 + ], + [ + -117.830523, + 33.799585 + ], + [ + -117.830602, + 33.799586 + ], + [ + -117.830602, + 33.799922 + ], + [ + -117.830648, + 33.799922 + ], + [ + -117.830665, + 33.799913 + ], + [ + -117.830696, + 33.799913 + ], + [ + -117.830714, + 33.799923 + ], + [ + -117.830854, + 33.799923 + ], + [ + -117.83083, + 33.799869 + ], + [ + -117.830655, + 33.799868 + ], + [ + -117.830657, + 33.799638 + ], + [ + -117.830832, + 33.799639 + ], + [ + -117.830832, + 33.799587 + ], + [ + -117.830656, + 33.799586 + ], + [ + -117.830658, + 33.799358 + ], + [ + -117.830227, + 33.79869 + ], + [ + -117.830217, + 33.800057 + ], + [ + -117.830248, + 33.800057 + ], + [ + -117.830256, + 33.800055 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 636983527, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.830854, + 33.799923 + ], + [ + -117.830853, + 33.79994 + ], + [ + -117.830852, + 33.799987 + ], + [ + -117.83091, + 33.799988 + ], + [ + -117.830908, + 33.800309 + ], + [ + -117.830923, + 33.800309 + ], + [ + -117.830923, + 33.80035 + ], + [ + -117.830907, + 33.80035 + ], + [ + -117.830906, + 33.800592 + ], + [ + -117.830898, + 33.800592 + ], + [ + -117.830896, + 33.800645 + ], + [ + -117.830844, + 33.800644 + ], + [ + -117.830843, + 33.800661 + ], + [ + -117.830731, + 33.800661 + ], + [ + -117.830731, + 33.800694 + ], + [ + -117.830739, + 33.800695 + ], + [ + -117.830739, + 33.800677 + ], + [ + -117.830763, + 33.800677 + ], + [ + -117.83095, + 33.800679 + ], + [ + -117.830949, + 33.800745 + ], + [ + -117.830762, + 33.800743 + ], + [ + -117.83073, + 33.800743 + ], + [ + -117.830716, + 33.800778 + ], + [ + -117.830716, + 33.800816 + ], + [ + -117.830922, + 33.80082 + ], + [ + -117.830961, + 33.800824 + ], + [ + -117.831007, + 33.800842 + ], + [ + -117.831043, + 33.800872 + ], + [ + -117.831064, + 33.800911 + ], + [ + -117.83107, + 33.80095 + ], + [ + -117.831072, + 33.801145 + ], + [ + -117.83107, + 33.801271 + ], + [ + -117.831064, + 33.801308 + ], + [ + -117.831057, + 33.80135 + ], + [ + -117.831052, + 33.801393 + ], + [ + -117.831051, + 33.801431 + ], + [ + -117.831053, + 33.801482 + ], + [ + -117.83106, + 33.801527 + ], + [ + -117.831109, + 33.801787 + ], + [ + -117.831112, + 33.801821 + ], + [ + -117.83111, + 33.801853 + ], + [ + -117.831102, + 33.801896 + ], + [ + -117.831097, + 33.801917 + ], + [ + -117.831089, + 33.801946 + ], + [ + -117.831067, + 33.802 + ], + [ + -117.831049, + 33.802025 + ], + [ + -117.831025, + 33.802048 + ], + [ + -117.831007, + 33.80206 + ], + [ + -117.830975, + 33.802074 + ], + [ + -117.830929, + 33.802087 + ], + [ + -117.830893, + 33.802093 + ], + [ + -117.83084, + 33.802095 + ], + [ + -117.830741, + 33.802094 + ], + [ + -117.830496, + 33.802091 + ], + [ + -117.830494, + 33.802105 + ], + [ + -117.830299, + 33.802111 + ], + [ + -117.830274, + 33.802109 + ], + [ + -117.830258, + 33.802104 + ], + [ + -117.830248, + 33.802098 + ], + [ + -117.830201, + 33.802123 + ], + [ + -117.831198, + 33.802089 + ], + [ + -117.831243, + 33.802064 + ], + [ + -117.830881, + 33.798685 + ], + [ + -117.830227, + 33.79869 + ], + [ + -117.830658, + 33.799358 + ], + [ + -117.830834, + 33.799359 + ], + [ + -117.830832, + 33.799587 + ], + [ + -117.830832, + 33.799639 + ], + [ + -117.83083, + 33.799869 + ], + [ + -117.830854, + 33.799923 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 641751665, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.94298, + 33.665313 + ], + [ + -117.945271, + 33.665769 + ], + [ + -117.944587, + 33.668542 + ], + [ + -117.945308, + 33.668537 + ], + [ + -117.945963, + 33.665999 + ], + [ + -117.947486, + 33.660107 + ], + [ + -117.947492, + 33.659965 + ], + [ + -117.947669, + 33.659318 + ], + [ + -117.947761, + 33.65919 + ], + [ + -117.949339, + 33.653665 + ], + [ + -117.949877, + 33.651739 + ], + [ + -117.950126, + 33.650847 + ], + [ + -117.949556, + 33.650912 + ], + [ + -117.949366, + 33.650962 + ], + [ + -117.949439, + 33.651112 + ], + [ + -117.94935, + 33.651565 + ], + [ + -117.948893, + 33.651973 + ], + [ + -117.948827, + 33.652311 + ], + [ + -117.948266, + 33.653709 + ], + [ + -117.947422, + 33.654113 + ], + [ + -117.946033, + 33.654608 + ], + [ + -117.944826, + 33.65576 + ], + [ + -117.943915, + 33.657446 + ], + [ + -117.944521, + 33.65764 + ], + [ + -117.944135, + 33.658454 + ], + [ + -117.943619, + 33.662696 + ], + [ + -117.94298, + 33.665313 + ] + ] + ] + }, + "properties": { + "name": "Talbert Regional Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 641751671, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.936985, + 33.661353 + ], + [ + -117.934752, + 33.66092 + ], + [ + -117.934789, + 33.663184 + ], + [ + -117.934546, + 33.663176 + ], + [ + -117.934525, + 33.66329 + ], + [ + -117.934521, + 33.663391 + ], + [ + -117.934559, + 33.663637 + ], + [ + -117.934556, + 33.663781 + ], + [ + -117.934527, + 33.663919 + ], + [ + -117.93446, + 33.6641 + ], + [ + -117.934361, + 33.664293 + ], + [ + -117.934188, + 33.664655 + ], + [ + -117.934015, + 33.665008 + ], + [ + -117.933976, + 33.66514 + ], + [ + -117.933948, + 33.665277 + ], + [ + -117.933942, + 33.665403 + ], + [ + -117.933956, + 33.665525 + ], + [ + -117.933984, + 33.665671 + ], + [ + -117.934033, + 33.665807 + ], + [ + -117.934103, + 33.66594 + ], + [ + -117.934195, + 33.666066 + ], + [ + -117.934311, + 33.666191 + ], + [ + -117.934457, + 33.666315 + ], + [ + -117.934618, + 33.666414 + ], + [ + -117.934777, + 33.666494 + ], + [ + -117.934788, + 33.668627 + ], + [ + -117.937419, + 33.668606 + ], + [ + -117.944587, + 33.668542 + ], + [ + -117.945271, + 33.665769 + ], + [ + -117.94298, + 33.665313 + ], + [ + -117.943619, + 33.662696 + ], + [ + -117.944135, + 33.658454 + ], + [ + -117.944521, + 33.65764 + ], + [ + -117.943915, + 33.657446 + ], + [ + -117.94368, + 33.657907 + ], + [ + -117.940842, + 33.65782 + ], + [ + -117.940842, + 33.659665 + ], + [ + -117.940763, + 33.659665 + ], + [ + -117.938694, + 33.659645 + ], + [ + -117.938706, + 33.660238 + ], + [ + -117.936985, + 33.661353 + ] + ] + ] + }, + "properties": { + "name": "Fairview Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 642788239, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.852167, + 33.83733 + ], + [ + -117.852182, + 33.837353 + ], + [ + -117.852186, + 33.837376 + ], + [ + -117.852188, + 33.837398 + ], + [ + -117.852184, + 33.837418 + ], + [ + -117.852179, + 33.837438 + ], + [ + -117.85217, + 33.837454 + ], + [ + -117.852157, + 33.837469 + ], + [ + -117.852119, + 33.837493 + ], + [ + -117.852126, + 33.837502 + ], + [ + -117.852006, + 33.837578 + ], + [ + -117.852033, + 33.837609 + ], + [ + -117.852032, + 33.837637 + ], + [ + -117.851846, + 33.837633 + ], + [ + -117.851845, + 33.837678 + ], + [ + -117.851854, + 33.837694 + ], + [ + -117.851868, + 33.837719 + ], + [ + -117.851876, + 33.837746 + ], + [ + -117.851878, + 33.837775 + ], + [ + -117.851873, + 33.837803 + ], + [ + -117.85186, + 33.837829 + ], + [ + -117.851831, + 33.83786 + ], + [ + -117.851796, + 33.837883 + ], + [ + -117.851756, + 33.837897 + ], + [ + -117.851713, + 33.837903 + ], + [ + -117.851671, + 33.837896 + ], + [ + -117.851623, + 33.837878 + ], + [ + -117.851597, + 33.837869 + ], + [ + -117.851545, + 33.837867 + ], + [ + -117.851536, + 33.838099 + ], + [ + -117.851534, + 33.838148 + ], + [ + -117.851741, + 33.838154 + ], + [ + -117.851763, + 33.838145 + ], + [ + -117.852179, + 33.838159 + ], + [ + -117.852178, + 33.838182 + ], + [ + -117.852269, + 33.838184 + ], + [ + -117.852302, + 33.837309 + ], + [ + -117.852241, + 33.83724 + ], + [ + -117.852214, + 33.837256 + ], + [ + -117.852196, + 33.837235 + ], + [ + -117.852168, + 33.837252 + ], + [ + -117.852149, + 33.837231 + ], + [ + -117.852121, + 33.837248 + ], + [ + -117.852101, + 33.837225 + ], + [ + -117.85207, + 33.837244 + ], + [ + -117.852046, + 33.837218 + ], + [ + -117.851931, + 33.837287 + ], + [ + -117.851944, + 33.837302 + ], + [ + -117.851983, + 33.837279 + ], + [ + -117.852002, + 33.837271 + ], + [ + -117.852029, + 33.837267 + ], + [ + -117.852058, + 33.837269 + ], + [ + -117.852081, + 33.837273 + ], + [ + -117.852108, + 33.837281 + ], + [ + -117.852132, + 33.837295 + ], + [ + -117.852151, + 33.837311 + ], + [ + -117.852167, + 33.83733 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 642797644, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.844977, + 33.801081 + ], + [ + -117.844977, + 33.801071 + ], + [ + -117.84498, + 33.801065 + ], + [ + -117.844986, + 33.801063 + ], + [ + -117.845014, + 33.801064 + ], + [ + -117.845018, + 33.80106 + ], + [ + -117.845022, + 33.800973 + ], + [ + -117.845023, + 33.800967 + ], + [ + -117.845028, + 33.800963 + ], + [ + -117.84504, + 33.800959 + ], + [ + -117.845047, + 33.800954 + ], + [ + -117.845051, + 33.800947 + ], + [ + -117.845055, + 33.800788 + ], + [ + -117.844979, + 33.800787 + ], + [ + -117.844978, + 33.80094 + ], + [ + -117.844978, + 33.800951 + ], + [ + -117.844756, + 33.800951 + ], + [ + -117.844755, + 33.80097 + ], + [ + -117.844705, + 33.800969 + ], + [ + -117.844704, + 33.801073 + ], + [ + -117.84471, + 33.801079 + ], + [ + -117.844977, + 33.801081 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 642797645, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.844681, + 33.801075 + ], + [ + -117.844688, + 33.80107 + ], + [ + -117.844688, + 33.800956 + ], + [ + -117.844693, + 33.800956 + ], + [ + -117.844694, + 33.800945 + ], + [ + -117.844659, + 33.800945 + ], + [ + -117.844659, + 33.800908 + ], + [ + -117.844602, + 33.800908 + ], + [ + -117.844603, + 33.800687 + ], + [ + -117.844644, + 33.800687 + ], + [ + -117.844645, + 33.80067 + ], + [ + -117.844749, + 33.800671 + ], + [ + -117.844748, + 33.800683 + ], + [ + -117.844852, + 33.800683 + ], + [ + -117.844852, + 33.800694 + ], + [ + -117.844917, + 33.800713 + ], + [ + -117.844971, + 33.80073 + ], + [ + -117.84497, + 33.800739 + ], + [ + -117.844979, + 33.800739 + ], + [ + -117.845056, + 33.80074 + ], + [ + -117.845057, + 33.800723 + ], + [ + -117.845063, + 33.80071 + ], + [ + -117.845075, + 33.800692 + ], + [ + -117.845098, + 33.800668 + ], + [ + -117.845111, + 33.800654 + ], + [ + -117.84512, + 33.800641 + ], + [ + -117.845125, + 33.800626 + ], + [ + -117.845127, + 33.800612 + ], + [ + -117.84448, + 33.80061 + ], + [ + -117.844449, + 33.800636 + ], + [ + -117.844448, + 33.801081 + ], + [ + -117.844527, + 33.801081 + ], + [ + -117.844527, + 33.801074 + ], + [ + -117.844681, + 33.801075 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 647117643, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.671668, + 33.648136 + ], + [ + -117.671682, + 33.648099 + ], + [ + -117.671538, + 33.647851 + ], + [ + -117.671495, + 33.647841 + ], + [ + -117.671361, + 33.647896 + ], + [ + -117.671355, + 33.647919 + ], + [ + -117.671509, + 33.648173 + ], + [ + -117.671544, + 33.648182 + ], + [ + -117.671668, + 33.648136 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 648248838, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.879245, + 33.698784 + ], + [ + -117.87926, + 33.69906 + ], + [ + -117.87923, + 33.699107 + ], + [ + -117.879153, + 33.699172 + ], + [ + -117.879165, + 33.699183 + ], + [ + -117.879141, + 33.699204 + ], + [ + -117.879056, + 33.699149 + ], + [ + -117.879147, + 33.699035 + ], + [ + -117.879115, + 33.699007 + ], + [ + -117.87911, + 33.698972 + ], + [ + -117.8791, + 33.698824 + ], + [ + -117.879108, + 33.698804 + ], + [ + -117.879137, + 33.698791 + ], + [ + -117.879195, + 33.698792 + ], + [ + -117.879245, + 33.698784 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 649712753, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.892425, + 33.70894 + ], + [ + -117.892534, + 33.708879 + ], + [ + -117.892598, + 33.708874 + ], + [ + -117.892695, + 33.708971 + ], + [ + -117.892614, + 33.708987 + ], + [ + -117.892589, + 33.709022 + ], + [ + -117.892613, + 33.709078 + ], + [ + -117.892655, + 33.709156 + ], + [ + -117.892613, + 33.709231 + ], + [ + -117.892579, + 33.709264 + ], + [ + -117.892547, + 33.709267 + ], + [ + -117.892411, + 33.70926 + ], + [ + -117.892343, + 33.709251 + ], + [ + -117.892368, + 33.709215 + ], + [ + -117.892357, + 33.709171 + ], + [ + -117.892322, + 33.709153 + ], + [ + -117.892289, + 33.709147 + ], + [ + -117.892277, + 33.709115 + ], + [ + -117.892285, + 33.709056 + ], + [ + -117.892358, + 33.708977 + ], + [ + -117.892425, + 33.70894 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 649804702, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.785159, + 33.733198 + ], + [ + -117.78527, + 33.7331 + ], + [ + -117.785065, + 33.732933 + ], + [ + -117.784954, + 33.733029 + ], + [ + -117.785159, + 33.733198 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 652995264, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.919479, + 33.811832 + ], + [ + -117.919479, + 33.811842 + ], + [ + -117.919475, + 33.811847 + ], + [ + -117.919465, + 33.811853 + ], + [ + -117.919455, + 33.811858 + ], + [ + -117.919439, + 33.811862 + ], + [ + -117.919423, + 33.811864 + ], + [ + -117.919409, + 33.811863 + ], + [ + -117.919399, + 33.811858 + ], + [ + -117.919392, + 33.811849 + ], + [ + -117.919402, + 33.811848 + ], + [ + -117.919443, + 33.811847 + ], + [ + -117.91945, + 33.811846 + ], + [ + -117.919459, + 33.811843 + ], + [ + -117.919459, + 33.811839 + ], + [ + -117.919462, + 33.81183 + ], + [ + -117.91947, + 33.811826 + ], + [ + -117.919478, + 33.811825 + ], + [ + -117.919479, + 33.811832 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 658939135, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.725186, + 33.538114 + ], + [ + -117.725099, + 33.538093 + ], + [ + -117.725025, + 33.538163 + ], + [ + -117.72499, + 33.538198 + ], + [ + -117.725008, + 33.53827 + ], + [ + -117.724967, + 33.538318 + ], + [ + -117.724912, + 33.538376 + ], + [ + -117.724798, + 33.538387 + ], + [ + -117.724643, + 33.538311 + ], + [ + -117.724545, + 33.538183 + ], + [ + -117.724515, + 33.537874 + ], + [ + -117.724438, + 33.53764 + ], + [ + -117.724304, + 33.537414 + ], + [ + -117.724156, + 33.537277 + ], + [ + -117.723874, + 33.537119 + ], + [ + -117.723833, + 33.537003 + ], + [ + -117.723794, + 33.53665 + ], + [ + -117.723737, + 33.536263 + ], + [ + -117.723708, + 33.535742 + ], + [ + -117.723756, + 33.535463 + ], + [ + -117.723844, + 33.535071 + ], + [ + -117.723947, + 33.534851 + ], + [ + -117.723815, + 33.534779 + ], + [ + -117.723578, + 33.535309 + ], + [ + -117.723449, + 33.535715 + ], + [ + -117.723359, + 33.536166 + ], + [ + -117.723312, + 33.536516 + ], + [ + -117.723298, + 33.537324 + ], + [ + -117.723298, + 33.537365 + ], + [ + -117.723374, + 33.53743 + ], + [ + -117.723707, + 33.537539 + ], + [ + -117.723851, + 33.537613 + ], + [ + -117.724029, + 33.53777 + ], + [ + -117.724141, + 33.537973 + ], + [ + -117.724255, + 33.538334 + ], + [ + -117.724325, + 33.538425 + ], + [ + -117.724444, + 33.538497 + ], + [ + -117.724523, + 33.538521 + ], + [ + -117.724631, + 33.538526 + ], + [ + -117.72492, + 33.538497 + ], + [ + -117.725034, + 33.538457 + ], + [ + -117.725092, + 33.538374 + ], + [ + -117.725186, + 33.538114 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 659851416, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.99641, + 33.844081 + ], + [ + -117.996428, + 33.843858 + ], + [ + -117.996397, + 33.843844 + ], + [ + -117.996313, + 33.843991 + ], + [ + -117.996278, + 33.844061 + ], + [ + -117.99641, + 33.844081 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 661348883, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.785083, + 33.734256 + ], + [ + -117.784914, + 33.734364 + ], + [ + -117.784864, + 33.734329 + ], + [ + -117.784803, + 33.734305 + ], + [ + -117.784746, + 33.734297 + ], + [ + -117.784692, + 33.734305 + ], + [ + -117.784647, + 33.734324 + ], + [ + -117.784548, + 33.734213 + ], + [ + -117.784627, + 33.73418 + ], + [ + -117.784684, + 33.734166 + ], + [ + -117.784732, + 33.734159 + ], + [ + -117.784781, + 33.734157 + ], + [ + -117.784786, + 33.734131 + ], + [ + -117.784841, + 33.734134 + ], + [ + -117.784917, + 33.734153 + ], + [ + -117.78499, + 33.734185 + ], + [ + -117.785045, + 33.734222 + ], + [ + -117.785083, + 33.734256 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 661653000, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.924579, + 33.808014 + ], + [ + -117.924576, + 33.808034 + ], + [ + -117.92456, + 33.808049 + ], + [ + -117.924516, + 33.808071 + ], + [ + -117.924443, + 33.808098 + ], + [ + -117.924395, + 33.808132 + ], + [ + -117.924332, + 33.808179 + ], + [ + -117.924295, + 33.808243 + ], + [ + -117.924296, + 33.808306 + ], + [ + -117.924308, + 33.808368 + ], + [ + -117.924374, + 33.80845 + ], + [ + -117.924388, + 33.808463 + ], + [ + -117.924403, + 33.808481 + ], + [ + -117.924381, + 33.808491 + ], + [ + -117.924398, + 33.808538 + ], + [ + -117.924379, + 33.808545 + ], + [ + -117.924368, + 33.80854 + ], + [ + -117.924345, + 33.808499 + ], + [ + -117.92433, + 33.808461 + ], + [ + -117.924322, + 33.80844 + ], + [ + -117.924308, + 33.808411 + ], + [ + -117.924304, + 33.808391 + ], + [ + -117.924293, + 33.808366 + ], + [ + -117.924283, + 33.808338 + ], + [ + -117.924278, + 33.808309 + ], + [ + -117.924276, + 33.808277 + ], + [ + -117.924278, + 33.808244 + ], + [ + -117.924294, + 33.807991 + ], + [ + -117.924458, + 33.80799 + ], + [ + -117.924578, + 33.807988 + ], + [ + -117.924579, + 33.808014 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 661653004, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.924672, + 33.808196 + ], + [ + -117.924674, + 33.808227 + ], + [ + -117.924534, + 33.808227 + ], + [ + -117.924534, + 33.808243 + ], + [ + -117.924467, + 33.808245 + ], + [ + -117.92441, + 33.808247 + ], + [ + -117.92441, + 33.808292 + ], + [ + -117.924413, + 33.808399 + ], + [ + -117.924451, + 33.808397 + ], + [ + -117.924454, + 33.808473 + ], + [ + -117.924455, + 33.808519 + ], + [ + -117.924509, + 33.808518 + ], + [ + -117.92451, + 33.808566 + ], + [ + -117.924507, + 33.808609 + ], + [ + -117.9245, + 33.808611 + ], + [ + -117.924489, + 33.808614 + ], + [ + -117.924479, + 33.808601 + ], + [ + -117.924498, + 33.808593 + ], + [ + -117.924501, + 33.808569 + ], + [ + -117.924485, + 33.808545 + ], + [ + -117.924462, + 33.808528 + ], + [ + -117.92445, + 33.80852 + ], + [ + -117.924448, + 33.808501 + ], + [ + -117.924446, + 33.808487 + ], + [ + -117.924431, + 33.808472 + ], + [ + -117.924403, + 33.808458 + ], + [ + -117.924362, + 33.808392 + ], + [ + -117.924337, + 33.808324 + ], + [ + -117.92432, + 33.808248 + ], + [ + -117.924336, + 33.808214 + ], + [ + -117.924346, + 33.808197 + ], + [ + -117.924672, + 33.808196 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 4384742, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.249969, + 34.08237 + ], + [ + -118.250216, + 34.082015 + ], + [ + -118.251606, + 34.080255 + ], + [ + -118.251187, + 34.078336 + ], + [ + -118.250872, + 34.076853 + ], + [ + -118.250806, + 34.07656 + ], + [ + -118.250629, + 34.076221 + ], + [ + -118.250463, + 34.076159 + ], + [ + -118.249776, + 34.077305 + ], + [ + -118.248907, + 34.076905 + ], + [ + -118.248984, + 34.077239 + ], + [ + -118.248886, + 34.077306 + ], + [ + -118.248717, + 34.077381 + ], + [ + -118.247513, + 34.076824 + ], + [ + -118.247039, + 34.076582 + ], + [ + -118.246462, + 34.076051 + ], + [ + -118.246093, + 34.075621 + ], + [ + -118.244192, + 34.078812 + ], + [ + -118.242728, + 34.081146 + ], + [ + -118.243923, + 34.081696 + ], + [ + -118.243074, + 34.083328 + ], + [ + -118.242137, + 34.084269 + ], + [ + -118.240609, + 34.085282 + ], + [ + -118.239861, + 34.084925 + ], + [ + -118.239718, + 34.083041 + ], + [ + -118.240623, + 34.081139 + ], + [ + -118.239224, + 34.080739 + ], + [ + -118.236106, + 34.079748 + ], + [ + -118.235578, + 34.079428 + ], + [ + -118.235252, + 34.079113 + ], + [ + -118.234286, + 34.078674 + ], + [ + -118.232049, + 34.077681 + ], + [ + -118.230854, + 34.076093 + ], + [ + -118.231088, + 34.075908 + ], + [ + -118.231417, + 34.075605 + ], + [ + -118.231711, + 34.075228 + ], + [ + -118.231724, + 34.075101 + ], + [ + -118.231642, + 34.074847 + ], + [ + -118.230639, + 34.075101 + ], + [ + -118.229441, + 34.072238 + ], + [ + -118.228989, + 34.072344 + ], + [ + -118.228193, + 34.07166 + ], + [ + -118.227462, + 34.071827 + ], + [ + -118.226824, + 34.07194 + ], + [ + -118.226578, + 34.072196 + ], + [ + -118.226106, + 34.072966 + ], + [ + -118.226094, + 34.073538 + ], + [ + -118.226319, + 34.074616 + ], + [ + -118.226582, + 34.075156 + ], + [ + -118.22716, + 34.076577 + ], + [ + -118.227322, + 34.077215 + ], + [ + -118.227302, + 34.077544 + ], + [ + -118.227175, + 34.078449 + ], + [ + -118.227028, + 34.078454 + ], + [ + -118.227136, + 34.079152 + ], + [ + -118.227287, + 34.079654 + ], + [ + -118.227694, + 34.080482 + ], + [ + -118.227994, + 34.080944 + ], + [ + -118.228492, + 34.082397 + ], + [ + -118.228847, + 34.082756 + ], + [ + -118.231069, + 34.084387 + ], + [ + -118.233014, + 34.085883 + ], + [ + -118.235221, + 34.08732 + ], + [ + -118.236633, + 34.08825 + ], + [ + -118.238179, + 34.089387 + ], + [ + -118.239821, + 34.090805 + ], + [ + -118.24288, + 34.093718 + ], + [ + -118.243375, + 34.094138 + ], + [ + -118.24383, + 34.093886 + ], + [ + -118.243453, + 34.093709 + ], + [ + -118.243165, + 34.093514 + ], + [ + -118.244981, + 34.091881 + ], + [ + -118.243664, + 34.091369 + ], + [ + -118.243452, + 34.090663 + ], + [ + -118.243184, + 34.09001 + ], + [ + -118.242916, + 34.08937 + ], + [ + -118.243794, + 34.088822 + ], + [ + -118.244559, + 34.088335 + ], + [ + -118.246202, + 34.087643 + ], + [ + -118.247422, + 34.086425 + ], + [ + -118.248726, + 34.085274 + ], + [ + -118.2488, + 34.085214 + ], + [ + -118.248795, + 34.08397 + ], + [ + -118.249969, + 34.08237 + ] + ] + ] + }, + "properties": { + "name": "Elysian Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 25808687, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.205536, + 34.06575 + ], + [ + -118.206097, + 34.065892 + ], + [ + -118.206947, + 34.065488 + ], + [ + -118.206839, + 34.065454 + ], + [ + -118.206537, + 34.0654 + ], + [ + -118.206313, + 34.065396 + ], + [ + -118.206159, + 34.065409 + ], + [ + -118.205393, + 34.065506 + ], + [ + -118.204849, + 34.065538 + ], + [ + -118.204485, + 34.065563 + ], + [ + -118.20449, + 34.065588 + ], + [ + -118.204662, + 34.065583 + ], + [ + -118.204876, + 34.065608 + ], + [ + -118.205536, + 34.06575 + ] + ] + ] + }, + "properties": { + "name": "El Parque De Mexico", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 25808864, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.199883, + 34.068216 + ], + [ + -118.200847, + 34.068389 + ], + [ + -118.201018, + 34.068318 + ], + [ + -118.201401, + 34.068137 + ], + [ + -118.202174, + 34.067763 + ], + [ + -118.203075, + 34.067342 + ], + [ + -118.204029, + 34.066884 + ], + [ + -118.204954, + 34.066444 + ], + [ + -118.205576, + 34.066143 + ], + [ + -118.205666, + 34.0661 + ], + [ + -118.20569, + 34.066076 + ], + [ + -118.205701, + 34.066038 + ], + [ + -118.205689, + 34.065998 + ], + [ + -118.205659, + 34.065965 + ], + [ + -118.20558, + 34.065929 + ], + [ + -118.204947, + 34.06574 + ], + [ + -118.204726, + 34.065705 + ], + [ + -118.204569, + 34.0657 + ], + [ + -118.204222, + 34.065719 + ], + [ + -118.203726, + 34.06574 + ], + [ + -118.20276, + 34.065703 + ], + [ + -118.202038, + 34.065629 + ], + [ + -118.201123, + 34.065471 + ], + [ + -118.199947, + 34.065248 + ], + [ + -118.198134, + 34.064907 + ], + [ + -118.198084, + 34.065052 + ], + [ + -118.198069, + 34.065242 + ], + [ + -118.197944, + 34.065505 + ], + [ + -118.197815, + 34.065832 + ], + [ + -118.197721, + 34.066111 + ], + [ + -118.197672, + 34.066443 + ], + [ + -118.197746, + 34.066474 + ], + [ + -118.197643, + 34.06687 + ], + [ + -118.19741, + 34.067774 + ], + [ + -118.197343, + 34.067994 + ], + [ + -118.197806, + 34.067834 + ], + [ + -118.197879, + 34.067628 + ], + [ + -118.198555, + 34.067732 + ], + [ + -118.19863, + 34.067688 + ], + [ + -118.19887, + 34.067976 + ], + [ + -118.199163, + 34.067811 + ], + [ + -118.199196, + 34.067851 + ], + [ + -118.199557, + 34.067653 + ], + [ + -118.199772, + 34.067894 + ], + [ + -118.199969, + 34.067958 + ], + [ + -118.199883, + 34.068216 + ] + ] + ] + }, + "properties": { + "name": "Lincoln Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 27138713, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.111357, + 33.880088 + ], + [ + -118.108722, + 33.880074 + ], + [ + -118.108714, + 33.87976 + ], + [ + -118.108671, + 33.879461 + ], + [ + -118.108611, + 33.879161 + ], + [ + -118.109049, + 33.879119 + ], + [ + -118.108585, + 33.877373 + ], + [ + -118.109538, + 33.877351 + ], + [ + -118.109787, + 33.877458 + ], + [ + -118.111349, + 33.878413 + ], + [ + -118.111357, + 33.880088 + ] + ] + ] + }, + "properties": { + "name": "Ruth R. Caruthers Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 27336784, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.146617, + 34.06956 + ], + [ + -118.145377, + 34.069572 + ], + [ + -118.145355, + 34.068861 + ], + [ + -118.144342, + 34.068868 + ], + [ + -118.144334, + 34.067972 + ], + [ + -118.144308, + 34.067908 + ], + [ + -118.144239, + 34.067858 + ], + [ + -118.144076, + 34.067766 + ], + [ + -118.144205, + 34.067673 + ], + [ + -118.144325, + 34.067602 + ], + [ + -118.144437, + 34.067517 + ], + [ + -118.144522, + 34.067431 + ], + [ + -118.144591, + 34.067325 + ], + [ + -118.144643, + 34.067218 + ], + [ + -118.144668, + 34.067104 + ], + [ + -118.144677, + 34.066984 + ], + [ + -118.144952, + 34.066977 + ], + [ + -118.144952, + 34.066578 + ], + [ + -118.144986, + 34.066273 + ], + [ + -118.145012, + 34.06623 + ], + [ + -118.145072, + 34.066216 + ], + [ + -118.145269, + 34.066209 + ], + [ + -118.14611, + 34.066209 + ], + [ + -118.146138, + 34.066279 + ], + [ + -118.146151, + 34.06661 + ], + [ + -118.146598, + 34.066609 + ], + [ + -118.146617, + 34.06956 + ] + ] + ] + }, + "properties": { + "name": "Granada Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 27768470, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.105175, + 33.880504 + ], + [ + -118.10442, + 33.880526 + ], + [ + -118.104437, + 33.88126 + ], + [ + -118.104548, + 33.882058 + ], + [ + -118.108067, + 33.882015 + ], + [ + -118.108024, + 33.879806 + ], + [ + -118.107956, + 33.879407 + ], + [ + -118.107286, + 33.877084 + ], + [ + -118.10648, + 33.877027 + ], + [ + -118.107046, + 33.879165 + ], + [ + -118.107149, + 33.879642 + ], + [ + -118.107123, + 33.880191 + ], + [ + -118.106239, + 33.880177 + ], + [ + -118.106213, + 33.878701 + ], + [ + -118.105063, + 33.878716 + ], + [ + -118.10502, + 33.878908 + ], + [ + -118.104866, + 33.878929 + ], + [ + -118.104917, + 33.879785 + ], + [ + -118.105158, + 33.879785 + ], + [ + -118.105175, + 33.880504 + ] + ] + ] + }, + "properties": { + "name": "Iron-Wood Nine Golf Course (City of Cerritos)", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30806773, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.248487, + 34.010546 + ], + [ + -118.249434, + 34.008953 + ], + [ + -118.246524, + 34.008543 + ], + [ + -118.245859, + 34.009846 + ], + [ + -118.24673, + 34.010062 + ], + [ + -118.246579, + 34.010431 + ], + [ + -118.246667, + 34.010453 + ], + [ + -118.246809, + 34.010083 + ], + [ + -118.248487, + 34.010546 + ] + ] + ] + }, + "properties": { + "name": "Ross Snyder Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 30806880, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.266726, + 34.006643 + ], + [ + -118.266734, + 34.007068 + ], + [ + -118.267088, + 34.007072 + ], + [ + -118.267074, + 34.008121 + ], + [ + -118.269511, + 34.008093 + ], + [ + -118.269507, + 34.006629 + ], + [ + -118.266726, + 34.006643 + ] + ] + ] + }, + "properties": { + "name": "Gilbert Lindsay Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 39563249, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.25022, + 34.050688 + ], + [ + -118.24989, + 34.051035 + ], + [ + -118.249933, + 34.051077 + ], + [ + -118.249997, + 34.051138 + ], + [ + -118.250029, + 34.051169 + ], + [ + -118.250083, + 34.05122 + ], + [ + -118.250134, + 34.051227 + ], + [ + -118.250278, + 34.051324 + ], + [ + -118.250534, + 34.051496 + ], + [ + -118.250577, + 34.051452 + ], + [ + -118.250645, + 34.051496 + ], + [ + -118.250654, + 34.051507 + ], + [ + -118.250659, + 34.051518 + ], + [ + -118.250667, + 34.051513 + ], + [ + -118.250682, + 34.05151 + ], + [ + -118.250698, + 34.051508 + ], + [ + -118.25071, + 34.051508 + ], + [ + -118.250725, + 34.051518 + ], + [ + -118.250732, + 34.051511 + ], + [ + -118.250979, + 34.051252 + ], + [ + -118.251071, + 34.051154 + ], + [ + -118.251097, + 34.051169 + ], + [ + -118.251126, + 34.051137 + ], + [ + -118.251271, + 34.050985 + ], + [ + -118.251288, + 34.050968 + ], + [ + -118.251284, + 34.050923 + ], + [ + -118.251144, + 34.050832 + ], + [ + -118.250802, + 34.050608 + ], + [ + -118.25079, + 34.0506 + ], + [ + -118.250742, + 34.050653 + ], + [ + -118.250685, + 34.050697 + ], + [ + -118.250612, + 34.050723 + ], + [ + -118.250549, + 34.050732 + ], + [ + -118.250482, + 34.05073 + ], + [ + -118.250416, + 34.050722 + ], + [ + -118.250366, + 34.050705 + ], + [ + -118.250306, + 34.050681 + ], + [ + -118.250256, + 34.050647 + ], + [ + -118.25022, + 34.050688 + ] + ] + ] + }, + "properties": { + "name": "Angels Knoll Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 40187723, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.226193, + 34.071966 + ], + [ + -118.226199, + 34.071949 + ], + [ + -118.226241, + 34.071827 + ], + [ + -118.226289, + 34.071706 + ], + [ + -118.226295, + 34.071689 + ], + [ + -118.226304, + 34.071671 + ], + [ + -118.226372, + 34.071522 + ], + [ + -118.226448, + 34.071376 + ], + [ + -118.226531, + 34.071233 + ], + [ + -118.226622, + 34.071093 + ], + [ + -118.226719, + 34.070956 + ], + [ + -118.226823, + 34.070822 + ], + [ + -118.226934, + 34.070693 + ], + [ + -118.227051, + 34.070567 + ], + [ + -118.227175, + 34.070445 + ], + [ + -118.227304, + 34.070329 + ], + [ + -118.22744, + 34.070216 + ], + [ + -118.227581, + 34.070109 + ], + [ + -118.227727, + 34.070006 + ], + [ + -118.227878, + 34.069909 + ], + [ + -118.227895, + 34.069898 + ], + [ + -118.227913, + 34.069888 + ], + [ + -118.232491, + 34.067087 + ], + [ + -118.232508, + 34.067077 + ], + [ + -118.232526, + 34.067066 + ], + [ + -118.232673, + 34.066972 + ], + [ + -118.232816, + 34.066873 + ], + [ + -118.232954, + 34.066769 + ], + [ + -118.233087, + 34.066661 + ], + [ + -118.233215, + 34.066549 + ], + [ + -118.233339, + 34.066433 + ], + [ + -118.233352, + 34.06642 + ], + [ + -118.233369, + 34.066409 + ], + [ + -118.233762, + 34.066143 + ], + [ + -118.233779, + 34.066132 + ], + [ + -118.233794, + 34.066145 + ], + [ + -118.233811, + 34.066161 + ], + [ + -118.233826, + 34.066174 + ], + [ + -118.233842, + 34.066162 + ], + [ + -118.234552, + 34.065652 + ], + [ + -118.234568, + 34.06564 + ], + [ + -118.234584, + 34.065628 + ], + [ + -118.235348, + 34.065039 + ], + [ + -118.235364, + 34.065027 + ], + [ + -118.235358, + 34.065044 + ], + [ + -118.235099, + 34.065819 + ], + [ + -118.235093, + 34.065836 + ], + [ + -118.235087, + 34.065854 + ], + [ + -118.234997, + 34.066117 + ], + [ + -118.234991, + 34.066134 + ], + [ + -118.234902, + 34.066375 + ], + [ + -118.234895, + 34.066392 + ], + [ + -118.234839, + 34.066526 + ], + [ + -118.234831, + 34.066543 + ], + [ + -118.234824, + 34.06656 + ], + [ + -118.234747, + 34.066722 + ], + [ + -118.234663, + 34.066882 + ], + [ + -118.234571, + 34.067039 + ], + [ + -118.234472, + 34.067193 + ], + [ + -118.234366, + 34.067343 + ], + [ + -118.234254, + 34.06749 + ], + [ + -118.234134, + 34.067634 + ], + [ + -118.234008, + 34.067773 + ], + [ + -118.233875, + 34.067908 + ], + [ + -118.233737, + 34.068039 + ], + [ + -118.233592, + 34.068165 + ], + [ + -118.233441, + 34.068287 + ], + [ + -118.233285, + 34.068404 + ], + [ + -118.233269, + 34.068415 + ], + [ + -118.233253, + 34.068427 + ], + [ + -118.233121, + 34.068517 + ], + [ + -118.233105, + 34.068528 + ], + [ + -118.233088, + 34.068539 + ], + [ + -118.232882, + 34.068672 + ], + [ + -118.232865, + 34.068683 + ], + [ + -118.232847, + 34.068693 + ], + [ + -118.232582, + 34.068855 + ], + [ + -118.232565, + 34.068866 + ], + [ + -118.232547, + 34.068876 + ], + [ + -118.231949, + 34.069238 + ], + [ + -118.231932, + 34.069248 + ], + [ + -118.231915, + 34.069259 + ], + [ + -118.231659, + 34.069412 + ], + [ + -118.231641, + 34.069422 + ], + [ + -118.231624, + 34.069432 + ], + [ + -118.231418, + 34.069549 + ], + [ + -118.2314, + 34.069559 + ], + [ + -118.231382, + 34.069569 + ], + [ + -118.231245, + 34.069642 + ], + [ + -118.231227, + 34.069651 + ], + [ + -118.231209, + 34.069661 + ], + [ + -118.231047, + 34.06974 + ], + [ + -118.231028, + 34.069748 + ], + [ + -118.231009, + 34.069757 + ], + [ + -118.230865, + 34.06982 + ], + [ + -118.230846, + 34.069829 + ], + [ + -118.230827, + 34.069837 + ], + [ + -118.230604, + 34.069928 + ], + [ + -118.230584, + 34.069936 + ], + [ + -118.230565, + 34.069944 + ], + [ + -118.230279, + 34.070054 + ], + [ + -118.230259, + 34.070061 + ], + [ + -118.23024, + 34.070069 + ], + [ + -118.227621, + 34.071066 + ], + [ + -118.227601, + 34.071073 + ], + [ + -118.227582, + 34.071081 + ], + [ + -118.227384, + 34.071164 + ], + [ + -118.227364, + 34.071172 + ], + [ + -118.227346, + 34.071181 + ], + [ + -118.227213, + 34.071242 + ], + [ + -118.227194, + 34.071251 + ], + [ + -118.227176, + 34.07126 + ], + [ + -118.227088, + 34.071306 + ], + [ + -118.227072, + 34.071314 + ], + [ + -118.227054, + 34.071323 + ], + [ + -118.227036, + 34.071333 + ], + [ + -118.227009, + 34.071349 + ], + [ + -118.226992, + 34.071359 + ], + [ + -118.226974, + 34.071369 + ], + [ + -118.226861, + 34.071439 + ], + [ + -118.226753, + 34.071513 + ], + [ + -118.226648, + 34.071591 + ], + [ + -118.226549, + 34.071674 + ], + [ + -118.226455, + 34.07176 + ], + [ + -118.226366, + 34.071851 + ], + [ + -118.226282, + 34.071945 + ], + [ + -118.22627, + 34.071959 + ], + [ + -118.226248, + 34.071961 + ], + [ + -118.226214, + 34.071964 + ], + [ + -118.226193, + 34.071966 + ] + ] + ] + }, + "properties": { + "name": "Los Angeles State Historic Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 43793678, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.115495, + 34.011459 + ], + [ + -118.114107, + 34.011166 + ], + [ + -118.115109, + 34.007849 + ], + [ + -118.115139, + 34.007818 + ], + [ + -118.115201, + 34.007793 + ], + [ + -118.116526, + 34.008075 + ], + [ + -118.115495, + 34.011459 + ] + ] + ] + }, + "properties": { + "name": "Montebello City Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 45769436, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.177811, + 34.038594 + ], + [ + -118.175827, + 34.038598 + ], + [ + -118.17582, + 34.037057 + ], + [ + -118.176375, + 34.037032 + ], + [ + -118.176697, + 34.036995 + ], + [ + -118.177075, + 34.036905 + ], + [ + -118.178497, + 34.036497 + ], + [ + -118.178543, + 34.036531 + ], + [ + -118.17855, + 34.037462 + ], + [ + -118.178529, + 34.037639 + ], + [ + -118.178454, + 34.037757 + ], + [ + -118.17825, + 34.037967 + ], + [ + -118.177861, + 34.038365 + ], + [ + -118.177811, + 34.038456 + ], + [ + -118.177811, + 34.038594 + ] + ] + ] + }, + "properties": { + "name": "Obregon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46257162, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.178866, + 34.050963 + ], + [ + -118.177422, + 34.050689 + ], + [ + -118.177442, + 34.050528 + ], + [ + -118.177102, + 34.050438 + ], + [ + -118.177178, + 34.050245 + ], + [ + -118.177219, + 34.050083 + ], + [ + -118.177563, + 34.047821 + ], + [ + -118.177983, + 34.047809 + ], + [ + -118.178104, + 34.047917 + ], + [ + -118.178461, + 34.047877 + ], + [ + -118.178614, + 34.047834 + ], + [ + -118.179247, + 34.047833 + ], + [ + -118.179836, + 34.047885 + ], + [ + -118.179926, + 34.048193 + ], + [ + -118.179928, + 34.048399 + ], + [ + -118.17992, + 34.048571 + ], + [ + -118.179163, + 34.049639 + ], + [ + -118.178963, + 34.049999 + ], + [ + -118.178886, + 34.050224 + ], + [ + -118.178854, + 34.050385 + ], + [ + -118.178854, + 34.050575 + ], + [ + -118.178888, + 34.050755 + ], + [ + -118.178921, + 34.050905 + ], + [ + -118.178913, + 34.050958 + ], + [ + -118.178866, + 34.050963 + ] + ] + ] + }, + "properties": { + "name": "City Terrace Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46257164, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.142937, + 34.054041 + ], + [ + -118.142658, + 34.053815 + ], + [ + -118.142564, + 34.053666 + ], + [ + -118.141929, + 34.053358 + ], + [ + -118.141423, + 34.054024 + ], + [ + -118.141357, + 34.05411 + ], + [ + -118.140745, + 34.054944 + ], + [ + -118.140665, + 34.055053 + ], + [ + -118.140983, + 34.055236 + ], + [ + -118.141123, + 34.055307 + ], + [ + -118.141222, + 34.055336 + ], + [ + -118.141336, + 34.055345 + ], + [ + -118.141421, + 34.05534 + ], + [ + -118.141516, + 34.055317 + ], + [ + -118.141638, + 34.055267 + ], + [ + -118.142438, + 34.054876 + ], + [ + -118.142555, + 34.054792 + ], + [ + -118.142616, + 34.054724 + ], + [ + -118.142659, + 34.05463 + ], + [ + -118.142745, + 34.054375 + ], + [ + -118.142799, + 34.054225 + ], + [ + -118.142858, + 34.054121 + ], + [ + -118.142937, + 34.054041 + ] + ] + ] + }, + "properties": { + "name": "Sequoia Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 46257168, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.151284, + 34.047353 + ], + [ + -118.150669, + 34.047361 + ], + [ + -118.150623, + 34.047329 + ], + [ + -118.150368, + 34.04692 + ], + [ + -118.15061, + 34.046758 + ], + [ + -118.15074, + 34.046644 + ], + [ + -118.150848, + 34.046507 + ], + [ + -118.150912, + 34.046401 + ], + [ + -118.151468, + 34.045231 + ], + [ + -118.15152, + 34.045211 + ], + [ + -118.152163, + 34.045425 + ], + [ + -118.151759, + 34.04627 + ], + [ + -118.151226, + 34.047165 + ], + [ + -118.151284, + 34.047353 + ] + ] + ] + }, + "properties": { + "name": "Sunnyslopes Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 47791506, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.15978, + 34.03608 + ], + [ + -118.159793, + 34.03541 + ], + [ + -118.159541, + 34.035411 + ], + [ + -118.159545, + 34.035161 + ], + [ + -118.159546, + 34.035092 + ], + [ + -118.159543, + 34.034847 + ], + [ + -118.159545, + 34.034706 + ], + [ + -118.159601, + 34.03463 + ], + [ + -118.160142, + 34.034521 + ], + [ + -118.16014, + 34.033517 + ], + [ + -118.159145, + 34.033523 + ], + [ + -118.158492, + 34.033529 + ], + [ + -118.158437, + 34.033711 + ], + [ + -118.158405, + 34.033816 + ], + [ + -118.158356, + 34.033865 + ], + [ + -118.158166, + 34.033811 + ], + [ + -118.158077, + 34.034052 + ], + [ + -118.158104, + 34.034058 + ], + [ + -118.157817, + 34.034774 + ], + [ + -118.157641, + 34.034725 + ], + [ + -118.157584, + 34.034894 + ], + [ + -118.15751, + 34.035001 + ], + [ + -118.157489, + 34.035195 + ], + [ + -118.157496, + 34.035273 + ], + [ + -118.157518, + 34.035534 + ], + [ + -118.157566, + 34.035589 + ], + [ + -118.158212, + 34.03584 + ], + [ + -118.158277, + 34.035866 + ], + [ + -118.158667, + 34.035877 + ], + [ + -118.158655, + 34.036067 + ], + [ + -118.159323, + 34.036095 + ], + [ + -118.15978, + 34.03608 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 51322983, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.124161, + 34.040554 + ], + [ + -118.124166, + 34.040234 + ], + [ + -118.123367, + 34.04023 + ], + [ + -118.123367, + 34.040559 + ], + [ + -118.124161, + 34.040554 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 51323527, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.125086, + 34.041148 + ], + [ + -118.125089, + 34.040957 + ], + [ + -118.125027, + 34.040954 + ], + [ + -118.124939, + 34.040972 + ], + [ + -118.124899, + 34.041005 + ], + [ + -118.124853, + 34.041003 + ], + [ + -118.124751, + 34.040961 + ], + [ + -118.124665, + 34.04097 + ], + [ + -118.124593, + 34.041003 + ], + [ + -118.124566, + 34.041054 + ], + [ + -118.124577, + 34.041168 + ], + [ + -118.1247, + 34.04115 + ], + [ + -118.124891, + 34.041172 + ], + [ + -118.124995, + 34.041163 + ], + [ + -118.125086, + 34.041148 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 51323698, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.122352, + 34.040189 + ], + [ + -118.122725, + 34.040183 + ], + [ + -118.12443, + 34.040175 + ], + [ + -118.12443, + 34.040314 + ], + [ + -118.124413, + 34.040374 + ], + [ + -118.124363, + 34.040478 + ], + [ + -118.124304, + 34.040567 + ], + [ + -118.124267, + 34.04059 + ], + [ + -118.124257, + 34.040633 + ], + [ + -118.124257, + 34.040836 + ], + [ + -118.124294, + 34.040835 + ], + [ + -118.12496, + 34.04084 + ], + [ + -118.124958, + 34.040485 + ], + [ + -118.127881, + 34.040434 + ], + [ + -118.127956, + 34.040621 + ], + [ + -118.127989, + 34.040788 + ], + [ + -118.127989, + 34.040901 + ], + [ + -118.127988, + 34.040948 + ], + [ + -118.127965, + 34.041065 + ], + [ + -118.12791, + 34.041271 + ], + [ + -118.12455, + 34.041286 + ], + [ + -118.124022, + 34.041674 + ], + [ + -118.122352, + 34.040189 + ] + ] + ] + }, + "properties": { + "name": "George E Elder Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 58821945, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.199592, + 34.060003 + ], + [ + -118.199642, + 34.060038 + ], + [ + -118.200237, + 34.060502 + ], + [ + -118.200374, + 34.060382 + ], + [ + -118.201372, + 34.061179 + ], + [ + -118.201491, + 34.061191 + ], + [ + -118.202497, + 34.061198 + ], + [ + -118.20336, + 34.061193 + ], + [ + -118.203406, + 34.06118 + ], + [ + -118.203434, + 34.06115 + ], + [ + -118.203501, + 34.060932 + ], + [ + -118.202468, + 34.060499 + ], + [ + -118.203503, + 34.058997 + ], + [ + -118.202537, + 34.058559 + ], + [ + -118.202328, + 34.058464 + ], + [ + -118.20298, + 34.057694 + ], + [ + -118.203344, + 34.05717 + ], + [ + -118.202996, + 34.057004 + ], + [ + -118.202774, + 34.057362 + ], + [ + -118.202618, + 34.057393 + ], + [ + -118.20157, + 34.056903 + ], + [ + -118.201182, + 34.057492 + ], + [ + -118.200624, + 34.05834 + ], + [ + -118.20005, + 34.059265 + ], + [ + -118.199719, + 34.059783 + ], + [ + -118.199592, + 34.060003 + ] + ] + ] + }, + "properties": { + "name": "Hazard Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 61423753, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.154768, + 34.058661 + ], + [ + -118.154838, + 34.058646 + ], + [ + -118.154154, + 34.057019 + ], + [ + -118.153907, + 34.057059 + ], + [ + -118.153577, + 34.057041 + ], + [ + -118.153309, + 34.056986 + ], + [ + -118.152947, + 34.057419 + ], + [ + -118.152668, + 34.057646 + ], + [ + -118.152448, + 34.057932 + ], + [ + -118.152418, + 34.058875 + ], + [ + -118.153607, + 34.058881 + ], + [ + -118.153883, + 34.058908 + ], + [ + -118.154189, + 34.059079 + ], + [ + -118.154248, + 34.058986 + ], + [ + -118.154393, + 34.058855 + ], + [ + -118.154561, + 34.058744 + ], + [ + -118.154768, + 34.058661 + ] + ] + ] + }, + "properties": { + "name": "Highlands Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 61426904, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.12915, + 34.065527 + ], + [ + -118.127599, + 34.065532 + ], + [ + -118.12761, + 34.066127 + ], + [ + -118.127613, + 34.06619 + ], + [ + -118.12916, + 34.066194 + ], + [ + -118.12915, + 34.065527 + ] + ] + ] + }, + "properties": { + "name": "Langley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 72370044, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.131744, + 34.082681 + ], + [ + -118.131736, + 34.079442 + ], + [ + -118.130537, + 34.079451 + ], + [ + -118.12934, + 34.079464 + ], + [ + -118.12945, + 34.0827 + ], + [ + -118.131744, + 34.082681 + ] + ] + ] + }, + "properties": { + "name": "Moor Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 72370200, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.136687, + 34.05427 + ], + [ + -118.136381, + 34.054154 + ], + [ + -118.136295, + 34.054125 + ], + [ + -118.136228, + 34.054121 + ], + [ + -118.136143, + 34.05415 + ], + [ + -118.136169, + 34.054217 + ], + [ + -118.136215, + 34.054257 + ], + [ + -118.136298, + 34.054301 + ], + [ + -118.136596, + 34.054426 + ], + [ + -118.136687, + 34.05427 + ] + ] + ] + }, + "properties": { + "name": "Cascades Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 72370676, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.260876, + 33.923602 + ], + [ + -118.260893, + 33.920992 + ], + [ + -118.265083, + 33.920974 + ], + [ + -118.265095, + 33.91809 + ], + [ + -118.263441, + 33.918105 + ], + [ + -118.263422, + 33.91646 + ], + [ + -118.256171, + 33.916488 + ], + [ + -118.256135, + 33.917636 + ], + [ + -118.256361, + 33.917775 + ], + [ + -118.256359, + 33.91869 + ], + [ + -118.257827, + 33.918681 + ], + [ + -118.257849, + 33.91821 + ], + [ + -118.259548, + 33.918208 + ], + [ + -118.25955, + 33.920909 + ], + [ + -118.256151, + 33.920937 + ], + [ + -118.256127, + 33.923071 + ], + [ + -118.256109, + 33.9236 + ], + [ + -118.260876, + 33.923602 + ] + ] + ] + }, + "properties": { + "name": "Earvin \"Magic\" Johnson Recreation Area", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 77392980, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.219667, + 34.040021 + ], + [ + -118.21901, + 34.039756 + ], + [ + -118.218216, + 34.040931 + ], + [ + -118.218086, + 34.041043 + ], + [ + -118.217973, + 34.041129 + ], + [ + -118.217466, + 34.041791 + ], + [ + -118.217331, + 34.041952 + ], + [ + -118.217105, + 34.042179 + ], + [ + -118.216693, + 34.042668 + ], + [ + -118.21561, + 34.042197 + ], + [ + -118.216158, + 34.041235 + ], + [ + -118.216486, + 34.04065 + ], + [ + -118.218259, + 34.037794 + ], + [ + -118.219242, + 34.037908 + ], + [ + -118.219432, + 34.038309 + ], + [ + -118.219633, + 34.038825 + ], + [ + -118.219706, + 34.039054 + ], + [ + -118.219731, + 34.039272 + ], + [ + -118.21973, + 34.039571 + ], + [ + -118.219667, + 34.040021 + ] + ] + ] + }, + "properties": { + "name": "Hollenbeck Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 79650238, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.124812, + 34.00686 + ], + [ + -118.125427, + 34.006909 + ], + [ + -118.125462, + 34.006653 + ], + [ + -118.125558, + 34.006653 + ], + [ + -118.125536, + 34.006371 + ], + [ + -118.125488, + 34.006373 + ], + [ + -118.125488, + 34.006349 + ], + [ + -118.125381, + 34.006351 + ], + [ + -118.125376, + 34.006278 + ], + [ + -118.125483, + 34.006273 + ], + [ + -118.125488, + 34.006244 + ], + [ + -118.125521, + 34.006246 + ], + [ + -118.12551, + 34.006149 + ], + [ + -118.125496, + 34.006097 + ], + [ + -118.125451, + 34.006031 + ], + [ + -118.125403, + 34.005973 + ], + [ + -118.125325, + 34.005922 + ], + [ + -118.125266, + 34.005891 + ], + [ + -118.125236, + 34.005879 + ], + [ + -118.125183, + 34.005895 + ], + [ + -118.125094, + 34.006042 + ], + [ + -118.125167, + 34.006084 + ], + [ + -118.125201, + 34.006131 + ], + [ + -118.125209, + 34.006182 + ], + [ + -118.125199, + 34.006237 + ], + [ + -118.125161, + 34.006304 + ], + [ + -118.124869, + 34.006802 + ], + [ + -118.124812, + 34.00686 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 79875677, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.289153, + 34.016559 + ], + [ + -118.289152, + 34.016431 + ], + [ + -118.288484, + 34.016432 + ], + [ + -118.288485, + 34.01656 + ], + [ + -118.287607, + 34.016561 + ], + [ + -118.287606, + 34.015669 + ], + [ + -118.290025, + 34.015666 + ], + [ + -118.290026, + 34.016559 + ], + [ + -118.289153, + 34.016559 + ] + ] + ] + }, + "properties": { + "name": "South Lawn", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 79876375, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.291224, + 34.017936 + ], + [ + -118.290211, + 34.017936 + ], + [ + -118.290224, + 34.017006 + ], + [ + -118.291222, + 34.017003 + ], + [ + -118.291224, + 34.017936 + ] + ] + ] + }, + "properties": { + "name": "Jesse A. Brewer Jr. Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 80579943, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.252961, + 34.047689 + ], + [ + -118.253226, + 34.047519 + ], + [ + -118.253956, + 34.047996 + ], + [ + -118.253192, + 34.048941 + ], + [ + -118.253137, + 34.04901 + ], + [ + -118.252921, + 34.049277 + ], + [ + -118.252901, + 34.049292 + ], + [ + -118.252876, + 34.049301 + ], + [ + -118.252736, + 34.049216 + ], + [ + -118.2527, + 34.049194 + ], + [ + -118.252648, + 34.0491 + ], + [ + -118.25259, + 34.049042 + ], + [ + -118.25248, + 34.048984 + ], + [ + -118.252384, + 34.048935 + ], + [ + -118.252321, + 34.048919 + ], + [ + -118.252134, + 34.048879 + ], + [ + -118.25205, + 34.04882 + ], + [ + -118.252036, + 34.048745 + ], + [ + -118.25211, + 34.048628 + ], + [ + -118.252682, + 34.047999 + ], + [ + -118.252961, + 34.047689 + ] + ] + ] + }, + "properties": { + "name": "Pershing Square", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 81350021, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.26536, + 33.998389 + ], + [ + -118.269518, + 33.998358 + ], + [ + -118.269515, + 33.996627 + ], + [ + -118.265344, + 33.996654 + ], + [ + -118.26536, + 33.998389 + ] + ] + ] + }, + "properties": { + "name": "South Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 95910051, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.137491, + 34.032625 + ], + [ + -118.131192, + 34.032681 + ], + [ + -118.131192, + 34.032381 + ], + [ + -118.13037, + 34.03239 + ], + [ + -118.130178, + 34.031995 + ], + [ + -118.130107, + 34.031875 + ], + [ + -118.129815, + 34.031442 + ], + [ + -118.12972, + 34.031516 + ], + [ + -118.129555, + 34.031615 + ], + [ + -118.129325, + 34.031344 + ], + [ + -118.12901, + 34.030911 + ], + [ + -118.128822, + 34.030589 + ], + [ + -118.128722, + 34.030373 + ], + [ + -118.128612, + 34.030099 + ], + [ + -118.128545, + 34.029916 + ], + [ + -118.128484, + 34.029654 + ], + [ + -118.128448, + 34.029446 + ], + [ + -118.128429, + 34.029272 + ], + [ + -118.12842, + 34.029105 + ], + [ + -118.12843, + 34.028898 + ], + [ + -118.12845, + 34.028655 + ], + [ + -118.128484, + 34.028439 + ], + [ + -118.128564, + 34.028133 + ], + [ + -118.128687, + 34.027821 + ], + [ + -118.128812, + 34.027573 + ], + [ + -118.128976, + 34.027304 + ], + [ + -118.129211, + 34.02699 + ], + [ + -118.129432, + 34.026751 + ], + [ + -118.12958, + 34.026619 + ], + [ + -118.129759, + 34.026465 + ], + [ + -118.130262, + 34.026077 + ], + [ + -118.130486, + 34.026271 + ], + [ + -118.130715, + 34.026338 + ], + [ + -118.130957, + 34.026376 + ], + [ + -118.131191, + 34.026393 + ], + [ + -118.131686, + 34.026353 + ], + [ + -118.131693, + 34.026373 + ], + [ + -118.131914, + 34.026281 + ], + [ + -118.132706, + 34.025669 + ], + [ + -118.132755, + 34.02565 + ], + [ + -118.133569, + 34.025638 + ], + [ + -118.133569, + 34.025657 + ], + [ + -118.133969, + 34.02565 + ], + [ + -118.133969, + 34.025637 + ], + [ + -118.134368, + 34.025635 + ], + [ + -118.134368, + 34.025663 + ], + [ + -118.134717, + 34.025641 + ], + [ + -118.134721, + 34.026079 + ], + [ + -118.135017, + 34.026168 + ], + [ + -118.134915, + 34.026347 + ], + [ + -118.13642, + 34.026345 + ], + [ + -118.136755, + 34.026362 + ], + [ + -118.137088, + 34.026402 + ], + [ + -118.137789, + 34.026539 + ], + [ + -118.137797, + 34.027307 + ], + [ + -118.137448, + 34.027307 + ], + [ + -118.137491, + 34.032625 + ] + ] + ] + }, + "properties": { + "name": "Montebello Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 106733546, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.173694, + 33.925213 + ], + [ + -118.174896, + 33.925391 + ], + [ + -118.174826, + 33.926304 + ], + [ + -118.175588, + 33.926366 + ], + [ + -118.175947, + 33.923464 + ], + [ + -118.175931, + 33.922992 + ], + [ + -118.176221, + 33.920975 + ], + [ + -118.176248, + 33.920377 + ], + [ + -118.176298, + 33.919205 + ], + [ + -118.176527, + 33.918006 + ], + [ + -118.176194, + 33.917984 + ], + [ + -118.175958, + 33.917935 + ], + [ + -118.175749, + 33.917859 + ], + [ + -118.175631, + 33.917792 + ], + [ + -118.175545, + 33.917721 + ], + [ + -118.175465, + 33.917646 + ], + [ + -118.175368, + 33.917588 + ], + [ + -118.175218, + 33.917521 + ], + [ + -118.174912, + 33.917432 + ], + [ + -118.17452, + 33.917298 + ], + [ + -118.17363, + 33.916864 + ], + [ + -118.173652, + 33.92013 + ], + [ + -118.173662, + 33.922168 + ], + [ + -118.173694, + 33.925213 + ] + ] + ] + }, + "properties": { + "name": "Hollydale Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 113057736, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.256525, + 33.91459 + ], + [ + -118.256596, + 33.914651 + ], + [ + -118.258299, + 33.914655 + ], + [ + -118.258391, + 33.914629 + ], + [ + -118.258708, + 33.914631 + ], + [ + -118.258724, + 33.912819 + ], + [ + -118.256565, + 33.912822 + ], + [ + -118.256564, + 33.913068 + ], + [ + -118.256546, + 33.913262 + ], + [ + -118.256525, + 33.91459 + ] + ] + ] + }, + "properties": { + "name": "Enterprise Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 117751121, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.213059, + 34.033177 + ], + [ + -118.213193, + 34.033233 + ], + [ + -118.214067, + 34.033629 + ], + [ + -118.214296, + 34.033731 + ], + [ + -118.214945, + 34.032722 + ], + [ + -118.21487, + 34.032688 + ], + [ + -118.215529, + 34.031655 + ], + [ + -118.215215, + 34.031515 + ], + [ + -118.214352, + 34.031124 + ], + [ + -118.214336, + 34.031188 + ], + [ + -118.214062, + 34.031664 + ], + [ + -118.213958, + 34.031804 + ], + [ + -118.213869, + 34.031926 + ], + [ + -118.21377, + 34.032066 + ], + [ + -118.213354, + 34.032695 + ], + [ + -118.213059, + 34.033177 + ] + ] + ] + }, + "properties": { + "name": "Boyle Heights Sports Center Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 118674161, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.19169, + 34.076816 + ], + [ + -118.191068, + 34.076799 + ], + [ + -118.191132, + 34.07631 + ], + [ + -118.189116, + 34.07535 + ], + [ + -118.187968, + 34.075342 + ], + [ + -118.187077, + 34.07615 + ], + [ + -118.187075, + 34.076808 + ], + [ + -118.18593, + 34.07679 + ], + [ + -118.18594, + 34.073164 + ], + [ + -118.186015, + 34.071814 + ], + [ + -118.186123, + 34.071689 + ], + [ + -118.186431, + 34.071751 + ], + [ + -118.186841, + 34.070569 + ], + [ + -118.188322, + 34.070018 + ], + [ + -118.188738, + 34.069894 + ], + [ + -118.189092, + 34.069903 + ], + [ + -118.189406, + 34.069823 + ], + [ + -118.189749, + 34.069618 + ], + [ + -118.191637, + 34.069618 + ], + [ + -118.19169, + 34.075732 + ], + [ + -118.19169, + 34.076816 + ] + ] + ] + }, + "properties": { + "name": "Ascot Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 136689376, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.208582, + 33.975949 + ], + [ + -118.208507, + 33.976009 + ], + [ + -118.208287, + 33.976067 + ], + [ + -118.208126, + 33.976158 + ], + [ + -118.207985, + 33.976197 + ], + [ + -118.207831, + 33.976199 + ], + [ + -118.204287, + 33.975831 + ], + [ + -118.203939, + 33.974336 + ], + [ + -118.203827, + 33.97385 + ], + [ + -118.203793, + 33.973705 + ], + [ + -118.203428, + 33.972816 + ], + [ + -118.203353, + 33.97262 + ], + [ + -118.203532, + 33.97203 + ], + [ + -118.207148, + 33.972386 + ], + [ + -118.207161, + 33.974337 + ], + [ + -118.20788, + 33.974426 + ], + [ + -118.207945, + 33.974551 + ], + [ + -118.208512, + 33.974914 + ], + [ + -118.208568, + 33.975031 + ], + [ + -118.208573, + 33.975392 + ], + [ + -118.208582, + 33.975949 + ] + ] + ] + }, + "properties": { + "name": "Salt Lake Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 136689508, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.241162, + 33.972726 + ], + [ + -118.2429, + 33.972726 + ], + [ + -118.242901, + 33.967533 + ], + [ + -118.241121, + 33.967536 + ], + [ + -118.241119, + 33.970884 + ], + [ + -118.241162, + 33.972726 + ] + ] + ] + }, + "properties": { + "name": "Roosevelt Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 140790288, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.288765, + 34.022627 + ], + [ + -118.288155, + 34.023592 + ], + [ + -118.289117, + 34.024006 + ], + [ + -118.28923, + 34.023558 + ], + [ + -118.289113, + 34.023527 + ], + [ + -118.289071, + 34.023441 + ], + [ + -118.289409, + 34.022906 + ], + [ + -118.288765, + 34.022627 + ] + ] + ] + }, + "properties": { + "name": "Howard Jones Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 140790292, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.289793, + 34.022444 + ], + [ + -118.289525, + 34.022855 + ], + [ + -118.289409, + 34.022906 + ], + [ + -118.288765, + 34.022627 + ], + [ + -118.289085, + 34.022129 + ], + [ + -118.289793, + 34.022444 + ] + ] + ] + }, + "properties": { + "name": "Kennedy Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 145655684, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.234745, + 34.071391 + ], + [ + -118.234788, + 34.071222 + ], + [ + -118.234745, + 34.071196 + ], + [ + -118.234348, + 34.070951 + ], + [ + -118.234048, + 34.070698 + ], + [ + -118.233973, + 34.070543 + ], + [ + -118.233978, + 34.070356 + ], + [ + -118.234048, + 34.070227 + ], + [ + -118.234082, + 34.070165 + ], + [ + -118.234096, + 34.070138 + ], + [ + -118.234118, + 34.070063 + ], + [ + -118.233578, + 34.070389 + ], + [ + -118.233367, + 34.070409 + ], + [ + -118.232433, + 34.07028 + ], + [ + -118.232117, + 34.070334 + ], + [ + -118.231685, + 34.070394 + ], + [ + -118.230765, + 34.070822 + ], + [ + -118.23172, + 34.073382 + ], + [ + -118.231287, + 34.073509 + ], + [ + -118.231334, + 34.073573 + ], + [ + -118.231538, + 34.073515 + ], + [ + -118.231763, + 34.073524 + ], + [ + -118.23187, + 34.073555 + ], + [ + -118.232267, + 34.074582 + ], + [ + -118.2318, + 34.074706 + ], + [ + -118.231913, + 34.074897 + ], + [ + -118.231994, + 34.074915 + ], + [ + -118.232079, + 34.074888 + ], + [ + -118.232197, + 34.074782 + ], + [ + -118.232696, + 34.074271 + ], + [ + -118.233855, + 34.07296 + ], + [ + -118.234327, + 34.072458 + ], + [ + -118.234515, + 34.072067 + ], + [ + -118.234724, + 34.071431 + ], + [ + -118.234745, + 34.071391 + ] + ] + ] + }, + "properties": { + "name": "Elysian Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 150106746, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.24769, + 33.994774 + ], + [ + -118.245712, + 33.99477 + ], + [ + -118.245715, + 33.993966 + ], + [ + -118.247692, + 33.99397 + ], + [ + -118.24769, + 33.994774 + ] + ] + ] + }, + "properties": { + "name": "James Slauson Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 150106747, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.247679, + 33.991156 + ], + [ + -118.245654, + 33.991154 + ], + [ + -118.245656, + 33.989514 + ], + [ + -118.24766, + 33.989492 + ], + [ + -118.247679, + 33.991156 + ] + ] + ] + }, + "properties": { + "name": "Augustus F. Hawkins Natural Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 154906676, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.284698, + 34.021102 + ], + [ + -118.283931, + 34.020762 + ], + [ + -118.284165, + 34.020401 + ], + [ + -118.284184, + 34.020371 + ], + [ + -118.284203, + 34.020341 + ], + [ + -118.284415, + 34.020013 + ], + [ + -118.284907, + 34.020231 + ], + [ + -118.284859, + 34.020304 + ], + [ + -118.284968, + 34.020352 + ], + [ + -118.284917, + 34.020431 + ], + [ + -118.285083, + 34.020504 + ], + [ + -118.284698, + 34.021102 + ] + ] + ] + }, + "properties": { + "name": "Alumni Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 154906796, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.282634, + 34.019655 + ], + [ + -118.283212, + 34.019909 + ], + [ + -118.283079, + 34.020117 + ], + [ + -118.2825, + 34.019863 + ], + [ + -118.282634, + 34.019655 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 159294824, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.253939, + 33.945541 + ], + [ + -118.25395, + 33.943387 + ], + [ + -118.249253, + 33.943371 + ], + [ + -118.249243, + 33.945525 + ], + [ + -118.253939, + 33.945541 + ] + ] + ] + }, + "properties": { + "name": "Ted Watkins Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 159426178, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.242657, + 33.939867 + ], + [ + -118.242408, + 33.93962 + ], + [ + -118.242227, + 33.939436 + ], + [ + -118.24214, + 33.939362 + ], + [ + -118.242036, + 33.939281 + ], + [ + -118.241876, + 33.939167 + ], + [ + -118.241699, + 33.939057 + ], + [ + -118.241566, + 33.938991 + ], + [ + -118.241438, + 33.938931 + ], + [ + -118.241334, + 33.938912 + ], + [ + -118.240812, + 33.93868 + ], + [ + -118.240811, + 33.938664 + ], + [ + -118.23952, + 33.938097 + ], + [ + -118.239177, + 33.937942 + ], + [ + -118.23913, + 33.937964 + ], + [ + -118.23913, + 33.938205 + ], + [ + -118.240777, + 33.938932 + ], + [ + -118.241298, + 33.939163 + ], + [ + -118.241458, + 33.939244 + ], + [ + -118.241665, + 33.939378 + ], + [ + -118.241942, + 33.939575 + ], + [ + -118.242116, + 33.939724 + ], + [ + -118.242266, + 33.939869 + ], + [ + -118.242421, + 33.940043 + ], + [ + -118.242569, + 33.940244 + ], + [ + -118.242601, + 33.940259 + ], + [ + -118.242636, + 33.94025 + ], + [ + -118.242657, + 33.939867 + ] + ] + ] + }, + "properties": { + "name": "Watts Towers Cultural Crescent", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 159614022, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.242711, + 33.939101 + ], + [ + -118.24225, + 33.939092 + ], + [ + -118.242227, + 33.939436 + ], + [ + -118.24214, + 33.939362 + ], + [ + -118.242036, + 33.939281 + ], + [ + -118.241876, + 33.939167 + ], + [ + -118.241699, + 33.939057 + ], + [ + -118.241566, + 33.938991 + ], + [ + -118.241438, + 33.938931 + ], + [ + -118.241334, + 33.938912 + ], + [ + -118.241352, + 33.938683 + ], + [ + -118.242529, + 33.93869 + ], + [ + -118.242492, + 33.939037 + ], + [ + -118.242711, + 33.939041 + ], + [ + -118.242711, + 33.939101 + ] + ] + ] + }, + "properties": { + "name": "Watts Towers Arts Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 159761760, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.244126, + 33.960048 + ], + [ + -118.244091, + 33.953371 + ], + [ + -118.243404, + 33.953381 + ], + [ + -118.243447, + 33.960055 + ], + [ + -118.244126, + 33.960048 + ] + ] + ] + }, + "properties": { + "name": "Colonel Leo H Washington Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 159936384, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.244002, + 33.982452 + ], + [ + -118.243994, + 33.982147 + ], + [ + -118.24352, + 33.982144 + ], + [ + -118.243526, + 33.982882 + ], + [ + -118.243607, + 33.982745 + ], + [ + -118.243741, + 33.982598 + ], + [ + -118.24387, + 33.9825 + ], + [ + -118.244002, + 33.982452 + ] + ] + ] + }, + "properties": { + "name": "El Nuestro Parque", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 161929504, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.243216, + 34.054482 + ], + [ + -118.243921, + 34.053804 + ], + [ + -118.247941, + 34.05642 + ], + [ + -118.247851, + 34.056507 + ], + [ + -118.247787, + 34.056692 + ], + [ + -118.247652, + 34.056844 + ], + [ + -118.247555, + 34.056954 + ], + [ + -118.247377, + 34.057018 + ], + [ + -118.24725, + 34.057131 + ], + [ + -118.243216, + 34.054482 + ] + ] + ] + }, + "properties": { + "name": "Grand Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 163355312, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.137183, + 34.014119 + ], + [ + -118.137155, + 34.014173 + ], + [ + -118.137119, + 34.014189 + ], + [ + -118.136603, + 34.014091 + ], + [ + -118.136689, + 34.013459 + ], + [ + -118.136123, + 34.01341 + ], + [ + -118.136105, + 34.013387 + ], + [ + -118.136206, + 34.012424 + ], + [ + -118.137265, + 34.012569 + ], + [ + -118.13731, + 34.01258 + ], + [ + -118.137341, + 34.012608 + ], + [ + -118.137355, + 34.012637 + ], + [ + -118.137364, + 34.012691 + ], + [ + -118.137183, + 34.014119 + ] + ] + ] + }, + "properties": { + "name": "Saybrook Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172304995, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.195148, + 34.058313 + ], + [ + -118.194394, + 34.05953 + ], + [ + -118.194918, + 34.059768 + ], + [ + -118.195295, + 34.059175 + ], + [ + -118.195322, + 34.059137 + ], + [ + -118.195877, + 34.05819 + ], + [ + -118.196, + 34.057982 + ], + [ + -118.195717, + 34.058004 + ], + [ + -118.195624, + 34.057963 + ], + [ + -118.195517, + 34.058139 + ], + [ + -118.195406, + 34.058321 + ], + [ + -118.195324, + 34.058347 + ], + [ + -118.1952, + 34.058292 + ], + [ + -118.195174, + 34.058322 + ], + [ + -118.195148, + 34.058313 + ] + ] + ] + }, + "properties": { + "name": "Henry Alvarez Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172470301, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.287537, + 34.017629 + ], + [ + -118.284672, + 34.017626 + ], + [ + -118.284682, + 34.016659 + ], + [ + -118.287535, + 34.016654 + ], + [ + -118.287537, + 34.017629 + ] + ] + ] + }, + "properties": { + "name": "Exposition Park Rose Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172589832, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.212498, + 34.052379 + ], + [ + -118.21337, + 34.052753 + ], + [ + -118.212881, + 34.05345 + ], + [ + -118.212397, + 34.053171 + ], + [ + -118.212133, + 34.05304 + ], + [ + -118.211764, + 34.052872 + ], + [ + -118.211981, + 34.052543 + ], + [ + -118.211868, + 34.0525 + ], + [ + -118.212068, + 34.05219 + ], + [ + -118.212498, + 34.052379 + ] + ] + ] + }, + "properties": { + "name": "State Street Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172609873, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.287535, + 34.018012 + ], + [ + -118.287537, + 34.017629 + ], + [ + -118.284672, + 34.017626 + ], + [ + -118.284667, + 34.017856 + ], + [ + -118.284667, + 34.01804 + ], + [ + -118.285038, + 34.018043 + ], + [ + -118.285082, + 34.018036 + ], + [ + -118.285141, + 34.018003 + ], + [ + -118.287535, + 34.018012 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172739502, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.286714, + 34.01646 + ], + [ + -118.286713, + 34.016326 + ], + [ + -118.28622, + 34.016326 + ], + [ + -118.285995, + 34.016325 + ], + [ + -118.285561, + 34.016324 + ], + [ + -118.285557, + 34.016298 + ], + [ + -118.285557, + 34.016205 + ], + [ + -118.285413, + 34.016193 + ], + [ + -118.285413, + 34.016308 + ], + [ + -118.284675, + 34.016309 + ], + [ + -118.284536, + 34.016309 + ], + [ + -118.284495, + 34.016309 + ], + [ + -118.284117, + 34.016309 + ], + [ + -118.284118, + 34.016338 + ], + [ + -118.284085, + 34.01636 + ], + [ + -118.284026, + 34.016359 + ], + [ + -118.284022, + 34.016385 + ], + [ + -118.284011, + 34.016396 + ], + [ + -118.283878, + 34.016396 + ], + [ + -118.283842, + 34.0164 + ], + [ + -118.283952, + 34.016462 + ], + [ + -118.285995, + 34.016459 + ], + [ + -118.286109, + 34.016459 + ], + [ + -118.286219, + 34.016458 + ], + [ + -118.286231, + 34.016458 + ], + [ + -118.28661, + 34.016458 + ], + [ + -118.286714, + 34.01646 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172739513, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.283125, + 34.014379 + ], + [ + -118.283097, + 34.014378 + ], + [ + -118.283056, + 34.014378 + ], + [ + -118.282996, + 34.014377 + ], + [ + -118.282944, + 34.01439 + ], + [ + -118.282935, + 34.014375 + ], + [ + -118.282933, + 34.014188 + ], + [ + -118.282948, + 34.014166 + ], + [ + -118.282972, + 34.014164 + ], + [ + -118.282982, + 34.014134 + ], + [ + -118.282992, + 34.014166 + ], + [ + -118.283002, + 34.014193 + ], + [ + -118.283015, + 34.014221 + ], + [ + -118.283035, + 34.014252 + ], + [ + -118.283058, + 34.014273 + ], + [ + -118.283079, + 34.014296 + ], + [ + -118.283106, + 34.014325 + ], + [ + -118.283119, + 34.01435 + ], + [ + -118.283125, + 34.014379 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172739676, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.286519, + 34.015335 + ], + [ + -118.286573, + 34.015121 + ], + [ + -118.286426, + 34.015044 + ], + [ + -118.286297, + 34.014961 + ], + [ + -118.286178, + 34.014868 + ], + [ + -118.286048, + 34.014732 + ], + [ + -118.286013, + 34.014679 + ], + [ + -118.286182, + 34.014578 + ], + [ + -118.286151, + 34.014531 + ], + [ + -118.286114, + 34.014475 + ], + [ + -118.286062, + 34.01437 + ], + [ + -118.286018, + 34.014246 + ], + [ + -118.285991, + 34.014172 + ], + [ + -118.285984, + 34.014119 + ], + [ + -118.285933, + 34.014123 + ], + [ + -118.28593, + 34.01421 + ], + [ + -118.285881, + 34.014263 + ], + [ + -118.285823, + 34.014294 + ], + [ + -118.285761, + 34.014299 + ], + [ + -118.285686, + 34.014299 + ], + [ + -118.285635, + 34.01427 + ], + [ + -118.285599, + 34.014232 + ], + [ + -118.285565, + 34.014244 + ], + [ + -118.285523, + 34.014259 + ], + [ + -118.285533, + 34.014315 + ], + [ + -118.285549, + 34.014367 + ], + [ + -118.285612, + 34.01447 + ], + [ + -118.285697, + 34.014617 + ], + [ + -118.285806, + 34.014797 + ], + [ + -118.285916, + 34.014946 + ], + [ + -118.286031, + 34.015064 + ], + [ + -118.286178, + 34.015173 + ], + [ + -118.28632, + 34.015255 + ], + [ + -118.286433, + 34.015313 + ], + [ + -118.286519, + 34.015335 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172739677, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.286523, + 34.012927 + ], + [ + -118.286464, + 34.012754 + ], + [ + -118.28628, + 34.012838 + ], + [ + -118.28612, + 34.012951 + ], + [ + -118.286001, + 34.013061 + ], + [ + -118.285868, + 34.013207 + ], + [ + -118.285725, + 34.013379 + ], + [ + -118.28562, + 34.013548 + ], + [ + -118.285564, + 34.013667 + ], + [ + -118.28553, + 34.013741 + ], + [ + -118.285572, + 34.013758 + ], + [ + -118.285616, + 34.013776 + ], + [ + -118.285658, + 34.013743 + ], + [ + -118.285725, + 34.013739 + ], + [ + -118.285807, + 34.013745 + ], + [ + -118.285865, + 34.013781 + ], + [ + -118.285899, + 34.013841 + ], + [ + -118.285916, + 34.013961 + ], + [ + -118.285986, + 34.013962 + ], + [ + -118.286028, + 34.013789 + ], + [ + -118.286056, + 34.013685 + ], + [ + -118.286087, + 34.013612 + ], + [ + -118.286076, + 34.013484 + ], + [ + -118.286087, + 34.013465 + ], + [ + -118.286099, + 34.013445 + ], + [ + -118.286055, + 34.013422 + ], + [ + -118.286095, + 34.013337 + ], + [ + -118.28619, + 34.013214 + ], + [ + -118.286324, + 34.013079 + ], + [ + -118.286363, + 34.013042 + ], + [ + -118.286523, + 34.012927 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 173100635, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.218132, + 34.054042 + ], + [ + -118.218196, + 34.053935 + ], + [ + -118.218239, + 34.053819 + ], + [ + -118.218239, + 34.053717 + ], + [ + -118.218196, + 34.053624 + ], + [ + -118.218115, + 34.053451 + ], + [ + -118.218072, + 34.053309 + ], + [ + -118.218067, + 34.053202 + ], + [ + -118.218067, + 34.053109 + ], + [ + -118.218062, + 34.052988 + ], + [ + -118.217847, + 34.053082 + ], + [ + -118.217686, + 34.053158 + ], + [ + -118.217488, + 34.053198 + ], + [ + -118.217305, + 34.05322 + ], + [ + -118.21715, + 34.053264 + ], + [ + -118.217064, + 34.053339 + ], + [ + -118.216957, + 34.053446 + ], + [ + -118.216903, + 34.053589 + ], + [ + -118.216903, + 34.053722 + ], + [ + -118.216951, + 34.053877 + ], + [ + -118.217048, + 34.05401 + ], + [ + -118.217225, + 34.054099 + ], + [ + -118.217429, + 34.054176 + ], + [ + -118.217627, + 34.054202 + ], + [ + -118.217853, + 34.054184 + ], + [ + -118.217981, + 34.054149 + ], + [ + -118.218132, + 34.054042 + ] + ] + ] + }, + "properties": { + "name": "Prospect Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 173100652, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.207456, + 34.065983 + ], + [ + -118.207558, + 34.065979 + ], + [ + -118.207601, + 34.065925 + ], + [ + -118.207601, + 34.06585 + ], + [ + -118.207295, + 34.065646 + ], + [ + -118.206544, + 34.065993 + ], + [ + -118.207456, + 34.065983 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 173101108, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.2438, + 34.053504 + ], + [ + -118.242899, + 34.052917 + ], + [ + -118.243403, + 34.052393 + ], + [ + -118.243511, + 34.052393 + ], + [ + -118.244267, + 34.052931 + ], + [ + -118.244267, + 34.053009 + ], + [ + -118.2438, + 34.053504 + ] + ] + ] + }, + "properties": { + "name": "Los Angeles City Hall Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 173105829, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.258461, + 34.061673 + ], + [ + -118.258472, + 34.061619 + ], + [ + -118.258459, + 34.061543 + ], + [ + -118.2584, + 34.061499 + ], + [ + -118.257284, + 34.060988 + ], + [ + -118.257201, + 34.060886 + ], + [ + -118.256579, + 34.060639 + ], + [ + -118.256201, + 34.061224 + ], + [ + -118.256195, + 34.061329 + ], + [ + -118.256068, + 34.061334 + ], + [ + -118.255811, + 34.061535 + ], + [ + -118.255329, + 34.062322 + ], + [ + -118.256321, + 34.062735 + ], + [ + -118.256556, + 34.062354 + ], + [ + -118.256945, + 34.062526 + ], + [ + -118.256912, + 34.062575 + ], + [ + -118.257292, + 34.06274 + ], + [ + -118.257407, + 34.062569 + ], + [ + -118.257774, + 34.06271 + ], + [ + -118.258461, + 34.061673 + ] + ] + ] + }, + "properties": { + "name": "Vista Hermosa Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 174196291, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.25148, + 34.021282 + ], + [ + -118.25025, + 34.020604 + ], + [ + -118.250549, + 34.020282 + ], + [ + -118.251782, + 34.020935 + ], + [ + -118.25148, + 34.021282 + ] + ] + ] + }, + "properties": { + "name": "Central Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 174249840, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.222783, + 34.069569 + ], + [ + -118.222069, + 34.069878 + ], + [ + -118.2227, + 34.070904 + ], + [ + -118.22286, + 34.070831 + ], + [ + -118.223107, + 34.071232 + ], + [ + -118.223665, + 34.070992 + ], + [ + -118.222783, + 34.069569 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 175668375, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.28751, + 34.016607 + ], + [ + -118.28751, + 34.016564 + ], + [ + -118.286174, + 34.016567 + ], + [ + -118.286176, + 34.016614 + ], + [ + -118.28751, + 34.016607 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 176076236, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.244007, + 34.001852 + ], + [ + -118.243501, + 34.001854 + ], + [ + -118.243554, + 33.99946 + ], + [ + -118.244004, + 33.999458 + ], + [ + -118.244005, + 33.99999 + ], + [ + -118.244006, + 34.00184 + ], + [ + -118.244007, + 34.001852 + ] + ] + ] + }, + "properties": { + "name": "Fred Roberts Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 188826243, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.205137, + 34.060847 + ], + [ + -118.204818, + 34.06071 + ], + [ + -118.204989, + 34.060437 + ], + [ + -118.205308, + 34.060574 + ], + [ + -118.205137, + 34.060847 + ] + ] + ] + }, + "properties": { + "name": "LA-USC Health Sciences Plaza", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192131067, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.11411, + 34.066174 + ], + [ + -118.115348, + 34.066176 + ], + [ + -118.115357, + 34.065005 + ], + [ + -118.114649, + 34.065008 + ], + [ + -118.114649, + 34.064943 + ], + [ + -118.114112, + 34.064942 + ], + [ + -118.11411, + 34.066174 + ] + ] + ] + }, + "properties": { + "name": "Sierra Vista Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192161723, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.113155, + 34.054126 + ], + [ + -118.114738, + 34.054162 + ], + [ + -118.115199, + 34.053193 + ], + [ + -118.116159, + 34.053493 + ], + [ + -118.116259, + 34.053519 + ], + [ + -118.116363, + 34.053528 + ], + [ + -118.116508, + 34.053525 + ], + [ + -118.116505, + 34.052767 + ], + [ + -118.116508, + 34.052659 + ], + [ + -118.115634, + 34.052157 + ], + [ + -118.114416, + 34.051726 + ], + [ + -118.114249, + 34.051522 + ], + [ + -118.114013, + 34.051035 + ], + [ + -118.113884, + 34.050933 + ], + [ + -118.113546, + 34.050768 + ], + [ + -118.112742, + 34.050397 + ], + [ + -118.112807, + 34.050562 + ], + [ + -118.112828, + 34.050695 + ], + [ + -118.112844, + 34.050908 + ], + [ + -118.112839, + 34.052984 + ], + [ + -118.112844, + 34.053135 + ], + [ + -118.11286, + 34.05323 + ], + [ + -118.11293, + 34.053344 + ], + [ + -118.11309, + 34.053622 + ], + [ + -118.113177, + 34.053784 + ], + [ + -118.113193, + 34.053904 + ], + [ + -118.113182, + 34.054015 + ], + [ + -118.113155, + 34.054126 + ] + ] + ] + }, + "properties": { + "name": "Garvey Ranch Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192181276, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.245392, + 34.051723 + ], + [ + -118.24474, + 34.051304 + ], + [ + -118.244606, + 34.051452 + ], + [ + -118.245259, + 34.05187 + ], + [ + -118.245392, + 34.051723 + ] + ] + ] + }, + "properties": { + "name": "LAPD Lawn Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 192716805, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.127418, + 34.056636 + ], + [ + -118.125575, + 34.056654 + ], + [ + -118.125602, + 34.05888 + ], + [ + -118.12744, + 34.058884 + ], + [ + -118.12744, + 34.058862 + ], + [ + -118.127386, + 34.0588 + ], + [ + -118.127381, + 34.058239 + ], + [ + -118.127382, + 34.057369 + ], + [ + -118.127381, + 34.05701 + ], + [ + -118.127418, + 34.056988 + ], + [ + -118.127418, + 34.056636 + ] + ] + ] + }, + "properties": { + "name": "Barnes Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 202892957, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.191094, + 34.023764 + ], + [ + -118.191085, + 34.022551 + ], + [ + -118.191199, + 34.022112 + ], + [ + -118.191203, + 34.021973 + ], + [ + -118.189353, + 34.022004 + ], + [ + -118.189373, + 34.02379 + ], + [ + -118.189408, + 34.023812 + ], + [ + -118.190973, + 34.02381 + ], + [ + -118.19103, + 34.02381 + ], + [ + -118.191064, + 34.023803 + ], + [ + -118.191087, + 34.023785 + ], + [ + -118.191094, + 34.023764 + ] + ] + ] + }, + "properties": { + "name": "Salazar Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 202894807, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.211689, + 34.021787 + ], + [ + -118.21002, + 34.021039 + ], + [ + -118.210498, + 34.020288 + ], + [ + -118.211398, + 34.020692 + ], + [ + -118.212134, + 34.021022 + ], + [ + -118.211704, + 34.02176 + ], + [ + -118.211689, + 34.021787 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 202895457, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.206947, + 34.027731 + ], + [ + -118.206904, + 34.027669 + ], + [ + -118.206904, + 34.027606 + ], + [ + -118.20743, + 34.026775 + ], + [ + -118.206142, + 34.026179 + ], + [ + -118.205272, + 34.026815 + ], + [ + -118.205179, + 34.027081 + ], + [ + -118.204918, + 34.027824 + ], + [ + -118.204977, + 34.027913 + ], + [ + -118.205006, + 34.027991 + ], + [ + -118.206947, + 34.027731 + ] + ] + ] + }, + "properties": { + "name": "Ramon Garcia Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 202907162, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.16776, + 34.011995 + ], + [ + -118.166783, + 34.013534 + ], + [ + -118.168025, + 34.014074 + ], + [ + -118.168629, + 34.014334 + ], + [ + -118.169042, + 34.014454 + ], + [ + -118.169916, + 34.01276 + ], + [ + -118.16776, + 34.011995 + ] + ] + ] + }, + "properties": { + "name": "Bristow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 202918569, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.198533, + 34.05079 + ], + [ + -118.198082, + 34.05148 + ], + [ + -118.198104, + 34.051577 + ], + [ + -118.19798, + 34.051577 + ], + [ + -118.197873, + 34.051564 + ], + [ + -118.197744, + 34.051522 + ], + [ + -118.197272, + 34.051328 + ], + [ + -118.197539, + 34.050892 + ], + [ + -118.197793, + 34.050477 + ], + [ + -118.198533, + 34.05079 + ] + ] + ] + }, + "properties": { + "name": "Wabash Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 203433130, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.205872, + 34.038518 + ], + [ + -118.205392, + 34.039269 + ], + [ + -118.205121, + 34.03915 + ], + [ + -118.20492, + 34.039464 + ], + [ + -118.203548, + 34.038863 + ], + [ + -118.204451, + 34.037447 + ], + [ + -118.205836, + 34.038054 + ], + [ + -118.205612, + 34.038404 + ], + [ + -118.205872, + 34.038518 + ] + ] + ] + }, + "properties": { + "name": "Evergreen Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 203436191, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.25396, + 33.98419 + ], + [ + -118.253963, + 33.984269 + ], + [ + -118.252218, + 33.984271 + ], + [ + -118.252188, + 33.982958 + ], + [ + -118.253633, + 33.982952 + ], + [ + -118.253705, + 33.982952 + ], + [ + -118.253711, + 33.983486 + ], + [ + -118.253938, + 33.983485 + ], + [ + -118.25396, + 33.98419 + ] + ] + ] + }, + "properties": { + "name": "Mary McLeod Bethune County Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 203436777, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.270039, + 33.99329 + ], + [ + -118.26537, + 33.993318 + ], + [ + -118.26537, + 33.993001 + ], + [ + -118.265361, + 33.992549 + ], + [ + -118.270049, + 33.992512 + ], + [ + -118.270039, + 33.99329 + ] + ] + ] + }, + "properties": { + "name": "South Los Angeles Wetlands Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 203438958, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.24541, + 34.044646 + ], + [ + -118.245096, + 34.044544 + ], + [ + -118.245351, + 34.044168 + ], + [ + -118.24563, + 34.04429 + ], + [ + -118.24541, + 34.044646 + ] + ] + ] + }, + "properties": { + "name": "San Julian Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 205728923, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.161741, + 34.037151 + ], + [ + -118.160604, + 34.037098 + ], + [ + -118.160454, + 34.037093 + ], + [ + -118.160459, + 34.038422 + ], + [ + -118.160341, + 34.038427 + ], + [ + -118.159381, + 34.038058 + ], + [ + -118.159365, + 34.037107 + ], + [ + -118.157289, + 34.037151 + ], + [ + -118.157342, + 34.04056 + ], + [ + -118.16018, + 34.040529 + ], + [ + -118.160175, + 34.03968 + ], + [ + -118.161784, + 34.039667 + ], + [ + -118.161741, + 34.037151 + ] + ] + ] + }, + "properties": { + "name": "Belvedere Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 206420459, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.248783, + 34.049964 + ], + [ + -118.248667, + 34.050075 + ], + [ + -118.248445, + 34.049929 + ], + [ + -118.248391, + 34.049985 + ], + [ + -118.24821, + 34.049868 + ], + [ + -118.248363, + 34.04969 + ], + [ + -118.248396, + 34.049712 + ], + [ + -118.248783, + 34.049964 + ] + ] + ] + }, + "properties": { + "name": "Biddy Mason Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 206783152, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.244557, + 34.057869 + ], + [ + -118.244203, + 34.057591 + ], + [ + -118.244413, + 34.05738 + ], + [ + -118.244498, + 34.057445 + ], + [ + -118.24444, + 34.057524 + ], + [ + -118.244598, + 34.057601 + ], + [ + -118.244491, + 34.057797 + ], + [ + -118.244577, + 34.05785 + ], + [ + -118.244557, + 34.057869 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 206783874, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.245852, + 34.058548 + ], + [ + -118.245637, + 34.058738 + ], + [ + -118.245608, + 34.058719 + ], + [ + -118.245617, + 34.058676 + ], + [ + -118.245703, + 34.058607 + ], + [ + -118.245541, + 34.058556 + ], + [ + -118.24552, + 34.058625 + ], + [ + -118.245487, + 34.058628 + ], + [ + -118.245253, + 34.058439 + ], + [ + -118.245246, + 34.058455 + ], + [ + -118.245189, + 34.058409 + ], + [ + -118.24518, + 34.058425 + ], + [ + -118.244755, + 34.058089 + ], + [ + -118.244784, + 34.058064 + ], + [ + -118.244866, + 34.05809 + ], + [ + -118.244871, + 34.058105 + ], + [ + -118.245665, + 34.05839 + ], + [ + -118.245685, + 34.058355 + ], + [ + -118.245719, + 34.058368 + ], + [ + -118.245661, + 34.058423 + ], + [ + -118.245772, + 34.058531 + ], + [ + -118.245952, + 34.058404 + ], + [ + -118.245964, + 34.058408 + ], + [ + -118.245852, + 34.058548 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 217104643, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.194839, + 34.056218 + ], + [ + -118.194846, + 34.056086 + ], + [ + -118.194519, + 34.056075 + ], + [ + -118.194513, + 34.056206 + ], + [ + -118.194839, + 34.056218 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 217104967, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.19522, + 34.056773 + ], + [ + -118.194967, + 34.056664 + ], + [ + -118.194841, + 34.05661 + ], + [ + -118.194717, + 34.056556 + ], + [ + -118.194921, + 34.056255 + ], + [ + -118.19541, + 34.056287 + ], + [ + -118.195419, + 34.056326 + ], + [ + -118.195444, + 34.056353 + ], + [ + -118.195464, + 34.056399 + ], + [ + -118.19522, + 34.056773 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 218115772, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.194985, + 34.057011 + ], + [ + -118.194968, + 34.057032 + ], + [ + -118.194868, + 34.057012 + ], + [ + -118.194727, + 34.057001 + ], + [ + -118.194643, + 34.057001 + ], + [ + -118.194423, + 34.057032 + ], + [ + -118.194407, + 34.057 + ], + [ + -118.194454, + 34.056928 + ], + [ + -118.194485, + 34.05694 + ], + [ + -118.194594, + 34.056988 + ], + [ + -118.194671, + 34.056871 + ], + [ + -118.194985, + 34.057011 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 218122799, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.193946, + 34.058397 + ], + [ + -118.194033, + 34.058436 + ], + [ + -118.193993, + 34.058498 + ], + [ + -118.193903, + 34.058458 + ], + [ + -118.193946, + 34.058397 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 218401241, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.193828, + 34.060383 + ], + [ + -118.193783, + 34.060463 + ], + [ + -118.194021, + 34.060567 + ], + [ + -118.194065, + 34.060491 + ], + [ + -118.193979, + 34.0605 + ], + [ + -118.193895, + 34.060465 + ], + [ + -118.193828, + 34.060383 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 218554969, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.194351, + 34.058387 + ], + [ + -118.19431, + 34.05846 + ], + [ + -118.194307, + 34.058464 + ], + [ + -118.1943, + 34.058483 + ], + [ + -118.194306, + 34.058498 + ], + [ + -118.194409, + 34.058473 + ], + [ + -118.194439, + 34.058422 + ], + [ + -118.194351, + 34.058387 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 218604975, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.19419, + 34.057335 + ], + [ + -118.194244, + 34.057462 + ], + [ + -118.194316, + 34.05744 + ], + [ + -118.194299, + 34.057396 + ], + [ + -118.194334, + 34.057387 + ], + [ + -118.194327, + 34.057385 + ], + [ + -118.19419, + 34.057335 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 218604981, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.193911, + 34.057749 + ], + [ + -118.194092, + 34.057707 + ], + [ + -118.194113, + 34.057761 + ], + [ + -118.194064, + 34.057773 + ], + [ + -118.194095, + 34.057844 + ], + [ + -118.19412, + 34.057838 + ], + [ + -118.194142, + 34.057878 + ], + [ + -118.194156, + 34.057875 + ], + [ + -118.194169, + 34.057905 + ], + [ + -118.194111, + 34.05792 + ], + [ + -118.194092, + 34.057869 + ], + [ + -118.194084, + 34.057846 + ], + [ + -118.19407, + 34.05781 + ], + [ + -118.193911, + 34.057749 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 218949963, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.19665, + 34.057701 + ], + [ + -118.196626, + 34.057738 + ], + [ + -118.196494, + 34.057682 + ], + [ + -118.196548, + 34.057597 + ], + [ + -118.196591, + 34.057615 + ], + [ + -118.196582, + 34.057628 + ], + [ + -118.196622, + 34.057653 + ], + [ + -118.196604, + 34.057681 + ], + [ + -118.19665, + 34.057701 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 219010513, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.243017, + 34.05217 + ], + [ + -118.242813, + 34.052371 + ], + [ + -118.242915, + 34.052428 + ], + [ + -118.24282, + 34.052528 + ], + [ + -118.242882, + 34.052566 + ], + [ + -118.243148, + 34.052309 + ], + [ + -118.243144, + 34.052252 + ], + [ + -118.243017, + 34.05217 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 222254244, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.240367, + 34.069192 + ], + [ + -118.240378, + 34.069352 + ], + [ + -118.240536, + 34.06941 + ], + [ + -118.241561, + 34.069877 + ], + [ + -118.242864, + 34.070472 + ], + [ + -118.243556, + 34.070845 + ], + [ + -118.244235, + 34.071102 + ], + [ + -118.244621, + 34.071253 + ], + [ + -118.244924, + 34.071352 + ], + [ + -118.245109, + 34.071347 + ], + [ + -118.245316, + 34.071281 + ], + [ + -118.245597, + 34.071151 + ], + [ + -118.245665, + 34.071134 + ], + [ + -118.245828, + 34.07132 + ], + [ + -118.246303, + 34.071734 + ], + [ + -118.246512, + 34.07201 + ], + [ + -118.246751, + 34.072213 + ], + [ + -118.246724, + 34.072258 + ], + [ + -118.246606, + 34.072284 + ], + [ + -118.246493, + 34.072253 + ], + [ + -118.246397, + 34.072289 + ], + [ + -118.24648, + 34.072121 + ], + [ + -118.246212, + 34.071836 + ], + [ + -118.245721, + 34.071568 + ], + [ + -118.245654, + 34.071522 + ], + [ + -118.245614, + 34.071553 + ], + [ + -118.245449, + 34.071688 + ], + [ + -118.244991, + 34.071849 + ], + [ + -118.244728, + 34.071853 + ], + [ + -118.244375, + 34.071795 + ], + [ + -118.244045, + 34.071679 + ], + [ + -118.243988, + 34.071658 + ], + [ + -118.243173, + 34.071221 + ], + [ + -118.243119, + 34.071191 + ], + [ + -118.242159, + 34.070668 + ], + [ + -118.241834, + 34.070503 + ], + [ + -118.241295, + 34.070302 + ], + [ + -118.24113, + 34.070248 + ], + [ + -118.240719, + 34.0701 + ], + [ + -118.239884, + 34.069712 + ], + [ + -118.239638, + 34.069616 + ], + [ + -118.238973, + 34.06968 + ], + [ + -118.23886, + 34.069734 + ], + [ + -118.238578, + 34.069952 + ], + [ + -118.23827, + 34.070189 + ], + [ + -118.23801, + 34.070445 + ], + [ + -118.237755, + 34.070691 + ], + [ + -118.237277, + 34.071136 + ], + [ + -118.237073, + 34.071332 + ], + [ + -118.237036, + 34.07151 + ], + [ + -118.236964, + 34.07168 + ], + [ + -118.236805, + 34.071933 + ], + [ + -118.236623, + 34.072227 + ], + [ + -118.23629, + 34.072885 + ], + [ + -118.236221, + 34.0731 + ], + [ + -118.236239, + 34.073214 + ], + [ + -118.23632, + 34.073374 + ], + [ + -118.23643, + 34.073489 + ], + [ + -118.236301, + 34.073444 + ], + [ + -118.236159, + 34.073298 + ], + [ + -118.236116, + 34.073135 + ], + [ + -118.23614, + 34.072683 + ], + [ + -118.236441, + 34.071885 + ], + [ + -118.236701, + 34.07132 + ], + [ + -118.236953, + 34.070923 + ], + [ + -118.237304, + 34.070545 + ], + [ + -118.23758, + 34.070214 + ], + [ + -118.237736, + 34.069847 + ], + [ + -118.237728, + 34.069583 + ], + [ + -118.237779, + 34.069408 + ], + [ + -118.238061, + 34.069132 + ], + [ + -118.239104, + 34.068461 + ], + [ + -118.239292, + 34.068492 + ], + [ + -118.239428, + 34.068485 + ], + [ + -118.239611, + 34.068394 + ], + [ + -118.239817, + 34.068341 + ], + [ + -118.239946, + 34.068356 + ], + [ + -118.240107, + 34.06843 + ], + [ + -118.240255, + 34.06849 + ], + [ + -118.24034, + 34.068672 + ], + [ + -118.240375, + 34.06886 + ], + [ + -118.240367, + 34.069192 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 223766741, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.151944, + 33.956137 + ], + [ + -118.150723, + 33.956762 + ], + [ + -118.149369, + 33.95752 + ], + [ + -118.147788, + 33.958372 + ], + [ + -118.146773, + 33.95793 + ], + [ + -118.145729, + 33.957285 + ], + [ + -118.144749, + 33.956693 + ], + [ + -118.142913, + 33.955779 + ], + [ + -118.144353, + 33.953884 + ], + [ + -118.144629, + 33.954024 + ], + [ + -118.14503, + 33.953862 + ], + [ + -118.145105, + 33.953804 + ], + [ + -118.145276, + 33.953824 + ], + [ + -118.145522, + 33.953966 + ], + [ + -118.145994, + 33.953468 + ], + [ + -118.145636, + 33.953209 + ], + [ + -118.145713, + 33.953072 + ], + [ + -118.14592, + 33.953097 + ], + [ + -118.145998, + 33.953032 + ], + [ + -118.146258, + 33.952708 + ], + [ + -118.146619, + 33.952869 + ], + [ + -118.147891, + 33.953543 + ], + [ + -118.148758, + 33.952407 + ], + [ + -118.151497, + 33.953839 + ], + [ + -118.152533, + 33.952741 + ], + [ + -118.154677, + 33.95399 + ], + [ + -118.154173, + 33.954823 + ], + [ + -118.153306, + 33.955319 + ], + [ + -118.152703, + 33.955746 + ], + [ + -118.15262, + 33.955602 + ], + [ + -118.151944, + 33.956137 + ] + ] + ] + }, + "properties": { + "name": "Rio Hondo Golf Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 223766742, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.155378, + 33.959279 + ], + [ + -118.152807, + 33.959008 + ], + [ + -118.1526, + 33.958987 + ], + [ + -118.152437, + 33.958993 + ], + [ + -118.152282, + 33.959018 + ], + [ + -118.15212, + 33.959066 + ], + [ + -118.148854, + 33.960218 + ], + [ + -118.148775, + 33.960065 + ], + [ + -118.148909, + 33.96002 + ], + [ + -118.148491, + 33.959207 + ], + [ + -118.148568, + 33.959182 + ], + [ + -118.148352, + 33.958756 + ], + [ + -118.152693, + 33.956453 + ], + [ + -118.152916, + 33.956706 + ], + [ + -118.155018, + 33.956937 + ], + [ + -118.155139, + 33.957061 + ], + [ + -118.155254, + 33.957198 + ], + [ + -118.155279, + 33.957372 + ], + [ + -118.155346, + 33.957507 + ], + [ + -118.155464, + 33.957585 + ], + [ + -118.155698, + 33.957612 + ], + [ + -118.155378, + 33.959279 + ] + ] + ] + }, + "properties": { + "name": "John Anson Ford Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 233449135, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.182352, + 34.075705 + ], + [ + -118.180231, + 34.075726 + ], + [ + -118.17998, + 34.076113 + ], + [ + -118.179743, + 34.076474 + ], + [ + -118.179446, + 34.076937 + ], + [ + -118.179818, + 34.077123 + ], + [ + -118.179968, + 34.077211 + ], + [ + -118.180059, + 34.077308 + ], + [ + -118.180149, + 34.077472 + ], + [ + -118.180138, + 34.077956 + ], + [ + -118.180546, + 34.07797 + ], + [ + -118.181055, + 34.07802 + ], + [ + -118.181112, + 34.077387 + ], + [ + -118.18187, + 34.077382 + ], + [ + -118.182088, + 34.077136 + ], + [ + -118.182085, + 34.076884 + ], + [ + -118.182331, + 34.07669 + ], + [ + -118.182355, + 34.07666 + ], + [ + -118.182352, + 34.075705 + ] + ] + ] + }, + "properties": { + "name": "El Sereno Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 242169960, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.232604, + 33.979862 + ], + [ + -118.232666, + 33.979829 + ], + [ + -118.232696, + 33.979793 + ], + [ + -118.232711, + 33.979737 + ], + [ + -118.232699, + 33.979683 + ], + [ + -118.23267, + 33.979645 + ], + [ + -118.232656, + 33.979636 + ], + [ + -118.232621, + 33.979614 + ], + [ + -118.232574, + 33.979601 + ], + [ + -118.232513, + 33.979603 + ], + [ + -118.232464, + 33.979619 + ], + [ + -118.232417, + 33.979654 + ], + [ + -118.232392, + 33.979695 + ], + [ + -118.232385, + 33.979739 + ], + [ + -118.232398, + 33.979788 + ], + [ + -118.232429, + 33.979828 + ], + [ + -118.232475, + 33.979856 + ], + [ + -118.232525, + 33.979869 + ], + [ + -118.232604, + 33.979862 + ] + ] + ] + }, + "properties": { + "name": "Chesley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 244106627, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.279458, + 34.040298 + ], + [ + -118.27869, + 34.039951 + ], + [ + -118.278969, + 34.039524 + ], + [ + -118.278507, + 34.039315 + ], + [ + -118.278777, + 34.038902 + ], + [ + -118.28001, + 34.03946 + ], + [ + -118.279458, + 34.040298 + ] + ] + ] + }, + "properties": { + "name": "Toberman Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 247785002, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.253931, + 33.949581 + ], + [ + -118.253564, + 33.949583 + ], + [ + -118.253558, + 33.949308 + ], + [ + -118.253926, + 33.94931 + ], + [ + -118.253931, + 33.949581 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 247975850, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.2806, + 33.919975 + ], + [ + -118.280664, + 33.916556 + ], + [ + -118.278476, + 33.916556 + ], + [ + -118.278444, + 33.919948 + ], + [ + -118.2806, + 33.919975 + ] + ] + ] + }, + "properties": { + "name": "Athens Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 247975929, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.286877, + 33.958245 + ], + [ + -118.284795, + 33.958249 + ], + [ + -118.284784, + 33.955134 + ], + [ + -118.286866, + 33.95513 + ], + [ + -118.286877, + 33.958245 + ] + ] + ] + }, + "properties": { + "name": "Algin Sutton Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 248606165, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.255747, + 33.886226 + ], + [ + -118.255237, + 33.884097 + ], + [ + -118.254345, + 33.884128 + ], + [ + -118.254872, + 33.886342 + ], + [ + -118.25514, + 33.886288 + ], + [ + -118.255375, + 33.886248 + ], + [ + -118.255559, + 33.886226 + ], + [ + -118.255747, + 33.886226 + ] + ] + ] + }, + "properties": { + "name": "Burrel McDonald Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 248606174, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.264512, + 33.881154 + ], + [ + -118.264394, + 33.881158 + ], + [ + -118.26433, + 33.88114 + ], + [ + -118.264314, + 33.881114 + ], + [ + -118.264249, + 33.880833 + ], + [ + -118.262763, + 33.880882 + ], + [ + -118.263079, + 33.882306 + ], + [ + -118.261996, + 33.882338 + ], + [ + -118.261776, + 33.882383 + ], + [ + -118.261267, + 33.88008 + ], + [ + -118.26124, + 33.879604 + ], + [ + -118.264677, + 33.879469 + ], + [ + -118.264672, + 33.87983 + ], + [ + -118.264512, + 33.881154 + ] + ] + ] + }, + "properties": { + "name": "Vernon Hemingway Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 248759430, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.289177, + 33.976307 + ], + [ + -118.287199, + 33.976316 + ], + [ + -118.287195, + 33.975584 + ], + [ + -118.289173, + 33.975575 + ], + [ + -118.289177, + 33.976307 + ] + ] + ] + }, + "properties": { + "name": "Mount Carmel Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 252997137, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.146828, + 33.908337 + ], + [ + -118.147815, + 33.906862 + ], + [ + -118.147828, + 33.906843 + ], + [ + -118.146306, + 33.906122 + ], + [ + -118.146291, + 33.906144 + ], + [ + -118.145708, + 33.907026 + ], + [ + -118.145466, + 33.907391 + ], + [ + -118.145422, + 33.907458 + ], + [ + -118.145308, + 33.90763 + ], + [ + -118.146741, + 33.908297 + ], + [ + -118.146811, + 33.908329 + ], + [ + -118.146828, + 33.908337 + ] + ] + ] + }, + "properties": { + "name": "Golden Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 252997358, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.155556, + 33.914535 + ], + [ + -118.154, + 33.913792 + ], + [ + -118.154537, + 33.913026 + ], + [ + -118.156902, + 33.912777 + ], + [ + -118.156825, + 33.913082 + ], + [ + -118.156639, + 33.913004 + ], + [ + -118.155556, + 33.914535 + ] + ] + ] + }, + "properties": { + "name": "All-American Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 303532320, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.142266, + 33.921598 + ], + [ + -118.142443, + 33.921432 + ], + [ + -118.142626, + 33.921221 + ], + [ + -118.142881, + 33.920882 + ], + [ + -118.142533, + 33.9207 + ], + [ + -118.142214, + 33.921126 + ], + [ + -118.141827, + 33.920915 + ], + [ + -118.141587, + 33.921233 + ], + [ + -118.142266, + 33.921598 + ] + ] + ] + }, + "properties": { + "name": "Brookshire Children's Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305744371, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.161269, + 33.937587 + ], + [ + -118.164689, + 33.939367 + ], + [ + -118.164957, + 33.939507 + ], + [ + -118.164063, + 33.940418 + ], + [ + -118.162259, + 33.942268 + ], + [ + -118.159141, + 33.940791 + ], + [ + -118.160482, + 33.93898 + ], + [ + -118.156492, + 33.936915 + ], + [ + -118.160122, + 33.932184 + ], + [ + -118.163637, + 33.933844 + ], + [ + -118.164021, + 33.933272 + ], + [ + -118.164344, + 33.933314 + ], + [ + -118.164693, + 33.933251 + ], + [ + -118.165059, + 33.933018 + ], + [ + -118.16608, + 33.935348 + ], + [ + -118.165893, + 33.937431 + ], + [ + -118.165595, + 33.937374 + ], + [ + -118.162192, + 33.935472 + ], + [ + -118.161161, + 33.936774 + ], + [ + -118.161269, + 33.937587 + ] + ] + ] + }, + "properties": { + "name": "Los Amigos Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305747566, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.166434, + 34.064763 + ], + [ + -118.166622, + 34.06376 + ], + [ + -118.166097, + 34.063693 + ], + [ + -118.165909, + 34.064696 + ], + [ + -118.166434, + 34.064763 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305747568, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.153251, + 34.058349 + ], + [ + -118.152865, + 34.05846 + ], + [ + -118.153007, + 34.058797 + ], + [ + -118.153392, + 34.058687 + ], + [ + -118.153251, + 34.058349 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305747570, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.166097, + 34.063693 + ], + [ + -118.166133, + 34.063501 + ], + [ + -118.166737, + 34.063578 + ], + [ + -118.166701, + 34.06377 + ], + [ + -118.166622, + 34.06376 + ], + [ + -118.166097, + 34.063693 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305747571, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.162243, + 34.05978 + ], + [ + -118.162026, + 34.059831 + ], + [ + -118.161354, + 34.059776 + ], + [ + -118.161379, + 34.059648 + ], + [ + -118.160812, + 34.059599 + ], + [ + -118.160799, + 34.059218 + ], + [ + -118.160611, + 34.058643 + ], + [ + -118.160702, + 34.057423 + ], + [ + -118.160644, + 34.056768 + ], + [ + -118.160532, + 34.056715 + ], + [ + -118.160536, + 34.056027 + ], + [ + -118.163106, + 34.056057 + ], + [ + -118.163542, + 34.056263 + ], + [ + -118.163636, + 34.056559 + ], + [ + -118.163748, + 34.057615 + ], + [ + -118.163651, + 34.057707 + ], + [ + -118.163633, + 34.057896 + ], + [ + -118.16368, + 34.058096 + ], + [ + -118.163589, + 34.058542 + ], + [ + -118.163398, + 34.058628 + ], + [ + -118.163048, + 34.059176 + ], + [ + -118.16308, + 34.059534 + ], + [ + -118.162243, + 34.05978 + ] + ] + ] + }, + "properties": { + "name": "Monterey Park Golf Club", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 319307755, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.249922, + 34.055962 + ], + [ + -118.249945, + 34.055934 + ], + [ + -118.249974, + 34.055903 + ], + [ + -118.250025, + 34.055935 + ], + [ + -118.25001, + 34.055951 + ], + [ + -118.249996, + 34.055966 + ], + [ + -118.250002, + 34.055971 + ], + [ + -118.25001, + 34.055977 + ], + [ + -118.250021, + 34.055984 + ], + [ + -118.250372, + 34.055601 + ], + [ + -118.250677, + 34.055271 + ], + [ + -118.250531, + 34.055175 + ], + [ + -118.250468, + 34.055233 + ], + [ + -118.250466, + 34.055253 + ], + [ + -118.25046, + 34.05527 + ], + [ + -118.25045, + 34.055292 + ], + [ + -118.250433, + 34.055312 + ], + [ + -118.250414, + 34.05533 + ], + [ + -118.250382, + 34.055348 + ], + [ + -118.250365, + 34.055354 + ], + [ + -118.250293, + 34.055379 + ], + [ + -118.250322, + 34.055442 + ], + [ + -118.250211, + 34.055477 + ], + [ + -118.25021, + 34.055507 + ], + [ + -118.250202, + 34.055528 + ], + [ + -118.250189, + 34.055537 + ], + [ + -118.250174, + 34.055546 + ], + [ + -118.250157, + 34.055552 + ], + [ + -118.250135, + 34.055557 + ], + [ + -118.250121, + 34.055557 + ], + [ + -118.250165, + 34.055591 + ], + [ + -118.24999, + 34.055763 + ], + [ + -118.249963, + 34.055766 + ], + [ + -118.249931, + 34.055764 + ], + [ + -118.249905, + 34.055756 + ], + [ + -118.24988, + 34.055743 + ], + [ + -118.249827, + 34.055803 + ], + [ + -118.249849, + 34.05584 + ], + [ + -118.24985, + 34.055859 + ], + [ + -118.249847, + 34.055878 + ], + [ + -118.249841, + 34.05589 + ], + [ + -118.249833, + 34.055904 + ], + [ + -118.249877, + 34.055931 + ], + [ + -118.2499, + 34.055947 + ], + [ + -118.249922, + 34.055962 + ] + ] + ] + }, + "properties": { + "name": "Blue Ribbon Garden", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 322959874, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.2504, + 34.051126 + ], + [ + -118.250333, + 34.051204 + ], + [ + -118.250294, + 34.051288 + ], + [ + -118.250278, + 34.051324 + ], + [ + -118.250134, + 34.051227 + ], + [ + -118.250083, + 34.05122 + ], + [ + -118.250029, + 34.051169 + ], + [ + -118.250235, + 34.05097 + ], + [ + -118.250383, + 34.050813 + ], + [ + -118.250412, + 34.050786 + ], + [ + -118.250456, + 34.050762 + ], + [ + -118.250501, + 34.050746 + ], + [ + -118.250549, + 34.050732 + ], + [ + -118.250612, + 34.050723 + ], + [ + -118.250685, + 34.050697 + ], + [ + -118.250742, + 34.050653 + ], + [ + -118.25079, + 34.0506 + ], + [ + -118.250802, + 34.050608 + ], + [ + -118.251144, + 34.050832 + ], + [ + -118.250903, + 34.050876 + ], + [ + -118.250719, + 34.050928 + ], + [ + -118.250539, + 34.051025 + ], + [ + -118.250505, + 34.051055 + ], + [ + -118.250454, + 34.051083 + ], + [ + -118.2504, + 34.051126 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 323366590, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.113334, + 34.051922 + ], + [ + -118.11296, + 34.051923 + ], + [ + -118.112959, + 34.051591 + ], + [ + -118.113334, + 34.05159 + ], + [ + -118.113334, + 34.051922 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 324987551, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.130828, + 33.918851 + ], + [ + -118.130829, + 33.9201 + ], + [ + -118.130834, + 33.920129 + ], + [ + -118.130848, + 33.920156 + ], + [ + -118.130881, + 33.920184 + ], + [ + -118.130917, + 33.9202 + ], + [ + -118.130964, + 33.920205 + ], + [ + -118.134024, + 33.920204 + ], + [ + -118.134026, + 33.91884 + ], + [ + -118.130828, + 33.918851 + ] + ] + ] + }, + "properties": { + "name": "Discovery Sports Complex", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 338060440, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.139273, + 33.952993 + ], + [ + -118.137328, + 33.951945 + ], + [ + -118.137136, + 33.951842 + ], + [ + -118.135723, + 33.953789 + ], + [ + -118.13786, + 33.954941 + ], + [ + -118.139273, + 33.952993 + ] + ] + ] + }, + "properties": { + "name": "Furman Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 351804310, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.236467, + 33.984717 + ], + [ + -118.235741, + 33.98472 + ], + [ + -118.235606, + 33.984744 + ], + [ + -118.234965, + 33.984742 + ], + [ + -118.234976, + 33.985016 + ], + [ + -118.235102, + 33.985024 + ], + [ + -118.235113, + 33.98564 + ], + [ + -118.235376, + 33.985634 + ], + [ + -118.235381, + 33.985961 + ], + [ + -118.236744, + 33.985963 + ], + [ + -118.236467, + 33.984717 + ] + ] + ] + }, + "properties": { + "name": "Raul R. Perez Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 397298272, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.12644, + 34.059731 + ], + [ + -118.126438, + 34.059622 + ], + [ + -118.126394, + 34.059622 + ], + [ + -118.126396, + 34.059369 + ], + [ + -118.126389, + 34.059315 + ], + [ + -118.126103, + 34.059319 + ], + [ + -118.125917, + 34.059319 + ], + [ + -118.125697, + 34.059317 + ], + [ + -118.125692, + 34.059123 + ], + [ + -118.125617, + 34.059122 + ], + [ + -118.12562, + 34.059354 + ], + [ + -118.125626, + 34.059737 + ], + [ + -118.12644, + 34.059731 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 398072019, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.257489, + 34.057007 + ], + [ + -118.257108, + 34.056758 + ], + [ + -118.257032, + 34.056774 + ], + [ + -118.256827, + 34.056644 + ], + [ + -118.256837, + 34.056628 + ], + [ + -118.257621, + 34.056785 + ], + [ + -118.25765, + 34.056805 + ], + [ + -118.257659, + 34.056829 + ], + [ + -118.25755, + 34.057 + ], + [ + -118.257532, + 34.05701 + ], + [ + -118.257516, + 34.057013 + ], + [ + -118.257489, + 34.057007 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 412280754, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.281451, + 34.019939 + ], + [ + -118.281206, + 34.020328 + ], + [ + -118.28124, + 34.02044 + ], + [ + -118.281271, + 34.020454 + ], + [ + -118.281304, + 34.020463 + ], + [ + -118.281338, + 34.020468 + ], + [ + -118.281372, + 34.020466 + ], + [ + -118.281403, + 34.02046 + ], + [ + -118.281467, + 34.020489 + ], + [ + -118.281736, + 34.020065 + ], + [ + -118.281451, + 34.019939 + ] + ] + ] + }, + "properties": { + "name": "Norman Stadium", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442692880, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.125851, + 33.973718 + ], + [ + -118.124885, + 33.972072 + ], + [ + -118.126473, + 33.971329 + ], + [ + -118.127213, + 33.97124 + ], + [ + -118.128072, + 33.972036 + ], + [ + -118.12695, + 33.972637 + ], + [ + -118.126757, + 33.97277 + ], + [ + -118.125851, + 33.973718 + ] + ] + ] + }, + "properties": { + "name": "Veterans Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 442694854, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.260304, + 34.044925 + ], + [ + -118.260392, + 34.044923 + ], + [ + -118.261258, + 34.043994 + ], + [ + -118.26042, + 34.043452 + ], + [ + -118.260171, + 34.043718 + ], + [ + -118.26051, + 34.043944 + ], + [ + -118.259857, + 34.044639 + ], + [ + -118.260304, + 34.044925 + ] + ] + ] + }, + "properties": { + "name": "Grand Hope Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 443668564, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.282922, + 34.011281 + ], + [ + -118.282925, + 34.011961 + ], + [ + -118.282927, + 34.01242 + ], + [ + -118.282928, + 34.012591 + ], + [ + -118.28293, + 34.012968 + ], + [ + -118.282956, + 34.018034 + ], + [ + -118.290187, + 34.018056 + ], + [ + -118.291416, + 34.018059 + ], + [ + -118.291418, + 34.013267 + ], + [ + -118.291419, + 34.011892 + ], + [ + -118.29142, + 34.010988 + ], + [ + -118.287267, + 34.011228 + ], + [ + -118.282922, + 34.011281 + ] + ] + ] + }, + "properties": { + "name": "Exposition Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 446396785, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.112568, + 33.955867 + ], + [ + -118.111419, + 33.955423 + ], + [ + -118.111155, + 33.955931 + ], + [ + -118.110794, + 33.955694 + ], + [ + -118.110773, + 33.955746 + ], + [ + -118.110735, + 33.955785 + ], + [ + -118.110684, + 33.95579 + ], + [ + -118.110626, + 33.955763 + ], + [ + -118.110606, + 33.955752 + ], + [ + -118.110563, + 33.955727 + ], + [ + -118.110521, + 33.955706 + ], + [ + -118.110477, + 33.955715 + ], + [ + -118.110451, + 33.955764 + ], + [ + -118.110116, + 33.956364 + ], + [ + -118.110512, + 33.956602 + ], + [ + -118.110839, + 33.956799 + ], + [ + -118.111097, + 33.956913 + ], + [ + -118.111292, + 33.956952 + ], + [ + -118.111487, + 33.956954 + ], + [ + -118.111728, + 33.956916 + ], + [ + -118.111968, + 33.95679 + ], + [ + -118.112141, + 33.956648 + ], + [ + -118.112568, + 33.955867 + ] + ] + ] + }, + "properties": { + "name": "Dennis the Menace Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 453219436, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.115024, + 34.041643 + ], + [ + -118.115435, + 34.041267 + ], + [ + -118.115934, + 34.040807 + ], + [ + -118.11627, + 34.04053 + ], + [ + -118.116692, + 34.040848 + ], + [ + -118.117326, + 34.041347 + ], + [ + -118.117313, + 34.041825 + ], + [ + -118.117307, + 34.042497 + ], + [ + -118.117809, + 34.042616 + ], + [ + -118.117811, + 34.04267 + ], + [ + -118.117847, + 34.042762 + ], + [ + -118.117884, + 34.043062 + ], + [ + -118.116889, + 34.042818 + ], + [ + -118.114381, + 34.042215 + ], + [ + -118.115024, + 34.041643 + ] + ] + ] + }, + "properties": { + "name": "La Loma Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461269405, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.110461, + 33.93121 + ], + [ + -118.110311, + 33.931407 + ], + [ + -118.11046, + 33.931479 + ], + [ + -118.110583, + 33.931305 + ], + [ + -118.110601, + 33.931279 + ], + [ + -118.11047, + 33.931215 + ], + [ + -118.110461, + 33.93121 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461269407, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.109631, + 33.932797 + ], + [ + -118.107694, + 33.931844 + ], + [ + -118.107469, + 33.93174 + ], + [ + -118.107818, + 33.9308 + ], + [ + -118.10833, + 33.929501 + ], + [ + -118.108453, + 33.929527 + ], + [ + -118.110709, + 33.930665 + ], + [ + -118.110637, + 33.930787 + ], + [ + -118.11069, + 33.930816 + ], + [ + -118.110725, + 33.931292 + ], + [ + -118.109631, + 33.932797 + ] + ] + ] + }, + "properties": { + "name": "Rio San Gabriel Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461269418, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.109517, + 33.932311 + ], + [ + -118.109443, + 33.932325 + ], + [ + -118.109422, + 33.932289 + ], + [ + -118.109175, + 33.932166 + ], + [ + -118.109171, + 33.932126 + ], + [ + -118.109094, + 33.932039 + ], + [ + -118.109078, + 33.932009 + ], + [ + -118.109086, + 33.931945 + ], + [ + -118.109128, + 33.931857 + ], + [ + -118.109157, + 33.93181 + ], + [ + -118.109265, + 33.931751 + ], + [ + -118.109368, + 33.931731 + ], + [ + -118.109454, + 33.93174 + ], + [ + -118.109528, + 33.931757 + ], + [ + -118.109596, + 33.931809 + ], + [ + -118.10964, + 33.931866 + ], + [ + -118.109667, + 33.931899 + ], + [ + -118.10967, + 33.931965 + ], + [ + -118.10965, + 33.932014 + ], + [ + -118.109678, + 33.932054 + ], + [ + -118.109518, + 33.932266 + ], + [ + -118.109517, + 33.932311 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 461759932, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.156015, + 34.002015 + ], + [ + -118.155961, + 34.002033 + ], + [ + -118.155907, + 34.002189 + ], + [ + -118.154872, + 34.001824 + ], + [ + -118.154341, + 34.002914 + ], + [ + -118.154363, + 34.003003 + ], + [ + -118.155623, + 34.003447 + ], + [ + -118.156076, + 34.002497 + ], + [ + -118.156235, + 34.002087 + ], + [ + -118.156015, + 34.002015 + ] + ] + ] + }, + "properties": { + "name": "Rosewood Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 462403474, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.116595, + 34.023074 + ], + [ + -118.116736, + 34.022552 + ], + [ + -118.116864, + 34.022036 + ], + [ + -118.117012, + 34.021507 + ], + [ + -118.115807, + 34.021242 + ], + [ + -118.113983, + 34.020839 + ], + [ + -118.113862, + 34.021167 + ], + [ + -118.114811, + 34.021408 + ], + [ + -118.115101, + 34.021566 + ], + [ + -118.11525, + 34.02176 + ], + [ + -118.115614, + 34.021858 + ], + [ + -118.115707, + 34.021876 + ], + [ + -118.115805, + 34.021896 + ], + [ + -118.115886, + 34.021912 + ], + [ + -118.115705, + 34.022476 + ], + [ + -118.115579, + 34.022871 + ], + [ + -118.11604, + 34.022975 + ], + [ + -118.116528, + 34.023086 + ], + [ + -118.116595, + 34.023074 + ] + ] + ] + }, + "properties": { + "name": "Acuna Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 465928643, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.166884, + 33.972545 + ], + [ + -118.16625, + 33.972479 + ], + [ + -118.166342, + 33.971869 + ], + [ + -118.166441, + 33.971879 + ], + [ + -118.166513, + 33.971887 + ], + [ + -118.166976, + 33.971935 + ], + [ + -118.166884, + 33.972545 + ] + ] + ] + }, + "properties": { + "name": "Marlow Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469290443, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.247074, + 34.009054 + ], + [ + -118.246856, + 34.009023 + ], + [ + -118.246913, + 34.008715 + ], + [ + -118.247136, + 34.008745 + ], + [ + -118.247074, + 34.009054 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469310140, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.151184, + 33.958592 + ], + [ + -118.151034, + 33.958563 + ], + [ + -118.151056, + 33.958451 + ], + [ + -118.151066, + 33.958418 + ], + [ + -118.151088, + 33.958411 + ], + [ + -118.151124, + 33.958405 + ], + [ + -118.151142, + 33.958408 + ], + [ + -118.151224, + 33.958422 + ], + [ + -118.151184, + 33.958592 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469312965, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.156406, + 33.959687 + ], + [ + -118.156104, + 33.959492 + ], + [ + -118.156004, + 33.95948 + ], + [ + -118.155869, + 33.959393 + ], + [ + -118.155706, + 33.959321 + ], + [ + -118.155592, + 33.959289 + ], + [ + -118.155391, + 33.959246 + ], + [ + -118.155552, + 33.95841 + ], + [ + -118.156618, + 33.95857 + ], + [ + -118.156406, + 33.959687 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469521221, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.142047, + 33.92116 + ], + [ + -118.14213, + 33.921219 + ], + [ + -118.142108, + 33.921238 + ], + [ + -118.142077, + 33.921266 + ], + [ + -118.142057, + 33.921288 + ], + [ + -118.142047, + 33.921308 + ], + [ + -118.142039, + 33.921329 + ], + [ + -118.142021, + 33.921351 + ], + [ + -118.142001, + 33.921369 + ], + [ + -118.141986, + 33.921382 + ], + [ + -118.141968, + 33.921383 + ], + [ + -118.14195, + 33.921376 + ], + [ + -118.141922, + 33.921364 + ], + [ + -118.141898, + 33.921354 + ], + [ + -118.141871, + 33.921342 + ], + [ + -118.14185, + 33.921326 + ], + [ + -118.141836, + 33.921315 + ], + [ + -118.141825, + 33.921295 + ], + [ + -118.141817, + 33.921273 + ], + [ + -118.141867, + 33.921211 + ], + [ + -118.141886, + 33.921225 + ], + [ + -118.141907, + 33.921233 + ], + [ + -118.14193, + 33.921238 + ], + [ + -118.141953, + 33.921235 + ], + [ + -118.141972, + 33.921224 + ], + [ + -118.142, + 33.9212 + ], + [ + -118.142047, + 33.92116 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469526426, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.157632, + 33.951826 + ], + [ + -118.157581, + 33.951915 + ], + [ + -118.157334, + 33.951826 + ], + [ + -118.157388, + 33.951728 + ], + [ + -118.156902, + 33.951535 + ], + [ + -118.156731, + 33.952426 + ], + [ + -118.15676, + 33.952482 + ], + [ + -118.156771, + 33.952527 + ], + [ + -118.156765, + 33.952562 + ], + [ + -118.156926, + 33.952593 + ], + [ + -118.157329, + 33.952638 + ], + [ + -118.157502, + 33.952487 + ], + [ + -118.158, + 33.951963 + ], + [ + -118.157632, + 33.951826 + ] + ] + ] + }, + "properties": { + "name": "Crawford Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469539495, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.154447, + 33.925466 + ], + [ + -118.154291, + 33.925463 + ], + [ + -118.153553, + 33.92644 + ], + [ + -118.15342, + 33.926616 + ], + [ + -118.153347, + 33.92658 + ], + [ + -118.153044, + 33.926987 + ], + [ + -118.152632, + 33.927524 + ], + [ + -118.153264, + 33.927842 + ], + [ + -118.153385, + 33.927688 + ], + [ + -118.153618, + 33.927783 + ], + [ + -118.153736, + 33.927843 + ], + [ + -118.153949, + 33.927557 + ], + [ + -118.15459, + 33.92789 + ], + [ + -118.154878, + 33.928034 + ], + [ + -118.155278, + 33.92751 + ], + [ + -118.155658, + 33.927007 + ], + [ + -118.15568, + 33.926978 + ], + [ + -118.156134, + 33.926382 + ], + [ + -118.156122, + 33.926338 + ], + [ + -118.156111, + 33.926299 + ], + [ + -118.155381, + 33.925935 + ], + [ + -118.154447, + 33.925466 + ] + ] + ] + }, + "properties": { + "name": "Apollo Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469543238, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.112043, + 33.955824 + ], + [ + -118.112036, + 33.955845 + ], + [ + -118.112021, + 33.955867 + ], + [ + -118.111993, + 33.955888 + ], + [ + -118.111963, + 33.9559 + ], + [ + -118.111929, + 33.955911 + ], + [ + -118.111893, + 33.955928 + ], + [ + -118.111869, + 33.955947 + ], + [ + -118.11185, + 33.95597 + ], + [ + -118.111842, + 33.956002 + ], + [ + -118.111838, + 33.956041 + ], + [ + -118.111828, + 33.956073 + ], + [ + -118.111815, + 33.956105 + ], + [ + -118.111796, + 33.956125 + ], + [ + -118.111774, + 33.956145 + ], + [ + -118.111743, + 33.956168 + ], + [ + -118.111693, + 33.956187 + ], + [ + -118.111657, + 33.9562 + ], + [ + -118.111614, + 33.956207 + ], + [ + -118.111578, + 33.956207 + ], + [ + -118.111549, + 33.956197 + ], + [ + -118.111527, + 33.956182 + ], + [ + -118.111519, + 33.956164 + ], + [ + -118.111515, + 33.956148 + ], + [ + -118.111517, + 33.956133 + ], + [ + -118.111525, + 33.956108 + ], + [ + -118.111535, + 33.956093 + ], + [ + -118.111543, + 33.956078 + ], + [ + -118.111562, + 33.956058 + ], + [ + -118.111596, + 33.95604 + ], + [ + -118.111607, + 33.956031 + ], + [ + -118.111626, + 33.956012 + ], + [ + -118.111639, + 33.955989 + ], + [ + -118.111641, + 33.955959 + ], + [ + -118.111641, + 33.955926 + ], + [ + -118.111641, + 33.955904 + ], + [ + -118.111654, + 33.955881 + ], + [ + -118.111665, + 33.955853 + ], + [ + -118.11168, + 33.955834 + ], + [ + -118.111708, + 33.955815 + ], + [ + -118.11174, + 33.955805 + ], + [ + -118.111769, + 33.955794 + ], + [ + -118.111798, + 33.955775 + ], + [ + -118.111834, + 33.955752 + ], + [ + -118.111863, + 33.955735 + ], + [ + -118.111889, + 33.955725 + ], + [ + -118.111921, + 33.955721 + ], + [ + -118.111956, + 33.955724 + ], + [ + -118.111983, + 33.955733 + ], + [ + -118.112008, + 33.955748 + ], + [ + -118.112024, + 33.955767 + ], + [ + -118.112036, + 33.955794 + ], + [ + -118.112043, + 33.955824 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469564977, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.122443, + 33.919327 + ], + [ + -118.12246, + 33.919007 + ], + [ + -118.122457, + 33.918978 + ], + [ + -118.122443, + 33.918949 + ], + [ + -118.122417, + 33.918925 + ], + [ + -118.122384, + 33.918912 + ], + [ + -118.122342, + 33.918909 + ], + [ + -118.122024, + 33.918899 + ], + [ + -118.12203, + 33.918982 + ], + [ + -118.122093, + 33.9191 + ], + [ + -118.122142, + 33.919178 + ], + [ + -118.122224, + 33.919238 + ], + [ + -118.122337, + 33.919292 + ], + [ + -118.122443, + 33.919327 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469564992, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.125323, + 33.919919 + ], + [ + -118.125283, + 33.919919 + ], + [ + -118.124672, + 33.919921 + ], + [ + -118.123679, + 33.919923 + ], + [ + -118.123167, + 33.919927 + ], + [ + -118.122077, + 33.919938 + ], + [ + -118.121551, + 33.919939 + ], + [ + -118.121552, + 33.918863 + ], + [ + -118.123228, + 33.91886 + ], + [ + -118.123228, + 33.918877 + ], + [ + -118.125318, + 33.918869 + ], + [ + -118.125323, + 33.919919 + ] + ] + ] + }, + "properties": { + "name": "Independence Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469566096, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.160412, + 33.941882 + ], + [ + -118.160205, + 33.941776 + ], + [ + -118.160177, + 33.941772 + ], + [ + -118.160143, + 33.941778 + ], + [ + -118.160121, + 33.941795 + ], + [ + -118.159823, + 33.942186 + ], + [ + -118.159812, + 33.942212 + ], + [ + -118.159818, + 33.942237 + ], + [ + -118.159837, + 33.94227 + ], + [ + -118.16004, + 33.94237 + ], + [ + -118.160055, + 33.942349 + ], + [ + -118.160398, + 33.9419 + ], + [ + -118.160412, + 33.941882 + ] + ] + ] + }, + "properties": { + "name": "Temple Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469568995, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.13365, + 33.966684 + ], + [ + -118.133513, + 33.966497 + ], + [ + -118.12817, + 33.96909 + ], + [ + -118.128429, + 33.969217 + ], + [ + -118.128456, + 33.969191 + ], + [ + -118.128499, + 33.96916 + ], + [ + -118.128744, + 33.969044 + ], + [ + -118.129699, + 33.96859 + ], + [ + -118.13365, + 33.966684 + ] + ] + ] + }, + "properties": { + "name": "Treasure Island Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469718737, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.255882, + 34.00675 + ], + [ + -118.255975, + 34.00675 + ], + [ + -118.256357, + 34.006752 + ], + [ + -118.256391, + 34.006752 + ], + [ + -118.25639, + 34.006874 + ], + [ + -118.256389, + 34.006897 + ], + [ + -118.255881, + 34.006894 + ], + [ + -118.255882, + 34.00675 + ] + ] + ] + }, + "properties": { + "name": "Central Avenue Pocket Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 469789460, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.250094, + 34.053507 + ], + [ + -118.250276, + 34.053295 + ], + [ + -118.250431, + 34.053391 + ], + [ + -118.250398, + 34.053427 + ], + [ + -118.250474, + 34.053475 + ], + [ + -118.250573, + 34.053367 + ], + [ + -118.250508, + 34.053326 + ], + [ + -118.250639, + 34.053185 + ], + [ + -118.250475, + 34.053081 + ], + [ + -118.250711, + 34.052825 + ], + [ + -118.251021, + 34.053021 + ], + [ + -118.251404, + 34.052622 + ], + [ + -118.25104, + 34.052394 + ], + [ + -118.251043, + 34.052264 + ], + [ + -118.251362, + 34.051906 + ], + [ + -118.251792, + 34.052194 + ], + [ + -118.252298, + 34.051652 + ], + [ + -118.252043, + 34.051491 + ], + [ + -118.251767, + 34.051778 + ], + [ + -118.251706, + 34.051783 + ], + [ + -118.25129, + 34.051523 + ], + [ + -118.250944, + 34.051377 + ], + [ + -118.250779, + 34.051555 + ], + [ + -118.250703, + 34.051522 + ], + [ + -118.250631, + 34.05154 + ], + [ + -118.250525, + 34.051647 + ], + [ + -118.25058, + 34.051707 + ], + [ + -118.250577, + 34.051822 + ], + [ + -118.250663, + 34.051945 + ], + [ + -118.250782, + 34.052026 + ], + [ + -118.250711, + 34.052107 + ], + [ + -118.250873, + 34.052292 + ], + [ + -118.250879, + 34.052466 + ], + [ + -118.250312, + 34.053069 + ], + [ + -118.25023, + 34.053009 + ], + [ + -118.250159, + 34.053082 + ], + [ + -118.24986, + 34.052888 + ], + [ + -118.249782, + 34.052968 + ], + [ + -118.250164, + 34.053212 + ], + [ + -118.249962, + 34.053427 + ], + [ + -118.250094, + 34.053507 + ] + ] + ] + }, + "properties": { + "name": "California Plaza Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 471388801, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.146452, + 33.969047 + ], + [ + -118.146376, + 33.969051 + ], + [ + -118.146111, + 33.968948 + ], + [ + -118.146083, + 33.968888 + ], + [ + -118.145917, + 33.968825 + ], + [ + -118.145728, + 33.968757 + ], + [ + -118.145426, + 33.968651 + ], + [ + -118.145223, + 33.96859 + ], + [ + -118.145008, + 33.968548 + ], + [ + -118.144677, + 33.96849 + ], + [ + -118.144621, + 33.968522 + ], + [ + -118.14454, + 33.968505 + ], + [ + -118.144555, + 33.968427 + ], + [ + -118.144549, + 33.968361 + ], + [ + -118.144528, + 33.968288 + ], + [ + -118.144503, + 33.96818 + ], + [ + -118.144507, + 33.968043 + ], + [ + -118.144544, + 33.96789 + ], + [ + -118.144691, + 33.967676 + ], + [ + -118.144834, + 33.967461 + ], + [ + -118.144922, + 33.967368 + ], + [ + -118.145013, + 33.967285 + ], + [ + -118.14514, + 33.967189 + ], + [ + -118.145242, + 33.967121 + ], + [ + -118.145403, + 33.967028 + ], + [ + -118.145584, + 33.96696 + ], + [ + -118.145768, + 33.966908 + ], + [ + -118.14601, + 33.966862 + ], + [ + -118.146186, + 33.966843 + ], + [ + -118.146236, + 33.966843 + ], + [ + -118.146284, + 33.96644 + ], + [ + -118.147137, + 33.966531 + ], + [ + -118.147754, + 33.966599 + ], + [ + -118.147474, + 33.967109 + ], + [ + -118.147408, + 33.967125 + ], + [ + -118.147356, + 33.967225 + ], + [ + -118.147125, + 33.967672 + ], + [ + -118.146832, + 33.968232 + ], + [ + -118.146525, + 33.968809 + ], + [ + -118.146517, + 33.968845 + ], + [ + -118.146536, + 33.968885 + ], + [ + -118.146539, + 33.968911 + ], + [ + -118.146499, + 33.968993 + ], + [ + -118.146452, + 33.969047 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 475776001, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.219036, + 33.980496 + ], + [ + -118.218982, + 33.978961 + ], + [ + -118.217212, + 33.978985 + ], + [ + -118.21726, + 33.979775 + ], + [ + -118.217872, + 33.979766 + ], + [ + -118.217865, + 33.97959 + ], + [ + -118.218855, + 33.979572 + ], + [ + -118.218859, + 33.97975 + ], + [ + -118.218855, + 33.979784 + ], + [ + -118.218856, + 33.979825 + ], + [ + -118.218863, + 33.979825 + ], + [ + -118.218864, + 33.979869 + ], + [ + -118.218856, + 33.979869 + ], + [ + -118.218857, + 33.979901 + ], + [ + -118.218899, + 33.9799 + ], + [ + -118.218904, + 33.980083 + ], + [ + -118.218867, + 33.980084 + ], + [ + -118.218868, + 33.980091 + ], + [ + -118.218874, + 33.980194 + ], + [ + -118.218883, + 33.980496 + ], + [ + -118.218999, + 33.980496 + ], + [ + -118.219036, + 33.980496 + ] + ] + ] + }, + "properties": { + "name": "Huntington Park City Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 481878509, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.291518, + 33.896811 + ], + [ + -118.291566, + 33.894469 + ], + [ + -118.28927, + 33.895213 + ], + [ + -118.289228, + 33.896415 + ], + [ + -118.289753, + 33.896633 + ], + [ + -118.290097, + 33.896735 + ], + [ + -118.290309, + 33.896756 + ], + [ + -118.290563, + 33.89678 + ], + [ + -118.290707, + 33.896785 + ], + [ + -118.291518, + 33.896811 + ] + ] + ] + }, + "properties": { + "name": "Rosecrans Recreation Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 481878514, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.290161, + 33.896281 + ], + [ + -118.290016, + 33.896281 + ], + [ + -118.289839, + 33.896241 + ], + [ + -118.289748, + 33.896304 + ], + [ + -118.289742, + 33.896388 + ], + [ + -118.289753, + 33.896451 + ], + [ + -118.289796, + 33.896473 + ], + [ + -118.289839, + 33.896468 + ], + [ + -118.289903, + 33.896495 + ], + [ + -118.289979, + 33.896428 + ], + [ + -118.290075, + 33.896415 + ], + [ + -118.290139, + 33.896397 + ], + [ + -118.290161, + 33.896281 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486257306, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.14579, + 33.966386 + ], + [ + -118.145568, + 33.966814 + ], + [ + -118.145438, + 33.966924 + ], + [ + -118.145202, + 33.967098 + ], + [ + -118.14434, + 33.967723 + ], + [ + -118.144357, + 33.967781 + ], + [ + -118.144267, + 33.968012 + ], + [ + -118.144267, + 33.96823 + ], + [ + -118.144344, + 33.968473 + ], + [ + -118.145309, + 33.968651 + ], + [ + -118.146402, + 33.969027 + ], + [ + -118.146518, + 33.968977 + ], + [ + -118.147754, + 33.966599 + ], + [ + -118.14579, + 33.966386 + ] + ] + ] + }, + "properties": { + "name": "Bell Gardens Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486290756, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.109799, + 33.907919 + ], + [ + -118.110044, + 33.908644 + ], + [ + -118.110242, + 33.909245 + ], + [ + -118.110434, + 33.909772 + ], + [ + -118.111007, + 33.909774 + ], + [ + -118.110843, + 33.909296 + ], + [ + -118.110672, + 33.908785 + ], + [ + -118.110519, + 33.908325 + ], + [ + -118.110349, + 33.907826 + ], + [ + -118.109799, + 33.907919 + ] + ] + ] + }, + "properties": { + "name": "Byron Zinn Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 486702551, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.161062, + 33.96866 + ], + [ + -118.161081, + 33.968529 + ], + [ + -118.161086, + 33.968356 + ], + [ + -118.160992, + 33.968338 + ], + [ + -118.160995, + 33.968307 + ], + [ + -118.160834, + 33.96828 + ], + [ + -118.160866, + 33.96812 + ], + [ + -118.16067, + 33.968091 + ], + [ + -118.160601, + 33.968632 + ], + [ + -118.161062, + 33.96866 + ] + ] + ] + }, + "properties": { + "name": "Neighborhood Youth Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 490372539, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.172105, + 34.007773 + ], + [ + -118.1721, + 34.007962 + ], + [ + -118.170316, + 34.008176 + ], + [ + -118.17027, + 34.007756 + ], + [ + -118.17036, + 34.007743 + ], + [ + -118.170429, + 34.007718 + ], + [ + -118.170477, + 34.007673 + ], + [ + -118.170504, + 34.007618 + ], + [ + -118.17084, + 34.006942 + ], + [ + -118.171182, + 34.007054 + ], + [ + -118.171147, + 34.007118 + ], + [ + -118.171166, + 34.007133 + ], + [ + -118.17196, + 34.007193 + ], + [ + -118.171874, + 34.007769 + ], + [ + -118.172105, + 34.007773 + ] + ] + ] + }, + "properties": { + "name": "Bandini Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491696578, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.267783, + 34.042144 + ], + [ + -118.267169, + 34.041873 + ], + [ + -118.2681, + 34.04088 + ], + [ + -118.26848, + 34.041069 + ], + [ + -118.267783, + 34.042144 + ] + ] + ] + }, + "properties": { + "name": "Gilbert Lindsay Plaza", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 491944419, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.131246, + 34.029082 + ], + [ + -118.13023, + 34.028984 + ], + [ + -118.130836, + 34.027935 + ], + [ + -118.131487, + 34.027935 + ], + [ + -118.131464, + 34.028681 + ], + [ + -118.131355, + 34.0289 + ], + [ + -118.131246, + 34.029082 + ] + ] + ] + }, + "properties": { + "name": "Bicknell Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 492152769, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.155414, + 34.025817 + ], + [ + -118.155452, + 34.025817 + ], + [ + -118.155486, + 34.025805 + ], + [ + -118.155513, + 34.025786 + ], + [ + -118.155522, + 34.025773 + ], + [ + -118.155748, + 34.025012 + ], + [ + -118.155745, + 34.024983 + ], + [ + -118.155723, + 34.024958 + ], + [ + -118.155685, + 34.024943 + ], + [ + -118.154996, + 34.024792 + ], + [ + -118.154977, + 34.02479 + ], + [ + -118.154954, + 34.024794 + ], + [ + -118.154935, + 34.02481 + ], + [ + -118.15492, + 34.024838 + ], + [ + -118.154693, + 34.025576 + ], + [ + -118.154693, + 34.025607 + ], + [ + -118.1547, + 34.025633 + ], + [ + -118.15472, + 34.02566 + ], + [ + -118.154745, + 34.025675 + ], + [ + -118.155414, + 34.025817 + ] + ] + ] + }, + "properties": { + "name": "Atlantic Avenue Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 492370882, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.199581, + 33.991476 + ], + [ + -118.199642, + 33.991053 + ], + [ + -118.199249, + 33.991014 + ], + [ + -118.199189, + 33.991438 + ], + [ + -118.199581, + 33.991476 + ] + ] + ] + }, + "properties": { + "name": "Pixley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 501406427, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.205187, + 34.038874 + ], + [ + -118.205062, + 34.03891 + ], + [ + -118.204913, + 34.038847 + ], + [ + -118.204934, + 34.038819 + ], + [ + -118.204898, + 34.038656 + ], + [ + -118.204967, + 34.03851 + ], + [ + -118.205123, + 34.038575 + ], + [ + -118.205163, + 34.038569 + ], + [ + -118.205195, + 34.038583 + ], + [ + -118.205213, + 34.038609 + ], + [ + -118.205218, + 34.038646 + ], + [ + -118.205285, + 34.038737 + ], + [ + -118.205187, + 34.038874 + ] + ] + ] + }, + "properties": { + "name": "Evergreen Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 546164773, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.135724, + 33.97136 + ], + [ + -118.135784, + 33.97097 + ], + [ + -118.135464, + 33.970908 + ], + [ + -118.135207, + 33.971051 + ], + [ + -118.135177, + 33.971086 + ], + [ + -118.135164, + 33.97112 + ], + [ + -118.135172, + 33.971164 + ], + [ + -118.135201, + 33.971198 + ], + [ + -118.135327, + 33.97126 + ], + [ + -118.13552, + 33.971322 + ], + [ + -118.135621, + 33.971346 + ], + [ + -118.135724, + 33.97136 + ] + ] + ] + }, + "properties": { + "name": "Hannon Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 549833972, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.108176, + 34.000918 + ], + [ + -118.107642, + 34.00181 + ], + [ + -118.107701, + 34.001895 + ], + [ + -118.107531, + 34.002144 + ], + [ + -118.107666, + 34.002229 + ], + [ + -118.107559, + 34.002361 + ], + [ + -118.105724, + 34.001266 + ], + [ + -118.106282, + 34.000361 + ], + [ + -118.106966, + 34.000656 + ], + [ + -118.107092, + 34.000466 + ], + [ + -118.108176, + 34.000918 + ] + ] + ] + }, + "properties": { + "name": "Reggie Rodriguez Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 552510059, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.133556, + 33.966592 + ], + [ + -118.133525, + 33.966609 + ], + [ + -118.133508, + 33.966601 + ], + [ + -118.133491, + 33.966609 + ], + [ + -118.133491, + 33.966617 + ], + [ + -118.133494, + 33.966625 + ], + [ + -118.133473, + 33.966635 + ], + [ + -118.133347, + 33.966716 + ], + [ + -118.133297, + 33.966764 + ], + [ + -118.133168, + 33.966857 + ], + [ + -118.133066, + 33.966899 + ], + [ + -118.133042, + 33.966899 + ], + [ + -118.133029, + 33.966886 + ], + [ + -118.133027, + 33.966865 + ], + [ + -118.133035, + 33.966854 + ], + [ + -118.133048, + 33.966845 + ], + [ + -118.133064, + 33.966842 + ], + [ + -118.133074, + 33.966733 + ], + [ + -118.13332, + 33.966612 + ], + [ + -118.133506, + 33.966523 + ], + [ + -118.133556, + 33.966592 + ] + ] + ] + }, + "properties": { + "name": "Botanical Gardens", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 575356660, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.252337, + 33.98297 + ], + [ + -118.252658, + 33.982968 + ], + [ + -118.252645, + 33.983151 + ], + [ + -118.252571, + 33.98317 + ], + [ + -118.252335, + 33.983093 + ], + [ + -118.252337, + 33.98297 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 602283531, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -118.161716, + 34.079945 + ], + [ + -118.161426, + 34.07969 + ], + [ + -118.16146, + 34.079582 + ], + [ + -118.161393, + 34.079143 + ], + [ + -118.161447, + 34.079108 + ], + [ + -118.161464, + 34.078997 + ], + [ + -118.161529, + 34.079024 + ], + [ + -118.161564, + 34.079038 + ], + [ + -118.161596, + 34.079055 + ], + [ + -118.161646, + 34.079071 + ], + [ + -118.161692, + 34.079092 + ], + [ + -118.161745, + 34.079117 + ], + [ + -118.161786, + 34.079131 + ], + [ + -118.161832, + 34.079158 + ], + [ + -118.161883, + 34.079169 + ], + [ + -118.161938, + 34.079186 + ], + [ + -118.161987, + 34.079196 + ], + [ + -118.162026, + 34.079199 + ], + [ + -118.162067, + 34.079208 + ], + [ + -118.162109, + 34.079212 + ], + [ + -118.162138, + 34.079219 + ], + [ + -118.162166, + 34.079238 + ], + [ + -118.1622, + 34.079262 + ], + [ + -118.162217, + 34.079293 + ], + [ + -118.162226, + 34.079325 + ], + [ + -118.162233, + 34.07936 + ], + [ + -118.162214, + 34.079392 + ], + [ + -118.162201, + 34.079442 + ], + [ + -118.162178, + 34.079493 + ], + [ + -118.162157, + 34.079536 + ], + [ + -118.162125, + 34.07958 + ], + [ + -118.162085, + 34.079622 + ], + [ + -118.162042, + 34.079675 + ], + [ + -118.162009, + 34.079709 + ], + [ + -118.161954, + 34.079756 + ], + [ + -118.161879, + 34.079816 + ], + [ + -118.161802, + 34.079872 + ], + [ + -118.16175, + 34.079913 + ], + [ + -118.161716, + 34.079945 + ] + ] + ] + }, + "properties": { + "name": "El Sereno Arroyo Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44486150, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.258141, + 33.713865 + ], + [ + -117.2581, + 33.720733 + ], + [ + -117.258034, + 33.728383 + ], + [ + -117.240767, + 33.72856 + ], + [ + -117.240649, + 33.721421 + ], + [ + -117.240622, + 33.714135 + ], + [ + -117.258141, + 33.713865 + ] + ] + ] + }, + "properties": { + "name": "Roy W. Kabian Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44486418, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.200665, + 33.709844 + ], + [ + -117.201136, + 33.709944 + ], + [ + -117.201024, + 33.710358 + ], + [ + -117.20095, + 33.710641 + ], + [ + -117.200911, + 33.710847 + ], + [ + -117.20087, + 33.711084 + ], + [ + -117.200843, + 33.711358 + ], + [ + -117.200824, + 33.711671 + ], + [ + -117.200823, + 33.711855 + ], + [ + -117.200832, + 33.712026 + ], + [ + -117.200837, + 33.712231 + ], + [ + -117.200881, + 33.712509 + ], + [ + -117.200934, + 33.712899 + ], + [ + -117.201008, + 33.714233 + ], + [ + -117.200996, + 33.71448 + ], + [ + -117.200627, + 33.714491 + ], + [ + -117.200599, + 33.714696 + ], + [ + -117.200583, + 33.715086 + ], + [ + -117.200561, + 33.71558 + ], + [ + -117.200549, + 33.715774 + ], + [ + -117.200524, + 33.715937 + ], + [ + -117.200499, + 33.716048 + ], + [ + -117.200464, + 33.716162 + ], + [ + -117.200427, + 33.716263 + ], + [ + -117.200374, + 33.716361 + ], + [ + -117.200272, + 33.716512 + ], + [ + -117.20016, + 33.716688 + ], + [ + -117.200033, + 33.716912 + ], + [ + -117.19995, + 33.717092 + ], + [ + -117.199221, + 33.717087 + ], + [ + -117.19792, + 33.717065 + ], + [ + -117.19774, + 33.717288 + ], + [ + -117.197677, + 33.717484 + ], + [ + -117.197576, + 33.717863 + ], + [ + -117.197565, + 33.718213 + ], + [ + -117.19757, + 33.719537 + ], + [ + -117.197574, + 33.720361 + ], + [ + -117.197612, + 33.72099 + ], + [ + -117.197032, + 33.720984 + ], + [ + -117.196748, + 33.720986 + ], + [ + -117.196314, + 33.721009 + ], + [ + -117.195756, + 33.721051 + ], + [ + -117.195132, + 33.72115 + ], + [ + -117.194643, + 33.72124 + ], + [ + -117.194447, + 33.721243 + ], + [ + -117.194447, + 33.720812 + ], + [ + -117.194456, + 33.720478 + ], + [ + -117.194623, + 33.71983 + ], + [ + -117.19536, + 33.719926 + ], + [ + -117.195562, + 33.720022 + ], + [ + -117.195857, + 33.720053 + ], + [ + -117.196124, + 33.719938 + ], + [ + -117.196247, + 33.719745 + ], + [ + -117.196275, + 33.719525 + ], + [ + -117.196136, + 33.71933 + ], + [ + -117.19589, + 33.719191 + ], + [ + -117.195487, + 33.719174 + ], + [ + -117.194808, + 33.719051 + ], + [ + -117.194885, + 33.718674 + ], + [ + -117.195051, + 33.718163 + ], + [ + -117.194993, + 33.717889 + ], + [ + -117.194839, + 33.71772 + ], + [ + -117.194209, + 33.717568 + ], + [ + -117.194464, + 33.716355 + ], + [ + -117.194108, + 33.716355 + ], + [ + -117.194132, + 33.716014 + ], + [ + -117.195593, + 33.71585 + ], + [ + -117.195665, + 33.715673 + ], + [ + -117.19705, + 33.715592 + ], + [ + -117.197802, + 33.715385 + ], + [ + -117.198616, + 33.715193 + ], + [ + -117.199223, + 33.715021 + ], + [ + -117.200014, + 33.714853 + ], + [ + -117.199724, + 33.714306 + ], + [ + -117.199629, + 33.713983 + ], + [ + -117.199658, + 33.713694 + ], + [ + -117.199728, + 33.713175 + ], + [ + -117.199659, + 33.712403 + ], + [ + -117.199608, + 33.711593 + ], + [ + -117.199601, + 33.711015 + ], + [ + -117.199629, + 33.710358 + ], + [ + -117.199716, + 33.70972 + ], + [ + -117.200001, + 33.709752 + ], + [ + -117.200665, + 33.709844 + ] + ] + ] + }, + "properties": { + "name": "North Golf Course", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 44486535, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.241646, + 33.703229 + ], + [ + -117.241873, + 33.703225 + ], + [ + -117.2424, + 33.703219 + ], + [ + -117.242555, + 33.703214 + ], + [ + -117.242783, + 33.703209 + ], + [ + -117.242782, + 33.703329 + ], + [ + -117.242778, + 33.703692 + ], + [ + -117.242778, + 33.703813 + ], + [ + -117.242779, + 33.703934 + ], + [ + -117.242785, + 33.704297 + ], + [ + -117.242787, + 33.704418 + ], + [ + -117.24279, + 33.704539 + ], + [ + -117.2428, + 33.704903 + ], + [ + -117.242804, + 33.705025 + ], + [ + -117.242805, + 33.705146 + ], + [ + -117.242808, + 33.705509 + ], + [ + -117.24281, + 33.70563 + ], + [ + -117.242808, + 33.705752 + ], + [ + -117.242804, + 33.70612 + ], + [ + -117.242804, + 33.706243 + ], + [ + -117.242805, + 33.706366 + ], + [ + -117.242808, + 33.706734 + ], + [ + -117.242809, + 33.706858 + ], + [ + -117.242541, + 33.706868 + ], + [ + -117.242429, + 33.706873 + ], + [ + -117.242027, + 33.706862 + ], + [ + -117.241739, + 33.706864 + ], + [ + -117.241539, + 33.706866 + ], + [ + -117.241472, + 33.70686 + ], + [ + -117.241422, + 33.706868 + ], + [ + -117.241367, + 33.706869 + ], + [ + -117.241052, + 33.706877 + ], + [ + -117.241024, + 33.706878 + ], + [ + -117.240948, + 33.706884 + ], + [ + -117.240946, + 33.706222 + ], + [ + -117.240945, + 33.705318 + ], + [ + -117.240973, + 33.704239 + ], + [ + -117.240986, + 33.703793 + ], + [ + -117.240982, + 33.703579 + ], + [ + -117.24098, + 33.70351 + ], + [ + -117.240976, + 33.703303 + ], + [ + -117.240975, + 33.703235 + ], + [ + -117.241109, + 33.703233 + ], + [ + -117.241511, + 33.703229 + ], + [ + -117.241646, + 33.703229 + ] + ] + ] + }, + "properties": { + "name": "Quail Valley Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 91788553, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.162209, + 33.630467 + ], + [ + -117.162586, + 33.630454 + ], + [ + -117.162603, + 33.63061 + ], + [ + -117.162855, + 33.630536 + ], + [ + -117.163053, + 33.630535 + ], + [ + -117.163366, + 33.630664 + ], + [ + -117.163453, + 33.630905 + ], + [ + -117.163479, + 33.63099 + ], + [ + -117.163488, + 33.631133 + ], + [ + -117.164008, + 33.631213 + ], + [ + -117.16422, + 33.631401 + ], + [ + -117.164241, + 33.631628 + ], + [ + -117.164242, + 33.631822 + ], + [ + -117.164318, + 33.631986 + ], + [ + -117.164546, + 33.631898 + ], + [ + -117.164421, + 33.631639 + ], + [ + -117.164471, + 33.631547 + ], + [ + -117.164443, + 33.631535 + ], + [ + -117.164416, + 33.631516 + ], + [ + -117.16439, + 33.63149 + ], + [ + -117.164375, + 33.631461 + ], + [ + -117.164371, + 33.631422 + ], + [ + -117.164381, + 33.63138 + ], + [ + -117.164416, + 33.631328 + ], + [ + -117.164235, + 33.631074 + ], + [ + -117.163923, + 33.63107 + ], + [ + -117.163741, + 33.631024 + ], + [ + -117.163545, + 33.630833 + ], + [ + -117.163502, + 33.630666 + ], + [ + -117.163496, + 33.630544 + ], + [ + -117.163594, + 33.630341 + ], + [ + -117.163776, + 33.630168 + ], + [ + -117.163657, + 33.629835 + ], + [ + -117.163751, + 33.629643 + ], + [ + -117.164161, + 33.629363 + ], + [ + -117.163648, + 33.62895 + ], + [ + -117.163251, + 33.628646 + ], + [ + -117.16301, + 33.628972 + ], + [ + -117.162237, + 33.629276 + ], + [ + -117.161835, + 33.629789 + ], + [ + -117.161824, + 33.629986 + ], + [ + -117.16169, + 33.63012 + ], + [ + -117.161551, + 33.630196 + ], + [ + -117.16119, + 33.630234 + ], + [ + -117.160847, + 33.630157 + ], + [ + -117.160512, + 33.630108 + ], + [ + -117.160209, + 33.630057 + ], + [ + -117.1601, + 33.630154 + ], + [ + -117.159939, + 33.630291 + ], + [ + -117.159899, + 33.630325 + ], + [ + -117.159631, + 33.630519 + ], + [ + -117.159552, + 33.630541 + ], + [ + -117.159429, + 33.630561 + ], + [ + -117.159282, + 33.630544 + ], + [ + -117.159069, + 33.630514 + ], + [ + -117.158864, + 33.630506 + ], + [ + -117.158714, + 33.630519 + ], + [ + -117.158611, + 33.630376 + ], + [ + -117.158269, + 33.630465 + ], + [ + -117.157986, + 33.630496 + ], + [ + -117.157682, + 33.630488 + ], + [ + -117.157528, + 33.630471 + ], + [ + -117.157519, + 33.630584 + ], + [ + -117.158097, + 33.630585 + ], + [ + -117.158179, + 33.630589 + ], + [ + -117.158273, + 33.630587 + ], + [ + -117.158406, + 33.630587 + ], + [ + -117.158782, + 33.630591 + ], + [ + -117.159613, + 33.630712 + ], + [ + -117.159626, + 33.630665 + ], + [ + -117.159663, + 33.630625 + ], + [ + -117.15971, + 33.6306 + ], + [ + -117.159767, + 33.630592 + ], + [ + -117.159805, + 33.630596 + ], + [ + -117.159829, + 33.630603 + ], + [ + -117.159837, + 33.630578 + ], + [ + -117.160099, + 33.630428 + ], + [ + -117.160473, + 33.630455 + ], + [ + -117.160843, + 33.630356 + ], + [ + -117.161494, + 33.630488 + ], + [ + -117.16191, + 33.630579 + ], + [ + -117.162228, + 33.630695 + ], + [ + -117.162209, + 33.630467 + ] + ] + ] + }, + "properties": { + "name": "Mapleton Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 97045032, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.147297, + 33.637713 + ], + [ + -117.147383, + 33.637355 + ], + [ + -117.147431, + 33.637096 + ], + [ + -117.147453, + 33.636569 + ], + [ + -117.147029, + 33.636668 + ], + [ + -117.146681, + 33.636614 + ], + [ + -117.146428, + 33.636426 + ], + [ + -117.1463, + 33.636337 + ], + [ + -117.145978, + 33.636217 + ], + [ + -117.145554, + 33.636194 + ], + [ + -117.145549, + 33.637762 + ], + [ + -117.145994, + 33.637744 + ], + [ + -117.146235, + 33.637708 + ], + [ + -117.146895, + 33.637695 + ], + [ + -117.147297, + 33.637713 + ] + ] + ] + }, + "properties": { + "name": "Woodbine Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 108383956, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.117138, + 33.609173 + ], + [ + -117.117144, + 33.608928 + ], + [ + -117.117085, + 33.608914 + ], + [ + -117.117074, + 33.608409 + ], + [ + -117.116774, + 33.608351 + ], + [ + -117.116817, + 33.608061 + ], + [ + -117.116886, + 33.608021 + ], + [ + -117.117391, + 33.60807 + ], + [ + -117.118104, + 33.608106 + ], + [ + -117.118104, + 33.609133 + ], + [ + -117.117712, + 33.609124 + ], + [ + -117.117643, + 33.609196 + ], + [ + -117.117509, + 33.609155 + ], + [ + -117.117316, + 33.609173 + ], + [ + -117.117138, + 33.609173 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 108383961, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.117361, + 33.608289 + ], + [ + -117.117321, + 33.60826 + ], + [ + -117.117313, + 33.608237 + ], + [ + -117.117318, + 33.608215 + ], + [ + -117.117345, + 33.608195 + ], + [ + -117.117383, + 33.608186 + ], + [ + -117.117396, + 33.608166 + ], + [ + -117.117452, + 33.608204 + ], + [ + -117.117431, + 33.608219 + ], + [ + -117.117436, + 33.608251 + ], + [ + -117.117415, + 33.608278 + ], + [ + -117.117391, + 33.608286 + ], + [ + -117.117361, + 33.608289 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 108398643, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.108006, + 33.603626 + ], + [ + -117.107923, + 33.603124 + ], + [ + -117.10826, + 33.603082 + ], + [ + -117.108639, + 33.603068 + ], + [ + -117.108719, + 33.603122 + ], + [ + -117.10873, + 33.603754 + ], + [ + -117.108091, + 33.603763 + ], + [ + -117.108024, + 33.603799 + ], + [ + -117.107949, + 33.603734 + ], + [ + -117.108006, + 33.603626 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 108490261, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.111356, + 33.609712 + ], + [ + -117.11168, + 33.609611 + ], + [ + -117.111954, + 33.609321 + ], + [ + -117.111906, + 33.609265 + ], + [ + -117.111892, + 33.609209 + ], + [ + -117.111468, + 33.609176 + ], + [ + -117.111141, + 33.609325 + ], + [ + -117.111356, + 33.609712 + ] + ] + ] + }, + "properties": { + "name": "Pineapple Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 108789494, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.102973, + 33.614874 + ], + [ + -117.102462, + 33.614517 + ], + [ + -117.10214, + 33.614249 + ], + [ + -117.101877, + 33.613945 + ], + [ + -117.101576, + 33.613538 + ], + [ + -117.101426, + 33.613484 + ], + [ + -117.100632, + 33.613802 + ], + [ + -117.100568, + 33.613904 + ], + [ + -117.100777, + 33.61419 + ], + [ + -117.101099, + 33.614065 + ], + [ + -117.101201, + 33.614249 + ], + [ + -117.101249, + 33.614508 + ], + [ + -117.10126, + 33.614834 + ], + [ + -117.101235, + 33.616308 + ], + [ + -117.101233, + 33.616393 + ], + [ + -117.101791, + 33.616411 + ], + [ + -117.102853, + 33.615182 + ], + [ + -117.102973, + 33.614874 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 108789495, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.099385, + 33.62011 + ], + [ + -117.099557, + 33.619824 + ], + [ + -117.0998, + 33.619557 + ], + [ + -117.099933, + 33.619436 + ], + [ + -117.100052, + 33.619304 + ], + [ + -117.100258, + 33.61901 + ], + [ + -117.101205, + 33.617932 + ], + [ + -117.101233, + 33.616393 + ], + [ + -117.101235, + 33.616308 + ], + [ + -117.098942, + 33.616312 + ], + [ + -117.099182, + 33.617041 + ], + [ + -117.099209, + 33.61719 + ], + [ + -117.099221, + 33.617349 + ], + [ + -117.099218, + 33.617524 + ], + [ + -117.099174, + 33.617695 + ], + [ + -117.099096, + 33.617871 + ], + [ + -117.09887, + 33.618179 + ], + [ + -117.098629, + 33.618564 + ], + [ + -117.098585, + 33.618725 + ], + [ + -117.098557, + 33.61891 + ], + [ + -117.098319, + 33.619175 + ], + [ + -117.097962, + 33.619278 + ], + [ + -117.099254, + 33.620129 + ], + [ + -117.099385, + 33.62011 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 123831726, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.143286, + 33.648639 + ], + [ + -117.141315, + 33.648645 + ], + [ + -117.141212, + 33.648551 + ], + [ + -117.14123, + 33.647375 + ], + [ + -117.141506, + 33.647393 + ], + [ + -117.141801, + 33.647441 + ], + [ + -117.142039, + 33.647451 + ], + [ + -117.142021, + 33.647558 + ], + [ + -117.142146, + 33.647551 + ], + [ + -117.142596, + 33.647553 + ], + [ + -117.142741, + 33.647645 + ], + [ + -117.14325, + 33.647636 + ], + [ + -117.143286, + 33.648639 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172350590, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.188713, + 33.727831 + ], + [ + -117.188714, + 33.727857 + ], + [ + -117.188711, + 33.727867 + ], + [ + -117.188697, + 33.727873 + ], + [ + -117.188679, + 33.727875 + ], + [ + -117.188334, + 33.727878 + ], + [ + -117.188261, + 33.727879 + ], + [ + -117.188055, + 33.727881 + ], + [ + -117.188044, + 33.727891 + ], + [ + -117.188051, + 33.728159 + ], + [ + -117.188055, + 33.728174 + ], + [ + -117.188073, + 33.728194 + ], + [ + -117.188084, + 33.728212 + ], + [ + -117.188091, + 33.728233 + ], + [ + -117.188091, + 33.728243 + ], + [ + -117.188091, + 33.728551 + ], + [ + -117.188084, + 33.728566 + ], + [ + -117.18695, + 33.728571 + ], + [ + -117.184802, + 33.728564 + ], + [ + -117.182883, + 33.728554 + ], + [ + -117.180862, + 33.72855 + ], + [ + -117.179233, + 33.728545 + ], + [ + -117.176169, + 33.728535 + ], + [ + -117.176044, + 33.728552 + ], + [ + -117.175972, + 33.728557 + ], + [ + -117.175932, + 33.728538 + ], + [ + -117.175891, + 33.728487 + ], + [ + -117.1759, + 33.728437 + ], + [ + -117.17599, + 33.728391 + ], + [ + -117.176114, + 33.728381 + ], + [ + -117.17992, + 33.728418 + ], + [ + -117.179793, + 33.728388 + ], + [ + -117.179577, + 33.728371 + ], + [ + -117.17929, + 33.728357 + ], + [ + -117.179177, + 33.728339 + ], + [ + -117.179064, + 33.728341 + ], + [ + -117.178926, + 33.728358 + ], + [ + -117.17877, + 33.728358 + ], + [ + -117.178596, + 33.728332 + ], + [ + -117.178446, + 33.728305 + ], + [ + -117.17831, + 33.728298 + ], + [ + -117.178148, + 33.72831 + ], + [ + -117.178056, + 33.72831 + ], + [ + -117.177995, + 33.7283 + ], + [ + -117.177963, + 33.728281 + ], + [ + -117.17796, + 33.728238 + ], + [ + -117.177992, + 33.72812 + ], + [ + -117.178024, + 33.727925 + ], + [ + -117.178079, + 33.727752 + ], + [ + -117.178168, + 33.727639 + ], + [ + -117.178368, + 33.727514 + ], + [ + -117.178602, + 33.727394 + ], + [ + -117.178772, + 33.727324 + ], + [ + -117.178865, + 33.727279 + ], + [ + -117.17892, + 33.727238 + ], + [ + -117.17896, + 33.727207 + ], + [ + -117.178966, + 33.727159 + ], + [ + -117.178949, + 33.72711 + ], + [ + -117.178905, + 33.727082 + ], + [ + -117.17883, + 33.727065 + ], + [ + -117.178741, + 33.727084 + ], + [ + -117.178657, + 33.727106 + ], + [ + -117.178576, + 33.727122 + ], + [ + -117.178495, + 33.727134 + ], + [ + -117.178423, + 33.727125 + ], + [ + -117.178336, + 33.727091 + ], + [ + -117.178244, + 33.727021 + ], + [ + -117.178192, + 33.726961 + ], + [ + -117.178142, + 33.726935 + ], + [ + -117.17809, + 33.726923 + ], + [ + -117.178012, + 33.726925 + ], + [ + -117.177966, + 33.726957 + ], + [ + -117.177697, + 33.727199 + ], + [ + -117.177469, + 33.727384 + ], + [ + -117.177342, + 33.727457 + ], + [ + -117.177189, + 33.727526 + ], + [ + -117.176978, + 33.727596 + ], + [ + -117.176686, + 33.727663 + ], + [ + -117.175908, + 33.727906 + ], + [ + -117.175515, + 33.728 + ], + [ + -117.175434, + 33.728012 + ], + [ + -117.175353, + 33.727997 + ], + [ + -117.175221, + 33.727985 + ], + [ + -117.174937, + 33.728002 + ], + [ + -117.174799, + 33.728041 + ], + [ + -117.174603, + 33.728159 + ], + [ + -117.174557, + 33.728219 + ], + [ + -117.174554, + 33.728267 + ], + [ + -117.174603, + 33.728315 + ], + [ + -117.174591, + 33.728358 + ], + [ + -117.174496, + 33.728394 + ], + [ + -117.174314, + 33.728426 + ], + [ + -117.174227, + 33.728426 + ], + [ + -117.174132, + 33.72838 + ], + [ + -117.1741, + 33.728349 + ], + [ + -117.173866, + 33.728183 + ], + [ + -117.173489, + 33.727864 + ], + [ + -117.173199, + 33.727602 + ], + [ + -117.172979, + 33.727424 + ], + [ + -117.172811, + 33.727328 + ], + [ + -117.17258, + 33.727205 + ], + [ + -117.172401, + 33.727159 + ], + [ + -117.172213, + 33.727138 + ], + [ + -117.171965, + 33.727106 + ], + [ + -117.17184, + 33.727061 + ], + [ + -117.171759, + 33.727003 + ], + [ + -117.171704, + 33.72696 + ], + [ + -117.171694, + 33.726916 + ], + [ + -117.171685, + 33.726736 + ], + [ + -117.171671, + 33.725093 + ], + [ + -117.171657, + 33.724406 + ], + [ + -117.171646, + 33.724294 + ], + [ + -117.171636, + 33.724273 + ], + [ + -117.171612, + 33.72427 + ], + [ + -117.17158, + 33.724262 + ], + [ + -117.171547, + 33.724248 + ], + [ + -117.1715, + 33.724241 + ], + [ + -117.171445, + 33.724254 + ], + [ + -117.171375, + 33.724291 + ], + [ + -117.171276, + 33.724329 + ], + [ + -117.171211, + 33.724341 + ], + [ + -117.171152, + 33.724341 + ], + [ + -117.171129, + 33.72433 + ], + [ + -117.171104, + 33.724307 + ], + [ + -117.171101, + 33.724283 + ], + [ + -117.171117, + 33.724246 + ], + [ + -117.171155, + 33.724223 + ], + [ + -117.171198, + 33.724206 + ], + [ + -117.171221, + 33.724183 + ], + [ + -117.17123, + 33.724161 + ], + [ + -117.171221, + 33.724127 + ], + [ + -117.171193, + 33.724101 + ], + [ + -117.171153, + 33.724089 + ], + [ + -117.171116, + 33.724083 + ], + [ + -117.171088, + 33.724064 + ], + [ + -117.171091, + 33.724032 + ], + [ + -117.171115, + 33.723998 + ], + [ + -117.171125, + 33.723961 + ], + [ + -117.171092, + 33.723882 + ], + [ + -117.171044, + 33.723841 + ], + [ + -117.170973, + 33.7238 + ], + [ + -117.170937, + 33.723767 + ], + [ + -117.170931, + 33.72372 + ], + [ + -117.170923, + 33.723678 + ], + [ + -117.170895, + 33.7236 + ], + [ + -117.170822, + 33.723534 + ], + [ + -117.170732, + 33.723483 + ], + [ + -117.170675, + 33.723431 + ], + [ + -117.170667, + 33.723377 + ], + [ + -117.170696, + 33.72334 + ], + [ + -117.170757, + 33.723316 + ], + [ + -117.170828, + 33.723272 + ], + [ + -117.17083, + 33.723237 + ], + [ + -117.170818, + 33.723202 + ], + [ + -117.170784, + 33.723172 + ], + [ + -117.170717, + 33.723159 + ], + [ + -117.17066, + 33.723159 + ], + [ + -117.170596, + 33.723181 + ], + [ + -117.170522, + 33.72319 + ], + [ + -117.17047, + 33.723185 + ], + [ + -117.170465, + 33.723145 + ], + [ + -117.170497, + 33.72311 + ], + [ + -117.170501, + 33.723066 + ], + [ + -117.170489, + 33.723036 + ], + [ + -117.170455, + 33.723022 + ], + [ + -117.170405, + 33.723 + ], + [ + -117.170321, + 33.722984 + ], + [ + -117.170266, + 33.722969 + ], + [ + -117.170199, + 33.722924 + ], + [ + -117.170137, + 33.722883 + ], + [ + -117.1701, + 33.722862 + ], + [ + -117.169994, + 33.722857 + ], + [ + -117.169889, + 33.722866 + ], + [ + -117.169766, + 33.722884 + ], + [ + -117.169673, + 33.722908 + ], + [ + -117.169622, + 33.722921 + ], + [ + -117.169596, + 33.722924 + ], + [ + -117.169515, + 33.722934 + ], + [ + -117.169447, + 33.722957 + ], + [ + -117.169369, + 33.72301 + ], + [ + -117.169271, + 33.723067 + ], + [ + -117.169214, + 33.723097 + ], + [ + -117.169166, + 33.723105 + ], + [ + -117.169117, + 33.723101 + ], + [ + -117.169092, + 33.723081 + ], + [ + -117.169031, + 33.723002 + ], + [ + -117.168997, + 33.72288 + ], + [ + -117.168972, + 33.72269 + ], + [ + -117.168922, + 33.722525 + ], + [ + -117.168891, + 33.722482 + ], + [ + -117.168825, + 33.722423 + ], + [ + -117.16861, + 33.72229 + ], + [ + -117.168458, + 33.722214 + ], + [ + -117.168385, + 33.722209 + ], + [ + -117.168275, + 33.72222 + ], + [ + -117.168082, + 33.722262 + ], + [ + -117.167655, + 33.722468 + ], + [ + -117.167513, + 33.722508 + ], + [ + -117.167418, + 33.722508 + ], + [ + -117.16732, + 33.722454 + ], + [ + -117.167249, + 33.722387 + ], + [ + -117.167124, + 33.722251 + ], + [ + -117.16695, + 33.72201 + ], + [ + -117.166846, + 33.721731 + ], + [ + -117.166786, + 33.721457 + ], + [ + -117.166772, + 33.721336 + ], + [ + -117.166766, + 33.721193 + ], + [ + -117.167167, + 33.721188 + ], + [ + -117.169332, + 33.72117 + ], + [ + -117.169326, + 33.720356 + ], + [ + -117.169422, + 33.720352 + ], + [ + -117.169415, + 33.71864 + ], + [ + -117.169397, + 33.717709 + ], + [ + -117.1694, + 33.717686 + ], + [ + -117.169417, + 33.717681 + ], + [ + -117.170716, + 33.717688 + ], + [ + -117.171758, + 33.717695 + ], + [ + -117.173465, + 33.717713 + ], + [ + -117.175132, + 33.717728 + ], + [ + -117.175483, + 33.717717 + ], + [ + -117.175768, + 33.717691 + ], + [ + -117.175903, + 33.717678 + ], + [ + -117.175911, + 33.71772 + ], + [ + -117.175932, + 33.719371 + ], + [ + -117.174457, + 33.719363 + ], + [ + -117.173894, + 33.719352 + ], + [ + -117.17372, + 33.719347 + ], + [ + -117.173742, + 33.720838 + ], + [ + -117.173744, + 33.721154 + ], + [ + -117.17523, + 33.721174 + ], + [ + -117.176007, + 33.721183 + ], + [ + -117.178205, + 33.721213 + ], + [ + -117.179759, + 33.721226 + ], + [ + -117.181228, + 33.72126 + ], + [ + -117.183364, + 33.721291 + ], + [ + -117.183651, + 33.721296 + ], + [ + -117.18364, + 33.719667 + ], + [ + -117.184289, + 33.719668 + ], + [ + -117.186726, + 33.719689 + ], + [ + -117.186709, + 33.718068 + ], + [ + -117.186867, + 33.718066 + ], + [ + -117.186866, + 33.718646 + ], + [ + -117.187954, + 33.718654 + ], + [ + -117.187954, + 33.718677 + ], + [ + -117.188028, + 33.718677 + ], + [ + -117.188028, + 33.718654 + ], + [ + -117.188226, + 33.718655 + ], + [ + -117.188449, + 33.718662 + ], + [ + -117.188495, + 33.718662 + ], + [ + -117.188509, + 33.718901 + ], + [ + -117.187068, + 33.718937 + ], + [ + -117.187069, + 33.71905 + ], + [ + -117.186954, + 33.719051 + ], + [ + -117.18697, + 33.71969 + ], + [ + -117.187133, + 33.719696 + ], + [ + -117.187124, + 33.72051 + ], + [ + -117.187088, + 33.72057 + ], + [ + -117.18698, + 33.720694 + ], + [ + -117.186963, + 33.720733 + ], + [ + -117.186963, + 33.720751 + ], + [ + -117.18697, + 33.720774 + ], + [ + -117.186993, + 33.720792 + ], + [ + -117.187016, + 33.720798 + ], + [ + -117.187079, + 33.720788 + ], + [ + -117.187157, + 33.720774 + ], + [ + -117.187205, + 33.72077 + ], + [ + -117.187254, + 33.72075 + ], + [ + -117.187293, + 33.720722 + ], + [ + -117.187322, + 33.720697 + ], + [ + -117.187361, + 33.720675 + ], + [ + -117.187408, + 33.720658 + ], + [ + -117.187465, + 33.72065 + ], + [ + -117.187953, + 33.720652 + ], + [ + -117.188483, + 33.720661 + ], + [ + -117.188565, + 33.720668 + ], + [ + -117.188598, + 33.720681 + ], + [ + -117.188607, + 33.720697 + ], + [ + -117.18862, + 33.720732 + ], + [ + -117.188632, + 33.721693 + ], + [ + -117.188646, + 33.722714 + ], + [ + -117.188659, + 33.723368 + ], + [ + -117.188684, + 33.725378 + ], + [ + -117.188695, + 33.72651 + ], + [ + -117.188316, + 33.72651 + ], + [ + -117.188321, + 33.726684 + ], + [ + -117.1887, + 33.726683 + ], + [ + -117.188711, + 33.727557 + ], + [ + -117.188713, + 33.727831 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 172351051, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.175932, + 33.728538 + ], + [ + -117.175359, + 33.728529 + ], + [ + -117.174681, + 33.728515 + ], + [ + -117.174165, + 33.728523 + ], + [ + -117.173954, + 33.728972 + ], + [ + -117.173964, + 33.729431 + ], + [ + -117.173918, + 33.729598 + ], + [ + -117.173836, + 33.729732 + ], + [ + -117.173744, + 33.729811 + ], + [ + -117.17354, + 33.729874 + ], + [ + -117.173395, + 33.729929 + ], + [ + -117.173225, + 33.730016 + ], + [ + -117.173037, + 33.730169 + ], + [ + -117.172892, + 33.730295 + ], + [ + -117.172751, + 33.730456 + ], + [ + -117.172633, + 33.730571 + ], + [ + -117.172479, + 33.730705 + ], + [ + -117.172423, + 33.730802 + ], + [ + -117.172237, + 33.73108 + ], + [ + -117.172051, + 33.731328 + ], + [ + -117.171907, + 33.73149 + ], + [ + -117.17183, + 33.731704 + ], + [ + -117.171813, + 33.731816 + ], + [ + -117.171836, + 33.731895 + ], + [ + -117.17183, + 33.731985 + ], + [ + -117.171813, + 33.732128 + ], + [ + -117.17177, + 33.732193 + ], + [ + -117.171668, + 33.732253 + ], + [ + -117.171504, + 33.732295 + ], + [ + -117.171113, + 33.732341 + ], + [ + -117.170925, + 33.732349 + ], + [ + -117.170659, + 33.732338 + ], + [ + -117.170574, + 33.732341 + ], + [ + -117.170508, + 33.732366 + ], + [ + -117.170465, + 33.732428 + ], + [ + -117.170422, + 33.73248 + ], + [ + -117.17036, + 33.7325 + ], + [ + -117.170297, + 33.732489 + ], + [ + -117.170245, + 33.732453 + ], + [ + -117.170192, + 33.732398 + ], + [ + -117.170103, + 33.732251 + ], + [ + -117.170051, + 33.732221 + ], + [ + -117.169949, + 33.73218 + ], + [ + -117.169863, + 33.732149 + ], + [ + -117.169804, + 33.732103 + ], + [ + -117.169751, + 33.732035 + ], + [ + -117.169761, + 33.731977 + ], + [ + -117.169699, + 33.731769 + ], + [ + -117.169627, + 33.731627 + ], + [ + -117.16958, + 33.731493 + ], + [ + -117.169574, + 33.731378 + ], + [ + -117.169548, + 33.731064 + ], + [ + -117.169548, + 33.730621 + ], + [ + -117.169587, + 33.730498 + ], + [ + -117.16963, + 33.730454 + ], + [ + -117.169712, + 33.730413 + ], + [ + -117.16984, + 33.730358 + ], + [ + -117.169968, + 33.730301 + ], + [ + -117.170038, + 33.730211 + ], + [ + -117.170139, + 33.729913 + ], + [ + -117.170212, + 33.729784 + ], + [ + -117.170231, + 33.72971 + ], + [ + -117.170222, + 33.729656 + ], + [ + -117.170169, + 33.72962 + ], + [ + -117.17009, + 33.729612 + ], + [ + -117.170008, + 33.729628 + ], + [ + -117.169942, + 33.729672 + ], + [ + -117.169876, + 33.729721 + ], + [ + -117.16983, + 33.729776 + ], + [ + -117.169798, + 33.729852 + ], + [ + -117.169784, + 33.729924 + ], + [ + -117.169765, + 33.730014 + ], + [ + -117.169742, + 33.730066 + ], + [ + -117.169696, + 33.730109 + ], + [ + -117.169636, + 33.730131 + ], + [ + -117.169567, + 33.730142 + ], + [ + -117.169508, + 33.730129 + ], + [ + -117.169455, + 33.730079 + ], + [ + -117.169413, + 33.729978 + ], + [ + -117.169393, + 33.729885 + ], + [ + -117.16938, + 33.729795 + ], + [ + -117.169396, + 33.729691 + ], + [ + -117.169403, + 33.729527 + ], + [ + -117.169442, + 33.729311 + ], + [ + -117.169475, + 33.729128 + ], + [ + -117.169531, + 33.728923 + ], + [ + -117.169564, + 33.728693 + ], + [ + -117.1696, + 33.728584 + ], + [ + -117.16964, + 33.728513 + ], + [ + -117.169725, + 33.728469 + ], + [ + -117.169794, + 33.72845 + ], + [ + -117.169873, + 33.728455 + ], + [ + -117.169952, + 33.728485 + ], + [ + -117.170047, + 33.728545 + ], + [ + -117.170172, + 33.728627 + ], + [ + -117.170254, + 33.728709 + ], + [ + -117.170294, + 33.728761 + ], + [ + -117.170333, + 33.728819 + ], + [ + -117.170389, + 33.728852 + ], + [ + -117.170462, + 33.728895 + ], + [ + -117.170531, + 33.728925 + ], + [ + -117.170603, + 33.72898 + ], + [ + -117.170623, + 33.729008 + ], + [ + -117.170642, + 33.729046 + ], + [ + -117.170652, + 33.72912 + ], + [ + -117.170649, + 33.729191 + ], + [ + -117.170652, + 33.729243 + ], + [ + -117.170665, + 33.729286 + ], + [ + -117.170698, + 33.729349 + ], + [ + -117.170718, + 33.729393 + ], + [ + -117.170735, + 33.72945 + ], + [ + -117.170735, + 33.729492 + ], + [ + -117.170738, + 33.729577 + ], + [ + -117.170775, + 33.72966 + ], + [ + -117.170838, + 33.729737 + ], + [ + -117.170898, + 33.729787 + ], + [ + -117.170952, + 33.729826 + ], + [ + -117.171005, + 33.729849 + ], + [ + -117.171075, + 33.729855 + ], + [ + -117.171161, + 33.729855 + ], + [ + -117.171296, + 33.729855 + ], + [ + -117.171377, + 33.729878 + ], + [ + -117.171465, + 33.729901 + ], + [ + -117.171575, + 33.729913 + ], + [ + -117.171633, + 33.729905 + ], + [ + -117.17167, + 33.729884 + ], + [ + -117.171707, + 33.729847 + ], + [ + -117.171723, + 33.729808 + ], + [ + -117.17173, + 33.729754 + ], + [ + -117.171721, + 33.729704 + ], + [ + -117.171691, + 33.729658 + ], + [ + -117.17164, + 33.729602 + ], + [ + -117.171547, + 33.729544 + ], + [ + -117.171396, + 33.729449 + ], + [ + -117.171142, + 33.729327 + ], + [ + -117.170965, + 33.729211 + ], + [ + -117.170884, + 33.729153 + ], + [ + -117.170842, + 33.72911 + ], + [ + -117.170791, + 33.72905 + ], + [ + -117.170763, + 33.72896 + ], + [ + -117.170719, + 33.728845 + ], + [ + -117.170621, + 33.728652 + ], + [ + -117.170584, + 33.728528 + ], + [ + -117.170589, + 33.728457 + ], + [ + -117.170607, + 33.728352 + ], + [ + -117.170677, + 33.728258 + ], + [ + -117.170761, + 33.72814 + ], + [ + -117.17087, + 33.728016 + ], + [ + -117.170961, + 33.727901 + ], + [ + -117.171076, + 33.727682 + ], + [ + -117.171194, + 33.727537 + ], + [ + -117.171335, + 33.727445 + ], + [ + -117.171474, + 33.727364 + ], + [ + -117.171576, + 33.727289 + ], + [ + -117.171634, + 33.727232 + ], + [ + -117.171642, + 33.727176 + ], + [ + -117.171642, + 33.727124 + ], + [ + -117.171604, + 33.727086 + ], + [ + -117.171567, + 33.72707 + ], + [ + -117.171474, + 33.727064 + ], + [ + -117.171407, + 33.72707 + ], + [ + -117.171328, + 33.727078 + ], + [ + -117.171258, + 33.727058 + ], + [ + -117.17119, + 33.727028 + ], + [ + -117.171104, + 33.726981 + ], + [ + -117.170863, + 33.726929 + ], + [ + -117.170731, + 33.72689 + ], + [ + -117.17061, + 33.726852 + ], + [ + -117.170429, + 33.726797 + ], + [ + -117.17032, + 33.726748 + ], + [ + -117.170097, + 33.726587 + ], + [ + -117.169814, + 33.726453 + ], + [ + -117.169574, + 33.726324 + ], + [ + -117.169426, + 33.726217 + ], + [ + -117.169353, + 33.72613 + ], + [ + -117.169265, + 33.726067 + ], + [ + -117.169163, + 33.725999 + ], + [ + -117.169087, + 33.725977 + ], + [ + -117.168988, + 33.725966 + ], + [ + -117.16888, + 33.72596 + ], + [ + -117.168785, + 33.725982 + ], + [ + -117.168709, + 33.726021 + ], + [ + -117.168653, + 33.72607 + ], + [ + -117.168627, + 33.726127 + ], + [ + -117.16862, + 33.726182 + ], + [ + -117.16862, + 33.726245 + ], + [ + -117.168646, + 33.726286 + ], + [ + -117.168699, + 33.726343 + ], + [ + -117.168772, + 33.726382 + ], + [ + -117.168834, + 33.726404 + ], + [ + -117.168952, + 33.726428 + ], + [ + -117.169061, + 33.726425 + ], + [ + -117.169183, + 33.726412 + ], + [ + -117.169304, + 33.726434 + ], + [ + -117.169413, + 33.72648 + ], + [ + -117.169478, + 33.726535 + ], + [ + -117.169534, + 33.726595 + ], + [ + -117.16961, + 33.72663 + ], + [ + -117.169679, + 33.726661 + ], + [ + -117.169852, + 33.726729 + ], + [ + -117.170072, + 33.726872 + ], + [ + -117.170237, + 33.727 + ], + [ + -117.1704, + 33.72716 + ], + [ + -117.170482, + 33.727261 + ], + [ + -117.170498, + 33.727332 + ], + [ + -117.170472, + 33.727386 + ], + [ + -117.170435, + 33.727444 + ], + [ + -117.170398, + 33.72746 + ], + [ + -117.170384, + 33.727456 + ], + [ + -117.170386, + 33.727413 + ], + [ + -117.170407, + 33.727334 + ], + [ + -117.170386, + 33.727245 + ], + [ + -117.170342, + 33.727178 + ], + [ + -117.17024, + 33.727085 + ], + [ + -117.17014, + 33.727005 + ], + [ + -117.170072, + 33.726971 + ], + [ + -117.169991, + 33.726928 + ], + [ + -117.169959, + 33.726905 + ], + [ + -117.169924, + 33.726868 + ], + [ + -117.16987, + 33.726826 + ], + [ + -117.169763, + 33.726773 + ], + [ + -117.16968, + 33.726752 + ], + [ + -117.169582, + 33.726754 + ], + [ + -117.169482, + 33.726783 + ], + [ + -117.169389, + 33.726818 + ], + [ + -117.169312, + 33.726824 + ], + [ + -117.169198, + 33.726804 + ], + [ + -117.169094, + 33.726768 + ], + [ + -117.168933, + 33.726673 + ], + [ + -117.168745, + 33.726524 + ], + [ + -117.168454, + 33.726278 + ], + [ + -117.168282, + 33.726172 + ], + [ + -117.168117, + 33.726048 + ], + [ + -117.167968, + 33.725893 + ], + [ + -117.167878, + 33.725772 + ], + [ + -117.167787, + 33.725646 + ], + [ + -117.167643, + 33.725495 + ], + [ + -117.167475, + 33.725362 + ], + [ + -117.167174, + 33.725184 + ], + [ + -117.167016, + 33.725129 + ], + [ + -117.166881, + 33.725118 + ], + [ + -117.166335, + 33.725102 + ], + [ + -117.166256, + 33.725127 + ], + [ + -117.166233, + 33.725176 + ], + [ + -117.166223, + 33.725228 + ], + [ + -117.16625, + 33.725302 + ], + [ + -117.166276, + 33.725408 + ], + [ + -117.166246, + 33.725452 + ], + [ + -117.166204, + 33.725487 + ], + [ + -117.166074, + 33.725504 + ], + [ + -117.165869, + 33.725458 + ], + [ + -117.165785, + 33.7254 + ], + [ + -117.165758, + 33.725291 + ], + [ + -117.165767, + 33.72521 + ], + [ + -117.165744, + 33.725121 + ], + [ + -117.165758, + 33.725036 + ], + [ + -117.165711, + 33.724998 + ], + [ + -117.165649, + 33.724973 + ], + [ + -117.165329, + 33.724905 + ], + [ + -117.16482, + 33.724826 + ], + [ + -117.164652, + 33.724818 + ], + [ + -117.164583, + 33.724776 + ], + [ + -117.16455, + 33.724675 + ], + [ + -117.164563, + 33.724626 + ], + [ + -117.16457, + 33.724599 + ], + [ + -117.164619, + 33.724569 + ], + [ + -117.164715, + 33.724569 + ], + [ + -117.164876, + 33.724604 + ], + [ + -117.16504, + 33.724643 + ], + [ + -117.165165, + 33.724601 + ], + [ + -117.165241, + 33.724569 + ], + [ + -117.16531, + 33.724632 + ], + [ + -117.165395, + 33.724662 + ], + [ + -117.165576, + 33.724714 + ], + [ + -117.165875, + 33.724763 + ], + [ + -117.166004, + 33.724779 + ], + [ + -117.166099, + 33.724774 + ], + [ + -117.166125, + 33.724733 + ], + [ + -117.166152, + 33.72467 + ], + [ + -117.166138, + 33.724588 + ], + [ + -117.166112, + 33.724478 + ], + [ + -117.166037, + 33.724372 + ], + [ + -117.165941, + 33.724303 + ], + [ + -117.165793, + 33.724246 + ], + [ + -117.165629, + 33.724191 + ], + [ + -117.165514, + 33.72415 + ], + [ + -117.165441, + 33.724096 + ], + [ + -117.165425, + 33.724016 + ], + [ + -117.165468, + 33.72394 + ], + [ + -117.165533, + 33.723874 + ], + [ + -117.165616, + 33.723765 + ], + [ + -117.165616, + 33.723694 + ], + [ + -117.165583, + 33.723642 + ], + [ + -117.165454, + 33.723565 + ], + [ + -117.165211, + 33.723447 + ], + [ + -117.165089, + 33.723387 + ], + [ + -117.164991, + 33.723297 + ], + [ + -117.164988, + 33.723204 + ], + [ + -117.164955, + 33.723117 + ], + [ + -117.164823, + 33.723037 + ], + [ + -117.1646, + 33.722952 + ], + [ + -117.164409, + 33.722879 + ], + [ + -117.164136, + 33.722799 + ], + [ + -117.163909, + 33.722742 + ], + [ + -117.163768, + 33.722693 + ], + [ + -117.163669, + 33.722627 + ], + [ + -117.16357, + 33.722561 + ], + [ + -117.163475, + 33.722501 + ], + [ + -117.163363, + 33.722493 + ], + [ + -117.163209, + 33.722619 + ], + [ + -117.163161, + 33.722663 + ], + [ + -117.163107, + 33.722712 + ], + [ + -117.162723, + 33.723172 + ], + [ + -117.162752, + 33.724851 + ], + [ + -117.162667, + 33.724857 + ], + [ + -117.162571, + 33.724919 + ], + [ + -117.162499, + 33.725043 + ], + [ + -117.162433, + 33.725119 + ], + [ + -117.162364, + 33.725152 + ], + [ + -117.162269, + 33.725152 + ], + [ + -117.16217, + 33.725086 + ], + [ + -117.162137, + 33.725004 + ], + [ + -117.162177, + 33.724914 + ], + [ + -117.162249, + 33.724881 + ], + [ + -117.162308, + 33.724829 + ], + [ + -117.162331, + 33.724769 + ], + [ + -117.162285, + 33.724662 + ], + [ + -117.162193, + 33.724594 + ], + [ + -117.162147, + 33.724504 + ], + [ + -117.162187, + 33.724408 + ], + [ + -117.162262, + 33.724337 + ], + [ + -117.162289, + 33.724277 + ], + [ + -117.162272, + 33.724195 + ], + [ + -117.16217, + 33.724094 + ], + [ + -117.162111, + 33.724012 + ], + [ + -117.162111, + 33.72391 + ], + [ + -117.162157, + 33.723831 + ], + [ + -117.1622, + 33.723754 + ], + [ + -117.162357, + 33.723648 + ], + [ + -117.162427, + 33.723533 + ], + [ + -117.162469, + 33.72344 + ], + [ + -117.162469, + 33.723317 + ], + [ + -117.162509, + 33.723257 + ], + [ + -117.162519, + 33.723175 + ], + [ + -117.162463, + 33.72312 + ], + [ + -117.162354, + 33.72306 + ], + [ + -117.162302, + 33.722986 + ], + [ + -117.162295, + 33.722909 + ], + [ + -117.162335, + 33.722838 + ], + [ + -117.162427, + 33.722762 + ], + [ + -117.162486, + 33.722699 + ], + [ + -117.162535, + 33.722614 + ], + [ + -117.162486, + 33.72257 + ], + [ + -117.1624, + 33.722581 + ], + [ + -117.162325, + 33.722639 + ], + [ + -117.162226, + 33.72265 + ], + [ + -117.162121, + 33.7226 + ], + [ + -117.162055, + 33.722535 + ], + [ + -117.161983, + 33.72245 + ], + [ + -117.161887, + 33.722406 + ], + [ + -117.161769, + 33.722313 + ], + [ + -117.161739, + 33.722237 + ], + [ + -117.161743, + 33.722146 + ], + [ + -117.161736, + 33.72146 + ], + [ + -117.1617, + 33.721353 + ], + [ + -117.161631, + 33.721301 + ], + [ + -117.161535, + 33.721266 + ], + [ + -117.161457, + 33.721236 + ], + [ + -117.161397, + 33.721195 + ], + [ + -117.161378, + 33.72117 + ], + [ + -117.161368, + 33.721145 + ], + [ + -117.161868, + 33.720965 + ], + [ + -117.162277, + 33.720785 + ], + [ + -117.162884, + 33.720441 + ], + [ + -117.163786, + 33.7199 + ], + [ + -117.164828, + 33.719295 + ], + [ + -117.165767, + 33.718768 + ], + [ + -117.166356, + 33.718457 + ], + [ + -117.166372, + 33.718527 + ], + [ + -117.164011, + 33.719856 + ], + [ + -117.164886, + 33.721216 + ], + [ + -117.165333, + 33.721213 + ], + [ + -117.166766, + 33.721193 + ], + [ + -117.166772, + 33.721336 + ], + [ + -117.166786, + 33.721457 + ], + [ + -117.166846, + 33.721731 + ], + [ + -117.16695, + 33.72201 + ], + [ + -117.167124, + 33.722251 + ], + [ + -117.167249, + 33.722387 + ], + [ + -117.16732, + 33.722454 + ], + [ + -117.167418, + 33.722508 + ], + [ + -117.167513, + 33.722508 + ], + [ + -117.167655, + 33.722468 + ], + [ + -117.168082, + 33.722262 + ], + [ + -117.168275, + 33.72222 + ], + [ + -117.168385, + 33.722209 + ], + [ + -117.168458, + 33.722214 + ], + [ + -117.16861, + 33.72229 + ], + [ + -117.168825, + 33.722423 + ], + [ + -117.168891, + 33.722482 + ], + [ + -117.168922, + 33.722525 + ], + [ + -117.168972, + 33.72269 + ], + [ + -117.168997, + 33.72288 + ], + [ + -117.169031, + 33.723002 + ], + [ + -117.169092, + 33.723081 + ], + [ + -117.169117, + 33.723101 + ], + [ + -117.169166, + 33.723105 + ], + [ + -117.169214, + 33.723097 + ], + [ + -117.169271, + 33.723067 + ], + [ + -117.169369, + 33.72301 + ], + [ + -117.169447, + 33.722957 + ], + [ + -117.169515, + 33.722934 + ], + [ + -117.169338, + 33.723145 + ], + [ + -117.16927, + 33.723223 + ], + [ + -117.169243, + 33.72324 + ], + [ + -117.169168, + 33.723267 + ], + [ + -117.168496, + 33.723472 + ], + [ + -117.168409, + 33.723493 + ], + [ + -117.168368, + 33.723498 + ], + [ + -117.168323, + 33.723495 + ], + [ + -117.168432, + 33.72302 + ], + [ + -117.168426, + 33.722971 + ], + [ + -117.168393, + 33.722913 + ], + [ + -117.168342, + 33.722874 + ], + [ + -117.168235, + 33.722827 + ], + [ + -117.168084, + 33.722804 + ], + [ + -117.167962, + 33.722801 + ], + [ + -117.167807, + 33.722839 + ], + [ + -117.167715, + 33.722894 + ], + [ + -117.167678, + 33.722928 + ], + [ + -117.167654, + 33.722963 + ], + [ + -117.167579, + 33.72323 + ], + [ + -117.167679, + 33.723384 + ], + [ + -117.167745, + 33.723409 + ], + [ + -117.167806, + 33.723433 + ], + [ + -117.168299, + 33.72357 + ], + [ + -117.16831, + 33.723533 + ], + [ + -117.168393, + 33.723534 + ], + [ + -117.168481, + 33.723526 + ], + [ + -117.168564, + 33.723498 + ], + [ + -117.169182, + 33.723297 + ], + [ + -117.169259, + 33.723272 + ], + [ + -117.169304, + 33.723247 + ], + [ + -117.169341, + 33.723212 + ], + [ + -117.16937, + 33.723179 + ], + [ + -117.169579, + 33.722943 + ], + [ + -117.169596, + 33.722924 + ], + [ + -117.169622, + 33.722921 + ], + [ + -117.169673, + 33.722908 + ], + [ + -117.169766, + 33.722884 + ], + [ + -117.169889, + 33.722866 + ], + [ + -117.169994, + 33.722857 + ], + [ + -117.1701, + 33.722862 + ], + [ + -117.170137, + 33.722883 + ], + [ + -117.170199, + 33.722924 + ], + [ + -117.170266, + 33.722969 + ], + [ + -117.170321, + 33.722984 + ], + [ + -117.170405, + 33.723 + ], + [ + -117.170455, + 33.723022 + ], + [ + -117.170489, + 33.723036 + ], + [ + -117.170501, + 33.723066 + ], + [ + -117.170497, + 33.72311 + ], + [ + -117.170465, + 33.723145 + ], + [ + -117.17047, + 33.723185 + ], + [ + -117.170522, + 33.72319 + ], + [ + -117.170596, + 33.723181 + ], + [ + -117.17066, + 33.723159 + ], + [ + -117.170717, + 33.723159 + ], + [ + -117.170784, + 33.723172 + ], + [ + -117.170818, + 33.723202 + ], + [ + -117.17083, + 33.723237 + ], + [ + -117.170828, + 33.723272 + ], + [ + -117.170757, + 33.723316 + ], + [ + -117.170696, + 33.72334 + ], + [ + -117.170667, + 33.723377 + ], + [ + -117.170675, + 33.723431 + ], + [ + -117.170732, + 33.723483 + ], + [ + -117.170822, + 33.723534 + ], + [ + -117.170895, + 33.7236 + ], + [ + -117.170923, + 33.723678 + ], + [ + -117.170931, + 33.72372 + ], + [ + -117.170937, + 33.723767 + ], + [ + -117.170973, + 33.7238 + ], + [ + -117.171044, + 33.723841 + ], + [ + -117.171092, + 33.723882 + ], + [ + -117.171125, + 33.723961 + ], + [ + -117.171115, + 33.723998 + ], + [ + -117.171091, + 33.724032 + ], + [ + -117.171088, + 33.724064 + ], + [ + -117.171116, + 33.724083 + ], + [ + -117.171153, + 33.724089 + ], + [ + -117.171193, + 33.724101 + ], + [ + -117.171221, + 33.724127 + ], + [ + -117.17123, + 33.724161 + ], + [ + -117.171221, + 33.724183 + ], + [ + -117.171198, + 33.724206 + ], + [ + -117.171155, + 33.724223 + ], + [ + -117.171117, + 33.724246 + ], + [ + -117.171101, + 33.724283 + ], + [ + -117.171104, + 33.724307 + ], + [ + -117.171129, + 33.72433 + ], + [ + -117.171152, + 33.724341 + ], + [ + -117.171211, + 33.724341 + ], + [ + -117.171276, + 33.724329 + ], + [ + -117.171375, + 33.724291 + ], + [ + -117.171445, + 33.724254 + ], + [ + -117.1715, + 33.724241 + ], + [ + -117.171547, + 33.724248 + ], + [ + -117.17158, + 33.724262 + ], + [ + -117.171612, + 33.72427 + ], + [ + -117.171636, + 33.724273 + ], + [ + -117.171646, + 33.724294 + ], + [ + -117.171657, + 33.724406 + ], + [ + -117.171671, + 33.725093 + ], + [ + -117.171685, + 33.726736 + ], + [ + -117.171694, + 33.726916 + ], + [ + -117.171704, + 33.72696 + ], + [ + -117.171759, + 33.727003 + ], + [ + -117.17184, + 33.727061 + ], + [ + -117.171965, + 33.727106 + ], + [ + -117.172213, + 33.727138 + ], + [ + -117.172401, + 33.727159 + ], + [ + -117.17258, + 33.727205 + ], + [ + -117.172811, + 33.727328 + ], + [ + -117.172979, + 33.727424 + ], + [ + -117.173199, + 33.727602 + ], + [ + -117.173489, + 33.727864 + ], + [ + -117.173866, + 33.728183 + ], + [ + -117.1741, + 33.728349 + ], + [ + -117.174132, + 33.72838 + ], + [ + -117.174227, + 33.728426 + ], + [ + -117.174314, + 33.728426 + ], + [ + -117.174496, + 33.728394 + ], + [ + -117.174591, + 33.728358 + ], + [ + -117.174603, + 33.728315 + ], + [ + -117.174554, + 33.728267 + ], + [ + -117.174557, + 33.728219 + ], + [ + -117.174603, + 33.728159 + ], + [ + -117.174799, + 33.728041 + ], + [ + -117.174937, + 33.728002 + ], + [ + -117.175221, + 33.727985 + ], + [ + -117.175353, + 33.727997 + ], + [ + -117.175434, + 33.728012 + ], + [ + -117.175515, + 33.728 + ], + [ + -117.175908, + 33.727906 + ], + [ + -117.176686, + 33.727663 + ], + [ + -117.176978, + 33.727596 + ], + [ + -117.177189, + 33.727526 + ], + [ + -117.177342, + 33.727457 + ], + [ + -117.177469, + 33.727384 + ], + [ + -117.177697, + 33.727199 + ], + [ + -117.177966, + 33.726957 + ], + [ + -117.178012, + 33.726925 + ], + [ + -117.17809, + 33.726923 + ], + [ + -117.178142, + 33.726935 + ], + [ + -117.178192, + 33.726961 + ], + [ + -117.178244, + 33.727021 + ], + [ + -117.178336, + 33.727091 + ], + [ + -117.178423, + 33.727125 + ], + [ + -117.178495, + 33.727134 + ], + [ + -117.178576, + 33.727122 + ], + [ + -117.178657, + 33.727106 + ], + [ + -117.178741, + 33.727084 + ], + [ + -117.17883, + 33.727065 + ], + [ + -117.178905, + 33.727082 + ], + [ + -117.178949, + 33.72711 + ], + [ + -117.178966, + 33.727159 + ], + [ + -117.17896, + 33.727207 + ], + [ + -117.17892, + 33.727238 + ], + [ + -117.178865, + 33.727279 + ], + [ + -117.178772, + 33.727324 + ], + [ + -117.178602, + 33.727394 + ], + [ + -117.178368, + 33.727514 + ], + [ + -117.178168, + 33.727639 + ], + [ + -117.178079, + 33.727752 + ], + [ + -117.178024, + 33.727925 + ], + [ + -117.177992, + 33.72812 + ], + [ + -117.17796, + 33.728238 + ], + [ + -117.177963, + 33.728281 + ], + [ + -117.177995, + 33.7283 + ], + [ + -117.178056, + 33.72831 + ], + [ + -117.178148, + 33.72831 + ], + [ + -117.17831, + 33.728298 + ], + [ + -117.178446, + 33.728305 + ], + [ + -117.178596, + 33.728332 + ], + [ + -117.17877, + 33.728358 + ], + [ + -117.178926, + 33.728358 + ], + [ + -117.179064, + 33.728341 + ], + [ + -117.179177, + 33.728339 + ], + [ + -117.17929, + 33.728357 + ], + [ + -117.179577, + 33.728371 + ], + [ + -117.179793, + 33.728388 + ], + [ + -117.17992, + 33.728418 + ], + [ + -117.176114, + 33.728381 + ], + [ + -117.17599, + 33.728391 + ], + [ + -117.1759, + 33.728437 + ], + [ + -117.175891, + 33.728487 + ], + [ + -117.175932, + 33.728538 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 203026166, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.210987, + 33.727049 + ], + [ + -117.210987, + 33.726711 + ], + [ + -117.211258, + 33.726706 + ], + [ + -117.211258, + 33.725038 + ], + [ + -117.209919, + 33.725029 + ], + [ + -117.209914, + 33.725428 + ], + [ + -117.209733, + 33.725611 + ], + [ + -117.209755, + 33.726171 + ], + [ + -117.209823, + 33.726255 + ], + [ + -117.20984, + 33.726434 + ], + [ + -117.209964, + 33.72673 + ], + [ + -117.20997, + 33.727064 + ], + [ + -117.210987, + 33.727049 + ] + ] + ] + }, + "properties": { + "name": "Sun Ranch Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 203027226, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.199876, + 33.735173 + ], + [ + -117.199877, + 33.734809 + ], + [ + -117.199879, + 33.734527 + ], + [ + -117.199881, + 33.734249 + ], + [ + -117.199882, + 33.734088 + ], + [ + -117.199804, + 33.734068 + ], + [ + -117.199708, + 33.734051 + ], + [ + -117.199613, + 33.734037 + ], + [ + -117.199536, + 33.734031 + ], + [ + -117.199428, + 33.734029 + ], + [ + -117.199084, + 33.734027 + ], + [ + -117.198702, + 33.734027 + ], + [ + -117.1987, + 33.734341 + ], + [ + -117.198613, + 33.734681 + ], + [ + -117.19866, + 33.734689 + ], + [ + -117.198705, + 33.734714 + ], + [ + -117.198734, + 33.73475 + ], + [ + -117.198746, + 33.734785 + ], + [ + -117.198744, + 33.734832 + ], + [ + -117.198727, + 33.734867 + ], + [ + -117.19867, + 33.734958 + ], + [ + -117.198616, + 33.735052 + ], + [ + -117.198613, + 33.735118 + ], + [ + -117.198675, + 33.735168 + ], + [ + -117.199876, + 33.735173 + ] + ] + ] + }, + "properties": { + "name": "Nova Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 224387407, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.241146, + 33.715213 + ], + [ + -117.241257, + 33.715655 + ], + [ + -117.241265, + 33.715772 + ], + [ + -117.241228, + 33.715948 + ], + [ + -117.241159, + 33.716143 + ], + [ + -117.241101, + 33.716155 + ], + [ + -117.240808, + 33.716143 + ], + [ + -117.240698, + 33.7159 + ], + [ + -117.240695, + 33.715284 + ], + [ + -117.240701, + 33.715187 + ], + [ + -117.240808, + 33.715082 + ], + [ + -117.240948, + 33.715039 + ], + [ + -117.241146, + 33.715213 + ] + ] + ] + }, + "properties": { + "name": "Kabian Park, Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 237094952, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.145632, + 33.70823 + ], + [ + -117.145553, + 33.708174 + ], + [ + -117.145537, + 33.707239 + ], + [ + -117.145654, + 33.70725 + ], + [ + -117.146844, + 33.708238 + ], + [ + -117.145632, + 33.70823 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 237095993, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.20237, + 33.724587 + ], + [ + -117.202374, + 33.724325 + ], + [ + -117.202348, + 33.724289 + ], + [ + -117.202221, + 33.724287 + ], + [ + -117.202175, + 33.724309 + ], + [ + -117.202176, + 33.724585 + ], + [ + -117.202207, + 33.724615 + ], + [ + -117.202338, + 33.724617 + ], + [ + -117.20237, + 33.724587 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 244279718, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.147296, + 33.702818 + ], + [ + -117.14729, + 33.702786 + ], + [ + -117.147251, + 33.702587 + ], + [ + -117.147235, + 33.702514 + ], + [ + -117.147187, + 33.702433 + ], + [ + -117.147103, + 33.702351 + ], + [ + -117.14704, + 33.702317 + ], + [ + -117.146947, + 33.702281 + ], + [ + -117.146857, + 33.702239 + ], + [ + -117.146806, + 33.702188 + ], + [ + -117.14678, + 33.702154 + ], + [ + -117.14678, + 33.702134 + ], + [ + -117.146789, + 33.702115 + ], + [ + -117.146763, + 33.702095 + ], + [ + -117.146689, + 33.702149 + ], + [ + -117.146537, + 33.702254 + ], + [ + -117.146294, + 33.702399 + ], + [ + -117.146038, + 33.702529 + ], + [ + -117.145896, + 33.702596 + ], + [ + -117.145672, + 33.702689 + ], + [ + -117.14547, + 33.702762 + ], + [ + -117.145465, + 33.702947 + ], + [ + -117.145422, + 33.703024 + ], + [ + -117.145433, + 33.703065 + ], + [ + -117.145636, + 33.703068 + ], + [ + -117.145956, + 33.70311 + ], + [ + -117.146103, + 33.703128 + ], + [ + -117.146372, + 33.703136 + ], + [ + -117.147296, + 33.703142 + ], + [ + -117.147292, + 33.70301 + ], + [ + -117.147289, + 33.702859 + ], + [ + -117.147296, + 33.702818 + ] + ] + ] + }, + "properties": { + "name": "El Dorado Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305909879, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.159961, + 33.674281 + ], + [ + -117.159898, + 33.674357 + ], + [ + -117.159913, + 33.675181 + ], + [ + -117.160167, + 33.675169 + ], + [ + -117.160432, + 33.675093 + ], + [ + -117.160628, + 33.674997 + ], + [ + -117.160801, + 33.674849 + ], + [ + -117.160917, + 33.674665 + ], + [ + -117.160974, + 33.674497 + ], + [ + -117.160998, + 33.674293 + ], + [ + -117.159961, + 33.674281 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305909889, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.222978, + 33.689367 + ], + [ + -117.222899, + 33.689687 + ], + [ + -117.223089, + 33.689719 + ], + [ + -117.223168, + 33.6894 + ], + [ + -117.222978, + 33.689367 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305909897, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.159269, + 33.672938 + ], + [ + -117.159336, + 33.672898 + ], + [ + -117.159341, + 33.672422 + ], + [ + -117.15887, + 33.67241 + ], + [ + -117.158788, + 33.672478 + ], + [ + -117.158726, + 33.67259 + ], + [ + -117.158721, + 33.672922 + ], + [ + -117.159269, + 33.672938 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305909900, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.158185, + 33.674932 + ], + [ + -117.158304, + 33.674931 + ], + [ + -117.158394, + 33.674931 + ], + [ + -117.158395, + 33.67503 + ], + [ + -117.1586, + 33.675029 + ], + [ + -117.158602, + 33.675376 + ], + [ + -117.158385, + 33.675377 + ], + [ + -117.158384, + 33.675265 + ], + [ + -117.158186, + 33.675266 + ], + [ + -117.158185, + 33.674932 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305909905, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.160873, + 33.672426 + ], + [ + -117.160936, + 33.672486 + ], + [ + -117.160922, + 33.673058 + ], + [ + -117.160681, + 33.67303 + ], + [ + -117.160532, + 33.672978 + ], + [ + -117.160374, + 33.67289 + ], + [ + -117.160278, + 33.67279 + ], + [ + -117.160206, + 33.67265 + ], + [ + -117.160182, + 33.67245 + ], + [ + -117.160873, + 33.672426 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 305909907, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.159269, + 33.67427 + ], + [ + -117.159346, + 33.674346 + ], + [ + -117.159331, + 33.675173 + ], + [ + -117.15928, + 33.675174 + ], + [ + -117.15919, + 33.675176 + ], + [ + -117.158985, + 33.675153 + ], + [ + -117.158745, + 33.675069 + ], + [ + -117.158495, + 33.674917 + ], + [ + -117.158361, + 33.674753 + ], + [ + -117.158255, + 33.674505 + ], + [ + -117.158249, + 33.67434 + ], + [ + -117.158246, + 33.674253 + ], + [ + -117.159269, + 33.67427 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 313768405, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.125832, + 33.598371 + ], + [ + -117.125816, + 33.598345 + ], + [ + -117.125808, + 33.598315 + ], + [ + -117.125822, + 33.598256 + ], + [ + -117.125813, + 33.598231 + ], + [ + -117.12579, + 33.598231 + ], + [ + -117.125762, + 33.59824 + ], + [ + -117.125666, + 33.598343 + ], + [ + -117.125592, + 33.598407 + ], + [ + -117.125525, + 33.598431 + ], + [ + -117.125302, + 33.598492 + ], + [ + -117.12521, + 33.598531 + ], + [ + -117.125132, + 33.598596 + ], + [ + -117.12509, + 33.598643 + ], + [ + -117.124992, + 33.598683 + ], + [ + -117.124878, + 33.598703 + ], + [ + -117.124827, + 33.59872 + ], + [ + -117.124803, + 33.598732 + ], + [ + -117.124795, + 33.598767 + ], + [ + -117.124819, + 33.598782 + ], + [ + -117.124855, + 33.598793 + ], + [ + -117.124919, + 33.59884 + ], + [ + -117.124877, + 33.598867 + ], + [ + -117.124807, + 33.598824 + ], + [ + -117.124471, + 33.59888 + ], + [ + -117.124505, + 33.599032 + ], + [ + -117.124558, + 33.599176 + ], + [ + -117.124629, + 33.599327 + ], + [ + -117.124692, + 33.599538 + ], + [ + -117.124693, + 33.599551 + ], + [ + -117.124645, + 33.599558 + ], + [ + -117.124617, + 33.599442 + ], + [ + -117.124593, + 33.599399 + ], + [ + -117.124552, + 33.599357 + ], + [ + -117.124555, + 33.599299 + ], + [ + -117.124496, + 33.599201 + ], + [ + -117.124472, + 33.599154 + ], + [ + -117.124465, + 33.599101 + ], + [ + -117.124456, + 33.599074 + ], + [ + -117.124431, + 33.59902 + ], + [ + -117.124428, + 33.598985 + ], + [ + -117.124417, + 33.598953 + ], + [ + -117.124401, + 33.598908 + ], + [ + -117.124386, + 33.598877 + ], + [ + -117.124375, + 33.598852 + ], + [ + -117.124359, + 33.598866 + ], + [ + -117.124246, + 33.598915 + ], + [ + -117.124075, + 33.598924 + ], + [ + -117.123903, + 33.598924 + ], + [ + -117.123694, + 33.599013 + ], + [ + -117.123634, + 33.599066 + ], + [ + -117.123538, + 33.599069 + ], + [ + -117.123425, + 33.599079 + ], + [ + -117.123377, + 33.599095 + ], + [ + -117.12327, + 33.599169 + ], + [ + -117.123124, + 33.599295 + ], + [ + -117.123054, + 33.599346 + ], + [ + -117.122936, + 33.599417 + ], + [ + -117.122898, + 33.599439 + ], + [ + -117.122877, + 33.599405 + ], + [ + -117.122905, + 33.599373 + ], + [ + -117.122922, + 33.599345 + ], + [ + -117.122955, + 33.599327 + ], + [ + -117.123078, + 33.599262 + ], + [ + -117.123242, + 33.599116 + ], + [ + -117.123346, + 33.599054 + ], + [ + -117.123477, + 33.599013 + ], + [ + -117.123551, + 33.598987 + ], + [ + -117.123607, + 33.598933 + ], + [ + -117.123724, + 33.598881 + ], + [ + -117.123866, + 33.598834 + ], + [ + -117.123987, + 33.598831 + ], + [ + -117.124083, + 33.598815 + ], + [ + -117.124185, + 33.598792 + ], + [ + -117.124288, + 33.598743 + ], + [ + -117.124364, + 33.598697 + ], + [ + -117.124597, + 33.598625 + ], + [ + -117.124721, + 33.5986 + ], + [ + -117.124839, + 33.5986 + ], + [ + -117.124956, + 33.598583 + ], + [ + -117.125037, + 33.598535 + ], + [ + -117.125084, + 33.598497 + ], + [ + -117.125186, + 33.598419 + ], + [ + -117.125286, + 33.59839 + ], + [ + -117.125415, + 33.598346 + ], + [ + -117.125564, + 33.598256 + ], + [ + -117.125675, + 33.598199 + ], + [ + -117.125769, + 33.598123 + ], + [ + -117.125856, + 33.598084 + ], + [ + -117.125902, + 33.59805 + ], + [ + -117.1264, + 33.598036 + ], + [ + -117.126407, + 33.598108 + ], + [ + -117.126488, + 33.598781 + ], + [ + -117.126509, + 33.599162 + ], + [ + -117.126541, + 33.599624 + ], + [ + -117.126603, + 33.600191 + ], + [ + -117.126647, + 33.600699 + ], + [ + -117.12668, + 33.60102 + ], + [ + -117.126676, + 33.601116 + ], + [ + -117.126656, + 33.60117 + ], + [ + -117.126602, + 33.601231 + ], + [ + -117.126605, + 33.601253 + ], + [ + -117.126631, + 33.601259 + ], + [ + -117.126899, + 33.601162 + ], + [ + -117.126941, + 33.601146 + ], + [ + -117.127074, + 33.601089 + ], + [ + -117.127114, + 33.601106 + ], + [ + -117.126955, + 33.60118 + ], + [ + -117.126699, + 33.601273 + ], + [ + -117.126641, + 33.601294 + ], + [ + -117.125998, + 33.601476 + ], + [ + -117.125883, + 33.601419 + ], + [ + -117.125783, + 33.601184 + ], + [ + -117.125822, + 33.601137 + ], + [ + -117.125934, + 33.601389 + ], + [ + -117.12597, + 33.601399 + ], + [ + -117.126498, + 33.60122 + ], + [ + -117.126586, + 33.601102 + ], + [ + -117.126541, + 33.600349 + ], + [ + -117.126473, + 33.599413 + ], + [ + -117.126423, + 33.598946 + ], + [ + -117.126301, + 33.598207 + ], + [ + -117.125971, + 33.598245 + ], + [ + -117.125864, + 33.598361 + ], + [ + -117.125832, + 33.598371 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 313768406, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.126667, + 33.601574 + ], + [ + -117.126455, + 33.601639 + ], + [ + -117.125075, + 33.602053 + ], + [ + -117.124418, + 33.602252 + ], + [ + -117.124226, + 33.602617 + ], + [ + -117.124524, + 33.60328 + ], + [ + -117.12477, + 33.603623 + ], + [ + -117.124936, + 33.603822 + ], + [ + -117.125107, + 33.604014 + ], + [ + -117.125084, + 33.604091 + ], + [ + -117.125553, + 33.604474 + ], + [ + -117.125944, + 33.604722 + ], + [ + -117.12619, + 33.604888 + ], + [ + -117.126402, + 33.604794 + ], + [ + -117.126588, + 33.604651 + ], + [ + -117.126727, + 33.604457 + ], + [ + -117.126773, + 33.604319 + ], + [ + -117.12678, + 33.604059 + ], + [ + -117.126667, + 33.601574 + ] + ] + ] + }, + "properties": { + "name": "Spencer's Crossing Sports Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 313902740, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.14333, + 33.688683 + ], + [ + -117.142107, + 33.690219 + ], + [ + -117.141583, + 33.690893 + ], + [ + -117.140955, + 33.691717 + ], + [ + -117.140443, + 33.692364 + ], + [ + -117.139956, + 33.692913 + ], + [ + -117.139537, + 33.693255 + ], + [ + -117.139102, + 33.693587 + ], + [ + -117.138671, + 33.693882 + ], + [ + -117.138188, + 33.69415 + ], + [ + -117.137985, + 33.694244 + ], + [ + -117.137981, + 33.69416 + ], + [ + -117.137977, + 33.69408 + ], + [ + -117.137989, + 33.694003 + ], + [ + -117.138046, + 33.693922 + ], + [ + -117.138054, + 33.693835 + ], + [ + -117.137933, + 33.693627 + ], + [ + -117.137861, + 33.69349 + ], + [ + -117.137889, + 33.693299 + ], + [ + -117.137889, + 33.693225 + ], + [ + -117.137865, + 33.693078 + ], + [ + -117.137728, + 33.692847 + ], + [ + -117.137563, + 33.692485 + ], + [ + -117.137486, + 33.692287 + ], + [ + -117.13747, + 33.692052 + ], + [ + -117.137482, + 33.691892 + ], + [ + -117.137563, + 33.691727 + ], + [ + -117.137663, + 33.691543 + ], + [ + -117.137708, + 33.691366 + ], + [ + -117.137687, + 33.691221 + ], + [ + -117.137659, + 33.691091 + ], + [ + -117.137546, + 33.690964 + ], + [ + -117.13741, + 33.690866 + ], + [ + -117.13714, + 33.690816 + ], + [ + -117.136854, + 33.690759 + ], + [ + -117.1366, + 33.690672 + ], + [ + -117.136407, + 33.690525 + ], + [ + -117.136358, + 33.690444 + ], + [ + -117.136322, + 33.690223 + ], + [ + -117.136213, + 33.690125 + ], + [ + -117.136002, + 33.690068 + ], + [ + -117.135769, + 33.689983 + ], + [ + -117.135587, + 33.689822 + ], + [ + -117.13533, + 33.689561 + ], + [ + -117.135155, + 33.689343 + ], + [ + -117.135007, + 33.689182 + ], + [ + -117.134876, + 33.68913 + ], + [ + -117.134688, + 33.689064 + ], + [ + -117.134483, + 33.689016 + ], + [ + -117.134375, + 33.688941 + ], + [ + -117.134312, + 33.688789 + ], + [ + -117.134352, + 33.688647 + ], + [ + -117.13442, + 33.688519 + ], + [ + -117.13446, + 33.688405 + ], + [ + -117.134357, + 33.688286 + ], + [ + -117.134232, + 33.688196 + ], + [ + -117.134113, + 33.68804 + ], + [ + -117.134135, + 33.687931 + ], + [ + -117.134226, + 33.687808 + ], + [ + -117.134232, + 33.687694 + ], + [ + -117.134124, + 33.687571 + ], + [ + -117.13397, + 33.687443 + ], + [ + -117.133936, + 33.687291 + ], + [ + -117.133999, + 33.687116 + ], + [ + -117.134118, + 33.686979 + ], + [ + -117.134261, + 33.686836 + ], + [ + -117.134283, + 33.686656 + ], + [ + -117.134317, + 33.686372 + ], + [ + -117.134333, + 33.686235 + ], + [ + -117.134321, + 33.686104 + ], + [ + -117.13441, + 33.685997 + ], + [ + -117.134518, + 33.68593 + ], + [ + -117.134651, + 33.685806 + ], + [ + -117.134716, + 33.685726 + ], + [ + -117.134728, + 33.685615 + ], + [ + -117.13478, + 33.685414 + ], + [ + -117.134861, + 33.685206 + ], + [ + -117.134893, + 33.685045 + ], + [ + -117.136522, + 33.68505 + ], + [ + -117.136534, + 33.685389 + ], + [ + -117.136568, + 33.685534 + ], + [ + -117.136613, + 33.685605 + ], + [ + -117.136642, + 33.68564 + ], + [ + -117.136636, + 33.687057 + ], + [ + -117.136631, + 33.688029 + ], + [ + -117.136656, + 33.688327 + ], + [ + -117.136705, + 33.688671 + ], + [ + -117.136745, + 33.688667 + ], + [ + -117.13682, + 33.688662 + ], + [ + -117.14333, + 33.688683 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 313905839, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.150367, + 33.657822 + ], + [ + -117.153871, + 33.657812 + ], + [ + -117.153863, + 33.657273 + ], + [ + -117.153994, + 33.657645 + ], + [ + -117.154208, + 33.658045 + ], + [ + -117.154226, + 33.658103 + ], + [ + -117.154202, + 33.658137 + ], + [ + -117.154102, + 33.658208 + ], + [ + -117.154051, + 33.658257 + ], + [ + -117.154038, + 33.658308 + ], + [ + -117.154056, + 33.658552 + ], + [ + -117.154041, + 33.658668 + ], + [ + -117.154038, + 33.658826 + ], + [ + -117.154033, + 33.659348 + ], + [ + -117.153998, + 33.660427 + ], + [ + -117.154007, + 33.660604 + ], + [ + -117.154138, + 33.660683 + ], + [ + -117.154403, + 33.660737 + ], + [ + -117.154814, + 33.660761 + ], + [ + -117.154872, + 33.66074 + ], + [ + -117.154832, + 33.660553 + ], + [ + -117.15481, + 33.660429 + ], + [ + -117.154796, + 33.660356 + ], + [ + -117.154832, + 33.660208 + ], + [ + -117.154894, + 33.660217 + ], + [ + -117.155007, + 33.660444 + ], + [ + -117.155105, + 33.660574 + ], + [ + -117.15541, + 33.660749 + ], + [ + -117.155545, + 33.660982 + ], + [ + -117.155712, + 33.661146 + ], + [ + -117.155879, + 33.661209 + ], + [ + -117.156112, + 33.661291 + ], + [ + -117.15617, + 33.661369 + ], + [ + -117.156185, + 33.661457 + ], + [ + -117.156085, + 33.661833 + ], + [ + -117.15607, + 33.662188 + ], + [ + -117.156044, + 33.662393 + ], + [ + -117.156121, + 33.662697 + ], + [ + -117.156152, + 33.663008 + ], + [ + -117.156236, + 33.663081 + ], + [ + -117.15624, + 33.663244 + ], + [ + -117.155374, + 33.663232 + ], + [ + -117.155382, + 33.66377 + ], + [ + -117.155208, + 33.663721 + ], + [ + -117.15503, + 33.663606 + ], + [ + -117.154753, + 33.663455 + ], + [ + -117.15459, + 33.663401 + ], + [ + -117.154419, + 33.66341 + ], + [ + -117.15415, + 33.663455 + ], + [ + -117.153982, + 33.663578 + ], + [ + -117.153951, + 33.663606 + ], + [ + -117.153946, + 33.664184 + ], + [ + -117.153352, + 33.664188 + ], + [ + -117.153088, + 33.664452 + ], + [ + -117.152692, + 33.66491 + ], + [ + -117.15269, + 33.664919 + ], + [ + -117.152667, + 33.665026 + ], + [ + -117.15262, + 33.665402 + ], + [ + -117.152703, + 33.665749 + ], + [ + -117.152147, + 33.665928 + ], + [ + -117.151757, + 33.665903 + ], + [ + -117.151556, + 33.6658 + ], + [ + -117.151243, + 33.66589 + ], + [ + -117.150831, + 33.665732 + ], + [ + -117.150893, + 33.66562 + ], + [ + -117.150775, + 33.665608 + ], + [ + -117.150528, + 33.665633 + ], + [ + -117.150317, + 33.665612 + ], + [ + -117.15023, + 33.665569 + ], + [ + -117.149742, + 33.665351 + ], + [ + -117.14961, + 33.665351 + ], + [ + -117.149474, + 33.665612 + ], + [ + -117.149477, + 33.665712 + ], + [ + -117.149562, + 33.666072 + ], + [ + -117.149546, + 33.666234 + ], + [ + -117.149436, + 33.666401 + ], + [ + -117.149407, + 33.666542 + ], + [ + -117.149402, + 33.666645 + ], + [ + -117.149299, + 33.666711 + ], + [ + -117.149212, + 33.666771 + ], + [ + -117.149125, + 33.666792 + ], + [ + -117.149089, + 33.666753 + ], + [ + -117.149074, + 33.666708 + ], + [ + -117.149038, + 33.666671 + ], + [ + -117.148907, + 33.666656 + ], + [ + -117.148907, + 33.666481 + ], + [ + -117.148271, + 33.666502 + ], + [ + -117.148274, + 33.666865 + ], + [ + -117.147199, + 33.666877 + ], + [ + -117.146602, + 33.667316 + ], + [ + -117.146548, + 33.667506 + ], + [ + -117.146522, + 33.667558 + ], + [ + -117.146057, + 33.667933 + ], + [ + -117.145555, + 33.668547 + ], + [ + -117.145427, + 33.668698 + ], + [ + -117.145347, + 33.668795 + ], + [ + -117.145304, + 33.669267 + ], + [ + -117.145315, + 33.670084 + ], + [ + -117.1453, + 33.670398 + ], + [ + -117.144957, + 33.670401 + ], + [ + -117.144977, + 33.669224 + ], + [ + -117.144911, + 33.668745 + ], + [ + -117.144751, + 33.668527 + ], + [ + -117.144535, + 33.668283 + ], + [ + -117.144417, + 33.668159 + ], + [ + -117.144088, + 33.668078 + ], + [ + -117.143913, + 33.667945 + ], + [ + -117.143399, + 33.667158 + ], + [ + -117.142895, + 33.66661 + ], + [ + -117.142628, + 33.666097 + ], + [ + -117.142397, + 33.665746 + ], + [ + -117.14215, + 33.665601 + ], + [ + -117.141949, + 33.665464 + ], + [ + -117.141646, + 33.665331 + ], + [ + -117.141456, + 33.665224 + ], + [ + -117.140993, + 33.665323 + ], + [ + -117.140083, + 33.66513 + ], + [ + -117.139775, + 33.665485 + ], + [ + -117.139384, + 33.666007 + ], + [ + -117.139107, + 33.666178 + ], + [ + -117.138829, + 33.666204 + ], + [ + -117.138675, + 33.66611 + ], + [ + -117.13867, + 33.665951 + ], + [ + -117.138675, + 33.665797 + ], + [ + -117.138598, + 33.665592 + ], + [ + -117.138436, + 33.665394 + ], + [ + -117.138226, + 33.665315 + ], + [ + -117.138138, + 33.665448 + ], + [ + -117.138051, + 33.665599 + ], + [ + -117.137891, + 33.665599 + ], + [ + -117.137775, + 33.665521 + ], + [ + -117.137782, + 33.665285 + ], + [ + -117.137848, + 33.664976 + ], + [ + -117.137753, + 33.664777 + ], + [ + -117.137622, + 33.664637 + ], + [ + -117.137564, + 33.664541 + ], + [ + -117.137731, + 33.664329 + ], + [ + -117.137971, + 33.664214 + ], + [ + -117.138436, + 33.664153 + ], + [ + -117.139142, + 33.664135 + ], + [ + -117.139418, + 33.66405 + ], + [ + -117.13976, + 33.663899 + ], + [ + -117.139876, + 33.663766 + ], + [ + -117.140094, + 33.663518 + ], + [ + -117.140167, + 33.663288 + ], + [ + -117.140312, + 33.663246 + ], + [ + -117.140291, + 33.66292 + ], + [ + -117.14079, + 33.662801 + ], + [ + -117.140769, + 33.662505 + ], + [ + -117.140666, + 33.662492 + ], + [ + -117.140538, + 33.661744 + ], + [ + -117.141073, + 33.661692 + ], + [ + -117.141319, + 33.661881 + ], + [ + -117.141977, + 33.662035 + ], + [ + -117.142471, + 33.662017 + ], + [ + -117.142954, + 33.662086 + ], + [ + -117.143211, + 33.662257 + ], + [ + -117.14353, + 33.662462 + ], + [ + -117.143766, + 33.662437 + ], + [ + -117.143797, + 33.662291 + ], + [ + -117.143705, + 33.662103 + ], + [ + -117.143643, + 33.661906 + ], + [ + -117.143797, + 33.661821 + ], + [ + -117.143972, + 33.661923 + ], + [ + -117.144424, + 33.662086 + ], + [ + -117.144836, + 33.662266 + ], + [ + -117.145103, + 33.662522 + ], + [ + -117.145576, + 33.662796 + ], + [ + -117.146039, + 33.662788 + ], + [ + -117.146553, + 33.662865 + ], + [ + -117.148763, + 33.662839 + ], + [ + -117.148938, + 33.662685 + ], + [ + -117.148989, + 33.66224 + ], + [ + -117.14903, + 33.661264 + ], + [ + -117.149123, + 33.660623 + ], + [ + -117.149195, + 33.660024 + ], + [ + -117.149216, + 33.659433 + ], + [ + -117.149177, + 33.659058 + ], + [ + -117.14927, + 33.658771 + ], + [ + -117.149337, + 33.658595 + ], + [ + -117.149476, + 33.65839 + ], + [ + -117.14964, + 33.658185 + ], + [ + -117.149774, + 33.658048 + ], + [ + -117.149887, + 33.657962 + ], + [ + -117.150046, + 33.657907 + ], + [ + -117.150195, + 33.657859 + ], + [ + -117.150367, + 33.657822 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 313905854, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.140167, + 33.663288 + ], + [ + -117.136989, + 33.663249 + ], + [ + -117.136901, + 33.66325 + ], + [ + -117.136782, + 33.663252 + ], + [ + -117.136789, + 33.665022 + ], + [ + -117.136778, + 33.666311 + ], + [ + -117.136767, + 33.668005 + ], + [ + -117.136782, + 33.669777 + ], + [ + -117.136758, + 33.670409 + ], + [ + -117.136776, + 33.670445 + ], + [ + -117.138637, + 33.670448 + ], + [ + -117.144957, + 33.670401 + ], + [ + -117.144977, + 33.669224 + ], + [ + -117.144911, + 33.668745 + ], + [ + -117.144751, + 33.668527 + ], + [ + -117.144535, + 33.668283 + ], + [ + -117.144417, + 33.668159 + ], + [ + -117.144088, + 33.668078 + ], + [ + -117.143913, + 33.667945 + ], + [ + -117.143399, + 33.667158 + ], + [ + -117.142895, + 33.66661 + ], + [ + -117.142628, + 33.666097 + ], + [ + -117.142397, + 33.665746 + ], + [ + -117.14215, + 33.665601 + ], + [ + -117.141949, + 33.665464 + ], + [ + -117.141646, + 33.665331 + ], + [ + -117.141456, + 33.665224 + ], + [ + -117.140993, + 33.665323 + ], + [ + -117.140083, + 33.66513 + ], + [ + -117.139775, + 33.665485 + ], + [ + -117.139384, + 33.666007 + ], + [ + -117.139107, + 33.666178 + ], + [ + -117.138829, + 33.666204 + ], + [ + -117.138675, + 33.66611 + ], + [ + -117.13867, + 33.665951 + ], + [ + -117.138675, + 33.665797 + ], + [ + -117.138598, + 33.665592 + ], + [ + -117.138436, + 33.665394 + ], + [ + -117.138226, + 33.665315 + ], + [ + -117.138138, + 33.665448 + ], + [ + -117.138051, + 33.665599 + ], + [ + -117.137891, + 33.665599 + ], + [ + -117.137775, + 33.665521 + ], + [ + -117.137782, + 33.665285 + ], + [ + -117.137848, + 33.664976 + ], + [ + -117.137753, + 33.664777 + ], + [ + -117.137622, + 33.664637 + ], + [ + -117.137564, + 33.664541 + ], + [ + -117.137731, + 33.664329 + ], + [ + -117.137971, + 33.664214 + ], + [ + -117.138436, + 33.664153 + ], + [ + -117.139142, + 33.664135 + ], + [ + -117.139418, + 33.66405 + ], + [ + -117.13976, + 33.663899 + ], + [ + -117.139876, + 33.663766 + ], + [ + -117.140094, + 33.663518 + ], + [ + -117.140167, + 33.663288 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 313907475, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.136784, + 33.654186 + ], + [ + -117.136776, + 33.655863 + ], + [ + -117.13471, + 33.655872 + ], + [ + -117.134699, + 33.655805 + ], + [ + -117.134732, + 33.655735 + ], + [ + -117.134747, + 33.655665 + ], + [ + -117.134667, + 33.655635 + ], + [ + -117.134674, + 33.654411 + ], + [ + -117.134729, + 33.654201 + ], + [ + -117.136784, + 33.654186 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 313908066, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.136908, + 33.661436 + ], + [ + -117.136901, + 33.66325 + ], + [ + -117.136989, + 33.663249 + ], + [ + -117.140167, + 33.663288 + ], + [ + -117.140312, + 33.663246 + ], + [ + -117.140291, + 33.66292 + ], + [ + -117.14079, + 33.662801 + ], + [ + -117.140769, + 33.662505 + ], + [ + -117.140666, + 33.662492 + ], + [ + -117.140538, + 33.661744 + ], + [ + -117.141073, + 33.661692 + ], + [ + -117.141074, + 33.661441 + ], + [ + -117.136908, + 33.661436 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 313908216, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.145154, + 33.674136 + ], + [ + -117.145325, + 33.673857 + ], + [ + -117.145332, + 33.670689 + ], + [ + -117.145291, + 33.67067 + ], + [ + -117.140445, + 33.670687 + ], + [ + -117.136765, + 33.670696 + ], + [ + -117.136731, + 33.670725 + ], + [ + -117.136728, + 33.672598 + ], + [ + -117.13673, + 33.674135 + ], + [ + -117.145154, + 33.674136 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 359403593, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.165346, + 33.674962 + ], + [ + -117.164394, + 33.674973 + ], + [ + -117.164364, + 33.673877 + ], + [ + -117.165335, + 33.67388 + ], + [ + -117.165346, + 33.674962 + ] + ] + ] + }, + "properties": { + "name": "Soccer Field", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 359403980, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.166207, + 33.674614 + ], + [ + -117.166175, + 33.674641 + ], + [ + -117.166118, + 33.67466 + ], + [ + -117.165945, + 33.674662 + ], + [ + -117.165943, + 33.674624 + ], + [ + -117.165823, + 33.674623 + ], + [ + -117.165825, + 33.674598 + ], + [ + -117.165383, + 33.674604 + ], + [ + -117.165379, + 33.674405 + ], + [ + -117.165379, + 33.67432 + ], + [ + -117.165391, + 33.67425 + ], + [ + -117.165412, + 33.6742 + ], + [ + -117.165419, + 33.674174 + ], + [ + -117.165482, + 33.674099 + ], + [ + -117.165543, + 33.674051 + ], + [ + -117.165614, + 33.674011 + ], + [ + -117.165686, + 33.673984 + ], + [ + -117.165783, + 33.673973 + ], + [ + -117.165857, + 33.673973 + ], + [ + -117.165963, + 33.673973 + ], + [ + -117.166132, + 33.673974 + ], + [ + -117.166126, + 33.674246 + ], + [ + -117.166126, + 33.674338 + ], + [ + -117.166161, + 33.67434 + ], + [ + -117.16616, + 33.674442 + ], + [ + -117.166205, + 33.674443 + ], + [ + -117.166207, + 33.674614 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 359442222, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.166364, + 33.675879 + ], + [ + -117.166413, + 33.675819 + ], + [ + -117.166439, + 33.675783 + ], + [ + -117.166455, + 33.675725 + ], + [ + -117.16645, + 33.675693 + ], + [ + -117.166436, + 33.675663 + ], + [ + -117.166417, + 33.675635 + ], + [ + -117.166395, + 33.675613 + ], + [ + -117.16636, + 33.675592 + ], + [ + -117.166317, + 33.67558 + ], + [ + -117.166269, + 33.675576 + ], + [ + -117.166225, + 33.675581 + ], + [ + -117.166191, + 33.675592 + ], + [ + -117.166163, + 33.675608 + ], + [ + -117.166136, + 33.675631 + ], + [ + -117.166113, + 33.675656 + ], + [ + -117.166102, + 33.675684 + ], + [ + -117.166095, + 33.675719 + ], + [ + -117.166101, + 33.675761 + ], + [ + -117.166111, + 33.675797 + ], + [ + -117.166136, + 33.675826 + ], + [ + -117.166161, + 33.675847 + ], + [ + -117.166179, + 33.675869 + ], + [ + -117.166193, + 33.675894 + ], + [ + -117.166206, + 33.675918 + ], + [ + -117.166208, + 33.67597 + ], + [ + -117.166208, + 33.676183 + ], + [ + -117.166208, + 33.676234 + ], + [ + -117.16621, + 33.67626 + ], + [ + -117.166224, + 33.676277 + ], + [ + -117.166241, + 33.676287 + ], + [ + -117.166262, + 33.676292 + ], + [ + -117.16629, + 33.676291 + ], + [ + -117.166316, + 33.676284 + ], + [ + -117.166322, + 33.676277 + ], + [ + -117.166332, + 33.67626 + ], + [ + -117.166339, + 33.676246 + ], + [ + -117.166342, + 33.676224 + ], + [ + -117.166342, + 33.676197 + ], + [ + -117.166338, + 33.676159 + ], + [ + -117.166341, + 33.676097 + ], + [ + -117.16634, + 33.676068 + ], + [ + -117.166341, + 33.676014 + ], + [ + -117.166344, + 33.675964 + ], + [ + -117.166343, + 33.675944 + ], + [ + -117.166343, + 33.675935 + ], + [ + -117.166348, + 33.675911 + ], + [ + -117.166353, + 33.675897 + ], + [ + -117.166364, + 33.675879 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377380417, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.149363, + 33.722588 + ], + [ + -117.149481, + 33.722316 + ], + [ + -117.149615, + 33.721838 + ], + [ + -117.149674, + 33.721615 + ], + [ + -117.149593, + 33.721513 + ], + [ + -117.1491, + 33.721424 + ], + [ + -117.148376, + 33.721258 + ], + [ + -117.147813, + 33.721089 + ], + [ + -117.147765, + 33.721186 + ], + [ + -117.147405, + 33.721923 + ], + [ + -117.147496, + 33.722062 + ], + [ + -117.149363, + 33.722588 + ] + ] + ] + }, + "properties": { + "name": "Heritage Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377384254, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.140153, + 33.7107 + ], + [ + -117.142712, + 33.710689 + ], + [ + -117.142712, + 33.710543 + ], + [ + -117.142713, + 33.710457 + ], + [ + -117.142704, + 33.709809 + ], + [ + -117.142704, + 33.709747 + ], + [ + -117.142702, + 33.709105 + ], + [ + -117.142597, + 33.709021 + ], + [ + -117.14219, + 33.709079 + ], + [ + -117.141839, + 33.709158 + ], + [ + -117.141707, + 33.709202 + ], + [ + -117.141472, + 33.709299 + ], + [ + -117.141186, + 33.709442 + ], + [ + -117.140951, + 33.7096 + ], + [ + -117.14073, + 33.709785 + ], + [ + -117.140584, + 33.709941 + ], + [ + -117.140451, + 33.710104 + ], + [ + -117.140371, + 33.710223 + ], + [ + -117.140284, + 33.710369 + ], + [ + -117.140227, + 33.710491 + ], + [ + -117.140193, + 33.710568 + ], + [ + -117.140153, + 33.7107 + ] + ] + ] + }, + "properties": { + "name": "Discovery Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377420102, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.147496, + 33.706928 + ], + [ + -117.145599, + 33.706908 + ], + [ + -117.145479, + 33.706917 + ], + [ + -117.145382, + 33.706993 + ], + [ + -117.145383, + 33.707192 + ], + [ + -117.145393, + 33.708735 + ], + [ + -117.145505, + 33.708809 + ], + [ + -117.145575, + 33.708825 + ], + [ + -117.145881, + 33.708825 + ], + [ + -117.146399, + 33.708829 + ], + [ + -117.146914, + 33.7089 + ], + [ + -117.147233, + 33.708987 + ], + [ + -117.147439, + 33.709064 + ], + [ + -117.147689, + 33.709175 + ], + [ + -117.14783, + 33.709249 + ], + [ + -117.148055, + 33.709391 + ], + [ + -117.148254, + 33.709532 + ], + [ + -117.148592, + 33.709814 + ], + [ + -117.149449, + 33.710515 + ], + [ + -117.150055, + 33.711008 + ], + [ + -117.150379, + 33.711278 + ], + [ + -117.150665, + 33.711485 + ], + [ + -117.150717, + 33.711519 + ], + [ + -117.150814, + 33.711607 + ], + [ + -117.150895, + 33.711701 + ], + [ + -117.150989, + 33.711829 + ], + [ + -117.151066, + 33.711959 + ], + [ + -117.151135, + 33.712092 + ], + [ + -117.151175, + 33.712178 + ], + [ + -117.151603, + 33.712171 + ], + [ + -117.151965, + 33.712461 + ], + [ + -117.152708, + 33.713065 + ], + [ + -117.153167, + 33.713444 + ], + [ + -117.153802, + 33.713951 + ], + [ + -117.153796, + 33.713536 + ], + [ + -117.15361, + 33.713389 + ], + [ + -117.153241, + 33.713093 + ], + [ + -117.153077, + 33.712959 + ], + [ + -117.152342, + 33.712396 + ], + [ + -117.151562, + 33.711766 + ], + [ + -117.151086, + 33.711382 + ], + [ + -117.150913, + 33.71125 + ], + [ + -117.150702, + 33.71107 + ], + [ + -117.150396, + 33.710824 + ], + [ + -117.149204, + 33.709867 + ], + [ + -117.147555, + 33.708439 + ], + [ + -117.147606, + 33.70693 + ], + [ + -117.147496, + 33.706928 + ] + ] + ] + }, + "properties": { + "name": "Sunrise Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377420103, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.1461, + 33.708589 + ], + [ + -117.145882, + 33.70859 + ], + [ + -117.145881, + 33.70845 + ], + [ + -117.146099, + 33.708449 + ], + [ + -117.1461, + 33.708589 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377420287, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.147409, + 33.707091 + ], + [ + -117.147403, + 33.707951 + ], + [ + -117.146947, + 33.707935 + ], + [ + -117.146805, + 33.707852 + ], + [ + -117.146137, + 33.707364 + ], + [ + -117.145888, + 33.707129 + ], + [ + -117.145856, + 33.707098 + ], + [ + -117.145885, + 33.707054 + ], + [ + -117.147409, + 33.707091 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377421430, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.144502, + 33.703147 + ], + [ + -117.144515, + 33.703031 + ], + [ + -117.144365, + 33.702966 + ], + [ + -117.143949, + 33.702998 + ], + [ + -117.14359, + 33.703002 + ], + [ + -117.143289, + 33.702995 + ], + [ + -117.142943, + 33.702953 + ], + [ + -117.142356, + 33.702846 + ], + [ + -117.141838, + 33.702694 + ], + [ + -117.14162, + 33.702633 + ], + [ + -117.14088, + 33.702356 + ], + [ + -117.140894, + 33.702944 + ], + [ + -117.1414, + 33.703074 + ], + [ + -117.141486, + 33.703128 + ], + [ + -117.14162, + 33.703141 + ], + [ + -117.141851, + 33.703177 + ], + [ + -117.142546, + 33.70318 + ], + [ + -117.143456, + 33.703185 + ], + [ + -117.144276, + 33.703185 + ], + [ + -117.144502, + 33.703147 + ] + ] + ] + }, + "properties": { + "name": "Mahogany Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377422804, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.140583, + 33.710471 + ], + [ + -117.140606, + 33.710494 + ], + [ + -117.14062, + 33.710522 + ], + [ + -117.140623, + 33.710552 + ], + [ + -117.140614, + 33.710581 + ], + [ + -117.140595, + 33.710607 + ], + [ + -117.140567, + 33.710626 + ], + [ + -117.140534, + 33.710637 + ], + [ + -117.140497, + 33.710639 + ], + [ + -117.140459, + 33.710631 + ], + [ + -117.140427, + 33.710611 + ], + [ + -117.140404, + 33.710585 + ], + [ + -117.140394, + 33.710553 + ], + [ + -117.140397, + 33.71052 + ], + [ + -117.140414, + 33.71049 + ], + [ + -117.140441, + 33.710466 + ], + [ + -117.140477, + 33.710452 + ], + [ + -117.140516, + 33.710449 + ], + [ + -117.140552, + 33.710455 + ], + [ + -117.140583, + 33.710471 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377422806, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.142312, + 33.709581 + ], + [ + -117.142375, + 33.709559 + ], + [ + -117.142433, + 33.709539 + ], + [ + -117.142511, + 33.70953 + ], + [ + -117.142568, + 33.709495 + ], + [ + -117.142585, + 33.70945 + ], + [ + -117.14258, + 33.709409 + ], + [ + -117.142552, + 33.70937 + ], + [ + -117.142491, + 33.709336 + ], + [ + -117.142485, + 33.709324 + ], + [ + -117.142471, + 33.709284 + ], + [ + -117.142448, + 33.70927 + ], + [ + -117.142416, + 33.709263 + ], + [ + -117.142385, + 33.70927 + ], + [ + -117.142364, + 33.709285 + ], + [ + -117.142351, + 33.709315 + ], + [ + -117.142356, + 33.709336 + ], + [ + -117.142375, + 33.70937 + ], + [ + -117.142371, + 33.709404 + ], + [ + -117.142353, + 33.709431 + ], + [ + -117.142316, + 33.709443 + ], + [ + -117.142269, + 33.70945 + ], + [ + -117.142237, + 33.70947 + ], + [ + -117.142223, + 33.709497 + ], + [ + -117.142223, + 33.709527 + ], + [ + -117.14223, + 33.709547 + ], + [ + -117.142255, + 33.70957 + ], + [ + -117.142279, + 33.709578 + ], + [ + -117.142312, + 33.709581 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377422882, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.141904, + 33.710426 + ], + [ + -117.141902, + 33.710126 + ], + [ + -117.141801, + 33.710119 + ], + [ + -117.141703, + 33.710124 + ], + [ + -117.141588, + 33.710177 + ], + [ + -117.141519, + 33.710256 + ], + [ + -117.141514, + 33.710363 + ], + [ + -117.141514, + 33.710478 + ], + [ + -117.141836, + 33.710478 + ], + [ + -117.141904, + 33.710426 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 377429378, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.154548, + 33.698945 + ], + [ + -117.154341, + 33.699208 + ], + [ + -117.154741, + 33.699253 + ], + [ + -117.154746, + 33.699431 + ], + [ + -117.154784, + 33.699463 + ], + [ + -117.155006, + 33.699489 + ], + [ + -117.155266, + 33.699802 + ], + [ + -117.155529, + 33.700007 + ], + [ + -117.155878, + 33.700096 + ], + [ + -117.156106, + 33.700125 + ], + [ + -117.156259, + 33.700159 + ], + [ + -117.156339, + 33.700156 + ], + [ + -117.156342, + 33.700045 + ], + [ + -117.156275, + 33.699994 + ], + [ + -117.156261, + 33.699219 + ], + [ + -117.156315, + 33.699163 + ], + [ + -117.15687, + 33.699159 + ], + [ + -117.156857, + 33.698733 + ], + [ + -117.156712, + 33.698717 + ], + [ + -117.156728, + 33.698626 + ], + [ + -117.156664, + 33.698597 + ], + [ + -117.156004, + 33.698476 + ], + [ + -117.155773, + 33.69842 + ], + [ + -117.155709, + 33.698641 + ], + [ + -117.155232, + 33.699016 + ], + [ + -117.154829, + 33.699056 + ], + [ + -117.154548, + 33.698945 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 381375761, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.171667, + 33.744206 + ], + [ + -117.169535, + 33.744214 + ], + [ + -117.169526, + 33.743109 + ], + [ + -117.169832, + 33.743077 + ], + [ + -117.170433, + 33.743216 + ], + [ + -117.171071, + 33.743546 + ], + [ + -117.171661, + 33.7438 + ], + [ + -117.171667, + 33.744206 + ] + ] + ] + }, + "properties": { + "name": "Eller Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 381378501, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.170531, + 33.743614 + ], + [ + -117.17028, + 33.744136 + ], + [ + -117.170083, + 33.744088 + ], + [ + -117.169916, + 33.743989 + ], + [ + -117.169793, + 33.743844 + ], + [ + -117.169751, + 33.743729 + ], + [ + -117.169742, + 33.743584 + ], + [ + -117.169771, + 33.743451 + ], + [ + -117.169851, + 33.743327 + ], + [ + -117.170502, + 33.743539 + ], + [ + -117.170531, + 33.743614 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 381416932, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.178748, + 33.719701 + ], + [ + -117.17874, + 33.719109 + ], + [ + -117.177295, + 33.719092 + ], + [ + -117.177303, + 33.719687 + ], + [ + -117.178748, + 33.719701 + ] + ] + ] + }, + "properties": { + "name": "Gene Ware Memorial Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 381417334, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.184978, + 33.713764 + ], + [ + -117.186284, + 33.713762 + ], + [ + -117.186325, + 33.713746 + ], + [ + -117.186335, + 33.713697 + ], + [ + -117.186271, + 33.713198 + ], + [ + -117.186233, + 33.713169 + ], + [ + -117.185727, + 33.713182 + ], + [ + -117.185297, + 33.713178 + ], + [ + -117.184975, + 33.713144 + ], + [ + -117.184976, + 33.713165 + ], + [ + -117.184978, + 33.713719 + ], + [ + -117.184978, + 33.713764 + ] + ] + ] + }, + "properties": { + "name": "Rancho Ramona Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 381417335, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.185987, + 33.713573 + ], + [ + -117.185968, + 33.713347 + ], + [ + -117.186127, + 33.713338 + ], + [ + -117.186147, + 33.713564 + ], + [ + -117.185987, + 33.713573 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 381417337, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.185218, + 33.713291 + ], + [ + -117.185218, + 33.713545 + ], + [ + -117.185173, + 33.713545 + ], + [ + -117.185136, + 33.713568 + ], + [ + -117.185064, + 33.713569 + ], + [ + -117.185029, + 33.713551 + ], + [ + -117.18502, + 33.713524 + ], + [ + -117.18504, + 33.713502 + ], + [ + -117.185057, + 33.713468 + ], + [ + -117.185053, + 33.713357 + ], + [ + -117.185025, + 33.713304 + ], + [ + -117.185021, + 33.713288 + ], + [ + -117.185087, + 33.71329 + ], + [ + -117.185218, + 33.713291 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 391517332, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.188504, + 33.680671 + ], + [ + -117.18848, + 33.680671 + ], + [ + -117.186401, + 33.680677 + ], + [ + -117.18639, + 33.680481 + ], + [ + -117.186393, + 33.680367 + ], + [ + -117.186471, + 33.680148 + ], + [ + -117.186768, + 33.679809 + ], + [ + -117.187082, + 33.679485 + ], + [ + -117.187187, + 33.679476 + ], + [ + -117.187321, + 33.679539 + ], + [ + -117.187495, + 33.679595 + ], + [ + -117.187688, + 33.679631 + ], + [ + -117.18786, + 33.679653 + ], + [ + -117.18841, + 33.679651 + ], + [ + -117.188509, + 33.679733 + ], + [ + -117.188504, + 33.680671 + ] + ] + ] + }, + "properties": { + "name": "Lyle Marsh Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 400483611, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.133927, + 33.615133 + ], + [ + -117.133824, + 33.615109 + ], + [ + -117.133502, + 33.615213 + ], + [ + -117.133258, + 33.6153 + ], + [ + -117.132976, + 33.615369 + ], + [ + -117.132732, + 33.615401 + ], + [ + -117.13267, + 33.615401 + ], + [ + -117.132609, + 33.615445 + ], + [ + -117.132603, + 33.615675 + ], + [ + -117.132614, + 33.615771 + ], + [ + -117.132657, + 33.615903 + ], + [ + -117.132627, + 33.615984 + ], + [ + -117.132552, + 33.616031 + ], + [ + -117.132653, + 33.616352 + ], + [ + -117.132718, + 33.616359 + ], + [ + -117.13277, + 33.616386 + ], + [ + -117.13281, + 33.616437 + ], + [ + -117.132822, + 33.616477 + ], + [ + -117.1328, + 33.616587 + ], + [ + -117.132779, + 33.616659 + ], + [ + -117.132778, + 33.616781 + ], + [ + -117.132808, + 33.616876 + ], + [ + -117.132863, + 33.616933 + ], + [ + -117.132939, + 33.616963 + ], + [ + -117.132986, + 33.616978 + ], + [ + -117.133254, + 33.616983 + ], + [ + -117.133494, + 33.617001 + ], + [ + -117.133681, + 33.617023 + ], + [ + -117.133912, + 33.617057 + ], + [ + -117.133947, + 33.617057 + ], + [ + -117.133977, + 33.617044 + ], + [ + -117.133992, + 33.617025 + ], + [ + -117.134055, + 33.617035 + ], + [ + -117.134064, + 33.616948 + ], + [ + -117.134064, + 33.616845 + ], + [ + -117.134056, + 33.616443 + ], + [ + -117.134053, + 33.616215 + ], + [ + -117.13405, + 33.615989 + ], + [ + -117.134047, + 33.615794 + ], + [ + -117.134043, + 33.615658 + ], + [ + -117.134031, + 33.61552 + ], + [ + -117.134018, + 33.615425 + ], + [ + -117.133993, + 33.615319 + ], + [ + -117.133962, + 33.615225 + ], + [ + -117.133927, + 33.615133 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 400483776, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.13393, + 33.616164 + ], + [ + -117.133861, + 33.616109 + ], + [ + -117.132853, + 33.616121 + ], + [ + -117.132862, + 33.616281 + ], + [ + -117.13289, + 33.616415 + ], + [ + -117.132974, + 33.616576 + ], + [ + -117.133051, + 33.61668 + ], + [ + -117.133175, + 33.616797 + ], + [ + -117.133327, + 33.616891 + ], + [ + -117.133515, + 33.616965 + ], + [ + -117.133668, + 33.616995 + ], + [ + -117.13378, + 33.617008 + ], + [ + -117.133941, + 33.617009 + ], + [ + -117.13393, + 33.616164 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 463738004, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.154194, + 33.660429 + ], + [ + -117.154027, + 33.660455 + ], + [ + -117.154025, + 33.659956 + ], + [ + -117.154187, + 33.659664 + ], + [ + -117.154389, + 33.659729 + ], + [ + -117.154216, + 33.659991 + ], + [ + -117.154194, + 33.660429 + ] + ] + ] + }, + "properties": { + "name": "Rolling Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 463738007, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.162545, + 33.656962 + ], + [ + -117.162566, + 33.656912 + ], + [ + -117.162566, + 33.656483 + ], + [ + -117.162566, + 33.656375 + ], + [ + -117.162316, + 33.656203 + ], + [ + -117.162026, + 33.656203 + ], + [ + -117.161742, + 33.656203 + ], + [ + -117.161702, + 33.656203 + ], + [ + -117.161703, + 33.656523 + ], + [ + -117.161813, + 33.656522 + ], + [ + -117.161903, + 33.656509 + ], + [ + -117.161998, + 33.656495 + ], + [ + -117.162042, + 33.656495 + ], + [ + -117.162087, + 33.656503 + ], + [ + -117.162124, + 33.656516 + ], + [ + -117.162155, + 33.656535 + ], + [ + -117.16219, + 33.656565 + ], + [ + -117.162216, + 33.656595 + ], + [ + -117.162234, + 33.656649 + ], + [ + -117.162234, + 33.656687 + ], + [ + -117.162223, + 33.656743 + ], + [ + -117.162207, + 33.656816 + ], + [ + -117.162202, + 33.656839 + ], + [ + -117.1622, + 33.656864 + ], + [ + -117.162198, + 33.656965 + ], + [ + -117.162545, + 33.656962 + ] + ] + ] + }, + "properties": { + "name": "Menifee South Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 463738009, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.15381, + 33.665524 + ], + [ + -117.153819, + 33.664202 + ], + [ + -117.153365, + 33.664218 + ], + [ + -117.15269, + 33.664919 + ], + [ + -117.153041, + 33.664915 + ], + [ + -117.153215, + 33.665127 + ], + [ + -117.15322, + 33.66542 + ], + [ + -117.153269, + 33.66543 + ], + [ + -117.15332, + 33.66546 + ], + [ + -117.153349, + 33.665498 + ], + [ + -117.153358, + 33.665525 + ], + [ + -117.15381, + 33.665524 + ] + ] + ] + }, + "properties": { + "name": "Hidden Meadows Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 463739567, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.160804, + 33.675847 + ], + [ + -117.161117, + 33.674375 + ], + [ + -117.161042, + 33.674349 + ], + [ + -117.161068, + 33.672412 + ], + [ + -117.161065, + 33.672359 + ], + [ + -117.158388, + 33.672422 + ], + [ + -117.158334, + 33.672996 + ], + [ + -117.158218, + 33.673563 + ], + [ + -117.158048, + 33.674047 + ], + [ + -117.157761, + 33.674524 + ], + [ + -117.157283, + 33.67517 + ], + [ + -117.157274, + 33.675232 + ], + [ + -117.157301, + 33.675289 + ], + [ + -117.157636, + 33.675464 + ], + [ + -117.158111, + 33.675628 + ], + [ + -117.158637, + 33.675806 + ], + [ + -117.160804, + 33.675847 + ] + ] + ] + }, + "properties": { + "name": "Wheatfield Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 468163462, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.157979, + 33.675411 + ], + [ + -117.158029, + 33.675401 + ], + [ + -117.158075, + 33.675382 + ], + [ + -117.158105, + 33.675358 + ], + [ + -117.158126, + 33.675325 + ], + [ + -117.158133, + 33.675274 + ], + [ + -117.158119, + 33.675234 + ], + [ + -117.1581, + 33.675202 + ], + [ + -117.158048, + 33.675113 + ], + [ + -117.158038, + 33.675049 + ], + [ + -117.158041, + 33.675019 + ], + [ + -117.158052, + 33.67499 + ], + [ + -117.158091, + 33.674945 + ], + [ + -117.158124, + 33.674904 + ], + [ + -117.158132, + 33.674888 + ], + [ + -117.158137, + 33.674855 + ], + [ + -117.158136, + 33.674844 + ], + [ + -117.158132, + 33.674818 + ], + [ + -117.158124, + 33.674788 + ], + [ + -117.158109, + 33.674751 + ], + [ + -117.158078, + 33.67473 + ], + [ + -117.158035, + 33.67471 + ], + [ + -117.158012, + 33.674701 + ], + [ + -117.157988, + 33.674697 + ], + [ + -117.157962, + 33.674695 + ], + [ + -117.157933, + 33.674694 + ], + [ + -117.157899, + 33.674701 + ], + [ + -117.157861, + 33.674712 + ], + [ + -117.157836, + 33.674724 + ], + [ + -117.157814, + 33.67474 + ], + [ + -117.157797, + 33.674756 + ], + [ + -117.157787, + 33.674776 + ], + [ + -117.157771, + 33.674835 + ], + [ + -117.157754, + 33.674888 + ], + [ + -117.157751, + 33.674901 + ], + [ + -117.157734, + 33.674942 + ], + [ + -117.157698, + 33.67498 + ], + [ + -117.157656, + 33.675012 + ], + [ + -117.157618, + 33.675035 + ], + [ + -117.157598, + 33.675048 + ], + [ + -117.157561, + 33.675095 + ], + [ + -117.157552, + 33.67513 + ], + [ + -117.157549, + 33.675168 + ], + [ + -117.157557, + 33.675209 + ], + [ + -117.157592, + 33.67526 + ], + [ + -117.157642, + 33.675303 + ], + [ + -117.157676, + 33.675322 + ], + [ + -117.157717, + 33.675333 + ], + [ + -117.157752, + 33.675338 + ], + [ + -117.157814, + 33.675348 + ], + [ + -117.157864, + 33.675371 + ], + [ + -117.157912, + 33.675397 + ], + [ + -117.157942, + 33.675407 + ], + [ + -117.157979, + 33.675411 + ] + ] + ] + }, + "properties": { + "name": "Wheatfield Playground", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487780582, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.146803, + 33.703072 + ], + [ + -117.146675, + 33.703067 + ], + [ + -117.146631, + 33.703038 + ], + [ + -117.146576, + 33.702994 + ], + [ + -117.146576, + 33.70295 + ], + [ + -117.146606, + 33.702939 + ], + [ + -117.146721, + 33.702939 + ], + [ + -117.146783, + 33.702938 + ], + [ + -117.146808, + 33.702947 + ], + [ + -117.146806, + 33.702969 + ], + [ + -117.146804, + 33.703005 + ], + [ + -117.146813, + 33.703061 + ], + [ + -117.146803, + 33.703072 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 487780583, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.14705, + 33.703033 + ], + [ + -117.147029, + 33.703016 + ], + [ + -117.14701, + 33.702986 + ], + [ + -117.147002, + 33.702963 + ], + [ + -117.146985, + 33.70295 + ], + [ + -117.146967, + 33.70293 + ], + [ + -117.146948, + 33.702913 + ], + [ + -117.146965, + 33.702885 + ], + [ + -117.147011, + 33.702855 + ], + [ + -117.147047, + 33.702836 + ], + [ + -117.147098, + 33.702824 + ], + [ + -117.147135, + 33.702824 + ], + [ + -117.147169, + 33.702853 + ], + [ + -117.147144, + 33.702908 + ], + [ + -117.14711, + 33.702982 + ], + [ + -117.147084, + 33.703008 + ], + [ + -117.14705, + 33.703033 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 512733299, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.170099, + 33.676895 + ], + [ + -117.167211, + 33.676886 + ], + [ + -117.166948, + 33.676868 + ], + [ + -117.166537, + 33.676826 + ], + [ + -117.166457, + 33.676754 + ], + [ + -117.166457, + 33.676484 + ], + [ + -117.166499, + 33.676451 + ], + [ + -117.166499, + 33.676434 + ], + [ + -117.166799, + 33.676431 + ], + [ + -117.166841, + 33.676447 + ], + [ + -117.166869, + 33.676484 + ], + [ + -117.166934, + 33.676584 + ], + [ + -117.166959, + 33.676621 + ], + [ + -117.167029, + 33.676706 + ], + [ + -117.167132, + 33.676763 + ], + [ + -117.167219, + 33.676779 + ], + [ + -117.169192, + 33.676789 + ], + [ + -117.169326, + 33.676775 + ], + [ + -117.169448, + 33.676747 + ], + [ + -117.169526, + 33.676722 + ], + [ + -117.169613, + 33.676683 + ], + [ + -117.169766, + 33.67659 + ], + [ + -117.169853, + 33.67651 + ], + [ + -117.169932, + 33.676413 + ], + [ + -117.170014, + 33.676257 + ], + [ + -117.17005, + 33.676141 + ], + [ + -117.170058, + 33.676063 + ], + [ + -117.170061, + 33.675226 + ], + [ + -117.170061, + 33.675192 + ], + [ + -117.170042, + 33.675117 + ], + [ + -117.170006, + 33.675056 + ], + [ + -117.169956, + 33.675011 + ], + [ + -117.169868, + 33.67496 + ], + [ + -117.169705, + 33.674876 + ], + [ + -117.169683, + 33.674855 + ], + [ + -117.169676, + 33.674832 + ], + [ + -117.169673, + 33.674737 + ], + [ + -117.169693, + 33.674737 + ], + [ + -117.169738, + 33.6747 + ], + [ + -117.170112, + 33.674702 + ], + [ + -117.170201, + 33.674783 + ], + [ + -117.170187, + 33.676822 + ], + [ + -117.170099, + 33.676895 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 514372138, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.158221, + 33.674639 + ], + [ + -117.158078, + 33.67464 + ], + [ + -117.158066, + 33.67464 + ], + [ + -117.158064, + 33.674475 + ], + [ + -117.158207, + 33.674474 + ], + [ + -117.15822, + 33.674474 + ], + [ + -117.158221, + 33.674639 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 557506006, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.162094, + 33.664541 + ], + [ + -117.162447, + 33.664455 + ], + [ + -117.162474, + 33.664437 + ], + [ + -117.162486, + 33.664413 + ], + [ + -117.162455, + 33.663881 + ], + [ + -117.162424, + 33.663833 + ], + [ + -117.162108, + 33.663827 + ], + [ + -117.16209, + 33.663866 + ], + [ + -117.162059, + 33.663904 + ], + [ + -117.161954, + 33.663956 + ], + [ + -117.161825, + 33.664025 + ], + [ + -117.161818, + 33.664087 + ], + [ + -117.161933, + 33.664218 + ], + [ + -117.162022, + 33.664366 + ], + [ + -117.162094, + 33.664541 + ] + ] + ] + }, + "properties": { + "name": "Autumn Breeze Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 567636520, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.153601, + 33.670625 + ], + [ + -117.153804, + 33.671071 + ], + [ + -117.153812, + 33.671332 + ], + [ + -117.153765, + 33.671442 + ], + [ + -117.153674, + 33.671593 + ], + [ + -117.153639, + 33.671728 + ], + [ + -117.153639, + 33.671875 + ], + [ + -117.153552, + 33.671963 + ], + [ + -117.153383, + 33.672097 + ], + [ + -117.153342, + 33.672298 + ], + [ + -117.153237, + 33.672349 + ], + [ + -117.153058, + 33.672379 + ], + [ + -117.15292, + 33.67243 + ], + [ + -117.152863, + 33.672447 + ], + [ + -117.15271, + 33.672335 + ], + [ + -117.152647, + 33.672293 + ], + [ + -117.152529, + 33.672274 + ], + [ + -117.152454, + 33.672232 + ], + [ + -117.152316, + 33.672063 + ], + [ + -117.152204, + 33.671975 + ], + [ + -117.152054, + 33.671927 + ], + [ + -117.151989, + 33.671931 + ], + [ + -117.151934, + 33.671966 + ], + [ + -117.151834, + 33.672041 + ], + [ + -117.151749, + 33.672108 + ], + [ + -117.15171, + 33.672141 + ], + [ + -117.151662, + 33.672114 + ], + [ + -117.151607, + 33.672137 + ], + [ + -117.151603, + 33.672144 + ], + [ + -117.151552, + 33.672135 + ], + [ + -117.151531, + 33.672108 + ], + [ + -117.151313, + 33.67211 + ], + [ + -117.151249, + 33.672134 + ], + [ + -117.151215, + 33.672093 + ], + [ + -117.151149, + 33.67202 + ], + [ + -117.15109, + 33.671962 + ], + [ + -117.151018, + 33.67191 + ], + [ + -117.150987, + 33.671892 + ], + [ + -117.150979, + 33.671903 + ], + [ + -117.150967, + 33.671934 + ], + [ + -117.150944, + 33.671955 + ], + [ + -117.150907, + 33.671963 + ], + [ + -117.15087, + 33.671969 + ], + [ + -117.150829, + 33.672005 + ], + [ + -117.150812, + 33.672028 + ], + [ + -117.150784, + 33.672055 + ], + [ + -117.150702, + 33.672084 + ], + [ + -117.150683, + 33.672096 + ], + [ + -117.150616, + 33.672112 + ], + [ + -117.150553, + 33.672132 + ], + [ + -117.150497, + 33.672148 + ], + [ + -117.150341, + 33.67215 + ], + [ + -117.150231, + 33.672103 + ], + [ + -117.15014, + 33.672062 + ], + [ + -117.150104, + 33.672049 + ], + [ + -117.150083, + 33.672049 + ], + [ + -117.150025, + 33.672038 + ], + [ + -117.149989, + 33.672038 + ], + [ + -117.149957, + 33.672045 + ], + [ + -117.14996, + 33.672077 + ], + [ + -117.149971, + 33.67211 + ], + [ + -117.149968, + 33.672129 + ], + [ + -117.149954, + 33.672145 + ], + [ + -117.149937, + 33.672151 + ], + [ + -117.149906, + 33.672139 + ], + [ + -117.149855, + 33.672121 + ], + [ + -117.149807, + 33.67213 + ], + [ + -117.149739, + 33.67214 + ], + [ + -117.149695, + 33.672151 + ], + [ + -117.149663, + 33.672156 + ], + [ + -117.149605, + 33.67215 + ], + [ + -117.14952, + 33.672128 + ], + [ + -117.149458, + 33.672105 + ], + [ + -117.149391, + 33.67209 + ], + [ + -117.149361, + 33.672081 + ], + [ + -117.149338, + 33.672065 + ], + [ + -117.149318, + 33.672036 + ], + [ + -117.149313, + 33.672002 + ], + [ + -117.149311, + 33.671919 + ], + [ + -117.149314, + 33.671884 + ], + [ + -117.149272, + 33.671889 + ], + [ + -117.149197, + 33.671899 + ], + [ + -117.149115, + 33.671918 + ], + [ + -117.149095, + 33.671922 + ], + [ + -117.149089, + 33.671959 + ], + [ + -117.14902, + 33.671977 + ], + [ + -117.148916, + 33.672 + ], + [ + -117.1489, + 33.671997 + ], + [ + -117.148872, + 33.672013 + ], + [ + -117.148773, + 33.672045 + ], + [ + -117.148773, + 33.672031 + ], + [ + -117.148773, + 33.671994 + ], + [ + -117.148761, + 33.671971 + ], + [ + -117.148645, + 33.671777 + ], + [ + -117.148558, + 33.67163 + ], + [ + -117.148453, + 33.67145 + ], + [ + -117.148368, + 33.671303 + ], + [ + -117.148268, + 33.671136 + ], + [ + -117.148167, + 33.670967 + ], + [ + -117.148089, + 33.670834 + ], + [ + -117.147992, + 33.670669 + ], + [ + -117.14799, + 33.670637 + ], + [ + -117.149327, + 33.670635 + ], + [ + -117.153601, + 33.670625 + ] + ] + ] + }, + "properties": { + "name": "Lago Vista Sports Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 568808401, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.223193, + 33.677944 + ], + [ + -117.223502, + 33.677947 + ], + [ + -117.223635, + 33.677945 + ], + [ + -117.223838, + 33.677921 + ], + [ + -117.224004, + 33.677877 + ], + [ + -117.224056, + 33.677878 + ], + [ + -117.224105, + 33.677895 + ], + [ + -117.224135, + 33.677921 + ], + [ + -117.224192, + 33.67805 + ], + [ + -117.224261, + 33.678219 + ], + [ + -117.224386, + 33.678565 + ], + [ + -117.224517, + 33.678919 + ], + [ + -117.224563, + 33.679054 + ], + [ + -117.22456, + 33.679092 + ], + [ + -117.224538, + 33.679128 + ], + [ + -117.224504, + 33.679156 + ], + [ + -117.224423, + 33.679178 + ], + [ + -117.224287, + 33.679211 + ], + [ + -117.224229, + 33.679213 + ], + [ + -117.224136, + 33.679216 + ], + [ + -117.223945, + 33.679266 + ], + [ + -117.223832, + 33.679322 + ], + [ + -117.223749, + 33.679354 + ], + [ + -117.223252, + 33.67948 + ], + [ + -117.222748, + 33.67961 + ], + [ + -117.222359, + 33.679721 + ], + [ + -117.221942, + 33.679861 + ], + [ + -117.221519, + 33.680031 + ], + [ + -117.221399, + 33.680083 + ], + [ + -117.221353, + 33.680018 + ], + [ + -117.221304, + 33.679953 + ], + [ + -117.22128, + 33.679898 + ], + [ + -117.221264, + 33.679843 + ], + [ + -117.221249, + 33.679733 + ], + [ + -117.221233, + 33.679659 + ], + [ + -117.221219, + 33.679604 + ], + [ + -117.221165, + 33.679561 + ], + [ + -117.221072, + 33.6795 + ], + [ + -117.220969, + 33.679429 + ], + [ + -117.220832, + 33.679335 + ], + [ + -117.220641, + 33.679206 + ], + [ + -117.220523, + 33.679134 + ], + [ + -117.220502, + 33.679112 + ], + [ + -117.220505, + 33.679098 + ], + [ + -117.220531, + 33.679087 + ], + [ + -117.220553, + 33.679102 + ], + [ + -117.220569, + 33.67911 + ], + [ + -117.220608, + 33.679122 + ], + [ + -117.220661, + 33.679121 + ], + [ + -117.220702, + 33.679111 + ], + [ + -117.220732, + 33.679093 + ], + [ + -117.220758, + 33.679067 + ], + [ + -117.220771, + 33.67905 + ], + [ + -117.221219, + 33.679135 + ], + [ + -117.221278, + 33.679296 + ], + [ + -117.221596, + 33.679154 + ], + [ + -117.221622, + 33.679037 + ], + [ + -117.221668, + 33.679033 + ], + [ + -117.22171, + 33.679017 + ], + [ + -117.221742, + 33.678993 + ], + [ + -117.221761, + 33.678969 + ], + [ + -117.221866, + 33.679015 + ], + [ + -117.222188, + 33.67887 + ], + [ + -117.222045, + 33.678695 + ], + [ + -117.221978, + 33.678612 + ], + [ + -117.221848, + 33.678479 + ], + [ + -117.221703, + 33.678327 + ], + [ + -117.221651, + 33.678271 + ], + [ + -117.221554, + 33.678129 + ], + [ + -117.221464, + 33.677977 + ], + [ + -117.221407, + 33.677884 + ], + [ + -117.221617, + 33.677791 + ], + [ + -117.22164, + 33.67778 + ], + [ + -117.221738, + 33.677832 + ], + [ + -117.221869, + 33.677886 + ], + [ + -117.222004, + 33.677921 + ], + [ + -117.222155, + 33.67794 + ], + [ + -117.222423, + 33.677943 + ], + [ + -117.223193, + 33.677944 + ] + ] + ] + }, + "properties": { + "name": "Audie Murphy Ranch Sports Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 568808897, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.208195, + 33.685039 + ], + [ + -117.208753, + 33.685041 + ], + [ + -117.209622, + 33.685038 + ], + [ + -117.210369, + 33.685037 + ], + [ + -117.210472, + 33.685035 + ], + [ + -117.210524, + 33.684994 + ], + [ + -117.210603, + 33.684958 + ], + [ + -117.210713, + 33.684915 + ], + [ + -117.210858, + 33.684876 + ], + [ + -117.2109, + 33.684867 + ], + [ + -117.210986, + 33.684828 + ], + [ + -117.211015, + 33.684808 + ], + [ + -117.211057, + 33.684756 + ], + [ + -117.211083, + 33.684725 + ], + [ + -117.211096, + 33.684717 + ], + [ + -117.21118, + 33.6847 + ], + [ + -117.211253, + 33.684685 + ], + [ + -117.211355, + 33.684673 + ], + [ + -117.211444, + 33.684672 + ], + [ + -117.211549, + 33.684685 + ], + [ + -117.211699, + 33.68471 + ], + [ + -117.21177, + 33.684719 + ], + [ + -117.211854, + 33.684725 + ], + [ + -117.211886, + 33.684734 + ], + [ + -117.211947, + 33.684763 + ], + [ + -117.211997, + 33.684807 + ], + [ + -117.212037, + 33.684831 + ], + [ + -117.212161, + 33.684886 + ], + [ + -117.212215, + 33.68491 + ], + [ + -117.212319, + 33.684955 + ], + [ + -117.212338, + 33.68496 + ], + [ + -117.212385, + 33.684957 + ], + [ + -117.212497, + 33.684939 + ], + [ + -117.212523, + 33.684933 + ], + [ + -117.212585, + 33.684943 + ], + [ + -117.212594, + 33.684943 + ], + [ + -117.212615, + 33.684942 + ], + [ + -117.212611, + 33.684923 + ], + [ + -117.212611, + 33.684899 + ], + [ + -117.212617, + 33.684878 + ], + [ + -117.212632, + 33.684855 + ], + [ + -117.212661, + 33.684832 + ], + [ + -117.21269, + 33.684818 + ], + [ + -117.212727, + 33.684811 + ], + [ + -117.212775, + 33.684816 + ], + [ + -117.21283, + 33.684826 + ], + [ + -117.212886, + 33.684837 + ], + [ + -117.213106, + 33.684877 + ], + [ + -117.213295, + 33.684911 + ], + [ + -117.213405, + 33.68493 + ], + [ + -117.213636, + 33.684956 + ], + [ + -117.213789, + 33.684967 + ], + [ + -117.213974, + 33.684971 + ], + [ + -117.214149, + 33.68497 + ], + [ + -117.214357, + 33.68497 + ], + [ + -117.214387, + 33.68497 + ], + [ + -117.214401, + 33.684965 + ], + [ + -117.214412, + 33.684962 + ], + [ + -117.214427, + 33.684963 + ], + [ + -117.214449, + 33.684969 + ], + [ + -117.214462, + 33.68497 + ], + [ + -117.214551, + 33.68497 + ], + [ + -117.214606, + 33.684969 + ], + [ + -117.21463, + 33.684963 + ], + [ + -117.21465, + 33.684954 + ], + [ + -117.214669, + 33.684939 + ], + [ + -117.214687, + 33.684918 + ], + [ + -117.214696, + 33.684898 + ], + [ + -117.2147, + 33.684875 + ], + [ + -117.2147, + 33.684795 + ], + [ + -117.214698, + 33.684676 + ], + [ + -117.214692, + 33.684551 + ], + [ + -117.214681, + 33.68442 + ], + [ + -117.21466, + 33.684303 + ], + [ + -117.214633, + 33.684195 + ], + [ + -117.214599, + 33.684078 + ], + [ + -117.214559, + 33.683938 + ], + [ + -117.214522, + 33.683823 + ], + [ + -117.214504, + 33.683801 + ], + [ + -117.214469, + 33.683782 + ], + [ + -117.214433, + 33.683774 + ], + [ + -117.214404, + 33.683775 + ], + [ + -117.21435, + 33.683784 + ], + [ + -117.214303, + 33.683796 + ], + [ + -117.214263, + 33.683814 + ], + [ + -117.214216, + 33.683835 + ], + [ + -117.214176, + 33.683853 + ], + [ + -117.214074, + 33.683877 + ], + [ + -117.213971, + 33.683897 + ], + [ + -117.213894, + 33.683897 + ], + [ + -117.213815, + 33.683896 + ], + [ + -117.213712, + 33.683915 + ], + [ + -117.213586, + 33.683943 + ], + [ + -117.208195, + 33.685039 + ] + ] + ] + }, + "properties": { + "name": "Spirit Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 568814307, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.136643, + 33.748609 + ], + [ + -117.137362, + 33.748608 + ], + [ + -117.138884, + 33.748612 + ], + [ + -117.138885, + 33.746517 + ], + [ + -117.137308, + 33.746521 + ], + [ + -117.137306, + 33.746612 + ], + [ + -117.137204, + 33.746612 + ], + [ + -117.137186, + 33.746594 + ], + [ + -117.137162, + 33.746582 + ], + [ + -117.137116, + 33.746579 + ], + [ + -117.137026, + 33.74658 + ], + [ + -117.136825, + 33.746582 + ], + [ + -117.136755, + 33.746581 + ], + [ + -117.136719, + 33.746585 + ], + [ + -117.136685, + 33.746602 + ], + [ + -117.136663, + 33.746621 + ], + [ + -117.136641, + 33.746672 + ], + [ + -117.136643, + 33.748609 + ] + ] + ] + }, + "properties": { + "name": "Marion V. Ashley Community Center", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 568839196, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.223384, + 33.691088 + ], + [ + -117.222844, + 33.691261 + ], + [ + -117.222747, + 33.691276 + ], + [ + -117.222633, + 33.691155 + ], + [ + -117.222486, + 33.691043 + ], + [ + -117.222332, + 33.69092 + ], + [ + -117.222185, + 33.690751 + ], + [ + -117.221974, + 33.690484 + ], + [ + -117.221801, + 33.690331 + ], + [ + -117.22161, + 33.690214 + ], + [ + -117.221592, + 33.690182 + ], + [ + -117.221594, + 33.690144 + ], + [ + -117.221831, + 33.689854 + ], + [ + -117.222185, + 33.689429 + ], + [ + -117.222484, + 33.689072 + ], + [ + -117.222761, + 33.688727 + ], + [ + -117.22302, + 33.68833 + ], + [ + -117.223169, + 33.688002 + ], + [ + -117.223302, + 33.687576 + ], + [ + -117.223382, + 33.687185 + ], + [ + -117.223404, + 33.687185 + ], + [ + -117.223403, + 33.687237 + ], + [ + -117.223384, + 33.691088 + ] + ] + ] + }, + "properties": { + "name": "La Ladera Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 572766220, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.162827, + 33.626585 + ], + [ + -117.162824, + 33.62624 + ], + [ + -117.163202, + 33.626233 + ], + [ + -117.163199, + 33.626267 + ], + [ + -117.163205, + 33.626317 + ], + [ + -117.163223, + 33.62636 + ], + [ + -117.163244, + 33.626386 + ], + [ + -117.163262, + 33.62641 + ], + [ + -117.163288, + 33.626426 + ], + [ + -117.162827, + 33.626585 + ] + ] + ] + }, + "properties": { + "name": "Springbrook Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 572766221, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.162846, + 33.6264 + ], + [ + -117.162848, + 33.626414 + ], + [ + -117.162856, + 33.626426 + ], + [ + -117.162868, + 33.626435 + ], + [ + -117.162883, + 33.62644 + ], + [ + -117.162899, + 33.626442 + ], + [ + -117.162915, + 33.626438 + ], + [ + -117.162928, + 33.626431 + ], + [ + -117.162938, + 33.62642 + ], + [ + -117.162944, + 33.626408 + ], + [ + -117.162944, + 33.626394 + ], + [ + -117.162939, + 33.626381 + ], + [ + -117.162929, + 33.626371 + ], + [ + -117.162915, + 33.626363 + ], + [ + -117.1629, + 33.62636 + ], + [ + -117.162884, + 33.626361 + ], + [ + -117.162869, + 33.626366 + ], + [ + -117.162856, + 33.626375 + ], + [ + -117.162848, + 33.626387 + ], + [ + -117.162846, + 33.6264 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 588268016, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.207292, + 33.692985 + ], + [ + -117.207234, + 33.692692 + ], + [ + -117.2073, + 33.692613 + ], + [ + -117.207241, + 33.692562 + ], + [ + -117.207217, + 33.692524 + ], + [ + -117.207204, + 33.69249 + ], + [ + -117.207199, + 33.692447 + ], + [ + -117.207208, + 33.692393 + ], + [ + -117.207219, + 33.692349 + ], + [ + -117.207233, + 33.692303 + ], + [ + -117.207229, + 33.691114 + ], + [ + -117.207169, + 33.691055 + ], + [ + -117.206304, + 33.691057 + ], + [ + -117.206212, + 33.691131 + ], + [ + -117.206234, + 33.692327 + ], + [ + -117.206273, + 33.692611 + ], + [ + -117.206318, + 33.692817 + ], + [ + -117.20635, + 33.692927 + ], + [ + -117.206407, + 33.693105 + ], + [ + -117.206517, + 33.693087 + ], + [ + -117.206695, + 33.693061 + ], + [ + -117.206967, + 33.693025 + ], + [ + -117.207292, + 33.692985 + ] + ] + ] + }, + "properties": { + "name": "E.L. Peterson Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 588268017, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.206307, + 33.691998 + ], + [ + -117.206469, + 33.691999 + ], + [ + -117.206469, + 33.691769 + ], + [ + -117.206307, + 33.691769 + ], + [ + -117.206307, + 33.691998 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 588268018, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.206557, + 33.691572 + ], + [ + -117.206562, + 33.691599 + ], + [ + -117.206577, + 33.691623 + ], + [ + -117.206601, + 33.691642 + ], + [ + -117.206631, + 33.691653 + ], + [ + -117.206664, + 33.691655 + ], + [ + -117.206695, + 33.691648 + ], + [ + -117.206722, + 33.691634 + ], + [ + -117.206742, + 33.691613 + ], + [ + -117.206753, + 33.691588 + ], + [ + -117.206753, + 33.691561 + ], + [ + -117.206743, + 33.691536 + ], + [ + -117.206724, + 33.691514 + ], + [ + -117.206697, + 33.691499 + ], + [ + -117.206666, + 33.691492 + ], + [ + -117.206634, + 33.691493 + ], + [ + -117.206604, + 33.691504 + ], + [ + -117.206579, + 33.691522 + ], + [ + -117.206563, + 33.691545 + ], + [ + -117.206557, + 33.691572 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 588268019, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.206829, + 33.691442 + ], + [ + -117.206824, + 33.691467 + ], + [ + -117.206829, + 33.691493 + ], + [ + -117.206844, + 33.691516 + ], + [ + -117.206866, + 33.691534 + ], + [ + -117.206895, + 33.691545 + ], + [ + -117.206926, + 33.691547 + ], + [ + -117.206958, + 33.691541 + ], + [ + -117.206985, + 33.691527 + ], + [ + -117.207005, + 33.691505 + ], + [ + -117.207016, + 33.69148 + ], + [ + -117.207016, + 33.691453 + ], + [ + -117.207004, + 33.691427 + ], + [ + -117.206984, + 33.691406 + ], + [ + -117.206956, + 33.691392 + ], + [ + -117.206925, + 33.691387 + ], + [ + -117.206894, + 33.69139 + ], + [ + -117.206866, + 33.691401 + ], + [ + -117.206843, + 33.691419 + ], + [ + -117.206829, + 33.691442 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 594957114, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.197999, + 33.690055 + ], + [ + -117.198057, + 33.690004 + ], + [ + -117.198057, + 33.689212 + ], + [ + -117.198053, + 33.689096 + ], + [ + -117.198035, + 33.688975 + ], + [ + -117.197966, + 33.688935 + ], + [ + -117.19796, + 33.688921 + ], + [ + -117.197949, + 33.688909 + ], + [ + -117.197851, + 33.688923 + ], + [ + -117.197716, + 33.688936 + ], + [ + -117.197544, + 33.688939 + ], + [ + -117.196803, + 33.688938 + ], + [ + -117.196802, + 33.690003 + ], + [ + -117.197147, + 33.690134 + ], + [ + -117.197203, + 33.690075 + ], + [ + -117.197241, + 33.69005 + ], + [ + -117.197285, + 33.690034 + ], + [ + -117.197325, + 33.690028 + ], + [ + -117.197369, + 33.690028 + ], + [ + -117.197446, + 33.690039 + ], + [ + -117.197537, + 33.690055 + ], + [ + -117.197999, + 33.690055 + ] + ] + ] + }, + "properties": { + "name": "Lazy Creek Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 600848172, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.197755, + 33.681972 + ], + [ + -117.197754, + 33.681986 + ], + [ + -117.197697, + 33.682034 + ], + [ + -117.197695, + 33.682095 + ], + [ + -117.197688, + 33.682195 + ], + [ + -117.197685, + 33.682262 + ], + [ + -117.197689, + 33.682326 + ], + [ + -117.197696, + 33.682397 + ], + [ + -117.197699, + 33.682462 + ], + [ + -117.197696, + 33.68254 + ], + [ + -117.1977, + 33.682615 + ], + [ + -117.1977, + 33.68269 + ], + [ + -117.197693, + 33.682795 + ], + [ + -117.197689, + 33.682851 + ], + [ + -117.197699, + 33.682927 + ], + [ + -117.197705, + 33.682963 + ], + [ + -117.197705, + 33.683004 + ], + [ + -117.1977, + 33.683056 + ], + [ + -117.197687, + 33.683177 + ], + [ + -117.197671, + 33.683263 + ], + [ + -117.197667, + 33.683322 + ], + [ + -117.197671, + 33.683405 + ], + [ + -117.197678, + 33.683472 + ], + [ + -117.197681, + 33.683509 + ], + [ + -117.197668, + 33.683566 + ], + [ + -117.1976, + 33.683888 + ], + [ + -117.197853, + 33.683887 + ], + [ + -117.19789, + 33.683878 + ], + [ + -117.197916, + 33.683864 + ], + [ + -117.197934, + 33.683847 + ], + [ + -117.197947, + 33.683825 + ], + [ + -117.197947, + 33.683806 + ], + [ + -117.19794, + 33.683766 + ], + [ + -117.197932, + 33.683709 + ], + [ + -117.197935, + 33.683669 + ], + [ + -117.197948, + 33.683623 + ], + [ + -117.197994, + 33.683554 + ], + [ + -117.198035, + 33.683502 + ], + [ + -117.198073, + 33.683463 + ], + [ + -117.198122, + 33.683431 + ], + [ + -117.198185, + 33.683407 + ], + [ + -117.198266, + 33.683381 + ], + [ + -117.198328, + 33.683357 + ], + [ + -117.198359, + 33.68334 + ], + [ + -117.198383, + 33.683311 + ], + [ + -117.198398, + 33.683267 + ], + [ + -117.198401, + 33.683214 + ], + [ + -117.198395, + 33.682736 + ], + [ + -117.198394, + 33.682607 + ], + [ + -117.198412, + 33.682562 + ], + [ + -117.198438, + 33.682536 + ], + [ + -117.198467, + 33.682519 + ], + [ + -117.198523, + 33.6825 + ], + [ + -117.198563, + 33.682493 + ], + [ + -117.198601, + 33.682492 + ], + [ + -117.198638, + 33.682501 + ], + [ + -117.198724, + 33.682536 + ], + [ + -117.199045, + 33.682668 + ], + [ + -117.19914, + 33.682713 + ], + [ + -117.199172, + 33.682731 + ], + [ + -117.199206, + 33.682755 + ], + [ + -117.199234, + 33.682776 + ], + [ + -117.199255, + 33.682805 + ], + [ + -117.199314, + 33.682896 + ], + [ + -117.199384, + 33.683 + ], + [ + -117.199468, + 33.683103 + ], + [ + -117.199584, + 33.683221 + ], + [ + -117.199732, + 33.683339 + ], + [ + -117.199828, + 33.683404 + ], + [ + -117.199881, + 33.683428 + ], + [ + -117.19992, + 33.683428 + ], + [ + -117.200031, + 33.683482 + ], + [ + -117.20006, + 33.683439 + ], + [ + -117.200023, + 33.68342 + ], + [ + -117.200035, + 33.683406 + ], + [ + -117.199924, + 33.683343 + ], + [ + -117.199825, + 33.683282 + ], + [ + -117.199736, + 33.683215 + ], + [ + -117.199644, + 33.683136 + ], + [ + -117.199572, + 33.683062 + ], + [ + -117.199503, + 33.682983 + ], + [ + -117.199443, + 33.682904 + ], + [ + -117.199396, + 33.68283 + ], + [ + -117.199339, + 33.68273 + ], + [ + -117.199289, + 33.682652 + ], + [ + -117.199242, + 33.682588 + ], + [ + -117.199184, + 33.682518 + ], + [ + -117.199118, + 33.682449 + ], + [ + -117.199043, + 33.682381 + ], + [ + -117.198955, + 33.68231 + ], + [ + -117.198836, + 33.682231 + ], + [ + -117.198729, + 33.682171 + ], + [ + -117.198573, + 33.682101 + ], + [ + -117.19845, + 33.682058 + ], + [ + -117.198298, + 33.682018 + ], + [ + -117.198143, + 33.68199 + ], + [ + -117.198024, + 33.681977 + ], + [ + -117.197909, + 33.681972 + ], + [ + -117.197755, + 33.681972 + ] + ] + ] + }, + "properties": { + "name": "Mayfield Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 604681053, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.147665, + 33.70533 + ], + [ + -117.147567, + 33.705252 + ], + [ + -117.147498, + 33.705189 + ], + [ + -117.147403, + 33.705093 + ], + [ + -117.147351, + 33.705036 + ], + [ + -117.147679, + 33.704851 + ], + [ + -117.147947, + 33.70509 + ], + [ + -117.147665, + 33.70533 + ] + ] + ] + }, + "properties": { + "name": "El Dorado Pocket Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 604681055, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.147572, + 33.705091 + ], + [ + -117.147587, + 33.705089 + ], + [ + -117.147602, + 33.705078 + ], + [ + -117.147611, + 33.70507 + ], + [ + -117.147616, + 33.70506 + ], + [ + -117.147621, + 33.705047 + ], + [ + -117.147623, + 33.705034 + ], + [ + -117.147623, + 33.705023 + ], + [ + -117.147621, + 33.705012 + ], + [ + -117.147617, + 33.705001 + ], + [ + -117.147611, + 33.704991 + ], + [ + -117.147605, + 33.704985 + ], + [ + -117.147597, + 33.704979 + ], + [ + -117.147586, + 33.704974 + ], + [ + -117.147572, + 33.704973 + ], + [ + -117.147562, + 33.704975 + ], + [ + -117.14755, + 33.704979 + ], + [ + -117.147541, + 33.704985 + ], + [ + -117.147527, + 33.705 + ], + [ + -117.147523, + 33.705008 + ], + [ + -117.147519, + 33.705023 + ], + [ + -117.147519, + 33.705046 + ], + [ + -117.147529, + 33.705068 + ], + [ + -117.147548, + 33.705088 + ], + [ + -117.147559, + 33.705091 + ], + [ + -117.147572, + 33.705091 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 610380142, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.129933, + 33.610715 + ], + [ + -117.129985, + 33.610975 + ], + [ + -117.129762, + 33.611177 + ], + [ + -117.129595, + 33.611315 + ], + [ + -117.129391, + 33.611462 + ], + [ + -117.129203, + 33.611585 + ], + [ + -117.129066, + 33.611664 + ], + [ + -117.128895, + 33.611759 + ], + [ + -117.128571, + 33.611909 + ], + [ + -117.128263, + 33.61203 + ], + [ + -117.128159, + 33.612067 + ], + [ + -117.128125, + 33.611899 + ], + [ + -117.128096, + 33.611749 + ], + [ + -117.128056, + 33.611555 + ], + [ + -117.128019, + 33.611367 + ], + [ + -117.127979, + 33.611169 + ], + [ + -117.127925, + 33.610905 + ], + [ + -117.127855, + 33.610572 + ], + [ + -117.12782, + 33.610395 + ], + [ + -117.127795, + 33.61027 + ], + [ + -117.127767, + 33.610138 + ], + [ + -117.12774, + 33.609998 + ], + [ + -117.127703, + 33.609816 + ], + [ + -117.127674, + 33.609678 + ], + [ + -117.127627, + 33.60953 + ], + [ + -117.127574, + 33.609372 + ], + [ + -117.127532, + 33.609202 + ], + [ + -117.127494, + 33.609042 + ], + [ + -117.127381, + 33.608985 + ], + [ + -117.127392, + 33.608966 + ], + [ + -117.127399, + 33.608945 + ], + [ + -117.1274, + 33.608922 + ], + [ + -117.127397, + 33.608905 + ], + [ + -117.12751, + 33.608892 + ], + [ + -117.12747, + 33.608699 + ], + [ + -117.127444, + 33.60857 + ], + [ + -117.127419, + 33.608443 + ], + [ + -117.127385, + 33.60828 + ], + [ + -117.127356, + 33.60814 + ], + [ + -117.127294, + 33.608118 + ], + [ + -117.1273, + 33.608105 + ], + [ + -117.127307, + 33.608077 + ], + [ + -117.127309, + 33.60806 + ], + [ + -117.127306, + 33.60803 + ], + [ + -117.127301, + 33.608011 + ], + [ + -117.127288, + 33.607993 + ], + [ + -117.127277, + 33.607979 + ], + [ + -117.127261, + 33.607963 + ], + [ + -117.12731, + 33.607915 + ], + [ + -117.127288, + 33.607808 + ], + [ + -117.127257, + 33.607663 + ], + [ + -117.12722, + 33.607493 + ], + [ + -117.127197, + 33.607374 + ], + [ + -117.127179, + 33.60728 + ], + [ + -117.12717, + 33.607153 + ], + [ + -117.127157, + 33.606988 + ], + [ + -117.127144, + 33.606823 + ], + [ + -117.127131, + 33.606657 + ], + [ + -117.127116, + 33.606481 + ], + [ + -117.127099, + 33.606273 + ], + [ + -117.127089, + 33.606162 + ], + [ + -117.127124, + 33.606199 + ], + [ + -117.127152, + 33.606238 + ], + [ + -117.127204, + 33.606304 + ], + [ + -117.127243, + 33.606356 + ], + [ + -117.12728, + 33.606404 + ], + [ + -117.127303, + 33.606437 + ], + [ + -117.127324, + 33.60647 + ], + [ + -117.127355, + 33.606505 + ], + [ + -117.127376, + 33.60653 + ], + [ + -117.127385, + 33.606552 + ], + [ + -117.127398, + 33.606575 + ], + [ + -117.127446, + 33.606655 + ], + [ + -117.127496, + 33.606735 + ], + [ + -117.127533, + 33.606803 + ], + [ + -117.127575, + 33.606882 + ], + [ + -117.12762, + 33.606967 + ], + [ + -117.127665, + 33.607065 + ], + [ + -117.127693, + 33.60713 + ], + [ + -117.127726, + 33.607212 + ], + [ + -117.127756, + 33.607287 + ], + [ + -117.12778, + 33.607357 + ], + [ + -117.127802, + 33.607423 + ], + [ + -117.12783, + 33.607505 + ], + [ + -117.12785, + 33.607567 + ], + [ + -117.127867, + 33.607635 + ], + [ + -117.127886, + 33.607718 + ], + [ + -117.127909, + 33.607806 + ], + [ + -117.12793, + 33.607884 + ], + [ + -117.127957, + 33.607973 + ], + [ + -117.127995, + 33.608097 + ], + [ + -117.12803, + 33.608198 + ], + [ + -117.128073, + 33.608312 + ], + [ + -117.128121, + 33.608433 + ], + [ + -117.128161, + 33.608524 + ], + [ + -117.1282, + 33.608606 + ], + [ + -117.128239, + 33.608691 + ], + [ + -117.128282, + 33.608777 + ], + [ + -117.128332, + 33.608868 + ], + [ + -117.128383, + 33.608961 + ], + [ + -117.128444, + 33.609068 + ], + [ + -117.1285, + 33.60916 + ], + [ + -117.128527, + 33.60919 + ], + [ + -117.128545, + 33.609208 + ], + [ + -117.128552, + 33.609218 + ], + [ + -117.12859, + 33.609277 + ], + [ + -117.128608, + 33.609316 + ], + [ + -117.128619, + 33.609352 + ], + [ + -117.128627, + 33.60939 + ], + [ + -117.128627, + 33.609428 + ], + [ + -117.128672, + 33.609436 + ], + [ + -117.12871, + 33.60946 + ], + [ + -117.128752, + 33.609518 + ], + [ + -117.128812, + 33.609603 + ], + [ + -117.128878, + 33.609683 + ], + [ + -117.128941, + 33.609757 + ], + [ + -117.129019, + 33.609847 + ], + [ + -117.129105, + 33.609949 + ], + [ + -117.129126, + 33.609975 + ], + [ + -117.129159, + 33.610011 + ], + [ + -117.129211, + 33.610067 + ], + [ + -117.129282, + 33.610147 + ], + [ + -117.129347, + 33.610215 + ], + [ + -117.129411, + 33.610279 + ], + [ + -117.129515, + 33.610383 + ], + [ + -117.129637, + 33.610487 + ], + [ + -117.129761, + 33.610588 + ], + [ + -117.129853, + 33.61066 + ], + [ + -117.129933, + 33.610715 + ] + ] + ] + }, + "properties": { + "name": "Heroes Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 620718615, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.211787, + 33.723387 + ], + [ + -117.212097, + 33.723389 + ], + [ + -117.212255, + 33.723352 + ], + [ + -117.212542, + 33.723285 + ], + [ + -117.212786, + 33.723231 + ], + [ + -117.212779, + 33.723206 + ], + [ + -117.212932, + 33.723176 + ], + [ + -117.213095, + 33.723143 + ], + [ + -117.213075, + 33.723058 + ], + [ + -117.213049, + 33.722961 + ], + [ + -117.213035, + 33.722902 + ], + [ + -117.212718, + 33.722957 + ], + [ + -117.212719, + 33.722966 + ], + [ + -117.212687, + 33.722968 + ], + [ + -117.212602, + 33.722975 + ], + [ + -117.212451, + 33.722992 + ], + [ + -117.21229, + 33.72301 + ], + [ + -117.212096, + 33.723031 + ], + [ + -117.211786, + 33.72303 + ], + [ + -117.211786, + 33.723095 + ], + [ + -117.211787, + 33.723387 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 620721889, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.178372, + 33.658174 + ], + [ + -117.178405, + 33.658231 + ], + [ + -117.178464, + 33.658331 + ], + [ + -117.178487, + 33.658326 + ], + [ + -117.178511, + 33.658323 + ], + [ + -117.178544, + 33.658326 + ], + [ + -117.178567, + 33.65833 + ], + [ + -117.178582, + 33.658335 + ], + [ + -117.178596, + 33.658307 + ], + [ + -117.178652, + 33.658203 + ], + [ + -117.178682, + 33.658185 + ], + [ + -117.178956, + 33.658018 + ], + [ + -117.17893, + 33.657848 + ], + [ + -117.178865, + 33.6576 + ], + [ + -117.178842, + 33.657502 + ], + [ + -117.178773, + 33.657516 + ], + [ + -117.17867, + 33.657543 + ], + [ + -117.178562, + 33.657582 + ], + [ + -117.178494, + 33.657611 + ], + [ + -117.178364, + 33.657674 + ], + [ + -117.178219, + 33.657741 + ], + [ + -117.17812, + 33.657786 + ], + [ + -117.178138, + 33.657812 + ], + [ + -117.178171, + 33.65786 + ], + [ + -117.178207, + 33.657916 + ], + [ + -117.178306, + 33.658065 + ], + [ + -117.178372, + 33.658174 + ] + ] + ] + }, + "properties": { + "name": "Marsden Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 620721890, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.178622, + 33.658147 + ], + [ + -117.17861, + 33.658128 + ], + [ + -117.178606, + 33.658108 + ], + [ + -117.178611, + 33.658081 + ], + [ + -117.178649, + 33.658047 + ], + [ + -117.178675, + 33.658035 + ], + [ + -117.178716, + 33.658027 + ], + [ + -117.178744, + 33.658032 + ], + [ + -117.178764, + 33.658045 + ], + [ + -117.178778, + 33.658061 + ], + [ + -117.178759, + 33.658073 + ], + [ + -117.178697, + 33.658101 + ], + [ + -117.178657, + 33.658122 + ], + [ + -117.178622, + 33.658147 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 620725764, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.181672, + 33.65757 + ], + [ + -117.181739, + 33.657641 + ], + [ + -117.181639, + 33.65781 + ], + [ + -117.181533, + 33.657986 + ], + [ + -117.181684, + 33.658 + ], + [ + -117.181991, + 33.658028 + ], + [ + -117.182053, + 33.658021 + ], + [ + -117.182171, + 33.657997 + ], + [ + -117.182347, + 33.657958 + ], + [ + -117.182346, + 33.657798 + ], + [ + -117.182201, + 33.657798 + ], + [ + -117.1822, + 33.657326 + ], + [ + -117.181935, + 33.657455 + ], + [ + -117.181828, + 33.657508 + ], + [ + -117.181725, + 33.657493 + ], + [ + -117.181719, + 33.657515 + ], + [ + -117.181707, + 33.657536 + ], + [ + -117.181692, + 33.657553 + ], + [ + -117.181681, + 33.657563 + ], + [ + -117.181672, + 33.65757 + ] + ] + ] + }, + "properties": { + "name": "El Camino Community Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 620725765, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.181875, + 33.657918 + ], + [ + -117.182021, + 33.65794 + ], + [ + -117.182053, + 33.657789 + ], + [ + -117.181907, + 33.657767 + ], + [ + -117.181875, + 33.657918 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 639211279, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.132386, + 33.613344 + ], + [ + -117.132627, + 33.613347 + ], + [ + -117.132677, + 33.613354 + ], + [ + -117.13272, + 33.613101 + ], + [ + -117.132738, + 33.612995 + ], + [ + -117.132658, + 33.612986 + ], + [ + -117.132589, + 33.612982 + ], + [ + -117.132458, + 33.612979 + ], + [ + -117.132361, + 33.612981 + ], + [ + -117.132368, + 33.613092 + ], + [ + -117.132386, + 33.613344 + ] + ] + ] + }, + "properties": { + "name": "Mahogany Meadows Pocket Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 639211280, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.132448, + 33.613163 + ], + [ + -117.13249, + 33.613153 + ], + [ + -117.132509, + 33.613143 + ], + [ + -117.132524, + 33.613129 + ], + [ + -117.132531, + 33.613109 + ], + [ + -117.132539, + 33.613043 + ], + [ + -117.132502, + 33.613045 + ], + [ + -117.132466, + 33.61305 + ], + [ + -117.132436, + 33.61306 + ], + [ + -117.132418, + 33.613077 + ], + [ + -117.132414, + 33.613094 + ], + [ + -117.13242, + 33.613118 + ], + [ + -117.13243, + 33.613138 + ], + [ + -117.13244, + 33.613152 + ], + [ + -117.132448, + 33.613163 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 640215321, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.198698, + 33.661814 + ], + [ + -117.199075, + 33.66181 + ], + [ + -117.199468, + 33.661909 + ], + [ + -117.199495, + 33.661926 + ], + [ + -117.199555, + 33.661916 + ], + [ + -117.199602, + 33.661911 + ], + [ + -117.199753, + 33.661967 + ], + [ + -117.19984, + 33.661978 + ], + [ + -117.199843, + 33.661963 + ], + [ + -117.199815, + 33.661938 + ], + [ + -117.199832, + 33.661407 + ], + [ + -117.199759, + 33.661335 + ], + [ + -117.199725, + 33.661268 + ], + [ + -117.199743, + 33.661156 + ], + [ + -117.199756, + 33.660833 + ], + [ + -117.20053, + 33.660846 + ], + [ + -117.200582, + 33.660885 + ], + [ + -117.200648, + 33.660852 + ], + [ + -117.20066, + 33.660739 + ], + [ + -117.200641, + 33.66071 + ], + [ + -117.200605, + 33.660659 + ], + [ + -117.2006, + 33.660623 + ], + [ + -117.200617, + 33.660581 + ], + [ + -117.200633, + 33.660535 + ], + [ + -117.200628, + 33.660497 + ], + [ + -117.200618, + 33.660458 + ], + [ + -117.200575, + 33.660466 + ], + [ + -117.20053, + 33.660463 + ], + [ + -117.200484, + 33.660442 + ], + [ + -117.200443, + 33.660402 + ], + [ + -117.200389, + 33.66043 + ], + [ + -117.199737, + 33.660425 + ], + [ + -117.199646, + 33.66033 + ], + [ + -117.199599, + 33.660346 + ], + [ + -117.199548, + 33.660354 + ], + [ + -117.199511, + 33.660345 + ], + [ + -117.199465, + 33.660326 + ], + [ + -117.199427, + 33.660289 + ], + [ + -117.199406, + 33.660248 + ], + [ + -117.19941, + 33.660197 + ], + [ + -117.199425, + 33.660168 + ], + [ + -117.199398, + 33.660148 + ], + [ + -117.198933, + 33.660302 + ], + [ + -117.19891, + 33.660329 + ], + [ + -117.198613, + 33.660448 + ], + [ + -117.19866, + 33.660573 + ], + [ + -117.198682, + 33.660646 + ], + [ + -117.198693, + 33.660735 + ], + [ + -117.198698, + 33.660945 + ], + [ + -117.198697, + 33.661142 + ], + [ + -117.198693, + 33.661394 + ], + [ + -117.198696, + 33.661624 + ], + [ + -117.198698, + 33.661814 + ] + ] + ] + }, + "properties": { + "name": "Hidden Hills Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 665205592, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.223083, + 33.68891 + ], + [ + -117.222904, + 33.688828 + ], + [ + -117.222913, + 33.688815 + ], + [ + -117.22306, + 33.688605 + ], + [ + -117.223234, + 33.688684 + ], + [ + -117.223083, + 33.68891 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 665213330, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.221334, + 33.679907 + ], + [ + -117.221387, + 33.679909 + ], + [ + -117.221417, + 33.679888 + ], + [ + -117.221437, + 33.679849 + ], + [ + -117.221438, + 33.679819 + ], + [ + -117.221425, + 33.67979 + ], + [ + -117.221418, + 33.679751 + ], + [ + -117.221432, + 33.679698 + ], + [ + -117.221413, + 33.679695 + ], + [ + -117.221396, + 33.679679 + ], + [ + -117.221393, + 33.679641 + ], + [ + -117.221382, + 33.679607 + ], + [ + -117.22138, + 33.6796 + ], + [ + -117.221369, + 33.67956 + ], + [ + -117.221297, + 33.679477 + ], + [ + -117.221242, + 33.679429 + ], + [ + -117.221218, + 33.679421 + ], + [ + -117.221197, + 33.679407 + ], + [ + -117.221187, + 33.679385 + ], + [ + -117.220831, + 33.679261 + ], + [ + -117.220805, + 33.679307 + ], + [ + -117.220836, + 33.679318 + ], + [ + -117.221225, + 33.679593 + ], + [ + -117.221241, + 33.679626 + ], + [ + -117.221264, + 33.679843 + ], + [ + -117.221285, + 33.679877 + ], + [ + -117.221309, + 33.679895 + ], + [ + -117.221334, + 33.679907 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 665213331, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.224649, + 33.684805 + ], + [ + -117.2248, + 33.684323 + ], + [ + -117.224923, + 33.684109 + ], + [ + -117.225094, + 33.684033 + ], + [ + -117.22518, + 33.68389 + ], + [ + -117.225314, + 33.683676 + ], + [ + -117.225449, + 33.683573 + ], + [ + -117.225604, + 33.683613 + ], + [ + -117.225846, + 33.683903 + ], + [ + -117.226098, + 33.684238 + ], + [ + -117.226189, + 33.684524 + ], + [ + -117.226253, + 33.684711 + ], + [ + -117.226253, + 33.684756 + ], + [ + -117.225915, + 33.684783 + ], + [ + -117.22517, + 33.684765 + ], + [ + -117.224649, + 33.684805 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 665712575, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.229133, + 33.680934 + ], + [ + -117.228988, + 33.680746 + ], + [ + -117.228945, + 33.680766 + ], + [ + -117.228903, + 33.680811 + ], + [ + -117.228876, + 33.68088 + ], + [ + -117.228897, + 33.680932 + ], + [ + -117.228953, + 33.680979 + ], + [ + -117.229028, + 33.680994 + ], + [ + -117.229096, + 33.680967 + ], + [ + -117.229133, + 33.680934 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 665712587, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.22914, + 33.681019 + ], + [ + -117.229073, + 33.681043 + ], + [ + -117.229029, + 33.681053 + ], + [ + -117.228984, + 33.68105 + ], + [ + -117.228917, + 33.681026 + ], + [ + -117.228886, + 33.681014 + ], + [ + -117.228848, + 33.680968 + ], + [ + -117.228821, + 33.680924 + ], + [ + -117.228829, + 33.680826 + ], + [ + -117.228844, + 33.680791 + ], + [ + -117.228888, + 33.680752 + ], + [ + -117.228947, + 33.680726 + ], + [ + -117.229027, + 33.680687 + ], + [ + -117.229165, + 33.680618 + ], + [ + -117.229224, + 33.680589 + ], + [ + -117.229462, + 33.680462 + ], + [ + -117.22951, + 33.680439 + ], + [ + -117.229218, + 33.68004 + ], + [ + -117.229277, + 33.680019 + ], + [ + -117.229356, + 33.680001 + ], + [ + -117.229435, + 33.680009 + ], + [ + -117.229512, + 33.680036 + ], + [ + -117.229567, + 33.680073 + ], + [ + -117.229584, + 33.680092 + ], + [ + -117.229551, + 33.680109 + ], + [ + -117.229535, + 33.68009 + ], + [ + -117.229514, + 33.680099 + ], + [ + -117.229514, + 33.680116 + ], + [ + -117.229529, + 33.680136 + ], + [ + -117.229543, + 33.680166 + ], + [ + -117.229569, + 33.680172 + ], + [ + -117.229594, + 33.680158 + ], + [ + -117.229586, + 33.680134 + ], + [ + -117.229602, + 33.680124 + ], + [ + -117.22963, + 33.680175 + ], + [ + -117.229628, + 33.680219 + ], + [ + -117.229612, + 33.680305 + ], + [ + -117.229571, + 33.680369 + ], + [ + -117.229592, + 33.680412 + ], + [ + -117.229594, + 33.680451 + ], + [ + -117.229567, + 33.680501 + ], + [ + -117.229482, + 33.68054 + ], + [ + -117.229325, + 33.680616 + ], + [ + -117.229157, + 33.680701 + ], + [ + -117.229057, + 33.680748 + ], + [ + -117.228992, + 33.680782 + ], + [ + -117.229163, + 33.680995 + ], + [ + -117.22914, + 33.681019 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 665712609, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.222727, + 33.689596 + ], + [ + -117.222745, + 33.689583 + ], + [ + -117.222754, + 33.689558 + ], + [ + -117.222765, + 33.689546 + ], + [ + -117.222783, + 33.68954 + ], + [ + -117.222792, + 33.68954 + ], + [ + -117.222807, + 33.689492 + ], + [ + -117.222803, + 33.689446 + ], + [ + -117.222787, + 33.689412 + ], + [ + -117.222771, + 33.689393 + ], + [ + -117.22273, + 33.689364 + ], + [ + -117.222705, + 33.689356 + ], + [ + -117.222633, + 33.689343 + ], + [ + -117.222563, + 33.689362 + ], + [ + -117.222528, + 33.689384 + ], + [ + -117.222499, + 33.689421 + ], + [ + -117.222485, + 33.689463 + ], + [ + -117.222483, + 33.68951 + ], + [ + -117.222525, + 33.689572 + ], + [ + -117.222576, + 33.689599 + ], + [ + -117.222623, + 33.689614 + ], + [ + -117.222693, + 33.68961 + ], + [ + -117.222727, + 33.689596 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 666242959, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.211832, + 33.712254 + ], + [ + -117.211738, + 33.711679 + ], + [ + -117.211692, + 33.71168 + ], + [ + -117.211653, + 33.711481 + ], + [ + -117.211529, + 33.711504 + ], + [ + -117.211523, + 33.711471 + ], + [ + -117.211519, + 33.711454 + ], + [ + -117.21148, + 33.711444 + ], + [ + -117.211446, + 33.711438 + ], + [ + -117.211397, + 33.711234 + ], + [ + -117.210702, + 33.711499 + ], + [ + -117.210604, + 33.711653 + ], + [ + -117.211068, + 33.711856 + ], + [ + -117.21149, + 33.712103 + ], + [ + -117.211832, + 33.712254 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 666245907, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.19839, + 33.682492 + ], + [ + -117.198399, + 33.682428 + ], + [ + -117.198297, + 33.682423 + ], + [ + -117.198277, + 33.682443 + ], + [ + -117.198279, + 33.682464 + ], + [ + -117.198305, + 33.682491 + ], + [ + -117.19839, + 33.682492 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 666245921, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.21333, + 33.684334 + ], + [ + -117.213366, + 33.684347 + ], + [ + -117.21342, + 33.68435 + ], + [ + -117.213449, + 33.684334 + ], + [ + -117.213474, + 33.684309 + ], + [ + -117.213487, + 33.684285 + ], + [ + -117.21353, + 33.684263 + ], + [ + -117.213547, + 33.684241 + ], + [ + -117.213538, + 33.684207 + ], + [ + -117.213507, + 33.684186 + ], + [ + -117.213477, + 33.684185 + ], + [ + -117.213434, + 33.684183 + ], + [ + -117.213405, + 33.684173 + ], + [ + -117.213373, + 33.684159 + ], + [ + -117.213324, + 33.684161 + ], + [ + -117.213288, + 33.684195 + ], + [ + -117.213253, + 33.684213 + ], + [ + -117.213227, + 33.684228 + ], + [ + -117.213202, + 33.684268 + ], + [ + -117.213213, + 33.684303 + ], + [ + -117.213231, + 33.684325 + ], + [ + -117.213259, + 33.684335 + ], + [ + -117.213304, + 33.684332 + ], + [ + -117.21333, + 33.684334 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 666249932, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.154458, + 33.679466 + ], + [ + -117.154012, + 33.679496 + ], + [ + -117.154045, + 33.679243 + ], + [ + -117.154068, + 33.679243 + ], + [ + -117.154143, + 33.678961 + ], + [ + -117.154187, + 33.678966 + ], + [ + -117.154327, + 33.678546 + ], + [ + -117.154306, + 33.678523 + ], + [ + -117.154364, + 33.678418 + ], + [ + -117.154412, + 33.678404 + ], + [ + -117.154493, + 33.678381 + ], + [ + -117.154748, + 33.678481 + ], + [ + -117.154767, + 33.678545 + ], + [ + -117.154752, + 33.678637 + ], + [ + -117.154681, + 33.678736 + ], + [ + -117.15458, + 33.678705 + ], + [ + -117.154546, + 33.678785 + ], + [ + -117.154523, + 33.678867 + ], + [ + -117.15453, + 33.678945 + ], + [ + -117.154631, + 33.679019 + ], + [ + -117.154806, + 33.679013 + ], + [ + -117.154868, + 33.679007 + ], + [ + -117.155831, + 33.679302 + ], + [ + -117.155803, + 33.6794 + ], + [ + -117.156443, + 33.679583 + ], + [ + -117.15647, + 33.67968 + ], + [ + -117.156729, + 33.679676 + ], + [ + -117.156771, + 33.679686 + ], + [ + -117.156795, + 33.679876 + ], + [ + -117.156353, + 33.679765 + ], + [ + -117.155518, + 33.679549 + ], + [ + -117.155128, + 33.679455 + ], + [ + -117.154458, + 33.679466 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 666249950, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.1466, + 33.637342 + ], + [ + -117.14658, + 33.637333 + ], + [ + -117.146565, + 33.637321 + ], + [ + -117.146552, + 33.637308 + ], + [ + -117.146545, + 33.637277 + ], + [ + -117.14655, + 33.637254 + ], + [ + -117.146558, + 33.637238 + ], + [ + -117.146582, + 33.637218 + ], + [ + -117.146619, + 33.637212 + ], + [ + -117.146661, + 33.637216 + ], + [ + -117.146677, + 33.63722 + ], + [ + -117.146693, + 33.637231 + ], + [ + -117.146708, + 33.637252 + ], + [ + -117.146725, + 33.637272 + ], + [ + -117.146723, + 33.637313 + ], + [ + -117.146704, + 33.637339 + ], + [ + -117.146677, + 33.637352 + ], + [ + -117.146644, + 33.637358 + ], + [ + -117.14663, + 33.637357 + ], + [ + -117.1466, + 33.637342 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 666249962, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.163187, + 33.629314 + ], + [ + -117.163166, + 33.629326 + ], + [ + -117.163146, + 33.629328 + ], + [ + -117.163124, + 33.629323 + ], + [ + -117.16311, + 33.629317 + ], + [ + -117.163104, + 33.629306 + ], + [ + -117.163092, + 33.629286 + ], + [ + -117.163072, + 33.629241 + ], + [ + -117.163034, + 33.629206 + ], + [ + -117.163001, + 33.62919 + ], + [ + -117.162976, + 33.629186 + ], + [ + -117.162952, + 33.629185 + ], + [ + -117.16292, + 33.629169 + ], + [ + -117.162907, + 33.629143 + ], + [ + -117.162919, + 33.629114 + ], + [ + -117.162938, + 33.629104 + ], + [ + -117.162962, + 33.629099 + ], + [ + -117.16299, + 33.629097 + ], + [ + -117.163019, + 33.629105 + ], + [ + -117.163057, + 33.629102 + ], + [ + -117.163102, + 33.629113 + ], + [ + -117.163123, + 33.629133 + ], + [ + -117.163132, + 33.629151 + ], + [ + -117.163129, + 33.629185 + ], + [ + -117.163142, + 33.629219 + ], + [ + -117.163159, + 33.629231 + ], + [ + -117.163191, + 33.629253 + ], + [ + -117.163211, + 33.62928 + ], + [ + -117.163204, + 33.629301 + ], + [ + -117.163187, + 33.629314 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 666715720, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.163751, + 33.715101 + ], + [ + -117.163575, + 33.715095 + ], + [ + -117.16354, + 33.715091 + ], + [ + -117.163494, + 33.715081 + ], + [ + -117.163436, + 33.715072 + ], + [ + -117.16337, + 33.715057 + ], + [ + -117.163324, + 33.715055 + ], + [ + -117.163275, + 33.715061 + ], + [ + -117.163238, + 33.715076 + ], + [ + -117.163223, + 33.715057 + ], + [ + -117.16319, + 33.715043 + ], + [ + -117.163068, + 33.715014 + ], + [ + -117.16296, + 33.714997 + ], + [ + -117.162876, + 33.714982 + ], + [ + -117.162833, + 33.714904 + ], + [ + -117.162826, + 33.714866 + ], + [ + -117.162827, + 33.714814 + ], + [ + -117.162847, + 33.714759 + ], + [ + -117.162894, + 33.714641 + ], + [ + -117.16291, + 33.714593 + ], + [ + -117.16294, + 33.714498 + ], + [ + -117.162966, + 33.714387 + ], + [ + -117.162971, + 33.714312 + ], + [ + -117.162982, + 33.714213 + ], + [ + -117.163008, + 33.714167 + ], + [ + -117.163044, + 33.714145 + ], + [ + -117.163147, + 33.71413 + ], + [ + -117.163285, + 33.714128 + ], + [ + -117.163546, + 33.714121 + ], + [ + -117.163567, + 33.71414 + ], + [ + -117.163605, + 33.71414 + ], + [ + -117.163796, + 33.714268 + ], + [ + -117.163809, + 33.714273 + ], + [ + -117.163824, + 33.714277 + ], + [ + -117.163831, + 33.714267 + ], + [ + -117.163845, + 33.71426 + ], + [ + -117.163859, + 33.714254 + ], + [ + -117.163876, + 33.714252 + ], + [ + -117.163903, + 33.714243 + ], + [ + -117.163906, + 33.714358 + ], + [ + -117.16388, + 33.714356 + ], + [ + -117.163818, + 33.714343 + ], + [ + -117.163774, + 33.714329 + ], + [ + -117.16372, + 33.714316 + ], + [ + -117.163655, + 33.714303 + ], + [ + -117.163595, + 33.714296 + ], + [ + -117.163547, + 33.71432 + ], + [ + -117.163508, + 33.714349 + ], + [ + -117.163491, + 33.714383 + ], + [ + -117.163485, + 33.714444 + ], + [ + -117.163503, + 33.714482 + ], + [ + -117.163532, + 33.714511 + ], + [ + -117.163584, + 33.714534 + ], + [ + -117.163674, + 33.714537 + ], + [ + -117.163737, + 33.714525 + ], + [ + -117.163764, + 33.714518 + ], + [ + -117.163751, + 33.715101 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 666715782, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.148443, + 33.720094 + ], + [ + -117.148451, + 33.720064 + ], + [ + -117.148458, + 33.720052 + ], + [ + -117.148477, + 33.720036 + ], + [ + -117.148508, + 33.720024 + ], + [ + -117.148517, + 33.720016 + ], + [ + -117.148531, + 33.719951 + ], + [ + -117.148531, + 33.719941 + ], + [ + -117.148527, + 33.719929 + ], + [ + -117.148512, + 33.71992 + ], + [ + -117.148496, + 33.719921 + ], + [ + -117.148424, + 33.719932 + ], + [ + -117.148406, + 33.719935 + ], + [ + -117.148387, + 33.719938 + ], + [ + -117.148364, + 33.719946 + ], + [ + -117.148351, + 33.719957 + ], + [ + -117.148346, + 33.719975 + ], + [ + -117.148348, + 33.71999 + ], + [ + -117.148348, + 33.720001 + ], + [ + -117.148344, + 33.720027 + ], + [ + -117.148338, + 33.720048 + ], + [ + -117.148333, + 33.720069 + ], + [ + -117.148331, + 33.720081 + ], + [ + -117.148334, + 33.720095 + ], + [ + -117.148346, + 33.720106 + ], + [ + -117.148365, + 33.720109 + ], + [ + -117.148399, + 33.720099 + ], + [ + -117.148425, + 33.720095 + ], + [ + -117.148443, + 33.720094 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 667300766, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.254534, + 33.673657 + ], + [ + -117.254494, + 33.673661 + ], + [ + -117.254486, + 33.673538 + ], + [ + -117.254526, + 33.673537 + ], + [ + -117.254537, + 33.673508 + ], + [ + -117.254562, + 33.673501 + ], + [ + -117.254577, + 33.673491 + ], + [ + -117.254646, + 33.673485 + ], + [ + -117.254722, + 33.673487 + ], + [ + -117.25469, + 33.673498 + ], + [ + -117.254692, + 33.673509 + ], + [ + -117.254605, + 33.673541 + ], + [ + -117.25456, + 33.673575 + ], + [ + -117.254534, + 33.673657 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 667544836, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.236461, + 33.680766 + ], + [ + -117.23651, + 33.680735 + ], + [ + -117.236766, + 33.680405 + ], + [ + -117.236782, + 33.680324 + ], + [ + -117.236732, + 33.68024 + ], + [ + -117.236641, + 33.680204 + ], + [ + -117.236269, + 33.680193 + ], + [ + -117.236028, + 33.680198 + ], + [ + -117.235919, + 33.6802 + ], + [ + -117.235839, + 33.680202 + ], + [ + -117.235745, + 33.68016 + ], + [ + -117.235218, + 33.68016 + ], + [ + -117.235218, + 33.680195 + ], + [ + -117.235221, + 33.680266 + ], + [ + -117.235247, + 33.680389 + ], + [ + -117.23529, + 33.680495 + ], + [ + -117.235326, + 33.680534 + ], + [ + -117.235368, + 33.680497 + ], + [ + -117.235425, + 33.680526 + ], + [ + -117.235489, + 33.680542 + ], + [ + -117.235493, + 33.680526 + ], + [ + -117.235953, + 33.680621 + ], + [ + -117.236092, + 33.680699 + ], + [ + -117.236163, + 33.680733 + ], + [ + -117.236342, + 33.68081 + ], + [ + -117.236378, + 33.680789 + ], + [ + -117.236461, + 33.680766 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 670590827, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.175291, + 33.641428 + ], + [ + -117.174709, + 33.641425 + ], + [ + -117.174675, + 33.641422 + ], + [ + -117.174651, + 33.641408 + ], + [ + -117.174639, + 33.641393 + ], + [ + -117.174627, + 33.641364 + ], + [ + -117.174623, + 33.641293 + ], + [ + -117.17476, + 33.64129 + ], + [ + -117.175157, + 33.641284 + ], + [ + -117.175276, + 33.641272 + ], + [ + -117.175317, + 33.641243 + ], + [ + -117.175341, + 33.64121 + ], + [ + -117.175338, + 33.641164 + ], + [ + -117.175362, + 33.641165 + ], + [ + -117.175365, + 33.641333 + ], + [ + -117.175291, + 33.641397 + ], + [ + -117.175291, + 33.641428 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 670590828, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.17476, + 33.64129 + ], + [ + -117.174759, + 33.641257 + ], + [ + -117.175133, + 33.641257 + ], + [ + -117.175132, + 33.641236 + ], + [ + -117.175253, + 33.641227 + ], + [ + -117.17527, + 33.64109 + ], + [ + -117.175292, + 33.641088 + ], + [ + -117.175296, + 33.641068 + ], + [ + -117.175285, + 33.640643 + ], + [ + -117.175292, + 33.640643 + ], + [ + -117.175293, + 33.640622 + ], + [ + -117.175336, + 33.640622 + ], + [ + -117.175346, + 33.641065 + ], + [ + -117.175357, + 33.641086 + ], + [ + -117.175364, + 33.641118 + ], + [ + -117.175362, + 33.641165 + ], + [ + -117.175338, + 33.641164 + ], + [ + -117.175341, + 33.64121 + ], + [ + -117.175317, + 33.641243 + ], + [ + -117.175276, + 33.641272 + ], + [ + -117.175157, + 33.641284 + ], + [ + -117.17476, + 33.64129 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 670761573, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.191725, + 33.744537 + ], + [ + -117.191601, + 33.744191 + ], + [ + -117.19164, + 33.744118 + ], + [ + -117.192098, + 33.744016 + ], + [ + -117.192163, + 33.744004 + ], + [ + -117.192213, + 33.744024 + ], + [ + -117.192243, + 33.744023 + ], + [ + -117.192268, + 33.744014 + ], + [ + -117.192291, + 33.744007 + ], + [ + -117.192282, + 33.743985 + ], + [ + -117.192219, + 33.743967 + ], + [ + -117.192174, + 33.743949 + ], + [ + -117.19163, + 33.744063 + ], + [ + -117.191557, + 33.74415 + ], + [ + -117.191676, + 33.744542 + ], + [ + -117.191725, + 33.744537 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 671986108, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.241883, + 33.687634 + ], + [ + -117.24219, + 33.687648 + ], + [ + -117.242179, + 33.687821 + ], + [ + -117.24215, + 33.688395 + ], + [ + -117.242192, + 33.68846 + ], + [ + -117.242197, + 33.68849 + ], + [ + -117.242252, + 33.688506 + ], + [ + -117.242306, + 33.688513 + ], + [ + -117.242359, + 33.68854 + ], + [ + -117.242399, + 33.688558 + ], + [ + -117.242407, + 33.688582 + ], + [ + -117.242401, + 33.688598 + ], + [ + -117.24238, + 33.688604 + ], + [ + -117.242366, + 33.68862 + ], + [ + -117.241729, + 33.688636 + ], + [ + -117.241241, + 33.688638 + ], + [ + -117.241237, + 33.688585 + ], + [ + -117.241391, + 33.688541 + ], + [ + -117.241487, + 33.688286 + ], + [ + -117.241567, + 33.688175 + ], + [ + -117.241609, + 33.688123 + ], + [ + -117.241569, + 33.687924 + ], + [ + -117.241543, + 33.687918 + ], + [ + -117.241552, + 33.687889 + ], + [ + -117.241829, + 33.687945 + ], + [ + -117.241883, + 33.687634 + ] + ] + ] + }, + "properties": { + "name": "Outrigger Park", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + }, + { + "type": "Feature", + "id": 671986111, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -117.241748, + 33.688155 + ], + [ + -117.241642, + 33.688115 + ], + [ + -117.241726, + 33.68795 + ], + [ + -117.241839, + 33.687969 + ], + [ + -117.241811, + 33.688047 + ], + [ + -117.241748, + 33.688155 + ] + ] + ] + }, + "properties": { + "name": "Unknown Areaname", + "stroke": "#352BFF", + "stroke-width": 2.0, + "stroke-opacity": 1.0, + "fill": "#0651FF", + "fill-opacity": 0.5 + } + } + ] } \ No newline at end of file diff --git a/test/CommandLineTest.cs b/test/CommandLineTests.cs similarity index 98% rename from test/CommandLineTest.cs rename to test/CommandLineTests.cs index 32a0b321..5065b986 100644 --- a/test/CommandLineTest.cs +++ b/test/CommandLineTests.cs @@ -1,5 +1,6 @@ namespace WhMgr.Test { + /* using NUnit.Framework; [TestFixture] @@ -21,4 +22,5 @@ public void TestParseArgs() Assert.IsTrue(string.Compare(config?.ToString(), args[3], true) == 0); } } + */ } \ No newline at end of file diff --git a/test/FilterTests.cs b/test/FilterTests.cs new file mode 100644 index 00000000..bd407321 --- /dev/null +++ b/test/FilterTests.cs @@ -0,0 +1,553 @@ +namespace WhMgr.Test +{ + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Threading.Tasks; + + using NUnit.Framework; + using Gender = POGOProtos.Rpc.PokemonDisplayProto.Types.Gender; + + using WhMgr.Common; + using WhMgr.Localization; + using WhMgr.Services.Alarms.Filters; + + [TestFixture] + public class FilterTests + { + [SetUp] + public void Setup() + { + // TODO: Fix locale path, copy from src/bin to test/bin/debug|release + /* + var localeFolder = Strings.BasePath + Strings.StaticFolder + Path.DirectorySeparatorChar + "locales"; + Translator.Instance.LocaleDirectory = localeFolder; + //Translator.Instance.CreateLocaleFiles().ConfigureAwait(false).GetAwaiter().GetResult(); + Translator.Instance.SetLocale("en"); + */ + } + + private static bool IvWildcardMatches(string ivEntry, ushort? pokemonIvEntry) + { + // Skip IV ranges + if (ivEntry.Contains("-")) + { + return false; + } + + // Return true if wildcard specified. + if (ivEntry == "*") + { + return true; + } + + // Validate IV list entry is a valid integer. + if (!ushort.TryParse(ivEntry, out var ivValue)) + { + return false; + } + + // Check if individual value is the same or if wildcard is specified. + return ivValue == pokemonIvEntry; + } + + private static bool IvListMatches(List ivList, ushort? atk, ushort? def, ushort? sta) + { + // Check if IV list is null or no entries and Pokemon has IV values, otherwise return false. + if (ivList?.Count == 0 || + atk == null || + def == null || + sta == null) + { + return false; + } + + // Construct expected formatted IV entry string + var ivEntry = $"{atk}/{def}/{sta}"; + + // Check if IV matches any IV list range or wildcard entries + var matches = ivList?.Exists(iv => + { + // Check if IV list entries matches Pokemon IV string verbatim + if (string.Equals(iv, ivEntry)) + { + return true; + } + + var split = iv.Split('/'); + + // Ensure user specified all IV parts required + if (split.Length != 3) + return false; + + var ivAttack = split[0]; + var ivDefense = split[1]; + var ivStamina = split[2]; + + var matchesWildcard = + IvWildcardMatches(ivAttack, atk) && + IvWildcardMatches(ivDefense, def) && + IvWildcardMatches(ivStamina, sta); + + var matchesRange = IvRangeMatches(ivAttack, ivDefense, ivStamina, atk, def, sta); + return matchesWildcard || matchesRange; + }) ?? false; + + return matches; + } + + private static bool IvRangeMatches(string ivAttack, string ivDefense, string ivStamina, ushort? attack, ushort? defense, ushort? stamina) + { + if (attack == null || + defense == null || + stamina == null) + { + return false; + } + + // Check if none of the IV entries contain range indicator + if (!ivAttack.Contains("-") && + !ivDefense.Contains("-") && + !ivStamina.Contains("-")) + { + return false; + } + + // Parse min/max IV values for all entries + var (minAttack, maxAttack) = ParseMinMaxValues(ivAttack); + var (minDefense, maxDefense) = ParseMinMaxValues(ivDefense); + var (minStamina, maxStamina) = ParseMinMaxValues(ivStamina); + /* + ushort minAttack; + ushort maxAttack; + if (ivAttack.Contains("-")) + { + // Parse min/max range values + var (min, max) = ParseRangeEntry(ivAttack); + minAttack = min; + maxAttack = max; + } + else + { + // Check if attack IV contains wildcard, otherwise value should be a whole value + if (ivAttack.Contains("*")) + { + // Wildcard specified, set min/max to 0-15 + minAttack = 0; + maxAttack = 15; + } + else + { + // No range indicator found for attack IV, parse and assign whole IV value to min/max values + var atk = ushort.Parse(ivAttack); + minAttack = atk; + maxAttack = atk; + } + } + + // Check if defense contains range indicator, if so parse min/max values + ushort minDefense; + ushort maxDefense; + if (ivDefense.Contains("-")) + { + // Parse min/max range values + var (min, max) = ParseRangeEntry(ivDefense); + minDefense = min; + maxDefense = max; + } + else + { + // Check if attack IV contains wildcard, otherwise value should be a whole value + if (ivDefense.Contains("*")) + { + minDefense = 0; + maxDefense = 15; + } + else + { + // No range indicator found for defense IV, parse and assign whole IV value to min/max values + var def = ushort.Parse(ivDefense); + minDefense = def; + maxDefense = def; + } + } + + // Check if stamina contains range indicator, if so parse min/max values + ushort minStamina; + ushort maxStamina; + if (ivStamina.Contains("-")) + { + // Parse min/max range values + var (min, max) = ParseRangeEntry(ivStamina); + minStamina = min; + maxStamina = max; + } + else + { + // Check if attack IV contains wildcard, otherwise value should be a whole value + if (ivStamina.Contains("*")) + { + minStamina = 0; + maxStamina = 15; + } + else + { + // No range indicator found for stamina IV, parse and assign whole IV value to min/max values + var sta = ushort.Parse(ivStamina); + minStamina = sta; + maxStamina = sta; + } + } + */ + + // Check if Pokemon IV is within min/max range + var matches = (attack ?? 0) >= minAttack && (attack ?? 0) <= maxAttack && + (defense ?? 0) >= minDefense && (defense ?? 0) <= maxDefense && + (stamina ?? 0) >= minStamina && (stamina ?? 0) <= maxStamina; + + return matches; + } + + private static (ushort, ushort) ParseRangeEntry(string ivEntry) + { + // Parse IV range min/max values + var split = ivEntry.Split('-'); + + // If count mismatch, skip + if (split.Length != 2) + { + return default; + } + + // Parse first range value for minimum + if (!ushort.TryParse(split[0], out var minRange)) + { + return default; + } + + // Parse second range value for maximum + if (!ushort.TryParse(split[1], out var maxRange)) + { + return default; + } + return (minRange, maxRange); + } + + private static (ushort, ushort) ParseMinMaxValues(string ivEntry) + { + ushort minRange; + ushort maxRange; + if (ivEntry.Contains("-")) + { + // Parse min/max range values + var (min, max) = ParseRangeEntry(ivEntry); + minRange = min; + maxRange = max; + } + // Check if attack IV contains wildcard, otherwise value should be a whole value + else if (ivEntry.Contains("*")) + { + // Wildcard specified, set min/max to 0-15 + minRange = 0; + maxRange = 15; + } + else + { + // No range indicator found for IV entry, parse and assign whole IV value to min/max values + var atk = ushort.Parse(ivEntry); + minRange = atk; + maxRange = atk; + } + return (minRange, maxRange); + } + + [Test] + [TestCase(PokemonSize.All)] + [TestCase(PokemonSize.Small)] + public void Test_PokemonFilterSize_ReturnsIsTrue(PokemonSize expectedSize) + { + var pokemonSize = PokemonSize.Small; + var isMissingStats = false; + var matches = !isMissingStats //&& pkmn.Height != null && pkmn.Weight != null + && Filters.MatchesSize(pokemonSize, expectedSize); + + Assert.IsTrue(matches); + } + + [Test] + [TestCase(PokemonSize.Small)] + [TestCase(PokemonSize.Tiny)] + [TestCase(PokemonSize.Normal)] + public void Test_PokemonFilterSize_ReturnsIsFalse(PokemonSize expectedSize) + { + var pokemonSize = PokemonSize.Big; + var isMissingStats = false; + var matches = !isMissingStats //&& pkmn.Height != null && pkmn.Weight != null + && Filters.MatchesSize(pokemonSize, expectedSize); + + Assert.IsFalse(matches); + } + + [Test] + [TestCase(1, 15, 15)] + [TestCase(1, 15, 14)] + public void Test_PokemonIVListRange_ReturnsIsTrue(int atk, int def, int sta) + { + var ivList = new List + { + "1-2/15/14", + "0-15/0-15/0-15", + "*/15/14-15" + }; + var matches = IvListMatches(ivList, (ushort)atk, (ushort)def, (ushort)sta); + /* + var matches = IvRangeMatches( + ivAttack, ivDefense, ivStamina, + (ushort)atk, (ushort)def, (ushort)sta + ); + */ + Assert.IsTrue(matches); + } + + [Test] + //[TestCase("1-2", "15", "15", 1, 15, 15)] + //[TestCase("0-15", "0-15", "0-15", 1, 15, 15)] + [TestCase(1, 15, 15)] + [TestCase(7, 15, 14)] + public void Test_PokemonIVListRange_ReturnsIsFalse(int atk, int def, int sta) + { + var ivList = new List + { + "3-4/12/12", + "0/0/0", + "15/15/15", + "*/14/14", + }; + var matches = IvListMatches(ivList, (ushort)atk, (ushort)def, (ushort)sta); + /* + var matches = IvRangeMatches( + ivAttack, ivDefense, ivStamina, + (ushort)atk, (ushort)def, (ushort)sta + ); + */ + Assert.IsFalse(matches); + } + + [Test] + [TestCase(1)] // Unown A + [TestCase(33)] // Deoxys Normal + [TestCase(34)] // Deoxys Attack + [TestCase(76)] // Geodude or something Alola + [TestCase(121)] // Spinda 08 + public void Test_PokemonForm_ReturnsIsTrue(int formId) + { + var forms = new List + { + "A", + "Normal", + "Attack", + "Alola", + "08", + }; + var form = Translator.Instance.GetFormName((uint)formId, includeNormal: true); + var matches = forms.Contains(form) || forms.Count == 0; + Assert.IsTrue(matches); + } + + [Test] + [TestCase(1)] // Unown A + [TestCase(33)] // Deoxys Normal + [TestCase(34)] // Deoxys Attack + [TestCase(76)] // Geodude or something Alola + [TestCase(121)] // Spinda 08 + public void Test_PokemonForm_ReturnsIsFalse(int formId) + { + var forms = new List + { + "Holiday", + //"", + /* + "A", + "Normal", + "Attack", + "Alola", + "08", + */ + }; + var form = Translator.Instance.GetFormName((uint)formId, includeNormal: false); + var matches = forms.Contains(form) || forms.Count == 0; + Assert.IsFalse(matches); + } + + [Test] + [TestCase(1)] // Unown A + public void Test_PokemonFormsEmpty_ReturnsIsTrue(int formId) + { + var forms = new List(); + var form = Translator.Instance.GetFormName((uint)formId, includeNormal: false); + var matches = forms.Contains(form) || forms.Count == 0; + Assert.IsTrue(matches); + } + + [Test] + [TestCase(2)] // Unown B + public void Test_PokemonFormsNull_ReturnsIsTrue(int formId) + { + List forms = null; + var form = Translator.Instance.GetFormName((uint)formId, includeNormal: false); + var matches = forms?.Contains(form) ?? true || forms?.Count == 0; + Assert.IsTrue(matches); + } + + [Test] + public void Test_PokemonFilter_ReturnsIsTrue() + { + /* + TODO: Test PokemonFilter + if (!( + (!hasIVStats && matchesIV && matchesLvl && matchesGender) || + (hasIVStats && matchesIVList) + )) + continue; + */ + Assert.IsTrue(true); + } + + [Test] + [TestCase(15, 15, 15)] + [TestCase(0, 0, 0)] + [TestCase(1, 2, 3)] + [TestCase(1, 0, 0)] + // TODO: Test for null + public void Test_PokemonIVList_ReturnsIsTrue(int attack, int defense, int stamina) + { + var ivList = new List + { + "15/15/15", + "0/0/0", + "1/2/3", + "1/0/0", + }; + var matches = ivList.Contains($"{attack}/{defense}/{stamina}"); + Assert.IsTrue(matches); + } + + [Test] + [TestCase(12, 14, 15)] + [TestCase(1, 15, 15)] + [TestCase(9, 0, 9)] + [TestCase(1, 1, 1)] + // TODO: Test for null + public void Test_PokemonIVList_ReturnsIsFalse(int attack, int defense, int stamina) + { + var ivList = new List + { + "15/15/15", + "0/0/0", + "1/2/3", + "1/0/0", + }; + var matches = ivList.Contains($"{attack}/{defense}/{stamina}"); + Assert.IsFalse(matches); + } + + [Test] + [TestCase("95.6%", 95, 100)] + [TestCase("0%", 0, 0)] + [TestCase("95.6%", 95, 100)] + [TestCase("100", 100, 100)] + [TestCase("?", 0, 0)] + [TestCase("?", 0, 100)] + public void Test_PokemonIV_ReturnsIsTrue(string iv, int minimumIV, int maximumIV) + { + var matches = Filters.MatchesIV(iv, (uint)minimumIV, (uint)maximumIV); + Assert.IsTrue(matches); + } + + [Test] + [TestCase("?", 90, 100)] + [TestCase("0%", 90, 100)] + [TestCase("91.1%", 93, 100)] + public void Test_PokemonIV_ReturnsIsFalse(string iv, int minimumIV, int maximumIV) + { + var matches = Filters.MatchesIV(iv, (uint)minimumIV, (uint)maximumIV); + Assert.IsFalse(matches); + } + + [Test] + [TestCase(35, 35, 35)] + [TestCase(1, 1, 1)] + [TestCase(null, 0, 0)] + public void Test_PokemonLevel_ReturnsIsTrue(int? lvl, int minimumLevel, int maximumLevel) + { + var matches = Filters.MatchesLvl((ushort?)lvl, (uint)minimumLevel, (uint)maximumLevel); + Assert.IsTrue(matches); + } + + [Test] + [TestCase(29, 35, 35)] + [TestCase(40, 20, 35)] + [TestCase(null, 1, 1)] + public void Test_PokemonLevel_ReturnsIsFalse(int? lvl, int minimumLevel, int maximumLevel) + { + var matches = Filters.MatchesLvl((ushort?)lvl, (uint)minimumLevel, (uint)maximumLevel); + Assert.IsFalse(matches); + } + + [Test] + [TestCase(Gender.Female, Gender.Female)] + [TestCase(Gender.Less, Gender.Female)] + [TestCase(Gender.Unset, Gender.Male)] + [TestCase(Gender.Unset, Gender.Less)] + public void Test_PokemonGender_ReturnsIsTrue(Gender gender, Gender expected) + { + var matches = Filters.MatchesGender(gender, expected); + Assert.IsTrue(matches); + } + + [Test] + [TestCase(Gender.Male, Gender.Unset)] + [TestCase(Gender.Female, Gender.Male)] + [TestCase(Gender.Female, Gender.Less)] + public void Test_PokemonGender_ReturnsIsFalse(Gender gender, Gender expected) + { + var matches = Filters.MatchesGender(gender, expected); + Assert.IsFalse(matches); + } + + [Test] + [TestCase(PokemonSize.Large, PokemonSize.All)] + [TestCase(PokemonSize.Tiny, PokemonSize.Tiny)] + [TestCase(PokemonSize.All, null)] + [TestCase(PokemonSize.Big, null)] + public void Test_PokemonSize_ReturnsIsTrue(PokemonSize size, PokemonSize? expected) + { + var matches = Filters.MatchesSize(size, expected); + Assert.IsTrue(matches); + } + + [Test] + [TestCase(PokemonSize.All, PokemonSize.Large)] + [TestCase(PokemonSize.Normal, PokemonSize.Small)] + [TestCase(null, PokemonSize.Big)] + public void Test_PokemonSize_ReturnsIsFalse(PokemonSize size, PokemonSize? expected) + { + var matches = Filters.MatchesSize(size, expected); + Assert.IsFalse(matches); + } + + [Test] + [TestCase(1200, 1000, 9999)] + [TestCase(1, 1, 1)] + [TestCase(null, 0, 0)] + public void Test_PokemonCP_ReturnsIsTrue(int? cp, int minimumCP, int maximumCP) => + Assert.IsTrue(Filters.MatchesCP((uint?)cp, (uint)minimumCP, (uint)maximumCP)); + + [Test] + [TestCase(1492, 1495, 1500)] + [TestCase(400, 200, 350)] + [TestCase(null, 1, 1)] + public void Test_PokemonCP_ReturnsIsFalse(int? cp, int minimumCP, int maximumCP) => + Assert.IsFalse(Filters.MatchesCP((uint?)cp, (uint)minimumCP, (uint)maximumCP)); + } +} \ No newline at end of file diff --git a/test/GeofenceTest.cs b/test/GeofenceTests.cs similarity index 86% rename from test/GeofenceTest.cs rename to test/GeofenceTests.cs index 424ca6ba..bfb34ae4 100644 --- a/test/GeofenceTest.cs +++ b/test/GeofenceTests.cs @@ -1,28 +1,29 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using NUnit.Framework; -using WhMgr.Geofence; - -namespace WhMgr.Test +namespace WhMgr.Test { + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + + using NUnit.Framework; + + using WhMgr.Services.Geofence; + [TestFixture] public class GeofenceTests { private const string JsonGeofencesFolder = "JsonGeofences"; private const string IniGeofencesFolder = "IniGeofences"; - private static IEnumerable LoadGeofences(string geofencesFolder) + private static IEnumerable LoadGeofences(string geofencesFolder) { - var geofences = new List(); + var geofences = new List(); foreach (var file in Directory.EnumerateFiles(geofencesFolder)) { try { - var fileGeofences = GeofenceItem.FromFile(file); - + var fileGeofences = Geofence.FromFile(file); geofences.AddRange(fileGeofences); } catch (Exception ex) @@ -34,7 +35,7 @@ private static IEnumerable LoadGeofences(string geofencesFolder) return geofences; } - + [Test] public void TestLoadingJson() { @@ -62,7 +63,7 @@ public void TestInsideJson(double latitude, double longitude, string expectedGeo { var effectiveFolder = Path.Combine(TestContext.CurrentContext.TestDirectory, JsonGeofencesFolder); var geofences = LoadGeofences(effectiveFolder); - var insideOf = GeofenceService.GetGeofences(geofences, new Location(latitude, longitude)).ToList(); + var insideOf = GeofenceService.GetGeofences(geofences, new Coordinate(latitude, longitude)).ToList(); if (!string.IsNullOrEmpty(expectedGeofence)) { @@ -85,7 +86,7 @@ public void TestInsideIni(double latitude, double longitude, string expectedGeof { var effectiveFolder = Path.Combine(TestContext.CurrentContext.TestDirectory, IniGeofencesFolder); var geofences = LoadGeofences(effectiveFolder); - var insideOf = GeofenceService.GetGeofences(geofences, new Location(latitude, longitude)).ToList(); + var insideOf = GeofenceService.GetGeofences(geofences, new Coordinate(latitude, longitude)).ToList(); if (!string.IsNullOrEmpty(expectedGeofence)) { diff --git a/test/IconTests.cs b/test/IconTests.cs new file mode 100644 index 00000000..ba7f7da3 --- /dev/null +++ b/test/IconTests.cs @@ -0,0 +1,280 @@ +namespace WhMgr.Test +{ + using System; + using System.Collections.Generic; + using System.IO; + + using NUnit.Framework; + using InvasionCharacter = POGOProtos.Rpc.EnumWrapper.Types.InvasionCharacter; + using QuestRewardType = POGOProtos.Rpc.QuestRewardProto.Types.Type; + + using WhMgr.Common; + using WhMgr.Configuration; + using WhMgr.Services.Icons; + using WhMgr.Services.Webhook.Models; + using WhMgr.Services.Webhook.Models.Quests; + + [TestFixture] + public class IconTests + { + private const string DefaultStyleName = "Default"; + + private UIconService _iconService; + + [SetUp] + public void Setup() + { + // Create icon fetcher instance + _iconService = CreateIconFetcherInstance(); + } + + [TestCase] + public void Test_IconsIndex() + { + } + + [TestCase] + public void Test_PokemonIcons() + { + // Fetch bulbasaur icon + var iconUrl = _iconService.GetPokemonIcon(DefaultStyleName, 3, evolutionId: 1, shiny: true); + Console.WriteLine($"Mega Venasaur: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + } + + [TestCase] + public void Test_PokestopIcons() + { + var iconUrl = _iconService.GetPokestopIcon(DefaultStyleName, PokestopLureType.Glacial, true, true); + Console.WriteLine($"Lure: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + + iconUrl = _iconService.GetPokestopIcon(DefaultStyleName, PokestopLureType.Magnetic, false, false, true); + Console.WriteLine($"AR Lure: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + } + + [TestCase] + public void Test_RaidEggIcons() + { + var iconUrl = _iconService.GetEggIcon(DefaultStyleName, 5, false, true); + Console.WriteLine($"Egg (Level 5, EX): {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + } + + [TestCase] + public void Test_InvasionIcons() + { + var iconUrl = _iconService.GetInvasionIcon(DefaultStyleName, InvasionCharacter.CharacterGrassGruntFemale); + // https://raw.githubusercontent.com/WatWowMap/wwm-uicons/main/invasion/0.png + Console.WriteLine($"Invasion: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + } + + [TestCase] + public void Test_QuestRewardIcons() + { + var iconUrl = _iconService.GetRewardIcon(DefaultStyleName, QuestRewardType.Stardust, 1000); + Console.WriteLine($"Stardust Reward: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + + var questData = new QuestData + { + Rewards = new List + { + new QuestRewardMessage + { + Type = QuestRewardType.PokemonEncounter, + Info = new QuestReward + { + PokemonId = 3, + GenderId = 1, + CostumeId = 0, + /* + MegaResource = new QuestMegaResource + { + PokemonId = 3, + Amount = 200, + }, + */ + }, + }, + }, + }; + + iconUrl = _iconService.GetRewardIcon(DefaultStyleName, questData); + Console.WriteLine($"Pokemon Encounter: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + + iconUrl = _iconService.GetRewardIcon(DefaultStyleName, QuestRewardType.PokemonEncounter, 3); + Console.WriteLine($"Pokemon Reward: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + + iconUrl = _iconService.GetRewardIcon(DefaultStyleName, QuestRewardType.MegaResource, 3, 20); + Console.WriteLine($"MegaResource Reward: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + } + + [TestCase] + public void Test_GymIcons() + { + // Get Valor gym with 5 trainers, in battle, and ex eligible + var iconUrl = _iconService.GetGymIcon(DefaultStyleName, PokemonTeam.Valor, 5, true, true); + Console.WriteLine($"Gym (Valor, Battle, EX): {iconUrl}"); + // Check if fetched icon is what it should be + Assert.AreEqual(iconUrl, "https://raw.githubusercontent.com/WatWowMap/wwm-uicons/main/gym/2_t5_b_ex.png"); + + iconUrl = _iconService.GetGymIcon(DefaultStyleName, PokemonTeam.Mystic, 0, true, true, true); + Console.WriteLine($"Gym (Mystic, Battle, EX, AR): {iconUrl}"); + Assert.AreEqual(iconUrl, "https://raw.githubusercontent.com/WatWowMap/wwm-uicons/main/gym/1_b_ex_ar.png"); + } + + [TestCase] + public void Test_TeamIcons() + { + var iconUrl = _iconService.GetTeamIcon(DefaultStyleName, PokemonTeam.Mystic); + Console.WriteLine($"Team: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + } + + [TestCase] + public void Test_TypeIcons() + { + var iconUrl = _iconService.GetTypeIcon(DefaultStyleName, PokemonType.Ground); + Console.WriteLine($"Type: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + } + + [TestCase] + public void Test_NestIcons() + { + var iconUrl = _iconService.GetNestIcon(DefaultStyleName, PokemonType.Dark); + Console.WriteLine($"Nest: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + } + + [TestCase] + public void Test_WeatherIcons() + { + var iconUrl = _iconService.GetWeatherIcon(DefaultStyleName, WeatherCondition.Fog); + Console.WriteLine($"Weather: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + } + + [TestCase] + public void Test_MiscIcons() + { + var iconUrl = _iconService.GetMiscellaneousIcon(DefaultStyleName, "ar"); + Console.WriteLine($"Misc: {iconUrl}"); + Assert.IsTrue(Path.GetFileName(iconUrl) != "0.png"); + } + + + private static IconStyleCollection GetDefaultIconConfig() + { + var config = new IconStyleCollection + { + { + "Default", + new Dictionary + { + { + IconType.Base, new IconStyleConfig + { + Name = "Default", + Path = "https://raw.githubusercontent.com/WatWowMap/wwm-uicons/main/", + } + }, + { + IconType.Pokemon, new IconStyleConfig + { + Name = "Default_Pokemon", + Path = "https://raw.githubusercontent.com/nileplumb/PkmnShuffleMap/master/UICONS/pokemon/", + } + }, + } + }, + { + "Home", + new Dictionary + { + { + IconType.Base, new IconStyleConfig + { + Name = "Home", + Path = "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/master/UICONS_OS/", + } + }, + } + }, + { + "Shuffle", + new Dictionary + { + { + IconType.Base, new IconStyleConfig + { + Name = "Shuffle", + Path = "https://raw.githubusercontent.com/nileplumb/PkmnShuffleMap/master/UICONS/", + } + }, + } + }, + // TODO: Set `raid` to list instead of object >.> use dynamic class and get object or list to work around, eventually. Always someone that doesn't go by the 'Standard'. + { + "Pokemon Go", + new Dictionary + { + { + IconType.Base, new IconStyleConfig + { + Name = "Pokemon Go", + Path = "https://raw.githubusercontent.com/whitewillem/PogoAssets/resized/icons_large-uicons", + } + }, + } + }, + // TODO: Set `gym` to object instead of list >.> eventually. Always someone that doesn't go by the 'Standard'. + { + "PokeDave Shuffle", + new Dictionary + { + { + IconType.Base, new IconStyleConfig + { + Name = "PokeDave Shuffle", + Path = "https://raw.githubusercontent.com/jepke/pokedave_shuffle_icons_-PMSF-/master/UICONS/", + } + } + } + }, + // TODO: Set `raid` and `gym` to object instead of list >.> eventually. Always someone that doesn't go by the 'Standard'. + { + "PMSF", + new Dictionary + { + { + IconType.Base, new IconStyleConfig + { + Name = "PMSF", + Path = "https://raw.githubusercontent.com/pmsf/PMSF/develop/static/sprites/", + } + } + } + }, + }; + return config; + } + + private static UIconService CreateIconFetcherInstance() + { + var config = GetDefaultIconConfig(); + // TODO: Get quest rewards list from base index.json + var iconFetcher = new UIconService( + config, + UIconService.GetQuestRewardTypeNames() + ); + return iconFetcher; + } + } +} \ No newline at end of file diff --git a/test/IniGeofences/ParisLondon.ini b/test/IniGeofences/ParisLondon.ini index 751d3628..997c83a0 100644 --- a/test/IniGeofences/ParisLondon.ini +++ b/test/IniGeofences/ParisLondon.ini @@ -1,4 +1,4 @@ -[Paris] +[Paris] 49.003441, 2.086837 48.744985, 2.067047 48.728204, 2.577332 diff --git a/test/JsonGeofences/ParisLondon.json b/test/JsonGeofences/ParisLondon.json index 2ec4f884..5e13408c 100644 --- a/test/JsonGeofences/ParisLondon.json +++ b/test/JsonGeofences/ParisLondon.json @@ -1,4 +1,4 @@ -{ +{ "type": "FeatureCollection", "features": [ { diff --git a/test/LocalizationTests.cs b/test/LocalizationTests.cs new file mode 100644 index 00000000..5a30ca60 --- /dev/null +++ b/test/LocalizationTests.cs @@ -0,0 +1,19 @@ +namespace WhMgr.Test +{ + using System; + using System.Collections.Generic; + + using NUnit.Framework; + + using WhMgr.Services; + + [TestFixture] + public class LocalizationTests + { + [SetUp] + public void Setup() + { + // TODO: Localizer tests + } + } +} \ No newline at end of file diff --git a/test/PvpEvoTests.cs b/test/PvpEvoTests.cs new file mode 100644 index 00000000..7ed3a1b9 --- /dev/null +++ b/test/PvpEvoTests.cs @@ -0,0 +1,83 @@ +namespace WhMgr.Test +{ + using System; + using System.IO; + + using Microsoft.AspNetCore; + using Microsoft.AspNetCore.Hosting; + using Microsoft.Extensions.DependencyInjection; + using NUnit.Framework; + + using WhMgr.Configuration; + using WhMgr.Data; + using WhMgr.Extensions; + using WhMgr.Services.Subscriptions; + + [TestFixture] + public class PvpEvoTests + { + private ISubscriptionManagerService _subscriptionManager; + private DependencyResolverHelper _serviceProvider; + + [SetUp] + public void Setup() + { + var configPath = "../../../" + Strings.ConfigsFolder + "/" + Strings.ConfigFileName; + var config = Config.Load(configPath); + if (config == null) + { + Console.WriteLine($"Failed to load config {configPath}."); + return; + } + // TODO: >.> Need to implement ConfigHolder in Startup instead of just Config + //var holder = new ConfigHolder(config); + config.FileName = configPath; + config.LoadDiscordServers(); + Startup.Config = config; + + var webHost = WebHost.CreateDefaultBuilder() + .UseStartup() + .Build(); + _serviceProvider = new DependencyResolverHelper(webHost); + + _subscriptionManager = _serviceProvider.GetService(); + } + + [Test] + [TestCase(2, 0)] // Ivysaur + public void Test_PvpEvoSubs_ReturnsIsTrue(int pokemonId, int formId) + { + var pkmn = GameMaster.GetPokemon((uint)pokemonId, (uint)formId); + var evolutionIds = pkmn.GetPokemonEvolutionIds(); + Console.WriteLine($"Evo ids: {evolutionIds}"); + // Get evolution ids from masterfile for incoming pokemon, check if subscriptions for evo/base + var subscriptions = _subscriptionManager.GetSubscriptionsByPvpPokemonId(evolutionIds); + Assert.IsTrue(subscriptions.Count > 0); + } + } + + [TestFixture] + public class DependencyResolverHelper + { + private readonly IWebHost _webHost; + + /// + public DependencyResolverHelper(IWebHost webHost) => _webHost = webHost; + + public T GetService() + { + var serviceScope = _webHost.Services.CreateScope(); + var services = serviceScope.ServiceProvider; + try + { + var scopedService = services.GetRequiredService(); + return scopedService; + } + catch (Exception ex) + { + Console.WriteLine($"DependencyResolverHelper: {ex}"); + throw; + } + } + } +} \ No newline at end of file diff --git a/test/PvpRankTests.cs b/test/PvpRankTests.cs new file mode 100644 index 00000000..88e7b9fa --- /dev/null +++ b/test/PvpRankTests.cs @@ -0,0 +1,57 @@ +namespace WhMgr.Test +{ + using System; + using System.Linq; + + using NUnit.Framework; + using static POGOProtos.Rpc.BelugaPokemonProto.Types; + + using WhMgr.Services.Pvp; + + [TestFixture] + public class PvpRankTests + { + [SetUp] + public void Setup() + { + } + + [TestCase] + public void TestPvpRankings() + { + var pvpRankCalc = new PvpRankCalculator(); + for (uint i = 1; i < 900; i++) + { + var pvpRanks = pvpRankCalc.QueryPvpRank(i, 0, 0, 15, 15, 15, 1, PokemonGender.Male); + if (pvpRanks == null) + continue; + + foreach (var (league, ranks) in pvpRanks) + { + foreach (var rank in ranks) + { + if (rank.Rank > 25) + continue; + + switch (league) + { + //case "great": + //case "ultra": + case "little": + var value = new + { + cp = rank.CP, + rank = rank.Rank, + percent = rank.Percentage, + level = rank.Level, + evo = rank.Evolution, + }; + Console.WriteLine($"Pokemon: {i}, League: {league}, Ranks: {string.Join(", ", value)}"); + break; + } + } + } + } + } + } +} \ No newline at end of file diff --git a/test/ReverseGeocodingTests.cs b/test/ReverseGeocodingTests.cs new file mode 100644 index 00000000..838792a8 --- /dev/null +++ b/test/ReverseGeocodingTests.cs @@ -0,0 +1,78 @@ +namespace WhMgr.Test +{ + using System; + using System.Threading.Tasks; + + using NUnit.Framework; + + using WhMgr.Configuration; + using WhMgr.Services.Geofence; + using WhMgr.Services.Geofence.Geocoding; + + [TestFixture] + public class ReverseGeocodingTests + { + //https://nominatim.openstreetmap.org/reverse?lat=&lon=& + + [SetUp] + public void Setup() + { + } + + [TestCase( + 34.01, + -117.01, + "{{Results.[0].FormattedAddress}}", + "13403 Canyon Crest Rd, Yucaipa, CA 92399, USA" + )] + public async Task TestGoogleReverseGeocoding(double lat, double lon, string schema, string address) + { + var reverseGeocoding = new ReverseGeocodingLookup( + GetConfig(ReverseGeocodingProvider.GMaps, schema) + ); + var googleAddress = await reverseGeocoding.GetAddressAsync(new Coordinate(lat, lon)); + Console.WriteLine($"Address: {googleAddress}"); + Assert.IsNotNull(googleAddress); + Assert.IsNotEmpty(googleAddress); + Assert.AreEqual(address, googleAddress); + } + + [TestCase( + 34.01, + -117.01, + "{{Address.Road}} {{Address.State}} {{Address.Postcode}} {{Address.Country}}", + //"{{DisplayName}}", + "Canyon Terrace Drive California 92399 United States" + )] + public async Task TestNominatimReverseGeocoding(double lat, double lon, string schema, string address) + { + var reverseGeocoding = new ReverseGeocodingLookup( + GetConfig(ReverseGeocodingProvider.Osm, schema) + ); + var nominatimAddress = await reverseGeocoding.GetAddressAsync(new Coordinate(lat, lon)); + Console.WriteLine($"Address: {nominatimAddress}"); + Assert.IsNotNull(nominatimAddress); + Assert.IsNotEmpty(nominatimAddress); + Assert.AreEqual(address, nominatimAddress); + } + + private static ReverseGeocodingConfig GetConfig(ReverseGeocodingProvider provider, string schema = null) + { + return new ReverseGeocodingConfig + { + Provider = provider, + CacheToDisk = true, + GoogleMaps = new GoogleMapsConfig + { + Key = "", + Schema = schema, + }, + Nominatim = new NominatimConfig + { + Endpoint = "https://nominatim.openstreetmap.org", + Schema = schema, + } + }; + } + } +} \ No newline at end of file diff --git a/test/StaticMapTests.cs b/test/StaticMapTests.cs new file mode 100644 index 00000000..24026baa --- /dev/null +++ b/test/StaticMapTests.cs @@ -0,0 +1,91 @@ +namespace WhMgr.Test +{ + using System; + using System.Collections.Generic; + using System.Collections.Specialized; + using System.Net; + using NUnit.Framework; + + using WhMgr.Configuration; + using WhMgr.Extensions; + using WhMgr.Services.StaticMap; + + [TestFixture] + internal class StaticMapTests + { + [SetUp] + public void Setup() + { + } + + [Test] + public void Test_StaticMapPokemon_ReturnsIsTrue() + { + var gyms = new List + { + new + { + lat = 34.010493, + lon = -117.010713, + team = "Valor", + marker = "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/master/UICONS/gym/1.png", + } + }; + var pokestops = new List + { + new + { + lat = 34.009608, + lon = -117.008835, + marker = "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/master/UICONS/pokestop/0.png", + } + }; + //var baseUrl = "http://10.0.0.2:9000"; + var baseUrl = "http://10.0.0.2:43200"; + var lat = 34.01; + var lon = -117.01; + var url2 = "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/master/UICONS/pokemon/201_f9.png"; + var staticMap = new StaticMapGenerator(new StaticMapOptions + { + BaseUrl = baseUrl, + MapType = StaticMapType.Pokemon, + TemplateType = StaticMapTemplateType.StaticMap, + Latitude = lat, + Longitude = lon, + Gyms = gyms, + Pokestops = pokestops, + SecondaryImageUrl = url2, + Team = Common.PokemonTeam.Valor, + Pregenerate = true, + Regeneratable = true, + }); + var id = staticMap.GenerateLink(); + var url = baseUrl + "/staticmap/pregenerated/" + id; + Console.WriteLine($"FinalUrl: {url}"); + } + + [Test] + public void Test_StaticMapPokemon_NoPregenerate_ReturnsIsTrue() + { + //var baseUrl = "http://10.0.0.2:9000"; + var baseUrl = "http://10.0.0.2:43200"; + var lat = 34.03; + var lon = -117.03; + var url2 = "https://raw.githubusercontent.com/nileplumb/PkmnHomeIcons/master/UICONS/pokemon/201_f4.png"; + var staticMap = new StaticMapGenerator(new StaticMapOptions + { + BaseUrl = baseUrl, + MapType = StaticMapType.Pokemon, + TemplateType = StaticMapTemplateType.StaticMap, + Latitude = lat, + Longitude = lon, + SecondaryImageUrl = url2, + Pregenerate = false, + Regeneratable = false, + }); + var id = staticMap.GenerateLink(); + var url = baseUrl + "/staticmap/pregenerated/" + id; + Console.WriteLine($"FinalUrl: {url}"); + } + } +} \ No newline at end of file diff --git a/test/TemplateTests.cs b/test/TemplateTests.cs new file mode 100644 index 00000000..9105577f --- /dev/null +++ b/test/TemplateTests.cs @@ -0,0 +1,209 @@ +namespace WhMgr.Test +{ + using System; + using System.Collections.Generic; + + using NUnit.Framework; + + using WhMgr.Common; + using WhMgr.Extensions; + using WhMgr.Services; + using WhMgr.Services.Webhook.Models; + + [TestFixture] + public class TemplateTests + { + [SetUp] + public void Setup() + { + } + + [TestCase(0)] + [TestCase(1)] + public void Test_TemplateGymPowerUpLevel_ReturnsText(int level) + { + var content = new List + { + "{{#if team_changed}}Gym changed from {{old_gym_team_emoji}} {{old_gym_team}} to {{gym_team_emoji}} {{gym_team}}", + "{{/if}}{{#if in_battle}}Gym is under attack!", + "{{/if}}**Slots Available:** {{slots_available}}", + "{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}{{#if is_ex}}{{ex_gym_emoji}} Gym!", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + }; + var embedData = string.Join("\r\n", content); + var data = new + { + team_changed = true, + old_gym_team = "Mystic", + gym_team = "Valor", + in_battle = true, + slots_available = 3, + power_up_level = level, + power_up_points = 100, + power_up_end_timestamp = 1234567890, + }; + var templateData = TemplateRenderer.Parse(embedData, data); + Console.WriteLine($"Template data: {templateData}"); + } + + [TestCase(2)] + [TestCase(0)] + public void Test_TemplatePokestopPowerUpLevel_ReturnsText(int level) + { + var content = new List + { + "{{#if has_lure}}**Lure Expires** {{lure_expire_time}} ({{lure_expire_time_left}} left)", + "**Lure Type:** {{lure_type}}", + "{{/if}}{{#if has_invasion}}**Expires:** {{invasion_expire_time}} ({{invasion_expire_time_left}} left)", + "**Type:** {{grunt_type_emoji}} | **Gender:** {{grunt_gender}}", + "**Encounter Reward Chance:**", + "{{#each invasion_encounters}}", + "{{chance}} - {{pokemon}}", + "{{/each}}", + "{{/if}}{{#if power_up_level}}**Power Level**", + "Level: {{power_up_level}} | Points: {{power_up_points}}", + "Time Left: {{power_up_end_time_left}}", + "{{/if}}**[Google]({{gmaps_url}}) | [Apple]({{applemaps_url}}) | [Waze]({{wazemaps_url}}) | [Scanner]({{scanmaps_url}})**" + }; + var expireTimestamp = 1654595380ul; + var embedData = string.Join("\r\n", content); + var now = DateTime.Now; + var lat = 34.01; + var lon = -117.01; + var lureExpireTime = now.AddMinutes(10); + var lureExpireTimeLeft = now.GetTimeRemaining(lureExpireTime).ToReadableStringNoSeconds(); + var powerUpExpireTime = expireTimestamp + .FromUnix() + .ConvertTimeFromCoordinates(lat, lon); + var powerUpExpireTimeLeft = now.GetTimeRemaining(powerUpExpireTime).ToReadableStringNoSeconds(); + var data = new + { + pokestop_id = "0011386f50d640c084b499d343af610b.16", + latitude = 34.01, + longitude = -117.01, + name = "Test Stop", + url = "http =//lh3.googleusercontent.com/ybUiI4LuqOw02mMiOSeXnLqVW0d1bJECu9IM5v86e5B6DlMbohrCzpBtRE8bNh5k0OENogqJUgkcBtmtKyPAIgHX_Zo", + last_modified = 1654568322, + enabled = true, + has_lure = false, + lure_id = 501, + lure_type = "Normal", + lure_expire_time = lureExpireTime.ToLongTimeString(), + lure_expire_time_24h = lureExpireTime.ToString("HH:mm:ss"), + lure_expire_time_left = lureExpireTimeLeft, + lure_expire_timestamp = expireTimestamp, + has_invasion = false, + grunt_type = "Flying", + pokestop_display = 0, + incident_expire_time = lureExpireTime.ToLongTimeString(), + incident_expire_time_24h = lureExpireTime.ToString("HH:mm:ss"), + incident_expire_time_left = lureExpireTimeLeft, + incident_expire_timestamp = expireTimestamp, + ar_scan_eligible = false, + power_up_level = level, + power_up_points = 250, + power_up_end_time = powerUpExpireTime.ToLongTimeString(), + power_up_end_time_24h = powerUpExpireTime.ToString("HH:mm:ss"), + power_up_end_time_left = powerUpExpireTimeLeft, + power_up_end_timestamp = expireTimestamp, + updated = 1654568322, + }; + var templateData = TemplateRenderer.Parse(embedData, data); + Console.WriteLine($"Template data: {templateData}"); + } + + [Test] + public void Test_TemplatePvpRankings_ReturnsText() + { + var embedData = @" +{{#each pvp}}{{@key}}\n + {{#each this}} + {{rank}} {{getPokemonName pokemonId}} {{getFormName formId}} {{cp}}CP @ L{{level}} {{formatPercentage percentage}}% + {{/each}} +{{/each}} +"; + var pvpRanks = new Dictionary> + { + { + PvpLeague.Great, new List + { + new PvpRankData + { + CP = 1420, + FormId = 0, + Level = 20, + PokemonId = 43, + Rank = 1, + Percentage = 99.05, + CompetitionRank = 1, + DenseRank = 1, + OrdinalRank = 1, + }, + } + }, + }; + var templateData = TemplateRenderer.Parse(embedData, new { pvp = pvpRanks }); + Console.WriteLine($"Template data: {templateData}"); + } + + [Test] + [TestCase("Pikachu", "Witch Hat")] + [TestCase("Charmander", "")] + [TestCase("Squirtle", null)] + public void Test_TemplateBasic_ReturnsIsEqual(string pokemon, string form) + { + var template = "{{name}} {{#if form}}{{form}}{{/if}} {{iv}}%"; + var templateModel = new + { + name = pokemon, + form, + iv = 100 + }; + var result = TemplateRenderer.Parse(template, templateModel); + Assert.IsNotEmpty(result); + Assert.AreEqual($"{pokemon} {form} 100%", result); + } + + [Test] + [TestCase("Visit <#1234567890> for more info")] + [TestCase("This Pokemon was IV scanned. For access to IV channels, please consider taking a look at <#286309264446849025> for more information!")] + public void Test_TemplateHtmlChars_ReturnsTrue(string text) + { + var templateModel = new + { + test = "John", + }; + var result = TemplateRenderer.Parse(text, templateModel); + Assert.IsNotEmpty(result); + Assert.AreEqual(text, result); + } + + [Test] + public void Test_TemplateForEach_ReturnsIsEqual() + { + var template = "{{#each products}}{{name}} {{type}}
{{/each}}"; + var templateModel = new + { + products = new List + { + new + { + name = "Charmander", + type = "Fire", + }, + new + { + name = "Diglett", + type = "Ground", + }, + }, + }; + var result = TemplateRenderer.Parse(template, templateModel); + Assert.IsNotEmpty(result); + Assert.AreEqual("Charmander Fire
Diglett Ground
", result); + } + } +} \ No newline at end of file diff --git a/test/TimeZoneTests.cs b/test/TimeZoneTests.cs new file mode 100644 index 00000000..9bfc2d4c --- /dev/null +++ b/test/TimeZoneTests.cs @@ -0,0 +1,52 @@ +namespace WhMgr.Test +{ + using System; + using System.Collections.Generic; + using System.Linq; + using NUnit.Framework; + using TimeZoneConverter; + + using WhMgr.Extensions; + + [TestFixture] + public class TimeZoneTests + { + [SetUp] + public void Setup() + { + } + + [TestCase("America/Los_Angeles", "Pacific Standard Time")] + public void Test_TZ(string tzIana, string tzWindows) + { + var converted = tzWindows.ConvertIanaToWindowsTimeZone(); + Console.WriteLine($"Windows to Iana: {converted}"); + + converted = tzIana.ConvertIanaToWindowsTimeZone(); + Console.WriteLine($"Iana to Windows: {converted}"); + + Assert.Pass(); + } + + [TestCase("Coordinated Universal Time")] + public void Test_CustomTZ_Pass(string timezone) + { + var tzInfo = timezone.GetTimeZoneInfoFromName(createUnknownTimeZone: true); + Console.WriteLine($"TZ: {tzInfo}"); + + var dateTime = DateTime.UtcNow.ConvertTimeFromTimeZone(timezone); + Console.WriteLine($"Converted: {dateTime}"); + + Assert.Pass(); + } + + [TestCase("Coordinated Universal Time")] + public void Test_CreateCustomTZ_Pass(string timezone) + { + var tzInfo = timezone.GetTimeZoneInfoFromName(createUnknownTimeZone: true); + Console.WriteLine($"TZ: {tzInfo.StandardName}"); + + Assert.Pass(); + } + } +} \ No newline at end of file diff --git a/test/UnitTest1.cs b/test/UnitTest1.cs new file mode 100644 index 00000000..4a57780b --- /dev/null +++ b/test/UnitTest1.cs @@ -0,0 +1,54 @@ +namespace WhMgr.Test +{ + using System; + using System.IO; + + using NUnit.Framework; + + using WhMgr.Services; + using WhMgr.Services.Subscriptions.Models; + using WhMgr.Utilities; + + [TestFixture] + public class Tests + { + [SetUp] + public void Setup() + { + // TODO: Test embeds/filters/alarms/discord config + // TODO: Test datetime extensions + // TODO: Test timespan extensions + // TODO: Test notification limiter + // TODO: Test pokemon and costume checks for webhooks and subscriptions + } + + [Test] + public void Test1() + { + Assert.Pass(); + } + + [TestCase] + public void Test_UrlAndFilePaths() + { + // Check if test file exists + var path = Path.Combine(Directory.GetCurrentDirectory(), "../../../../src/Program.cs"); + var exists = File.Exists(path); + Assert.IsTrue(exists); + + // Check if fetched data is not null + var data = NetUtils.Get(path); + Assert.IsNotNull(data); + } + + [TestCase] + public void Test_GitHubApi() + { + var git = new VersionManager("versx/whmgr"); + var version = git.GetVersion(); + Console.WriteLine($"Version: {version}"); + var tags = git.Tags; + Console.WriteLine($"Tags: {tags}"); + } + } +} \ No newline at end of file diff --git a/test/WhMgr.Test.csproj b/test/WhMgr.Test.csproj index 69fc5094..f01dd281 100644 --- a/test/WhMgr.Test.csproj +++ b/test/WhMgr.Test.csproj @@ -1,32 +1,27 @@ - - - - netcoreapp2.1 - - false - - - - - - - - - PreserveNewest - - - PreserveNewest - - - - - - - - - - - - - - + + + + net5.0 + + false + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + + + + diff --git a/update.bat b/update.bat deleted file mode 100644 index d036319f..00000000 --- a/update.bat +++ /dev/null @@ -1,27 +0,0 @@ -@echo off - -SET prjDir=%CD%\WhMgr -SET binDir=%prjDir%\bin\debug\netcoreapp2.1 - -:: Pull latest Git repository -echo "Pulling latest Git repository changes..." -git pull - -:: Build WhMgr.dll -echo "Building WhMgr..." -dotnet build - -:: Copy example config -::echo "Copying example files..." -::xcopy /s /e %prjDir%\examples\alerts\* %binDir%\alerts\ -::xcopy /s /e %prjDir%\examples\filters\* %binDir%\filters\ - -:: Copy locale translation files -echo "Copying locale translation files..." -xcopy /s /e %prjDir%\static\locale\* %binDir%\static\locale\ - -echo "Copying latest master file..." -xcopy /s /e %prjDir%\static\data\masterfile.json %binDir%\static\data\masterfile.json -xcopy /s /e %prjDir%\static\data\cpMultipliers.json %binDir%\static\data\cpMultipliers.json - -echo "Update Complete"